@tea-agent/loop-agent 0.12.0 → 0.13.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/CHANGELOG.md +50 -2
  2. package/README.md +30 -2
  3. package/dist/application/dag/generate-task-dag.js +30 -0
  4. package/dist/cli/command-definitions.js +10 -3
  5. package/dist/commands/knowledge.js +129 -31
  6. package/dist/governance/manifest-types.js +3 -0
  7. package/dist/task/config-types.js +5 -1
  8. package/dist/worker/cli.js +96 -1
  9. package/dist/worker/delivery/package.js +3 -3
  10. package/dist/worker/feature/decision-loader.js +37 -6
  11. package/dist/worker/feature/next-action.js +10 -2
  12. package/dist/worker/feature/ready-plan-projection.js +81 -0
  13. package/dist/worker/feature/reducer.js +2 -1
  14. package/dist/worker/feature/review.js +19 -2
  15. package/dist/worker/feature/run.js +27 -2
  16. package/dist/worker/follow-up/approve.js +5 -2
  17. package/dist/worker/follow-up/factory.js +1 -1
  18. package/dist/worker/observability/read-model.js +246 -41
  19. package/dist/worker/observe/routes.js +158 -15
  20. package/dist/worker/observe/spec-evidence.js +281 -0
  21. package/dist/worker/observe/static/api.js +19 -0
  22. package/dist/worker/observe/static/app.js +2 -2
  23. package/dist/worker/observe/static/relations.js +17 -12
  24. package/dist/worker/observe/static/router.js +8 -0
  25. package/dist/worker/observe/static/styles.css +12 -0
  26. package/dist/worker/observe/static/views/batch.js +3 -2
  27. package/dist/worker/observe/static/views/dag-inspector.js +123 -4
  28. package/dist/worker/observe/static/views/dashboard.js +8 -5
  29. package/dist/worker/observe/static/views/feature.js +43 -4
  30. package/dist/worker/observe/static/views/pool.js +5 -2
  31. package/dist/worker/observe/static/views/run.js +1 -1
  32. package/dist/worker/observe/static/views/task.js +69 -15
  33. package/dist/worker/pool/doctor.js +165 -0
  34. package/dist/worker/pool/migrate-state.js +303 -0
  35. package/dist/worker/pool/run-store.js +205 -17
  36. package/dist/worker/pool/types.js +17 -1
  37. package/dist/worker/pool/validation.js +100 -15
  38. package/dist/worker/report/morning-report.js +12 -2
  39. package/dist/worker/runner/run-ready.js +41 -26
  40. package/dist/worker/task-graph/ready-planner.js +136 -0
  41. package/dist/workflows/dag/convergence/controller.js +16 -8
  42. package/dist/workflows/dag/failure-routing.js +12 -1
  43. package/dist/workflows/dag/init-hybrid.js +837 -8
  44. package/dist/workflows/dag/types.js +1 -0
  45. package/docs/README.md +1 -1
  46. package/docs/agent-dag-recovery-playbook.md +9 -0
  47. package/docs/architecture/evolution.md +4 -3
  48. package/docs/architecture/facts-and-state.md +14 -1
  49. package/docs/architecture/worker-and-feature.md +6 -2
  50. package/docs/decisions/README.md +3 -0
  51. package/docs/design/README.md +8 -0
  52. package/docs/exec-plans/active/README.md +2 -0
  53. package/docs/exec-plans/completed/README.md +3 -2
  54. package/docs/feature-workflow.md +80 -2
  55. package/docs/loop-agent-harness.md +15 -4
  56. package/docs/progress/README.md +4 -0
  57. package/docs/reports/README.md +6 -0
  58. package/docs/templates/backend-test-dag.json +12 -0
  59. package/docs/templates/knowledge-graph-bootstrap-dag.json +118 -0
  60. package/docs/templates/knowledge-sync-dag.json +177 -0
  61. package/docs/templates/knowledge-sync-draft.schema.json +71 -0
  62. package/docs/verification-matrix.md +2 -1
  63. package/package.json +8 -2
  64. package/scripts/kb-bootstrap-init-skeleton.sh +239 -0
  65. package/scripts/kb-graph-incremental-prepare.mjs +372 -0
  66. package/scripts/kb-graph-incremental-prepare.sh +5 -0
  67. package/scripts/kb-graph-materialize.mjs +105 -0
  68. package/scripts/kb-graph-materialize.sh +4 -0
  69. package/scripts/kb-graph-promote.mjs +153 -0
  70. package/scripts/kb-graph-promote.sh +4 -0
  71. package/scripts/kb-query.mjs +554 -0
  72. package/scripts/kb-query.sh +5 -0
  73. package/skills/agent-worker/SKILL.md +3 -1
  74. package/skills/agent-worker/references/agent-worker-operator.md +18 -1
  75. package/skills/frontend-design-review/SKILL.md +26 -24
  76. package/skills/frontend-implementation/SKILL.md +29 -26
  77. package/skills/frontend-implementation/references/node-contracts.md +50 -19
  78. package/skills/frontend-review/SKILL.md +1 -1
  79. package/skills/loop-agent/references/command-reference.md +1 -0
@@ -217,6 +217,7 @@ export const dagConvergenceSpecSchema = z
217
217
  stopOnVerdictPass: z.boolean().optional().default(true),
218
218
  stopOnHardVerifyPass: z.boolean().optional().default(true),
219
219
  pauseOnRegression: z.boolean().optional().default(true),
220
+ chainNodeIds: z.array(z.string()).optional(),
220
221
  })
221
222
  .optional();
222
223
  export const dagTaskSchema = z.object({
package/docs/README.md CHANGED
@@ -55,7 +55,7 @@
55
55
  - `exec-plans/completed/README.md` — 已完成的执行计划(全量)
56
56
  - `progress/README.md` — 进度交接日志(全量)
57
57
  - `reports/README.md` — 验证与审计报告(全量);活能力摘要见 `reports/current-capability-summary.md`
58
- - `decisions/README.md` — 架构决策(ADR 0001–0003
58
+ - `decisions/README.md` — 架构决策(ADR 0001–0004;0004 = Task Pool feature-scoped identity
59
59
  - `skills/README.md` — repo-local skill registry and vetting notes
60
60
  - `templates/` — 可复用的规划、报告与 DAG 模板
61
61
 
@@ -17,6 +17,15 @@ recommended_follow_up
17
17
 
18
18
  Product-line taxonomy 定义见 `docs/design/state-and-failure-taxonomy.md`。
19
19
 
20
+ ### 前端设计门禁专用恢复路径
21
+
22
+ 前端 DAG 的 design gate shell 失败(`frontend-first-design-gate-shell`、`frontend-final-design-gate-shell`、`frontend-design-gate-shell`)**不路由为 `ProductBug` / `dev-fix`**。此类失败固定路由为:
23
+
24
+ - `productLineFailureCategory`: `ContractMismatch`
25
+ - `recommendedFollowUp`: `frontend-plan-revision-and-rerun`
26
+
27
+ 恢复动作由 `planDagRecovery` 根据实际的 `normalizedFailureCategory` 和 run status 决定(通常为 `rerun-after-fix` 或 `manual-review`),但 product-line 维度的分类确保 Task Pool 和 morning report 不会将其混入普通 bug backlog。
28
+
20
29
  **非目标(本 playbook 不覆盖、runner 不实现):**
21
30
 
22
31
  - 自动 retry / resume 节点执行
@@ -1,6 +1,6 @@
1
1
  # 架构演进:当前 vs 未来
2
2
 
3
- 本页区分 loop-agent **当前已实现**的架构能力与**未来规划**。当前事实以代码、发布 CLI、已完成计划为准;未来能力一律标「规划 / 未实现 / 前瞻」。权威源:`CHANGELOG.md`、`docs/reports/current-capability-summary.md`、ADR 0001–0003、`docs/exec-plans/completed/`。
3
+ 本页区分 loop-agent **当前已实现**的架构能力与**未来规划**。当前事实以代码、发布 CLI、已完成计划为准;未来能力一律标「规划 / 未实现 / 前瞻」。权威源:`CHANGELOG.md`、`docs/reports/current-capability-summary.md`、ADR 0001–0004、`docs/exec-plans/completed/` 与 active identity plan 的 progress。
4
4
 
5
5
  ## 当前已实现(0.11.0)
6
6
 
@@ -11,8 +11,9 @@
11
11
  | Dynamic Workflow | `WorkflowSpec` → validate → compile → 同一 `run-dag`;agent-like 节点仅 `pi\|static` | `src/workflows/dynamic/{spec,validate,compile}.ts`、`website/docs/guides/dynamic-workflow.md` |
12
12
  | 版本化自举 | controller identity + run-owned skill snapshot + deterministic canary | `docs/reports/2026-07-13-versioned-self-hosting-bootstrap.md` |
13
13
  | Feature 交付(M2) | review/run/approve-followup/delivery/closeout/verify-final | `docs/reports/2026-07-12-m2-completion-audit.md` |
14
- | Task Pool | 唯一根 `.harness/task-pool/` | ADR 0002 |
15
- | Observe | 本地只读暖白运营控制台 R1–R5(derived) | `website/docs/guides/observe-ui.md`、`CHANGELOG.md [0.11.0]` |
14
+ | Task Pool | 唯一根 `.harness/task-pool/`;**feature-scoped** state v2(`TaskPoolTaskRef`) | ADR 0002、ADR 0004 |
15
+ | 本地多 Feature 运营 | 同仓库多 Feature 可共用 Task ID;Ready / retry / Delivery / Observe 按 Feature 隔离 | ADR 0004、`docs/progress/2026-07-15-task-pool-v2-feature-scoped-task-identity.md` |
16
+ | Observe | 本地只读暖白运营控制台 R1–R5(derived);canonical Task route 为 feature-scoped | `website/docs/guides/observe-ui.md`、`CHANGELOG.md [0.11.0]`、ADR 0004 |
16
17
  | DagSpec / repair | v3 + `runtimeContract`;显式 `repairNodeId` | `CHANGELOG.md [0.11.0]`、`dag-execution.md` |
17
18
  | 文档双树 | `website/docs/` 用法 vs `docs/` 治理;docs-converge | ADR 0003 |
18
19
  | 文档治理 | `docs/architecture/` 主题文档(本目录)+ package 可达 | 本目录 README |
@@ -10,7 +10,7 @@
10
10
  | DAG run | `.harness/dag-runs/{active,paused,completed}/<runId>/` | `src/workflows/dag/lifecycle.ts` `DAG_RUNS_DIR` | canonical,active/paused 可写;completed 受 guard |
11
11
  | one-shot run | `.harness/runs/{active,completed,failed}/<slug>/` | `src/infrastructure/harness/one-shot-run-store.ts`(逻辑封装见 `src/records/one-shot-runs.ts`) | canonical;active 可写,completed/failed 为终态事实 |
12
12
  | Loop | `.harness/tasks/<taskId>/loop/` | `src/workflows/loop/**` | canonical,**不是独立根**,是 task 之上的多轮状态机 |
13
- | Task Pool | `.harness/task-pool/`(唯一根) | `src/worker/pool/run-store.ts` `TASK_POOL_RELATIVE_ROOT`(ADR 0002) | canonical,可写(Worker 专用,可选) |
13
+ | Task Pool | `.harness/task-pool/`(唯一根;state v2 见下) | `src/worker/pool/run-store.ts` `TASK_POOL_RELATIVE_ROOT`(ADR 0002 / 0004) | canonical,可写(Worker 专用,可选) |
14
14
  | Observe snapshot | Worker 内存/HTTP 派生视图 | `src/worker/observability/read-model.ts` `buildGlobalSnapshot` | **derived**,advisory |
15
15
 
16
16
  ### 区分要点
@@ -19,8 +19,21 @@
19
19
  - **DAG run vs one-shot run**:DAG run 在 `.harness/dag-runs/`,有三态 lifecycle;one-shot run(当前主要由 `cursor-prompt` 及显式 one-shot evidence 路径产生)在 `.harness/runs/`,三态为 `active|completed|failed`。`pi-prompt` 当前不创建该目录下的 run evidence。两者是不同根、不同 schema。
20
20
  - **Loop 不是顶层根**:Loop 状态在 `.harness/tasks/<taskId>/loop/`,是 task 之上的多轮状态机(round、signal、context、failureStreak、closeout)。
21
21
  - **Task Pool 是 Worker 专用可选根**:只有使用 `agent-worker` 产品线时才存在;唯一根 `.harness/task-pool/`。
22
+ - **Task Pool state identity(ADR 0004)**:canonical 键为 `{ featureId, taskId }`(`TaskPoolTaskRef`),不是裸 `taskId`。
22
23
  - **Observe snapshot 不是事实源**:`buildGlobalSnapshot` 投影失败返回安全错误摘要而非全零健康,不改变执行成败。
23
24
 
25
+ ### Task Pool state 布局与迁移
26
+
27
+ | 路径 / 对象 | 性质 | 说明 |
28
+ | --- | --- | --- |
29
+ | `.harness/task-pool/states/<featureId>/<taskId>.json` | canonical 可写 | schema v2;路径解码 identity 必须与文件内容一致 |
30
+ | `.harness/task-pool/states/<taskId>.json`(扁平 v1) | legacy | 不得静默猜 Feature;存在时 v2 写入 fail-closed |
31
+ | `.harness/task-pool/runs.jsonl` / `events.jsonl` | canonical append-only | migration 不改写 JSONL;`workerRunId` 仍是执行历史键 |
32
+ | `agent-worker pool doctor` | 只读诊断 | inventory + mapping 证据;exit 0 可有 findings |
33
+ | `agent-worker pool migrate-state` | 显式迁移 | 默认 dry-run;`--apply --owner --reason` 才写入;失败全回滚 |
34
+
35
+ `readFeatureTaskPoolStates` / `listTaskPoolStates` 是 v2 列表入口;deprecated `readAllTaskPoolStates` 仅扫描 legacy 扁平 state,不合并 v2。
36
+
24
37
  ## canonical(可写)
25
38
 
26
39
  - `.harness/tasks/<taskId>/` — `getTaskDir`。
@@ -54,8 +54,12 @@ controller identity 与 DAG skill snapshot 是两个不同冻结层(前者跨
54
54
 
55
55
  - 唯一 runtime root:`src/worker/pool/run-store.ts`
56
56
  `TASK_POOL_RELATIVE_ROOT = ".harness/task-pool"`(ADR 0002)。
57
- - 旧顶层路径不读取、不迁移、不合并、不重映射。
58
- - batch/retry/morning report 等都基于此根。
57
+ - 此前的顶层 Task Pool 位置不读取、不迁移、不合并、不重映射。
58
+ - **Feature-scoped identity(ADR 0004)**:canonical Task 身份为复合键 `TaskPoolTaskRef = { featureId, taskId }`。`taskId` 仅 Feature 内唯一;同仓库多 Feature 可安全共用同名 Task ID。
59
+ - **State schema v2**:新 state 必须 `schemaVersion: 2` 且显式携带 `featureId` / `taskId`;canonical 路径为 `.harness/task-pool/states/<featureId>/<taskId>.json`。
60
+ - **Consumers**:runner Ready Queue、retry、Follow-up、Feature review、Delivery / Closeout、morning report / metrics 均按 Feature 作用域读写,不得把裸 `taskId` 当作仓库全局唯一键。
61
+ - **Operator**:`pool doctor` 只读 inventory;`pool migrate-state` 默认 dry-run,apply 需 `--owner` + `--reason`;legacy v1 写入路径 fail-closed。
62
+ - batch / retry / morning report 等都基于此根。
59
63
 
60
64
  ### Feature(M2 交付闭环)
61
65
 
@@ -9,6 +9,9 @@
9
9
  | [`0001-pi-only-agent-runtime.md`](0001-pi-only-agent-runtime.md) | accepted | 受治理 Agent 仅 Pi;`cursor-prompt` 为显式 sidecar |
10
10
  | [`0002-task-pool-runtime-root.md`](0002-task-pool-runtime-root.md) | accepted | Task Pool 唯一根 `.harness/task-pool/`,旧 `.task-pool/` 不兼容 |
11
11
  | [`0003-docs-dual-tree-converge.md`](0003-docs-dual-tree-converge.md) | accepted | `website/docs/` 用法 vs `docs/` 治理;docs-converge 检查表 |
12
+ | [`0004-task-pool-feature-scoped-task-identity.md`](0004-task-pool-feature-scoped-task-identity.md) | accepted | Task Pool 复合身份 `{featureId,taskId}`、state v2、legacy fail-closed、Observe composite route |
13
+
14
+ **读者注意(M4)**:ADR 0004 **决策边界**仍有效;正文中「M2+ 未改 consumers/Observe」段落是 M0/M1 当时的切片叙述,现已过时。实现进度以 `docs/progress/2026-07-15-task-pool-v2-feature-scoped-task-identity.md`、最终报告 `docs/reports/2026-07-15-task-pool-v2-feature-scoped-task-identity.md` 与 `CHANGELOG.md [Unreleased]` 为准。本任务 **不修改** ADR 0004 正文(不在 closeout allowedPaths)。
12
15
 
13
16
  新增跨版本架构取舍时:用模板新增 `NNNN-title.md`,并更新本表。不要把 ADR 正文复制进 `website/docs/`。
14
17
 
@@ -10,6 +10,14 @@
10
10
  | `taskspec-to-loop-agent-mapping.yaml` | 同上契约的结构化对照表 |
11
11
  | `state-and-failure-taxonomy.md` | 文档、Task Pool、DAG、Loop 共用的 canonical status 与 failure taxonomy |
12
12
  | `frontend-implementation-workflow.md` | 前端 DAG 实现 / 评审 / 验证工作流与证据约定 |
13
+ | `full-chain-test-knowledge-base.md` | 全流程测试知识库分层、目录、对象模型、与 backend-test-dag / Feature QA 的读写映射 |
14
+ | `full-chain-testing-system-redesign.md` | **综合重设计**:知识库权威层 + I/T/V/K 四类 DAG + knowledge-sync v2 硬化与迁移 |
15
+ | `testing-knowledge-base-impl-spec.md` | **知识库实现细节 v1(先冻结)**:目录、schema、ID、读写矩阵、校验规则、MVP 清单 |
16
+ | `knowledge-graph-and-query-spec.md` | **业务知识图谱 + 查询协议 v1**:实体/边、knowledge-links、kb-query 分层、索引 materialize |
17
+ | `knowledge-graph-ai-bootstrap.md` | **AI 构建图谱 + 初始化 B0–B6**:staging 提案、人审晋升、bootstrap DAG、增量更新 |
18
+ | `verification-subdag-plugin.md` | 独立测试全流程 Verification DAG 与三种实现 DAG 的 compose 设计(若分支存在) |
19
+
20
+ **执行 Contract(进行中):** `docs/exec-plans/active/2026-07-14-knowledge-sync-and-graph.md` · PRD/issues:`.scratch/knowledge-sync-and-graph/` |
13
21
 
14
22
  ## 路线与产品线笔记(非实现证明)
15
23
 
@@ -6,4 +6,6 @@
6
6
 
7
7
  当前 active execution plan:
8
8
 
9
+ - [`2026-07-14-knowledge-sync-and-graph.md`](2026-07-14-knowledge-sync-and-graph.md) — 知识库同步 DAG(测试结论/用例/缺陷写回)+ 业务知识图谱开荒与持续更新;Contract:`.scratch/knowledge-sync-and-graph/PRD.md`
10
+
9
11
  - 已归档:`../completed/2026-07-15-repair-artifact-gate-runtime-contract.md`、`../completed/2026-07-14-observe-ui-r5.md`、`../completed/2026-07-14-observe-ui-r4.md`、`../completed/2026-07-14-observe-ui-r3.md`、`../completed/2026-07-14-observe-ui-r2.md`、`../completed/2026-07-14-observe-ui-r1.md`、`../completed/2026-07-14-init-canonical-layout.md`、`../completed/2026-07-12-observe-warm-console-redesign.md`、`../completed/2026-07-14-website-docs-ia-and-converge.md`、`../completed/2026-07-13-versioned-self-hosting-bootstrap.md`、`../completed/2026-07-12-pi-only-agent-runtime.md`、第二月 M2-01~M2-08、`../completed/2026-07-11-observe-dashboard-page-system.md`、`../completed/2026-07-11-observe-dashboard-detail-refinement.md`、`../completed/2026-07-11-observe-terminal-dag-kpi.md`、`../completed/2026-07-11-observe-polling-efficiency.md`、`../completed/2026-07-11-command-performance-guardrails.md` 及更早计划。
@@ -68,6 +68,7 @@ npm 包携带本 README 作为目录契约。具体 completed plan 属于目标
68
68
 
69
69
  - [`2026-07-13-exec-plan-lifecycle.md`](2026-07-13-exec-plan-lifecycle.md)
70
70
 
71
- - [`2026-07-15-readonly-node-retry.md`](2026-07-15-readonly-node-retry.md)
72
-
71
+ - [`2026-07-15-task-pool-priority-aware-ready-planner.md`](2026-07-15-task-pool-priority-aware-ready-planner.md)
72
+ - [`2026-07-15-task-pool-v2-feature-scoped-task-identity.md`](2026-07-15-task-pool-v2-feature-scoped-task-identity.md)
73
73
  - [`2026-07-15-init-update-surface-coverage.md`](2026-07-15-init-update-surface-coverage.md)
74
+ - [`2026-07-15-readonly-node-retry.md`](2026-07-15-readonly-node-retry.md)
@@ -111,7 +111,10 @@ frontend-contract-pi
111
111
  -> frontend-scout-pi
112
112
  -> frontend-plan-pi
113
113
  -> frontend-design-gate-pi
114
- -> frontend-design-gate-shell
114
+ -> frontend-first-design-gate-shell
115
+ -> frontend-plan-revision-pi
116
+ -> frontend-final-design-review-pi
117
+ -> frontend-final-design-gate-shell
115
118
  -> frontend-implement-pi
116
119
  -> frontend-static-verify-shell
117
120
  -> frontend-behavior-verify-shell
@@ -120,7 +123,9 @@ frontend-contract-pi
120
123
  -> frontend-closeout-pi
121
124
  ```
122
125
 
123
- 这条链在实现前加入 design gate,并将前端静态验证与行为验证分开建模;当前 MVP 不包含独立 a11y、视觉回归或浏览器自动化 executor。
126
+ 这条链在实现前加入两阶段 design gate:首轮 design review 同时接受 `VERDICT: pass` 和 `VERDICT: request-revision`,request-revision 时由只读 `frontend-plan-revision-pi` 消费原计划与 design findings 完成修订,再经 `frontend-final-design-review-pi` 和 `frontend-final-design-gate-shell` 最终门禁;只有最终 `VERDICT: pass` 才授权写入。design gate 失败路由为 `ContractMismatch` / `frontend-plan-revision-and-rerun`,不路由为 `ProductBug` / `dev-fix`。
127
+
128
+ 这条链还将前端静态验证与行为验证分开建模;当前 MVP 不包含独立 a11y、视觉回归或浏览器自动化 executor。
124
129
 
125
130
  后端测试任务可通过 `task.json.taskKind = "backend-test"` 选择专用模板;它不新增 governance profile:
126
131
 
@@ -144,6 +149,79 @@ analyze-inputs-pi
144
149
  6. **execute-backend-pytest-shell**:执行 `pytest testcase/` 并生成 HTML 报告
145
150
  7. **test-retrospect-pi**:读取上游审查报告和测试报告,生成复盘报告 + 成熟度评级(A/B/C/D)
146
151
 
152
+ 最终验证后的知识库回写可通过 `task.json.taskKind = "knowledge-sync"` 选择专用模板(与 `backend-test` 一样走 taskKind 路由,不占用 governance `--profile`)。
153
+
154
+ **必须绑定 `featureId`**(fail-closed)。解析顺序:`task.json.featureId` → `hardConstraints` 中 `featureId=F-…` → 需求正文中的 `F-YYYY-NNN` → 若 `taskId` 本身是 `F-*`。生成器会把 writeSet 收窄到 `features/<featureId>/…`,validate 只检查该 Feature 下的 draft。
155
+
156
+ ```json
157
+ {
158
+ "taskKind": "knowledge-sync",
159
+ "featureId": "F-2026-004"
160
+ }
161
+ ```
162
+
163
+ ```text
164
+ knowledge-sync-collect-pi
165
+ -> knowledge-sync-draft-pi
166
+ -> knowledge-sync-validate-shell
167
+ -> knowledge-sync-apply-pi
168
+ -> knowledge-sync-pointer-pi
169
+ ```
170
+
171
+ 这条链在 shell 最终验证证据之后,把稳定事实写入 Feature 测试知识库(L1),而不是把 `.harness` 大日志搬进 docs:
172
+
173
+ 1. **knowledge-sync-collect-pi**:只读汇总 final verification / AC / 用例 / 缺陷 / 需求 delta 候选
174
+ 2. **knowledge-sync-draft-pi**:写入 `features/<featureId>/testing/sync/pending/knowledge-sync-draft.json`
175
+ 3. **knowledge-sync-validate-shell**:校验该路径 draft 的 schema、`featureId` 一致、operations 目标路径、finalVerification 门禁
176
+ 4. **knowledge-sync-apply-pi**:仅在 `features/<featureId>/testing/**`(及该 Feature 的 `requirement-delta.md`、`docs/test-reports/**`)受控回写
177
+ 5. **knowledge-sync-pointer-pi**:写 `features/<featureId>/testing/runs/latest.md` 与 `sync/applied/KS-*.json`
178
+
179
+ 设计说明见 `docs/design/full-chain-test-knowledge-base.md` §11;JSON 示例见 `docs/templates/knowledge-sync-dag.json`。
180
+
181
+ 业务知识图谱**初始化**可通过 `task.json.taskKind = "knowledge-graph-bootstrap"` 选择专用模板。跑前先落 B1 骨架:
182
+
183
+ ```bash
184
+ bash scripts/kb-bootstrap-init-skeleton.sh --root .
185
+ # 编辑 knowledge/bootstrap/scope.yaml 后再 run-task
186
+ ```
187
+
188
+ (需有 `knowledge/bootstrap/scope.yaml` 与 `status.yaml`;脚本幂等,默认不覆盖已有 scope/status,可用 `--force`。)
189
+
190
+ 图谱索引与 Phase A 查询(脚本,非 RAG):
191
+
192
+ ```bash
193
+ bash scripts/kb-graph-materialize.sh --root .
194
+ bash scripts/kb-query.sh --mode by_feature --feature F-2026-004 --json
195
+ bash scripts/kb-query.sh --mode by_id --id SVC-order --json
196
+ bash scripts/kb-query.sh --mode search --text "预占" --json
197
+ ```
198
+
199
+ **增量更新(非全量开荒)**:缩小 scope 后复用同一 `knowledge-graph-bootstrap` DAG(propose 仅针对 seeds/includes;promote 仍默认不覆盖已有正式文件):
200
+
201
+ ```bash
202
+ bash scripts/kb-graph-incremental-prepare.sh --root . \
203
+ --feature F-2026-004 --service order [--reset-staging]
204
+ # 审阅 knowledge/bootstrap/scope.yaml(update_mode: incremental)
205
+ # task.json.taskKind = "knowledge-graph-bootstrap"
206
+ loop-agent dag run-task <id>
207
+ bash scripts/kb-graph-materialize.sh --root .
208
+ ```
209
+
210
+ 测试知识日常写回仍用 `knowledge-sync`(`featureId` 必填),与图谱增量入口分离。
211
+
212
+ ```text
213
+ kg-bootstrap-preflight-shell
214
+ -> kg-bootstrap-inventory-shell
215
+ -> kg-bootstrap-propose-pi
216
+ -> kg-bootstrap-validate-shell
217
+ -> kg-bootstrap-review-pi
218
+ -> kg-bootstrap-review-gate-shell
219
+ -> kg-bootstrap-promote-shell
220
+ -> kg-bootstrap-materialize-shell
221
+ ```
222
+
223
+ AI 只写 `knowledge/bootstrap/staging/**`;禁止 self-`asserted`;review-gate 通过后 promote 仅合并新文件;materialize 写 `knowledge/graph/` 索引。设计见 `docs/design/knowledge-graph-ai-bootstrap.md`,示意 JSON 见 `docs/templates/knowledge-graph-bootstrap-dag.json`。
224
+
147
225
  前端测试模板(`frontend-test-dag`)后续沿用对称命名即可接入。
148
226
  前端 shell 验证优先使用任务源 `需求.md` / `执行约束.md` 中声明的前端验证命令,例如 `npm run typecheck`、`npm run build`、`npm test`;解析不到时再使用 adapter 验证命令和模板 fallback。
149
227
 
@@ -10,6 +10,7 @@ loop-agent 提供结构化 agent 工作的本地 harness。
10
10
  - `.harness/cache/` — 本地 runtime 缓存
11
11
  - `.harness/live/` — 瞬态 live-session 文件
12
12
  - `.harness/task-pool/` — `agent-worker` 的 Task Pool state、batch artifacts、failure handoffs 与 Observe events;它是 `.harness/` 内的独立 Worker runtime root,默认不提交
13
+ - `.harness/task-pool/states/<featureId>/<taskId>.json` — Task Pool schema v2 的 canonical state(ADR 0004);复合身份 `TaskPoolTaskRef = { featureId, taskId }`。扁平 `states/<taskId>.json` 为 legacy,不得静默解释
13
14
  - `.harness/dag-runs/<lifecycle>/<run-id>/.runtime/skill-snapshot.json` — 该 run 实际使用的 resolved skill profile snapshot;由 state 中相对 ref 与原始 bytes SHA-256 锚定,随 lifecycle 目录整体迁移
14
15
 
15
16
  ## Skill 指令
@@ -71,7 +72,7 @@ DAG agent 节点的输出语言由 `harness.json.workflowPolicy.dag.outputLangua
71
72
  - `loop init`、`loop run`、`loop status`、`loop closeout`
72
73
  - `pi-prompt`、`cursor-prompt`
73
74
  - `handoff check`、`spine audit`、`knowledge curate`
74
- - `agent-worker feature review|run|verify-final|delivery|closeout|approve-followup`、`agent-worker task validate|explain-profile|retry|draft-followup`、`agent-worker batch run-ready`、`agent-worker report morning|metrics`、`agent-worker observe serve|snapshot`
75
+ - `agent-worker feature review|run|verify-final|delivery|closeout|approve-followup`、`agent-worker task validate|explain-profile|retry|draft-followup`、`agent-worker batch run-ready`、`agent-worker pool doctor|migrate-state`、`agent-worker report morning|metrics`、`agent-worker observe serve|snapshot`
75
76
 
76
77
  `dag run-task` 在生成 DAG 草稿前会运行与 `plan check` 同源的 exec-plan 索引校验;active plan 与 `docs/exec-plans/active/README.md` 索引不一致时立即失败,避免运行昂贵节点后才在末端 shell verify 发现。`plan create` 优先复用目标项目模板并回退到发布包内置 `docs/templates/exec-plan.md`,`plan create`/`plan complete` 的多文件写入均有回滚保护;`new-task` 不自动绑定 exec-plan。
77
78
 
@@ -112,14 +113,24 @@ canary 会记录 tarball SHA-256、slot containment、两个 bin identity、由
112
113
 
113
114
  ## Worker Retry
114
115
 
115
- 失败 Task Pool task 必须显式 retry,不能删除 `.harness/task-pool/runs.jsonl` 或复用失败的 `workerRunId`:
116
+ 失败 Task Pool task 必须显式 retry,不能删除 `.harness/task-pool/runs.jsonl` 或复用失败的 `workerRunId`。canonical 命令必须携带 Feature:
116
117
 
117
118
  ```bash
118
- agent-worker task retry <task-id> --repo <target-repo> --reason "provider configuration corrected"
119
+ agent-worker task retry <task-id> --feature-id <feature-id> --repo <target-repo> --reason "provider configuration corrected"
119
120
  agent-worker batch run-ready --feature-dir <feature-dir> --repo <target-repo>
120
121
  ```
121
122
 
122
- `task retry` 只接受 `Failed` state,保留旧 run 和 failure handoff,并写入 `retryOfWorkerRunId`。下一次 `run-ready` 生成新的 `workerRunId`;`Blocked`、`Done` 或无 state 的 task 必须先由 operator 处理根因,不能盲目重试。
123
+ `task retry` 只接受指定 Feature 下的 `Failed` state,保留旧 run 和 failure handoff,并写入 `retryOfWorkerRunId`。跨 Feature 同名 Task 时省略 `--feature-id` 必须 fail-closed。下一次 `run-ready` 生成新的 `workerRunId`;`Blocked`、`Done` 或无 state 的 task 必须先由 operator 处理根因,不能盲目重试。
124
+
125
+ ## Task Pool Doctor 与 State 迁移
126
+
127
+ ```bash
128
+ agent-worker pool doctor --repo <target-repo> --json
129
+ agent-worker pool migrate-state --repo <target-repo> # dry-run 默认
130
+ agent-worker pool migrate-state --repo <target-repo> --apply --owner <owner> --reason <reason>
131
+ ```
132
+
133
+ `pool doctor` 只读扫描 v2 / legacy inventory 与映射证据,exit 0 也可带 findings。`pool migrate-state` 默认零写入;apply 需要 `--owner` 与 `--reason`,保留 bytes/hash 审计 artifact,失败全回滚,且不改写 `runs.jsonl` / `events.jsonl`。
123
134
 
124
135
  ## 验证 Preset
125
136
 
@@ -6,6 +6,8 @@
6
6
 
7
7
  ## 近期要点(导读)
8
8
 
9
+ - [`2026-07-16-ready-planner.md`](2026-07-16-ready-planner.md) — Priority-aware Ready Planner:M1 core + RP-02 Feature/report/Observe 同源投影(已验证)
10
+ - [`2026-07-15-task-pool-v2-feature-scoped-task-identity.md`](2026-07-15-task-pool-v2-feature-scoped-task-identity.md) — Task Pool v2 复合身份:M1 store + M2 consumers + M3 Observe + M4 文档收口(已归档 completed)
9
11
  - [`2026-07-15-init-update-surface-coverage.md`](2026-07-15-init-update-surface-coverage.md) — 修复初始化 surface 升级漏检(自动发现 copied 文件、blockedTargetPaths fail-safe、drift gate)实施交接(已验证)
10
12
  - [`2026-07-15-readonly-node-retry.md`](2026-07-15-readonly-node-retry.md) — 只读 Pi DAG 节点安全重试(默认策略、attempt 证据、validation 门禁)实施交接(已验证)
11
13
  - [`2026-07-15-repair-artifact-gate-runtime-contract-implementation.md`](2026-07-15-repair-artifact-gate-runtime-contract-implementation.md) — 显式 repairNodeId、runtime contract preflight 与 run-owned controller identity 实施交接(已验证)
@@ -27,6 +29,8 @@
27
29
 
28
30
  ## 全量列表(新→旧)
29
31
 
32
+ - [`2026-07-16-ready-planner.md`](2026-07-16-ready-planner.md)
33
+ - [`2026-07-15-task-pool-v2-feature-scoped-task-identity.md`](2026-07-15-task-pool-v2-feature-scoped-task-identity.md)
30
34
  - [`2026-07-15-init-update-surface-coverage.md`](2026-07-15-init-update-surface-coverage.md)
31
35
  - [`2026-07-15-readonly-node-retry.md`](2026-07-15-readonly-node-retry.md)
32
36
  - [`2026-07-15-repair-artifact-gate-runtime-contract-implementation.md`](2026-07-15-repair-artifact-gate-runtime-contract-implementation.md)
@@ -13,6 +13,9 @@
13
13
  ## 近期要点(导读,非权威全集)
14
14
 
15
15
  - [`current-capability-summary.md`](current-capability-summary.md) — **活**能力摘要(新进展写这里 / CHANGELOG / 新 report)
16
+ - [`2026-07-16-task-pool-priority-aware-ready-planner.md`](2026-07-16-task-pool-priority-aware-ready-planner.md) — Priority-aware Ready Planner 关闭报告
17
+ - [`2026-07-15-task-pool-v2-feature-scoped-task-identity.md`](2026-07-15-task-pool-v2-feature-scoped-task-identity.md) — Task Pool v2 复合身份 M0–M4 最终报告
18
+ - [`2026-07-15-task-pool-v2-init-evolution-review.md`](2026-07-15-task-pool-v2-init-evolution-review.md) — Task Pool v2 文档变更的 init surface 非影响审查
16
19
  - [`2026-07-15-init-update-surface-coverage-init-evolution-review.md`](2026-07-15-init-update-surface-coverage-init-evolution-review.md) — 初始化 surface 升级漏检修复的 init surface 审查(init update required)
17
20
  - [`2026-07-15-readonly-node-retry-init-evolution-review.md`](2026-07-15-readonly-node-retry-init-evolution-review.md) — 只读 Pi DAG 节点安全重试的 init surface 审查(surface check only,无需 init evolution)
18
21
  - [`2026-07-15-backend-test-dag-init-evolution-review.md`](2026-07-15-backend-test-dag-init-evolution-review.md) — 后端测试专用 DAG 的 package/init surface 审查
@@ -28,6 +31,9 @@
28
31
 
29
32
  ## 全量列表(新→旧)
30
33
 
34
+ - [`2026-07-16-task-pool-priority-aware-ready-planner.md`](2026-07-16-task-pool-priority-aware-ready-planner.md)
35
+ - [`2026-07-15-task-pool-v2-feature-scoped-task-identity.md`](2026-07-15-task-pool-v2-feature-scoped-task-identity.md)
36
+ - [`2026-07-15-task-pool-v2-init-evolution-review.md`](2026-07-15-task-pool-v2-init-evolution-review.md)
31
37
  - [`2026-07-15-init-update-surface-coverage-init-evolution-review.md`](2026-07-15-init-update-surface-coverage-init-evolution-review.md)
32
38
  - [`2026-07-15-readonly-node-retry-init-evolution-review.md`](2026-07-15-readonly-node-retry-init-evolution-review.md)
33
39
  - [`2026-07-15-backend-test-dag-init-evolution-review.md`](2026-07-15-backend-test-dag-init-evolution-review.md)
@@ -37,6 +37,18 @@
37
37
  "Actual file operation paths must be macOS/Windows compatible; use / only for stable repo refs, JSON/Markdown evidence refs, and glob conventions.",
38
38
  "Same-rank exclusive writeSet entries must be disjoint."
39
39
  ],
40
+ "convergence": {
41
+ "enabled": true,
42
+ "maxPasses": 3,
43
+ "stopOnVerdictPass": true,
44
+ "stopOnHardVerifyPass": true,
45
+ "pauseOnRegression": true,
46
+ "chainNodeIds": [
47
+ "generate-backend-functional-cases-pi",
48
+ "review-backend-cases-pi",
49
+ "review-backend-cases-gate-shell"
50
+ ]
51
+ },
40
52
  "defaults": {
41
53
  "executor": "pi",
42
54
  "contextProfile": "slim",
@@ -0,0 +1,118 @@
1
+ {
2
+ "$schema": "./agent-dag.schema.json",
3
+ "version": 2,
4
+ "title": "Knowledge-graph bootstrap DAG template",
5
+ "objective": "AI-assisted business knowledge graph initialization: inventory repo signals, propose entities/edges under staging only, validate, review-gate, promote without overwrite, materialize query indexes.",
6
+ "successCriteria": [
7
+ "preflight requires knowledge/bootstrap/scope.yaml and status.yaml",
8
+ "inventory writes knowledge/bootstrap/inventory.json",
9
+ "propose-pi writes only knowledge/bootstrap/staging/** with evidence and non-asserted confidence",
10
+ "validate-shell fails on empty staging, missing edges.proposed/coverage-notes, or self-asserted confidence",
11
+ "review-gate blocks promote unless VERDICT: pass",
12
+ "promote merges new formal files only (no overwrite)",
13
+ "materialize writes knowledge/graph/entities-index.yaml and edges.yaml"
14
+ ],
15
+ "globalConstraints": [
16
+ "AI must never set confidence: asserted.",
17
+ "Do not modify src/** or Feature testing verdict/cases via bootstrap.",
18
+ "Promote must not overwrite existing formal knowledge files.",
19
+ "Complete B0/B1 skeleton before running this DAG."
20
+ ],
21
+ "defaults": {
22
+ "executor": "shell",
23
+ "contextProfile": "slim",
24
+ "writePolicy": "read-only"
25
+ },
26
+ "tasks": [
27
+ {
28
+ "id": "kg-bootstrap-preflight-shell",
29
+ "depends_on": [],
30
+ "role": "verifier",
31
+ "executor": "shell",
32
+ "complexity": "LOW",
33
+ "writePolicy": "read-only",
34
+ "subtask_prompt": "Require bootstrap skeleton."
35
+ },
36
+ {
37
+ "id": "kg-bootstrap-inventory-shell",
38
+ "depends_on": ["kg-bootstrap-preflight-shell"],
39
+ "role": "verifier",
40
+ "executor": "shell",
41
+ "complexity": "LOW",
42
+ "writePolicy": "exclusive",
43
+ "writeSet": ["knowledge/bootstrap/inventory.json"],
44
+ "subtask_prompt": "B2 inventory."
45
+ },
46
+ {
47
+ "id": "kg-bootstrap-propose-pi",
48
+ "depends_on": ["kg-bootstrap-inventory-shell"],
49
+ "role": "implementer",
50
+ "executor": "pi",
51
+ "toolProfile": "write",
52
+ "complexity": "HIGH",
53
+ "writePolicy": "exclusive",
54
+ "writeSet": [
55
+ "knowledge/bootstrap/staging/**",
56
+ "knowledge/bootstrap/runs/**"
57
+ ],
58
+ "subtask_prompt": "B3 AI proposals in staging only; never asserted."
59
+ },
60
+ {
61
+ "id": "kg-bootstrap-validate-shell",
62
+ "depends_on": ["kg-bootstrap-propose-pi"],
63
+ "role": "verifier",
64
+ "executor": "shell",
65
+ "complexity": "LOW",
66
+ "writePolicy": "read-only",
67
+ "subtask_prompt": "B4 validate staging."
68
+ },
69
+ {
70
+ "id": "kg-bootstrap-review-pi",
71
+ "depends_on": ["kg-bootstrap-validate-shell"],
72
+ "role": "reviewer",
73
+ "executor": "pi",
74
+ "complexity": "HIGH",
75
+ "writePolicy": "read-only",
76
+ "outputContract": "First line VERDICT: pass or VERDICT: request-revision.",
77
+ "subtask_prompt": "Review staging quality."
78
+ },
79
+ {
80
+ "id": "kg-bootstrap-review-gate-shell",
81
+ "depends_on": ["kg-bootstrap-review-pi"],
82
+ "role": "verifier",
83
+ "executor": "shell",
84
+ "complexity": "LOW",
85
+ "writePolicy": "read-only",
86
+ "subtask_prompt": "Gate on VERDICT: pass."
87
+ },
88
+ {
89
+ "id": "kg-bootstrap-promote-shell",
90
+ "depends_on": ["kg-bootstrap-review-gate-shell"],
91
+ "role": "verifier",
92
+ "executor": "shell",
93
+ "complexity": "LOW",
94
+ "writePolicy": "exclusive",
95
+ "writeSet": [
96
+ "knowledge/domains/**",
97
+ "knowledge/services/**",
98
+ "knowledge/modules/**",
99
+ "knowledge/graph/edges.manual.yaml",
100
+ "features/**/knowledge-links.yaml"
101
+ ],
102
+ "subtask_prompt": "B5 promote new files only."
103
+ },
104
+ {
105
+ "id": "kg-bootstrap-materialize-shell",
106
+ "depends_on": ["kg-bootstrap-promote-shell"],
107
+ "role": "closeout",
108
+ "executor": "shell",
109
+ "complexity": "LOW",
110
+ "writePolicy": "exclusive",
111
+ "writeSet": [
112
+ "knowledge/graph/entities-index.yaml",
113
+ "knowledge/graph/edges.yaml"
114
+ ],
115
+ "subtask_prompt": "B6 materialize indexes."
116
+ }
117
+ ]
118
+ }