Merge pull request 'docs(blueprint/intent-catalog): 立意图目录模块并完成 IC1 设计(最小文件优先方案,拆 IC2–IC13)' (#42) from feat/intent-catalog into master
All checks were successful
Push & PR Check / check (push) Successful in 1m1s

This commit is contained in:
lanrtop 2026-10-04 02:28:05 +08:00
commit cf93392130
3 changed files with 573 additions and 1 deletions

View File

@ -6,7 +6,7 @@ description: >
项目自身保留业务规则、测试、部署声明与交付决策。炼境本身亦被纳入其中, 项目自身保留业务规则、测试、部署声明与交付决策。炼境本身亦被纳入其中,
形成可自我进化的开发智能闭环。 形成可自我进化的开发智能闭环。
iteration: 1 iteration: 1
updated: 2026-10-03 updated: 2026-10-04
agent_button_carrier: tauri agent_button_carrier: tauri
@ -525,6 +525,15 @@ modules:
note: "技术栈评估:Tauri v2 + Rust + React/TS 适合管家方针,不换栈。按收益排序的结构改进:A1 本体与投影分离(2026-10-03 改写为三段——A1a 随 agent-client-parity P8b 落地的投影无关适应度测试、A1b 按需 CLI 薄客户端、A1c 触发式拆 core crate;P4/P8 不再依赖拆 crate)、A2 前后端类型契约生成、A3 配置文本模板化、A4 MCP 改用官方 rmcp SDK(P4b 轨迹环排在其后)。" note: "技术栈评估:Tauri v2 + Rust + React/TS 适合管家方针,不换栈。按收益排序的结构改进:A1 本体与投影分离(2026-10-03 改写为三段——A1a 随 agent-client-parity P8b 落地的投影无关适应度测试、A1b 按需 CLI 薄客户端、A1c 触发式拆 core crate;P4/P8 不再依赖拆 crate)、A2 前后端类型契约生成、A3 配置文本模板化、A4 MCP 改用官方 rmcp SDK(P4b 轨迹环排在其后)。"
position: [3750, 950] position: [3750, 950]
- id: intent-catalog
name: 意图目录
area: backend
status: planned
progress: 0
updated: 2026-10-04
note: "两层模型(人持有的意图目录 .blueprint/catalog.md + 蓝图正文),书装意图、指向事实;卡侧 intent 钉版,agent 编译可判定 /goal,确认卡兼作最小任务简报,回执写进提交。IC1 设计已确认(最小文件优先方案);IC2–IC4 只新增文档、可与 P8 并行,门控与接线等 P8 收口后做,IC13 按实测数据决定去留。"
position: [4000, 950]
edges: edges:
- from: project-resource-broker - from: project-resource-broker
to: project-dev-variables to: project-dev-variables
@ -867,3 +876,13 @@ edges:
- from: architecture-evolution - from: architecture-evolution
to: agent-client-parity to: agent-client-parity
type: dependency type: dependency
# 意图目录:安全派发与状态语义收敛(blueprint-governance 前置)、版本化 pack 机制在先;修订历史与否决理由回流复用治理反馈闭环。
- from: blueprint-governance
to: intent-catalog
type: dependency
- from: agent-client-capability-packs
to: intent-catalog
type: dependency
- from: governance-feedback-loop
to: intent-catalog
type: related

View File

@ -0,0 +1,201 @@
# 意图目录(intent-catalog)
> status: planned | created: 2026-10-04 | 设计:docs/tasks/2026-10-04-intent-catalog-design.md(IC1 ✅,用户 2026-10-04 确认)| 下一步:IC2
> 来源:2026-10-03~04 与用户讨论(/goal 与 Loop Engineering 操作手册、目录/正文模型、承重墙),以及侦察工作流 wf_6dc3756a-b72 的重叠与冲突扫描。
## 概述
在蓝图之上加一层由人持有的意图目录 `.blueprint/catalog.md`:每章写意图、双坐标、不做什么和 rev;任务卡用 `- intent: INT-NN@X.Y` 单向挂靠。agent 据此编译可判定的 /goal,确认卡兼作最小任务简报,收口回执写进提交。试用期只新增文档,门控与接线排在 P8 收口后,按实测数据决定保留或撤销。
## 为什么
- 用户能给的是需求、意图方向和已知现状,不是评估器能判定的条件。/goal 这类无人值守 loop 需要可判定的终点,这一步翻译应由 agent 完成,但 agent 需要一个人持有、稳定的意图来源。
- 现状:意图散在 AGENTS.md「项目定位」、统筹文档 §0、设计文档的决策节、manifest description 和私有记忆里;manifest 的 areas 按技术层分区,不按意图方向。
- 实证:2026-09-30 的 `/goal 按照方针设计方向走,直到符合设计要求` 跑了 3 轮,评估器就以「设计已完成」为由判定达成并解除了 goal。评估器不读文件,条件只能写成可判定的终点。
- 与 `docs/tasks/2026-09-23-blueprint-agent-handoff-pilot.md` 的「项目工作账本 + 信息归属 + 最小任务简报」同构,应合并推进,不能分两处做。
## 模型(概念,待设计确认)
- **两层**:目录层由人持有,保持稳定;正文层是蓝图模块与任务卡,由 agent 维护。
- **书的比喻**:
- 前言是长期方针,只指向 AGENTS.md「项目定位」,不另抄一份。
- 每一章是一个意图方向。
- 章首导语写意图、双坐标(人看的投影坐标 + agent 可断言的坐标)和「不做什么」。
- 附录放现状指针、约束、决策与否决理由(勘误表)。
- 索引是稳定 ID,书签标出当前阶段。
- **定位**:它是全生命周期信息的骨架与索引,不是容器——**书装意图,指向事实**。代码、CI、状态、会话、凭据和环境都留在原生位置,书里只放可机器校验的指针;意图由人写,现状由机器采。
- **迭代**:
- 修订分三级:补丁指正文内的改动,agent 自主完成;小版本指调整章首坐标或由正文反推修改目录,agent 提案、人确认;大版本指增删章节或调整方向,由人主导。
- 配套机制:沿 ID 做影响分析;版本钉住,卡和 goal 记录自己编译自哪一版目录;保护在制品;修订历史回流飞轮。
- **/goal 的来源**:由架构 agent 从「当前章的验收坐标 + 本阶段卡的完成判定」编译,人确认后粘贴,粘贴这一下即确认。
## 承重墙(设计纲目)
agent 开发子项目时躲不掉的现象。每面墙都要回答四个问题:落在书的哪个部位、靠什么机制承重、怎样用机器检查它生效、什么情况下算拆除(拆除即撤销对应机制)。原则是能指向已有机制的,就不新建。
| 墙 | 已有承重机制(指向) | 待补 |
|---|---|---|
| W1 迭代 | 模块迭代记录与决策记录;能力包、托管块、模板指纹三重版本 | 目录版本层、修订分级、版本钉住;与 manifest.iteration 语义分开 |
| W2 遗忘 | 启动读蓝图;catchup/taskify;统筹文档 §0;复盘笔记 | 稳定入口回答「整体方向走到哪」;书签载体;方向与卡的双向索引 |
| W3 熵增 | 文档防腐 T1–T4;模板指纹测试;blueprint-gate;梦核蒸馏 | 指针可解析门控(只警告);禁止索引膨胀成正文 |
| W4 意图鸿沟 | 需求对齐协议与确认卡;Feature-Confirmed;双尺子;辩证收缩 | 章级意图与「不做什么」;卡挂回意图章 |
| W5 注意力稀缺 | 统筹三类找人;pending_user;回传只列待处置 | 跨章的「待人裁决」视图;书签由人确认 |
| W6 理解债 | 决策记录;复盘笔记;架构速查;导师上下文 | 从代码或模块反查「服务哪条意图」;关键决策摘要推送给人 |
| W7 自评偏差 | 两把尺子;「没验什么」;证据等级;独立/对抗审查;CI 兜底 | 章坐标标注证据等级;章完成只能推导,不能手动切换 |
| W8 不确定性 | R10 先实测;P4-0 假设证伪;三闸门 | 章上挂假设登记与证伪状态,指向既有落点 |
| W9 并发冲突 | 🔵 执行锁;每卡独立 worktree;串行队列;plan→digest→apply | 目录本身成为争用点;版本钉住复用 digest 语义 |
| W10 风险不对称 | 计划→确认→应用;confirmed=true;破坏性标注;凭据边界 | 目录大版本与书签切换的「提案 + digest + 人确认」;章级风险等级 |
| W11 资源有限 | L0/L1/L3 分层;风险预测;提交飞轮指标 | 按章、按 goal 记账(只记账不分配,不替 agent 选模型) |
| W12 环境漂移 | 工具链状态;诊断;verify_onboarding;L1 对等检查 | 基本齐全,目录只放工具指针 |
| W13 异构 agent | canonical context;AGENTS.md 跨端单一来源;三端对等 | 模型无关的 goal 编译流程(/architect 只有 Claude 有) |
| W14 摩擦重复 | 使者回传闭环;梦核;Rules-Applied;管家准入 | 修订历史与否决理由回流(复用 envoy 与复盘笔记,不新建账本) |
## 并入与依赖
- **并入**:handoff 试点中的「信息归属与同步契约」和「最小任务简报的按需读取与回执」两项。
- **留在 blueprint-governance 作为前置**:「安全派发 + blueprint-baseline 能力包」和「任务状态语义收敛」。
- **依赖**:blueprint-governance(安全派发)、agent-client-capability-packs(版本化 pack 机制)。
- **相关**:governance-feedback-loop(修订历史与否决理由回流)。
## 待设计问题(IC1 须逐条化解)
1. 「意图层」现有三处归属:CONVENTIONS「蓝图定位(意图层)」、agent-button-system「意图层 — AGENTS.md」,以及本模型。设计时需先定死术语映射,并且只在一处改名。
2. 红线:章的完成只能从卡状态加 human_verify 推导,不能做成人手动切换(AGENTS.md 设计红线)。
3. 前置:CONVENTIONS 中 in_progress/done 一处说从 Git 推断、另一处说手标,影响分析不能建立在未收敛的状态语义上。
4. 分类轴对应:修订分级、需求对齐协议(Bug/Feature × S/M/L)、文档元规则 T1–T4、manifest.iteration 之间的对应关系;考虑新增 T5「意图变更」,避免另起一套。
5. ID 前缀:承重墙用 W1–W14,章用 INT-xx,卡用 IC(2026-10-04 用 git grep 确认均未被占用)。
6. 「goal 级确认可代替逐卡确认」:起草立法提案,边界是写运行中的 DB、删除、human_verify、超出当前章的工作仍须找人。等 P8 跑完、用实测数据再定。
7. W11 只记账、不分配;CONVENTIONS 复杂度表把复杂度映射到模型名,与 handoff 的「不映射模型名」矛盾,交给前置一起收敛。
8. 防止容器化:目录只放 ID、一句话意图和指针(参照 project-context.yaml 的 label/paths,但禁止长 doc 字段),并配一个只警告的指针可解析门控。
9. 书签与统筹文档 §0 的交接:P8 期间只做指向;之后改为 agent 起草书签、人确认,统筹文档只管派单与交接。
10. 离线与降级:目录放在项目 Git 中、离线可读;影响分析与跨项目索引走 MCP 查询,并保留直接读文件的降级路径。
11. 跨 agent:goal 编译流程写成模型无关的形式(CONVENTIONS「复杂功能分析流程」),不能只靠 Claude 的 /architect。
12. 子项目已有的意图载体(例如 enterprise 的 `.specify/specs/.../spec.md`)只做指向,不复制。
13. 目录的物理位置与前言的归属(例如 `.blueprint/catalog.md`、`docs/intent/`,或放在 AGENTS.md 块外)。
## 不做什么
- 设计确认且 P8 收口之前,不写代码,不改接入包模板、CONVENTIONS、AGENTS.md、分发层和 P8 热点文件。
- 不给存量卡回填 `intent:`;试用阶段只在新卡上可选填写。
- 炼境不替 agent 编译 goal、选模型或判定完成;炼境只提供结构、校验、现状采集与查询。
- 不把蓝图的版本化事实源搬进炼境 DB,不让子项目依赖炼境在线,不建派发调度器。
## 分阶段
1. 立 concept 模块(本次)。
2. IC1 设计文档,与 P8 并行,只写文档。
3. 在炼境自身试用:新增目录文件,新卡可选 `intent:`。
4. P8 收口后:补前置,加只读校验与影响分析。
5. enterprise 隔离试点。
6. 按实测结果决定:并入能力包分发,或撤销。
## 收益度量与退出条件
- 度量:/goal 一次判对率、人工介入次数、续接所需的上下文量、方向返工与 human_verify 否决率、每阶段 token 用量。
- 退出:实测无收益、已被 agent 原生能力覆盖,或维护成本超过收益时撤销(管家准入与退出)。
## 任务卡
### ✅ IC1 — 意图目录设计文档(/architect)
- status: done
- complexity: L
- files: docs/tasks/2026-10-04-intent-catalog-design.md, .blueprint/modules/intent-catalog.md
- acceptance: "agent_verify: [读文件] 设计文档含方案选择、设计规格 1–7、13 问化解表、W1–W14 四问表、受影响文件、系统边界变更、风险点、拆解建议、度量与退出、立法草案、没验什么。human_verify: 用户确认设计(含 5 个待拍板问题),确认后模块转 planned 并追加 IC2–IC13。"
- notes: 2026-10-04 评审团工作流 wf_60e4c430-bb1 出稿(最小文件优先方案胜出,两位评委 25/30、24/30),设计文档已写,等用户确认。产出 `docs/tasks/<日期>-intent-catalog-design.md`,以 W1–W14 为纲、书模型为体,逐条化解上面的待设计问题,写明收益度量与退出条件;完成后交用户确认,确认后模块转 planned,再用 /splitter 拆成 S/M 卡。
### 📋 IC2 — 新增 intent-catalog-guide.md:目录语法、修订钉版、goal 编译七步、确认卡与回执、离线检查
- status: todo
- complexity: S
- files: docs/ai-context/intent-catalog-guide.md
- depends: IC1
- acceptance: "agent_verify: [CLI] grep -cE '^## (目录语法|修订与钉版|goal 编译|确认卡与回执|离线检查)' docs/ai-context/intent-catalog-guide.md → 5;grep -ciE 'opus|sonnet|haiku|gpt-|deepseek-' 该文件 → 0;/architect 只以「可选包装」出现;git status --porcelain → 只有该文件新增。"
### 📋 IC3 — 新增 .blueprint/catalog.md:1.0 骨架与首批 2–4 章,书签只指向 coordination §0
- status: todo
- complexity: S
- files: .blueprint/catalog.md
- depends: IC2
- acceptance: "agent_verify: [CLI] grep -c 'catalog_version: 1.0' → 1;grep -cE '^## INT-[0-9]{2} ' 介于 2–4;wc -l ≤200 且 wc -c ≤8192;grep -cE '^- (status|progress|doc|files|acceptance|model):' → 0;指南中的 path 指针检查 → 0 悬空;cat .blueprint/modules/*.md | grep -c '^### ' 前后相等。human_verify: 用户逐章确认意图与不做(1.0 为大版本,人定稿),提交带 Feature-Confirmed: true。"
### 📋 IC4 — 跨 agent 纸面编译:Codex 或 DSH 按指南对书签章编译确认卡(不粘贴)
- status: todo
- complexity: S
- files: .blueprint/modules/intent-catalog.md
- depends: IC3
- acceptance: "agent_verify: [CLI] git log -1 --grep='IC4' --format=%B → 含 项目、分支/worktree、HEAD、纳入卡、终点、终验待办、停止找人、没验什么、作废 9 字段与 Compiled-By: <非 Claude 客户端>;标签 blob 等于该提交中 .blueprint/catalog.md 的短 blob;每条终点可在来源卡 agent_verify 原文找到;过程词黑名单 grep → 0。"
### 📋 IC5 — 首次真实 /goal:为 Phase 4 的卡编译 → 人粘贴 → 收口回执
- status: todo
- complexity: S
- files: 收口提交 body 与 PR body;纳入卡的 intent 与终验行
- depends: IC4, P8 收口
- acceptance: "agent_verify: [CLI] git log --grep='^Goal-Receipt: INT-' --format=%B → ≥1 条,含 Goal-Cards、Goal-Result、Goal-Rounds、Goal-Interventions、Not-Verified、Human-Pending;纳入卡标题前缀均为 ✅;含 human_verify 的纳入卡各有一行终验;^### 计数增量等于新增卡数。human_verify: 人粘贴 /goal 并判定 Goal-Result。"
### 📋 IC6 — intent-gate.cjs 核心:结构、防膨胀、类型指针、卡侧引用,加 --self-test
- status: todo
- complexity: M
- files: .claude/hooks/intent-gate.cjs
- depends: IC3, P8 收口
- acceptance: "agent_verify: [gate 脚本] node .claude/hooks/intent-gate.cjs --self-test → exit 0 且输出 self-test ok,内置 5 类坏样例(悬空 path:、未知 INT、超长字段、status: 键、card: 指向不存在的卡)各恰好 1 条警告;node .claude/hooks/intent-gate.cjs → exit 0、真实目录 0 警告;INTENT_CATALOG=/nonexistent → 无输出、exit 0。"
### 📋 IC7 — 门控只读视图 --report/--impact/--pending 与目录提交审计
- status: todo
- complexity: M
- files: .claude/hooks/intent-gate.cjs
- depends: IC6
- acceptance: "agent_verify: [gate 脚本] --self-test 夹具:章 rev 1.1 而 📋 卡钉 1.0 → --impact 报 stale;钉墓碑章 → orphan;只有模块默认挂靠 → low_confidence;前缀 🔵 而 status: todo → --report 报 divergence 并标 status_source;含 human_verify 而无终验行的 ✅ 卡 → --pending 列出;缺 Feature-Confirmed 的目录提交 → --report 审计列出;全部 exit 0,运行前后 sha256sum .blueprint/catalog.md .blueprint/modules/*.md 不变。"
### 📋 IC8 — 接线:lefthook 加 intent-gate、AGENTS.md 块外加 T5 与启动读书签、agent-button-system 单处改名
- status: todo
- complexity: S
- files: lefthook.yml, AGENTS.md, docs/ai-context/agent-button-system.md, docs/ai-context/intent-catalog-guide.md, .blueprint/modules/intent-catalog.md
- depends: IC6, P8 收口
- acceptance: "agent_verify: [YAML 解析] lefthook.yml 可解析且 pre-commit.commands.intent-gate.run 以 || true 结尾;[cargo test] cargo test onboarding → 0 failed;[CLI] git diff -U0 AGENTS.md 全部 hunk 位于 BLUEPRINT_MANAGED_START 行之前;grep -c '意图层 — AGENTS.md' docs/ai-context/agent-button-system.md → 0;临时 worktree 内提交一次「改章文不升 rev」→ pre-commit 输出 1 条警告且提交成功,验证后移除该 worktree。"
### 📋 IC9 — cargo test 锁定 parse_module_md 忽略 intent 与终验行
- status: todo
- complexity: S
- files: src-tauri/src/commands/blueprint.rs
- depends: P8 收口
- acceptance: "agent_verify: [cargo test] cargo test parse_module_md_ignores_intent_lines → 1 passed:含 intent、终验行与模块头 intent 的样本,和删去这些行的样本相比,tasks.len()、status、acceptance、notes 逐字段相等(只改 #[cfg(test)]);全量 cargo test 无 FAILED。"
### 📋 IC10 — 书签交接:目录书签自持三行,coordination §0 改为指向书签
- status: todo
- complexity: S
- files: .blueprint/catalog.md, docs/tasks/2026-10-03-coordination.md
- depends: IC7, IC8
- acceptance: "agent_verify: [gate 脚本] node .claude/hooks/intent-gate.cjs → 0 警告;[CLI] grep -A3 '^## 书签' .blueprint/catalog.md → 当前、终点、确认 三行且当前章存在未撤销;coordination §0(若仍存在)含指向书签的一行;提案附 --report 与 base blob;提交带 Feature-Confirmed: true。human_verify: 用户确认书签切换。"
### 📋 IC11 — 「goal 级确认代替逐卡确认」立法提案定稿
- status: todo
- complexity: S
- files: .blueprint/modules/intent-catalog.md
- depends: IC5, P8 收口
- acceptance: "agent_verify: [读文件] 决策记录新增提案:条文、例外清单(运行中 DB、删除、human_verify、凭据与机器状态、超出纳入卡或本章、改目录、stale pin、失败 3 次)与数据(P8 期间逐卡确认次数及可合并次数、IC5 的 Goal-Result);git diff --name-only 不含 AGENTS.md 与 src-tauri/resources/。human_verify: 用户裁决采纳或否决并记录理由。"
### 📋 IC12 — enterprise 隔离 worktree 试点:catalog 加门控试点副本,规格只用 spec: 指向
- status: todo
- complexity: M
- files: E:/code-project/enterprise-system/.blueprint/catalog.md, E:/code-project/enterprise-system/.claude/hooks/intent-gate.cjs
- depends: IC9, IC10
- acceptance: "agent_verify: [gate 脚本] 试点 worktree 内 → exit 0、0 警告、spec: 指针全部可解析;副本首行含「试点副本,IC13 后替换或删除」;[CLI] 试点 worktree git status --porcelain → 只新增这 2 个文件;enterprise 主工作区 git status --porcelain 前后一致;试点分支 ≥1 条 Goal-Receipt。human_verify: 人确认一次 enterprise goal 的意图与页面结果并记 Goal-Result。"
### 📋 IC13 — 去留决策:按五项度量并入能力包或撤销
- status: todo
- complexity: S
- files: .blueprint/modules/intent-catalog.md
- depends: IC12
- acceptance: "agent_verify: [读文件] 决策记录含五项度量的前后对比,样本 ≥5 条 Goal-Receipt;撤销分支:git grep -lE 'intent-gate|catalog_version' → 只命中决策记录,AGENTS.md 无 T5,lefthook.yml 无 intent-gate 键;保留分支:另拆 blueprint-baseline 分发卡,本卡不改模板。human_verify: 用户裁决去留。"
## 决策记录
- 2026-10-04 归属:新建本模块,并入 handoff 试点的「信息归属 + 任务简报」部分;不做 blueprint-governance 的新迭代。理由:目录层叠在蓝图之上,需要独立的家;governance 已 done,开新迭代会改变全局 iteration 口径;独立模块也便于按退出条款整体撤销。
- 2026-10-04 时机:与 P8 并行做设计,只写文档、在独立 worktree 中进行;实现等 P8 收口后再做。理由:改动的文件与 P8 不重叠,设计也需要时间,等 P8 收口正好衔接。
- 2026-10-04 试点范围:先在炼境自身试用。理由:先在自己身上踩坑成本最低;enterprise 主工作区有他人的在制品,分发机制也尚未安全化。
- 2026-10-04 立法:「goal 级确认代替逐卡确认」只在设计中起草提案,P8 之后再定。理由:先用 P8 的实测数据说话;这条规则依赖「章」的定义;现在改托管块会和 P8 撞车。
- 2026-10-04 设计确认(IC1):采用最小文件优先方案,即 `.blueprint/catalog.md`、卡侧 `- intent:` 钉版和模型无关的 goal 编译指南;不选结构化 YAML 加 Rust/MCP(子项目离线时拿不到同等校验,撤销成本也最高),也不选最大化复用(会提前分发给所有子项目,还要改动 CONVENTIONS 的分类轴)。评审团 wf_60e4c430-bb1 两位评委打分为 25/30、24/30。设计中的五个待拍板问题,用户全部采纳推荐项:
- 门控脚本放在 P8 收口后,试用期只新增文档;
- IC5 首次真实 /goal 用于 P8 收口后本模块 Phase 4 的卡,不打断 P8 在制品;
- 炼境 1.0 首批章节方向为「一键接入三端可用 / 意图编译为可判定终点 / 摩擦驱动沉淀与退出」,在 IC3 逐章定稿;
- 去留阈值初定为样本 ≥5、一次判对率 ≥60%、人工介入不高于基线、每阶段改目录 ≤1 次,IC13 前可以调整;
- 接受在 AGENTS.md 块外常驻约 10 行「启动读目录引言和书签」。

View File

@ -0,0 +1,352 @@
# 设计决策:意图目录(intent-catalog)· IC1
> status: 已确认(2026-10-04,五项待拍板全部采纳推荐)| complexity: L(本文只到设计,实现拆为 IC2–IC13)| created: 2026-10-04 | blueprint: intent-catalog
> ⚠️ 处置条款:用户确认后,稳定结论回写 `.blueprint/modules/intent-catalog.md`(决策记录与任务卡),本文件在 IC3 完成后 24h 内删除,不做第二事实来源。
> 产出方式:/architect 评审团工作流 wf_60e4c430-bb1。3 个独立方案(最小文件优先、结构化优先、最大化复用)交 2 位评委(agent 友好度与成本、治理与风险)打分,由综合者定稿;关键代码事实已由主会话复核。
## 背景
- 需求本体见 `.blueprint/modules/intent-catalog.md`,包括两层模型、W1–W14 承重墙、13 个待设计问题和「不做什么」。
- 并入 `docs/tasks/2026-09-23-blueprint-agent-handoff-pilot.md` 的「信息归属与同步契约」与「最小任务简报的按需读取与回执」。
- 关联模块:
- blueprint-governance:前置,负责安全派发与状态语义收敛。
- agent-client-capability-packs:版本化 pack 机制。
- governance-feedback-loop:修订历史与否决理由的回流。
- agent-client-parity:P8 在制品,期间不碰其热点文件。
## 方案选择
| 方案 | 优点 | 缺点 | 结论 |
|---|---|---|---|
| **最小文件优先**:Markdown 目录 + 卡上 intent 行 + 只警告的 node 门控 + 模型无关的编译指南 | 试用只新增文件,撤销最便宜;离线、跨 agent、零依赖;不进 DB、不加 MCP | 原稿把门控放在试用期、在文件内记修订历史、双向存归属、简报缺定位信息 | ✅ 选为主体,按评委 must_fix 修正 |
| 结构化优先:schema 化 YAML + Rust 解析/lint + 只读 MCP | 可断言程度最高;类型化指针与影响分析严谨 | 权威校验在炼境 crate 内,子项目离线拿不到;YAML 写错会让 cargo test 变红;人维护负担重;撤销成本最高 | 不选;嫁接类型化指针、stale/orphan 分类、base 不符即重提、数据门控 |
| 最大化复用:放进既有载体 + 正文上行挂靠 + 并入托管 blueprint-gate | 单一事实源守得最严;简报、blob、回执复用既有载体 | Phase 4 就把检查分发给所有子项目,早于试点与去留决策;改 CONVENTIONS 的「意图层」会破坏分类轴并整文件广播 | 不选;嫁接简报/blob/回执、单向挂靠、章 rev、待裁决视图 |
评分:agent 友好度视角为最小 25/30、复用 25/30、结构化 19/30;治理与风险视角为最小 24/30、复用 21/30、结构化 18/30。两位评委都判最小方案无致命缺陷。
**选定**:以最小方案为主体,嫁接以下几点:
- 归属只从卡侧单向挂靠;
- 每章带 rev,修订审计交给 git;
- 目标确认卡兼作 handoff 的最小任务简报,包含 project_id、分支/worktree,并以 catalog blob 作 digest;
- 回执写进收口提交的 body;
- 人工终验独立成 `- 终验:` 行;
- 指针带类型前缀;
- 影响分析分 stale 与 orphan 两类;
- 代码化工作设数据门控。
试用期只新增两份文档、不写代码,门控脚本挪到 P8 收口后。
## 设计规格
### 1. 目录文件
- **位置**:`.blueprint/catalog.md`。它在 modules/ 之外,已核实以下机制都不会碰到它:
- `archive_project_docs` 只归档 modules/*.md;
- blueprint-gate 只扫描 modules/;
- `get_blueprint` 只按 manifest 读模块;
- `sync_blueprint_rules` 只整文件写 CONVENTIONS.md。
- **格式**:纯 Markdown 小语法,依次为引言行、`## 书签`、`## INT-NN 章名`(可有多章)、撤销墓碑、`## 附录`。
- **章导语字段**:必填 `rev`、`意图`、`人看`、`机器`、`不做`;可选 `风险`、`假设`、`证据`、`墙`。
- **防膨胀**:
- 每字段单行,不超过 120 字;
- 每个章块不超过 12 行;
- 全文件不超过 200 行、8KB;
- 禁止 `status`、`progress`、`doc`、`files`、`acceptance`、`model` 键;
- 不设文件内修订历史。
- **语法的单一来源**:`docs/ai-context/intent-catalog-guide.md`(IC2)。
示例(章名与内容仅作示意,1.0 由人在 IC3 定稿):
```markdown
# 意图目录
> catalog_version: 1.0 | 前言 → path:AGENTS.md#项目定位 | 语法 → path:docs/ai-context/intent-catalog-guide.md
## 书签
- 当前 → path:docs/tasks/2026-10-03-coordination.md#0. 方针与本阶段终点
## INT-01 一键接入三端可用
- rev: 1.0
- 意图: 新建或添加子项目后一次确认即在三端可开工
- 人看: 新项目首个会话无需手工配置即可调用炼境工具
- 机器: card:agent-client-parity#P8e
- 不做: 不替 agent 选模型;不让子项目依赖炼境在线
- 墙: W12,W13
## INT-09(已撤销)
- 撤销: YYYY-MM-DD → module:intent-catalog#决策记录
## 附录
- 承重墙 → path:.blueprint/modules/intent-catalog.md#承重墙
- 决策与否决 → 各模块「决策记录」;终验否决理由 → 卡上 `- 终验:` 行
```
### 2. 挂靠与指针
- **单向挂靠**:
- 卡上可选写一行 `- intent: INT-NN@X.Y`,紧跟在 complexity 后面。
- 模块头的 blockquote 可选写 `| intent: INT-NN` 作为默认挂靠,不带版本,影响分析里计为低置信。
- 章的「机器:」只是验收坐标指针,不登记成员;反向索引由门控现算,不存储。
- **类型化指针**:
- `path:<路径>[#标题前缀]`
- `module:<id>`
- `card:<module>#<卡键>`
- `spec:<路径>#标题`
- `cmd:<命令>`:只校验格式,不执行
- `W<n>`
多个指针用「;」分隔。卡键取标题去掉状态前缀后的第一个 token,例如 `IC6`、`P8e`。
- **解析器行为**(主会话已复核 `blueprint.rs:335-420` 与 `buff.rs:495-505`):
- `parse_module_md` 只认 status、complexity、files、depends、acceptance、notes、blocked_reason 这几个键,`- intent:` 与 `- 终验:` 不进任何字段。
- `- status:` 行会覆盖标题前缀。
- 多条 `- notes:` 时后一条覆盖前一条,所以终验另起 `- 终验:` 键。
- 未识别的 `##` 段(Section::None)下出现的 `###` 会被当成任务卡,所以**模块 md 里任务卡段以外一律不许用 `###`**。
- buff 自动标 🔵 只替换标题前缀和 `status: todo` 行,不碰 `intent`/`终验` 行。
### 3. 修订、钉版与影响分析
- **版本号**:引言里只写一个 `catalog_version: X.Y`;每章另有 `rev`,即该章最后一次变更时的版本。与 manifest.iteration 互不借号。
- **三级修订**:
| 级别 | 触发 | 谁改 | 版本变化 |
|---|---|---|---|
| 补丁 | 只改正文,目录不动 | agent 自主 | 无 |
| 小版本 | 改章导语的坐标,或由正文反推修改目录 | agent 出 S 级三行确认卡,附 diff 和 base blob(`git rev-parse --short HEAD:.blueprint/catalog.md`),人确认 | Y+1,被改章的 rev 设为新版本 |
| 大版本 | 增删章节、调整方向 | 人主导 | X+1、Y 归零;涉及的章更新 rev;删掉的章留墓碑;按 T4 检查 AGENTS.md「项目定位」 |
- **审计交给 git**:目录提交写成 `docs(intent): …`,body 写一句理由,并带 `Feature-Confirmed: true`。提交前如果 HEAD 里的 blob 已不等于提案的 base,就重新提案,沿用 W9 的 plan→digest→apply 语义。
- **钉版**:卡钉 `INT-NN@X.Y`;goal 标签写 `INT-NN@X.Y#blob7`。
- **影响分析**:
- stale:钉的版本低于章 rev,且卡未完成。
- orphan:钉在墓碑章上。
- low_confidence:只有模块默认挂靠。
- **在制品保护**:
- 钉旧版的 🔵 卡照常做完,只复核 acceptance。
- 章被撤销,或新的「不做」覆盖了该卡时,停下来找人。
- 不自动改写卡。agent 复核 acceptance 无变化后改钉,算补丁,在简报里报告。
### 4. goal 编译与目标确认卡(兼最小任务简报)
**编译七步**:模型无关,只依赖读文件,node 门控可选;/architect 只是引用指南的 Claude 包装。
1. **定位**:从 `.lian-jing/context.json` 取 project_id,记下当前分支、worktree、HEAD;要求 `git status --porcelain -- .blueprint/catalog.md` 为空,取 catalog blob。
2. **读书签**:定位当前章(P8 期间按 coordination §0 的终点),读该章导语和 rev。
3. **校验**:P8 收口后跑 `intent-gate.cjs --report INT-NN --impact`,在此之前用指南里的 shell 等价检查。遇到悬空指针、stale/orphan 或防膨胀警告,先修或先提案,不往下编译。
4. **收卡**:取挂在本章、状态为 📋/🔵 的卡。没有可执行 agent_verify 的,列入「须先补 acceptance」,不进 goal。
5. **合成终点**:
- 取各卡 agent_verify 的合取,改写成会话里可判定的形式:贴出命令和预期输出、纳入卡前缀均为 ✅、回执块已写入。
- 过程词黑名单(按方针、符合设计、设计已完成、基本完成)命中数必须为 0。
- human_verify 不进终点,单列为终验待办。
6. **写明停止找人的条件**:human_verify、写运行中 DB、删除、凭据或机器状态变更、超出纳入卡或本章、需改目录、stale pin、失败 3 次。
7. **输出确认卡和 /goal 文本**:人读完亲手粘贴即为确认。要改就重新编译,agent 不得自行启动或静默改动。
**目标确认卡模板**(/goal 文本首行带同样的标签):
```text
[INT-02@1.0#a1b2c3d] 目标确认卡
项目: <project_id> | 分支/worktree: <branch> @ <path> | HEAD: <sha7>
章意图: <一句> | 不做: <…>
纳入卡: IC6(来源 agent_verify 原文)、IC7(…)
终点(合取): 1) <命令> → <预期输出> 2) … 3) 纳入卡均 ✅ 且已写 Goal-Receipt
终验待办: <human_verify 项>
停止找人: <第 6 步清单>
能力入口: pnpm typecheck / cargo test / <MCP 工具>
没验什么: <…>
作废: 分支变化或 catalog blob ≠ a1b2c3d
```
**回执**:goal 收口时写进收口提交的 body,M 级同时复制到 PR body;炼境在线时可再调 append_project_note。格式为以下几行 trailer:
- `Goal-Receipt: <标签>`
- `Goal-Cards:`
- `Goal-Result: 判对|误判|中止(原因)`
- `Goal-Rounds:`
- `Goal-Interventions:`
- `Goal-Tokens: <客户端可得时填,否则 n/a>`
- `Not-Verified:`
- `Human-Pending:`
不写进模块决策记录,那会被 UI 当成决策展示;也不手改 `notes-archive.jsonl`,它以 DB 为事实源、会被整文件重写。
### 5. 书签
- **载体**:catalog.md 的 `## 书签` 段。
- **P8 期间**:只写一行指针,指向 coordination §0,终点仍以 §0 为唯一事实源。
- **P8 收口后(IC10)**:改为自持三行:`- 当前: INT-NN`、`- 终点 → card:<module>#<卡键>`、`- 确认: YYYY-MM-DD`。同一次提交把 coordination §0 改成指向书签(若文件已按处置条款删除则跳过),此后统筹文档只管派单与交接。
- **切换书签**:不升版本,但走与小版本相同的流程:附 `--report` 证据和 base blob,人确认,提交带 Feature-Confirmed。书签指针悬空时门控报警,这本身就是交接信号。
### 6. 机器校验
- **Phase 3(只新增文档,不写代码)**:检查全靠卡 acceptance 里的 shell 单行命令:
- grep 统计章数和禁用键;
- wc 检查体量;
- `grep -oE 'path:[^ #;]+' | xargs test -e` 校验路径指针;
- 新增前后用 `grep -c '^### '` 计数比对,作为 get_project_blueprint 的离线替代。
- **Phase 4(P8 收口后)**:新增零依赖的 `.claude/hooks/intent-gate.cjs`,恒 exit 0、只警告,`INTENT_CATALOG` 环境变量可以指向夹具,没有目录文件时静默。检查分六类:
1. 结构:版本行存在、INT 唯一、墓碑不被复用、rev 不大于 catalog_version。
2. 防膨胀:字段白名单、单行与体量上限、禁用键与模型名。
3. 类型指针可解析。
4. 卡侧:intent 指向的章存在且未撤销,钉的版本不高于当前版本。
5. 版本纪律:只读 `git diff --cached`,章文改了而 rev 或版本没升就警告。
6. 只读视图:
- `--report`:按解析器语义推导章的四态,标注 status_source;汇总 Goal-Receipt;审计缺 Feature-Confirmed 的目录提交。
- `--impact`:输出 stale/orphan/low_confidence。
- `--pending`:列出有 human_verify 但没有 `- 终验:` 行的卡,以及未提交的目录改动。
- `--self-test`:用内置坏样例自检。
- **接线**:lefthook pre-commit 以 `|| true` 接入;不进 CI 阻断,也不并入托管的 blueprint-gate。另加一条 cargo test,锁定解析器忽略 intent 与终验行。
- **数据门控**:Rust 解析、MCP 查询这类代码化工作,要同时满足钉版卡不少于 5 张、至少发生过 1 次小版本修订、enterprise 试点完成、且 IC13 决定保留之后才考虑。
### 7. 术语映射
- **方针层(前言)**:AGENTS.md「项目定位」。
- **目录层**:`.blueprint/catalog.md`,包括章、导语、附录、书签;索引就是 INT-NN。
- **正文层**:manifest、modules/*.md 和任务卡。
- **不改的词**:CONVENTIONS 里的「蓝图定位(意图层)」与「架构意图层」保留,解释为「.blueprint 全体(目录 + 正文)相对 git 事实层」。这样不触碰整文件分发的规则,也不破坏分类轴。
- **唯一改名点**:`docs/ai-context/agent-button-system.md:51` 的「意图层 — AGENTS.md」改为「方针层 — AGENTS.md」。该文件不在 resources/onboarding 内,已核实;在 Phase 4 由 IC8 执行。之后新文档不再单独使用「意图层」一词。
## 13 个待设计问题的化解
| # | 问题 | 化解 |
|---|---|---|
| 1 | 「意图层」三处归属 | 定死方针层、目录层、正文层三层;CONVENTIONS 的「意图层」保留并重新解释;全仓只改 agent-button-system.md:51 一处,由 IC8 执行。否决改 CONVENTIONS 的做法,因为它会破坏分类轴并触发整文件广播 |
| 2 | 红线:章完成不能手动切换 | 目录不设任何状态字段;章的四态(未开始、进行中、待人终验、已达成)只由 `--report` 从卡状态和 `- 终验:` 行临时推导,不落盘、不提供入口。书签切换属于方向决策,不算改状态 |
| 3 | 状态语义未收敛 | 推导按解析器语义来:先看前缀,有 status 行则以它为准,并标注 status_source;前缀与 status 行不一致时警告。正式收敛交给 blueprint-governance 前置,收敛前推导结果标为「参考」;stale/orphan 不依赖状态语义 |
| 4 | 四套分类轴的对应 | 补丁对应 Bug 和章内 S/M Feature,T1–T4 照旧;小版本对应改变章坐标的 Feature(S 级确认卡),触发 T5-minor;大版本对应 L 级或方向调整,触发 T5-major,并按 T4 检查项目定位。manifest.iteration 只计模块重构。T5 先写进炼境 AGENTS.md 托管块外,登记为有意的临时分叉,在 IC13 回收 |
| 5 | ID 前缀 | 章用 INT-NN,永不复用,撤销留墓碑;W1–W14 只出现在模块和设计文档里;卡从 IC2 起编号;钉版写 `INT-NN@X.Y`,goal 标签写 `INT-NN@X.Y#blob7`。2026-10-04 已用 git grep 确认这些前缀都没被占用 |
| 6 | goal 级确认代替逐卡确认 | 只起草,见下文「立法提案草案」。P8 期间只记账,P8 收口后由 IC11 带着数据交给用户裁决 |
| 7 | W11 资源:只记账不分配 | 由 Goal-Receipt 记录轮数、介入次数,token 可得时一并记录,`--report` 按章汇总;目录与 goal 文本都禁止出现模型名。CONVENTIONS 复杂度表映射到模型名的矛盾,交给前置收敛 |
| 8 | 防止容器化 | 只放 ID、一句话意图和类型化指针,加上白名单、体量上限、禁用键,不设文件内修订历史;goal 编译第 3 步把警告当作阻塞 |
| 9 | 书签与 coordination §0 | P8 期间书签只是一行指针;之后由 IC10 改为自持,agent 起草、人确认,同一次提交把 §0 改成指向书签 |
| 10 | 离线与降级 | 目录、指南、门控、回执都在项目 Git 里,离线可读可跑;不新增 MCP 工具,在线时用现有的 get_project_file 读同一份文件;跨项目索引受数据门控约束 |
| 11 | 跨 agent | 编译流程写进 intent-catalog-guide.md,作为唯一来源,/architect 只引用不复述;IC4 由 Codex 或 DSH 纸面试跑验证。保留后经 blueprint-baseline 包或安全派发并入 CONVENTIONS,不走整文件广播 |
| 12 | 子项目已有意图载体 | 用 `spec:.specify/specs/<id>/spec.md#标题` 指向;单行和体量上限从物理上防止抄录;在 IC12 验证 |
| 13 | 物理位置与前言 | 放在 `.blueprint/catalog.md`:属于启动就读的蓝图目录,又在 modules/ 之外。前言只写一个指针 `path:AGENTS.md#项目定位`。不放 AGENTS.md,避免常驻成本和托管块覆盖;不新开 docs/intent/,因为它不在启动读取路径上 |
## 承重墙四问
| 墙 | 落点 | 机制 | 机器检查 | 何时拆除 |
|---|---|---|---|---|
| W1 迭代 | 引言版本 + 各章 rev;卡和 goal 上的钉版 | 三级修订;钉版;审计交给 git;与 iteration 分开 | `--impact` 报 stale/orphan;章文改了而 rev 未升时警告 | IC13 时钉版卡少于 5 张,或从未触发复核,就撤销钉版,只留章 ID |
| W2 遗忘 | 书签 + 确认卡(兼简报) | 启动只读引言和书签约 10 行;用简报代替通读蓝图 | 书签所指章存在;确认卡 blob 等于 HEAD | 续接所需上下文没有下降,或被原生记忆覆盖 |
| W3 熵增 | 目录全文件 | 白名单、体量上限、只写指针、禁用键 | Phase 3 用 grep/wc;Phase 4 用门控;编译前把警告当阻塞 | 随目录整体撤销;阈值在 IC13 前按实测调整 |
| W4 意图鸿沟 | 章导语四个字段 + 卡侧 intent | 卡挂回章;确认卡写清「不做」与停止条件 | 卡引用的章存在;编译输出「须先补 acceptance」 | human_verify 否决率和方向返工没有下降 |
| W5 注意力稀缺 | 书签 + `--pending` | 人只确认书签、大小版本和 goal 确认卡 | `--pending` 列出待终验卡和未提交的目录改动 | 原生视图已能覆盖跨章待裁决 |
| W6 理解债 | 卡侧 intent + 章的机器指针 | 由门控现算「服务哪条意图」,不存储 | `--report INT-NN` 列出挂靠卡及来源 | 试用期内反查从未被用过 |
| W7 自评偏差 | 双坐标;回执的 Not-Verified | 章完成只能推导;终验结论由人给出 | 禁止 status 键;标注 status_source;回执 trailer 齐全 | 不拆,这是红线 |
| W8 不确定性 | 可选的「假设:」字段 | 只指向已有的证伪落点 | 指针可解析 | 试点中从未用过,就从白名单删除 |
| W9 并发冲突 | 目录文件 | 提案带 base blob,不符就重提;目录改动单独小提交 | 编译第 1 步要求目录无未提交改动 | 保留,成本极低 |
| W10 风险不对称 | 大小版本、书签;可选的「风险:」字段 | 提案、diff、blob 交人确认;停止清单是必填项 | 审计目录提交的 trailer | 不拆;立法若采纳则并入需求对齐协议 |
| W11 资源有限 | Goal-Receipt trailer | 只记账:轮数、介入次数、耗时、可得时的 token | 从 git log 按章汇总;禁止出现模型名 | 没有任何客户端提供用量,且轮数数据无助于决策 |
| W12 环境漂移 | 附录指针 | 用 cmd: 指针指向现有工具,不新建机制 | 只校验格式 | 无需拆,本身没有新增机制 |
| W13 异构 agent | intent-catalog-guide.md | 只依赖读文件;/architect 只是包装 | IC4 纸面编译;IC12 实跑 | 各客户端出现原生的同等能力 |
| W14 摩擦重复 | 回执、`- 终验:` 否决理由、envoy | 复用提交 body、append_project_note、report_envoy_return | 用 git log 统计 | 随目录整体撤销 |
## 受影响文件
| 阶段 | 文件 | 改动 | 用途 |
|---|---|---|---|
| 2 设计(本文,与 P8 并行) | docs/tasks/2026-10-04-intent-catalog-design.md | 新增 | 本设计 |
| 2 设计 | .blueprint/modules/intent-catalog.md | 修改 | 改 IC1 前缀、补决策记录、追加 IC2–IC13 卡(任务卡段以外不用 `###`) |
| 2 设计 | .blueprint/manifest.yaml | 修改 | 用户确认后只改本模块的 status 一行:concept → planned |
| 3 炼境自身试用(只新增文件) | docs/ai-context/intent-catalog-guide.md | 新增 | 目录语法、修订钉版、编译七步、确认卡与回执模板、离线检查 |
| 3 | .blueprint/catalog.md | 新增 | 1.0 骨架与首批 2–4 章;书签只写一行指针 |
| 4 P8 收口后 | .claude/hooks/intent-gate.cjs | 新增 | 只警告的门控和各个只读视图 |
| 4 | src-tauri/src/commands/blueprint.rs | 修改 | 只改 `#[cfg(test)]`:锁定解析器忽略 intent 与终验行 |
| 4 | lefthook.yml | 修改 | pre-commit 加 intent-gate(带 `\|\| true`);接入包对 lefthook 是「存在即跳过」(已核实 onboarding.rs:6),不会被覆盖 |
| 4 | AGENTS.md | 修改 | 只改托管块外:T1–T4 区加 T5;块外约定加「启动读目录引言和书签」一行 |
| 4 | docs/ai-context/agent-button-system.md | 修改 | 唯一改名点:第 51 行 |
| 4 | .blueprint/catalog.md、docs/tasks/2026-10-03-coordination.md | 修改 | IC10 书签交接;§0 改为指向书签 |
| 5 enterprise 试点 | enterprise 隔离 worktree 里的 .blueprint/catalog.md 和 intent-gate.cjs 试点副本 | 新增 | 规格只用 spec: 指向;副本首行标注到期 |
| 6 去留(保留时) | onboarding 模板(经 blueprint-baseline 包)、AGENTS.md.tmpl、agents-meta-rules.md、CONVENTIONS.md | 新增/修改 | 只在 IC13 决定保留后分发,配套升版本和指纹,回收 T5 临时分叉 |
| 6 去留(撤销时) | 见撤销清单 | 删除 | 删除 3 个文件、lefthook 键、T5 和启动读书签那一行;回退 §0;删除 enterprise 副本 |
## 系统边界变更
- **Phase 2**:无变化,只写文档。
- **Phase 3**:
- 新增项目级文件格式 `.blueprint/catalog.md`。
- 任务卡新增两个可选、解析器不读的键:`- intent:` 和 `- 终验:`,与 iteration:/replaces: 同属此类。
- 提交新增 `Goal-Receipt:` 等 trailer 约定。
- 不新增 Tauri command、MCP 工具、DB 表或结构体字段。
- **Phase 4**:新增本地 CLI `node .claude/hooks/intent-gate.cjs [--self-test|--report|--impact|--pending]`、lefthook 键和 AGENTS.md 块外的 T5;仍不涉及 command、MCP 或 DB。
- **Phase 6**:只有决定保留并过了数据门控,才可能新增 `BlueprintTask.intent` 字段或只读 MCP 工具,届时按 T1 契约变更另行设计。
## 风险点
| 风险 | 规避 |
|---|---|
| 目录膨胀成容器,或变成第二事实源 | 白名单、体量上限、只写指针、单向挂靠;编译前把警告当阻塞 |
| 只警告的门控被习惯性忽略 | 保持零警告基线、警告类别少而准;编译前要求本章零警告;是否升级为阻断由 IC13 依数据决定 |
| 会重写卡文件的工具丢掉 intent 或终验行 | 已复核解析器和 buff;其他写入路径未核实,由 IC9 锁定,并比对 IC5 前后的卡数 |
| /goal 评估器仍然过早判定达成 | 终点只写「命令 + 输出」的合取;过程词黑名单;Goal-Result 统计一次判对率 |
| 状态语义未收敛导致推导失真 | 标注 status_source、不一致时警告;推导结果标为参考、不落盘 |
| 把回执写进 notes-archive.jsonl 会被冲掉 | 主载体是提交 body;在线时只经 append_project_note 双写 |
| 归档 modules 后 card: 指针集体悬空 | 门控报出悬空后按小版本修订;归档本身就是触发信号 |
| 模块 md 的非任务卡段里用了 `###`,被当成卡 | 指南明令禁止;acceptance 比对 `^### ` 计数 |
| T5 和 enterprise 门控副本与模板分叉 | 登记为有意的临时分叉,在 IC13 统一回收 |
| 其他 agent 沙箱里没有 node,或 lefthook 静默失效 | 门控只是辅助,保留 shell 加人工读文件的降级路径 |
| 维护成本超过收益 | 由 IC13 依数据决定;撤销只需删 3 个文件和若干行 |
## 拆解建议
建议拆为 12 张卡,依赖顺序:
- IC2 → IC3 → IC4 → IC5(Phase 3,P8 期间可做,只新增文件)
- P8 收口 → IC6 → IC7;IC6 → IC8;IC9 不依赖其他卡;IC7 + IC8 → IC10;IC5 → IC11(以上为 Phase 4)
- IC9 + IC10 → IC12 → IC13(Phase 5、6)
| 卡 | 标题 | 复杂度 | 阶段 | acceptance 要点 |
|---|---|---|---|---|
| IC2 | 新增 intent-catalog-guide.md | S | 3 | [CLI] 5 个必备节标题都在;模型名 grep 为 0;git status 只有该文件新增 |
| IC3 | 新增 catalog.md:1.0 骨架与首批 2–4 章 | S | 3 | [CLI] 版本行、章数、体量、禁用键、path 悬空数为 0;`^### ` 计数前后相等。human_verify:用户逐章定稿,提交带 Feature-Confirmed |
| IC4 | 跨 agent 纸面编译(Codex 或 DSH) | S | 3 | [CLI] 提交 body 里确认卡 9 个字段齐全,有 `Compiled-By: <非 Claude>`;blob 一致;终点都能在来源卡里找到;黑名单为 0 |
| IC5 | 首次真实 /goal:编译 → 粘贴 → 回执 | S | 3→4 | [CLI] 至少 1 条完整的 Goal-Receipt;纳入卡均为 ✅;有 human_verify 的卡带 `- 终验:` 行。human_verify:人粘贴并判定 Goal-Result |
| IC6 | intent-gate 核心加 --self-test | M | 4 | [gate] self-test 的 5 类坏样例各命中 1 条警告;真实目录 0 警告;没有目录时静默 exit 0 |
| IC7 | 只读视图 --report/--impact/--pending 与审计 | M | 4 | [gate] 夹具覆盖 stale/orphan/low_confidence/divergence/待终验/缺 trailer 审计;运行前后文件 sha256 不变 |
| IC8 | 接线:lefthook、T5、启动读书签、单处改名 | S | 4 | [YAML] run 以 `\|\| true` 结尾;[cargo test] `cargo test onboarding` 0 failed;AGENTS.md 的 diff 都在托管块之前;改名残留为 0;临时 worktree 里实测会警告 |
| IC9 | cargo test 锁定解析器忽略 intent 与终验行 | S | 4 | [cargo test] `parse_module_md_ignores_intent_lines` 1 passed:带和不带这些行的样本逐字段相等;全量无 FAILED |
| IC10 | 书签交接 | S | 4 | [gate] 0 警告;书签三行齐全;§0 改为指向书签;提交带 Feature-Confirmed。human_verify:用户确认切换 |
| IC11 | 立法提案定稿 | S | 4 | [读文件] 决策记录有条文、例外清单、P8 与 IC5 数据;diff 不含 AGENTS.md 和 resources/。human_verify:用户裁决 |
| IC12 | enterprise 隔离试点 | M | 5 | [gate] 试点 worktree 0 警告、spec: 都可解析;只新增 2 个文件;enterprise 主工作区前后一致;至少 1 条 Goal-Receipt |
| IC13 | 去留决策 | S | 6 | [读文件] 五项度量的前后对比,样本至少 5 条;撤销时 `git grep` 只命中决策记录。human_verify:用户裁决 |
## 收益度量与退出条件
- **度量**:基线取 P8 期间没有目录时的数据,来源是 PR body 和统筹流水。
- /goal 一次判对率,取自 Goal-Result;
- 每个 goal 的人工介入次数;
- 续接所需的上下文量:读简报的字节数 vs. 读 coordination 加多个模块的字节数;
- human_verify 否决率与方向返工;
- 每阶段的轮数、耗时,token 可得时一并记录。
- **健康指标**:目录警告数、stale pin 数、目录体量、人每阶段改目录的次数。
- **去留**(初始阈值,用户可在 IC13 前调整):样本至少 5 个 goal,其中 enterprise 至少 1 个。一次判对率不低于 60%、人工介入不高于基线、人每阶段改目录不超过 1 次,就保留并另拆分发卡;实测无收益、已被 agent 原生能力覆盖,或维护成本超过收益,就按撤销清单整体撤销。
## 立法提案草案:「goal 级确认代替逐卡确认」
不在 P8 期间生效,P8 收口后由 IC11 用实测数据定稿。
1. **范围**:书签所指当前章内,目标确认卡「纳入卡」所列的 S/M 卡。
2. **确认方式**:人读完确认卡后亲手粘贴 /goal,即视为批量确认清单内各卡的 Feature 确认卡;agent 不得自行启动或改写 goal 文本。
3. **存证**:清单内卡的 feat: 提交照常带 `Feature-Confirmed: true`,并加 `Goal-Receipt: INT-NN@X.Y#blob`;缺这一行即视为逐卡确认未完成。
4. **例外**:以下仍须逐项找人:写运行中 DB;删除文件、数据或分支;human_verify;凭据与机器状态变更;超出纳入卡或当前章;修改目录;stale/orphan pin;失败 3 次。
5. **失效**:分支变化、catalog blob 变化或 goal 中止时,恢复逐卡确认。
6. **落点**:先在炼境 AGENTS.md 块外试行,采纳后再进 ONBOARDING_MANAGED「需求对齐协议」(升块版本和指纹),并同步 agents-meta-rules。试行期间任何一条例外被越过,就否决本条。
## 待用户拍板
1. **门控脚本的时机**:默认放在 P8 收口后的 Phase 4,试用期只放两份文档、不写代码。是否特批在试用期以新增文件的形式就写?
2. **IC5 首次真实 /goal 用哪个阶段**:P8 收尾,数据来得最早;还是 P8 收口后的第一个阶段,例如本模块 Phase 4 的卡,自举试用?
3. **炼境 1.0 首批章节方向**:草拟候选为「一键接入三端可用」「意图编译为可判定终点」「摩擦驱动沉淀与退出」。正式定稿在 IC3,由你逐章确认。
4. **去留阈值**是否认可:样本至少 5 个、一次判对率不低于 60%、人工介入不高于基线、改目录每阶段不超过 1 次?
5. **常驻成本**:Phase 4 在 AGENTS.md 块外加「会话开始读目录引言和书签(约 10 行)」,是否接受?
## 自验报告:没验什么
- **已复核**:archive 只归档 modules/*.md;parse_module_md 的段落与键规则(`blueprint.rs:335-420`);buff 自动标 🔵 的替换范围(`buff.rs:495-505`);lefthook「存在即跳过」(`onboarding.rs:6`);agent-button-system 不在分发模板内;W/IC/INT 前缀未被占用。
- **未复核,沿用评审团或 handoff 简报的结论**:
- `get_project_file` 在 mcp_tools.rs:38;
- notes-archive.jsonl 由 DB 整文件重写(mcp_tools.rs:87);
- 其他可能重写卡文件的路径;
- CONVENTIONS 状态语义冲突的具体行号。
- **侦察缺口**:侦察工作流 wf_6dc3756a-b72 中「蓝图全量」和「红线与记忆」两个侦察员卡死失败,相关约束由综合者补读和主会话已知规则补齐,可能有遗漏。
- **跨 agent**:/goal 能否作为三端通用的粘贴载体,未核实,留给 IC4、IC12 验证。
- **用量(W11 记账)**:侦察工作流约 178 万 token,其中两个侦察员各重试 6 次卡死,浪费明显;设计评审团约 55 万 token,6 个 agent 全部成功。