Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude/rules/DECISIONS.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
| [ADR-031](adrs/ADR-031-hybrid-user-memory.md) | 混合用户记忆——本地优先、选择性云发布与有界上下文 | proposed | 2026-07-19 |
| [ADR-033](adrs/ADR-033-permission-kernel-takeover.md) | Permission 内核接管:REQ-090 #433 的 permission 引擎/契约面走 L3 冻结接管(ADR-029 §3;文件级守卫 `:(exclude)` 例外 + 生成文件整类移出;4 个 B 类连带退回 seam;放弃上游 permission 白嫖=单向门;逐文件审计 `docs/audits/2026-07-21-north-star-guard-upstream-delta.md`;#456 owner 拍板) | accepted | 2026-07-21 |
| [ADR-034](adrs/ADR-034-frontend-rolling-pin.md) | 前端滚动 pin(B 方案):packages/{app,ui} 从「冻结钉 tag」迁到「pin + 补丁序列」持续白嫖上游前端(**supersede ADR-020**,反转 ADR-016 前提);`frontend-pin.lock` + `alpha-frontend.patch` SOT;日常 sync `apply_alpha_frontend_delta`(pin+补丁,不擦 seam/不丢上游);月更 bump 升 pin(人门禁,见 `frontend/README.md`);owner 2026-07-21 拍板 | accepted | 2026-07-21 |
| [ADR-035](adrs/ADR-035-websearch-tool-takeover.md) | web search 工具失败面接管:`packages/opencode/src/tool/{websearch,mcp-websearch}.ts` 两个**源文件**走 ADR-029 L3 文件级 `:(exclude)`,解锁 #489 失败诚实(禁伪成功 / 任何非 2xx LOUD / 结构化零命中与 provider error 分辨 / 传输有界);上游测试文件**不接管**(新增断言落 alpha 自有 `test/tool/alpha-websearch-failure.test.ts`,避免整文件 exclude 连带放行 `registry.ts` 的 `webSearchEnabled` 断言);云路径 `catalog.ts` / `code-mode.ts` 已 loud,**刻意不收编**,且云侧无状态透传(归 alpha-platform#105);顺带把 `scripts/alpha-check.sh` 的守卫与 `alpha-ci.yml` 恢复 1:1(此前无 exclude 表、自 ADR-033 起恒假红);放弃这两文件上游白嫖=单向门,owner 2026-07-25 拍板 | accepted | 2026-07-25 |
| [ADR-035](adrs/ADR-035-websearch-tool-takeover.md) | web search 工具失败面接管:`packages/opencode/src/tool/{websearch,mcp-websearch}.ts` 与 `packages/core/src/tool/websearch.ts` 共**三个**源文件走 ADR-029 L3 文件级 `:(exclude)`,解锁 #489 失败诚实(禁伪成功 / 任何非 2xx LOUD / 结构化零命中与 provider error 分辨 / 传输有界);上游测试文件**不接管**(新增断言落 alpha 自有 `test/tool/alpha-websearch-failure.test.ts`,避免整文件 exclude 连带放行 `registry.ts` 的 `webSearchEnabled` 断言);云路径 `catalog.ts` / `code-mode.ts` 已 loud,**刻意不收编**,且云侧无状态透传(归 alpha-platform#105);顺带把 `scripts/alpha-check.sh` 的守卫与 `alpha-ci.yml` 恢复 1:1(此前无 exclude 表、自 ADR-033 起恒假红);放弃这两文件上游白嫖=单向门,owner 2026-07-25 拍板 | accepted | 2026-07-25 |
| [ADR-036](adrs/ADR-036-single-engine-generation-for-session-send.md) | 会话发送保持**单一引擎代次**:会话页 composer 与时间线续钮从 v2 durable 队列(`c.v2.session.prompt`)改回 v1 `session.promptAsync`,与首页 `startChat` 同一条;档位随每条消息走 `PromptInput.agent`,v2 的 switchAgent + 权威读 + CAS 回滚账本一并退役。理由是事实而非偏好:`packages/core`(v2)**没有 MCP 运行时**、**没有 alpha ext 插件的钩子挂载点**(`tool.execute.before/after`、`experimental.chat.system.transform`),而云搜索/kill switch/prompt 接管/工厂拒绝/skill 注入整个主权层都建在 v1 钩子上;#652 实测 v2 受理 8 次 failed 8 次零成功且 UI 零投影。REQ-125 的 UI 成果(直挂 composer/审批停靠/任务卡/上下文 ring/斜杠登记)全部保留;v2 读侧(模型目录、switchModel、PermissionV2 feed)不受限。重新迁移的准入判据三条见 ADR §决策 3。owner 2026-07-28 拍板 | accepted | 2026-07-28 |
| [ADR-037](adrs/ADR-037-engine-generation-switch-is-its-own-change.md) | **引擎代次切换是一次独立变更**(类级规矩,不裁决具体链路):把任一产品链路从一代引擎 API 改到另一代 —— **含部分链路、含「只改一个入口」、含反向退回** —— 必须独立成票、独立成 PR、独立决策(ADR)、独立验证,不得作为功能提交的附带项;切换前必须交一份**能力清点表**,逐项用 `file:line` 或可复现命令证明「新代次有没有这条链路依赖的能力」(强制六轴:凭证面/工具运行时/插件钩子挂载点/事件投影面/持久化面/审批面),**缺项的唯一合法处置是不切**;合并闸的判据只认**端到端可观测行为**(跑生产代码 + 走用户入口 + 断言渲染/落库/真实请求 + 自己先反向绕过一遍确认转红),typecheck 绿、整包全绿、对抗审计过、源码文本断言、schema 有字段、HTTP 200 一律不算;同一流程的全部入口必须同代次,**半代次迁移禁止**。每条决策附「如何检验某个 PR」。立规代价来自 #652:PR#569 把切换夹带进 UI 重构,产出「每个会话只能发第一条消息」并活了四天,期间 2526 条测试全绿且过了对抗审计 —— 逐条解剖见 [`docs/audits/2026-07-28-652-engine-generation-split-incident.md`](../../docs/audits/2026-07-28-652-engine-generation-split-incident.md) | accepted | 2026-07-28 |
| [ADR-038](adrs/ADR-038-v1-permission-ask-deadline.md) | **v1 审批请求的应答期限**:`packages/opencode/src/permission/index.ts` 按 ADR-029 §3 进入 ADR-033 的 L3 接管集(单文件),给 `Permission.ask` 的 `Deferred.await` 加期限 —— 到点**只能失败**(`Effect.timeoutOrElse` 的 orElse 无成功分支,「到点自动放行」在类型层写不出来)、失败具名(`UnansweredError`,继承 `RejectedError` 以复用 processor 的 blocked 分支)、文案含「没有放行/是哪个请求/下一步做什么」、并广播 `permission.replied{reject}` 让呈现面收卡;默认 300s,`ALPHA_PERMISSION_ASK_TIMEOUT_MS` 可覆盖,非法值回落默认而非"无期限"。L0 接缝(plugin `permission.ask` 只能改判定)、壳侧看门狗(只在打包壳存在 + v1 reject 会连带拒绝同会话全部 pending)、L1/L2(引擎不经 vite 管道;`patch-server-version.ts` 式产物字符串替换无法 loud-fail 承载安全语义)逐条不可行证据见 ADR §2。放弃该文件上游白嫖 = 单向门。owner 2026-07-28 裁决 [#668](https://github.com/jinjunnn/alpha-code/issues/668) 半场 E | accepted | 2026-07-28 |
Expand Down
6 changes: 5 additions & 1 deletion .claude/rules/adrs/ADR-035-websearch-tool-takeover.md
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,11 @@ issue: https://github.com/jinjunnn/alpha-code/issues/489

## 决策

**按 [[ADR-029]] L3 冻结接管以下两个文件**(逐要件登记):
**按 [[ADR-029]] L3 冻结接管以下**三个**源文件**(逐要件登记):

> **事实更正(2026-09-24,`#1424` 勘破)**:本行初版写「两个文件」,而紧随其后的清单自
> 2026-07-26(#223 R3 Blocker 1)起就是**三个** —— 第三个是 `packages/core/src/tool/websearch.ts`。
> 本 ADR §背景 第 59 行「接管面不变(仍是三个源文件)」是对的,是这一行没跟上。

### 1. 被接管表面(退出上游同步集,alpha 全所有权 → L3)

Expand Down
Loading