## Covers `alpha-work#49` AC4/AC5/AC7:为非 MCP OAuth 的已审核服务连接提供静态 `AlphaConnectionHandlerV1` 与 main-owned `ConnectionRecordV1`;未知 handler 在 auth 前要求更新 App。 ## Solution baseline [REQ-128 accepted baseline](https://github.com/jinjunnn/alpha-code/blob/f923f286290d8d14fe496fa2b2886580abefb666/docs/design/2026-07-30-req128-extension-package-baseline.md) §2.6–§2.7。 ## Boundary - handler 只能编译进 main 静态 allowlist,固定 `begin(attempt) / status(attemptId) / disconnect(connectionId)`。 - `ConnectionRecordV1` repository 由 main 拥有;service identity/reuse key 来自 handler bounded result,renderer 不传。 - Catalog 只引用稳定 `connectionHandlerId` 和 prerequisite ID,不含 handler code/token。 ## Development plan 1. 冻结 handler/record/state/reuse/disconnect contract 与 reason codes。 2. main 验 signed prerequisite/envelope 后创建 attempt;unknown handler 在任何外部交互前 `update-required`。 3. required connection ready 后才可进入 admission;optional connection 保持 installed-unavailable。 4. package只绑定 connectionId;Bundle claim归零或卸载不自动 disconnect/revoke shared connection。 5. handler error/cancel/stale/reuse conflict 全部 fail closed 并可重试。 ## Acceptance and named gates - `package-alpha-connection.test.ts` 覆盖 allowlist、record owner、reuse key、unknown handler、 stale attempt、shared disconnect boundary。 - renderer tamper service/reuse/connectionId 无效;main 每次绑定重验。 - receipt只记录 connection reference/status,不记录 credential或摘要。 ## Dependencies Blocked by `alpha-code#694`。 ## Out of scope 动态 handler、远端 handler code、通用账户系统、具体 provider 产品连接器。 ## Exit condition Merged PR + security review + static handler/record tests + canonical docs impact handled。
Activity
[#694][CODE] 发布 HostExtensionPackageV1 contract、profiles 与 strict dec…
Merge origin/alpha into feat/704-alpha-connection
Merge origin/alpha (#712 prepared-resource journal) into feat/704-alp…
[#704][CODE] 把字面 NUL 分隔符换成 \u0000 转义 —— 让该文件对仓内 grep 纪律可见
jinjunnn commentedon Aug 1, 2026
审计留痕:一条按第零问延后的 OPTIONAL(不在本票修)
跨模型对抗审计(Codex,PR #755 R1)开出,我已过三问筛,判为延后而非不修:
为什么现在不修:本构建的 handler allowlist 是空的,真实 Connection 记录
今天不可能由生产路径产生 ⇒ 第零问答不上「走我们自己的代码到得了吗」。
为什么必须记着:第一个真 handler 落地后,这条卸载接线可以消失而门仍绿,
留下永久陈旧的
packageBindings。交接给第一个真 handler 的那张 PR:增加一条走真实
uninstallByKey的测试,预置共享记录,断言 ①release 真被调用、②记录仍
ready、③另一个 binding 保留。同批一并要做的(本票报告里已列,此处汇总):
data-clear.ts的CREDENTIAL_ITEMS补alpha-connections行 + 同步docs/runbooks/uninstall.md;[#704][CODE] 把「任何外部交互前」的过度声明收窄到事实,并钉死 payload fetch 次数
[#704][CODE] 同类第二个实例:字面 NUL 换 \u0000 转义
[#704][CODE] 修集成红:给 #706 的卸载夹具补 releaseAlphaConnectionBindings 桩
[#704][CODE] Alpha Connection handler、记录与 prerequisite 生命周期 (#755)
[#760][CODE] 字面 NUL 字节立咽喉闸:让「我 grep 过了,没有」不再可能是假话 (#774)