@tea-agent/loop-agent 0.13.0-alpha.0 → 0.13.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.
- package/AGENTS.md +4 -0
- package/CHANGELOG.md +57 -53
- package/README.md +12 -3
- package/dist/application/dag/generate-task-dag.js +28 -58
- package/dist/application/evaluation/candidate-hash.js +75 -0
- package/dist/application/evaluation/candidate.js +52 -0
- package/dist/application/evaluation/replay.js +289 -0
- package/dist/application/evaluation/types.js +130 -0
- package/dist/cli/command-definitions.js +17 -4
- package/dist/cli/program.js +8 -4
- package/dist/commands/eval.js +235 -0
- package/dist/commands/init.js +131 -24
- package/dist/executors/pi-sdk-executor.js +38 -24
- package/dist/executors/shell-executor.js +226 -15
- package/dist/executors/shell-presets.js +20 -0
- package/dist/executors/shell-verification.js +7 -0
- package/dist/governance/manifest-types.js +1 -0
- package/dist/infrastructure/evaluation/candidate-store.js +439 -0
- package/dist/infrastructure/evaluation/store.js +40 -0
- package/dist/task/config-types.js +23 -0
- package/dist/worker/observe/routes.js +18 -3
- package/dist/worker/observe/spec-evidence.js +1 -1
- package/dist/worker/observe/static/dom.js +160 -1
- package/dist/worker/observe/static/state.js +14 -0
- package/dist/worker/observe/static/views/dag-inspector.js +35 -4
- package/dist/worker/observe/static/views/dag.js +9 -0
- package/dist/worker/observe/static/views/dashboard.js +702 -445
- package/dist/worker/observe/static/views/session-timeline.js +15 -1
- package/dist/workflows/dag/backend-test-analysis-contract.js +120 -0
- package/dist/workflows/dag/backend-test-case-manifest.js +503 -0
- package/dist/workflows/dag/backend-test-execution-contract.js +353 -0
- package/dist/workflows/dag/backend-test-result-contract.js +568 -0
- package/dist/workflows/dag/decision-envelope.js +57 -2
- package/dist/workflows/dag/dynamic-runtime/map.js +90 -2
- package/dist/workflows/dag/frontend-implementation-contract.js +240 -0
- package/dist/workflows/dag/frontend-project-capability.js +309 -0
- package/dist/workflows/dag/frontend-repair.js +341 -0
- package/dist/workflows/dag/frontend-risk.js +161 -0
- package/dist/workflows/dag/frontend-verification-trace.js +190 -0
- package/dist/workflows/dag/init-hybrid.js +2407 -297
- package/dist/workflows/dag/node-execution.js +9 -0
- package/dist/workflows/dag/prompt.js +9 -0
- package/dist/workflows/dag/repair-artifact.js +43 -3
- package/dist/workflows/dag/report.js +35 -1
- package/dist/workflows/dag/runner.js +28 -2
- package/dist/workflows/dag/skill-instructions.js +4 -2
- package/dist/workflows/dag/task-demand-routing.js +383 -0
- package/dist/workflows/dag/types.js +71 -13
- package/dist/workflows/dag/upstream-artifacts.js +1 -0
- package/dist/workflows/dag/validate.js +59 -1
- package/docs/README.md +6 -3
- package/docs/agent-dag-recovery-playbook.md +5 -3
- package/docs/agent-dag-runner.md +3 -3
- package/docs/architecture/README.md +3 -3
- package/docs/architecture/dag-execution.md +1 -1
- package/docs/architecture/evolution.md +13 -13
- package/docs/architecture/facts-and-state.md +1 -1
- package/docs/architecture/runtime-boundaries.md +7 -7
- package/docs/architecture/system-overview.md +3 -3
- package/docs/architecture/worker-and-feature.md +3 -3
- package/docs/design/README.md +124 -42
- package/docs/development-principles.md +4 -4
- package/docs/exec-plans/active/README.md +12 -11
- package/docs/exec-plans/completed/README.md +33 -0
- package/docs/feature-workflow.md +114 -39
- package/docs/init-surface.manifest.json +30 -3
- package/docs/loop-agent-harness.md +9 -8
- package/docs/production-readiness.md +1 -1
- package/docs/progress/README.md +23 -1
- package/docs/reports/README.md +65 -6
- package/docs/skills/vetted-skill-registry.md +2 -0
- package/docs/templates/agent-dag.schema.json +29 -1
- package/docs/templates/agent-dag.supervised-implementation.json +127 -8
- package/docs/templates/backend-test-analysis.schema.json +44 -0
- package/docs/templates/backend-test-case-manifest.schema.json +190 -0
- package/docs/templates/backend-test-dag.classify.prompt.md +75 -0
- package/docs/templates/backend-test-dag.generate-pytest.prompt.md +81 -16
- package/docs/templates/backend-test-dag.json +311 -40
- package/docs/templates/backend-test-dag.retrospect.prompt.md +44 -30
- package/docs/templates/backend-test-dag.review-cases.prompt.md +10 -8
- package/docs/templates/backend-test-execution.schema.json +133 -0
- package/docs/templates/backend-test-result.schema.json +99 -0
- package/docs/templates/branch-merge-report.md +93 -0
- package/docs/templates/frontend-design-contract.md +9 -0
- package/docs/templates/frontend-eval/fixtures/failures/01-type-build-error.md +17 -0
- package/docs/templates/frontend-eval/fixtures/failures/02-unit-component-test-fail.md +16 -0
- package/docs/templates/frontend-eval/fixtures/failures/03-fixture-schema-drift.md +16 -0
- package/docs/templates/frontend-eval/fixtures/failures/04-missing-loading-empty-error-state.md +16 -0
- package/docs/templates/frontend-eval/fixtures/failures/05-forbidden-write-writeset-expansion.md +16 -0
- package/docs/templates/frontend-eval/fixtures/failures/06-unapproved-dependency-add.md +16 -0
- package/docs/templates/frontend-eval/fixtures/failures/07-mock-production-on.md +21 -0
- package/docs/templates/frontend-eval/fixtures/functional/01-simple-component-style.md +29 -0
- package/docs/templates/frontend-eval/fixtures/functional/02-form-validation.md +28 -0
- package/docs/templates/frontend-eval/fixtures/functional/03-list-detail-page.md +28 -0
- package/docs/templates/frontend-eval/fixtures/functional/04-api-mock.md +29 -0
- package/docs/templates/frontend-eval/fixtures/functional/05-permission-auth-gated-ui.md +27 -0
- package/docs/templates/frontend-eval/fixtures/functional/06-ssr-server-client-boundary.md +28 -0
- package/docs/templates/frontend-eval/fixtures/functional/07-shared-public-component-api.md +28 -0
- package/docs/templates/frontend-eval/fixtures/functional/08-pure-local-no-remote.md +27 -0
- package/docs/templates/frontend-eval/metrics.md +138 -0
- package/docs/templates/frontend-eval/smoke-targets.md +53 -0
- package/docs/templates/frontend-implementation-contract.schema.json +27 -0
- package/docs/templates/frontend-task-constraints.md +10 -0
- package/docs/templates/frontend-task-requirement.md +9 -0
- package/docs/templates/frontend-test-dag.generate-cases.prompt.md +5 -0
- package/docs/templates/frontend-test-dag.json +23 -0
- package/docs/templates/frontend-test-dag.retrieve-context.prompt.md +3 -0
- package/docs/templates/frontend-test-dag.retrospect.prompt.md +3 -0
- package/docs/templates/frontend-test-dag.review-cases.prompt.md +3 -0
- package/docs/templates/frontend-test-dag.review-execution.prompt.md +3 -0
- package/docs/templates/knowledge-graph-bootstrap-dag.json +1 -1
- package/docs/templates/knowledge-sync-dag.json +1 -0
- package/docs/verification-matrix.md +4 -1
- package/examples/decision-gate-agent-dag.json +4 -4
- package/examples/hybrid-loop-agent-dag.json +1 -1
- package/package.json +2 -2
- package/scripts/kb-bootstrap-init-skeleton.sh +2 -1
- package/scripts/kb-graph-incremental-prepare.mjs +19 -5
- package/scripts/kb-graph-promote.mjs +12 -1
- package/skills/ai-engineering-context/SKILL.md +2 -2
- package/skills/analyze-product-dependencies/SKILL.md +67 -0
- package/skills/analyze-product-dependencies/agents/openai.yaml +4 -0
- package/skills/analyze-product-dependencies/references/api-documentation-schema.md +30 -0
- package/skills/analyze-product-dependencies/references/dependency-analysis-schema.md +28 -0
- package/skills/analyze-product-dependencies/references/example.md +76 -0
- package/skills/analyze-product-dependencies/references/forward-test-cases.md +35 -0
- package/skills/analyze-product-dependencies/references/input-contract.md +11 -0
- package/skills/analyze-product-dependencies/references/scouting-rules.md +61 -0
- package/skills/analyze-product-dependencies/scripts/test-validators.mjs +267 -0
- package/skills/analyze-product-dependencies/scripts/validate-api-documentation.mjs +101 -0
- package/skills/analyze-product-dependencies/scripts/validate-dependency-analysis.mjs +142 -0
- package/skills/analyze-product-dependencies/scripts/validate-product-requirement-input.mjs +76 -0
- package/skills/analyze-product-dependencies/scripts/validation-helpers.mjs +146 -0
- package/skills/analyze-product-requirements/SKILL.md +90 -0
- package/skills/analyze-product-requirements/agents/openai.yaml +4 -0
- package/skills/analyze-product-requirements/references/acceptance-criteria.md +91 -0
- package/skills/analyze-product-requirements/references/clarification-and-knowledge.md +56 -0
- package/skills/analyze-product-requirements/references/example.md +86 -0
- package/skills/analyze-product-requirements/references/forward-test-cases.md +66 -0
- package/skills/analyze-product-requirements/references/product-analysis-schema.md +32 -0
- package/skills/analyze-product-requirements/references/product-requirement-schema.md +33 -0
- package/skills/analyze-product-requirements/references/requirement-clarification-schema.md +35 -0
- package/skills/analyze-product-requirements/scripts/test-validators.mjs +193 -0
- package/skills/analyze-product-requirements/scripts/validate-product-analysis.mjs +69 -0
- package/skills/analyze-product-requirements/scripts/validate-product-requirement.mjs +97 -0
- package/skills/analyze-product-requirements/scripts/validate-requirement-clarification.mjs +98 -0
- package/skills/analyze-product-requirements/scripts/validation-helpers.mjs +156 -0
- package/skills/browser-tools/SKILL.md +196 -0
- package/skills/browser-tools/browser-content.js +103 -0
- package/skills/browser-tools/browser-cookies.js +35 -0
- package/skills/browser-tools/browser-eval.js +53 -0
- package/skills/browser-tools/browser-hn-scraper.js +108 -0
- package/skills/browser-tools/browser-nav.js +44 -0
- package/skills/browser-tools/browser-pick.js +162 -0
- package/skills/browser-tools/browser-screenshot.js +34 -0
- package/skills/browser-tools/browser-start.js +86 -0
- package/skills/browser-tools/package-lock.json +2556 -0
- package/skills/browser-tools/package.json +19 -0
- package/skills/frontend-design-review/SKILL.md +6 -1
- package/skills/frontend-design-review/references/review-checklist.md +25 -4
- package/skills/frontend-implementation/SKILL.md +25 -30
- package/skills/frontend-implementation/references/code-standards.md +20 -22
- package/skills/frontend-implementation/references/node-contracts.md +17 -53
- package/skills/frontend-review/SKILL.md +10 -4
- package/skills/frontend-review/references/review-findings.md +8 -3
- package/skills/frontend-verification/SKILL.md +22 -9
- package/skills/frontend-verification/references/verification-checklist.md +17 -5
- package/skills/grill-with-docs/SKILL.md +5 -5
- package/skills/grill-with-docs/adr-format.md +3 -3
- package/skills/init-capability-evolution/SKILL.md +5 -5
- package/skills/loop-agent/SKILL.md +5 -5
- package/skills/loop-agent/references/README.md +3 -3
- package/skills/loop-agent/references/command-reference.md +98 -24
- package/skills/loop-agent/references/docs-converge.md +15 -15
- package/skills/loop-agent/references/harness-policy.md +2 -2
- package/skills/loop-agent/references/hybrid-dag.md +32 -22
- package/skills/loop-agent/references/multi-worktree.md +1 -1
- package/skills/loop-agent/references/orchestrator-and-interventions.md +8 -8
- package/skills/loop-agent/references/task-workflow.md +1 -1
- package/skills/loop-agent/references/verification-and-failure-handling.md +6 -4
- package/skills/playwright-cli/SKILL.md +420 -0
- package/skills/playwright-cli/references/element-attributes.md +23 -0
- package/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/skills/playwright-cli/references/request-mocking.md +87 -0
- package/skills/playwright-cli/references/running-code.md +241 -0
- package/skills/playwright-cli/references/session-management.md +225 -0
- package/skills/playwright-cli/references/storage-state.md +275 -0
- package/skills/playwright-cli/references/test-generation.md +433 -0
- package/skills/playwright-cli/references/tracing.md +139 -0
- package/skills/playwright-cli/references/video-recording.md +143 -0
- package/skills/playwright-cli-case-generator/SKILL.md +74 -0
- package/skills/requesting-code-review/SKILL.md +1 -1
- package/skills/systematic-debugging/CREATION-LOG.md +3 -3
- package/skills/systematic-debugging/SKILL.md +1 -1
- package/skills/systematic-debugging/test-academic.md +1 -1
- package/skills/systematic-debugging/test-pressure-1.md +1 -1
- package/skills/systematic-debugging/test-pressure-2.md +1 -1
- package/skills/systematic-debugging/test-pressure-3.md +1 -1
- package/skills/verification-before-completion/SKILL.md +1 -1
|
@@ -40,6 +40,15 @@
|
|
|
40
40
|
"docs/templates/product-line/links.md",
|
|
41
41
|
"scripts/check-product-line-docs.sh",
|
|
42
42
|
"scripts/check-task-pool-root.sh",
|
|
43
|
+
"scripts/kb-bootstrap-init-skeleton.sh",
|
|
44
|
+
"scripts/kb-query.sh",
|
|
45
|
+
"scripts/kb-query.mjs",
|
|
46
|
+
"scripts/kb-graph-materialize.sh",
|
|
47
|
+
"scripts/kb-graph-materialize.mjs",
|
|
48
|
+
"scripts/kb-graph-promote.sh",
|
|
49
|
+
"scripts/kb-graph-promote.mjs",
|
|
50
|
+
"scripts/kb-graph-incremental-prepare.sh",
|
|
51
|
+
"scripts/kb-graph-incremental-prepare.mjs",
|
|
43
52
|
"docs/templates/agent-dag.schema.json",
|
|
44
53
|
"examples/example-dag.json",
|
|
45
54
|
"skills/agent-worker/SKILL.md",
|
|
@@ -56,6 +65,8 @@
|
|
|
56
65
|
"skills/code-review-core/SKILL.md",
|
|
57
66
|
"skills/init-capability-evolution/SKILL.md",
|
|
58
67
|
"skills/webapp-testing/SKILL.md",
|
|
68
|
+
"skills/playwright-cli/SKILL.md",
|
|
69
|
+
"skills/playwright-cli-case-generator/SKILL.md",
|
|
59
70
|
"skills/frontend-implementation/SKILL.md",
|
|
60
71
|
"skills/frontend-implementation/references/node-contracts.md",
|
|
61
72
|
"skills/frontend-implementation/references/design-spec.md",
|
|
@@ -65,7 +76,11 @@
|
|
|
65
76
|
"skills/frontend-review/SKILL.md",
|
|
66
77
|
"skills/frontend-review/references/review-findings.md",
|
|
67
78
|
"skills/frontend-verification/SKILL.md",
|
|
68
|
-
"skills/frontend-verification/references/verification-checklist.md"
|
|
79
|
+
"skills/frontend-verification/references/verification-checklist.md",
|
|
80
|
+
"docs/templates/backend-test-analysis.schema.json",
|
|
81
|
+
"docs/templates/backend-test-execution.schema.json",
|
|
82
|
+
"docs/templates/backend-test-result.schema.json",
|
|
83
|
+
"docs/templates/backend-test-case-manifest.schema.json"
|
|
69
84
|
],
|
|
70
85
|
"initFullRequired": [
|
|
71
86
|
"README.md",
|
|
@@ -119,6 +134,8 @@
|
|
|
119
134
|
".agents/skills/code-review-core/SKILL.md",
|
|
120
135
|
".agents/skills/init-capability-evolution/SKILL.md",
|
|
121
136
|
".agents/skills/webapp-testing/SKILL.md",
|
|
137
|
+
".agents/skills/playwright-cli/SKILL.md",
|
|
138
|
+
".agents/skills/playwright-cli-case-generator/SKILL.md",
|
|
122
139
|
".agents/skills/frontend-implementation/SKILL.md",
|
|
123
140
|
".agents/skills/frontend-implementation/references/node-contracts.md",
|
|
124
141
|
".agents/skills/frontend-implementation/references/design-spec.md",
|
|
@@ -128,7 +145,11 @@
|
|
|
128
145
|
".agents/skills/frontend-review/SKILL.md",
|
|
129
146
|
".agents/skills/frontend-review/references/review-findings.md",
|
|
130
147
|
".agents/skills/frontend-verification/SKILL.md",
|
|
131
|
-
".agents/skills/frontend-verification/references/verification-checklist.md"
|
|
148
|
+
".agents/skills/frontend-verification/references/verification-checklist.md",
|
|
149
|
+
"docs/templates/backend-test-analysis.schema.json",
|
|
150
|
+
"docs/templates/backend-test-execution.schema.json",
|
|
151
|
+
"docs/templates/backend-test-result.schema.json",
|
|
152
|
+
"docs/templates/backend-test-case-manifest.schema.json"
|
|
132
153
|
],
|
|
133
154
|
"initSurface": {
|
|
134
155
|
"README.md": "managed-block",
|
|
@@ -183,6 +204,8 @@
|
|
|
183
204
|
".agents/skills/code-review-core/SKILL.md": "copied",
|
|
184
205
|
".agents/skills/init-capability-evolution/SKILL.md": "copied",
|
|
185
206
|
".agents/skills/webapp-testing/SKILL.md": "copied",
|
|
207
|
+
".agents/skills/playwright-cli/SKILL.md": "copied",
|
|
208
|
+
".agents/skills/playwright-cli-case-generator/SKILL.md": "copied",
|
|
186
209
|
".agents/skills/frontend-implementation/SKILL.md": "copied",
|
|
187
210
|
".agents/skills/frontend-implementation/references/node-contracts.md": "copied",
|
|
188
211
|
".agents/skills/frontend-implementation/references/design-spec.md": "copied",
|
|
@@ -192,7 +215,11 @@
|
|
|
192
215
|
".agents/skills/frontend-review/SKILL.md": "copied",
|
|
193
216
|
".agents/skills/frontend-review/references/review-findings.md": "copied",
|
|
194
217
|
".agents/skills/frontend-verification/SKILL.md": "copied",
|
|
195
|
-
".agents/skills/frontend-verification/references/verification-checklist.md": "copied"
|
|
218
|
+
".agents/skills/frontend-verification/references/verification-checklist.md": "copied",
|
|
219
|
+
"docs/templates/backend-test-analysis.schema.json": "copied",
|
|
220
|
+
"docs/templates/backend-test-execution.schema.json": "copied",
|
|
221
|
+
"docs/templates/backend-test-result.schema.json": "copied",
|
|
222
|
+
"docs/templates/backend-test-case-manifest.schema.json": "copied"
|
|
196
223
|
},
|
|
197
224
|
"packageExcluded": [
|
|
198
225
|
"docs/progress/20*.md",
|
|
@@ -11,30 +11,31 @@ loop-agent 提供结构化 agent 工作的本地 harness。
|
|
|
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
13
|
- `.harness/task-pool/states/<featureId>/<taskId>.json` — Task Pool schema v2 的 canonical state(ADR 0004);复合身份 `TaskPoolTaskRef = { featureId, taskId }`。扁平 `states/<taskId>.json` 为 legacy,不得静默解释
|
|
14
|
+
- `.harness/dag-runs/<lifecycle>/<run-id>/contracts/backend-test-analysis.json` — `backend-test` 的 run-owned 结构化分析契约;由 deterministic schema gate 从只读 analyze 输出生成,节点记录 path/hash/schema,随 lifecycle 目录迁移且不进入 Git writeSet
|
|
14
15
|
- `.harness/dag-runs/<lifecycle>/<run-id>/.runtime/skill-snapshot.json` — 该 run 实际使用的 resolved skill profile snapshot;由 state 中相对 ref 与原始 bytes SHA-256 锚定,随 lifecycle 目录整体迁移
|
|
15
16
|
|
|
16
17
|
## Skill 指令
|
|
17
18
|
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
- `.agents/skills/<skill-name>/` — 目标项目 repo-local skill
|
|
19
|
+
- `.agents/skills/loop-agent/` — loop-agent 仓库自有的 skill 指令与参考资料
|
|
20
|
+
- `.agents/skills/agent-worker/` — Feature Packet、TaskSpec、Task Pool、controller pinning、自举 candidate canary 与 Worker recovery 的可选 outer-loop operator skill;不是 DAG node skill
|
|
21
|
+
- `.agents/skills/<skill-name>/` — 目标项目 repo-local skill 副本;`.agents/skills/<skill-name>/` 仍是 loop-agent 源仓库和 npm 包内置回退路径
|
|
21
22
|
- 历史 `skill/` 不再是必需仓库路径;runtime 查找仅为 `loop-agent` 保留兼容 fallback
|
|
22
23
|
|
|
23
24
|
目标项目若在 `.agents/skills/` 中提供 `SDD-requirement-analysis`、`SDD-design-analysis`、`SDD-implementation-test-review`,hybrid DAG 生成器会按节点追加对应 skill。该增强只复用 repo-local 知识与方法:loop-agent 仍拥有流程与状态控制权,embedded-mode 约束禁止 SDD 状态推进、确认门禁和归档;初始化/扫描类 SDD skill 不会自动执行。未命中时不会改变默认 DAG。命中的节点 skill 继续由同一 resolved instruction 和 run-owned snapshot 机制冻结,没有第二套 loader 或旁路。
|
|
24
25
|
|
|
25
26
|
## Package 资产
|
|
26
27
|
|
|
27
|
-
npm 包包含运行与说明 harness 所需的静态能力资产:`bin/`、`dist
|
|
28
|
+
npm 包包含运行与说明 harness 所需的静态能力资产:`bin/`、`dist/`、`.agents/skills/`(包括 `loop-agent` 与 `agent-worker`)、顶层 `ai_workspace/loop-agent/*.md`、`ai_workspace/loop-agent/templates/`、`examples/`、`harness.json`、`AGENTS.md`、`README.md`、`CHANGELOG.md`。
|
|
28
29
|
|
|
29
|
-
生成或历史的 task facts 不是 package 资产。`
|
|
30
|
+
生成或历史的 task facts 不是 package 资产。`ai_workspace/loop-agent/progress/`、`ai_workspace/loop-agent/reports/`、`ai_workspace/loop-agent/exec-plans/`、`ai_workspace/loop-agent/decisions/` 下现有文件属于目标仓库历史;包只携带这些目录的 README。
|
|
30
31
|
|
|
31
|
-
从 npm 安装 `loop-agent` 并在其他项目使用时,DAG skill 指令按配置、用户或目标项目 `.agents/skills/` 解析(若存在),再回退到包内
|
|
32
|
+
从 npm 安装 `loop-agent` 并在其他项目使用时,DAG skill 指令按配置、用户或目标项目 `.agents/skills/` 解析(若存在),再回退到包内 `.agents/skills/`。目标项目可添加本地 skills,但不必复制 loop-agent 源码历史或根 `.agents/skills/` 目录即可使用默认 DAG 工作流。
|
|
32
33
|
|
|
33
34
|
`scripts/self-host-canary.mjs` 是源码仓库维护脚本,不进入 npm package `files`;安装后的 package 不把它作为用户命令 surface。
|
|
34
35
|
|
|
35
36
|
## harness.json Schema
|
|
36
37
|
|
|
37
|
-
`
|
|
38
|
+
`ai_workspace/loop-agent/templates/harness.schema.json` 是面向 IDE 的 `harness.json` JSON Schema。它用于补全字段、提示枚举值、解释 executor/model routing 配置,并尽早暴露拼写错误。
|
|
38
39
|
|
|
39
40
|
运行时事实源仍是 `src/governance/manifest-types.ts` 中的 Zod `harnessManifestSchema`;CLI 读取 `harness.json` 时继续通过 `loadHarnessManifest()` 解析。JSON Schema 不替代运行时校验,只服务编辑体验。
|
|
40
41
|
|
|
@@ -74,7 +75,7 @@ DAG agent 节点的输出语言由 `harness.json.workflowPolicy.dag.outputLangua
|
|
|
74
75
|
- `handoff check`、`spine audit`、`knowledge curate`
|
|
75
76
|
- `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`
|
|
76
77
|
|
|
77
|
-
`dag run-task` 在生成 DAG 草稿前会运行与 `plan check` 同源的 exec-plan 索引校验;active plan 与 `
|
|
78
|
+
`dag run-task` 在生成 DAG 草稿前会运行与 `plan check` 同源的 exec-plan 索引校验;active plan 与 `ai_workspace/loop-agent/exec-plans/active/README.md` 索引不一致时立即失败,避免运行昂贵节点后才在末端 shell verify 发现。`plan create` 优先复用目标项目模板并回退到发布包内置 `ai_workspace/loop-agent/templates/exec-plan.md`,`plan create`/`plan complete` 的多文件写入均有回滚保护;`new-task` 不自动绑定 exec-plan。
|
|
78
79
|
|
|
79
80
|
## Feature Review
|
|
80
81
|
|
package/docs/progress/README.md
CHANGED
|
@@ -2,10 +2,21 @@
|
|
|
2
2
|
|
|
3
3
|
本目录存放应超越聊天上下文的简洁 handoff 日志。
|
|
4
4
|
|
|
5
|
-
**索引职责**:本文件维护本目录**全量文件列表**。`
|
|
5
|
+
**索引职责**:本文件维护本目录**全量文件列表**。`ai_workspace/loop-agent/README.md` 只链到本 README。
|
|
6
6
|
|
|
7
7
|
## 近期要点(导读)
|
|
8
8
|
|
|
9
|
+
- [`2026-07-17-observe-dashboard-incremental-polling-handoff.md`](2026-07-17-observe-dashboard-incremental-polling-handoff.md) — Observe 总览重复 loading/全量 DOM 重建根因、DAG 契约和跨机器恢复步骤
|
|
10
|
+
- [`2026-07-17-0.13.0-merge-handoff.md`](2026-07-17-0.13.0-merge-handoff.md) — 0.13.0 合并、修复、验证与 Windows 剩余问题跨机器交接
|
|
11
|
+
- [`2026-07-17-source-target-structure-alignment.md`](2026-07-17-source-target-structure-alignment.md) — 源仓库 canonical layout 对齐 fresh init,并记录首轮 write-set audit 修订
|
|
12
|
+
- [`2026-07-17-fe-test-dag-archive.md`](2026-07-17-fe-test-dag-archive.md) — FE-test RAG DAG MVP + PR #25 收口归档(residual:prompt 深度 / browser smoke / website)
|
|
13
|
+
- [`2026-07-17-frontend-implementation-m4-m6.md`](2026-07-17-frontend-implementation-m4-m6.md) — frontend-implementation 风险路由、项目能力、修复合同与 package surface 收口
|
|
14
|
+
- [`2026-07-17-frontend-implementation-m3-repair.md`](2026-07-17-frontend-implementation-m3-repair.md) — frontend-implementation repair contract 与验证闭环
|
|
15
|
+
- [`2026-07-17-frontend-implementation-m2-writer-trace.md`](2026-07-17-frontend-implementation-m2-writer-trace.md) — frontend writer trace 与 verification trace 证据
|
|
16
|
+
- [`2026-07-17-frontend-implementation-contract-v1.md`](2026-07-17-frontend-implementation-contract-v1.md) — frontend implementation contract v1
|
|
17
|
+
- [`2026-07-17-frontend-implementation-m0-baseline.md`](2026-07-17-frontend-implementation-m0-baseline.md) — frontend-implementation M0 能力基线
|
|
18
|
+
- [`2026-07-16-frontend-mock-node.md`](2026-07-16-frontend-mock-node.md) — 前端 DAG Mock 策略、生产安全与真实接口证据边界(已验证)
|
|
19
|
+
- [`2026-07-16-frontend-demand-auto-routing.md`](2026-07-16-frontend-demand-auto-routing.md) — 默认前端需求自动进入前端专用 DAG,后端/混合/未知保守回退(已验证)
|
|
9
20
|
- [`2026-07-16-ready-planner.md`](2026-07-16-ready-planner.md) — Priority-aware Ready Planner:M1 core + RP-02 Feature/report/Observe 同源投影(已验证)
|
|
10
21
|
- [`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)
|
|
11
22
|
- [`2026-07-15-init-update-surface-coverage.md`](2026-07-15-init-update-surface-coverage.md) — 修复初始化 surface 升级漏检(自动发现 copied 文件、blockedTargetPaths fail-safe、drift gate)实施交接(已验证)
|
|
@@ -29,6 +40,17 @@
|
|
|
29
40
|
|
|
30
41
|
## 全量列表(新→旧)
|
|
31
42
|
|
|
43
|
+
- [`2026-07-17-observe-dashboard-incremental-polling-handoff.md`](2026-07-17-observe-dashboard-incremental-polling-handoff.md)
|
|
44
|
+
- [`2026-07-17-0.13.0-merge-handoff.md`](2026-07-17-0.13.0-merge-handoff.md)
|
|
45
|
+
- [`2026-07-17-source-target-structure-alignment.md`](2026-07-17-source-target-structure-alignment.md)
|
|
46
|
+
- [`2026-07-17-fe-test-dag-archive.md`](2026-07-17-fe-test-dag-archive.md)
|
|
47
|
+
- [`2026-07-17-frontend-implementation-m4-m6.md`](2026-07-17-frontend-implementation-m4-m6.md)
|
|
48
|
+
- [`2026-07-17-frontend-implementation-m3-repair.md`](2026-07-17-frontend-implementation-m3-repair.md)
|
|
49
|
+
- [`2026-07-17-frontend-implementation-m2-writer-trace.md`](2026-07-17-frontend-implementation-m2-writer-trace.md)
|
|
50
|
+
- [`2026-07-17-frontend-implementation-contract-v1.md`](2026-07-17-frontend-implementation-contract-v1.md)
|
|
51
|
+
- [`2026-07-17-frontend-implementation-m0-baseline.md`](2026-07-17-frontend-implementation-m0-baseline.md)
|
|
52
|
+
- [`2026-07-16-frontend-mock-node.md`](2026-07-16-frontend-mock-node.md)
|
|
53
|
+
- [`2026-07-16-frontend-demand-auto-routing.md`](2026-07-16-frontend-demand-auto-routing.md)
|
|
32
54
|
- [`2026-07-16-ready-planner.md`](2026-07-16-ready-planner.md)
|
|
33
55
|
- [`2026-07-15-task-pool-v2-feature-scoped-task-identity.md`](2026-07-15-task-pool-v2-feature-scoped-task-identity.md)
|
|
34
56
|
- [`2026-07-15-init-update-surface-coverage.md`](2026-07-15-init-update-surface-coverage.md)
|
package/docs/reports/README.md
CHANGED
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
# 报告
|
|
2
2
|
|
|
3
|
+
## 合并报告命名
|
|
4
|
+
|
|
5
|
+
跨分支合并报告使用 `YYYY-MM-DD-origin-<source>-into-<target>-<source-short-sha>.md`。同一天重复合并时由 source short SHA 唯一标识;报告应记录双方功能、冲突文件与解析、自动合并高风险点、初始化/发布面影响、验证证据及剩余风险。新报告从 [`../templates/branch-merge-report.md`](../templates/branch-merge-report.md) 创建。
|
|
6
|
+
|
|
7
|
+
- [`2026-07-18-origin-main-into-0.13.0-43e86ad.md`](2026-07-18-origin-main-into-0.13.0-43e86ad.md) — 合入 frontend implementation M0–M6 与 browser-tools,同时保留 Observe、init/update 和既有受治理 DAG 能力
|
|
8
|
+
- [`2026-07-18-origin-main-43e86ad-init-evolution-review.md`](2026-07-18-origin-main-43e86ad-init-evolution-review.md) — 本次合并的 package/full-init/update surface 审查
|
|
9
|
+
- [`2026-07-17-origin-main-into-0.13.0-c139cf5.md`](2026-07-17-origin-main-into-0.13.0-c139cf5.md) — 合并 backend-test M0–M4、frontend-test/Playwright CLI 与 Pi SDK 更新,同时保留 0.13.0 初始化、Observe 和 Windows 稳定性修复
|
|
10
|
+
- [`2026-07-17-origin-main-c139cf5-init-evolution-review.md`](2026-07-17-origin-main-c139cf5-init-evolution-review.md) — 本次高影响 merge 的 init/package/full-init/update 审查
|
|
11
|
+
|
|
3
12
|
本目录存放验证、审计、benchmark、init evolution 与 closeout 报告。
|
|
4
13
|
|
|
5
|
-
**索引职责**:本文件维护本目录**全量文件列表**。`
|
|
14
|
+
**索引职责**:本文件维护本目录**全量文件列表**。`ai_workspace/loop-agent/README.md` 只链到本 README,不再精选单篇 report。
|
|
6
15
|
|
|
7
16
|
查找约定:
|
|
8
17
|
|
|
@@ -12,7 +21,19 @@
|
|
|
12
21
|
|
|
13
22
|
## 近期要点(导读,非权威全集)
|
|
14
23
|
|
|
24
|
+
- [`2026-07-17-origin-main-merge.md`](2026-07-17-origin-main-merge.md) — origin/main 合并、canonical 路径收敛与 partial_failed 闭环说明
|
|
25
|
+
- [`2026-07-17-review-findings-remediation-init-evolution-review.md`](2026-07-17-review-findings-remediation-init-evolution-review.md) — 主干 review findings 初始化影响审查
|
|
26
|
+
- [`2026-07-16-frontend-mock-node-init-evolution-review.md`](2026-07-16-frontend-mock-node-init-evolution-review.md) — 前端 Mock 节点初始化影响审查
|
|
27
|
+
- [`2026-07-16-frontend-mock-data-workflow.md`](2026-07-16-frontend-mock-data-workflow.md) — 前端 Mock 数据工作流报告
|
|
28
|
+
- [`2026-07-16-frontend-mock-data-workflow-init-evolution-review.md`](2026-07-16-frontend-mock-data-workflow-init-evolution-review.md) — 前端 Mock 数据工作流初始化影响审查
|
|
29
|
+
- [`2026-07-16-frontend-demand-auto-routing-init-evolution-review.md`](2026-07-16-frontend-demand-auto-routing-init-evolution-review.md) — 前端需求自动路由初始化影响审查
|
|
30
|
+
- [`2026-07-16-dag-source-binding-recovery-init-evolution-review.md`](2026-07-16-dag-source-binding-recovery-init-evolution-review.md) — DAG 任务源绑定初始化影响审查
|
|
31
|
+
- [`2026-07-16-backend-test-run-owned-report-init-evolution-review.md`](2026-07-16-backend-test-run-owned-report-init-evolution-review.md) — backend-test run-owned 报告初始化影响审查
|
|
32
|
+
- [`2026-07-17-source-target-structure-alignment-partial-failed.md`](2026-07-17-source-target-structure-alignment-partial-failed.md) — 首轮结构迁移在 writer 前被 write-set audit 正确阻断的原因与 r2 修订
|
|
33
|
+
- [`2026-07-17-weekly-progress-summary-last-tue-to-today.md`](2026-07-17-weekly-progress-summary-last-tue-to-today.md) — 管理层阶段进展总结(07-07~07-17:0.6→0.12、Observe/Feature/Task Pool/Planner)
|
|
34
|
+
- [`2026-07-17-backend-test-analysis-contract-init-evolution-review.md`](2026-07-17-backend-test-analysis-contract-init-evolution-review.md) — backend-test run-owned 结构化分析契约与 JSON Schema 初始化投影审查
|
|
15
35
|
- [`current-capability-summary.md`](current-capability-summary.md) — **活**能力摘要(新进展写这里 / CHANGELOG / 新 report)
|
|
36
|
+
- [`2026-07-16-0.13.0-init-evolution-review.md`](2026-07-16-0.13.0-init-evolution-review.md) — 0.12.0→0.13.0 init 更新连续性修复与 knowledge surface 审查(init update required)
|
|
16
37
|
- [`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
38
|
- [`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
39
|
- [`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 非影响审查
|
|
@@ -29,8 +50,40 @@
|
|
|
29
50
|
- [`2026-07-12-m2-completion-audit.md`](2026-07-12-m2-completion-audit.md) — 第二月完成审计
|
|
30
51
|
- [`2026-07-02-repository-analysis.md`](2026-07-02-repository-analysis.md) — **已冻结**仓库能力基线快照(2026-07-15 最终再采样至 0.11.0;勿再当 CHANGELOG)
|
|
31
52
|
|
|
32
|
-
## 全量列表(新→旧)
|
|
33
|
-
|
|
53
|
+
## 全量列表(新→旧)
|
|
54
|
+
|
|
55
|
+
- [`2026-07-18-origin-main-into-0.13.0-43e86ad.md`](2026-07-18-origin-main-into-0.13.0-43e86ad.md)
|
|
56
|
+
- [`2026-07-18-origin-main-43e86ad-init-evolution-review.md`](2026-07-18-origin-main-43e86ad-init-evolution-review.md)
|
|
57
|
+
- [`2026-07-17-pi-sdk-0-80-10-init-evolution-review.md`](2026-07-17-pi-sdk-0-80-10-init-evolution-review.md)
|
|
58
|
+
- [`2026-07-17-origin-main-merge.md`](2026-07-17-origin-main-merge.md)
|
|
59
|
+
- [`2026-07-17-init-evolution-review.md`](2026-07-17-init-evolution-review.md)
|
|
60
|
+
- [`2026-07-17-frontend-implementation-m4-m6.md`](2026-07-17-frontend-implementation-m4-m6.md)
|
|
61
|
+
- [`2026-07-17-frontend-implementation-m3-repair.md`](2026-07-17-frontend-implementation-m3-repair.md)
|
|
62
|
+
- [`2026-07-17-frontend-implementation-m2-writer-trace.md`](2026-07-17-frontend-implementation-m2-writer-trace.md)
|
|
63
|
+
- [`2026-07-17-frontend-implementation-m0-baseline.md`](2026-07-17-frontend-implementation-m0-baseline.md)
|
|
64
|
+
- [`2026-07-17-frontend-implementation-contract-v1.md`](2026-07-17-frontend-implementation-contract-v1.md)
|
|
65
|
+
- [`2026-07-17-backend-test-result-classification-m2.md`](2026-07-17-backend-test-result-classification-m2.md)
|
|
66
|
+
- [`2026-07-17-backend-test-m4-converge-smoke.md`](2026-07-17-backend-test-m4-converge-smoke.md)
|
|
67
|
+
- [`2026-07-17-backend-test-m0-template-runtime-drift.md`](2026-07-17-backend-test-m0-template-runtime-drift.md)
|
|
68
|
+
- [`2026-07-17-backend-test-init-evolution-review.md`](2026-07-17-backend-test-init-evolution-review.md)
|
|
69
|
+
- [`2026-07-17-backend-test-execution-contract-m1.md`](2026-07-17-backend-test-execution-contract-m1.md)
|
|
70
|
+
- [`2026-07-17-backend-test-case-manifest-m3.md`](2026-07-17-backend-test-case-manifest-m3.md)
|
|
71
|
+
- [`2026-07-17-source-target-structure-alignment-partial-failed.md`](2026-07-17-source-target-structure-alignment-partial-failed.md)
|
|
72
|
+
- [`2026-07-16-0.13.0-init-evolution-review.md`](2026-07-16-0.13.0-init-evolution-review.md)
|
|
73
|
+
- [`2026-07-17-weekly-progress-summary-last-tue-to-today.md`](2026-07-17-weekly-progress-summary-last-tue-to-today.md)
|
|
74
|
+
- [`2026-07-17-backend-test-analysis-contract-artifact.md`](2026-07-17-backend-test-analysis-contract-artifact.md)
|
|
75
|
+
- [`2026-07-17-backend-test-analysis-contract-init-evolution-review.md`](2026-07-17-backend-test-analysis-contract-init-evolution-review.md)
|
|
76
|
+
- [`2026-07-17-review-findings-remediation-init-evolution-review.md`](2026-07-17-review-findings-remediation-init-evolution-review.md)
|
|
77
|
+
- [`2026-07-16-dag-source-binding-recovery-init-evolution-review.md`](2026-07-16-dag-source-binding-recovery-init-evolution-review.md)
|
|
78
|
+
- [`2026-07-16-repair-artifact-pass-normalization.md`](2026-07-16-repair-artifact-pass-normalization.md)
|
|
79
|
+
- [`2026-07-16-observe-inspector-node-consistency.md`](2026-07-16-observe-inspector-node-consistency.md)
|
|
80
|
+
- [`2026-07-16-init-natural-language-routing-init-evolution-review.md`](2026-07-16-init-natural-language-routing-init-evolution-review.md)
|
|
81
|
+
- [`2026-07-16-decision-envelope-prompt-contract.md`](2026-07-16-decision-envelope-prompt-contract.md)
|
|
82
|
+
- [`2026-07-16-decision-envelope-fence-tolerance.md`](2026-07-16-decision-envelope-fence-tolerance.md)
|
|
83
|
+
- [`2026-07-16-frontend-mock-node-init-evolution-review.md`](2026-07-16-frontend-mock-node-init-evolution-review.md)
|
|
84
|
+
- [`2026-07-16-frontend-demand-auto-routing-init-evolution-review.md`](2026-07-16-frontend-demand-auto-routing-init-evolution-review.md)
|
|
85
|
+
- [`2026-07-16-frontend-mock-data-workflow.md`](2026-07-16-frontend-mock-data-workflow.md)
|
|
86
|
+
- [`2026-07-16-frontend-mock-data-workflow-init-evolution-review.md`](2026-07-16-frontend-mock-data-workflow-init-evolution-review.md)
|
|
34
87
|
- [`2026-07-16-task-pool-priority-aware-ready-planner.md`](2026-07-16-task-pool-priority-aware-ready-planner.md)
|
|
35
88
|
- [`2026-07-15-task-pool-v2-feature-scoped-task-identity.md`](2026-07-15-task-pool-v2-feature-scoped-task-identity.md)
|
|
36
89
|
- [`2026-07-15-task-pool-v2-init-evolution-review.md`](2026-07-15-task-pool-v2-init-evolution-review.md)
|
|
@@ -39,9 +92,15 @@
|
|
|
39
92
|
- [`2026-07-15-backend-test-dag-init-evolution-review.md`](2026-07-15-backend-test-dag-init-evolution-review.md)
|
|
40
93
|
- [`2026-07-15-init-canonical-layout-init-evolution-review.md`](2026-07-15-init-canonical-layout-init-evolution-review.md)
|
|
41
94
|
- [`dogfood-preflight-static-20260709090443.md`](dogfood-preflight-static-20260709090443.md)
|
|
42
|
-
- [`current-capability-summary.md`](current-capability-summary.md)
|
|
43
|
-
- [`2026-07-14-website-docs-ia-init-evolution-review.md`](2026-07-14-website-docs-ia-init-evolution-review.md)
|
|
44
|
-
- [`2026-07-14-
|
|
95
|
+
- [`current-capability-summary.md`](current-capability-summary.md)
|
|
96
|
+
- [`2026-07-14-website-docs-ia-init-evolution-review.md`](2026-07-14-website-docs-ia-init-evolution-review.md)
|
|
97
|
+
- [`2026-07-14-observe-ui-r5.md`](2026-07-14-observe-ui-r5.md)
|
|
98
|
+
- [`2026-07-14-observe-ui-r4.md`](2026-07-14-observe-ui-r4.md)
|
|
99
|
+
- [`2026-07-14-observe-ui-r3.md`](2026-07-14-observe-ui-r3.md)
|
|
100
|
+
- [`2026-07-14-observe-ui-r2.md`](2026-07-14-observe-ui-r2.md)
|
|
101
|
+
- [`2026-07-14-observe-ui-r1.md`](2026-07-14-observe-ui-r1.md)
|
|
102
|
+
- [`2026-07-14-architecture-docs-init-evolution-review.md`](2026-07-14-architecture-docs-init-evolution-review.md)
|
|
103
|
+
- [`2026-07-14-website-docs-ia-and-converge.md`](2026-07-14-website-docs-ia-and-converge.md)
|
|
45
104
|
- [`2026-07-14-self-update-notifier-implementation.md`](2026-07-14-self-update-notifier-implementation.md)
|
|
46
105
|
- [`2026-07-14-docs-living-docs-calibration.md`](2026-07-14-docs-living-docs-calibration.md)
|
|
47
106
|
- [`2026-07-14-docs-governance-hygiene.md`](2026-07-14-docs-governance-hygiene.md)
|
|
@@ -17,6 +17,8 @@ The entries below are local wrappers or existing local skills. They are not whol
|
|
|
17
17
|
| `codebase-scout` | local wrapper | `skills/codebase-scout/SKILL.md` | scout | scout | Read-only reconnaissance guidance. |
|
|
18
18
|
| `init-capability-evolution` | local wrapper | `skills/init-capability-evolution/SKILL.md` | supervisor, maintenance | optional | Used only when changes may affect target-project initialization, package surface, or init projection rules. |
|
|
19
19
|
| `webapp-testing` | local wrapper inspired by frontend/browser testing practice | `skills/webapp-testing/SKILL.md` | verifier, reviewer | optional | Only applies when task explicitly involves browser-rendered behavior; no default Playwright/Semgrep execution. |
|
|
20
|
+
| `playwright-cli` | repo-local Playwright CLI instructions | `skills/playwright-cli/SKILL.md` | FE-test case executor | FE-test only | Direct browser commands require isolated test environments, per-case evidence paths, and explicit credential/data handling. |
|
|
21
|
+
| `playwright-cli-case-generator` | adapted from the repo-local playwright CLI case-generator contract | `skills/playwright-cli-case-generator/SKILL.md` | FE-test case generator | FE-test only | Generates Markdown cases and a compact manifest from RAG facts; does not execute browsers, create test code, or invent API/data constraints. |
|
|
20
22
|
|
|
21
23
|
## Vetting Rules
|
|
22
24
|
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
"minLength": 1
|
|
29
29
|
},
|
|
30
30
|
"runtimeContract": { "$ref": "#/$defs/runtimeContract" },
|
|
31
|
+
"sourceBinding": { "$ref": "#/$defs/sourceBinding" },
|
|
31
32
|
"objective": {
|
|
32
33
|
"type": "string"
|
|
33
34
|
},
|
|
@@ -98,6 +99,23 @@
|
|
|
98
99
|
}
|
|
99
100
|
}
|
|
100
101
|
},
|
|
102
|
+
"sourceBinding": {
|
|
103
|
+
"type": "object", "additionalProperties": false,
|
|
104
|
+
"required": ["schemaVersion", "taskId", "sources", "requirementIds"],
|
|
105
|
+
"properties": {
|
|
106
|
+
"schemaVersion": { "const": 1 },
|
|
107
|
+
"taskId": { "type": "string", "minLength": 1 },
|
|
108
|
+
"sources": { "type": "array", "minItems": 1, "items": {
|
|
109
|
+
"type": "object", "additionalProperties": false, "required": ["kind", "path", "sha256"],
|
|
110
|
+
"properties": {
|
|
111
|
+
"kind": { "enum": ["requirement", "constraint", "reference"] },
|
|
112
|
+
"path": { "type": "string", "minLength": 1 },
|
|
113
|
+
"sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" }
|
|
114
|
+
}
|
|
115
|
+
} },
|
|
116
|
+
"requirementIds": { "type": "array", "items": { "type": "string", "pattern": "^(?:REQ|BR|AC)-[A-Z0-9]+(?:-[A-Z0-9]+)*$" } }
|
|
117
|
+
}
|
|
118
|
+
},
|
|
101
119
|
"complexity": {
|
|
102
120
|
"enum": ["LOW", "MED", "HIGH"]
|
|
103
121
|
},
|
|
@@ -215,6 +233,15 @@
|
|
|
215
233
|
}
|
|
216
234
|
}
|
|
217
235
|
},
|
|
236
|
+
"requirementCoverageGate": {
|
|
237
|
+
"type": "object", "additionalProperties": false,
|
|
238
|
+
"required": ["fromNodeIds", "requiredIds"],
|
|
239
|
+
"properties": {
|
|
240
|
+
"fromNodeIds": { "type": "array", "minItems": 1, "items": { "type": "string", "pattern": "^[a-z][a-z0-9-]*$" } },
|
|
241
|
+
"requiredIds": { "type": "array", "minItems": 1, "items": { "type": "string", "pattern": "^(?:REQ|BR|AC)-[A-Z0-9]+(?:-[A-Z0-9]+)*$" } },
|
|
242
|
+
"label": { "type": "string", "minLength": 1 }
|
|
243
|
+
}
|
|
244
|
+
},
|
|
218
245
|
"verifyEvidence": { "$ref": "#/$defs/shellVerifyEvidence" },
|
|
219
246
|
"repairArtifactGate": { "$ref": "#/$defs/repairArtifactGate" },
|
|
220
247
|
"envAllowlist": {
|
|
@@ -230,7 +257,8 @@
|
|
|
230
257
|
"anyOf": [
|
|
231
258
|
{ "required": ["commands"], "properties": { "commands": { "minItems": 1 } } },
|
|
232
259
|
{ "required": ["preset"] },
|
|
233
|
-
{ "required": ["verdictGate"] }
|
|
260
|
+
{ "required": ["verdictGate"] },
|
|
261
|
+
{ "required": ["requirementCoverageGate"] }
|
|
234
262
|
]
|
|
235
263
|
},
|
|
236
264
|
"staticConfig": {
|
|
@@ -7,13 +7,16 @@
|
|
|
7
7
|
"agentRuntime": "pi-only",
|
|
8
8
|
"repairWriterProtocol": "explicit-node-v1"
|
|
9
9
|
},
|
|
10
|
-
"objective": "Demonstrate a reusable supervised implementation DAG: contract → parallel scouts → plan → write-set audit → write-set gate → implement → soft verify → process supervisor → repair → hard verify → review verdict → review gate → decision gate → closeout. Write-set, process, and review verdict nodes emit first-line VERDICT for deterministic gates, reducing main-session intervention.",
|
|
10
|
+
"objective": "Demonstrate a reusable supervised implementation DAG: contract → parallel scouts → plan → write-set audit → verdict format repair → bounded plan revision → final write-set audit → verdict format repair → write-set gate → implement → soft verify → process supervisor → repair → hard verify → review verdict → review gate → decision gate → closeout. Write-set, process, and review verdict nodes emit first-line VERDICT for deterministic gates, reducing main-session intervention.",
|
|
11
11
|
"successCriteria": [
|
|
12
12
|
"contract-pi returns a read-only implementation contract with narrow write boundaries",
|
|
13
13
|
"scout-src and scout-tests run in parallel without write conflicts",
|
|
14
14
|
"plan-pi produces a writeSet coverage matrix with explicit exclusive owners",
|
|
15
15
|
"write-set-audit-pi validates coverage and returns VERDICT pass or request-revision",
|
|
16
|
-
"write-set-
|
|
16
|
+
"write-set-audit-format-repair-pi provides one read-only format recovery attempt without changing substantive findings",
|
|
17
|
+
"plan-revision-pi performs at most one read-only revision round and never expands task allowedPaths",
|
|
18
|
+
"final-write-set-audit-pi re-audits the effective plan after the bounded revision round",
|
|
19
|
+
"write-set-gate-shell blocks implement-pi unless the normalized final audit VERDICT is pass",
|
|
17
20
|
"implement-pi and repair-pi write only inside declared writeSet",
|
|
18
21
|
"soft-verify-shell archives focused test exit codes before process supervision",
|
|
19
22
|
"process-supervisor-pi returns first-line VERDICT pass or request-revision",
|
|
@@ -40,7 +43,8 @@
|
|
|
40
43
|
"Every task must explicitly declare executor; defaults.executor is schema-only and not a runtime fallback.",
|
|
41
44
|
"Prefer same-rank parallel read-only scouts over serial chains when outputs are independent.",
|
|
42
45
|
"Same-rank exclusive writeSet entries must be disjoint.",
|
|
43
|
-
"Use executorModels for model routing; do not add defaults.model or legacy top-level models."
|
|
46
|
+
"Use executorModels for model routing; do not add defaults.model or legacy top-level models.",
|
|
47
|
+
"Write-set plan revision is bounded to one round; format repair remains read-only and cannot expand task allowedPaths or authorize writes."
|
|
44
48
|
],
|
|
45
49
|
"defaults": {
|
|
46
50
|
"executor": "pi",
|
|
@@ -185,11 +189,123 @@
|
|
|
185
189
|
"subtask_prompt": "Audit plan-pi WriteSet Coverage Matrix against the contract. First non-empty line must be exactly VERDICT: pass or VERDICT: request-revision. List Critical/Important gaps when any required file lacks a single exclusive owner or overlaps forbidden paths. Do not edit files or write root artifacts/**."
|
|
186
190
|
},
|
|
187
191
|
{
|
|
188
|
-
"id": "write-set-
|
|
192
|
+
"id": "write-set-audit-format-repair-pi",
|
|
189
193
|
"depends_on": [
|
|
190
194
|
"write-set-audit-pi"
|
|
191
195
|
],
|
|
192
196
|
"complexity": "LOW",
|
|
197
|
+
"executor": "pi",
|
|
198
|
+
"role": "reviewer",
|
|
199
|
+
"writePolicy": "read-only",
|
|
200
|
+
"allowedPaths": [
|
|
201
|
+
"**"
|
|
202
|
+
],
|
|
203
|
+
"forbiddenPaths": [
|
|
204
|
+
".harness/**",
|
|
205
|
+
"artifacts/**"
|
|
206
|
+
],
|
|
207
|
+
"outputContract": "Plain Markdown whose first non-empty line is exactly VERDICT: pass or VERDICT: request-revision, followed by the original audit findings without substantive changes. No file writes.",
|
|
208
|
+
"subtask_prompt": "Normalize write-set-audit-pi output; this is the single read-only format-repair attempt for the initial audit. First non-empty line must be exactly VERDICT: pass or VERDICT: request-revision. Preserve an existing valid verdict exactly. If the verdict is missing or malformed but the audit states an unambiguous conclusion, add only the matching canonical verdict and preserve the findings. Do not add, remove, or reclassify substantive findings. If the conclusion is ambiguous, emit VERDICT: request-revision and report the format ambiguity. Do not infer a pass from general prose, expand task allowedPaths, or edit files."
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"id": "write-set-format-gate-shell",
|
|
212
|
+
"depends_on": [
|
|
213
|
+
"write-set-audit-format-repair-pi"
|
|
214
|
+
],
|
|
215
|
+
"complexity": "LOW",
|
|
216
|
+
"executor": "shell",
|
|
217
|
+
"role": "verifier",
|
|
218
|
+
"writePolicy": "read-only",
|
|
219
|
+
"allowedPaths": [
|
|
220
|
+
"**"
|
|
221
|
+
],
|
|
222
|
+
"forbiddenPaths": [
|
|
223
|
+
".harness/**",
|
|
224
|
+
"artifacts/**"
|
|
225
|
+
],
|
|
226
|
+
"outputContract": "Deterministic initial write-set verdict format gate: accept pass or request-revision so the bounded plan-revision stage can run; reject missing or unexpected verdicts.",
|
|
227
|
+
"subtask_prompt": "Validate the normalized initial write-set audit verdict before the bounded plan-revision stage. This gate does not authorize implementation writes.",
|
|
228
|
+
"shell": {
|
|
229
|
+
"verdictGate": {
|
|
230
|
+
"fromNodeId": "write-set-audit-format-repair-pi",
|
|
231
|
+
"accept": [
|
|
232
|
+
"VERDICT: pass",
|
|
233
|
+
"VERDICT: request-revision"
|
|
234
|
+
],
|
|
235
|
+
"label": "initial write-set audit format",
|
|
236
|
+
"lineMode": "first-verdict-line"
|
|
237
|
+
},
|
|
238
|
+
"cwd": ".",
|
|
239
|
+
"timeoutMs": 60000
|
|
240
|
+
}
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
"id": "plan-revision-pi",
|
|
244
|
+
"depends_on": [
|
|
245
|
+
"write-set-format-gate-shell",
|
|
246
|
+
"plan-pi",
|
|
247
|
+
"write-set-audit-format-repair-pi"
|
|
248
|
+
],
|
|
249
|
+
"complexity": "MED",
|
|
250
|
+
"executor": "pi",
|
|
251
|
+
"role": "planner",
|
|
252
|
+
"writePolicy": "read-only",
|
|
253
|
+
"allowedPaths": [
|
|
254
|
+
"**"
|
|
255
|
+
],
|
|
256
|
+
"forbiddenPaths": [
|
|
257
|
+
".harness/**",
|
|
258
|
+
"artifacts/**"
|
|
259
|
+
],
|
|
260
|
+
"outputContract": "PASS_NO_REVISION_NEEDED when the normalized initial audit passed, otherwise a complete revised implementation plan with a corrected WriteSet Coverage Matrix. No file writes.",
|
|
261
|
+
"subtask_prompt": "Perform the single bounded plan-revision round. If the normalized verdict is VERDICT: pass, output PASS_NO_REVISION_NEEDED and do not change the original plan. If it is VERDICT: request-revision, return a complete revised plan that resolves every finding and includes a corrected WriteSet Coverage Matrix. Do not expand task allowedPaths, weaken forbiddenPaths, or edit files."
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
"id": "final-write-set-audit-pi",
|
|
265
|
+
"depends_on": [
|
|
266
|
+
"plan-pi",
|
|
267
|
+
"plan-revision-pi",
|
|
268
|
+
"write-set-audit-format-repair-pi"
|
|
269
|
+
],
|
|
270
|
+
"complexity": "MED",
|
|
271
|
+
"executor": "pi",
|
|
272
|
+
"role": "reviewer",
|
|
273
|
+
"writePolicy": "read-only",
|
|
274
|
+
"allowedPaths": [
|
|
275
|
+
"**"
|
|
276
|
+
],
|
|
277
|
+
"forbiddenPaths": [
|
|
278
|
+
".harness/**",
|
|
279
|
+
"artifacts/**"
|
|
280
|
+
],
|
|
281
|
+
"outputContract": "Plain Markdown whose first non-empty line is VERDICT: pass or VERDICT: request-revision; includes final writeSet coverage findings after the single plan-revision round. No file writes.",
|
|
282
|
+
"subtask_prompt": "Perform the final write-set audit after the single bounded plan-revision round. When plan-revision-pi returned PASS_NO_REVISION_NEEDED, audit the original plan-pi output; otherwise audit the complete revised plan. First non-empty line must be exactly VERDICT: pass or VERDICT: request-revision. Request revision if any required file still lacks one exclusive owner, writeSet is broad or placeholder, forbidden paths overlap, or an initial finding remains unresolved. Do not expand task allowedPaths or edit files."
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
"id": "final-write-set-audit-format-repair-pi",
|
|
286
|
+
"depends_on": [
|
|
287
|
+
"final-write-set-audit-pi"
|
|
288
|
+
],
|
|
289
|
+
"complexity": "LOW",
|
|
290
|
+
"executor": "pi",
|
|
291
|
+
"role": "reviewer",
|
|
292
|
+
"writePolicy": "read-only",
|
|
293
|
+
"allowedPaths": [
|
|
294
|
+
"**"
|
|
295
|
+
],
|
|
296
|
+
"forbiddenPaths": [
|
|
297
|
+
".harness/**",
|
|
298
|
+
"artifacts/**"
|
|
299
|
+
],
|
|
300
|
+
"outputContract": "Plain Markdown whose first non-empty line is exactly VERDICT: pass or VERDICT: request-revision, followed by the original final-audit findings without substantive changes. No file writes.",
|
|
301
|
+
"subtask_prompt": "Normalize final-write-set-audit-pi output; this is the single read-only format-repair attempt for the final audit. Preserve an existing valid verdict exactly. If the verdict is missing or malformed but the audit states an unambiguous conclusion, add only the matching canonical verdict and preserve the findings. Do not add, remove, or reclassify substantive findings. If the conclusion is ambiguous, emit VERDICT: request-revision. Do not infer a pass from general prose, expand task allowedPaths, or edit files."
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
"id": "write-set-gate-shell",
|
|
305
|
+
"depends_on": [
|
|
306
|
+
"final-write-set-audit-format-repair-pi"
|
|
307
|
+
],
|
|
308
|
+
"complexity": "LOW",
|
|
193
309
|
"executor": "shell",
|
|
194
310
|
"role": "verifier",
|
|
195
311
|
"writePolicy": "read-only",
|
|
@@ -200,11 +316,11 @@
|
|
|
200
316
|
".harness/**",
|
|
201
317
|
"artifacts/**"
|
|
202
318
|
],
|
|
203
|
-
"outputContract": "Deterministic write-set audit verdict gate: exit 0 only when write-set-audit-pi
|
|
204
|
-
"subtask_prompt": "Deterministic gate: block implement-pi unless write-set
|
|
319
|
+
"outputContract": "Deterministic final write-set audit verdict gate: exit 0 only when final-write-set-audit-format-repair-pi emits VERDICT: pass after the bounded revision round.",
|
|
320
|
+
"subtask_prompt": "Deterministic gate: block implement-pi unless the normalized final write-set audit emitted VERDICT: pass.",
|
|
205
321
|
"shell": {
|
|
206
322
|
"verdictGate": {
|
|
207
|
-
"fromNodeId": "write-set-audit-pi",
|
|
323
|
+
"fromNodeId": "final-write-set-audit-format-repair-pi",
|
|
208
324
|
"accept": [
|
|
209
325
|
"VERDICT: pass"
|
|
210
326
|
],
|
|
@@ -218,7 +334,10 @@
|
|
|
218
334
|
{
|
|
219
335
|
"id": "implement-pi",
|
|
220
336
|
"depends_on": [
|
|
221
|
-
"write-set-gate-shell"
|
|
337
|
+
"write-set-gate-shell",
|
|
338
|
+
"plan-pi",
|
|
339
|
+
"plan-revision-pi",
|
|
340
|
+
"final-write-set-audit-format-repair-pi"
|
|
222
341
|
],
|
|
223
342
|
"complexity": "HIGH",
|
|
224
343
|
"executor": "pi",
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://tea-agent.dev/schemas/backend-test-analysis-v1.json",
|
|
4
|
+
"title": "Backend Test Analysis v1",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": ["schemaVersion", "sourceBinding", "acceptanceCriteria", "endpoints", "dataModels", "businessRules", "stateTransitions", "boundaryConstraints", "externalDependencies", "risks", "evidenceGaps"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"schemaVersion": { "const": 1 },
|
|
10
|
+
"sourceBinding": {
|
|
11
|
+
"type": "object", "additionalProperties": false,
|
|
12
|
+
"required": ["taskId", "requirementPath", "requirementSha256", "referencePaths", "requirementIds"],
|
|
13
|
+
"properties": {
|
|
14
|
+
"taskId": { "type": "string", "minLength": 1 },
|
|
15
|
+
"requirementPath": { "type": "string", "minLength": 1 },
|
|
16
|
+
"requirementSha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
|
|
17
|
+
"referencePaths": { "type": "array", "items": { "type": "string", "minLength": 1 } },
|
|
18
|
+
"requirementIds": { "type": "array", "items": { "type": "string", "pattern": "^(REQ|BR|AC)-[A-Z0-9]+(-[A-Z0-9]+)*$" } }
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"acceptanceCriteria": { "type": "array", "items": { "$ref": "#/$defs/acceptanceCriterion" } },
|
|
22
|
+
"endpoints": { "type": "array", "items": { "$ref": "#/$defs/endpoint" } },
|
|
23
|
+
"dataModels": { "type": "array", "items": { "$ref": "#/$defs/evidencedDescription" } },
|
|
24
|
+
"businessRules": { "type": "array", "items": { "$ref": "#/$defs/businessRule" } },
|
|
25
|
+
"stateTransitions": { "type": "array", "items": { "$ref": "#/$defs/stateTransition" } },
|
|
26
|
+
"boundaryConstraints": { "type": "array", "items": { "$ref": "#/$defs/boundaryConstraint" } },
|
|
27
|
+
"externalDependencies": { "type": "array", "items": { "$ref": "#/$defs/optionalEvidenceDescription" } },
|
|
28
|
+
"risks": { "type": "array", "items": { "$ref": "#/$defs/optionalEvidenceDescription" } },
|
|
29
|
+
"evidenceGaps": { "type": "array", "items": { "$ref": "#/$defs/evidenceGap" } }
|
|
30
|
+
},
|
|
31
|
+
"$defs": {
|
|
32
|
+
"sourceRef": { "type": "string", "minLength": 1 },
|
|
33
|
+
"field": { "type": "object", "additionalProperties": false, "required": ["name"], "properties": { "name": { "type": "string", "minLength": 1 }, "type": { "type": "string", "minLength": 1 }, "required": { "type": "boolean" }, "description": { "type": "string" } } },
|
|
34
|
+
"errorCase": { "type": "object", "additionalProperties": false, "required": ["description"], "properties": { "status": { "type": "integer", "minimum": 400, "maximum": 599 }, "code": { "type": "string", "minLength": 1 }, "messageField": { "type": "string", "minLength": 1 }, "description": { "type": "string", "minLength": 1 } } },
|
|
35
|
+
"acceptanceCriterion": { "type": "object", "additionalProperties": false, "required": ["id", "text", "sourceRef"], "properties": { "id": { "type": "string", "pattern": "^AC-[A-Z0-9]+(-[A-Z0-9]+)*$" }, "text": { "type": "string", "minLength": 1 }, "sourceRef": { "$ref": "#/$defs/sourceRef" } } },
|
|
36
|
+
"endpoint": { "type": "object", "additionalProperties": false, "required": ["id", "method", "path", "requestFields", "responseFields", "successStatuses", "errorCases"], "properties": { "id": { "type": "string", "minLength": 1 }, "method": { "enum": ["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"] }, "path": { "type": "string", "pattern": "^/" }, "requestFields": { "type": "array", "items": { "$ref": "#/$defs/field" } }, "responseFields": { "type": "array", "items": { "$ref": "#/$defs/field" } }, "successStatuses": { "type": "array", "items": { "type": "integer", "minimum": 100, "maximum": 399 } }, "errorCases": { "type": "array", "items": { "$ref": "#/$defs/errorCase" } } } },
|
|
37
|
+
"evidencedDescription": { "type": "object", "additionalProperties": false, "required": ["id", "description", "sourceRef"], "properties": { "id": { "type": "string", "minLength": 1 }, "description": { "type": "string", "minLength": 1 }, "sourceRef": { "$ref": "#/$defs/sourceRef" } } },
|
|
38
|
+
"businessRule": { "type": "object", "additionalProperties": false, "required": ["id", "text", "sourceRef"], "properties": { "id": { "type": "string", "minLength": 1 }, "text": { "type": "string", "minLength": 1 }, "sourceRef": { "$ref": "#/$defs/sourceRef" } } },
|
|
39
|
+
"stateTransition": { "type": "object", "additionalProperties": false, "required": ["from", "to", "trigger", "sourceRef"], "properties": { "from": { "type": "string", "minLength": 1 }, "to": { "type": "string", "minLength": 1 }, "trigger": { "type": "string", "minLength": 1 }, "sourceRef": { "$ref": "#/$defs/sourceRef" } } },
|
|
40
|
+
"boundaryConstraint": { "type": "object", "additionalProperties": false, "required": ["field", "constraint", "sourceRef"], "properties": { "field": { "type": "string", "minLength": 1 }, "constraint": { "type": "string", "minLength": 1 }, "sourceRef": { "$ref": "#/$defs/sourceRef" } } },
|
|
41
|
+
"optionalEvidenceDescription": { "type": "object", "additionalProperties": false, "required": ["description"], "properties": { "name": { "type": "string", "minLength": 1 }, "description": { "type": "string", "minLength": 1 }, "sourceRef": { "$ref": "#/$defs/sourceRef" } } },
|
|
42
|
+
"evidenceGap": { "type": "object", "additionalProperties": false, "required": ["description"], "properties": { "description": { "type": "string", "minLength": 1 }, "requirementId": { "type": "string" }, "sourceRef": { "$ref": "#/$defs/sourceRef" } } }
|
|
43
|
+
}
|
|
44
|
+
}
|