Compare commits

...
Author SHA1 Message Date
weichen 6f541db72d Record T3 command-bus verification results
Why: T3 acceptance requires a verification record in this repo before the Dev combo pin.
Evidence: backend 15 pkgs ok incl. new cmdbus suite and danger-confirm e2e (dispatch -> confirm card -> action -> committed -> audit query ordered); ui 18/18; frontend 9/9; combo make test at pinned heads.
Impact: docs/records only.
Refs: docs/proposals/2026-09-30-ui-inbox-command-workspace.md T3; task card feature/command-bus-r1
2026-09-30 07:55:39 +00:00
weichen ad87c9334e Merge pull request 'Record T2 inbox verification results' (#10) from feature/t2-inbox-verification into main 2026-09-30 07:34:45 +00:00
weichen 18bf3bf8e5 Record T2 inbox verification results
Why: T2 acceptance requires a verification record in this repo before the Dev combo pin.
Evidence: backend 14 pkgs ok incl. cardsvc suite; real-binary mock #upload e2e (2 cards, action receipt, pin, dismiss, idempotent re-action); ui 13/13; frontend 9/9; combo make test+build PASS.
Impact: docs/records only.
Refs: docs/proposals/2026-09-30-ui-inbox-command-workspace.md T2; task card feature/inbox-r2
2026-09-30 07:34:33 +00:00
weichen 210b492e02 Merge pull request 'Record T1 verification results' (#9) from feature/core-cards-commands-r1 into main 2026-09-30 06:27:15 +00:00
2 changed files with 54 additions and 0 deletions
@@ -0,0 +1,26 @@
# T2 验证记录:收件箱任务卡(feature/inbox-r2)
被测版本组合:core=a2050d8 + backend=ba1714d(cardsvc PR#8/#9)+ frontend=801a684(PR#4)+ ui=bf77de7(PR#4/#5)+ documents=本记录;Dev 组合 PR:见任务卡(feature/inbox-r2)。
initial_base_sha(R0):69fd335deac237f5291298cb06a50bf03d11add7。
日期:2026-09-30。恢复说明:前会话完成主体开发并合入三仓(06:52–06:58Z),本会话接管收尾并补齐本记录与 Dev 钉定。
## 结果
| 用例 | 结果 | 证据 |
|---|---|---|
| Backend `go test ./...`(含 cardsvc 新套件) | PASS | 14 包 ok;cardsvc 覆盖生命周期、动作标签与幂等、pin/dismiss、owner 隔离、ref 幂等消解;迁移测试 v6 activity_cards(双方言) |
| Backend 真实二进制 e2e(mock `#upload`) | PASS | `make build` 后 `serve --mock`:`#upload` → 会话卡列表 2 张(progress=done、compare=action_required 带 escalate/keep);`actions/keep` → resolved + assistant 回执消息(含 card ref)入时间线;`pin=true` ✓;`dismiss` → dismissed ✓;重复动作 → "card: not awaiting action"(幂等拒绝) |
| UI `tsc --noEmit` + `vitest run` | PASS | 13/13(含 InboxList/ActivityCardView 组件测试) |
| Frontend `vitest run` | PASS | 9/9(组合源下 @ui 别名消费 InboxList/pendingCount) |
| 组合 `make test` + `make build` | PASS | Dev 分支钉定后组合验证(版本串 412d51a+core=a2050d8+backend=ba1714d+frontend=801a684+ui=bf77de7+agentcmd=cc1ad77+documents=210b492) |
## 落库清单(本任务)
- backend:cardsvc 服务(创建/更新/状态机/pin/dismiss/动作+回执/ref 消解)、SQLite v6 activity_cards 迁移、卡事件入会话事件缓冲(persist/seq/replay)、REST(GET cards / actions / pin / dismiss)、摄取/编排/HITL 投影卡 producer、mock `#upload` 全周期演示。
- ui:ActivityCardView + InboxList + pendingCount,样式与类型出口。
- frontend:收件箱 tab 置首(D25)+ 待办角标 + 实时卡片状态(store/cards + api 三端点)。
## 限制
- 浏览器用户流程走查未在本记录执行(以真实二进制 API e2e + 组件测试 + 构建覆盖交互证据);系统级零页面走查按提案归 T5 验收剧本。
- 跨会话项目级收件箱聚合为提案 v1 边界外(卡片按会话)。
@@ -0,0 +1,28 @@
# T3 验证记录:命令总线(feature/command-bus-r1)
被测版本组合:core=a2050d8 + backend=0f74026(PR#10)+ frontend=6a2b21a(PR#6)+ ui=76f976d(PR#7)+ documents=本记录;Dev 组合 PR:见任务卡(feature/command-bus-r1)。
initial_base_sha(R0):5b83704126(T2 合入后 main)。
日期:2026-09-30。
## 结果
| 用例 | 结果 | 证据 |
|---|---|---|
| Backend `go vet ./...` + `go test ./...` | PASS | 15 包 ok(新增 cmdbus 套件);store 迁移 v7 command_audit(双方言)roundtrip 更新为 [1..7] |
| cmdbus 单测 | PASS | 四入口审计对称(button/card/slash/chat/api,未知名归一 api;committed 必带 operationID);高危确认闭环(accepted→确认 committed→过期 rejected expired;取消 rejected;handler 拒绝透传);审计不可用→unknown(不臆断成功);插件 spec 无效 fail-closed;schema 标量子集校验(required/type/integer 分数拒绝) |
| Server e2e(含新增 TestDangerCommandConfirmFlowE2E) | PASS | GET /api/commands 数组契约(含 danger 与 legacy name);POST /api/commands/e2e.destroy(button 未确认)→ 确认卡+accepted;卡 action confirm → committed;GET /api/commands/audit 按会话查询有序(latest-first: committed→accepted);既有 TestCommandsRoute 经总线仍过(/help、未知命令 400 契约不变) |
| UI `tsc --noEmit` + `vitest run` | PASS | 18/18(InlineConfirmCard:未决展开+confirm/cancel 回调;resolved/dismissed/failed 折叠一行;非 confirm 不渲染;hasOpenConfirm 守卫语义) |
| Frontend `tsc --noEmit` + `vitest run` | PASS | 9/9;接线为纯委派(渲染证据在 ui 套件、分发证据在 backend e2e) |
| 组合 `make test` | PASS | Dev 钉定后组合验证(见 Dev 任务卡与组合 PR) |
## 落库清单(本任务)
- backend:`internal/cmdbus`(L1 包,模块卡 policy/modules/cmdbus.md;cardsvc 模块卡一并首落地)——注册表组合 Agent-Command、四入口归一分发、params 校验、danger=high→内联确认卡收口、审计信封落盘;server 路由 `POST /api/commands/{id}`、`GET /api/commands/audit`、`GET /api/commands` 改注册表驱动;postMessage chat 入口经意图闸门命中注册命令时同源分发(不起 run);插件 host OnCommands overlay;store v7。
- ui:InlineConfirmCard + hasOpenConfirm(锚定内联/已决折叠/双现定位入口)。
- frontend:内联确认卡渲染(锚定用户消息)、cardlink 点击定位收件箱(D32 互定位)、对话区拖拽投放、输入区未决确认提示、命令菜单注册表化(无别名容忍 + 高危 ⚠ 标记)。
## 限制
- 确认挂起态为进程内(重启后确认返回 rejected expired);v1 接受,升级触发条件见模块卡。
- 入口对称的浏览器走查未在本记录执行(API e2e + 组件测试覆盖);系统级零页面走查归 T5 验收剧本。
- 意图(agent-intent)→ 命令绑定为"意图 id == 注册命令 id"直接对齐;更丰富的 intent.action 映射待插件生态立项。