38 KiB
38 KiB
title, type, date, deepened, status, artifact_contract, product_contract_source, execution, wave0
| title | type | date | deepened | status | artifact_contract | product_contract_source | execution | wave0 |
|---|---|---|---|---|---|---|---|---|
| FEATURE-MATRIX Production-Ready Continuity - Plan | refactor | 2026-09-16 | 2026-09-16 | in_progress | ce-unified-plan/v1 | ce-plan-bootstrap | code | done |
FEATURE-MATRIX Production-Ready Continuity - Plan
Goal Capsule
- Objective: 让维护者能够从
FEATURE-MATRIX.md准确判断当前发布基线、真实剩余工作和每项工作的关闭条件,同时保持已经签署的 production-ready 状态不被文档整理或后续增强误伤。 - Means: 将能力成熟度与发布门禁拆成两个正交维度,先校准证据和状态,再按“补证、基建加固、可选增强”分波实施(KTD1、KTD2)。
- Authority:
gap-matrix.md决定发布 blocker;FEATURE-MATRIX.md决定能力成熟度;CURRENT.md记录协作与环境快照。 - Execution profile: verification-first;文档校准不改业务行为;新能力默认 off、legacy 或 shadow;跨环境先以 receipt 绑定同一 commit 和 digest,PU5B 完成后只晋升同一已验证 image。
- Stop conditions: 任一波发现授权旁路、持久化丢失、双写者、跨用户泄漏、当前 B1–B4 回归或 main/prod fail-open 时,停止扩面并将该问题写入
gap-matrix.md。
Product Contract
Summary
当前系统按仓库 SSOT 已达到 production_ready=yes。本计划不重新定义首发范围,而是修正矩阵漂移,补上可判定的关闭条件,并把剩余工作排成不会改变当前默认路径的独立波次。
Problem Frame
FEATURE-MATRIX.md 目前把五类状态都写成 partial:已完成但文档未收口、实现完成但真实证据未签、首发后增强、实验性能力和刻意关闭能力。结果是维护者无法从矩阵判断哪些事项会影响发布,也无法知道某行何时能转为 done。
矩阵还存在已确认的事实漂移:schema 45 与当前 schema 47 冲突,语义摘要编号误写为 D5,IAM 仍列出已经闭环的历史读取授权缺口,可靠事件核心被 FAV 的 off 状态拖成 partial。这些问题需要先在文档层纠正,再决定是否立业务实现任务。
Requirements
Status and ownership
| ID | Requirement |
|---|---|
| R1 | production_ready 只由 gap-matrix.md 的发布门禁决定;能力行不是“全部 done 才能发布”的总开关。 |
| R2 | 每行必须声明既定能力边界、能力状态、发布关系、剩余工作、关闭条件、owner/mutex 和当前证据。 |
| R3 | done 表示本行声明能力已达到生产验收,不表示该领域没有后续;新增增强应拆行或进入 backlog。 |
| R4 | 补证、修复、增强、实验和 deferred 能力必须分开,不能共用一个模糊的“后续”。 |
Evidence and release safety
| ID | Requirement |
|---|---|
| R5 | 状态提升必须同时核对源码、迁移、部署 artifact、API/runtime 和适用测试层级;单独改文档不得提升能力状态。 |
| R6 | 证据必须记录或可追到 commit、环境、schema、镜像、runner/model/protocol、日期和测试类型。 |
| R7 | 代码、schema、compose、flag、runner 协议或环境晋升触发受影响行重验;历史报告保留但不得证明新 artifact。 |
| R8 | 新功能先使用 additive migration 和兼容读取,再以 off/legacy/shadow 上线;任何放量都要有独立回滚点。 |
| R9 | 回滚必须能读取、取消和收口已持久化的 plan/run/event;禁止回滚 schema 或让旧 app/worker 不认识新状态。 |
Authorization and agent behavior
| ID | Requirement |
|---|---|
| R10 | UI、API、聊天和产品 PI Agent Runner 必须进入同一 owner service,并共享即时授权、资源版本、幂等、审计和错误语义。 |
| R11 | 正文、计数、摘要、搜索、计划卡、RAG 和 Agent tools 必须从同一授权后可见集合派生。 |
| R12 | 产品 PI Runner 只生成建议、内容或解释;权限判断、状态迁移、版本提交和法定审批由服务端及已认证用户完成。 |
| R13 | 所有真实 PI 路径必须共享最小化出站、tenant/project 绑定、敏感字段脱敏、凭证最小权限、日志/产物留存和泄漏负例;夜间验收只使用隔离的合成数据。 |
Actors
- A1. 文档维护者:更新矩阵、证据链接和历史 superseded 指针。
- A2. 发布负责人:决定 blocker、环境晋升、回滚和 production-ready 翻旗。
- A3. 模块 owner:实现或验证单个 action,不跨 mutex 批量扩面。
- A4. 最终用户:通过 UI、API 或聊天使用同一服务端能力。
- A5. 产品 PI Agent Runner:受控生成或解释,不承担 authority。
Key Flows
- F1. 矩阵状态更新
- Trigger: 新实现、补证或环境晋升完成。
- Actors: A1、A2、A3。
- Steps: 核对行边界 → 匹配证据 → 评估发布关系 → 更新矩阵 → 仅在 blocker 变化时更新 gap-matrix。
- Outcome: 能力状态和发布状态不互相污染。
- F2. 增强能力上线
- Trigger: 一个 deferred/partial 子能力获批实施。
- Actors: A2、A3、A4、A5。
- Steps: additive migration → 默认关闭 → 隔离验证 → dev 灰度 → test 晋升 → main 晋升或独立回滚。
- Outcome: 当前路径持续可用,新能力只在证据完整后放量。
Acceptance Examples
- AE1. Covers R1–R4. 前端工作台现有范围证据完整时,该行可改
done;未来其他 409 消费方优化进入独立 backlog,不把该行退回partial。 - AE2. Covers R5–R9. multi-intent U8 adapter 已合入但真实 PI 为 SKIP 时,矩阵写“代码与默认 legacy 基线完成、真实生成闭环未签”,tier 不升到
confirm/full。 - AE3. Covers R10–R12. full 文档由真实 PI 生成后由独立用户完成审核/批准;none 文档生成后无审批动作且不阻塞阶段。
- AE4. Covers R5–R8. PI change-report 超时或返回非法 schema 时,用户仍看到明确标记的 deterministic fallback,候选版本和正文不被 PI 输出修改。
- AE5. Covers R1、R6、R7. 夜间真实 PI 因 runner 不可用失败时,结果记为 infrastructure failure 并阻止下一次晋升;已发布版本不会被自动改写为未就绪。
Scope Boundaries
In scope
- 整改
FEATURE-MATRIX.md的状态契约、行边界、证据和关闭条件。 - 同步仍作为活 SSOT 的 CURRENT、gap-matrix、remediation index 和历史文档指针。
- 安排 IAM、补证、CI、语义摘要、PI change-report、多意图扩面的后续工作。
- 为每个波次定义回归、部署、证据和回滚门。
Deferred to Follow-Up Work
- Final Artifact Vault:独立审计,保持
FAV_DEGRADED_READ=false,禁止整支合入feature/final-artifact-vault。 - 多意图 U9 LLM 分段实验:仅在预注册真实 PI eval 阈值通过且安全错误为 0 后考虑放量。
- 多意图 U10–U12:每个 action 独立任务、flag、owner、授权负例和回滚点。
- D7 对话留存与敏感字段加密:独立安全治理项;先完成数据分类、当前数据库/备份/日志控制盘点和合规口径,再设计迁移、回滚与验收。若盘点确认当前基线违反已确认的安全或合规要求,必须立即写入
gap-matrix.md,不能继续作为普通 backlog。
Out of scope
- 纯软件项目自举。
- 将 Herdr、
context_pi、Cursor、Codex 或其他工程协作 Agent 作为产品 PI Agent Runner 的验收证据。 - 在本次方案编制和 Wave 0 阶段修改业务代码、启用 dormant flag、合并
dev或操作共享容器。
Success Criteria
- 维护者能在一行内判断“当前能力是否完成、是否影响发布、还差什么、用什么证据关闭”。
- 已确认的 L1、前端工作台和可靠事件核心不再因无关 backlog 永久
partial。 - IAM、multi-intent U8、full/none、CI、语义摘要和 PI 叙事都有独立的关闭条件,不再用 stub、SKIP 或 fallback 冒充完整验收。
- 后续任一波失败都可回到当前默认路径,B1–B4 和 schema 47 基线不被破坏。
Planning Contract
Key Technical Decisions
- KTD1. 能力状态与发布状态正交。
FEATURE-MATRIX.md记录能力成熟度,gap-matrix.md记录发布 blocker;仅当前生产契约被证据推翻时回退production_ready。Governs R1–R4。 - KTD2. 按冻结的能力边界关闭行。 已完成范围转
done,新增增强拆成新行或 backlog,避免永久partial。任何边界变更都要保留 before/after、逐项迁移去向和原边界已满足的证据,禁止靠缩小口径制造done。Governs R2–R4。 - KTD3. 证据按变化触发重验。 不设机械 TTL;按代码、schema、artifact、flag、runner/protocol 和环境晋升触发重验。Governs R5–R7。
- KTD4. 补证和修复分离。 full/none 与 multi-intent U8 先执行真实验收;只有验收失败并定位为产品缺陷后才开修复分支,修复后必须重验。Governs R5、R8。
- KTD5. 逐能力安全放量。 migration 只 expand,新能力默认 off/legacy/shadow,app/worker 保持向后读取和收口能力。Governs R8、R9。
- KTD6. 共享 command 与共享 authorized view。 所有入口调用同一 owner port,读模型从同一授权集合派生。Governs R10、R11。
- KTD7. PI 叙事不成为事实源。 diff、lineage、risk floor、版本和审批由服务端确定;PI 失败时保留显式 fallback。Governs R12。
- KTD8. 同一 artifact 晋升是独立发布加固。 在不可变镜像流水线落地前,dev/test/main 至少记录同一候选 commit、各环境 image digest 和构建证明,不得声称已实现 same-image promotion;落地后 test/main 只引用候选 commit 一次构建出的 digest。Governs R5、R7–R9。
High-Level Technical Design
Status decision
flowchart TB
A[Read declared capability boundary] --> B{Current evidence satisfies boundary?}
B -->|No| C{Is capability active in release path?}
C -->|Yes and contract regressed| D[Mark blocked and update gap-matrix]
C -->|No| E[Keep partial, planned, or deferred]
B -->|Yes| F{Remaining work belongs to same boundary?}
F -->|Yes| G[Keep partial with explicit exit gate]
F -->|No| H[Mark current row done]
H --> I[Create separate enhancement or deferred row]
Safe rollout and rollback
flowchart TB
A[Expand schema and compatible readers] --> B[Deploy flag off or legacy]
B --> C[Unit and isolated PG evidence]
C --> D[Dev shadow or targeted live]
D --> E{Stop gate passes?}
E -->|No| F[Disable new writes and drain]
F --> G[Keep read, cancel, and finalize compatibility]
E -->|Yes| H[Test promotion with receipt]
H --> I[Main promotion with same commit and proven digest]
I --> J[Update evidence and matrix]
Current Residual Work Map
| Area | Baseline now | Required closure | Current classification / transition |
|---|---|---|---|
| Intent L1 | 18 类、三分支、读写分流、busy 已签 | 从本行移除 U9–U12,确认纯依赖门禁仍在 | done |
| Multi-intent baseline | U1–U8 code/default legacy + Wave2 real PI | Playwright 双标签仍 gated;升 tier 另开 | done |
| Multi-intent expansion | U9–U12 未进入首发 | U9 eval;U10–U12 per-action | 当前 deferred;获批 short-term 开始后转 partial |
| Chat / ctxmgr baseline | 刷新恢复与授权同集已签 | 修正文档状态;新摘要另列 | done |
| Semantic summary (D3) | deterministic summary 已有 | 产品 go/no-go;授权输入、shadow、fallback | 当前 deferred;获批 short-term 开始后转 partial |
| Chat data governance (D7) | 当前生产控制待盘点 | 数据分类、留存删除、数据库/备份/日志控制与敏感字段加密边界 | deferred;确认违规时升级 blocker |
| Workflow governance | 正式工作流、鉴权、三工作流 PI、full/none 长链已签 | 纯软件自举仍 planned | done |
| IAM / authz | 已知历史读取缺口已闭环 | 全路由 inventory、PG fail-closed、410 决策 | partial |
| Document revision baseline | 账本、确定性 diff/lineage 与 UI 已签 | 修正文档状态;PI 叙事另列 | done |
| PI change-report narrative | deterministic report 已有 | 产品 go/no-go;只读 narrative、fallback 永久保留 | 当前 deferred;获批 short-term 开始后转 partial |
| Frontend workbench | 当前声明范围均有证据 | 修正文档状态;增强另列 | done |
| CI / E2E | PR CI、PG、backup、web 已有 | nightly real PI;TempDir race flake | partial |
| Artifact promotion | 同 commit + receipt digests + 单机 same-image pin 已落地 | 远程 registry 不可变推送另立 | 当前 done(Wave 2C;单机 retag) |
| Reliable events | 核心 live 且旧 hook 退出 | 与 FAV 拆行 | done |
| FAV | 明确 off | 独立审计与 go/no-go | deferred |
Phased Delivery
| Wave | Units | Release behavior | Exit gate |
|---|---|---|---|
| Wave 0: SSOT calibration | PU1–PU2 | 只改文档,不改代码或 flag;先只读核对已部署 IAM store 选择和缺表行为 | 三份 SSOT 无矛盾;历史指针可追溯;若发现当前发布契约回归,先更新 gap-matrix 再退出本波 |
| Wave 1: Safety guardrails | PU3、PU5A | IAM fail-closed 与 race 修复独立交付 | 当前 B1–B4 全绿;授权用户 happy path 不变;新增 fail-closed 负例通过 |
| Wave 2: Evidence closure | PU4 | 补真实 PI/browser/restart 证据;产品缺陷另开原子修复任务后重验 | 目标场景 PASS,或以明确 FAIL/blocker 退出;不得用“已分类”冒充关闭 |
| Wave 2B: Release hardening | PU5B | 夜间 PI、promotion receipt、不可变 artifact 分阶段落地 | gate 可执行、可审计、可人工豁免且不改变已发布版本状态 |
| Wave 3: Optional capability selection | PU6–PU8 | 只做逐能力 go/no-go 和独立任务设计;未获批不实施 | 有用户信号、收益、维护成本、owner 和预注册阈值;否则保持 deferred |
System-Wide Impact
- Authorization: IAM inventory 覆盖 list/detail/search/export/count/SSE/RAG/Agent tools;任何 unavailable/error 路径 fail closed。
- Data lifecycle: 新状态采用 additive migration;回滚继续读取和收口已有 plan/run/event。
- Agent parity: UI、API、聊天和产品 PI Runner 共享 owner command 与 authorized view;Herdr 不进入产品验收。
- PI data boundary: 真实 PI 只接收 allowlist 后的最小输入,并绑定 tenant/project;服务端脱敏,凭证最小权限且可轮换,日志和测试产物有访问与保留边界。
- Operations: worktree 只做静态、单元和隔离 PG;合入、rebuild、共享容器和环境晋升占唯一集成槽。
- Documentation: 历史证据不删除;过时文档增加 superseded/implemented 指针。
Risks and Mitigations
| Risk | Consequence | Mitigation |
|---|---|---|
| 文档修改直接把 partial 改 done | 状态提升没有新证据 | PU1 定义证据门;PU2 只对已满足冻结边界的行收口 |
| main 缺 IAM 表时回退内存 store | 权限和会话失去持久权威 | PU3 改为 dev/test 显式双门 opt-in;空值、未知环境和 main/prod 一律 fail closed |
| multi-intent U8 code-complete 被写成 real-PI-complete | 误升 tier 后出现双执行或不可恢复 | PU4 独立补真实 PI、撤权、刷新和重启证据 |
| full/none 语义混淆 | none 被错误要求审批或阻塞阶段 | PU4 分别验证 full 人工审批与 none 免审批负例 |
| PI narrative 覆盖确定性事实 | 报告失真或阻断版本流程 | PU7 只消费只读 diff+lineage,任何 schema 偏差全量降级 |
| 夜间 PI 偶发失败污染发布状态 | 无法区分供应商故障和产品回归 | PU5B 分类 infra/product failure,以 commit/digest receipt 阻止下一次晋升并保留审计豁免 |
| 多 action 共用开关 | 无法单独回滚 | PU8 只产出独立 short-term、flag、owner 和证据契约,不在本计划批量实现 |
| FAV 整支合入 | 带入旧实现或启用 degraded read | 保持 deferred;未来只摘取已审计的原子提交 |
Implementation Units
PU1. Define the matrix contract
- Goal: 为
FEATURE-MATRIX.md建立能力状态、发布关系、关闭条件和证据字段的稳定契约。 - Requirements: R1–R7。
- Dependencies: 无。
- Files:
.doc/status/FEATURE-MATRIX.md、.doc/ops/templates/feature-matrix-row.md、.doc/status/README.md。 - Approach:
- 在矩阵说明中定义
done|partial|planned|deferred|blocked的判定和production_ready的独立来源。 - 将当前单一表改为可扫描的字段集合:声明范围、能力状态、发布关系、剩余工作、关闭条件、证据、owner/mutex。
- 定义证据 provenance 与重验触发器;不要把环境瞬时健康等同于代码已部署。
- 在矩阵说明中定义
- Patterns to follow:
gap-matrix.md的 blocker SSOT、CURRENT.md的环境快照、feature-matrix-row.md模板。 - Test scenarios: Test expectation: none — 文档契约变更,不改变运行行为。
- Verification: 模板和矩阵字段一致;每个状态都能由文档规则唯一解释;链接和 Markdown 校验通过。
PU2. Reconcile current rows and historical pointers
- Goal: 修复已确认漂移,并将已完成基线与独立增强拆行。
- Requirements: R1–R7。
- Dependencies: PU1。
- Files:
.doc/status/FEATURE-MATRIX.md、.doc/ops/CURRENT.md、.doc/remediation/gap-matrix.md、.doc/remediation/INDEX.md、.doc/system-design/2026-09-15-multi-intent-hitl-plan.md、.doc/remediation/2026-09-15-module-decoupling-ipc-phase2-remediation-plan.md、.doc/remediation/2026-09-15-http-error-envelope-remediation.md、.doc/ops/research/2026-09-15-track-e-retrospective.md。 - Approach:
- 把 schema 45 改为当前 schema 47,纠正 D3/D5,移除 IAM 已关闭缺口。
- 将 L1、Chat/ctxmgr baseline、Document revision baseline、前端工作台、可靠事件核心按冻结范围评估为
done;把语义摘要、PI 叙事、多意图扩面和 FAV 分成独立行。 - 给被后续报告取代的历史文档增加 implemented/superseded 指针,不删除历史证据。
- 在任何状态收口前,只读核对已部署环境的 IAM store 选择、schema 47 IAM 表和缺表行为;确认 fallback 不可达才保持
production_ready=yes。若发现当前发布契约回归,立即更新 gap-matrix blocker,不等待后续波次。 - 每个拆行保留 before/after 边界、原义务的新去向和原边界已满足的证据,禁止仅通过缩小描述把行改为
done。
- Patterns to follow:
.doc/archive/的历史保留纪律、现有测试报告回链。 - Test scenarios: Test expectation: none — 这是证据对账和 SSOT 修订。
- Verification: FEATURE-MATRIX、CURRENT、gap-matrix 对 schema、门禁和非 blocker 列表的叙事一致;不存在失效链接或相互矛盾状态。
PU3. Close IAM inventory and production fail-closed gaps
- Goal: 用全路由证据替代旧抽样矩阵,并禁止 main/prod 在 IAM 表未就绪时回退内存 authority。
- Requirements: R5–R12。
- Dependencies: PU1;PU2 已完成部署事实核对。
- Files:
.doc/audit/authorization-matrix-v2.md、internal/server/server.go、internal/server/auth_helpers.go、internal/server/chat_history_auth.go、internal/auth/store_factory.go、internal/auth/store_factory_test.go、internal/server/security_p0_test.go、internal/server/*_authz*_test.go。 - Approach:
- 从注册路由生成或维护 resource/action/owner/authn/ReBAC/ABAC/duty/negative-test inventory。
- 先验证 list/detail/search/export/count/SSE/RAG/Agent tools 是否共享授权集合;只修复确认的旁路。
- 只有环境明确为 dev/test 且
ALLOW_IN_MEMORY=true时才允许测试 fallback;环境空值、未知值、main/prod、pool 缺失、IAM 表缺失或授权依赖不可用时一律启动失败或请求 fail closed。 - 先验证 schema 47 的 IAM 表在目标环境确实存在;缺迁移则以 additive migration 修复后再启用 fail-closed,禁止让保护措施把环境永久变成不可部署。
- 已建立 session 的请求也在授权依赖不可用时 fail closed;依赖恢复后按既有健康检查/重连路径恢复,不沿用缓存的旧授权。
- 将旧 API 410 视为兼容策略,依据遥测决定长期保留或退役,不再把“存在 410”本身写成能力缺口。
- Execution note: 先添加 characterization 和负例,再修改 store selection 或路由授权。
- Test scenarios:
- main 配置下 IAM 表缺失时,应用不得创建 MemoryStore 管理员并继续服务。
- 非成员、非 session owner、错误 stage、错误 duty 读取正文、计数、搜索、导出、SSE、RAG 和 Agent tool 时均拒绝且不泄漏资源存在性。
- 管理员例外只通过服务端
IsSystemAdmin,请求体/header 不能伪造。 - 权限在确认后撤销时,执行前重新授权并保持零副作用。
- 仅 dev/test 加显式 opt-in 时内存 fixture 可用;环境未设置、拼错或 opt-in 为 false 均 fail closed。
- IAM 依赖在 session 建立后中断时,正文、计数、搜索、SSE、RAG 和 Agent tools 均拒绝;恢复后重新取权,不沿用旧权限。
- Verification: 全路由 inventory 每项有 owner 和负例;PG 集成与安全套件证明 fail closed;若发现 active bypass,先更新 gap-matrix 再继续其他波次。
PU4. Close real-PI evidence gaps without pre-authorizing fixes
- Goal: 补齐 multi-intent U8 与工作流 full/none 的真实 PI、浏览器、持久化和恢复证据。
- Requirements: R5–R13;Covers AE2、AE3。
- Dependencies: PU1–PU2;测试设计可与 PU3 inventory 并行,最终证据必须基于 PU3 完成后的同一候选 artifact,且共享环境验收串行。
- Files:
.doc/ops/checklists/下新增验收清单、.doc/test-reports/下新增报告、internal/server/workflow_governance_piagent_pg_test.go、internal/app/intentflow/相关测试、web/对应 browser 测试与 assets。 - Approach:
- multi-intent U8 验证真实 PI generate、PG plan/step/receipt、确认前零副作用、重复提交、撤权、双标签、刷新/重登/app+worker restart。
- full 文档走真实生成、author submit、独立 reviewer、独立 approver 和阶段门禁。
- none 文档走真实生成、版本账本、审批动作不适用和阶段不阻塞;禁止写成“none 审批通过”。
- 失败先归类为环境、验收脚本或产品缺陷;产品缺陷创建独立
fix/*任务,修复后的同一场景必须重验,不能以“已分类”关闭证据缺口。 - 所有场景通过共享 PI 数据安全门:最小字段 allowlist、服务端脱敏、tenant/project 绑定、最小权限测试凭证和受限日志/产物;只使用隔离合成数据,并执行泄漏负例。
- Test scenarios:
- multi-intent U8 在无确认、确认、重复确认、活动计划冲突、权限撤销和 receipt 丢失下符合单一终态与幂等要求。
- UI、直接 API 和聊天指令最终产生相同领域状态、actor、版本和可见结果。
- full 文档跨三个真实用户完成职责分离;每次运行使用隔离 project/workspace 和命名空间,错误职责用户的每个动作均拒绝。
- none 文档没有 submit/review/approve,可刷新和重启恢复,且不阻塞 advance。
- runner/model 不可用时验收明确失败或 SKIP,不得记为产品 PASS。
- Verification: 真实 PI、PG、browser、restart、cross-user 证据分栏归档;通过后只关闭对应证据缺口,不自动启用更高 tier。
PU5A. Eliminate the repository race flake
- Goal: 独立关闭全仓 race 的 TempDir 清理竞态,不让外部模型可用性阻塞正确性修复。
- Requirements: R5–R9。
- Dependencies: PU1。
- Files:
.github/workflows/ci.yml、internal/server/task_run_handlers_test.go或对应TestCreateTaskRun_PreActivationAcceptedNot409fixture、.doc/test-reports/。 - Approach:
- 定位并修复异步 worker 未收口导致的 TempDir 清理竞态;不能用跳过或忽略让全仓 race 假绿。
- 保留可重复的最小回归,并执行全仓 race 多轮验证。
- Test scenarios:
- 全仓 race 多次运行不再出现 TempDir RemoveAll,并能证明 worker 已退出。
- Verification: 全仓 race 不再依赖已知 flake 豁免;PR CI 仍不依赖外部模型。
PU5B. Add nightly PI and enforce auditable promotion receipts
- Goal: 增加夜间真实 PI 回归和可执行的下一次晋升门,同时逐步实现一次构建、按 digest 晋升。
- Requirements: R5–R9、R13;Covers AE5。
- Dependencies: PU1、PU4 的稳定场景;不阻塞 PU5A。
- Files:
.github/workflows/nightly-real-pi.yml、.github/workflows/ci.yml、scripts/promote-to-test.sh、scripts/release-to-main.sh、docker-compose*.yml、.doc/test-reports/。 - Approach:
- 夜间 job 使用最小权限且可轮换的 secrets、隔离合成 project/session、真实 PI 标识、受限产物留存、并发取消和有限重试。
- 为被测 commit 生成不可变 promotion receipt,记录结论、时间、runner/model/protocol、commit 和 image digest;所有晋升入口必须验证目标 commit 的最新有效 receipt。
- 将 runner/credential/network failure 与产品断言失败分开。产品失败拒绝晋升;基础设施连续失败冻结下一次晋升,但允许发布负责人在确认外部故障、最近成功结果仍有效、PR/PG 门禁全绿后做带理由和时限的审计豁免。
- CI 从候选 commit 一次构建 app/events/PI Runner 镜像并记录 digest;test/main 最终只引用该 digest。在此能力完成前只可声称 same-commit 加各环境 digest 可追溯,不得声称 same-image promotion。
- Test scenarios:
- 缺 secret 或 runner 不可达时 job 为 infrastructure failure,不生成 PASS 报告。
- 产品断言失败时保留脱敏后的 typed result、schema 和测试证据,告警到明确 owner,晋升脚本拒绝目标 commit。
- 两次调度重叠时旧 run 被取消,不污染同一 fixture。
- receipt 过期、commit/digest 不匹配、产品失败或未经审计的 infra failure 均拒绝晋升;有效时限内的人工豁免可追到发布负责人和理由。
- Verification: nightly 具有 schedule/manual 入口、失败分类、owner、retention 和 promotion-gate receipt;test/main 能证明引用候选构建的同一 digest。
PU6. Decide semantic-summary go/no-go and prepare its task contract
- Goal: 决定 D3 语义摘要是否值得实施;若获批,只创建独立 short-term 和完整执行契约,不在本计划直接改业务代码。
- Requirements: R5–R13。
- Dependencies: PU3 的授权 inventory;PU1–PU2 的独立行;独立产品 go/no-go。
- Files: 本计划只更新
.doc/backlog/chat-agent-p6-backlog.md和新 short-term;下列代码与测试路径属于获批任务契约:internal/ctxmgr/summarizer.go、internal/app/chatflow/、internal/server/chat_digest_api.go、对应 Go/PG 测试、web/src/摘要消费组件与测试。 - Approach:
- 实施前冻结当前用户痛点/使用信号、预期收益、维护成本、owner、最小样本、质量阈值和零容忍安全失败;未通过 go/no-go 则保持 deferred,本计划不实施。
- 获批任务必须只向无工具权限的摘要器提供 authorized view 和最小化输入,保存来源引用、输入版本、模型/协议和 freshness,并应用 R13 的共享 PI 数据安全门。
- 先 shadow 评估质量和泄漏负例,再决定是否替换 deterministic summary。
- 模型失败、超时或输出不安全时保留旧摘要或确定性 fallback,并明确 freshness。
- Test scenarios:
- 被撤权或跨阶段消息不进入新摘要、计数和引用。
- prompt injection 只能作为材料,不能改变摘要权限或系统动作。
- 新消息增量更新不重复旧内容;并发生成只提交一个当前版本。
- 模型失败后刷新、重登和重启仍返回可解释 fallback。
- Verification: 本计划验证 go/no-go 记录、预注册门和 short-term 契约完整;获批任务必须在 shadow、权限负例、PG 持久化和真实 browser 恢复通过后才更新 rollout tier。
PU7. Decide PI-narrative go/no-go and prepare its task contract
- Goal: 决定可选 PI 叙事是否值得实施;若获批,只创建独立 short-term 和完整执行契约,不在本计划直接改业务代码。
- Requirements: R5–R13;Covers AE4。
- Dependencies: PU3 的授权边界;现有 typed-result-v1;独立产品 go/no-go。
- Files: 本计划只创建独立 short-term;下列代码与测试路径属于获批任务契约:
internal/docrevision/service.go、internal/docrevision/risk.go、internal/taskrun/finalize.go、deploy/pi-agent/typed result/schema、web/src/components/doc/ChangeReportPanel.tsx及对应测试。 - Approach:
- 实施前冻结当前用户痛点/使用信号、预期收益、维护成本、owner、最小样本、质量阈值和零容忍安全失败;未通过 go/no-go 则保持 deferred,本计划不实施。
- 获批任务中的 PI 必须在无写工具环境中只读消费经过 R13 安全门的 immutable input snapshot、diff、lineage 和服务端计算的 impact/risk floor。
- 输出使用版本化 typed schema,并绑定文档版本与输入 digest。
- partial/malformed、timeout、cancel、unknown schema、提示注入或 digest mismatch 一律全量降级到显式 fallback,不混合呈现部分 PI 字段。
- fallback 继续支持查看、确认/拒绝、刷新和重启恢复。
- Test scenarios:
- 合法 PI narrative 与对应 snapshot/version/digest 一致并在 UI 标出分析状态。
- PI 试图降低风险、修改 hunk 或更改审批结论时,服务端忽略或拒绝。
- malformed/timeout/cancel/retry 不产生第二份 candidate 或第二个终态。
- 非授权用户不能从叙事、引用或计数推断不可见文档。
- Verification: 本计划验证 go/no-go 记录、预注册门和 short-term 契约完整;获批任务必须证明 deterministic fallback 全量回归通过,且真实 PI/browser/restart 报告明确区分 narrative 与事实字段。
PU8. Prepare independent multi-intent follow-up tasks
- Goal: 在 multi-intent U8 真实证据签署后,只形成 U9 实验和 U10–U12 单 action 的独立候选任务;不在本计划实施扩面。
- Requirements: R5–R13。
- Dependencies: PU3–PU4;独立产品 go/no-go;U9 实验不作为 U10–U12 的默认前置。
- Files:
internal/app/intentflow/、各 owner module 的 adapter/port/tests、internal/events/registry.go、web/src/components/chat/InteractiveCard.tsx及对应测试、.doc/ops/short-term/独立任务。 - Approach:
- 每个候选项先冻结用户信号、预期收益、维护成本、owner、最小样本、晋级阈值和零容忍安全错误;未获批则保持 deferred。
- U9 候选仅提供规则无法判断时的 segment proposal;固定 schema/digest、最小输入、R13 安全门、护栏优先、超时 fail closed。
- U10 mutate、U11 docgov、U12 workflow/run-control 各自形成独立 short-term、flag、owner mutex、授权负例、回滚点和是否依赖 U9 的明确声明。
- 任务契约要求高风险动作绑定 expected revision 和显式确认,确认后执行前重新授权;按钮和自然语言进入同一 owner command。
- 任一 action 出现授权旁路、持久状态丢失、双 writer、跨用户泄漏或 B1–B4 回归时,停止全部剩余扩面并更新 gap-matrix;普通质量失败只回滚该 action。
- Test scenarios:
- U9 malformed/timeout、span 越界、风险降级和红线拆分逃逸全部 fail closed;敏感内容不出站。
- 每个 action 在未确认、越权、stale revision、重复提交和部分完成时保持零越界副作用与可恢复状态。
- 双标签确认/取消只有一个成功;投影停机时权威 GET 仍正确。
- 旧版本回滚后已有计划仍可读取、取消和 finalize,新建保持关闭。
- Verification: 本计划只验证每个候选任务边界、go/no-go、预注册门、独立 flag/rollback 和全局安全 stop gate 完整;后续获批任务各自通过真实证据后才可加入更高 tier。
Verification Contract
| Layer | Applies to | Required evidence | Done signal |
|---|---|---|---|
| Documentation | PU1–PU2 | Markdown/link check、git diff --check、三份 SSOT 人工对账、before/after 边界与义务迁移表 |
无矛盾、无断链、无无证据状态提升或缩口径假完成 |
| Authorization inventory | PU3 | 注册路由全集与 resource/action/owner/authn/ReBAC/ABAC/duty/negative-test 映射 | 无未认领路由;每项有服务端门和负例 |
| Static/unit | PU3、PU5A–PU8 | go vet ./...、相关 Go tests、cd web && npm test && npm run build、arch-check --mode block |
所有受影响包通过 |
| PostgreSQL | PU3–PU8 | 隔离 TEST_DATABASE_URL、迁移、并发、幂等、fail-closed 负例 |
无 skip 冒充 PASS,数据可重启恢复 |
| Race | PU3、PU5A、后续 multi-intent action | 相关包 race;PU5A 关闭全仓 TempDir flake | 无 data race、无异步清理残留 |
| Real PI | PU4、获批后的 PU6–PU8 | 真实产品 PI Agent Runner、记录 model/protocol/typed result 和 R13 数据安全门 | 不使用 stub 或 Herdr 代替;无敏感数据泄漏 |
| Browser | PU4、获批后的 PU6–PU8 | 真实登录、UI 操作、双用户/职责负例、刷新/重登/restart | 页面可见结果与 PG/账本一致 |
| Deployment | 所有运行时波次 | 占集成槽 rebuild、/ready、promotion receipt;PU5B 完成后按不可变 digest 晋升 |
当前阶段可追到同一 commit 和各环境 digest;加固后 test/main 引用同一候选 digest |
| Rollback | PU3–PU8 | disable/drain、旧版本兼容读取、cancel/finalize、无双 writer;上一版本二进制针对 expanded schema 的兼容演练 | 当前基线恢复且无孤儿状态;旧 app/worker 能识别并安全收口新状态 |
夜间真实 PI 的外部依赖失败和产品回归必须分栏。PR CI 不依赖外部模型;夜间 job 稳定前不提升为合并必需检查。
Definition of Done
- PU1–PU2 完成后,矩阵能明确区分当前完成范围、发布关系、剩余工作和关闭条件,并保留拆行前后的义务 lineage。
- schema 45、D3/D5、IAM 历史缺口、前端状态和事件/FAV 混行均已纠正。
- L1、Chat/ctxmgr baseline、Document revision baseline、前端工作台和可靠事件核心的状态调整有现有证据支持;语义摘要、PI 叙事、多意图扩面与 FAV 已拆成独立 deferred 行。
- PU3 形成全路由授权 inventory,并证明只有 dev/test 显式双门才允许内存 fixture,其他环境与既有 session 均 fail closed。
(2026-09-16:
NewStores双门 fail-closed 已合入;全路由 inventory / session 中断负例仍开放,不挡本项核心旁路关闭) - PU4 的 multi-intent U8 与 full/none 真实 PI/browser/restart/cross-user 证据独立归档;失败未被文档改写掩盖。 (2026-09-16:Wave2 报告已签;Playwright 双标签仍 gated,API 刷新/重启已签;不升 tier)
- PU5A 的 TempDir race flake 被真正关闭;PU5B 的 nightly job、promotion receipt 和人工豁免链能区分 infrastructure/product failure。 (2026-09-16:PU5A 已关闭;PU5B nightly+receipt+晋升钩子已交付——见 Wave2B 报告。同镜像 digest 晋升已由 Wave2C 单机 pin 关闭;远程 registry 另立。)
- PU6–PU8 已分别完成产品 go/no-go;未获批项保持 deferred,获批项另建 short-term 后才进入实现与 rollout DoD。
(2026-09-16:全部 no-go / deferred——见 Wave3 go/no-go 与
.doc/ops/long-term/2026-09-16-pu6-*/pu7-*/pu8-*契约;禁止实施与升 tier。) - 任何真实 PI 工作均满足 R13 的最小出站、租户绑定、脱敏、凭证、留存和泄漏负例。 (2026-09-16:nightly/receipt 路径使用隔离合成 DB、脱敏 evidence_refs、凭证不入库;完整 R13 矩阵审计见 Phase3 handoff 开放项,不挡本勾选的运行时门。)
- deterministic summary/change-report、legacy 单意图、B1–B4 和三环境隔离均无回归。
(合入冒烟
go vet+go test -short;三环境 schema 47 快照保持;未升 MULTI_INTENT tier。) gap-matrix.md只在真实 blocker 出现或关闭时变化,production_ready不因普通 backlog 自动翻转。(Wave 0:仅增加 IAM 只读核验注记,未翻转)- 放弃的实验代码、临时 flag、诊断 fixture 和测试数据已清理;历史失败证据保留且有正确指针。 (promotion-receipt fixtures 为门禁故意保留;FAV 旁支不合入;见 Phase3 handoff。)
Appendix
Source paths
.doc/audit/2026-09-16-feature-matrix-production-readiness-audit.md.doc/status/FEATURE-MATRIX.md.doc/remediation/gap-matrix.md.doc/ops/CURRENT.md.doc/archive/ops/short-term/2026-09-16-production-ready-gates.md.doc/system-design/2026-09-15-multi-intent-hitl-plan.md.doc/test-reports/2026-09-16-multi-intent-u8-task-generate-test-report.md.doc/test-reports/2026-09-16-chat-refresh-gate-test-report.md.doc/test-reports/2026-09-14-workflow-plan-409-frozen-and-optional-duties-test-report.md.doc/test-reports/2026-09-14-document-revision-runtime-ui-test-report.md.doc/test-reports/2026-09-15-phase2-closeout-test-report.md.doc/test-reports/2026-09-12-phase1-iam-authz-test-report.md.doc/backlog/chat-agent-p6-backlog.md
Current decision summary
- 当前没有新增 production-ready blocker。
- 当前首发范围可关闭的状态漂移:Intent L1、前端工作台、可靠事件核心。
- 当前应保持
partial:多意图基线、工作流治理、IAM、CI/E2E;artifact promotion 作为独立发布加固跟踪。 - 当前可按冻结范围收口并把增强拆行:Chat/ctxmgr baseline、Document revision baseline。
- 当前应独立
deferred:语义摘要、PI change-report narrative、FAV、多意图未获批扩面、D7 合规治理;纯软件项目自举不在本计划范围。