From 216a056ae1781bf8ea5c6ae9727f80119c519a1f Mon Sep 17 00:00:00 2001 From: lanrtop Date: Sun, 4 Oct 2026 04:00:32 +0900 Subject: [PATCH 1/2] =?UTF-8?q?docs(blueprint/intent-catalog):=20IC6?= =?UTF-8?q?=E2=80=93IC10=20=E5=8D=A1=E4=BE=A7=E6=8C=82=E9=9D=A0=20INT-02@1?= =?UTF-8?q?.0=EF=BC=88=E8=A1=A5=E4=B8=81=EF=BC=89=EF=BC=9BIC4=20=E5=BC=80?= =?UTF-8?q?=E5=B7=A5=EF=BC=8C=E6=8A=A5=E5=A4=87=E7=9B=AE=E6=A0=87=E7=AB=A0?= =?UTF-8?q?=E7=94=B1=E4=B9=A6=E7=AD=BE=E7=AB=A0=E6=94=B9=E4=B8=BA=E6=8C=87?= =?UTF-8?q?=E5=AE=9A=20INT-02?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - IC6–IC10 各加一行 `- intent: INT-02@1.0`(紧跟 complexity),离线检查第 7 条通过(引用的章都存在) - IC4 🔵;notes 报备改断言理由:书签所指 INT-01(P8)的卡在统筹会话的 agent-client-parity.md 中且几乎全为 ✅,纸面编译无测试价值;INT-02 挂有五张待做卡,纸面编译即 IC5 预演 Co-Authored-By: Claude Opus 5.5 --- .blueprint/modules/intent-catalog.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.blueprint/modules/intent-catalog.md b/.blueprint/modules/intent-catalog.md index 7a110e0..9cbdfee 100644 --- a/.blueprint/modules/intent-catalog.md +++ b/.blueprint/modules/intent-catalog.md @@ -117,11 +117,12 @@ agent 开发子项目时躲不掉的现象。每面墙都要回答四个问题 - 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 +### 🔵 IC4 — 跨 agent 纸面编译:Codex 或 DSH 按指南对书签章编译确认卡(不粘贴) +- status: in_progress - complexity: S - files: .blueprint/modules/intent-catalog.md - depends: IC3 +- notes: 2026-10-04 报备改断言:目标章由「书签章」改为指定 INT-02。理由:书签所指的 INT-01(P8)卡在统筹会话的 agent-client-parity.md 中,且几乎全为 ✅,纸面编译无测试价值;INT-02 挂有 IC6–IC10 五张待做卡,纸面编译即 IC5 的预演。 - 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 的卡编译 → 人粘贴 → 收口回执 @@ -134,6 +135,7 @@ agent 开发子项目时躲不掉的现象。每面墙都要回答四个问题 ### 📋 IC6 — intent-gate.cjs 核心:结构、防膨胀、类型指针、卡侧引用,加 --self-test - status: todo - complexity: M +- intent: INT-02@1.0 - 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,内置 6 类坏样例(悬空 path:、未知 INT、超长字段、status: 键、card: 指向不存在的卡、探索章缺预算或收敛信号)各恰好 1 条警告;node .claude/hooks/intent-gate.cjs → exit 0、真实目录 0 警告;INTENT_CATALOG=/nonexistent → 无输出、exit 0。" @@ -141,6 +143,7 @@ agent 开发子项目时躲不掉的现象。每面墙都要回答四个问题 ### 📋 IC7 — 门控只读视图 --report/--impact/--pending 与目录提交审计 - status: todo - complexity: M +- intent: INT-02@1.0 - 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 不变。" @@ -148,6 +151,7 @@ agent 开发子项目时躲不掉的现象。每面墙都要回答四个问题 ### 📋 IC8 — 接线:lefthook 加 intent-gate、AGENTS.md 块外加 T5 与启动读书签、agent-button-system 单处改名 - status: todo - 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 - 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。" @@ -155,6 +159,7 @@ agent 开发子项目时躲不掉的现象。每面墙都要回答四个问题 ### 📋 IC9 — cargo test 锁定 parse_module_md 忽略 intent 与终验行 - status: todo - complexity: S +- intent: INT-02@1.0 - 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。" @@ -162,6 +167,7 @@ agent 开发子项目时躲不掉的现象。每面墙都要回答四个问题 ### 📋 IC10 — 书签交接:目录书签自持三行,coordination §0 改为指向书签 - status: todo - complexity: S +- intent: INT-02@1.0 - 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: 用户确认书签切换。" From 50a8bf2f8c445725867816e58c2102de863ed4c0 Mon Sep 17 00:00:00 2001 From: lanrtop Date: Sun, 4 Oct 2026 11:16:57 +0900 Subject: [PATCH 2/2] =?UTF-8?q?docs(blueprint/intent-catalog):=20IC4=20?= =?UTF-8?q?=E8=B7=A8=E5=AE=A2=E6=88=B7=E7=AB=AF=E7=BA=B8=E9=9D=A2=E7=BC=96?= =?UTF-8?q?=E8=AF=91=E9=80=9A=E8=BF=87=EF=BC=88Codex=EF=BC=89=EF=BC=8C?= =?UTF-8?q?=E6=8C=89=E5=85=B6=E5=8F=8D=E9=A6=88=E4=BF=AE=E8=AE=A2=E6=8C=87?= =?UTF-8?q?=E5=8D=97=E4=B8=83=E5=A4=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Codex 照指南对 INT-02 纸面编译(只读、未粘贴)的确认卡原文如下: [INT-02@1.0#8392d18] 目标确认卡 项目: dev-manager-tauri | 分支/worktree: feat/intent-catalog @ E:\code-project\dev-manager-tauri-wt-intent | HEAD: 216a056 章意图: 人给出意图或模糊轮廓,agent 编译出可判定的 /goal:定型章编交付终点,探索章编每轮试验终点,人粘贴即确认 | 不做: 炼境不编译 goal、不判定完成;目录不存状态与进度 形态: 定型 纳入卡: IC6([gate 脚本] node .claude/hooks/intent-gate.cjs --self-test → exit 0 且输出 self-test ok,内置 6 类坏样例各恰好 1 条警告;node .claude/hooks/intent-gate.cjs → exit 0、真实目录 0 警告;INTENT_CATALOG=/nonexistent → 无输出、exit 0)、IC7([gate 脚本] --self-test 夹具的 --impact/--report/--pending 报 stale、orphan、low_confidence、divergence、status_source、缺终验、缺 Feature-Confirmed;全部 exit 0,运行前后 sha256sum 不变)、IC8([YAML 解析] lefthook.yml 可解析且 intent-gate.run 以 || true 结尾;[cargo test] cargo test onboarding → 0 failed;[CLI] AGENTS.md hunk 均在托管块前;grep → 0;临时 worktree 提交输出 1 条警告且成功,验证后移除)、IC9([cargo test] cargo test parse_module_md_ignores_intent_lines → 1 passed;全量 cargo test 无 FAILED)、IC10([gate 脚本] 0 警告;书签三行有效、coordination 指向书签、提案附 --report 与 base blob、提交带 Feature-Confirmed: true) 终点(合取): 1) IC6 的 self-test、真实目录检查和不存在目录降级均符合预期。 2) IC7 的夹具报告覆盖 stale、orphan、low_confidence、divergence、status_source、缺终验及目录提交审计,且全程不改 catalog/module 文件。 3) IC8 的 lefthook、Rust onboarding、AGENTS.md 位置、术语及临时 worktree 警告提交检查通过。 4) IC9 的定向与全量 Rust 测试通过。 5) IC10 的门控、书签、coordination 指向、提案证据及提交 trailer 检查通过。 6) IC6–IC10 均为 ✅,且收口提交已写 Goal-Receipt。 终验待办: IC10:用户确认书签切换。 停止找人: 出现 human_verify;需写运行中的数据库;需删除文件、数据或分支;需变更凭据或机器状态;工作超出 IC6–IC10 或 INT-02;需修改目录;出现 stale 或 orphan;同一问题失败 3 次。 能力入口: node .claude/hooks/intent-gate.cjs(IC6 落地后);cargo test onboarding;cargo test parse_module_md_ignores_intent_lines;cargo test;Git、YAML 解析与临时 worktree。 没验什么: 本次仅纸面编译,未执行尚未实现的 intent-gate,未运行 cargo test 或 lefthook,未创建/删除临时 worktree,未确认 P8 收口及各依赖卡实际状态,也未进行用户书签终验。 作废: 分支变化或 catalog blob ≠ 8392d18 核对(主会话):9 个字段齐全;标签 blob 8392d18 = HEAD:.blueprint/catalog.md;5 条终点可追溯到 IC6–IC10 的 agent_verify;按当时的黑名单(按方针|符合设计|设计已完成|基本完成)命中 0。Codex 的 /goal 文本逐条写了「命令 → 预期输出」,但上面确认卡的终点 1 被改写成「均符合预期」,两者写法不一致,这是本次发现之一。 指南修订(docs/ai-context/intent-catalog-guide.md): - 无 Bash 环境(Codex 沙箱报 E_ACCESS_DENIED)允许用语义等价命令,并在确认卡注明 - 检查一律逐行解析(整文件正则会跨行误报悬空) - 只读演练不写盘:第 10 条改为管道检查 - 第 3 步区分机器检查(必须通过)和人工核对(结果写进确认卡) - 第 4 步检查 depends,确认卡新增「前置」行;有未满足的前置时只能纸面编译 - 体量改量提交里的 blob(git cat-file -s),工作区 CRLF 会让 wc -c 多算 34 字节 - 确认卡与 /goal 的终点写法必须一致;黑名单加「符合预期」 模块:IC4 ✅(附结果记录)、下一步 IC5;manifest 进度 31%。 Compiled-By: Codex Co-Authored-By: Claude Opus 5.5 --- .blueprint/manifest.yaml | 2 +- .blueprint/modules/intent-catalog.md | 7 ++++--- docs/ai-context/intent-catalog-guide.md | 21 ++++++++++++++++----- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/.blueprint/manifest.yaml b/.blueprint/manifest.yaml index f2e15e6..eeedb97 100644 --- a/.blueprint/manifest.yaml +++ b/.blueprint/manifest.yaml @@ -529,7 +529,7 @@ modules: name: 意图目录 area: backend status: in_progress - progress: 23 + progress: 31 updated: 2026-10-04 note: "两层模型(人持有的意图目录 .blueprint/catalog.md + 蓝图正文),书装意图、指向事实;卡侧 intent 钉版,agent 编译可判定 /goal,确认卡兼作最小任务简报,回执写进提交。IC1 设计已确认(最小文件优先方案);IC2–IC4 只新增文档、可与 P8 并行,门控与接线等 P8 收口后做,IC13 按实测数据决定去留。" position: [4000, 950] diff --git a/.blueprint/modules/intent-catalog.md b/.blueprint/modules/intent-catalog.md index 9cbdfee..2916013 100644 --- a/.blueprint/modules/intent-catalog.md +++ b/.blueprint/modules/intent-catalog.md @@ -1,6 +1,6 @@ # 意图目录(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 ✅)| 下一步:IC4(跨 agent 纸面编译) +> 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) > 来源:2026-10-03~04 与用户讨论(/goal 与 Loop Engineering 操作手册、目录/正文模型、承重墙),以及侦察工作流 wf_6dc3756a-b72 的重叠与冲突扫描。 ## 概述 @@ -117,12 +117,13 @@ agent 开发子项目时躲不掉的现象。每面墙都要回答四个问题 - 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: in_progress +### ✅ IC4 — 跨 agent 纸面编译:Codex 或 DSH 按指南对书签章编译确认卡(不粘贴) +- status: done - complexity: S - files: .blueprint/modules/intent-catalog.md - 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。" ### 📋 IC5 — 首次真实 /goal:为 Phase 4 的卡编译 → 人粘贴 → 收口回执 diff --git a/docs/ai-context/intent-catalog-guide.md b/docs/ai-context/intent-catalog-guide.md index c58f9b3..dcd3687 100644 --- a/docs/ai-context/intent-catalog-guide.md +++ b/docs/ai-context/intent-catalog-guide.md @@ -170,14 +170,20 @@ agent 不得自行延长预算。 - 要求 `git status --porcelain -- .blueprint/catalog.md` 输出为空:目录有未提交改动时不编译。 - 取 catalog blob:`git rev-parse --short HEAD:.blueprint/catalog.md`。 2. **读书签**:书签指向当前章(P8 期间指向 coordination §0 的终点)。读该章的导语和 rev。 -3. **校验**:跑「离线检查」一节的全部命令(Phase 4 后改为 `node .claude/hooks/intent-gate.cjs --report INT-NN --impact`)。只要出现悬空指针、stale 或 orphan、防膨胀超限,就先修或先提案,不往下编译。 +3. **校验**:跑「离线检查」一节的命令(Phase 4 后改为 `node .claude/hooks/intent-gate.cjs --report INT-NN --impact`)。 + - 机器检查(第 1–7、9–11 条)必须全部通过。 + - 第 8 条(钉版对照)和 `card:`、`#标题` 指针属于人工核对,核对结果写进确认卡;门控落地后改为全自动。 + - 只要出现悬空指针、stale 或 orphan、防膨胀超限,就先修或先提案,不往下编译。 4. **收卡** + - 检查各纳入卡的 depends,未满足的写进确认卡的「前置」行。只要有未满足的前置,就只能做纸面编译,不能粘贴执行。 + - depends 尽量写卡键或模块 id。像「P8 收口」这样的自然语言前置,要在确认卡里写明人工判定的结果。 - 取挂在本章、标题前缀为 📋 或 🔵 的卡。 - 没有可执行 agent_verify 的卡,列入「须先补 acceptance」,不进 goal。 5. **合成终点** - 取各卡 agent_verify 的合取,改写成在会话里能判定的形式:贴出命令和预期输出、纳入卡前缀都是 ✅、回执已写入。 - human_verify 不进终点,单列为终验待办。 - - 过程词黑名单命中数必须为 0:「按方针」「符合设计」「设计已完成」「基本完成」,以及任何无法从会话输出判定的形容词。 + - 过程词黑名单命中数必须为 0:「按方针」「符合设计」「设计已完成」「基本完成」「符合预期」,以及任何无法从会话输出判定的形容词。 + - 确认卡和 /goal 文本里的终点写法必须一致,都写「命令 → 预期输出」。不能 /goal 里写得精确,确认卡里却改写成「均符合预期」。 - **探索章**不编译「意图的终点」,只编译本轮试验的终点: - 做出可试用的 MVP 变体,写明最小动作和可演示方式; - 校验命令通过; @@ -203,6 +209,7 @@ agent 不得自行延长预算。 [INT-NN@X.Y#] 目标确认卡 项目: | 分支/worktree: @ | HEAD: 章意图: <一句> | 不做: <…> +前置: <各纳入卡的 depends 及是否满足;有未满足的,注明「仅纸面」> 形态: 定型 | 探索(第 k/N 轮;收敛信号: <…>) 纳入卡: <卡键>(来源 agent_verify 原文)、<卡键>(…) 终点(合取): 1) <命令> → <预期输出> 2) … 3) 纳入卡均 ✅ 且已写 Goal-Receipt @@ -234,13 +241,17 @@ Human-Pending: <待人终验项> 试用期的检查全部是 shell 单行命令,在仓库根目录执行。期望输出写在每条后面的注释里。 +- **没有 Bash 时**:命令按 POSIX shell(Git Bash)写成。部分客户端的沙箱里起不了 Bash,这时可以用语义等价的命令(PowerShell 等),并在确认卡的「没验什么」里注明用了哪种替代。 +- **一律逐行解析**:不要对整份文件跑一个正则,字符类会跨行吞掉换行符,把有效指针误报成悬空。 +- **只读演练不写盘**:所有检查都用管道或内存字符串完成,不创建临时文件。 + ```bash # 1. 版本行恰好一行 grep -c '^> catalog_version: ' .blueprint/catalog.md # → 1 # 2. 有效章数(墓碑不计) grep -cE '^## INT-[0-9]{2} ' .blueprint/catalog.md # → 章数 # 3. 体量 -wc -l < .blueprint/catalog.md; wc -c < .blueprint/catalog.md # → ≤200 行、≤8192 字节 +wc -l < .blueprint/catalog.md; git cat-file -s HEAD:.blueprint/catalog.md # → ≤200 行、≤8192 字节(量提交里的 blob;工作区可能是 CRLF,wc -c 会多算换行) # 4. 禁用键与模型名 grep -cE '^- (status|progress|doc|files|acceptance|model):' .blueprint/catalog.md # → 0 # 5. path 指针可解析(没有输出即通过) @@ -254,8 +265,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 # 9. 改模块 md 前后的任务卡计数应相等(新增卡时等于新增数),防止误写 ### cat .blueprint/modules/*.md | grep -c '^### ' -# 10. goal 文本的过程词黑名单(把 /goal 文本存成临时文件后检查) -grep -cE '按方针|符合设计|设计已完成|基本完成' # → 0 +# 10. 确认卡和 /goal 文本的过程词黑名单(用管道检查,不写临时文件) +printf '%s\n' "$GOAL_TEXT" | grep -cE '按方针|符合设计|设计已完成|基本完成|符合预期' # → 0 # 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 ```