Repository navigation
docs(#1448): 收窄逃生开关的作用面 —— 它只管我们自己提供的两条搜网腿 - #1451
Merged
Merged
Conversation
方案基线 §三 S3 写的是「ALPHA_WEBSEARCH_DISABLE=1 之后,本地与云两侧都不得有活的 web search 执行路径」。那句话比这个开关的用途宽,#1433 的实测打到的正是这句话, 不是闸门坏了。 owner 裁决 2026-09-24:如果有闸门,也只关注我们自己提供的搜网功能。据此: - 基线 §三 S3 收窄成「我们自己提供的两条搜网腿(本地 websearch + 云 cloud_cloud_web_search)都不得有活的执行路径」,并新增〈S3 的作用面〉一节, 写清来历(ADR-009 决策 A 第 4 条,原文就叫「逃生开关」,运维应急闸非产品能力)、 三条理由,以及 #1433 两臂实测的原始数字; - ADR-046 D3 同句写宽,一并就地修订(amended: 2026-09-24),并在 DECISIONS.md 的索引行登记; - 判决口径本身只看工具身份:webSearchToolDenial 首句是 if (!isWebSearchToolId(tool)) return undefined,入参里没有任何目的地轴 —— 一道以工具身份为判据的闸,结构上管不到「模型改用别的工具去打搜索引擎」。 零行为改动:diff 里一行生产代码都没有,判据一条未动。 明确不做:不收窄 webfetch 的批准面(#1412 已合,owner 已接受其残留); 不实现任何「搜索引擎域名识别」(补不完的域名清单 = 手写别人文法的替身)。 Fixes #1448 Refs #1414 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
我们有一个「关掉搜网」的开关。打开之后,模型确实搜不了我们提供的搜网工具 —— 但它换了个工具,
自己去打 duckduckgo 和 bing 的搜索页,照样搜到了。
owner 2026-09-24 裁决:他从来没有提过「关掉搜网」这个需求,他的需求一直是本地云端搜网都要可用;
如果有闸门,也只关注我们自己提供的搜网功能。 所以这不是闸门坏了,是我们把它的作用面写宽了 ——
这张 PR 只做一件事:把那句话改成实话。零行为改动。
改了什么
docs/design/2026-09-23-1414-web-tools-account-routing-baseline.md§三 S3websearch+ 云cloud_cloud_web_search)都不得有活的执行路径」;新增〈S3 的作用面〉一节记来历、三条理由与#1433两臂实测.claude/rules/adrs/ADR-046-…mdD3amended: 2026-09-24);后果表 kill-switch 行同改.claude/rules/DECISIONS.mddiff 里没有一行生产代码(
git diff --name-only origin/alpha HEAD三个文件全是.md),判据一条未动。
为什么是收窄,不是加一道闸
ALPHA_WEBSEARCH_DISABLE出自 ADR-009 决策 A 第 4 条,原文就叫「逃生开关」(
ADR-009-websearch-default.md:54),默认关闭,从未被当成功能交付。(
packages/ext/src/cloud-websearch-kill.ts:208-218的#223R6 注释:非 ASCII 名经McpCatalog.sanitize抹平后任何分类器都看不见);按目的地识别只会更糟 —— 那是一份永远补不完的域名清单,正是「手写别人文法的替身」那类错。
#1443已合)。判决口径本身就写着这件事:
webSearchToolDenial(
packages/ext/src/cloud-websearch-kill.ts:274-288)第一句是if (!isWebSearchToolId(tool)) return undefined—— 入参只有工具名、env、server 归属,没有任何目的地轴。一道以工具身份为判据的闸,结构上管不到「模型改用别的工具去打搜索引擎」。
#1433的实测(已如实记进基线)websearch不在其中(开关生效),webfetch在webfetch,头两次打duckduckgo.com/html/?q=…与www.bing.com/search?q=…completed,各拿回 12,323 B / 12,295 B 结果页,随后抓了三篇文章并正常作答tool_calls生产出网策略代理对那两个目的地是
deny/unregistered/ 403(对照臂:mcp.exa.ai:443、search.parallel.ai:443allow/200,刻意未登记的example.com:443403);而#1412(PR#1426,已合)让未登记目的地可由用户当场批准(
network-egress-proxy.ts:214-236)。⇒ 逃生开关拦得住我们自己的两条腿,拦不住模型自己想出来的路 —— 而后者按裁决本就不在它的辖区内。
两臂都入库,因为结论正是「行为由驱动句决定」,只留一臂就是在骗自己。
主动没做的
webfetch的批准面(#1412/ PR#1426,owner 已接受其残留);文档影响
按
maintain-repository-docs:设计基线 + ADR + 决策索引,三处都落在既有的唯一规范路径上,无新增/移动/删除文件。
本地门
error TS0 条bun testcontracts-consumer / extbun test src(ui-mac 全量)那条红不是本 PR 引入的:
src/main/mcp-server-derivation.test.ts:207期望X-Token: "t"、实得"***"。根因是上游82d4c8903 fix(opencode): redact credentials in debug config (#50956)—— 它随57646831b这次 sync 首次进入本仓(
git merge-base --is-ancestor 82d4c8903 57646831b^1为假),而该测试靠真引擎的debug config读回配置。独立对照臂:同一红在另一棵 worktree(1445-exa-fake-success,同 commit,本 PR 不存在时起跑)逐字复现。本 PR 的
git diff --name-only origin/alpha HEAD非
.md文件数 = 0。该红归#1381的判据,不在本票范围内,未登记进scripts/known-fails.tsv(登记会让那道闸此后对真缺陷恒绿,是主 session 的裁决)。Fixes #1448
Refs #1414
🤖 Generated with Claude Code