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
27 changes: 13 additions & 14 deletions docs/development/plan/plan-20260925.md
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ SCAP-02 追加的行不改兄弟计划的任务卡正文,也不代替它们已
| 2026-09-23 | 用户指示:忽略 Hermes | 删除 `DEFER-SCAP-01`、`DEP-SCAP-02`、`GAP-SCAP-04`。这三个 ID 废弃,不再复用。R7 双 PASS 不覆盖本行 | 无 | 成功定义、依赖表、延后项、plan-status、plan-long |
| 2026-09-23 | 用户指示:关联四份采集计划并对齐 Entire | 把前置句写入 plan-20260902/04/05/11,并把 B3-00 互斥写入 plan-20260907。关系表第二格改为 `DEP-SCAP-01/03/04`,第三格仍是前置句。功能对齐节说明 `Transition` 不写 checkpoint | 无 | 四份采集计划、plan-20260907、本文件 AC、plan-status |
| 2026-09-23 | Codex R8 FAIL(P1×1);Claude R8 PASS | SCAP-02 改为核对 `fba6cbc` 已写入的行。缺行才补,不追加第二份 | 无 | SCAP-02、Phase 0 |
| 2026-09-24 | 用户指示:nextest 分组;不等待发布开下一卡 | VER 与 T-1 全量去掉 `--test-threads=1`,外资源互斥改走 `.config/nextest.toml` 的 `external` 分组。SCAP-01 C 组已落地(PR #519 / `v0.23.55`),Acceptance=`remote-pending`;DEP-SCAP-04 在 C 组落地后放开 B3-00 写 `runtime.rs`,D 组证据异步跟踪 | 无 | SCAP-01 VER/C、plan-status、B3-00 |

## 已决议设计决策

Expand Down Expand Up @@ -305,7 +306,7 @@ SCAP-01 不调用 SCAP-02 的代码。顺序的含义是:兄弟计划先写上

**Task type:** `handoff`

**Lifecycle / Acceptance:** `in-progress` / `locally-accepted`
**Lifecycle / Acceptance:** `in-progress` / `remote-pending`

**Description:** 核对四份采集计划的关系表、修订历史、`plan-20260907` 的互斥行,以及 `plan-status.md` 的三个现状单元格。这些行已在 `fba6cbc` 写入。缺了才补一行。已经各出现一次时不要再追加,否则前置句的「恰好一次」核对会失败。不改它们的任务卡。这是本计划唯一的移交轴。

Expand Down Expand Up @@ -392,9 +393,7 @@ G-03 对关系表按整行计,不按单元格计。上面 13 条 AC 就是 13

**Task type:** `implementation`

**Lifecycle / Acceptance:** `in-progress` / 空

**Description:** 实现 ADR-SCAP-01,并让 `ingest_agent_traces_payload_with_scope` 使用它。捕获结果与替换前相同。这是本计划唯一的代码轴。
**Lifecycle / Acceptance:** `in-progress` / `remote-pending`

**Out of scope:**

Expand All @@ -417,7 +416,7 @@ G-03 对关系表按整行计,不按单元格计。上面 13 条 AC 就是 13
| SessionEnd 回归 | `ingest_session_end_writes_checkpoint_when_repo_path_provided`(`:4362`) |
| SubagentEnd 回归 | `tests/agent_lifecycle_event_test.rs:593` `subagent_end_materializes_distinct_subagent_scope_checkpoint` |

**判据规范(非计数正文):** 下列命令是 VER 的正文。零命中的 nextest 过滤器必须非 0 退出。每个 nextest 命令的摘要必须包含 `1 passed`。
**判据规范(非计数正文):** 下列命令是 VER 的正文。零命中的 nextest 过滤器必须非 0 退出。每个 nextest 命令的摘要必须包含 `1 passed`。外资源互斥由 `.config/nextest.toml` 的 `external` 分组(`max-threads = 1`)承担,命令**不得**再加 `--test-threads=1`。分组过期时先 `sh tests/NEXTEST_GROUPS.sh`。

**内部文档固定句:**

Expand All @@ -443,15 +442,15 @@ decide 不读取 SessionPhase,也不复制 Entire 的 git session 存储。

**Verification:**

- [ ] `test -f .env.test || cp .env.test.example .env.test; source .env.test && cargo nextest run --lib -E 'test(=internal::ai::hooks::session_capture::tests::decide_matches_adr_matrix)' --no-tests=fail --test-threads=1`
- [ ] `source .env.test && cargo nextest run --lib -E 'test(=internal::ai::hooks::session_capture::tests::runtime_checkpoint_kind_matches_are_gone)' --no-tests=fail --test-threads=1`
- [ ] `source .env.test && cargo nextest run --lib -E 'test(=internal::ai::hooks::session_capture::tests::runtime_keeps_owner_exemption_and_stopped_at)' --no-tests=fail --test-threads=1`
- [ ] `source .env.test && cargo nextest run --lib -E 'test(=internal::ai::hooks::session_capture::tests::no_checkpoint_when_repo_path_missing)' --no-tests=fail --test-threads=1`
- [ ] `source .env.test && cargo nextest run --lib -E 'test(=internal::ai::hooks::runtime::tests::ingest_turn_end_writes_committed_checkpoint)' --no-tests=fail --test-threads=1`
- [ ] `source .env.test && cargo nextest run --lib -E 'test(=internal::ai::hooks::runtime::tests::ingest_session_end_writes_checkpoint_when_repo_path_provided)' --no-tests=fail --test-threads=1`
- [ ] `source .env.test && cargo nextest run --test agent_lifecycle_event_test -E 'test(=subagent_end_materializes_distinct_subagent_scope_checkpoint)' --no-tests=fail --test-threads=1`
- [ ] `test -f .env.test || cp .env.test.example .env.test; source .env.test && cargo nextest run --lib -E 'test(=internal::ai::hooks::session_capture::tests::decide_matches_adr_matrix)' --no-tests=fail`
- [ ] `source .env.test && cargo nextest run --lib -E 'test(=internal::ai::hooks::session_capture::tests::runtime_checkpoint_kind_matches_are_gone)' --no-tests=fail`
- [ ] `source .env.test && cargo nextest run --lib -E 'test(=internal::ai::hooks::session_capture::tests::runtime_keeps_owner_exemption_and_stopped_at)' --no-tests=fail`
- [ ] `source .env.test && cargo nextest run --lib -E 'test(=internal::ai::hooks::session_capture::tests::no_checkpoint_when_repo_path_missing)' --no-tests=fail`
- [ ] `source .env.test && cargo nextest run --lib -E 'test(=internal::ai::hooks::runtime::tests::ingest_turn_end_writes_committed_checkpoint)' --no-tests=fail`
- [ ] `source .env.test && cargo nextest run --lib -E 'test(=internal::ai::hooks::runtime::tests::ingest_session_end_writes_checkpoint_when_repo_path_provided)' --no-tests=fail`
- [ ] `source .env.test && cargo nextest run --test agent_lifecycle_event_test -E 'test(=subagent_end_materializes_distinct_subagent_scope_checkpoint)' --no-tests=fail`
- [ ] `f=docs/development/internal/session-capture.md; for s in 'AgentTraces 的 session_state 与 checkpoint 类别只来自 session_capture::decide。' 'transition_phase 只服务 HookTarget::AiIntent 的 session_phase,本文件不修改它。' 'decide 不读取 SessionPhase,也不复制 Entire 的 git session 存储。' '本计划不编辑 docs/development/tracing/agent.md。'; do if rg -n -F "$s" "$f" >/dev/null; then :; else rc=$?; test "$rc" = 1 && exit 1; exit "$rc"; fi; done`
- [ ] `source .env.test && cargo nextest run --lib -E 'test(=internal::ai::hooks::session_capture::tests::stale_session_end_only_comment_is_gone)' --no-tests=fail --test-threads=1`
- [ ] `source .env.test && cargo nextest run --lib -E 'test(=internal::ai::hooks::session_capture::tests::stale_session_end_only_comment_is_gone)' --no-tests=fail`
- [ ] `names="$(libra diff --cached --name-only)" || exit 1; printf '%s\n' "$names" | while IFS= read -r p; do case "$p" in docs/commands/*|docs/commands/zh-CN/*) echo "FAIL $p"; exit 1 ;; esac; done || exit 1; printf '%s\n' "$names" | rg -F 'src/internal/ai/hooks/session_capture.rs' >/dev/null`

`runtime_checkpoint_kind_matches_are_gone`(new)对 `include_str!("runtime.rs")` 断言:下面两段不出现;`let new_state = match event.kind` 不出现;`decide(event.kind).session_state` 出现;`decide(event.kind).checkpoint` 出现。这同一条命令覆盖 AC 2 与 AC 3。waiver 门「upsert 接线」与「checkpoint 接线」都指向这条命令。
Expand Down Expand Up @@ -513,7 +512,7 @@ decide 不读取 SessionPhase,也不复制 Entire 的 git session 存储。

**Granularity:** `type=implementation; axis=AgentTraces ingest 改调 decide; recovery=revert 本卡后 runtime 的两处 kind matches! 恢复; complete=yes; self-contained=yes; AC=10/8@EX-SCAP-01; VER=10/8@EX-SCAP-01; landing=1; prod-files=3; scope=S; deps=SCAP-02; writeset=序列化于 DEP-SCAP-03; release=independent; split-from=N/A; exception=EX-SCAP-01`

**C 组**按 ER-04 第 ①–⑨ 步。本卡命中 T-1,收口测试是 `source .env.test && source .env.live-test && cargo nextest run --all --no-fail-fast --retries 2`。`gh release create` 属于 C 组。
**C 组**按 ER-04 第 ①–⑨ 步。本卡命中 T-1,收口测试是 `source .env.test && source .env.live-test && cargo nextest run --all --no-fail-fast --retries 2`(使用 `.config/nextest.toml` 分组,不加 `--test-threads=1`)。`gh release create` 属于 C 组。

**D 组:**

Expand Down
2 changes: 1 addition & 1 deletion docs/development/plan/plan-long.md
Original file line number Diff line number Diff line change
Expand Up @@ -722,7 +722,7 @@ MEM-03 → MEM-04;LR-09;LR-10;MEM-05 / AG-ATTR 按需;MEM-06(并行协

| 日期计划 | 主要归属 | 当前状态 | 说明 |
|---|---|---|---|
| [`plan-20260925.md`](plan-20260925.md) | B(Session Capture 决策中层) | 执行中 | 把 AgentTraces ingest 的 `agent_session.state` 与 checkpoint 类别收成 `session_capture::decide`。OpenCode、Codex、Claude Code、Pi 计划已登记该前置。SCAP-02 已核对。SCAP-01 实现中 |
| [`plan-20260925.md`](plan-20260925.md) | B(Session Capture 决策中层) | 执行中 | SCAP-02 / SCAP-01 `remote-pending`(PR #519 / `v0.23.55`)。D 组异步。下一卡已切到 B3-00 |
| [`plan-20260923.md`](plan-20260923.md) | Cross-cutting CLI completion | 已排期 | Cover implemented Git-compatible and Libra-only capabilities; static acceptance before opt-in dynamic completion. CP-00..20 pending; capability inventory may add bounded cards. No implementation claimed. |
| [`plan-20260708.md`](plan-20260708.md) | A(LR-04/05/09 相邻基础) | 已完成 | 主线记为历史完成,活跃残留另行排期;不关闭对应 LR |
| [`plan-20260713.md`](plan-20260713.md) | B(LR-06/07/10 捕获前置) | 已完成 | 不覆盖 seal/preflight/capsule |
Expand Down
16 changes: 8 additions & 8 deletions docs/development/plan/plan-status.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@

| 计划 | 类别 | 状态 | 一句话进度(卡片状态) |
|---|---|---|---|
| [`plan-20260925.md`](plan-20260925.md) | B(Session Capture 决策中层) | 执行中 | SCAP-02 `in-progress` / `locally-accepted`。SCAP-01 `in-progress`。R9 双 `PASS`。B3-00 仍 `pending`,未与本卡同时开工 |
| [`plan-20260925.md`](plan-20260925.md) | B(Session Capture 决策中层) | 执行中 | SCAP-02 / SCAP-01 均为 `in-progress` / `remote-pending`。C 组已落地(PR #519,`v0.23.55`)。D 组异步。写集互斥已放开,B3-00 可开工 |
| [`plan-20260923.md`](plan-20260923.md) | Cross-cutting (implemented CLI completion) | 已排期 | English static-first rewrite; CP-00..20 pending; CP-00 inventory precedes implementation approval; CP-06 static acceptance blocks all dynamic work; no implementation/release claimed |
| [`plan-20260918.md`](plan-20260918.md) | 横切(`add` 命令收口) | **实施中** | OI-01..03 `done/complete`(v0.23.4/5/6);**OI-04 `in-progress`(v0.23.7)**;OI-05..WT-07 `pending` |
| [`plan-20260919.md`](plan-20260919.md) | 横切(global 配置迁 XDG) | 实施中 | GCX-01 `done/complete`(v0.23.1);GCX-02/03/04 于 2026-09-22 完成实现+测试+文档,`locally-accepted`(版本 bump 与 D 组发布未执行;本轮按操作者指示未调用 Codex review) |
Expand All @@ -32,7 +32,7 @@
| [`plan-20260912.md`](plan-20260912.md) | B(memory boundary) | **已收口** | MB-01..MB-05、MB-07/08、MB-10/11 全部 `done/complete`(v0.23.37/.39/.40/.41/.42/.43/.44/.45/.46,各卡 ER-14 全量绿、D-MB-STD 远端 evidence 绿);MB-06/09/12 墓碑 `done`(无对应子命令);EX-MB-01/02(G-03)与 EX-MB-03(ER-07 签名)已登记;使用者 2026-09-21 双评审豁免已登记;完成判据全数勾选 |
| [`plan-20260911.md`](plan-20260911.md) | B(pi capture / hook boundary) | 未启动 | PI-01..06 全部 `pending`;Claude Code 429 未给出 verdict,**禁止开工** |
| [`plan-20260910.md`](plan-20260910.md) | 横切(数据库迁移作用域) | **已收口** | MIG-00..MIG-06、MIG-R01..R03 全部 `done/complete` |
| [`plan-20260907.md`](plan-20260907.md) | 横切(BLAKE3 object format) | 未启动 | B3-00..B3-17 全部 `pending` |
| [`plan-20260907.md`](plan-20260907.md) | 横切(BLAKE3 object format) | 执行中 | B3-00 开工。SCAP-01 C 组已落地,`runtime.rs` 互斥已放开 |
| [`plan-20260906.md`](plan-20260906.md) | 横切(安全扫描) | 未启动 | SC-01..SC-07、SC-CLOSE 全部 `pending` |
| [`plan-20260905.md`](plan-20260905.md) | B(Claude hooks/reasoning) | 未启动 | CC-00..CC-06 全部 `pending` |
| [`plan-20260904.md`](plan-20260904.md) | B(Codex reasoning) | 未启动 | CX-00..CX-30(35 卡)全部 `pending` |
Expand Down Expand Up @@ -223,9 +223,9 @@ SBX-01..05 `done/locally-accepted`;**发布步按 DEFER-SBX-06 正式延后**

## 四、当前执行指针(next action)

- **当前正在执行:** `plan-20260925` SCAP-01(发布者:本会话执行该卡的 Agent)。远端已发布 `v0.23.54`,本卡版本面是 `0.23.55`。
- **SCAP-01 与 B3-00:** B3-00 保持 `pending`,不与本卡同时 `in-progress`。
- **下一步(本卡发布之后):** `issues/474` 的 `CL-04`..`CL-08` 已 `locally-accepted`,按窗口依次 bump。
- **当前正在执行:** `plan-20260907` B3-00(发布者:本会话执行该卡的 Agent)。`plan-20260925` SCAP-01 已 `remote-pending`(PR #519 / `v0.23.55`,D 组异步)。
- **SCAP-01 与 B3-00:** SCAP-01 的 C 组已落地,`runtime.rs` 写集互斥放开;B3-00 可开工。
- **下一步(SCAP D 组落地后):** 把 SCAP-01 / SCAP-02 标成 `done` / `complete`。`issues/474` 的 `CL-04`..`CL-08` 仍按窗口排队。
- **并行窗口(不在本执行指针):** `issues/476` WT-03 仍等 DEP-WT-08;`plan-20260918` 其余 add 卡、`plan-20260819` M2 仍登记为实施中,但不抢本卡的 `fsck.rs` 写集。

---
Expand All @@ -240,7 +240,6 @@ SBX-01..05 `done/locally-accepted`;**发布步按 DEFER-SBX-06 正式延后**
| [`plan-20260819`](plan-20260819.md) | M2-16A | #456 memory 模块正向移植到 R30 seam(审计已排除已删 Code SCC) | 无 | **未过**(r01–r37:**r37 同版雙 PASS 達成(2026-09-22,凍結 sha256 `4fbaf4bd…`)** — Codex P0/P1/P2=0、Claude P0/P1=0;實現門已開啟。殘餘 P2(不阻塞):review log 輪次回填、`EX-M2-07` minor 重複計數(41→39)、`tests/INDEX.md` 20→22 描述刷新、未協商 minor 收斂規則 — 於 M2-16C 卡片修訂時一併處理) | **DEP-M2-ENV-01**:需已初始化 Libra checkout(`.libra/`)與 `.env.test`/`.env.live-test`;缺任一项即 `blocked` | ❌ 禁止开工(等双 PASS) |
| [`plan-20260919`](plan-20260919.md) | GCX-02 | legacy 全局 config DB 首次使用自动迁移(锁+快照+校验+原子提交) | GCX-01(已 `done/complete`) | **本轮按操作者指示未评审** | DEP-GCX-02:与 plan-20260918 串行写 `COMPATIBILITY.md`/网站页(0918 未开工,写集 clean) | ✅ 已实现并本地验收(`locally-accepted`,未发布) |
| [`plan-20260919`](plan-20260919.md) | GCX-04 | 用户级 hooks 文件路径对齐 XDG(macOS 只读回退,实现泛化到任何原生配置目录不同的平台) | GCX-01(已 `done`) | **本轮按操作者指示未评审** | DEP-GCX-01 不满足(本机无 `../libra-backend`),仅阻塞网站页;发布队列 GCX-02→GCX-03→GCX-04 | ✅ 已实现并本地验收(`locally-accepted`,未发布) |
| [`plan-20260907`](plan-20260907.md) | B3-00 | pin `git-internal` 0.9.0 并引入 `object_format` 事实源 | 无 | **双评审已 PASS**(Grok R2 / Claude R40 / Codex R40) | 外部无;开工需 `cp .env.test.example .env.test` | ✅ |
| [`plan-20260912`](plan-20260912.md) | MB-01 | 有界 mega2 tree transport 与 wire validation | 无 | **双评审已 PASS**(Codex R7 / Claude R5) | DEP-MB-01:mega2 `a1293686` tree API pin 现场重核(2026-09-21 已前推) | ✅ `done/complete`:v0.23.37(84f6bd8);codeql + release.yml 8/8 jobs 全绿;CDN 产物 HTTP 200 |
| [`plan-20260916`](plan-20260916.md) | CAP-01 | Agent Capture wire types、URL、uid、transport trait | 无 | **双评审已 PASS**(Codex R3 / Claude R3) | DEP-CAP-01:monoengine `2b8f365` capture HTTP pin 重核(ER-CAP-02) | ⚠️ 需重核 DEP-CAP-01 |
| [`plan-20260913`](plan-20260913.md) | FL-00 | 核实 Media 前提与热路径(audit,no-release) | 无 | 联合 review 已 PASS(U2 `VERDICT: PASS`) | DEP-FL-04:**plan-20260907 须完整收口**(未启动 → 硬门) | ❌ 阻塞(等 9/07 收口) |
Expand All @@ -249,7 +248,8 @@ SBX-01..05 `done/locally-accepted`;**发布步按 DEFER-SBX-06 正式延后**
| [`plan-20260906`](plan-20260906.md) | SC-01 / SC-02(可并发) | SC-01 `base.yml` 最小权限加固;SC-02 会话入口 id 守卫 | 无 | **未定稿**(R2 PASS 已作废;R22 `FAIL`) | SC-04 受 DEP-SC-01/04/05/06;SC-07 受 DEP-SC-07 | ❌ 禁止开工 |
| [`plan-20260902`](plan-20260902.md) | OG-00 | opencode 1.18.29 Hook/export 契约探测 | 无 | **未取得双 PASS**(Claude 限额,Codex 仍在 FAIL 循环) | 无(Phase 1 与 RG 六卡解耦) | ❌ 禁止开工 |
| [`plan-20260911`](plan-20260911.md) | PI-01 | Repository-only `agent_kind=pi` migration | 无(DEP-PI-04 已满足:9/10 已收口) | **Claude Code 429 无 verdict,禁止开工** | DEP-PI-01/03 | ❌ 禁止开工 |
| [`plan-20260925`](plan-20260925.md) | SCAP-01 | AgentTraces ingest 改调 `decide`。发布者是本会话执行该卡的 Agent。B3-00 仍 `pending` | SCAP-02(登记已核对) | R9 双 `PASS` | 与 B3-00 不得同时 `in-progress` | 执行中 |
| [`plan-20260925`](plan-20260925.md) | SCAP-01 | AgentTraces ingest 改调 `decide`。PR #519 已合并,`v0.23.55` 已触发 | SCAP-02(登记已核对) | R9 双 `PASS` | D 组异步;写集互斥已放开 | `remote-pending` |
| [`plan-20260907`](plan-20260907.md) | B3-00 | pin `git-internal` 0.9.0 并引入 `object_format` 事实源 | 无 | **双评审已 PASS**(Grok R2 / Claude R40 / Codex R40) | SCAP-01 C 组已落地,互斥放开 | ✅ 可开工 |
| [`issues/470`](issues/470.md) | FM-01 | 共享写入原语与 `restore` 系物化 | 无 | 尚未 Codex review | 关闭依赖 plan-20260918 FM-03/04(DEP-FM-06/07) | ❌ 禁止开工 |
| [`issues/473`](issues/473.md) | IN-01 / IN-03 / IN-02 | 空模板自引用防护 / 存储路径前置检测 / 换格式 reinit fail-closed | 无 | 尚未 Codex review | 无 | ❌ 禁止开工 |
| [`issues/474`](issues/474.md) | CL-03 | 其余历史遍历尊重 shallow 边界 | CL-02 | **R6 `PASS`** | 无 | ✅ `locally-accepted`(C 组 `v0.23.49`) |
Expand Down Expand Up @@ -325,7 +325,7 @@ DEFER-AD-01..16:Git advice、ignored 相对路径、`add -u --ignore-missing`
| DEP-CC-05 | 跨计划前置 | plan-20260905 CC-02..06 依赖 plan-20260904 全部非延后卡完成 | plan-20260904 未启动 |
| DEP-SCAP-01 | 跨计划前置 | 改变 AgentTraces ingest 的 state 字符串或 checkpoint 类别的卡,等待 plan-20260925 SCAP-01 `done`/`complete` 后改 `decide`。import 与 session stop/resume 不在此列 | 已写入 plan-20260902/04/05/11 关系表 |
| DEP-SCAP-03 | 跨计划写集 | OG-11、OG-05、CX-06、CX-28、CX-02、CX-07、CX-19、CX-09、CX-26、CC-02、CC-05、PI-04 在 SCAP-01 complete 前不得 in-progress | 已写入同一关系表的文件锁名单 |
| DEP-SCAP-04 | 跨计划写集互斥 | plan-20260925 SCAP-01 与 plan-20260907 B3-00 不得同时 in-progress。先完成的一方之后,另一方再改 runtime.rs | 与 B3-00 互斥已写入 plan-20260907 |
| DEP-SCAP-04 | 跨计划写集互斥 | plan-20260925 SCAP-01 与 plan-20260907 B3-00 不得同时改 `runtime.rs`。SCAP-01 C 组落地后互斥放开 | SCAP-01 已 `remote-pending`;B3-00 可开工 |
| DEP-SBX-06 | 内部发布延后 | plan-20260830 SBX 发布步 | 未就绪 |
| DEP-05 | 内部前置(已承接) | plan-20260822 v1-boundary runtime cutover(branch/sequencer/worktree repair/v1 op restore → v2 middleware);由 OL-15A 承接,OL-15 依赖其完成 | PR #503 OL-15A 已完成 |
| DEP-WT-09 | 跨计划前置 | issues/476 关闭依赖 plan-20260918 WT-05..07 完成 | plan-20260918 未到 WT |
Expand Down
Loading