Skip to content

docs(#1445): 坏负载在手上之后重做勘破 —— 判据仍不存在,这次是逐条点名排除 - #1457

Merged
jinjunnn merged 2 commits into
alphafrom
feat/1445-fake-success-gate
Sep 26, 2026
Merged

jinjunnn merged 2 commits into
alphafrom
feat/1445-fake-success-gate

Conversation

@jinjunnn

Copy link
Copy Markdown
Owner

Refs #1445

不改代码。AC1 仍未满足,票保持 open。 这是 #1445 第二轮勘破:上一轮的前提「失败臂没被观测过」被订正(没观测到的是 D 的信封元数据,文本是 #1433 走生产传输实抓的),按订正后的前提重做,结论仍是「站得住的结构性判据不存在」—— 但这次是逐条点名排除,每条带实测。

新量到的事实

  • vendor 源码(npm 上 exa-mcp-server 3.1.9 / 3.2.1 / 3.4.0 / 3.4.1 的构建产物):四版都给这句限流提示置 isError: true,文本与 D 逐字相同 ⇒ D(非 isError)不是开源代码发的,是 mcp.exa.ai 托管端自己那一层的产物。
  • Exa 的真实零命中本身就是一段散文:{content:[{type:"text",text:"No search results found. Please try a different query."}]},无 isError / _meta / structuredContent,信封与 D 逐格相同 ⇒ 「零结果 vs 散文」在结构上不可分。这是本轮最硬的一条:任何拒 D 的结构性判据同时拒掉 Exa 的真零命中。
  • 成功渲染半年内换过一次(3.1.9 直出 /context 整段 → 3.2.1 起 Title:/URL: 行),_meta.searchTime 3.2.1 起才有 ⇒ 押在渲染或 _meta 上的闸,失败方向是拒载全部真结果(有发行版实证,不是假设)。
  • 今天额度已重置:nokey Exa / keyless Parallel 各抓一次完整原始响应入库;四种真实负载(D / 零命中 / 今日 Exa / 今日 Parallel)过两份生产 parseResponse 全判成功(#1449 合入后 packages/core 那份重跑,四种仍全判成功 —— 它收的是契约信号,对这四种负载没有可消费的信号)。

逐条排除

十条候选(契约信号 / structuredContent / _meta / 关键字 / URL 在场 / 条目形状 / 长度 / 回显端点 / 跨查询字节相同 / 限流头)逐条带数字排除,见 docs/architecture/2026-09-24-exa-mcp-failure-signal-recon.md 《2026-09-26 补勘》。等价类论证:对只能看文本的判据,D 与「Exa 真零命中」「3.1.9 时代的真结果」「托管端下一次换渲染后的真结果」同类,任何拒 D 的结构性判据拒整类;类内唯一能单独挑出 D 的特征是文案内容 = 关键字匹配。

什么条件下判据会出现(写在勘破里,不替 owner 裁)

  • 托管端也置 isError: true(开源版已如此)或继续走 429(09-24 11:35Z 起的现状)—— 两者现有代码都判得出,D 今天不可达(09-26 nokey 实抓为正常结果)。
  • 若愿意放弃「零命中放行」并接受「渲染变更 ⇒ 本地搜网断到下一次发版」,条目形状识别 + env 逃生口是唯一能同时拒 D、放 A/P 的做法 —— 偏好裁决。

与 #1449(已合,8f0fc0900)的一致性

两边一致 = 都只消费契约信号(HTTP 状态 / JSON-RPC error / isError / 结构化 {error}),谁也不多一条文本判据。本 PR 不碰 packages/core/src/tool/websearch.ts,也不碰 packages/opencode/src/tool/mcp-websearch.ts。

本地门

  • north-star guard:✓ zero upstream package edits,rc=0(改动只在 docs/)
  • docs gate:✓ 70 relative link(s) resolve across 3 file(s),rc=0(先用一个已知坏链接证明检查器会红:rc=1)
  • NUL bytes:✓ 8432 个版本控制文件零字面 NUL 字节,rc=0
  • packages/opencode bun test test/tool/alpha-websearch-failure.test.ts:45 pass / 0 fail
  • pre-push 的 alpha-check.sh 全量:结果见回报。前两次 push 各被同一条红拦住:packages/ui-mac/src/main/process-fence-engine.test.ts 三格超时(60.8 s / 61.5 s;第三格「围栏臂没跑成,本格作废」是级联),其余 13 步全绿。那条红不是本 PR 的,是 ac#1454 正在修的那条,根因已定位:超时上限是 process-fence-engine.test.ts:177 里 api() 自己的 AbortSignal.timeout(60_000);在等的是引擎开机时 packages/opencode/src/config/config.ts:458 的 Npm.install(装 @opencode-ai/plugin,plugin_origins 非空时 waitForDependencies() 让第一个请求等它),真打 registry.npmjs.org。本 lane 的旁证:引擎 /global/health 0.8–1.3 s 就绿,第一个 /project/current 卡 65 s / 81 s / 221 s;卡住期间 lsof -nP -i -p <engine> 采样到 3 条 ESTABLISHED 到 198.18.1.37:443(= registry.npmjs.org 的代理 fake-IP)。本 PR 只动 docs/,不碰任何 .ts。

🤖 Generated with Claude Code

jinjunnn and others added 2 commits September 26, 2026 01:02
前提订正:上一轮把「D 的信封元数据没观测到」说成「失败臂没观测到」。文本是 #1433 走生产传输
实抓的(246 字逐字),所以两条臂都立得起来。按这个前提重做:

- 读 npm 上 exa-mcp-server 3.1.9 / 3.2.1 / 3.4.0 / 3.4.1 的构建产物:四版都给这句限流提示置
  isError:true ⇒ D(非 isError)不是开源代码发的,是 mcp.exa.ai 托管端自己那一层的产物;
- Exa 的真实零命中就是一段散文("No search results found. …"),无 isError / _meta /
  structuredContent,信封与 D 逐格相同 ⇒ 「零结果 vs 散文」在结构上不可分;
- 成功渲染 3.1.9 → 3.2.1 换过一次(/context 整段 → Title:/URL: 行),_meta 3.2.1 起才有 ⇒
  任何押在渲染或 _meta 上的闸,失败方向是拒载全部真结果;
- 今天额度已重置:nokey Exa / keyless Parallel 各抓一次完整原始响应入库;
- 四种真实负载(D / 零命中 / 今日 Exa / 今日 Parallel)过两份生产 parseResponse:全判成功。

十条候选判据逐条带实测排除;等价类论证说明「不押无契约字段 + 不匹配文案 + 拒 D + 放零命中」
四条约束互斥。不改代码。AC1 仍未满足,票保持 open。

Refs #1445

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
rebase 到 origin/alpha@8f0fc0900 之后,把 D / 零命中 / 今日 Exa / 今日 Parallel 重新喂进
packages/core 的 parseResponse:输出逐字节未变。#1449 收的是契约信号(isError / 非 2xx /
结构化 {error}),而这四种负载一条契约信号都不带,所以两侧的结论同一:不新增文本判据。

Refs #1445

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@jinjunnn
jinjunnn merged commit 1a4b57e into alpha Sep 26, 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.

1 participant