docs(decisions): ADR-009 由 ADR-046 取代 —— 两条腿都活着,账户信号只决定云腿在不在 (#1432) - #1439
Merged
Merged
Conversation
owner 2026-09-23 裁决「本地与云的 web 工具都要活,按账户选路」,直接推翻 ADR-009 决策 B 的 B1(登录态门控 + 云优先 + 对本地腿 force-off)。那份文件还在,还写着旧规矩 —— 后面每一个照着它做的人都会把新规矩又做回旧的,而他不会知道自己做错了。 **supersede,不是就地修订**(判据实读,不是印象):ADR-009 上一次(2026-08-03)就地 修订的第一句逐字写着「本条不是一次新决策……B1 的登录态门控、B2 的 kill-switch 语义一个字 都没变」,而这一次改的是决策实质。再往同一份文件贴一段,同一个 id 下会同时存在两条互相 矛盾的 B1。另三条理由在方案基线 §六(形状被推翻不是参数 / 六轮收口是史料 / 决策 A 的适用面 回到 2026-06-18 的原始形状)。 新 ADR-046 含基线 §六 点名的 D1–D5,其中 D4 是**事实订正**(不是新决策),改正 ADR-009 已漂的两处: - B1 的判据写的是 `ALPHA_CLOUD_TOKEN`,实读是 `ALPHA_MCP_TOKEN` (`packages/ui-mac/src/main/server.ts:334`、`alpha-config-injection.ts:100`,`#1195` 换轴); - 「云 MCP 零凭证通道、走标准 MCP OAuth」与实读的 `headers.Authorization: "Bearer {file:…}"` + `oauth: false` 不符 (`packages/ui-mac/src/main/cloud-sidecar-config.ts:33-50`)。 D3 的 kill-switch 连带面按实读登记,比勘破的措辞多一个条件:整 server 暗掉带走该 server 全部工具,这件事在**凭证缺席**时无条件成立;而 kill-switch 只在 **ext 未装载 / `{file:}` 读不到**的降级态成立 —— 正常态下 `packages/ext/src/plugin.ts:118` 的 config 钩子第一句 无条件调 `installCloudMcp()`,把真定义换回 `enabled:true`,兄弟工具回来,只有 web search 仍被 `tool.execute.before` 拦住。ADR-009 B2 那条「不误伤兄弟」的不变量因此在正常态成立。 勘破自陈这一格从未在装载实例上复验(§9 第 6 条),ADR 里如实写了「要当事实用之前先跑」。 ADR-009 **正文一字不改**(它是史料),只改 frontmatter:`status: amended` → `superseded` 加 `superseded-by: ADR-046`;键名用仓内既有约定(`DECISIONS.md` 第 4 行与 ADR-001/ADR-020 的 `superseded-by`),不是基线里写的 `superseded_by`。决策登记表两处:ADR-009 那行状态改 `superseded → ADR-046`(只改状态列),并追加 ADR-046 一行。 主动没做的: - 不碰 `ADR-035`(`#1424` 在改它的事实并给 `webfetch` 立普查闸),两条 lane 在 DECISIONS.md 上改的不是同一处(我改第 18 行与表尾追加,ADR-035 那行未动); - 不动 `alpha-work/governance/architecture-decision-registry.md` —— 实读该仓 `ADR-009` 零命中, 跨仓登记簿只映射跨仓组合域,本决策由 alpha-code 独占(alpha-work ADR-003 决策 1/3); - 不给 ADR-009 正文加「已被取代」横幅(那是正文,票面边界只许改 frontmatter); - 不改基线正文里那句更粗的 kill-switch 措辞(超范围,回报编排者)。 Fixes #1432 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.
这张 PR 做什么
owner 2026-09-23 裁决「本地与云的 web 工具都要活,按账户选路」,推翻了
ADR-009决策 B 的 B1(登录态门控 + 云优先 + 对本地腿 force-off)。那份文件还在,还写着旧规矩 —— 后面每一个照着它做的人
都会把新规矩又做回旧的,而他不会知道自己做错了,因为文件就是这么写的。
本 PR 只动决策资产,零代码行为变更:新建
ADR-046、把ADR-009标成superseded、决策登记表两处。选路本身归
#1411(CODE-1)与#1431(CODE-2)。判据:supersede,不是就地修订
不是印象 ——
ADR-009上一次(2026-08-03)就地修订的第一句逐字写着「本条不是一次新决策……B1 的登录态门控、B2 的 kill-switch 语义一个字都没变」,而这一次改的是决策实质。再往同一份
文件贴一段,同一个 id 下会同时存在两条互相矛盾的 B1。另三条理由在方案基线 §六
(形状被推翻不是参数 / 六轮收口是史料 / 决策 A 的适用面回到 2026-06-18 的原始形状)。
改了什么(3 个文件,+197 −2)
.claude/rules/adrs/ADR-046-web-tools-two-legs-account-routing.md.claude/rules/adrs/ADR-009-websearch-default.mdstatus: amended→superseded,加superseded-by: ADR-046);正文一字未动(git show的 diff 恰好 3 行).claude/rules/DECISIONS.mdADR-009那行状态列改superseded → ADR-046(只改状态列),表尾追加ADR-046一行D4 是事实订正(不是新决策),改正
ADR-009已漂的两处:ALPHA_CLOUD_TOKEN,实读是ALPHA_MCP_TOKEN(
packages/ui-mac/src/main/server.ts:334、alpha-config-injection.ts:100,#1195换轴);headers.Authorization: "Bearer {file:…}"+oauth: false不符(
packages/ui-mac/src/main/cloud-sidecar-config.ts:33-50)。D3 比勘破的措辞多一个条件(实读
b03e79da1):整 server 暗掉会带走该 server 上的每一个工具 ——这件事在凭证缺席时无条件成立;而 kill-switch 只在 ext 未装载 /
{file:}引用读不到的降级态成立。正常态下
packages/ext/src/plugin.ts:118的config钩子第一句无条件调installCloudMcp()(packages/ext/src/cloud-websearch-kill.ts:378),把真定义换回enabled:true,兄弟工具回来,只有 web search 仍被
tool.execute.before拦住 ⇒ADR-009B2 的「不误伤兄弟」在正常态成立。勘破 §5/§8.3 与基线 §三「已知不修」把这个条件性退化写成了无条件事实。ADR 里按
条件如实登记,并写明勘破自陈这一格从未在装载实例上复验(勘破 §9 第 6 条)。
文档影响
decisions。落点是受保护执行资产.claude/rules/adrs/+ 其索引.claude/rules/DECISIONS.md,按
maintain-repository-docs的规矩改(只补 supersession 链接与索引行,不删既有 ADR、不动正文)。alpha-work的跨仓登记簿不动:实读该仓ADR-009零命中,登记簿只映射跨仓组合域,本决策由 alpha-code 独占(
alpha-work:ADR-003决策 1 与 3)。本地门(真实输出,worktree
1432-code3,origin/alpha@b03e79da1)pre-push 钩子跑的
scripts/alpha-check.sh全 14 步,PUSH_RC=0:5321 pass / 0 fail,与派发给出的 base 逐字相同。websearch-copies.test.ts仍绿(它只扫packages/*/src/**/*.ts(x),structurally 看不到 Markdown)。✗ 3 broken relative link(s)/ rc=1;它也真的抓到了我第一版写错深度的相对链接(
../../docs/…从.claude/rules/adrs/解析到.claude/docs/…),改成../../../后才绿。check_docs_contract.py --strict(指向本 worktree):alpha-code … PASS;仓外 3 条 ERROR(alpha-platform 1 / alpha-web 2)在我改动之前的同一次基线运行里逐字相同,与本 PR 无关。
package-command-engine-visibility.test.ts报
2 pass / 1 fail,报错是engine exited before listening … ServeError—— 它起真引擎serve --port $((4600+random%2000)),绑不上端口。同一棵树同一文件单跑 3 pass / 0 fail,而本 PR 的 diff 里没有一行
.ts。第二次 push 全 14 步绿。主动没做的
ADR-035(#1424在改它的事实并给webfetch立普查闸)。两条 lane 在DECISIONS.md上改的不是同一处:我改第 18 行(ADR-009 状态)与表尾追加,
ADR-035那行未动。ADR-009正文,也不给它加ADR-001那种「已被取代」正文横幅 —— 票面边界只许改frontmatter。
status+superseded-by在文件头 4~7 行,打开即见。superseded-by用连字符,不是基线里写的superseded_by:仓内既有约定在DECISIONS.md第 4 行与
ADR-001/ADR-020的 frontmatter 里,键名从没有人解析(两条检索轴查过scripts/、测试与 workflow,零命中)。
alpha-work的跨仓登记簿(理由见「文档影响」)。Fixes #1432
Refs #1414
🤖 Generated with Claude Code