Skip to content

verify(#1433): 四格 × 搜网实测 —— 零余额真账户的 402 wire body 第一次跑出来 - #1453

Merged
jinjunnn merged 1 commit into
alphafrom
1433-verify
Sep 24, 2026
Merged

jinjunnn merged 1 commit into
alphafrom
1433-verify

Conversation

@jinjunnn

Copy link
Copy Markdown
Owner

REQ-1414 VERIFY-1。基线 §九 第 5 条 —— 「登录无额度」那一格只有推断、没有实际
wire body —— 闭合了。

矩阵最终状态

格 发不发 tool_calls 本地腿 云腿
登出 / BYOK 真绿 真绿 6/6 不在场
登录有额度 真绿 真绿 6/6 未测
登录无额度 真绿 真绿 6/6 真绿 —— 402 原文入库
kill-switch 反向臂真绿(工具表 8→7) 反向臂真绿 6/6 零出网 不在场

402 那一格:先证明它不是 401

授权码换令牌 → 200,token sub=u_0000000c1433 / aud=…/mcp /
scope=[cloud.dispatch,cloud.read,artifact.read];同一张 token 打 tools/list →
200,拿回六个云工具的完整定义。凭证面是通的,后面的拒绝只可能来自额度面。

gateway 封印付费路由(model.invoke 与 cloud.dispatch 两个 purpose 各打一次,
两次 body 逐字相同):

HTTP/1.1 402
{"error":{"message":"预授权拒绝: 额度不足:本次最大责任 15 fen(会员窗可承接 0),
钱包可用余额不够钱包腿 15 fen(含在途预留)","code":"account_wallet_insufficient"}}

一个要点必须说清:到达模型的那一层状态码是 200,不是 402。
402 只活在 gateway↔cloud-mcp 那一跳,cloud-mcp.ts:261 的 text(body, !r.ok)
把它转成 MCP isError:true 的内容块。基线 AC2 说的「402 原样到达模型」
要按内容读,不是按状态码读 —— 两层都有原文,code 确实是 failure-codes.ts
注册过的 account_wallet_insufficient。

生产上留下了什么(实读,不是估计)

只 INSERT,零 UPDATE,零 DELETE,没碰 u_a3b0aadfe01e:
users ×1(phone='00000001433' —— 11 位但以 0 开头,结构上不可能是真手机号)

  • oauth_codes ×2(用完被产品自己删了)。

收工后两个库各读一次:users 3 → 4;oauth_codes 13 → 13;
该 tenant 的 ledger_facts = 0(总数 1361 未变);payment_orders = 0。

⇒ 「被拒的 preauth 零副作用」现在是实测的,不是读注释。 对账与收入统计一格不受影响。

两条新事实,各自已开票

  • kill-switch 下模型改用 webfetch 打 DuckDuckGo/Bing 并拿回搜索结果
    → #1448 收窄基线 §三 S3 的措辞(闸门只管我们自己提供的两条搜网腿);
  • Exa 免费档的限流提示以「成功的搜索结果」形态回来 → #1445。

仍未测,理由写在证据 README §7

  • 云腿 · 登录有额度 —— 要一个有真余额的账户,充值会真的动钱。
    注意它与「无额度」不是同一条判据:它要证明放行,不是拒绝。
  • 打包实例上的真模型回合 —— providers.add 拒收回环 base URL
    (network-egress-derived.ts:96,owner 2026-09-21「不再支持本地模型」的裁决),
    #1144 那套配方结构上失效;三条替代形状列在 §7.1,都不是 VERIFY 票能自己定的。

打包实例的工具表那一半已经拿到:四个模型 id 在 kill-switch 下全部不含
websearch、登出态全部含 —— #1411 的四格表在打包产物上复现。

凭据泄漏闸

key 的完整值 / 前 12 / 后 12 三种片段在证据目录 0 命中,正对照针 14 处命中
(证明扫描真读了文件);≥60 字符的长串只有搜索结果里的 URL slug;
合并前我另跑一次独立扫描,同样 0 命中。

模型调用总计 17 次(全部 deepseek-flash);云腿那一格 0 次模型调用、
0 分钱被扣
—— preauth 就被拒了。

Refs #1414
Fixes #1433

🤖 Generated with Claude Code

REQ-1414 VERIFY-1。基线 §九 第 5 条(「登录无额度」那一格只有推断,没有实际
wire body)闭合。

拿到的:

- 真模型实测三格(登出/BYOK、登录有额度、登录无额度)都真的发了 `websearch`
  并拿回结果;kill-switch 那一格工具根本不在模型的工具表里(8→7),是反向臂真绿。
- 本地腿传输 18/18,主权拒绝 6/6 且零出网;`#1415` 登记的两个 websearch 端点
  第一次被**真的出网策略代理**判成 allow(反向臂 `example.com` 403)。
- 零余额真账户的云腿:gateway `HTTP 402` + `account_wallet_insufficient`,
  两个 purpose 逐字相同;到模型那一层是 MCP `200` + `isError:true`(转换点在
  `cloud-mcp.ts` 的 `text(body, !r.ok)`)—— 状态码在两跳之间会变,基线 AC2
  说的「402 原样到达模型」要按内容读,不是按状态码读。
- 被拒的 preauth 零副作用是实读的:该 tenant 的 `ledger_facts` = 0、
  `payment_orders` = 0,账本总数未变。
- 打包产物上复现了 `#1411` 的四格工具表。

两条新事实,各自已开票:

- kill-switch 下模型改用 `webfetch` 打 DuckDuckGo/Bing 并拿回搜索结果 → `#1448`
  收窄基线 §三 S3 的措辞(闸门只管我们自己提供的两条搜网腿)。
- Exa 免费档的限流提示是以「成功的搜索结果」形态回来的 → `#1445`。

仍未测(理由写在 README §7):云腿 · 登录有额度(要真余额,会动钱)、
打包实例上的真模型回合(`providers.add` 拒收回环 base URL,`#1144` 那套配方
结构上已失效)。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@jinjunnn
jinjunnn merged commit 0cfffe8 into alpha Sep 24, 2026
5 of 6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[REQ-1414][VERIFY-1] 四种账户态下模型到底搜不搜得到

1 participant