Compare commits

..

No commits in common. "0ffaad03fd01a006acdb98491fb8c0760c7abe85" and "8b78c72bb9743d8f1cb2f9b4cdcbb176fd3a62d6" have entirely different histories.

3 changed files with 9 additions and 27 deletions

View File

@ -529,7 +529,7 @@ modules:
name: 意图目录 name: 意图目录
area: backend area: backend
status: in_progress status: in_progress
progress: 31 progress: 23
updated: 2026-10-04 updated: 2026-10-04
note: "两层模型(人持有的意图目录 .blueprint/catalog.md + 蓝图正文),书装意图、指向事实;卡侧 intent 钉版,agent 编译可判定 /goal,确认卡兼作最小任务简报,回执写进提交。IC1 设计已确认(最小文件优先方案);IC2–IC4 只新增文档、可与 P8 并行,门控与接线等 P8 收口后做,IC13 按实测数据决定去留。" note: "两层模型(人持有的意图目录 .blueprint/catalog.md + 蓝图正文),书装意图、指向事实;卡侧 intent 钉版,agent 编译可判定 /goal,确认卡兼作最小任务简报,回执写进提交。IC1 设计已确认(最小文件优先方案);IC2–IC4 只新增文档、可与 P8 并行,门控与接线等 P8 收口后做,IC13 按实测数据决定去留。"
position: [4000, 950] position: [4000, 950]

View File

@ -1,6 +1,6 @@
# 意图目录(intent-catalog) # 意图目录(intent-catalog)
> status: in_progress | created: 2026-10-04 | 设计:docs/tasks/2026-10-04-intent-catalog-design.md(IC1 ✅,用户 2026-10-04 确认)| 指南:docs/ai-context/intent-catalog-guide.md(IC2 ✅)| 目录:.blueprint/catalog.md 1.0(IC3 ✅)| 下一步:IC5(P8 收口后首次真实 /goal) > status: in_progress | created: 2026-10-04 | 设计:docs/tasks/2026-10-04-intent-catalog-design.md(IC1 ✅,用户 2026-10-04 确认)| 指南:docs/ai-context/intent-catalog-guide.md(IC2 ✅)| 目录:.blueprint/catalog.md 1.0(IC3 ✅)| 下一步:IC4(跨 agent 纸面编译)
> 来源:2026-10-03~04 与用户讨论(/goal 与 Loop Engineering 操作手册、目录/正文模型、承重墙),以及侦察工作流 wf_6dc3756a-b72 的重叠与冲突扫描。 > 来源:2026-10-03~04 与用户讨论(/goal 与 Loop Engineering 操作手册、目录/正文模型、承重墙),以及侦察工作流 wf_6dc3756a-b72 的重叠与冲突扫描。
## 概述 ## 概述
@ -117,13 +117,11 @@ agent 开发子项目时躲不掉的现象。每面墙都要回答四个问题
- depends: IC2 - 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。" - 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 按指南对书签章编译确认卡(不粘贴) ### 📋 IC4 — 跨 agent 纸面编译:Codex 或 DSH 按指南对书签章编译确认卡(不粘贴)
- status: done - status: todo
- complexity: S - complexity: S
- files: .blueprint/modules/intent-catalog.md - files: .blueprint/modules/intent-catalog.md
- depends: IC3 - depends: IC3
- notes: 2026-10-04 报备改断言:目标章由「书签章」改为指定 INT-02。理由:书签所指的 INT-01(P8)卡在统筹会话的 agent-client-parity.md 中,且几乎全为 ✅,纸面编译无测试价值;INT-02 挂有 IC6–IC10 五张待做卡,纸面编译即 IC5 的预演。
- result: 2026-10-04 Codex 纸面编译通过:9 个字段齐全;标签 blob 8392d18 等于目录 blob;5 条终点可追溯到 IC6–IC10 的 agent_verify;按当时的黑名单命中 0。Codex 环境起不了 Bash,改用语义等价的 PowerShell 执行;它报告的 5 处指南不足和主会话核对时发现的 2 处(字节数量法与平台有关;确认卡终点被改写成「均符合预期」,与 /goal 文本写法不一致)已修进指南。按新黑名单,该卡第 1 条终点会命中「符合预期」,这正是本次的发现。
- 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。" - 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 的卡编译 → 人粘贴 → 收口回执 ### 📋 IC5 — 首次真实 /goal:为 Phase 4 的卡编译 → 人粘贴 → 收口回执
@ -136,7 +134,6 @@ agent 开发子项目时躲不掉的现象。每面墙都要回答四个问题
### 📋 IC6 — intent-gate.cjs 核心:结构、防膨胀、类型指针、卡侧引用,加 --self-test ### 📋 IC6 — intent-gate.cjs 核心:结构、防膨胀、类型指针、卡侧引用,加 --self-test
- status: todo - status: todo
- complexity: M - complexity: M
- intent: INT-02@1.0
- files: .claude/hooks/intent-gate.cjs - files: .claude/hooks/intent-gate.cjs
- depends: IC3, P8 收口 - depends: IC3, P8 收口
- acceptance: "agent_verify: [gate 脚本] node .claude/hooks/intent-gate.cjs --self-test → exit 0 且输出 self-test ok,内置 6 类坏样例(悬空 path:、未知 INT、超长字段、status: 键、card: 指向不存在的卡、探索章缺预算或收敛信号)各恰好 1 条警告;node .claude/hooks/intent-gate.cjs → exit 0、真实目录 0 警告;INTENT_CATALOG=/nonexistent → 无输出、exit 0。" - acceptance: "agent_verify: [gate 脚本] node .claude/hooks/intent-gate.cjs --self-test → exit 0 且输出 self-test ok,内置 6 类坏样例(悬空 path:、未知 INT、超长字段、status: 键、card: 指向不存在的卡、探索章缺预算或收敛信号)各恰好 1 条警告;node .claude/hooks/intent-gate.cjs → exit 0、真实目录 0 警告;INTENT_CATALOG=/nonexistent → 无输出、exit 0。"
@ -144,7 +141,6 @@ agent 开发子项目时躲不掉的现象。每面墙都要回答四个问题
### 📋 IC7 — 门控只读视图 --report/--impact/--pending 与目录提交审计 ### 📋 IC7 — 门控只读视图 --report/--impact/--pending 与目录提交审计
- status: todo - status: todo
- complexity: M - complexity: M
- intent: INT-02@1.0
- files: .claude/hooks/intent-gate.cjs - files: .claude/hooks/intent-gate.cjs
- depends: IC6 - 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 不变。" - 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 不变。"
@ -152,7 +148,6 @@ agent 开发子项目时躲不掉的现象。每面墙都要回答四个问题
### 📋 IC8 — 接线:lefthook 加 intent-gate、AGENTS.md 块外加 T5 与启动读书签、agent-button-system 单处改名 ### 📋 IC8 — 接线:lefthook 加 intent-gate、AGENTS.md 块外加 T5 与启动读书签、agent-button-system 单处改名
- status: todo - status: todo
- complexity: S - complexity: S
- intent: INT-02@1.0
- files: lefthook.yml, AGENTS.md, docs/ai-context/agent-button-system.md, docs/ai-context/intent-catalog-guide.md, .blueprint/modules/intent-catalog.md - 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 收口 - 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。" - 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。"
@ -160,7 +155,6 @@ agent 开发子项目时躲不掉的现象。每面墙都要回答四个问题
### 📋 IC9 — cargo test 锁定 parse_module_md 忽略 intent 与终验行 ### 📋 IC9 — cargo test 锁定 parse_module_md 忽略 intent 与终验行
- status: todo - status: todo
- complexity: S - complexity: S
- intent: INT-02@1.0
- files: src-tauri/src/commands/blueprint.rs - files: src-tauri/src/commands/blueprint.rs
- depends: P8 收口 - 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。" - 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。"
@ -168,7 +162,6 @@ agent 开发子项目时躲不掉的现象。每面墙都要回答四个问题
### 📋 IC10 — 书签交接:目录书签自持三行,coordination §0 改为指向书签 ### 📋 IC10 — 书签交接:目录书签自持三行,coordination §0 改为指向书签
- status: todo - status: todo
- complexity: S - complexity: S
- intent: INT-02@1.0
- files: .blueprint/catalog.md, docs/tasks/2026-10-03-coordination.md - files: .blueprint/catalog.md, docs/tasks/2026-10-03-coordination.md
- depends: IC7, IC8 - 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: 用户确认书签切换。" - 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: 用户确认书签切换。"

View File

@ -170,20 +170,14 @@ agent 不得自行延长预算。
- 要求 `git status --porcelain -- .blueprint/catalog.md` 输出为空:目录有未提交改动时不编译。 - 要求 `git status --porcelain -- .blueprint/catalog.md` 输出为空:目录有未提交改动时不编译。
- 取 catalog blob:`git rev-parse --short HEAD:.blueprint/catalog.md`。 - 取 catalog blob:`git rev-parse --short HEAD:.blueprint/catalog.md`。
2. **读书签**:书签指向当前章(P8 期间指向 coordination §0 的终点)。读该章的导语和 rev。 2. **读书签**:书签指向当前章(P8 期间指向 coordination §0 的终点)。读该章的导语和 rev。
3. **校验**:跑「离线检查」一节的命令(Phase 4 后改为 `node .claude/hooks/intent-gate.cjs --report INT-NN --impact`)。 3. **校验**:跑「离线检查」一节的全部命令(Phase 4 后改为 `node .claude/hooks/intent-gate.cjs --report INT-NN --impact`)。只要出现悬空指针、stale 或 orphan、防膨胀超限,就先修或先提案,不往下编译。
- 机器检查(第 1–7、9–11 条)必须全部通过。
- 第 8 条(钉版对照)和 `card:`、`#标题` 指针属于人工核对,核对结果写进确认卡;门控落地后改为全自动。
- 只要出现悬空指针、stale 或 orphan、防膨胀超限,就先修或先提案,不往下编译。
4. **收卡** 4. **收卡**
- 检查各纳入卡的 depends,未满足的写进确认卡的「前置」行。只要有未满足的前置,就只能做纸面编译,不能粘贴执行。
- depends 尽量写卡键或模块 id。像「P8 收口」这样的自然语言前置,要在确认卡里写明人工判定的结果。
- 取挂在本章、标题前缀为 📋 或 🔵 的卡。 - 取挂在本章、标题前缀为 📋 或 🔵 的卡。
- 没有可执行 agent_verify 的卡,列入「须先补 acceptance」,不进 goal。 - 没有可执行 agent_verify 的卡,列入「须先补 acceptance」,不进 goal。
5. **合成终点** 5. **合成终点**
- 取各卡 agent_verify 的合取,改写成在会话里能判定的形式:贴出命令和预期输出、纳入卡前缀都是 ✅、回执已写入。 - 取各卡 agent_verify 的合取,改写成在会话里能判定的形式:贴出命令和预期输出、纳入卡前缀都是 ✅、回执已写入。
- human_verify 不进终点,单列为终验待办。 - human_verify 不进终点,单列为终验待办。
- 过程词黑名单命中数必须为 0:「按方针」「符合设计」「设计已完成」「基本完成」「符合预期」,以及任何无法从会话输出判定的形容词。 - 过程词黑名单命中数必须为 0:「按方针」「符合设计」「设计已完成」「基本完成」,以及任何无法从会话输出判定的形容词。
- 确认卡和 /goal 文本里的终点写法必须一致,都写「命令 → 预期输出」。不能 /goal 里写得精确,确认卡里却改写成「均符合预期」。
- **探索章**不编译「意图的终点」,只编译本轮试验的终点: - **探索章**不编译「意图的终点」,只编译本轮试验的终点:
- 做出可试用的 MVP 变体,写明最小动作和可演示方式; - 做出可试用的 MVP 变体,写明最小动作和可演示方式;
- 校验命令通过; - 校验命令通过;
@ -209,7 +203,6 @@ agent 不得自行延长预算。
[INT-NN@X.Y#<blob7>] 目标确认卡 [INT-NN@X.Y#<blob7>] 目标确认卡
项目: <project_id> | 分支/worktree: <branch> @ <path> | HEAD: <sha7> 项目: <project_id> | 分支/worktree: <branch> @ <path> | HEAD: <sha7>
章意图: <一句> | 不做: <…> 章意图: <一句> | 不做: <…>
前置: <各纳入卡的 depends 及是否满足;有未满足的,注明「仅纸面」>
形态: 定型 | 探索(第 k/N 轮;收敛信号: <…>) 形态: 定型 | 探索(第 k/N 轮;收敛信号: <…>)
纳入卡: <卡键>(来源 agent_verify 原文)、<卡键>(…) 纳入卡: <卡键>(来源 agent_verify 原文)、<卡键>(…)
终点(合取): 1) <命令> → <预期输出> 2) … 3) 纳入卡均 ✅ 且已写 Goal-Receipt 终点(合取): 1) <命令> → <预期输出> 2) … 3) 纳入卡均 ✅ 且已写 Goal-Receipt
@ -241,17 +234,13 @@ Human-Pending: <待人终验项>
试用期的检查全部是 shell 单行命令,在仓库根目录执行。期望输出写在每条后面的注释里。 试用期的检查全部是 shell 单行命令,在仓库根目录执行。期望输出写在每条后面的注释里。
- **没有 Bash 时**:命令按 POSIX shell(Git Bash)写成。部分客户端的沙箱里起不了 Bash,这时可以用语义等价的命令(PowerShell 等),并在确认卡的「没验什么」里注明用了哪种替代。
- **一律逐行解析**:不要对整份文件跑一个正则,字符类会跨行吞掉换行符,把有效指针误报成悬空。
- **只读演练不写盘**:所有检查都用管道或内存字符串完成,不创建临时文件。
```bash ```bash
# 1. 版本行恰好一行 # 1. 版本行恰好一行
grep -c '^> catalog_version: ' .blueprint/catalog.md # → 1 grep -c '^> catalog_version: ' .blueprint/catalog.md # → 1
# 2. 有效章数(墓碑不计) # 2. 有效章数(墓碑不计)
grep -cE '^## INT-[0-9]{2} ' .blueprint/catalog.md # → 章数 grep -cE '^## INT-[0-9]{2} ' .blueprint/catalog.md # → 章数
# 3. 体量 # 3. 体量
wc -l < .blueprint/catalog.md; git cat-file -s HEAD:.blueprint/catalog.md # → ≤200 行、≤8192 字节(量提交里的 blob;工作区可能是 CRLF,wc -c 会多算换行) wc -l < .blueprint/catalog.md; wc -c < .blueprint/catalog.md # → ≤200 行、≤8192 字节
# 4. 禁用键与模型名 # 4. 禁用键与模型名
grep -cE '^- (status|progress|doc|files|acceptance|model):' .blueprint/catalog.md # → 0 grep -cE '^- (status|progress|doc|files|acceptance|model):' .blueprint/catalog.md # → 0
# 5. path 指针可解析(没有输出即通过) # 5. path 指针可解析(没有输出即通过)
@ -265,8 +254,8 @@ grep -hoE 'intent: INT-[0-9]{2}@[0-9]+\.[0-9]+' .blueprint/modules/*.md | sort |
awk '/^## INT-[0-9]{2} /{c=$2} /^- rev:/{print c, $3}' .blueprint/catalog.md awk '/^## INT-[0-9]{2} /{c=$2} /^- rev:/{print c, $3}' .blueprint/catalog.md
# 9. 改模块 md 前后的任务卡计数应相等(新增卡时等于新增数),防止误写 ### # 9. 改模块 md 前后的任务卡计数应相等(新增卡时等于新增数),防止误写 ###
cat .blueprint/modules/*.md | grep -c '^### ' cat .blueprint/modules/*.md | grep -c '^### '
# 10. 确认卡和 /goal 文本的过程词黑名单(用管道检查,不写临时文件) # 10. goal 文本的过程词黑名单(把 /goal 文本存成临时文件后检查)
printf '%s\n' "$GOAL_TEXT" | grep -cE '按方针|符合设计|设计已完成|基本完成|符合预期' # → 0 grep -cE '按方针|符合设计|设计已完成|基本完成' <goal 文本文件> # → 0
# 11. 探索章的必填字段齐全(没有输出即通过) # 11. 探索章的必填字段齐全(没有输出即通过)
awk '/^## /{if(e&&!(b&&s))print "缺预算或收敛信号: "c; c=$2;e=0;b=0;s=0} /^- 形态: 探索/{e=1} /^- 预算:/{b=1} /^- 收敛信号:/{s=1} END{if(e&&!(b&&s))print "缺预算或收敛信号: "c}' .blueprint/catalog.md awk '/^## /{if(e&&!(b&&s))print "缺预算或收敛信号: "c; c=$2;e=0;b=0;s=0} /^- 形态: 探索/{e=1} /^- 预算:/{b=1} /^- 收敛信号:/{s=1} END{if(e&&!(b&&s))print "缺预算或收敛信号: "c}' .blueprint/catalog.md
``` ```