merge: feature/stage-backtrack-design

This commit is contained in:
weichen
2026-09-20 15:09:31 +00:00
15 changed files with 669 additions and 14 deletions
+5 -4
View File
@@ -5,14 +5,14 @@
## 焦点
1. **2026-09-20 rdev 种子热修 done**:dev/test catalog 均含「研发设计控制流程」;test schema **58**,tag `rc-v1.0.0-beta.7`。见 [报告](../test-reports/2026-09-20-rdev-seed-hotfix-test-report.md) · [short-term](./short-term/2026-09-20-rdev-seed-hotfix.md)。
2. **2026-09-20 模块解耦规范与审计 done(仅文档)**:耦合审计、开发规范、批次 A–G 计划已写;不改业务代码,不改 `production_ready`。见 [审计](../audit/2026-09-20-module-coupling-audit.md) · [规范](../system-design/2026-09-20-module-development-standards.md) · [批次](../remediation/2026-09-20-module-decoupling-batch-plan.md)。
3. **红线**:禁止整支 merge FAV;不默认升 `MULTI_INTENT_PLAN_TIER=full`;`SEMANTIC_SUMMARY_REPLACE` 不随 W2 开启;FAV live 观察窗证据驱动;`FAV_DEGRADED_READ=false`;项目 143 只读;SWBOOT-10 保持 fail-closed stub;D7 待合规签字;**P0 期间不改 `production_ready`**;模块解耦批次 A–G 未单独认领前保持 `planned`。
1. **2026-09-20 阶段回溯与影响闭环设计 done(仅文档)**:五表追踪索引上增加 L1 修订 / L2 再打开、待复核软标记和对话提案桥。不改业务代码,不改 `production_ready`。见 [设计](../system-design/2026-09-20-stage-backtrack-and-impact-loop-design.md) · [short-term](./short-term/2026-09-20-stage-backtrack-design.md)。实施切片保持 `planned`。
2. **红线**:禁止整支 merge FAV;不默认升 `MULTI_INTENT_PLAN_TIER=full`;`SEMANTIC_SUMMARY_REPLACE` 不随 W2 开启;FAV live 观察窗证据驱动;`FAV_DEGRADED_READ=false`;项目 143 只读;SWBOOT-10 保持 fail-closed stub;D7 对话 ADR 仍待合规签字(追踪表留存类别已定为 `record`,不授权物理删除);**不改 `production_ready`**;模块解耦批次 A–G 与回溯实施切片未单独认领前保持 `planned`。
## 并行认领
| owner | task | branch | worktree | mutex | status |
|-------|------|--------|----------|-------|--------|
| Cursor-Auto | 2026-09-20-stage-backtrack-design | feature/stage-backtrack-design | - | trace-impact-design | done |
| Cursor | 2026-09-20-rdev-seed-hotfix | fix/workflow-seed-bootstrap-2026-09-20 | - | workflow-def | done |
| Cursor-Auto | 2026-09-20-module-decoupling-spec-audit | docs/module-decoupling-spec-2026-09-20 | - | module-decoupling-spec | done |
| Cursor-Auto | 2026-09-20-p0-closeout | docs/p0-closeout-2026-09-20 | - | docs | done |
@@ -167,7 +167,7 @@
| holder | phase | since | scope | queue |
|--------|-------|-------|-------|-------|
| - | idle | 2026-09-20 | rdev 种子热修已合入 dev 并晋升 test `rc-v1.0.0-beta.7`;dev/test catalog 含 rdev,schema 58 | - |
| - | idle | 2026-09-20 | 阶段回溯设计文档冒烟 `go vet ./...` 通过;docs-only,未 rebuild。此前 rdev 种子已在 test `rc-v1.0.0-beta.7` | - |
**phase**: `idle` | `merging` | `smoke` | `e2e`
@@ -196,6 +196,7 @@
| dev→test 晋升前复核 | [research](./research/2026-09-19-pre-test-promotion-review.md)(2026-09-19 只读;静态门禁过,容器未 rebuild,暂不合并) |
| D7 盘点(W7) | [audit](../audit/2026-09-17-d7-data-inventory.md) · [报告](../test-reports/2026-09-17-w7-d7-inventory-test-report.md) · ADR 仍 `pending-compliance-signoff` |
| 功能启用与文档影响分析 | [调研](./research/2026-09-20-capability-enablement-impact-research.md) · [整改方案](../remediation/2026-09-20-capability-enablement-impact-plan.md) · [方案审阅](./research/2026-09-20-capability-enablement-impact-plan-review.md)(2026-09-20;未启用开关、未改业务代码) |
| 阶段回溯与影响闭环 | [设计](../system-design/2026-09-20-stage-backtrack-and-impact-loop-design.md) · [short-term](./short-term/2026-09-20-stage-backtrack-design.md)(2026-09-20;仅设计。切片 T1/T2/B1/B2/B3/T3 均为 planned) |
| Wave 7 编排确认 | [决策记录](./short-term/2026-09-18-wave7-roadmap-orchestration.md) |
| Agent 手册 | [AGENTS.md](../../AGENTS.md) |
| 意图双标签 busy 交接 | [./handoffs/2026-09-15-conversation-intent-dual-tab.md](./handoffs/2026-09-15-conversation-intent-dual-tab.md) |
@@ -34,14 +34,20 @@ confidence: high
## 待用户审核决策
两项均已在 2026-09-20 grill 中决定,详见 [阶段回溯与影响闭环设计](../../system-design/2026-09-20-stage-backtrack-and-impact-loop-design.md)。下面保留原建议,避免事后看不出改了什么。
### 1. 关系候选治理职责
方案推荐项目本地 `trace_reviewer` 动作能力,绑定既有编制/审核职责,由项目创建者在项目成员内指派;跨文档候选由两端各一名符合条件者确认,全局管理员不自动取得项目或文档权限。未批准前相关端点保持关闭。
**已决定:不新增 `trace_reviewer`。** `model_candidate` 由下游文档编制人确认或否决;没有编制人时由项目创建者裁决。决议进入 `project_trace_edge_decisions`。
原建议:方案推荐项目本地 `trace_reviewer` 动作能力,绑定既有编制/审核职责,由项目创建者在项目成员内指派;跨文档候选由两端各一名符合条件者确认,全局管理员不自动取得项目或文档权限。未批准前相关端点保持关闭。
### 2. 派生追踪数据留存
T2 开始前,需要确定条目修订、模型候选、确认/拒绝决定的留存类别,以及源文档删除或依法清除时如何传播。D7 未签前不执行物理删除,也不允许用“不可变历史”绕过后续合规决定。
**已决定:追踪五表、再打开申请和待复核标记的留存类别为 `record`。** 随项目保留。允许审计过的修复重放,禁止当缓存删除后重建。源文档依法清除时条目 tombstone,边和决议保留。这不签对话数据 D7 ADR,也不授权物理删除。
原问题:T2 开始前,需要确定条目修订、模型候选、确认/拒绝决定的留存类别,以及源文档删除或依法清除时如何传播。D7 未签前不执行物理删除,也不允许用“不可变历史”绕过后续合规决定。
## 审阅结论
方案已具备实施拆分、数据模型、授权边界、状态机、灰度、回退和验收合同。上述两项治理决策不会阻塞 Foundation 0、lineage API 鉴权、摘要持久化和 T1 的非 PI 工作;它们会阻塞关系候选确认端点和 T2/T3 正式放量。
方案已具备实施拆分、数据模型、授权边界、状态机、灰度、回退和验收合同。上述两项已决定,不再阻塞 T2/T3 的治理前置。T2/T3 仍须按各自 short-term 认领后实施。对话 D7 的合规签字仍然 pending,与本决定正交。
@@ -0,0 +1,49 @@
---
title: "B3 对话修订提案桥"
status: planned
created: 2026-09-20
updated: 2026-09-20
owner: 待认领
branch: feature/chat-revise-bridge
worktree: "-"
mutex: intent
---
# B3 对话修订提案桥
## 目标
对话里可以分析影响,并一键生成受控文档的修订提案。确认前不改受控正文。
## 范围
- 意图 `project.impact.analyze`(只读)与 `project.doc.revise_propose`(确认后写提案)。
- 执行走现有聊天动作执行器;写意图要求确认。
- T2 未合入前,提案只针对文档,不声称命中条目。T2 合入后,提案绑定条目与报告。
## 非目标
- 不把对话直接写入受控正文。
- 不替换自由文档沉淀。
- 不在本片做多意图放量或打开 `MULTI_INTENT_PLAN_TIER=full`。
## 步骤
1. [ ] 开 `feature/chat-revise-bridge`,mutex `intent`。
2. [ ] 注册两个意图,绑定项目与可见文档。
3. [ ] 确认前断言业务表无新提案;确认后恰好一条提案。
4. [ ] 不可见文档不能被点名后泄漏标题。
## 验收标准
- [ ] 只读分析零业务写。
- [ ] 修订提案停在编制人待决,文档状态不变。
- [ ] 撤权后旧卡片不能继续确认。
## 相关链接
- 设计 §7: [../../system-design/2026-09-20-stage-backtrack-and-impact-loop-design.md](../../system-design/2026-09-20-stage-backtrack-and-impact-loop-design.md)
## 证据 / 备注
`intent` mutex 认领前确认没有其他 `in_progress`。条目级绑定以 T2 合入为开关,不阻塞文档级提案。
@@ -0,0 +1,50 @@
---
title: "T1 影响报告触发补齐"
status: planned
created: 2026-09-20
updated: 2026-09-20
owner: 待认领
branch: feature/impact-loop-t1
worktree: "-"
mutex: docgov
---
# T1 影响报告触发补齐
## 目标
人工修订、导入和聊天侧正式提交与 Agent 正式提交一样,产生持久影响报告;未知、失败和无影响不得混成「无影响」。
## 范围
- 把尚未分开预估/正式报告的提交来源接到现有 change report。
- 报告至少包含:变更摘要、文档级影响、风险下限、建议动作占位(L1 / L2 / 无需变更)。
- 自动触发点:修订提交、文档批准、阶段推进。手动触发 API 可在本片提供只读入口。
## 非目标
- 不建五表,不做多跳,不做阶段再打开。
- 不重做已合入的 lineage 鉴权、proposed/authoritative 分流、PI 叙事裁剪。
- 不打开 PI 叙事开关。
## 步骤
1. [ ] 从最新 `dev` 开 `feature/impact-loop-t1`,登记 mutex `docgov`。
2. [ ] 列出当前不出报告的提交路径并补事件。
3. [ ] 报告状态区分 `index_pending` / `partial` / `failed` / 无已知依赖。
4. [ ] 单测覆盖人改、导入、恢复;合 dev 前按仓库门禁验证。
## 验收标准
- [ ] 三条提交来源都能留下 report,且拒绝后的旧报告不能再出建议。
- [ ] 索引未完成时界面与 API 不返回「无影响」。
- [ ] 不新增第二套影响表。
## 相关链接
- 设计 §4: [../../system-design/2026-09-20-stage-backtrack-and-impact-loop-design.md](../../system-design/2026-09-20-stage-backtrack-and-impact-loop-design.md)
- 已完成前置: [2026-09-20-proposed-authoritative-reports.md](./2026-09-20-proposed-authoritative-reports.md)
## 证据 / 备注
依赖设计文档,不依赖 T2。`docgov` mutex 认领前须确认没有其他 `in_progress`。
@@ -0,0 +1,53 @@
---
title: "T2 项目追踪索引"
status: planned
created: 2026-09-20
updated: 2026-09-20
owner: 待认领
branch: feature/project-trace-index-t2
worktree: "-"
mutex: trace-index
---
# T2 项目追踪索引
## 目标
落地五表追踪索引,把 UR/RS/REQ/TC 投影成项目级条目,并提供「需求与影响」页的第一版。
## 范围
- 迁移:`project_trace_items`、`project_trace_item_revisions`、`project_trace_edges`、`project_trace_edge_decisions`、`project_trace_index_state`。
- 从已批准或已提交文档块抽取显式编号;无类型正文 ID 只做候选。
- 项目页:覆盖健康、待处理影响、按种类筛选的条目列表。
- 留存按设计 §9 执行:`record`,修复重放须保留决议。
## 非目标
- 不做深度 3 多跳和候选确认 UI(T3)。
- 不做阶段再打开(B1)。
- 不签 D7 对话 ADR,不提供物理删除。
- 首期页面验收范围是 `main` 与 `software_delivery` 上能看见条目;`rdev` 抽取可运行,但不作为本片放量条件。
## 步骤
1. [ ] 开 `feature/project-trace-index-t2`,mutex `trace-index`。
2. [ ] 写迁移与只追加的修订模型。
3. [ ] 投影显式键,记录索引水位。
4. [ ] 项目页只读列表;跨项目 doc 不可读。
## 验收标准
- [ ] 同一业务键跨文档不复制多套孤立编号。
- [ ] 重复事件不产生第二份相同修订。
- [ ] 不可见文档不泄漏标题;管理员不自动获得确认权。
- [ ] 下行迁移不得删掉已有决议账本。
## 相关链接
- 设计 §8–§9: [../../system-design/2026-09-20-stage-backtrack-and-impact-loop-design.md](../../system-design/2026-09-20-stage-backtrack-and-impact-loop-design.md)
- 数据模型: [../../remediation/2026-09-20-capability-enablement-impact-plan.md](../../remediation/2026-09-20-capability-enablement-impact-plan.md) §4
## 证据 / 备注
D7 追踪分类已定,本片不再等待对话留存签字。对话 ADR 本身仍 pending。
@@ -0,0 +1,52 @@
---
title: "B2 待复核软标记"
status: planned
created: 2026-09-20
updated: 2026-09-20
owner: 待认领
branch: feature/recheck-soft-hold
worktree: "-"
mutex: workflow
---
# B2 待复核软标记
## 目标
已完成阶段被后续修改碰到时打上待复核标记。推进不被拦住,但创建者必须看见并确认已知悉。标记只能人关。
## 范围
- `stage_recheck_marks`。
- 影响报告产生标记;同一阶段同一报告不重复堆积。
- `AdvanceStage`:有未关闭标记时要求 `acknowledge_recheck=true`,知悉写审计,标记仍在。
- 闭环:`no_change` 决议,或已发起 L1/L2。提案或申请被拒时标记重新打开。
- 界面把标记放在推进确认上,不能默认折叠掉。
## 非目标
- 不把标记做成硬门禁,不为医疗域单独拦截。
- 不在文档批准或索引完成时自动关标记。
- 不实现 L2 本体(依赖 B1 的阶段读写;若 B1 未合入,本片只做标记与知悉,L2 清除路径随 B1 接上)。
## 步骤
1. [ ] B1 合入后开 `feature/recheck-soft-hold`。mutex 仍是 `workflow`,不得与 B1 同时 `in_progress`。
2. [ ] 标记的产生、知悉、人工关闭、驳回后重开。
3. [ ] 前端推进条二次确认。
4. [ ] 证明无标记时推进请求与现在一致。
## 验收标准
- [ ] 未知悉时推进被拒绝;知悉后推进成功且标记仍为打开。
- [ ] 不存在「新版本批准后标记自己消失」的路径。
- [ ] `main` 或 `software_delivery` 上能走完:产生标记 → 知悉推进 → 人手关闭。
## 相关链接
- 设计 §6、§10: [../../system-design/2026-09-20-stage-backtrack-and-impact-loop-design.md](../../system-design/2026-09-20-stage-backtrack-and-impact-loop-design.md)
- 前置: [2026-09-20-stage-reopen-l2.md](./2026-09-20-stage-reopen-l2.md)
## 证据 / 备注
与 B1 共用 `workflow` mutex,必须串行。
@@ -0,0 +1,56 @@
---
title: "阶段回溯与影响闭环设计"
status: done
created: 2026-09-20
updated: 2026-09-20
owner: Cursor-Auto
branch: feature/stage-backtrack-design
worktree: "-"
mutex: trace-impact-design
---
# 阶段回溯与影响闭环设计
## 目标
把「修改影响快速评估」和「后续材料反向影响已完成阶段」收成一份可实施设计,并拆出独立任务。不改业务代码。
## 范围
- 设计主文:双层回溯、软标记、混合触发、候选边裁决、追踪数据留存分类。
- 回写 Track T 整改方案、方案审阅的两项遗留决策、gap-matrix 的追踪留存行、FEATURE-MATRIX。
- 拆分 T1 / T2 / B1 / B2 / B3 / T3,状态均为 `planned`。
## 非目标
- 不实现迁移、API、前端。
- 不启用影响分析开关,不改 `production_ready`。
- 不签 D7 对话留存 ADR,不授权物理删除。
- 不把实施切片标成 `in_progress`。
## 步骤
1. [x] 从 `dev` 检出 `feature/stage-backtrack-design` 并登记认领。
2. [x] 写设计主文。
3. [x] 回写整改方案、审阅记录、gap-matrix、FEATURE-MATRIX、CURRENT。
4. [x] 拆分六个实施切片。
5. [x] `docs(design)` 提交,占槽后 `--no-ff` 合回 `dev`,文档冒烟 `go vet ./...`。
## 验收标准
- [x] 设计写明 L1/L2、选择性解锁、待复核仅人工闭环、全域松散门禁。
- [x] 写明不占用 `awaiting_stage_confirmation`,以及再打开阶段与下游阶段可以同时活着。
- [x] `trace_reviewer` 改为下游编制人裁决;追踪表留存类别为 `record`。
- [x] 文档在 feature 分支提交并合入 `dev`,槽位释放。
## 相关链接
- 设计: [../../system-design/2026-09-20-stage-backtrack-and-impact-loop-design.md](../../system-design/2026-09-20-stage-backtrack-and-impact-loop-design.md)
- 基线方案: [../../remediation/2026-09-20-capability-enablement-impact-plan.md](../../remediation/2026-09-20-capability-enablement-impact-plan.md)
- 审阅: [../research/2026-09-20-capability-enablement-impact-plan-review.md](../research/2026-09-20-capability-enablement-impact-plan-review.md)
## 证据 / 备注
2026-09-20 grill 三轮已收敛。实施切片保持 `planned`,mutex 互不占用。
冒烟:`go vet ./...` 通过(docs-only,未 rebuild)。设计提交 `54c8a3d1`,占槽 `0155ac62`。合入 `dev` 的 merge commit 见本任务合入后的 `git log`。
@@ -0,0 +1,54 @@
---
title: "B1 阶段再打开"
status: planned
created: 2026-09-20
updated: 2026-09-20
owner: 待认领
branch: feature/stage-reopen-l2
worktree: "-"
mutex: workflow
---
# B1 阶段再打开
## 目标
已完成阶段可以被创建者批准后再次打开:只把勾选文档退回编制,下游阶段继续原来的状态。
## 范围
- `stage_reopen_requests`。
- 阶段 `completed → active`,允许与更靠后的活动阶段并存。
- 新文档动作 `reopen_for_revision`(`approved → drafting`),未勾选文档保持批准。
- 授权:三职申请、创建者批准;创建者可直接执行。
- 再次推进只卡本次解锁的文档。
## 非目标
- 不写入实例状态 `awaiting_stage_confirmation`。
- 不把再打开记成审核驳回。
- 不自动清除待复核标记(标记本体在 B2)。
- 不在 `rdev` 上做首期验收。
- 不因再打开冻结下游。
## 步骤
1. [ ] 开 `feature/stage-reopen-l2`,mutex `workflow`。确认 `workflow` 无其他 `in_progress`。
2. [ ] 申请表、批准事务、乐观锁。
3. [ ] docgov 解锁动作与审计。
4. [ ] 创建者与非创建者、空勾选、未完成阶段、越权申请的负例。
## 验收标准
- [ ] 非创建者不能批准;无关成员不能申请。
- [ ] 未勾选的已批准文档在再打开后仍锁定。
- [ ] 下游 `active` 阶段不会被改成 `pending`。
- [ ] 再打开阶段第二次推进成功后回到 `completed`。
## 相关链接
- 设计 §5: [../../system-design/2026-09-20-stage-backtrack-and-impact-loop-design.md](../../system-design/2026-09-20-stage-backtrack-and-impact-loop-design.md)
## 证据 / 备注
可与 T2 并行。报告上的「申请 L2」按钮放到 T1 报告出现之后再接,不阻塞本片 API。
@@ -0,0 +1,52 @@
---
title: "T3 多跳影响与候选边治理"
status: planned
created: 2026-09-20
updated: 2026-09-20
owner: 待认领
branch: feature/trace-multihop-t3
worktree: "-"
mutex: trace-index
---
# T3 多跳影响与候选边治理
## 目标
影响分析沿已确认边做有界反向遍历,模型候选边由下游编制人确认或否决。
## 范围
- 默认深度 3,环检测,查询上限。
- `model_candidate` 只产生 `possible_impact`,直到 `project_trace_edge_decisions` 记下确认。
- 裁决人是下游文档编制人;没有编制人时是创建者。
- 不新增 `trace_reviewer`。
## 非目标
- 不建图数据库。
- 不用向量相似度直接写已确认边。
- 不在 `rdev` 上做首期放量验收。
- 不实现阶段再打开。
## 步骤
1. [ ] T2 合入后开 `feature/trace-multihop-t3`。mutex `trace-index`,不得与 T2 同时 `in_progress`。
2. [ ] 反向遍历与环、深度、权限过滤测试。
3. [ ] 候选确认/否决 API 与决定账本。
4. [ ] 确认后的边进入下一次影响报告;否决的边不再贡献影响。
## 验收标准
- [ ] 超过深度的边不会被说成已确认影响。
- [ ] 非下游编制人且非创建者不能裁决。
- [ ] 候选积压时报告仍是 `possible_impact`,不是「无影响」。
## 相关链接
- 设计 §4、§8: [../../system-design/2026-09-20-stage-backtrack-and-impact-loop-design.md](../../system-design/2026-09-20-stage-backtrack-and-impact-loop-design.md)
- 前置: [2026-09-20-project-trace-index-t2.md](./2026-09-20-project-trace-index-t2.md)
## 证据 / 备注
与 T2 共用 `trace-index` mutex,必须串行。
@@ -307,6 +307,10 @@ sequenceDiagram
现有 lineage API 先修复:doc_id 必须属于 URL project,且每个返回端点都通过逐文档策略;错误不得把不可见对象存在性泄漏给调用方。影响总数只能按调用者可见集统计。
关系候选的治理政策已由 [阶段回溯设计](../system-design/2026-09-20-stage-backtrack-and-impact-loop-design.md) §8 取代下文推荐:不新增 `trace_reviewer`。`model_candidate` 由下游文档编制人确认或否决;该文档没有编制人时由项目创建者裁决。决议写入 `project_trace_edge_decisions`。未决候选只产生 `possible_impact`。全局管理员不因管理员身份获得确认权。确认事务仍须证明项目、条目和文档属于同一项目。
以下为 2026-09-20 方案原文,保留作对照,实施时以上一段为准:
关系候选治理的推荐政策是新增项目本地 `trace_reviewer` 动作能力,并把它嵌入现有文档职责:项目创建者只能在两端文档已有编制人或审核人中显式指派;全局系统管理员不会自动获得该项目、文档或候选的查看和确认权限。确认或拒绝时,同一 CAS 事务必须验证 route project、candidate、两个 item 和两个 source document 都属于同一项目,操作者当前可见两端文档且持有该能力。跨文档候选需要源端和目标端各一名符合条件者确认;同一人同时承担两端职责时可合并一次决定。每次变更限制候选数量并生成待办;未处理候选只产生 `possible_impact`,积压超过 Foundation 0 冻结门槛时停止扩大模型候选范围。此政策需用户审核通过后实施;未批准前端点保持关闭。
### 7.1 PI 输入安全门
@@ -344,11 +348,14 @@ Foundation 1 建立所有 PI 消费者共用的 R13 输入信封。服务端绑
### 8.4 Track T:文档影响与追踪
阶段再打开、待复核和对话提案桥见 [阶段回溯与影响闭环设计](../system-design/2026-09-20-stage-backtrack-and-impact-loop-design.md)。下表仍是索引与报告轨道;B1–B3 是该设计拆出的回溯切片,不替代 T1–T3。
| 阶段 | 内容 | 进入下一阶段条件 |
|---|---|---|
| T1 基础影响闭环 | 修 lineage 版本;统一提交事件;proposed/authoritative 报告;聊天卡;PI narrative 接最小化 diff/impact | 人改/Agent/恢复/导入一致;未知不伪装无影响 |
| T2 项目追踪索引 | 五表迁移;结构化需求/用例投影;UR/RS/REQ/TC 键;决定账本;项目页面 | D7 确认派生条目/候选/决定的留存类别和源文档删除传播规则;双向追踪、授权、决定重放、增量幂等通过 |
| T3 多跳与候选 | 有界递归、循环检测、语义候选、两端人工确认、片段装配 | 准确率、候选积压和成本门槛达标;候选不污染事实 |
| T1 基础影响闭环 | 修 lineage 版本;统一提交事件;proposed/authoritative 报告;聊天卡;PI narrative 接最小化 diff/impact。人工修订、导入、聊天正式提交的报告补齐见 [T1 任务](../ops/short-term/2026-09-20-impact-loop-t1.md) | 人改/Agent/恢复/导入一致;未知不伪装无影响 |
| T2 项目追踪索引 | 五表迁移;结构化需求/用例投影;UR/RS/REQ/TC 键;决定账本;项目页面。留存类别已定为 `record`,见回溯设计 §9 | 双向追踪、授权、决定重放、增量幂等通过。不再等待整份 D7 对话 ADR;仍禁止物理删除 |
| T3 多跳与候选 | 有界递归、循环检测、语义候选、下游编制人确认、片段装配 | 准确率、候选积压和成本门槛达标;候选不污染事实 |
| B1–B3 回溯 | L2 再打开、待复核软标记、对话修订提案 | 见各 short-term;未复核不拦截推进 |
推荐先并行启动 Foundation 0、lineage API 鉴权和 T1 的非 PI 部分。Foundation 1 完成后,I、S、T 各自推进;任何轨道都不能以另一轨道“尚未完成”为由跳过自身门禁。
@@ -405,7 +412,8 @@ Foundation 1 建立所有 PI 消费者共用的 R13 输入信封。服务端绑
- 多意图关闭后,执行中的步骤完成到安全终态或明确 cancelled;禁止回落到 legacy 后重复执行同一句写操作。
- 摘要 replace 关闭后立即使用最后一次确定性摘要;语义候选保留用于审计,不注入 prompt。
- 索引器关闭后文档提交继续成功;报告影响状态显示 `index_pending`,索引器的 `adapter_readiness` 显示 `degraded`;恢复后从 outbox/checkpoint 重放。
- 条目、修订、关系和索引状态是可重建投影;人工关系决定由 `project_trace_edge_decisions` 权威账本保存并备份,重建不能丢失确认、拒绝或撤销。
- 条目、修订、关系和索引状态的留存类别已定为合规业务记录(`record`),见 [阶段回溯设计](../system-design/2026-09-20-stage-backtrack-and-impact-loop-design.md) §9。允许审计过的修复重放,禁止当可丢缓存删后重建。人工关系决定仍由 `project_trace_edge_decisions` 权威账本保存,重建不能丢失确认、拒绝或撤销。
- 下文若仍写「可重建投影、可丢弃」,以本节和回溯设计 §9 为准。
- test/main 放量需独立变更记录、环境级验收和回退演练,不因 dev 通过自动继承。
## 11. 任务拆分建议
@@ -434,7 +442,7 @@ Foundation 1 建立所有 PI 消费者共用的 R13 输入信封。服务端绑
- [ ] 助手在修改后主动展示本次修改、项目影响、相关文档、证据、不确定性和下一步建议。
- [ ] 每个候选都有持久 `proposed` 报告,正式提交才产生 authoritative report、stale 和通知;两条路径不混用事件。
- [ ] `proposed` 报告在取消、替代、冲突和基线推进后不可执行,正式提交回链 successor report。
- [ ] T2 开始前完成派生条目、候选和关系决定的 D7 留存分类与源文档删除传播决策。
- [x] T2 开始前完成派生条目、候选和关系决定的留存分类:2026-09-20 定为 `record`(回溯设计 §9)。源文档依法清除时 tombstone 条目、保留边和决议。整份 D7 对话 ADR 仍未签,不执行物理删除。
- [ ] 常规分析有证据证明只读取命中片段;全量重建是可见、可审计的后台状态。
- [ ] 真实浏览器 + PostgreSQL + 产品 PI 长链通过,报告归档并回链 FEATURE-MATRIX。
- [ ] dev→test→main 分别批准和验收;任一失败可回退且不丢历史或重复副作用。
@@ -442,6 +450,7 @@ Foundation 1 建立所有 PI 消费者共用的 R13 输入信封。服务端绑
## 13. 相关链接
- Research: [2026-09-20-capability-enablement-impact-research.md](../ops/research/2026-09-20-capability-enablement-impact-research.md)
- 阶段回溯(取代候选边职责与可丢弃投影表述): [2026-09-20-stage-backtrack-and-impact-loop-design.md](../system-design/2026-09-20-stage-backtrack-and-impact-loop-design.md)
- Archived task: [2026-09-20-capability-enablement-impact-plan.md](../archive/ops/2026-09-20-capability-enablement-impact-plan.md)
- Feature matrix: [FEATURE-MATRIX.md](../status/FEATURE-MATRIX.md)
- Gap matrix:本轮未新增发布 blocker;实现阶段若发现当前默认路径存在真实安全/数据破坏问题,再按证据更新。
+1
View File
@@ -2,6 +2,7 @@
| 文档 | 说明 |
|------|------|
| [../system-design/2026-09-20-stage-backtrack-and-impact-loop-design.md](../system-design/2026-09-20-stage-backtrack-and-impact-loop-design.md) | 阶段回溯与影响闭环:L1 修订 / L2 再打开、待复核软标记、对话提案桥。追踪留存定为 `record`;候选边由下游编制人裁决。配套 short-term 切片均为 planned |
| [2026-09-20-module-decoupling-batch-plan.md](./2026-09-20-module-decoupling-batch-plan.md) | 耦合残留分批 A–G(server 装配、逻辑环、docgov 词汇、工作流依赖、巨型文件、前端 client、例外清零);保持 planned,不改代码。配套 [审计](../audit/2026-09-20-module-coupling-audit.md) · [规范](../system-design/2026-09-20-module-development-standards.md) |
| [2026-09-20-p0-remediation-plan.md](./2026-09-20-p0-remediation-plan.md) | 系统体检 P0:迁移 00058、三项 IDOR、panic/race/XSS、凭证与口令轮换;配套 [审计](../audit/2026-09-20-system-triage-audit.md) |
| [2026-09-20-capability-enablement-impact-plan.md](./2026-09-20-capability-enablement-impact-plan.md) | 多意图、语义摘要、PI 变更叙事等能力的真实启用门槛,以及项目级需求/风险/接口/测试追踪索引和文档修改影响闭环方案;配套 [调研](../ops/research/2026-09-20-capability-enablement-impact-research.md) |
+8
View File
@@ -108,3 +108,11 @@
| P0-CRED | backup 硬编码口令 + push URL token + 生产口令轮换 | **PASS** | 脚本无硬编码;docker 网旧口令 FATAL、新口令 OK;main health ok |
> 不改 `production_ready`。main **git 分支**对齐仍为 backlog(T20-I7);环境库已随 rebuild 至 schema 58。
---
## 2026-09-20 追踪留存分类(不改发布门禁)
| ID | 描述 | 状态 | 证据 | 计划动作 |
|---|---|---|---|---|
| D7-TRACE | 项目追踪索引与阶段回溯记录的留存类别 | **已分类,未授权删除** | [设计 §9](../system-design/2026-09-20-stage-backtrack-and-impact-loop-design.md)。`project_trace_*`、`stage_reopen_requests`、`stage_recheck_marks` 为 `record`。源文档依法清除时条目 tombstone,边与决议保留 | 不签 [D7 对话 ADR](../adr/2026-09-17-d7-chat-data-retention.md)。禁止物理删除,禁止把追踪表当可丢缓存重建。实施见 T2,不挡首发 |
+3 -2
View File
@@ -54,14 +54,15 @@
| 多意图扩面(U9–U12) | U9 LLM 分段实验;U10 mutate;U11 docgov;U12 workflow/run-control | partial | deferred_enhancement | [设计](../system-design/2026-09-15-multi-intent-hitl-plan.md);[go/no-go GO](../ops/research/2026-09-16-wave3-pu6-pu8-go-no-go.md);[脚手架](../test-reports/2026-09-16-pu8-u9-u12-flags-test-report.md);[U9](../test-reports/2026-09-17-w4-u9-segment-test-report.md);[U10](../test-reports/2026-09-17-w4-u10-mutate-test-report.md);[U11](../test-reports/2026-09-17-w4-u11-docgov-test-report.md);[U12](../test-reports/2026-09-17-w4-u12-run-control-test-report.md);[2026-09-20 复核](../ops/research/2026-09-20-capability-enablement-impact-research.md) | U9 proposer 已实现和注入但未进入生产聊天分段调用;提议请求已带 reasoning profile。U10–U12 当前为 dry-run/validated-only adapter。历史直接调用/PI 测试继续有效,不代表 live 接线。逐域实现和验收,禁止以 `full` 一次放量 | `intent-plan` |
| 对话 / ctxmgr baseline | 多轮上下文、刷新/重登/重启恢复、授权同集正文与计数、U10 端口化停止扩面 | done | non_blocker | [multi-turn](../system-design/multi-turn-dialogue/);[刷新审计](../audit/2026-09-13-chat-history-refresh-disappears.md);[U10](../test-reports/2026-09-15-chatlog-contextasm-u10-test-report.md);[门禁 B3](../test-reports/2026-09-16-chat-refresh-gate-test-report.md)(项目 6359) | **before**:语义摘要误标 D5 混入 → **after**:摘要迁「语义摘要 D3」;D7 数据治理独立。U10 停止扩面 | `chat` |
| 语义摘要(D3) | 授权后可见集合上的语义摘要;shadow → 可选替换 deterministic | partial | deferred_enhancement | [chat-agent-p6-backlog](../backlog/chat-agent-p6-backlog.md);[go/no-go GO](../ops/research/2026-09-16-wave3-pu6-pu8-go-no-go.md);[pu6](../ops/long-term/2026-09-16-pu6-semantic-summary-contract.md);[脚手架](../test-reports/2026-09-16-pu6-semantic-summary-test-report.md);[W2 真 PI](../test-reports/2026-09-17-w2-semantic-summary-shadow-test-report.md);[2026-09-20 复核](../ops/research/2026-09-20-capability-enablement-impact-research.md) | shadow 默认 off。`00058` 增加 `chat_summaries`,写入失败不再伪装成功;运行中的库仍是 schema 53。摘要请求已带 `tool_profile=reasoning`(argv 为 `--no-tools`),当前容器要等镜像或 dev 挂载更新后才生效。授权可见集 digest 仍空。`SEMANTIC_SUMMARY_REPLACE` 未接线。 | `chat` |
| 对话数据治理(D7) | 留存/删除口径、库·备份·日志控制、敏感字段加密边界 | deferred | deferred_enhancement(违规则升 blocker) | [计划](../remediation/2026-09-16-feature-matrix-production-readiness-plan.md) Scope Boundaries;[收口 §7.1](../remediation/2026-09-16-partial-deferred-completion-plan.md);[D7 ADR 草案](../adr/2026-09-17-d7-chat-data-retention.md);[W7 盘点](../audit/2026-09-17-d7-data-inventory.md);[报告](../test-reports/2026-09-17-w7-d7-inventory-test-report.md) | **after W7**:只读盘点完成(sessions/messages/KB/日志/备份/event)。**未发现**已确认基线违规,未写 gap-matrix。口径仍 `pending-compliance-signoff`;禁止按 365/180/30 物理删除。本行不升 done | `chat` |
| 对话数据治理(D7) | 留存/删除口径、库·备份·日志控制、敏感字段加密边界 | deferred | deferred_enhancement(违规则升 blocker) | [计划](../remediation/2026-09-16-feature-matrix-production-readiness-plan.md) Scope Boundaries;[收口 §7.1](../remediation/2026-09-16-partial-deferred-completion-plan.md);[D7 ADR 草案](../adr/2026-09-17-d7-chat-data-retention.md);[W7 盘点](../audit/2026-09-17-d7-data-inventory.md);[报告](../test-reports/2026-09-17-w7-d7-inventory-test-report.md);[D7-TRACE](../remediation/gap-matrix.md) | **after W7**:只读盘点完成(sessions/messages/KB/日志/备份/event)。**未发现**已确认基线违规,未写发布 blocker。口径仍 `pending-compliance-signoff`;禁止按 365/180/30 物理删除。追踪索引另定为 `record`([设计 §9](../system-design/2026-09-20-stage-backtrack-and-impact-loop-design.md)),不把本行升 done | `chat` |
| 智能体小队 | 角色-任务-工作区-黑板 | done | non_blocker | [agent-squad](../system-design/agent-squad/);[test 2026-09-07](../test-reports/2026-09-07-dynamic-squad-planning-test-report.md) | 非关键步骤降级(A5/A6)属 backlog | `squad` |
| 工作流治理 | 三正式工作流、设置页/DutyMode、动作级鉴权、真实 PI 三工作流 E2E、full/none 混合长链 | done | non_blocker | [三工作流整改](../remediation/2026-09-12-three-workflows-strict-governance-remediation.md);[409/职责](../test-reports/2026-09-14-workflow-plan-409-frozen-and-optional-duties-test-report.md);[鉴权](../test-reports/2026-09-14-governance-action-level-authz-test-report.md);[PI E2E](../test-reports/2026-09-16-pi-three-workflow-e2e-test-report.md);[Wave2 full/none](../test-reports/2026-09-16-wave2-real-pi-evidence-test-report.md) | full 跨用户审批 + none 免审批不阻塞已签。纯软件自举仍独立 planned | `workflow` |
| 研发设计控制(rdev) | 医疗第 4 工作流:13×60 manifest/模板、`squad.rdev_doc.v1` kind 编排、main-completed 硬 precheck、StageKey 动态化;不含前端/真 PI/键名空间化 | partial | deferred_enhancement | [设计](../system-design/project-workflow/07-研发工作流rdev接入-设计与实施计划.md);[short-term](../archive/ops/2026-09-17-rdev-workflow-integration.md);[模板深度](../archive/ops/2026-09-17-rdev-template-depth.md);[S0+S1 首批报告](../test-reports/2026-09-17-rdev-template-depth-test-report.md);[S1 续批报告](../test-reports/2026-09-17-rdev-template-depth-s1-continued-test-report.md);[写作规范](../system-design/project-workflow/08-rdev模板写作规范.md);[backlog](../backlog/2026-09-17-rdev-phase2-backlog.md) | **P0+P1 done**。**模板深度 S0+S1 首批 + S1 续批 done**:60/60 模板已补强;真 PI 抽样 PASS(含 `rd_planning_review` + `rd_design_vv`,项目 6446)。剩余:S3 overlay 与 R2/R3 已接。P2 名称匹配、阶段折叠、批量审批已接。选中 rdev 时显示与服务端相同的 CDO 前置说明(`workflowPrerequisite.test.ts`)。P4 键名空间化已接:发布清单用 `bd_`/`pm_`/`tm_`/`sw_`,旧键仍走同一套步骤和模板,旧 doc_id 仍可查(`keyspace_test.go`)。P3 三样本已在 dev 真 PI 上跑过(项目 6533):`rd_sw_plan` 规划期关闭;`rd_proposal` completed 但未对齐模板标题;`rd_planning_review` 当时质量门禁 score 20,是把同节后一张法规表算进问题行。门禁已只读第一张表;保存的终稿不再报「问题行缺少」。建议书标题仍未对齐模板。没有新的真 PI。见 [P3 报告](../test-reports/2026-09-19-rdev-p3-real-pi-test-report.md)。nightly 未扩成四工作流。 | `workflow-def` / `rdev-templates` |
| 纯软件项目自举 | 软件项目创建、Bootstrap、Delivery、受控工程交接 | partial | deferred_enhancement(明确不挡首发) | [设计](../system-design/2026-09-14-software-project-bootstrap-workflow.md);[ADR](../adr/2026-09-16-software-project-bootstrap-keys.md);[L1 报告](../test-reports/2026-09-16-software-project-bootstrap-test-report.md);[W5a](../test-reports/2026-09-17-w5a-software-bootstrap-ui-pi-test-report.md) | **before**:L1 + UI 仍克隆医疗模板。**after W5a**:catalog 驱动创建、软件不挂医疗 key、docs_only 真 PI 建议 delivery 且不自动激活。**SWBOOT-10 仍 stub**(W5b);本行不升 done | `workflow-design` |
| IAM / 鉴权 | 项目级 API 鉴权 + RBAC;会话/阶段授权 | done | 加固 | [v3 full inventory](../audit/authorization-matrix-v3-full.md);[session 中断](../test-reports/2026-09-16-iam-route-inventory-test-report.md);[fail-closed](../test-reports/2026-09-16-wave1-iam-fail-closed-test-report.md);[410 策略](../audit/2026-09-16-bug11-410-retire-decision.md);[R13](../audit/2026-09-16-r13-data-safety-checklist.md) | 全路由 inventory + session 中断负例 + 410 冻结 + R13 基线已签 | `authz` |
| 文档治理 | 法定文档生命周期 + 租约 + 受控正文读取 | done | non_blocker | [docgov](../test-reports/2026-09-08-docgov-lifecycle-and-claiming-framework-test-report.md);[正文 UI](../test-reports/2026-09-14-controlled-content-ui-acceptance.md);[canonical hash](../remediation/2026-09-14-controlled-content-canonical-hash-remediation.md) | 项目 143 只读;不终止 | `docgov` |
| 文档版本 baseline | 账本、人工修订、确定性 diff+lineage、运行时 UI、负责人通知 | done | non_blocker | [管理](../test-reports/2026-09-13-document-revision-management-test-report.md);[Round20 UI](../test-reports/2026-09-14-document-revision-runtime-ui-test-report.md);[ADR](../adr/2026-09-13-document-version-boundary.md);[proposed/authoritative](../ops/short-term/2026-09-20-proposed-authoritative-reports.md) | **before**:完整 PI narrative 混入 → **after**:迁「PI change-report 叙事」。fallback 报告是本行内显式行为,不是缺口。lineage GET 已按 URL 项目和文档可见性裁剪。test_manager 血缘的下游/上游版本改读文档版本,不再写死 1。Agent 候选报告为 `proposed`,正式提交才写 authoritative 后继并挂到版本;拒绝、替代后旧报告不能再出建议。人工修订、导入和聊天卡仍未分开预估与正式报告。项目追踪索引见整改方案 Track T | `docgov` |
| 文档版本 baseline | 账本、人工修订、确定性 diff+lineage、运行时 UI、负责人通知 | done | non_blocker | [管理](../test-reports/2026-09-13-document-revision-management-test-report.md);[Round20 UI](../test-reports/2026-09-14-document-revision-runtime-ui-test-report.md);[ADR](../adr/2026-09-13-document-version-boundary.md);[proposed/authoritative](../ops/short-term/2026-09-20-proposed-authoritative-reports.md) | **before**:完整 PI narrative 混入 → **after**:迁「PI change-report 叙事」。fallback 报告是本行内显式行为,不是缺口。lineage GET 已按 URL 项目和文档可见性裁剪。test_manager 血缘的下游/上游版本改读文档版本,不再写死 1。Agent 候选报告为 `proposed`,正式提交才写 authoritative 后继并挂到版本;拒绝、替代后旧报告不能再出建议。人工修订、导入和聊天卡仍未分开预估与正式报告,见 [T1](../ops/short-term/2026-09-20-impact-loop-t1.md)。项目追踪索引见下一行 | `docgov` |
| 阶段回溯与影响闭环 | 五表追踪索引、影响报告、L1 文档修订、L2 阶段再打开、待复核软标记、对话修订提案 | planned | deferred_enhancement(不挡首发) | [设计](../system-design/2026-09-20-stage-backtrack-and-impact-loop-design.md);[Track T](../remediation/2026-09-20-capability-enablement-impact-plan.md) | 设计已写,代码未开始。切片 [T1](../ops/short-term/2026-09-20-impact-loop-t1.md) [T2](../ops/short-term/2026-09-20-project-trace-index-t2.md) [B1](../ops/short-term/2026-09-20-stage-reopen-l2.md) [B2](../ops/short-term/2026-09-20-recheck-soft-hold.md) [B3](../ops/short-term/2026-09-20-chat-revise-bridge.md) [T3](../ops/short-term/2026-09-20-trace-multihop-t3.md) 均为 planned。未复核不拦截推进。追踪留存类别 `record`,不签 D7 对话 ADR | `trace-impact-design` |
| PI change-report 叙事 | 只读消费 diff+lineage 的 PI 叙事;失败全量降级 fallback | partial | deferred_enhancement | [Round20](../test-reports/2026-09-14-document-revision-runtime-ui-test-report.md);[go/no-go GO](../ops/research/2026-09-16-wave3-pu6-pu8-go-no-go.md);[pu7](../ops/long-term/2026-09-16-pu7-pi-narrative-contract.md);[脚手架](../test-reports/2026-09-16-pu7-pi-narrative-test-report.md);[W3 真 PI](../test-reports/2026-09-17-w3-pi-change-report-narrative-test-report.md);[2026-09-20 复核](../ops/research/2026-09-20-capability-enablement-impact-research.md);[最小化输入](../ops/short-term/2026-09-20-pi-narrative-clipped-diff.md) | flag 默认 off。`facts.json` 含截断后的 hunk 前后文和影响说明,以及完整 hunk/impact 计数与省略数;摘要 digest 仍不含正文。叙事请求已带 `tool_profile=reasoning`。运行中的 runner 尚未切到 `--no-tools`。不打开开关 | `docgov` |
| 前端工作台 | 三栏 + 块文档 + SSE;错误卡/进度/busy;版本冲突信封;demo seed 默认关;终止 preview | done | non_blocker | [workbench](../test-reports/2026-09-08-three-column-workbench-and-block-document-test-report.md);[双标签](../test-reports/assets/2026-09-15-conversation-intent-dual-tab/screenshots/tab-b-busy.png);[demo](../test-reports/2026-09-16-demo-seed-pollution-test-report.md);[B4](../test-reports/2026-09-16-frontend-gate-b4-test-report.md)(项目 6363) | **before**:空「缺口」却 partial → **after**:本行 done。其他 409 消费方信封复用另列 hardening backlog | `web` |
| PI Runner / 配置链 | pi-agent + MiniMax + typed-result-v1 | done | non_blocker | [piagent](../test-reports/2026-09-13-codex-audit-p0-remediation-test-report.md);[container-env](../test-reports/2026-09-13-container-env-configuration-test-report.md);[typed-result](../test-reports/2026-09-15-pi-typed-result-v1-test-report.md) | 文档生成仍使用读写和搜索工具。`tool_profile=reasoning` 的 argv 是 `--no-tools` 且不加载搜索扩展;未知 profile 拒绝启动。dev 挂载了 `pi-args.mjs`,但本轮未重启容器 | `pi-agent` |
@@ -0,0 +1,244 @@
# 阶段回溯与影响闭环设计
**状态**: accepted(设计;未改业务代码)
**日期**: 2026-09-20
**分支**: `feature/stage-backtrack-design`
**基线**: [功能启用与文档影响整改方案](../remediation/2026-09-20-capability-enablement-impact-plan.md) Track T(五表 `project_trace_*`)
**决策方式**: 2026-09-20 grill 三轮;本文只记录已定决策与由其直接推出的实现约束
---
## 1. 要解决的三件事
1. **阶段推进已存在,不重做。** 创建者把当前阶段推进到下一阶段。门禁、三权审批、创建者独占推进保持现状。
2. **修改之后要能很快看出波及面。** 小队编制完成或成员改了材料、需求、对话结论之后,助手给出:可能影响哪些文档与条目、风险是什么、建议下一步做什么。
3. **后面阶段的新材料可能反过来碰前面已完成阶段。** 系统要标出来,并提供两条处置路径,但不把人锁死在流程里。
松散约束的总原则:**信号自动产生,状态改变必须有人拍板。** 未处理的影响不阻止推进。
## 2. 已定决策
| 议题 | 决定 |
|------|------|
| 方案基线 | 沿用五表追踪索引,回溯层共用同一影响内核 |
| 回溯形态 | 双层:L1 文档修订(默认)+ L2 再打开阶段(重路径) |
| 再打开时的文档 | 选择性解锁:勾选的文档退回 `drafting`,其余保持 `approved` |
| 下游已完成阶段 | 保持 `completed`,加「待复核」软标记;再次推进时二次确认 |
| 待复核闭环 | 仅人工:明确「无需变更」,或已经发起修订。禁止自动清除 |
| 分析触发 | 混合:文档修订/批准、阶段推进、对话结论沉淀自动跑;参谋与 API 可随时手动跑 |
| 门禁 | 全域统一松散,含医疗域 `rdev`。未复核不阻塞推进 |
| L2 发起权 | 受影响文档的编制/审核/批准人可申请;创建者批准后执行。创建者也可直接发起 |
| 候选边裁决 | 不新增 `trace_reviewer`。由**下游文档编制人**确认或否决;无编制人时由创建者裁决 |
| 留存 | `project_trace_*` 与本设计新增的申请/标记表定为合规业务记录(`record`)。随项目保留,禁止当可丢缓存随意删后重建 |
| 对话 | 纳入桥接:参谋可一键生成受控文档修订提案,人拍板后才改正文 |
| 试点 | `main` + `software_delivery` 先行,`rdev` 后跟 |
| 本轮范围 | 设计与任务拆分。不写业务代码,不改 `production_ready` |
本决定**不**签 [D7 对话留存 ADR](../adr/2026-09-17-d7-chat-data-retention.md)。该 ADR 仍是 `pending-compliance-signoff`。这里只给追踪索引和回溯记录分类,不授权任何物理删除。
## 3. 现状里可复用的部分
| 能力 | 位置 | 本设计怎么用 |
|------|------|----------------|
| 创建者推进 + 文档须 `approved` | `internal/projectinstance/stage_service.go` `AdvanceStage`;`gate.go` `evaluateStageReadiness` | 保持。软标记只增加二次确认,不改变 Ready 的文档条件 |
| 阶段只前进 | `internal/projectinstance/stage_store.go` `AdvanceStage`;状态仅 `pending/active/completed/skipped` | L2 增加一条受控回退,不开放任意回跳 |
| 文档驳回回 `drafting` | `internal/docgov/state_machine.go` | L1 继续走提案/驳回。L2 解锁用新的审计动作,不伪装成驳回 |
| 变更提案 | `internal/docgov` `ChangeProposal`;`ImpactAnalysis` 现为自由文本 | 提案仍由编制人拍板。影响正文改由报告里的确定性事实供给,提案文本只作说明 |
| 文档级血缘 | `document_lineage`;`CheckAndPropagateStale`;目前实质只有 test_manager 一条边 | 保留「消费了哪一版文档」。条目边解释「为什么影响到这一处」 |
| 版本账本 | `document_snapshots` / `document_change_events` | 影响分析读已提交 diff,不重扫工作区全文 |
| 预留实例状态 `awaiting_stage_confirmation` | `project_workflow_instances.status`;代码从未写入 | **本设计不占用。** 它会把整条实例停住,和松散约束相反 |
| 阶段就绪待办 | `stage_advance_requests` | L2 申请单独成表,形态对齐,不复用推进待办 |
## 4. 影响分析闭环
### 4.1 触发
| 来源 | 方式 | 写什么 |
|------|------|--------|
| 人工修订提交、Agent 正式提交、导入提交 | 自动,挂现有 change event / outbox | 一份影响报告 |
| 文档变为 `approved` | 自动 | 上游批准可能让下游条目变脏;出报告,不自动改下游正文 |
| 阶段 `advance` 成功 | 自动 | 对照本阶段新批准内容,标出已完成上游/下游里被碰到的条目 |
| 对话结论被标为可沉淀(见 §7) | 自动 | 只出报告与修订提案草案,不改受控正文 |
| 参谋「分析这次修改的影响」或 API | 手动 | 同一份报告结构 |
失败、索引未完成、调用者看不见目标,三种情况必须分开。禁止把 `index_pending` / `partial` / `failed` 显示成「无影响」。语义沿用整改方案里的七种影响状态:`confirmed_impact`、`possible_impact`、`dependency_unchanged`、`no_known_dependencies`、`index_pending`、`partial`、`failed`。
### 4.2 内核
- 事实来自五表:条目身份、不可变修订、关系边、人工决议、索引覆盖状态。模型见整改方案 §4,本文不另起一套表。
- 从变更所触及的条目做**有界反向遍历**,默认深度 3,必须检测环。
- 服务端计算受影响集合、影响状态和风险下限。模型只能写人能读的解释,不能把 `possible_impact` 改成 `confirmed_impact`,也不能压低风险。
- 向量相似只生产 `model_candidate` 边。未确认前只贡献 `possible_impact`。
### 4.3 报告给人看的内容
1. 这次改了什么(旧值 → 新值,或「无结构化 diff」)。
2. 受影响的文档、条目、所在阶段,以及影响状态。
3. 风险下限和依据(例如已批准下游仍引用旧修订)。
4. 不确定的部分(候选边、索引未覆盖)。
5. 建议的下一步,每条都是可点的动作,而不是一段无法执行的文字。
建议动作只有三类:`无需变更`(清除对应软标记)、`发起 L1 修订提案`、`申请 L2 再打开`。点下去只创建草案或申请,随后重新检查权限、职责、租约和版本。
## 5. 双层回溯
```mermaid
flowchart TD
changeEvent["修改事件"] --> analysis["影响分析"]
analysis --> report["影响报告"]
report --> l1["L1 修订提案"]
report --> mark["下游待复核标记"]
l1 --> mark
report -->|"需要重编或新文档"| request["L2 申请"]
request --> creatorOk["创建者批准"]
creatorOk --> reopen["上游阶段再打开"]
reopen --> unlock["只解锁勾选文档"]
unlock --> squad["可重跑小队"]
squad --> reapprove["重新审批后阶段再次完成"]
mark --> clear["人工闭环"]
```
### 5.1 L1:文档修订(默认)
阶段状态不动,`completed` 保持 `completed`。
- 受影响且已批准的文档:走现有变更提案或新版本修订,编制人决定是否改。
- 未批准、仍在 `drafting` 的文档:不额外解锁,编制人按原职责改。
- 适用:措辞、单条需求、验收标准、引用关系的局部更新。
- 对接:`internal/docgov` 提案与 `internal/docrevision` 人工修订。不新增阶段状态。
### 5.2 L2:再打开阶段(重路径)
只在需要重跑小队、补一篇文档,或修订范围大到不适合在锁定正文上打补丁时使用。
**确认态不放在实例状态上。** 新增 `stage_reopen_requests`(对齐 `stage_advance_requests`):
| 字段要点 | 说明 |
|----------|------|
| 阶段实例 | 必须当前是 `completed` |
| 申请人 | 该阶段某份受影响文档的 author / reviewer / approver,或创建者 |
| 勾选文档 | 准备退回 `drafting` 的 doc task;空列表拒绝 |
| 理由 | 必填,写入审计 |
| 状态 | `pending` → `approved` / `rejected` / `cancelled` |
创建者直接发起时,同一事务内写入并批准,不给自己再排一个待办。其他人发起时保持 `pending`,直到创建者批准。
批准后,同一事务:
1. 该阶段 `completed → active`。
2. 勾选文档执行新动作 `reopen_for_revision`:`approved → drafting`,解锁正文,记原因、操作者和前一个 snapshot。未勾选的文档保持 `approved` 且继续锁定。
3. 不把阶段内其他文档打回,不把下游阶段改成 `pending`,不把实例改成 `awaiting_stage_confirmation`。
4. `config_revision` 递增,沿用现有乐观锁。
**允许两个「活」阶段并存。** 推进游标仍是 position 最大、状态不是 `completed/skipped` 的阶段。被再打开的上游是附加可编辑阶段,界面标成「再打开」,不抢下游正在进行的编制。这样后面的阶段不用停下来等前面重走一遍。
再打开阶段再次推进时:
- 门禁只要求**本次被解锁**的文档重新 `approved`。本来就保持 `approved` 的文档不再卡一次。
- 创建者确认后,该阶段回到 `completed`。
- 这次推进**不**自动清除下游「待复核」标记。
被解锁文档可以按原 executor 重跑小队;未解锁任务不得被这次重跑覆盖。
### 5.3 为什么不用驳回代替 L2 解锁
驳回表示审核/批准没通过。再打开是「前面已经生效,现在因新材料要改一版」。审计、通知和责任人都不该写成驳回。`reopen_for_revision` 单独留痕,目标状态同样是 `drafting`。
## 6. 待复核软标记
新增 `stage_recheck_marks`,挂在阶段实例上:
- 产生:影响报告判定某已完成阶段的文档或条目受到 `confirmed_impact` 或未决 `possible_impact`。同一阶段、同一来源报告只保留一条未关闭标记。
- 含义:请人看一眼。阶段仍是 `completed`,文档仍是原状态。
- 推进:`GetStageReadiness` 仍可 `Ready=true`。若目标阶段或它依赖的已完成上游带未关闭标记,响应增加 `requires_recheck_ack=true`。`AdvanceStage` 在带上 `acknowledge_recheck=true` 后才执行,并记下「创建者已知悉」。知悉不等于闭环。
- 清除:只有人写下 `no_change` 决议,或针对该标记发起了 L1 提案 / L2 申请。发起即清除「还没人理」的状态;后续修订失败不会把标记偷偷清掉——提案被拒或 L2 被拒时标记重新打开。
- 禁止:上游出现新 snapshot、文档被批准、索引重建完成,都不得自动清除。
医疗域同样不把未关闭标记变成硬门禁。已知取舍见 §10。
## 7. 对话桥接
今天对话只能把消息收成自由文档,不能直接改受控文档。本设计补一条提案桥,不补一条直写桥。
| 意图 | 行为 |
|------|------|
| `project.impact.analyze` | 只读。对当前对话里点名的修改、文档或条目出影响报告 |
| `project.doc.revise_propose` | 创建修订提案或 agent candidate。编制人在文档侧确认后才进入正文 |
约束:
- 参谋只能看见调用者有权看的文档和条目。
- 意图注册方式对齐 `internal/intent/registry.go` 里的 `project.stage.advance`:写意图 `RequiresConfirm=true`。
- 执行入口对齐 `internal/chat/action_executor.go`:确认前零业务写。
- 自由文档沉淀保留,作为不进入受控台账的旁路。
## 8. 候选边由谁裁决
整改方案 §7 推荐的项目级 `trace_reviewer` **不实施**。
- `explicit_reference`、`workflow_consumption`、`rule` 边由抽取器直接成为已确认边。
- `model_candidate` 由**下游文档当前编制人**确认或否决,写入 `project_trace_edge_decisions`。
- 该文档 `DutyMode=none` 或没有编制人时,由项目创建者裁决。
- 未决候选只产生 `possible_impact`。
- 全局管理员不因管理员身份获得项目内文档或候选的确认权。
- 确认事务仍须校验项目、条目、两端文档属于同一项目,且操作者看得到下游文档。源端文档不可见时,不展示其标题和正文,只保留「存在一条不可见上游」的计数,避免侧信道。
## 9. 留存
| 数据 | 类别 | 规则 |
|------|------|------|
| `project_trace_items` / `item_revisions` / `edges` | `record` | 随项目保留。可做**审计过的修复重放**(从源 snapshot + 决议账本重建派生列),不可先删光再当缓存重建 |
| `project_trace_edge_decisions` | `record`,且是决议权威 | 修复重放必须原样带回确认、否决、撤销 |
| `project_trace_index_state` | `record` | 覆盖水位属于合规轨迹的一部分,不单独丢弃 |
| `stage_reopen_requests`、`stage_recheck_marks` | `record` | 与阶段实例同寿命 |
| 影响报告 | 沿用现有 change report 留存 | 不因索引重建覆盖历史时间线 |
源文档因依法清除而删除时:条目改为 tombstone,边和决议保留,影响报告保留 digest,不级联物理删除。具体清除仍等 D7 合规签字,本决定不打开删除开关。
这覆盖整改方案审阅的第二项遗留,并**取代**该方案 §10「条目、修订、关系和索引状态是可重建投影、可丢弃」的表述。人工决议单独权威这一点不变。
## 10. 已知取舍
全域松散是刻意的。医疗设计控制(`rdev`)里,上游需求变了而下游验证方案仍显示已完成,合规上应有人复核。本系统选择:
- 不替合规官拦截推进;
- 把待复核做成推进前必须看见并确认的提示,而不是可折叠的小字;
- 保留申请、解锁、知悉、闭环的全部审计,供事后检查。
若以后要为某个工作流打开硬门禁,应做成该工作流 manifest 上的可选开关,默认关闭。首期不做这个开关,避免现在就分叉成两套门禁。
## 11. 模块对接
| 模块 | 改动面 | 切片 |
|------|--------|------|
| `internal/docrevision` | 提交后出报告;风险与影响状态已有雏形(`impact.go`、`risk.go`) | T1 |
| `internal/projectworkflow` | lineage 继续记文档版本消费;stale 不再是唯一影响类型 | T1 |
| 新追踪存储(整改方案五表) | 迁移、抽取 UR/RS/REQ/TC、项目页 | T2 |
| `internal/projectinstance` | `stage_reopen_requests`、阶段 `completed→active`、选择性解锁、推进知悉 | B1 |
| `internal/docgov` | `reopen_for_revision`;提案桥接 | B1 / B3 |
| `web` 工作流条与文档栏 | 再打开申请、勾选解锁、待复核二次确认 | B1 / B2 |
| `internal/intent` + `internal/coordinator` + `internal/chat` | 两个新意图 | B3 |
| 追踪查询 | 深度 3 反向遍历、候选治理 UI | T3 |
试点验收只覆盖 `main` 与 `software_delivery`。抽取器可以识别已出现的 UR/RS/REQ/TC,但 `rdev` 的阶段再打开不在首期验收里。`software_delivery` 的 D0 变更说明继续作为人写的变更叙述,不替代影响报告。
## 12. 实施顺序
1. **T1** 把还没接上的提交来源(人工修订、导入、聊天侧正式提交)收进同一份影响报告。已完成的 lineage 鉴权、proposed/authoritative 报告、PI 叙事裁剪不重做。
2. **T2** 五表、键投影、项目「需求与影响」页。D7 追踪分类已在本文决定,不再等对话 ADR。
3. **B1** L2 再打开。可与 T2 并行,但报告里的「申请 L2」按钮等 T1 报告存在后再接。
4. **B2** 软标记与二次确认。依赖 B1 的阶段读写,不依赖多跳。
5. **B3** 对话桥。依赖 T2 的条目身份才能「触及条目」;在此之前只允许对文档出提案。
6. **T3** 多跳与候选边。依赖 T2。
切片任务见 `.doc/ops/short-term/2026-09-20-stage-backtrack-*.md` 与 `2026-09-20-impact-loop-t1.md`、`2026-09-20-project-trace-index-t2.md`、`2026-09-20-trace-multihop-t3.md`。
## 13. 非目标
- 不改创建者推进权和文档三权状态机的既有转移。
- 不把已完成阶段自动打回,不级联冻结下游。
- 不新增 `trace_reviewer` 角色。
- 不在本轮启用硬门禁,不为 `rdev` 单独做拦截。
- 不把对话直接写入受控正文。
- 不签整份 D7,不执行物理删除,不改 `production_ready`。
- 不在本设计任务里改 `internal/` 或 `web/`。
+19
View File
@@ -146,6 +146,24 @@
---
### 9. 阶段回溯与影响闭环
| 项 | 链接 |
|-----|------|
| 主设计 | [2026-09-20-stage-backtrack-and-impact-loop-design.md](2026-09-20-stage-backtrack-and-impact-loop-design.md) |
| 追踪索引基线 | [../remediation/2026-09-20-capability-enablement-impact-plan.md](../remediation/2026-09-20-capability-enablement-impact-plan.md) |
| 一句话总结 | 修改自动产生影响报告;默认只修订文档,必要时再打开已完成阶段;未复核不拦截推进 |
**核心要点**:
- 沿用五表追踪索引,不另建一套需求表。
- L1 保持阶段 `completed`;L2 只解锁勾选文档,并允许与后面的活动阶段并存。
- 不占用实例状态 `awaiting_stage_confirmation`。
- 待复核标记只能人关;推进前必须知悉,知悉不等于闭环。
- 候选边由下游编制人裁决。追踪数据留存类别是 `record`。
---
## 🏗️ 在整体架构中的位置
```
@@ -210,6 +228,7 @@
└── 06-Phase7-全链路验收与发布基线.md
├── 2026-09-14-module-decoupling-architecture.md ← 模块化单体解耦
├── 2026-09-20-module-development-standards.md ← 开发者入口:契约 / 接口 / 故障隔离
├── 2026-09-20-stage-backtrack-and-impact-loop-design.md ← 阶段回溯与影响闭环
.tmp/ ← 中间分析文件
├── intent-recognition/