harness-everything 0.40.0 → 0.41.1
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/harness-everything/project-docs.json +9 -0
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +51 -0
- package/benchmarks/results/f1-doc-path-baseline/1-source-clean.stderr.txt +0 -0
- package/benchmarks/results/f1-doc-path-baseline/1-source-clean.stdout.json +20 -0
- package/benchmarks/results/f1-doc-path-baseline/2-injected-architecture.md +229 -0
- package/benchmarks/results/f1-doc-path-baseline/2-source-injected.stderr.txt +0 -0
- package/benchmarks/results/f1-doc-path-baseline/2-source-injected.stdout.json +33 -0
- package/benchmarks/results/f1-doc-path-baseline/3-source-reverted.stderr.txt +0 -0
- package/benchmarks/results/f1-doc-path-baseline/3-source-reverted.stdout.json +20 -0
- package/benchmarks/results/f1-doc-path-baseline/4a-packaged-clean.stderr.txt +0 -0
- package/benchmarks/results/f1-doc-path-baseline/4a-packaged-clean.stdout.json +20 -0
- package/benchmarks/results/f1-doc-path-baseline/4b-packaged-injected.stderr.txt +0 -0
- package/benchmarks/results/f1-doc-path-baseline/4b-packaged-injected.stdout.json +33 -0
- package/benchmarks/results/f1-doc-path-baseline/5-source-missing-config.stderr.txt +0 -0
- package/benchmarks/results/f1-doc-path-baseline/5-source-missing-config.stdout.json +15 -0
- package/benchmarks/results/f1-doc-path-baseline/5b-packaged-missing-config.stderr.txt +0 -0
- package/benchmarks/results/f1-doc-path-baseline/5b-packaged-missing-config.stdout.json +15 -0
- package/benchmarks/results/f1-doc-path-baseline/README.md +54 -0
- package/benchmarks/results/f1-doc-path-baseline/before-fix/1-source-clean.stderr.txt +0 -0
- package/benchmarks/results/f1-doc-path-baseline/before-fix/1-source-clean.stdout.json +115 -0
- package/benchmarks/results/f1-doc-path-baseline/before-fix/2-injected-document.md +328 -0
- package/benchmarks/results/f1-doc-path-baseline/before-fix/2-source-injected.stderr.txt +0 -0
- package/benchmarks/results/f1-doc-path-baseline/before-fix/2-source-injected.stdout.json +127 -0
- package/benchmarks/results/f1-doc-path-baseline/before-fix/3-source-reverted.stderr.txt +0 -0
- package/benchmarks/results/f1-doc-path-baseline/before-fix/3-source-reverted.stdout.json +115 -0
- package/benchmarks/results/f1-doc-path-baseline/before-fix/4a-packaged-clean.stderr.txt +0 -0
- package/benchmarks/results/f1-doc-path-baseline/before-fix/4a-packaged-clean.stdout.json +115 -0
- package/benchmarks/results/f1-doc-path-baseline/before-fix/4b-packaged-injected.stderr.txt +0 -0
- package/benchmarks/results/f1-doc-path-baseline/before-fix/4b-packaged-injected.stdout.json +127 -0
- package/benchmarks/results/f1-doc-path-baseline/before-fix/5-source-missing-config.stderr.txt +0 -0
- package/benchmarks/results/f1-doc-path-baseline/before-fix/5-source-missing-config.stdout.json +15 -0
- package/benchmarks/results/f1-doc-path-baseline/before-fix/5b-packaged-missing-config.stderr.txt +0 -0
- package/benchmarks/results/f1-doc-path-baseline/before-fix/5b-packaged-missing-config.stdout.json +15 -0
- package/benchmarks/results/f1-doc-path-baseline/before-fix/6-supplementary-fixture-ok.input.md +8 -0
- package/benchmarks/results/f1-doc-path-baseline/before-fix/6-supplementary-fixture-ok.stdout.json +16 -0
- package/benchmarks/results/f1-doc-path-baseline/before-fix/README.md +34 -0
- package/benchmarks/results/f1-doc-path-baseline/probe-31-docs/after.json +248 -0
- package/benchmarks/results/f1-doc-path-baseline/probe-31-docs/before.json +254 -0
- package/benchmarks/results/f1-doc-path-baseline/probe-31-docs/probe.js +26 -0
- package/benchmarks/results/f2-doc-craft-baseline/README.md +32 -0
- package/benchmarks/results/f2-doc-craft-baseline/arm-f1-report.md +84 -0
- package/benchmarks/results/f2-doc-craft-baseline/arm-f1-task.md +21 -0
- package/benchmarks/results/f2-doc-craft-baseline/arm-f1.diff +19 -0
- package/benchmarks/results/f2-doc-craft-baseline/arm-f2-report.md +110 -0
- package/benchmarks/results/f2-doc-craft-baseline/arm-f2-task.md +21 -0
- package/benchmarks/results/f2-doc-craft-baseline/arm-f2.diff +19 -0
- package/benchmarks/results/f3-derived-views-baseline/README.md +34 -0
- package/benchmarks/results/f3-derived-views-baseline/arm-f2-report.md +43 -0
- package/benchmarks/results/f3-derived-views-baseline/arm-f2-task.md +21 -0
- package/benchmarks/results/f3-derived-views-baseline/arm-f2.diff +21 -0
- package/benchmarks/results/f3-derived-views-baseline/arm-f3-report.md +57 -0
- package/benchmarks/results/f3-derived-views-baseline/arm-f3-task.md +21 -0
- package/benchmarks/results/f3-derived-views-baseline/arm-f3.diff +21 -0
- package/benchmarks/results/live-host/claude-325-3b-s2b/README.md +99 -0
- package/benchmarks/results/live-host/claude-325-3b-s2b/capture.sanitized.jsonl +26 -0
- package/ci/archive/325-prep/README.md +71 -0
- package/ci/{prep → archive/325-prep}/doc-reconciliation-red.js +9 -7
- package/ci/archive/325-prep/f4-expected-red.json +34 -0
- package/ci/archive/325-prep/historical-qualification.test.js +143 -0
- package/ci/fixtures/doc-obligations/reconciliation-prep/cases.json +17 -4
- package/ci/fixtures/doc-obligations/reconciliation-prep/pending-red.json +8 -56
- package/ci/fixtures/doc-obligations/reconciliation-prep/trust-contract.json +2 -2
- package/ci/fixtures/doc-obligations/reconciliation-s1/cases.json +17 -5
- package/ci/fixtures/doc-obligations/reconciliation-s2b/capture/harness.js +415 -0
- package/ci/fixtures/doc-obligations/reconciliation-s2b/capture/off-handoff-golden.json +16 -0
- package/ci/fixtures/doc-obligations/reconciliation-s2b/capture/payload-post-tool-use-failure.json +11 -0
- package/ci/fixtures/doc-obligations/reconciliation-s2b/capture/payload-post-tool-use-success-minimal.json +9 -0
- package/ci/fixtures/doc-obligations/reconciliation-s2b/capture/payload-post-tool-use-success.json +13 -0
- package/ci/fixtures/doc-obligations/reconciliation-s2b/capture/payload-subagent-start.json +7 -0
- package/ci/fixtures/doc-obligations/reconciliation-s2b/capture/payload-subagent-stop-freetext-reject.json +11 -0
- package/ci/fixtures/doc-obligations/reconciliation-s2b/capture/payload-subagent-stop-reject.json +11 -0
- package/ci/fixtures/doc-obligations/reconciliation-s2b/capture/payload-subagent-stop.json +11 -0
- package/ci/fixtures/doc-obligations/reconciliation-s2b/capture/payload-task-result.json +19 -0
- package/ci/fixtures/doc-obligations/reconciliation-s2b/corpus/off-capture-only.json +99 -0
- package/ci/fixtures/doc-obligations/reconciliation-s2b/corpus/off-legacy.json +67 -0
- package/ci/fixtures/doc-obligations/reconciliation-s2b/corpus/on-concurrent-writers.json +62 -0
- package/ci/fixtures/doc-obligations/reconciliation-s2b/corpus/on-lookalikes-runtime-mutations.json +67 -0
- package/ci/fixtures/doc-obligations/reconciliation-s2b/corpus/on-malformed.json +85 -0
- package/ci/fixtures/doc-obligations/reconciliation-s2b/corpus/on-normal-session.json +74 -0
- package/ci/fixtures/doc-obligations/reconciliation-s2b/corpus/on-runtime-drift-later-npm-test.json +58 -0
- package/ci/fixtures/doc-obligations/reconciliation-s2b/corpus/on-valid-direct-quoted-review.json +85 -0
- package/ci/fixtures/doc-obligations/reconciliation-s2b/f4/cases.json +2267 -0
- package/ci/fixtures/doc-obligations/reconciliation-s2b/wiring/cases.json +1110 -0
- package/ci/fixtures/doc-obligations/reconciliation-s2b/wiring/legacy-off-golden.json +674 -0
- package/ci/lib/doc-reconciliation-file-spy.js +23 -0
- package/ci/lib/doc-reconciliation-prep-fixtures.js +136 -10
- package/ci/lib/doc-reconciliation-qualification-preload.js +37 -0
- package/ci/lib/doc-reconciliation-replay.js +104 -0
- package/ci/lib/doc-reconciliation-staged-tree.js +102 -0
- package/ci/mechanism-2p-opencode-v2-entrypoint.test.js +179 -0
- package/ci/mechanism-325-3b-preparation.test.js +27 -101
- package/ci/mechanism-325-3b-s2b-capture.test.js +561 -0
- package/ci/mechanism-325-3b-s2b-wiring.test.js +668 -0
- package/ci/mechanism-325-f1-doc-check.test.js +674 -0
- package/ci/mechanism-325-f2-doc-craft.test.js +597 -0
- package/ci/mechanism-325-f3-derived-views.test.js +798 -0
- package/ci/mechanism-325-f4-invariants.test.js +606 -0
- package/ci/mechanism-325-f4-projections.test.js +382 -0
- package/ci/mechanism-325-f4-qualification.test.js +228 -0
- package/ci/mechanism-325-f4-trust-boundary.test.js +880 -0
- package/ci/mechanism-365-step-edit-accounting.test.js +395 -0
- package/ci/mutation-check.js +26 -3
- package/docs/architecture.md +5 -0
- package/docs/doc-workflow-reconciliation.md +331 -4
- package/docs/document-lifecycle.md +11 -0
- package/docs/governed-index.md +20 -0
- package/docs/platform-capabilities.md +22 -2
- package/grill-with-docs/SKILL.md +1 -1
- package/grill-with-docs/references/session-playbook.md +4 -0
- package/harness-everything/SKILL.md +1 -1
- package/harness-everything/references/doc-check.md +186 -0
- package/harness-everything/references/documentation/_shared/maintenance.md +41 -0
- package/harness-everything/references/documentation/_shared/writing-craft.md +59 -0
- package/harness-everything/references/triage-and-tiers.md +4 -0
- package/harness-everything/scripts/doc-check.js +442 -0
- package/harness-everything/scripts/doc-lifecycle.js +3 -0
- package/hooks/hooks.json +46 -0
- package/hooks/scripts/lib/doc-reconciliation-capture.sanitized.jsonl +26 -0
- package/hooks/scripts/lib/doc-reconciliation-pilot.js +171 -2
- package/hooks/scripts/lib/doc-reconciliation-provider.js +1059 -0
- package/hooks/scripts/lib/doc-reconciliation-qualification.json +34 -0
- package/hooks/scripts/lib/workflow-obligations.js +7 -0
- package/hooks/scripts/state-persist.js +105 -3
- package/hooks/scripts/workflow-stop-gate.js +7 -2
- package/opencode-plugin/README.md +15 -0
- package/opencode-plugin/index.mjs +77 -0
- package/opencode-plugin/plugin.json +1 -1
- package/package.json +1 -1
- package/plugins/harness-everything/.codex-plugin/plugin.json +1 -1
- package/plugins/harness-everything/hooks/scripts/lib/doc-reconciliation-capture.sanitized.jsonl +26 -0
- package/plugins/harness-everything/hooks/scripts/lib/doc-reconciliation-pilot.js +171 -2
- package/plugins/harness-everything/hooks/scripts/lib/doc-reconciliation-provider.js +1059 -0
- package/plugins/harness-everything/hooks/scripts/lib/doc-reconciliation-qualification.json +34 -0
- package/plugins/harness-everything/hooks/scripts/lib/workflow-obligations.js +7 -0
- package/plugins/harness-everything/hooks/scripts/state-persist.js +105 -3
- package/plugins/harness-everything/hooks/scripts/workflow-stop-gate.js +7 -2
- package/plugins/harness-everything/plugin.json +1 -1
- package/plugins/harness-everything/skills/grill-with-docs/SKILL.md +1 -1
- package/plugins/harness-everything/skills/grill-with-docs/references/session-playbook.md +4 -0
- package/plugins/harness-everything/skills/harness-everything/SKILL.md +1 -1
- package/plugins/harness-everything/skills/harness-everything/references/doc-check.md +186 -0
- package/plugins/harness-everything/skills/harness-everything/references/documentation/_shared/maintenance.md +41 -0
- package/plugins/harness-everything/skills/harness-everything/references/documentation/_shared/writing-craft.md +59 -0
- package/plugins/harness-everything/skills/harness-everything/references/triage-and-tiers.md +4 -0
- package/plugins/harness-everything/skills/harness-everything/scripts/doc-check.js +442 -0
- package/plugins/harness-everything/skills/harness-everything/scripts/doc-lifecycle.js +3 -0
- package/plugins/harness-everything/skills/repo-docs/SKILL.md +1 -1
- package/plugins/harness-everything/skills/repo-docs/references/process-guide.md +4 -0
- package/plugins/harness-everything/skills/to-spec/SKILL.md +1 -1
- package/plugins/harness-everything/skills/to-spec/references/process.md +4 -0
- package/plugins/harness-everything/skills/to-tickets/SKILL.md +1 -1
- package/plugins/harness-everything/skills/to-tickets/references/publishing-and-templates.md +4 -0
- package/repo-docs/SKILL.md +1 -1
- package/repo-docs/references/process-guide.md +4 -0
- package/sbom.cdx.json +7 -7
- package/to-spec/SKILL.md +1 -1
- package/to-spec/references/process.md +4 -0
- package/to-tickets/SKILL.md +1 -1
- package/to-tickets/references/publishing-and-templates.md +4 -0
|
@@ -0,0 +1,1110 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"phase": "325-3b-I2-wiring",
|
|
4
|
+
"description": "R2c-2 S2b wiring corpus (new path registered for registry retirement). Same L1 replay contract as the reconciliation-prep corpus; cases are replayed by ci/mechanism-325-3b-s2b-wiring.test.js through fx.replayCase with unmodified lib code. baseFiles/candidateFiles are real git fixtures (baseline committed, candidate in the working tree). The input.config and input.task fields are declared test-origin fixtures. Host events are no longer declared: each one is delivered through a real hook entry as a hookDeliver action (F4-T1b). The current fixture runtime does not materialise config/task/hostEvents yet - that materialisation is part of the missing GREEN wiring implementation, and wiring assertions that need it are the expected RED of this suite, never synthesised.",
|
|
5
|
+
"cases": [
|
|
6
|
+
{
|
|
7
|
+
"id": "W-off-legacy",
|
|
8
|
+
"family": "WCTRL",
|
|
9
|
+
"description": "OFF early-return and legacy byte-equivalence pin: the S1 trio replays to its legacy completion, no pilot runtime report is written and no baseline is captured or persisted.",
|
|
10
|
+
"topology": "iterative-single-typed",
|
|
11
|
+
"requirements": [
|
|
12
|
+
{
|
|
13
|
+
"id": "req-docs",
|
|
14
|
+
"stepType": "doc-change",
|
|
15
|
+
"summary": "Update the PRD REQ text",
|
|
16
|
+
"acceptance": "normative PRD text is reviewed"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"id": "req-review",
|
|
20
|
+
"stepType": "review",
|
|
21
|
+
"summary": "Review the PRD change",
|
|
22
|
+
"acceptance": "reviewed scope and findings are recorded"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": "req-verify",
|
|
26
|
+
"stepType": "verification",
|
|
27
|
+
"summary": "Verify the PRD change",
|
|
28
|
+
"acceptance": "objective doc checks are recorded"
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"input": {
|
|
32
|
+
"baseFiles": {
|
|
33
|
+
".agents/harness-everything/project-docs.json": "{\n \"governed\": [\n {\n \"path\": \"docs/prd/**\",\n \"role\": \"prd\"\n },\n {\n \"path\": \"docs/adr/**\",\n \"role\": \"adr\"\n },\n {\n \"path\": \"docs/reference/**\",\n \"role\": \"reference\"\n }\n ],\n \"domains\": [\n \"GRPH\"\n ],\n \"legacy\": [\n \"docs/adr/legacy/**\"\n ],\n \"derived\": [\n {\n \"path\": \"docs/roadmap/index.md\",\n \"generator\": \"npm run docs:index\"\n }\n ],\n \"tickets\": \"tracker\"\n}\n",
|
|
34
|
+
"docs/prd/graph.md": "---\nid: \"PRD-GRPH-001\"\nrevision: 1\nstatus: \"effective\"\ndrafted_by: \"Alice Example\"\neffective_at: \"2026-10-17T00:01:00Z\"\napproval:\n by: \"Bob Independent\"\n at: \"2026-10-17T00:00:00Z\"\n ref: \"https://approvals.example.invalid/PRD-GRPH-001\"\n role: \"human\"\n content_digest: \"sha256:a103bf860ed9d2cf7100d93eb8f0e3c3bce322d47e0f9fd83914b5bcc264ef70\"\n---\n# Graph\n\n### REQ-GRPH-001\n\nThe router records one topology per task.\n\nAcceptance: exactly one topology is recorded.\n"
|
|
35
|
+
},
|
|
36
|
+
"candidateFiles": {
|
|
37
|
+
"docs/prd/graph.md": "---\nid: \"PRD-GRPH-001\"\nrevision: 1\nstatus: \"effective\"\ndrafted_by: \"Alice Example\"\neffective_at: \"2026-10-17T00:01:00Z\"\napproval:\n by: \"Bob Independent\"\n at: \"2026-10-17T00:00:00Z\"\n ref: \"https://approvals.example.invalid/PRD-GRPH-001\"\n role: \"human\"\n content_digest: \"sha256:c5bc6c8aa29b39198eec91b7af210a946896d9b7975b9c72540ddd4a4bfb37ea\"\n---\n# Graph\n\n### REQ-GRPH-001\n\nThe router records one or more topologies per task.\n\nAcceptance: one or more topologies are recorded.\n"
|
|
38
|
+
},
|
|
39
|
+
"config": {
|
|
40
|
+
"role": "declared-test-origin",
|
|
41
|
+
"deriveConfig": "ci/fixtures/doc-obligations/derive/config.json"
|
|
42
|
+
},
|
|
43
|
+
"task": {
|
|
44
|
+
"role": "declared-test-origin",
|
|
45
|
+
"taskId": "task-w-off-legacy",
|
|
46
|
+
"identityContract": "ci/fixtures/doc-obligations/reconciliation-prep/trust-contract.json"
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"actions": [
|
|
50
|
+
{
|
|
51
|
+
"id": "route",
|
|
52
|
+
"op": "route",
|
|
53
|
+
"payload": {
|
|
54
|
+
"prompt": "Update the PRD REQ text, review it, and verify it."
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"id": "plan",
|
|
59
|
+
"op": "plan",
|
|
60
|
+
"payload": {
|
|
61
|
+
"requirements": "$requirements",
|
|
62
|
+
"strategy": "iterative-single",
|
|
63
|
+
"evidence": "three dependent requirements fit a bounded documentation loop"
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"id": "start",
|
|
68
|
+
"op": "start",
|
|
69
|
+
"payload": {}
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"id": "doc-pass",
|
|
73
|
+
"op": "step",
|
|
74
|
+
"payload": {
|
|
75
|
+
"stepId": "req-docs",
|
|
76
|
+
"disposition": "pass",
|
|
77
|
+
"evidence": "PRD REQ text updated"
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"id": "review-pass",
|
|
82
|
+
"op": "step",
|
|
83
|
+
"payload": {
|
|
84
|
+
"stepId": "req-review",
|
|
85
|
+
"disposition": "pass",
|
|
86
|
+
"evidence": "review scope recorded"
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"id": "verify-bind",
|
|
91
|
+
"op": "binding",
|
|
92
|
+
"payload": {
|
|
93
|
+
"stepId": "req-verify",
|
|
94
|
+
"bindingId": "verification-loop",
|
|
95
|
+
"disposition": "loaded",
|
|
96
|
+
"evidence": "verification loop skill located"
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"id": "verify-pass",
|
|
101
|
+
"op": "step",
|
|
102
|
+
"payload": {
|
|
103
|
+
"stepId": "req-verify",
|
|
104
|
+
"disposition": "pass",
|
|
105
|
+
"evidence": "objective doc checks recorded"
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"id": "stop",
|
|
110
|
+
"op": "stop",
|
|
111
|
+
"payload": {}
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"id": "stop-generic",
|
|
115
|
+
"op": "stopGeneric",
|
|
116
|
+
"payload": {}
|
|
117
|
+
}
|
|
118
|
+
]
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"id": "W-credit-freshness",
|
|
122
|
+
"family": "WCREDIT",
|
|
123
|
+
"description": "Positive credit path and freshness withholding (supersedes P05.on.stop-on-2-withheld and P05.on.stop-on-3-withheld). With declared test-origin captures and the simulated qualifying live-capture artifact, the governed plan earns verification credit and the first Stop reports satisfied; a candidate mutation, a config mutation, an OFF stop and a re-ON stop stay withheld - stale credit never returns.",
|
|
124
|
+
"topology": "iterative-single-typed",
|
|
125
|
+
"requirements": [
|
|
126
|
+
{
|
|
127
|
+
"id": "req-docs",
|
|
128
|
+
"stepType": "doc-change",
|
|
129
|
+
"summary": "Update the PRD REQ text",
|
|
130
|
+
"acceptance": "normative PRD text is reviewed"
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"id": "req-review",
|
|
134
|
+
"stepType": "review",
|
|
135
|
+
"summary": "Review the PRD change",
|
|
136
|
+
"acceptance": "reviewed scope and findings are recorded"
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"id": "req-verify",
|
|
140
|
+
"stepType": "verification",
|
|
141
|
+
"summary": "Verify the PRD change",
|
|
142
|
+
"acceptance": "objective doc checks are recorded"
|
|
143
|
+
}
|
|
144
|
+
],
|
|
145
|
+
"input": {
|
|
146
|
+
"baseFiles": {
|
|
147
|
+
".agents/harness-everything/project-docs.json": "{\n \"governed\": [\n {\n \"path\": \"docs/prd/**\",\n \"role\": \"prd\"\n },\n {\n \"path\": \"docs/adr/**\",\n \"role\": \"adr\"\n },\n {\n \"path\": \"docs/reference/**\",\n \"role\": \"reference\"\n }\n ],\n \"domains\": [\n \"GRPH\"\n ],\n \"legacy\": [\n \"docs/adr/legacy/**\"\n ],\n \"derived\": [\n {\n \"path\": \"docs/roadmap/index.md\",\n \"generator\": \"npm run docs:index\"\n }\n ],\n \"tickets\": \"tracker\"\n}\n",
|
|
148
|
+
"docs/prd/graph.md": "---\nid: \"PRD-GRPH-001\"\nrevision: 1\nstatus: \"effective\"\ndrafted_by: \"Alice Example\"\neffective_at: \"2026-10-17T00:01:00Z\"\napproval:\n by: \"Bob Independent\"\n at: \"2026-10-17T00:00:00Z\"\n ref: \"https://approvals.example.invalid/PRD-GRPH-001\"\n role: \"human\"\n content_digest: \"sha256:a103bf860ed9d2cf7100d93eb8f0e3c3bce322d47e0f9fd83914b5bcc264ef70\"\n---\n# Graph\n\n### REQ-GRPH-001\n\nThe router records one topology per task.\n\nAcceptance: exactly one topology is recorded.\n"
|
|
149
|
+
},
|
|
150
|
+
"candidateFiles": {
|
|
151
|
+
"docs/prd/graph.md": "---\nid: \"PRD-GRPH-001\"\nrevision: 1\nstatus: \"effective\"\ndrafted_by: \"Alice Example\"\neffective_at: \"2026-10-17T00:01:00Z\"\napproval:\n by: \"Bob Independent\"\n at: \"2026-10-17T00:00:00Z\"\n ref: \"https://approvals.example.invalid/PRD-GRPH-001\"\n role: \"human\"\n content_digest: \"sha256:c5bc6c8aa29b39198eec91b7af210a946896d9b7975b9c72540ddd4a4bfb37ea\"\n---\n# Graph\n\n### REQ-GRPH-001\n\nThe router records one or more topologies per task.\n\nAcceptance: one or more topologies are recorded.\n"
|
|
152
|
+
},
|
|
153
|
+
"config": {
|
|
154
|
+
"role": "declared-test-origin",
|
|
155
|
+
"deriveConfig": "ci/fixtures/doc-obligations/derive/config.json"
|
|
156
|
+
},
|
|
157
|
+
"task": {
|
|
158
|
+
"role": "declared-test-origin",
|
|
159
|
+
"taskId": "task-w-credit-01",
|
|
160
|
+
"identityContract": "ci/fixtures/doc-obligations/reconciliation-prep/trust-contract.json"
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
"actions": [
|
|
164
|
+
{
|
|
165
|
+
"id": "route",
|
|
166
|
+
"op": "route",
|
|
167
|
+
"payload": {
|
|
168
|
+
"prompt": "Update the PRD REQ text, review it, and verify it."
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"id": "plan",
|
|
173
|
+
"op": "plan",
|
|
174
|
+
"payload": {
|
|
175
|
+
"requirements": "$requirements",
|
|
176
|
+
"strategy": "iterative-single",
|
|
177
|
+
"evidence": "three dependent requirements fit a bounded documentation loop"
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
"id": "start",
|
|
182
|
+
"op": "start",
|
|
183
|
+
"payload": {}
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"id": "doc-pass",
|
|
187
|
+
"op": "step",
|
|
188
|
+
"payload": {
|
|
189
|
+
"stepId": "req-docs",
|
|
190
|
+
"disposition": "pass",
|
|
191
|
+
"evidence": "PRD REQ text updated"
|
|
192
|
+
}
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
"id": "reviewer-agent-result",
|
|
196
|
+
"op": "hookDeliver",
|
|
197
|
+
"payload": {
|
|
198
|
+
"event": "PostToolUse",
|
|
199
|
+
"toolName": "Agent",
|
|
200
|
+
"command": "Agent: repo-docs-reviewer",
|
|
201
|
+
"toolUseId": "toolu_f4_reviewer_agent_W-credit-freshness",
|
|
202
|
+
"response": {
|
|
203
|
+
"agentId": "agent-f4-reviewer",
|
|
204
|
+
"status": "completed"
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
"id": "reviewer-stop",
|
|
210
|
+
"op": "hookDeliver",
|
|
211
|
+
"payload": {
|
|
212
|
+
"event": "SubagentStop",
|
|
213
|
+
"agentId": "agent-f4-reviewer",
|
|
214
|
+
"agentType": "repo-docs-reviewer",
|
|
215
|
+
"lastAssistantMessage": "Review verdict: approve. The PRD change keeps its acceptance criteria consistent.\nReviewed artifact: docs/prd/graph.md sha256:4d2b4ef924ba492f4de058d00eb7a27c91f0bad64f5fcb2eab28fb36e048ec6b"
|
|
216
|
+
}
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
"id": "review-pass",
|
|
220
|
+
"op": "step",
|
|
221
|
+
"payload": {
|
|
222
|
+
"stepId": "req-review",
|
|
223
|
+
"disposition": "pass",
|
|
224
|
+
"evidence": "independent host review approved the PRD change"
|
|
225
|
+
},
|
|
226
|
+
"expectExit": {
|
|
227
|
+
"on": [
|
|
228
|
+
0,
|
|
229
|
+
2
|
|
230
|
+
]
|
|
231
|
+
}
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
"id": "verify-bind",
|
|
235
|
+
"op": "binding",
|
|
236
|
+
"payload": {
|
|
237
|
+
"stepId": "req-verify",
|
|
238
|
+
"bindingId": "verification-loop",
|
|
239
|
+
"disposition": "loaded",
|
|
240
|
+
"evidence": "verification loop skill located"
|
|
241
|
+
}
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
"id": "verify-first",
|
|
245
|
+
"op": "step",
|
|
246
|
+
"payload": {
|
|
247
|
+
"stepId": "req-verify",
|
|
248
|
+
"disposition": "pass",
|
|
249
|
+
"evidence": "objective doc checks recorded with current host-origin reconciliation"
|
|
250
|
+
},
|
|
251
|
+
"expectExit": {
|
|
252
|
+
"on": [
|
|
253
|
+
0,
|
|
254
|
+
2
|
|
255
|
+
]
|
|
256
|
+
}
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
"id": "stop-on-1",
|
|
260
|
+
"op": "stop",
|
|
261
|
+
"payload": {}
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
"id": "mutate-candidate",
|
|
265
|
+
"op": "mutateIdentity",
|
|
266
|
+
"payload": {
|
|
267
|
+
"kind": "candidate",
|
|
268
|
+
"path": "docs/prd/graph.md",
|
|
269
|
+
"content": "---\nid: \"PRD-GRPH-001\"\nrevision: 1\nstatus: \"effective\"\ndrafted_by: \"Alice Example\"\neffective_at: \"2026-10-17T00:01:00Z\"\napproval:\n by: \"Bob Independent\"\n at: \"2026-10-17T00:00:00Z\"\n ref: \"https://approvals.example.invalid/PRD-GRPH-001\"\n role: \"human\"\n content_digest: \"sha256:c5bc6c8aa29b39198eec91b7af210a946896d9b7975b9c72540ddd4a4bfb37ea\"\n---\n# Graph\n\n### REQ-GRPH-001\n\nThe router records two or more topologies per task.\n\nAcceptance: two or more topologies are recorded.\n"
|
|
270
|
+
}
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
"id": "mutate-config",
|
|
274
|
+
"op": "mutateIdentity",
|
|
275
|
+
"payload": {
|
|
276
|
+
"kind": "config",
|
|
277
|
+
"path": ".agents/harness-everything/project-docs.json",
|
|
278
|
+
"content": "{\n \"governed\": [\n {\n \"path\": \"docs/prd/**\",\n \"role\": \"prd\"\n },\n {\n \"path\": \"docs/adr-extra/**\",\n \"role\": \"adr\"\n },\n {\n \"path\": \"docs/reference/**\",\n \"role\": \"reference\"\n }\n ],\n \"domains\": [\n \"GRPH\"\n ]\n}\n"
|
|
279
|
+
}
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
"id": "stop-on-2",
|
|
283
|
+
"op": "stop",
|
|
284
|
+
"payload": {}
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
"id": "stop-off",
|
|
288
|
+
"op": "stop",
|
|
289
|
+
"payload": {},
|
|
290
|
+
"pilot": "0"
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
"id": "stop-on-3",
|
|
294
|
+
"op": "stop",
|
|
295
|
+
"payload": {}
|
|
296
|
+
}
|
|
297
|
+
]
|
|
298
|
+
},
|
|
299
|
+
{
|
|
300
|
+
"id": "W-review-progression",
|
|
301
|
+
"family": "WREVIEW",
|
|
302
|
+
"description": "Review progression (supersedes P02e.on.review-pass-exit, P02e.on.stop-reports and P03.on.verify-retry-exit). A self-authored review PASS is refused, Stop reports the pending review step, an independent host review retry is accepted before any verifier record, the first verification attempt stays refused, and a later verification retry with the declared valid evidence completes.",
|
|
303
|
+
"topology": "iterative-single-typed",
|
|
304
|
+
"requirements": [
|
|
305
|
+
{
|
|
306
|
+
"id": "req-docs",
|
|
307
|
+
"stepType": "doc-change",
|
|
308
|
+
"summary": "Update the PRD REQ text",
|
|
309
|
+
"acceptance": "normative PRD text is reviewed"
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
"id": "req-review",
|
|
313
|
+
"stepType": "review",
|
|
314
|
+
"summary": "Review the PRD change",
|
|
315
|
+
"acceptance": "reviewed scope and findings are recorded"
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
"id": "req-verify",
|
|
319
|
+
"stepType": "verification",
|
|
320
|
+
"summary": "Verify the PRD change",
|
|
321
|
+
"acceptance": "objective doc checks are recorded"
|
|
322
|
+
}
|
|
323
|
+
],
|
|
324
|
+
"input": {
|
|
325
|
+
"baseFiles": {
|
|
326
|
+
".agents/harness-everything/project-docs.json": "{\n \"governed\": [\n {\n \"path\": \"docs/prd/**\",\n \"role\": \"prd\"\n },\n {\n \"path\": \"docs/adr/**\",\n \"role\": \"adr\"\n },\n {\n \"path\": \"docs/reference/**\",\n \"role\": \"reference\"\n }\n ],\n \"domains\": [\n \"GRPH\"\n ],\n \"legacy\": [\n \"docs/adr/legacy/**\"\n ],\n \"derived\": [\n {\n \"path\": \"docs/roadmap/index.md\",\n \"generator\": \"npm run docs:index\"\n }\n ],\n \"tickets\": \"tracker\"\n}\n",
|
|
327
|
+
"docs/prd/graph.md": "---\nid: \"PRD-GRPH-001\"\nrevision: 1\nstatus: \"effective\"\ndrafted_by: \"Alice Example\"\neffective_at: \"2026-10-17T00:01:00Z\"\napproval:\n by: \"Bob Independent\"\n at: \"2026-10-17T00:00:00Z\"\n ref: \"https://approvals.example.invalid/PRD-GRPH-001\"\n role: \"human\"\n content_digest: \"sha256:a103bf860ed9d2cf7100d93eb8f0e3c3bce322d47e0f9fd83914b5bcc264ef70\"\n---\n# Graph\n\n### REQ-GRPH-001\n\nThe router records one topology per task.\n\nAcceptance: exactly one topology is recorded.\n"
|
|
328
|
+
},
|
|
329
|
+
"candidateFiles": {
|
|
330
|
+
"docs/prd/graph.md": "---\nid: \"PRD-GRPH-001\"\nrevision: 1\nstatus: \"effective\"\ndrafted_by: \"Alice Example\"\neffective_at: \"2026-10-17T00:01:00Z\"\napproval:\n by: \"Bob Independent\"\n at: \"2026-10-17T00:00:00Z\"\n ref: \"https://approvals.example.invalid/PRD-GRPH-001\"\n role: \"human\"\n content_digest: \"sha256:c5bc6c8aa29b39198eec91b7af210a946896d9b7975b9c72540ddd4a4bfb37ea\"\n---\n# Graph\n\n### REQ-GRPH-001\n\nThe router records one or more topologies per task.\n\nAcceptance: one or more topologies are recorded.\n"
|
|
331
|
+
},
|
|
332
|
+
"config": {
|
|
333
|
+
"role": "declared-test-origin",
|
|
334
|
+
"deriveConfig": "ci/fixtures/doc-obligations/derive/config.json"
|
|
335
|
+
},
|
|
336
|
+
"task": {
|
|
337
|
+
"role": "declared-test-origin",
|
|
338
|
+
"taskId": "task-w-review-01",
|
|
339
|
+
"identityContract": "ci/fixtures/doc-obligations/reconciliation-prep/trust-contract.json"
|
|
340
|
+
}
|
|
341
|
+
},
|
|
342
|
+
"actions": [
|
|
343
|
+
{
|
|
344
|
+
"id": "route",
|
|
345
|
+
"op": "route",
|
|
346
|
+
"payload": {
|
|
347
|
+
"prompt": "Update the PRD REQ text, review it, and verify it."
|
|
348
|
+
}
|
|
349
|
+
},
|
|
350
|
+
{
|
|
351
|
+
"id": "plan",
|
|
352
|
+
"op": "plan",
|
|
353
|
+
"payload": {
|
|
354
|
+
"requirements": "$requirements",
|
|
355
|
+
"strategy": "iterative-single",
|
|
356
|
+
"evidence": "three dependent requirements fit a bounded documentation loop"
|
|
357
|
+
}
|
|
358
|
+
},
|
|
359
|
+
{
|
|
360
|
+
"id": "start",
|
|
361
|
+
"op": "start",
|
|
362
|
+
"payload": {}
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
"id": "doc-pass",
|
|
366
|
+
"op": "step",
|
|
367
|
+
"payload": {
|
|
368
|
+
"stepId": "req-docs",
|
|
369
|
+
"disposition": "pass",
|
|
370
|
+
"evidence": "PRD REQ text updated"
|
|
371
|
+
}
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
"id": "review-self",
|
|
375
|
+
"op": "step",
|
|
376
|
+
"payload": {
|
|
377
|
+
"stepId": "req-review",
|
|
378
|
+
"disposition": "pass",
|
|
379
|
+
"evidence": "the author reviewed the change"
|
|
380
|
+
},
|
|
381
|
+
"expectExit": {
|
|
382
|
+
"on": [
|
|
383
|
+
0,
|
|
384
|
+
2
|
|
385
|
+
]
|
|
386
|
+
}
|
|
387
|
+
},
|
|
388
|
+
{
|
|
389
|
+
"id": "stop-mid",
|
|
390
|
+
"op": "stop",
|
|
391
|
+
"payload": {}
|
|
392
|
+
},
|
|
393
|
+
{
|
|
394
|
+
"id": "reviewer-agent-result",
|
|
395
|
+
"op": "hookDeliver",
|
|
396
|
+
"payload": {
|
|
397
|
+
"event": "PostToolUse",
|
|
398
|
+
"toolName": "Agent",
|
|
399
|
+
"command": "Agent: repo-docs-reviewer",
|
|
400
|
+
"toolUseId": "toolu_f4_reviewer_agent_W-review-progression",
|
|
401
|
+
"response": {
|
|
402
|
+
"agentId": "agent-f4-reviewer",
|
|
403
|
+
"status": "completed"
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
},
|
|
407
|
+
{
|
|
408
|
+
"id": "reviewer-stop",
|
|
409
|
+
"op": "hookDeliver",
|
|
410
|
+
"payload": {
|
|
411
|
+
"event": "SubagentStop",
|
|
412
|
+
"agentId": "agent-f4-reviewer",
|
|
413
|
+
"agentType": "repo-docs-reviewer",
|
|
414
|
+
"lastAssistantMessage": "Review verdict: approve. The PRD change keeps its acceptance criteria consistent.\nReviewed artifact: docs/prd/graph.md sha256:4d2b4ef924ba492f4de058d00eb7a27c91f0bad64f5fcb2eab28fb36e048ec6b"
|
|
415
|
+
}
|
|
416
|
+
},
|
|
417
|
+
{
|
|
418
|
+
"id": "review-retry",
|
|
419
|
+
"op": "step",
|
|
420
|
+
"payload": {
|
|
421
|
+
"stepId": "req-review",
|
|
422
|
+
"disposition": "pass",
|
|
423
|
+
"evidence": "independent host review approved the PRD change"
|
|
424
|
+
},
|
|
425
|
+
"expectExit": {
|
|
426
|
+
"on": [
|
|
427
|
+
0,
|
|
428
|
+
2
|
|
429
|
+
]
|
|
430
|
+
}
|
|
431
|
+
},
|
|
432
|
+
{
|
|
433
|
+
"id": "verify-bind",
|
|
434
|
+
"op": "binding",
|
|
435
|
+
"payload": {
|
|
436
|
+
"stepId": "req-verify",
|
|
437
|
+
"bindingId": "verification-loop",
|
|
438
|
+
"disposition": "loaded",
|
|
439
|
+
"evidence": "verification loop skill located"
|
|
440
|
+
}
|
|
441
|
+
},
|
|
442
|
+
{
|
|
443
|
+
"id": "verify-pass",
|
|
444
|
+
"op": "step",
|
|
445
|
+
"payload": {
|
|
446
|
+
"stepId": "req-verify",
|
|
447
|
+
"disposition": "pass",
|
|
448
|
+
"evidence": "verification attempted before evidence arrived"
|
|
449
|
+
},
|
|
450
|
+
"expectExit": {
|
|
451
|
+
"on": [
|
|
452
|
+
0,
|
|
453
|
+
2
|
|
454
|
+
]
|
|
455
|
+
}
|
|
456
|
+
},
|
|
457
|
+
{
|
|
458
|
+
"id": "verify-retry",
|
|
459
|
+
"op": "step",
|
|
460
|
+
"payload": {
|
|
461
|
+
"stepId": "req-verify",
|
|
462
|
+
"disposition": "pass",
|
|
463
|
+
"evidence": "verification retried with current host-origin evidence"
|
|
464
|
+
},
|
|
465
|
+
"expectExit": {
|
|
466
|
+
"on": [
|
|
467
|
+
0,
|
|
468
|
+
2
|
|
469
|
+
]
|
|
470
|
+
}
|
|
471
|
+
},
|
|
472
|
+
{
|
|
473
|
+
"id": "stop",
|
|
474
|
+
"op": "stop",
|
|
475
|
+
"payload": {}
|
|
476
|
+
},
|
|
477
|
+
{
|
|
478
|
+
"id": "stop-generic",
|
|
479
|
+
"op": "stopGeneric",
|
|
480
|
+
"payload": {}
|
|
481
|
+
}
|
|
482
|
+
]
|
|
483
|
+
},
|
|
484
|
+
{
|
|
485
|
+
"id": "W-review-no-surface",
|
|
486
|
+
"family": "WREVIEW",
|
|
487
|
+
"description": "F4-T5 conflict 3: an independent reviewer SubagentStop with no correlated Agent/Task result surface is not approved (F5). The review step stays pending; no review credit.",
|
|
488
|
+
"topology": "iterative-single-typed",
|
|
489
|
+
"requirements": [
|
|
490
|
+
{
|
|
491
|
+
"id": "req-docs",
|
|
492
|
+
"stepType": "doc-change",
|
|
493
|
+
"summary": "Update the PRD REQ text",
|
|
494
|
+
"acceptance": "normative PRD text is reviewed"
|
|
495
|
+
},
|
|
496
|
+
{
|
|
497
|
+
"id": "req-review",
|
|
498
|
+
"stepType": "review",
|
|
499
|
+
"summary": "Review the PRD change",
|
|
500
|
+
"acceptance": "reviewed scope and findings are recorded"
|
|
501
|
+
},
|
|
502
|
+
{
|
|
503
|
+
"id": "req-verify",
|
|
504
|
+
"stepType": "verification",
|
|
505
|
+
"summary": "Verify the PRD change",
|
|
506
|
+
"acceptance": "objective doc checks are recorded"
|
|
507
|
+
}
|
|
508
|
+
],
|
|
509
|
+
"input": {
|
|
510
|
+
"baseFiles": {
|
|
511
|
+
".agents/harness-everything/project-docs.json": "{\n \"governed\": [\n {\n \"path\": \"docs/prd/**\",\n \"role\": \"prd\"\n },\n {\n \"path\": \"docs/adr/**\",\n \"role\": \"adr\"\n },\n {\n \"path\": \"docs/reference/**\",\n \"role\": \"reference\"\n }\n ],\n \"domains\": [\n \"GRPH\"\n ],\n \"legacy\": [\n \"docs/adr/legacy/**\"\n ],\n \"derived\": [\n {\n \"path\": \"docs/roadmap/index.md\",\n \"generator\": \"npm run docs:index\"\n }\n ],\n \"tickets\": \"tracker\"\n}\n",
|
|
512
|
+
"docs/prd/graph.md": "---\nid: \"PRD-GRPH-001\"\nrevision: 1\nstatus: \"effective\"\ndrafted_by: \"Alice Example\"\neffective_at: \"2026-10-17T00:01:00Z\"\napproval:\n by: \"Bob Independent\"\n at: \"2026-10-17T00:00:00Z\"\n ref: \"https://approvals.example.invalid/PRD-GRPH-001\"\n role: \"human\"\n content_digest: \"sha256:a103bf860ed9d2cf7100d93eb8f0e3c3bce322d47e0f9fd83914b5bcc264ef70\"\n---\n# Graph\n\n### REQ-GRPH-001\n\nThe router records one topology per task.\n\nAcceptance: exactly one topology is recorded.\n"
|
|
513
|
+
},
|
|
514
|
+
"candidateFiles": {
|
|
515
|
+
"docs/prd/graph.md": "---\nid: \"PRD-GRPH-001\"\nrevision: 1\nstatus: \"effective\"\ndrafted_by: \"Alice Example\"\neffective_at: \"2026-10-17T00:01:00Z\"\napproval:\n by: \"Bob Independent\"\n at: \"2026-10-17T00:00:00Z\"\n ref: \"https://approvals.example.invalid/PRD-GRPH-001\"\n role: \"human\"\n content_digest: \"sha256:c5bc6c8aa29b39198eec91b7af210a946896d9b7975b9c72540ddd4a4bfb37ea\"\n---\n# Graph\n\n### REQ-GRPH-001\n\nThe router records one or more topologies per task.\n\nAcceptance: one or more topologies are recorded.\n"
|
|
516
|
+
},
|
|
517
|
+
"config": {
|
|
518
|
+
"role": "declared-test-origin",
|
|
519
|
+
"deriveConfig": "ci/fixtures/doc-obligations/derive/config.json"
|
|
520
|
+
},
|
|
521
|
+
"task": {
|
|
522
|
+
"role": "declared-test-origin",
|
|
523
|
+
"taskId": "task-w-review-01",
|
|
524
|
+
"identityContract": "ci/fixtures/doc-obligations/reconciliation-prep/trust-contract.json"
|
|
525
|
+
}
|
|
526
|
+
},
|
|
527
|
+
"actions": [
|
|
528
|
+
{
|
|
529
|
+
"id": "route",
|
|
530
|
+
"op": "route",
|
|
531
|
+
"payload": {
|
|
532
|
+
"prompt": "Update the PRD REQ text, review it, and verify it."
|
|
533
|
+
}
|
|
534
|
+
},
|
|
535
|
+
{
|
|
536
|
+
"id": "plan",
|
|
537
|
+
"op": "plan",
|
|
538
|
+
"payload": {
|
|
539
|
+
"requirements": "$requirements",
|
|
540
|
+
"strategy": "iterative-single",
|
|
541
|
+
"evidence": "three dependent requirements fit a bounded documentation loop"
|
|
542
|
+
}
|
|
543
|
+
},
|
|
544
|
+
{
|
|
545
|
+
"id": "start",
|
|
546
|
+
"op": "start",
|
|
547
|
+
"payload": {}
|
|
548
|
+
},
|
|
549
|
+
{
|
|
550
|
+
"id": "doc-pass",
|
|
551
|
+
"op": "step",
|
|
552
|
+
"payload": {
|
|
553
|
+
"stepId": "req-docs",
|
|
554
|
+
"disposition": "pass",
|
|
555
|
+
"evidence": "PRD REQ text updated"
|
|
556
|
+
}
|
|
557
|
+
},
|
|
558
|
+
{
|
|
559
|
+
"id": "review-self",
|
|
560
|
+
"op": "step",
|
|
561
|
+
"payload": {
|
|
562
|
+
"stepId": "req-review",
|
|
563
|
+
"disposition": "pass",
|
|
564
|
+
"evidence": "the author reviewed the change"
|
|
565
|
+
},
|
|
566
|
+
"expectExit": {
|
|
567
|
+
"on": [
|
|
568
|
+
0,
|
|
569
|
+
2
|
|
570
|
+
]
|
|
571
|
+
}
|
|
572
|
+
},
|
|
573
|
+
{
|
|
574
|
+
"id": "stop-mid",
|
|
575
|
+
"op": "stop",
|
|
576
|
+
"payload": {}
|
|
577
|
+
},
|
|
578
|
+
{
|
|
579
|
+
"id": "reviewer-stop",
|
|
580
|
+
"op": "hookDeliver",
|
|
581
|
+
"payload": {
|
|
582
|
+
"event": "SubagentStop",
|
|
583
|
+
"agentId": "agent-f4-reviewer",
|
|
584
|
+
"agentType": "repo-docs-reviewer",
|
|
585
|
+
"lastAssistantMessage": "Review verdict: approve. The PRD change keeps its acceptance criteria consistent.\nReviewed artifact: docs/prd/graph.md sha256:4d2b4ef924ba492f4de058d00eb7a27c91f0bad64f5fcb2eab28fb36e048ec6b"
|
|
586
|
+
}
|
|
587
|
+
},
|
|
588
|
+
{
|
|
589
|
+
"id": "review-retry",
|
|
590
|
+
"op": "step",
|
|
591
|
+
"payload": {
|
|
592
|
+
"stepId": "req-review",
|
|
593
|
+
"disposition": "pass",
|
|
594
|
+
"evidence": "independent host review approved the PRD change"
|
|
595
|
+
},
|
|
596
|
+
"expectExit": {
|
|
597
|
+
"on": [
|
|
598
|
+
2
|
|
599
|
+
]
|
|
600
|
+
}
|
|
601
|
+
},
|
|
602
|
+
{
|
|
603
|
+
"id": "stop",
|
|
604
|
+
"op": "stop",
|
|
605
|
+
"payload": {}
|
|
606
|
+
}
|
|
607
|
+
]
|
|
608
|
+
},
|
|
609
|
+
{
|
|
610
|
+
"id": "W-ctrl-nondoc-on",
|
|
611
|
+
"family": "WCTRL",
|
|
612
|
+
"description": "Strengthened non-document ON control derived from the committed P06 row: a complete non-document workflow keeps its legacy satisfied decision under an ON switch, both Stop surfaces still exit 0, and the pilot never fabricates verified document credit.",
|
|
613
|
+
"topology": "iterative-single-typed",
|
|
614
|
+
"requirements": [
|
|
615
|
+
{
|
|
616
|
+
"id": "req-code",
|
|
617
|
+
"stepType": "behavior-change",
|
|
618
|
+
"summary": "Fix the checkout failure",
|
|
619
|
+
"acceptance": "the failing scenario succeeds"
|
|
620
|
+
},
|
|
621
|
+
{
|
|
622
|
+
"id": "req-verify",
|
|
623
|
+
"stepType": "verification",
|
|
624
|
+
"summary": "Verify the checkout change",
|
|
625
|
+
"acceptance": "objective check evidence is recorded"
|
|
626
|
+
}
|
|
627
|
+
],
|
|
628
|
+
"input": {
|
|
629
|
+
"baseFiles": {
|
|
630
|
+
".agents/harness-everything/project-docs.json": "{\n \"governed\": [\n {\n \"path\": \"docs/prd/**\",\n \"role\": \"prd\"\n },\n {\n \"path\": \"docs/adr/**\",\n \"role\": \"adr\"\n },\n {\n \"path\": \"docs/reference/**\",\n \"role\": \"reference\"\n }\n ],\n \"domains\": [\n \"GRPH\"\n ],\n \"legacy\": [\n \"docs/adr/legacy/**\"\n ],\n \"derived\": [\n {\n \"path\": \"docs/roadmap/index.md\",\n \"generator\": \"npm run docs:index\"\n }\n ],\n \"tickets\": \"tracker\"\n}\n",
|
|
631
|
+
"assets/notes.txt": "Release notes draft.\n"
|
|
632
|
+
},
|
|
633
|
+
"candidateFiles": {
|
|
634
|
+
"assets/notes.txt": "Release notes draft, revised.\n"
|
|
635
|
+
},
|
|
636
|
+
"config": {
|
|
637
|
+
"role": "declared-test-origin",
|
|
638
|
+
"deriveConfig": "ci/fixtures/doc-obligations/derive/config.json"
|
|
639
|
+
},
|
|
640
|
+
"task": {
|
|
641
|
+
"role": "declared-test-origin",
|
|
642
|
+
"taskId": "task-w-nondoc-01",
|
|
643
|
+
"identityContract": "ci/fixtures/doc-obligations/reconciliation-prep/trust-contract.json"
|
|
644
|
+
}
|
|
645
|
+
},
|
|
646
|
+
"actions": [
|
|
647
|
+
{
|
|
648
|
+
"id": "route",
|
|
649
|
+
"op": "route",
|
|
650
|
+
"payload": {
|
|
651
|
+
"prompt": "Fix this checkout bug and add a regression test."
|
|
652
|
+
}
|
|
653
|
+
},
|
|
654
|
+
{
|
|
655
|
+
"id": "plan",
|
|
656
|
+
"op": "plan",
|
|
657
|
+
"payload": {
|
|
658
|
+
"requirements": "$requirements",
|
|
659
|
+
"strategy": "iterative-single",
|
|
660
|
+
"evidence": "two dependent requirements fit a bounded test-fix-verify loop"
|
|
661
|
+
}
|
|
662
|
+
},
|
|
663
|
+
{
|
|
664
|
+
"id": "start",
|
|
665
|
+
"op": "start",
|
|
666
|
+
"payload": {}
|
|
667
|
+
},
|
|
668
|
+
{
|
|
669
|
+
"id": "direct-execute",
|
|
670
|
+
"op": "obligation",
|
|
671
|
+
"payload": {
|
|
672
|
+
"obligationId": "execute",
|
|
673
|
+
"disposition": "pass",
|
|
674
|
+
"evidence": "typed execution steps are underway"
|
|
675
|
+
}
|
|
676
|
+
},
|
|
677
|
+
{
|
|
678
|
+
"id": "tdd-bind",
|
|
679
|
+
"op": "binding",
|
|
680
|
+
"payload": {
|
|
681
|
+
"stepId": "req-code",
|
|
682
|
+
"bindingId": "tdd",
|
|
683
|
+
"disposition": "loaded",
|
|
684
|
+
"evidence": "tdd skill located"
|
|
685
|
+
}
|
|
686
|
+
},
|
|
687
|
+
{
|
|
688
|
+
"id": "code-pass",
|
|
689
|
+
"op": "step",
|
|
690
|
+
"payload": {
|
|
691
|
+
"stepId": "req-code",
|
|
692
|
+
"disposition": "pass",
|
|
693
|
+
"evidence": "regression test added"
|
|
694
|
+
}
|
|
695
|
+
},
|
|
696
|
+
{
|
|
697
|
+
"id": "verify-bind",
|
|
698
|
+
"op": "binding",
|
|
699
|
+
"payload": {
|
|
700
|
+
"stepId": "req-verify",
|
|
701
|
+
"bindingId": "verification-loop",
|
|
702
|
+
"disposition": "loaded",
|
|
703
|
+
"evidence": "verification loop skill located"
|
|
704
|
+
}
|
|
705
|
+
},
|
|
706
|
+
{
|
|
707
|
+
"id": "verify-pass",
|
|
708
|
+
"op": "step",
|
|
709
|
+
"payload": {
|
|
710
|
+
"stepId": "req-verify",
|
|
711
|
+
"disposition": "pass",
|
|
712
|
+
"evidence": "objective check recorded"
|
|
713
|
+
}
|
|
714
|
+
},
|
|
715
|
+
{
|
|
716
|
+
"id": "stop",
|
|
717
|
+
"op": "stop",
|
|
718
|
+
"payload": {}
|
|
719
|
+
},
|
|
720
|
+
{
|
|
721
|
+
"id": "stop-generic",
|
|
722
|
+
"op": "stopGeneric",
|
|
723
|
+
"payload": {}
|
|
724
|
+
}
|
|
725
|
+
]
|
|
726
|
+
},
|
|
727
|
+
{
|
|
728
|
+
"id": "W-strict-oldpass-governed",
|
|
729
|
+
"family": "WSTRICT",
|
|
730
|
+
"description": "A2 section 4 strict row: a genuinely satisfied non-document workflow whose recorded authoring history must remain, after governed content appears mid-workflow Stop revokes completion credit without panicking and without letting the new scope silently inherit the old PASS.",
|
|
731
|
+
"topology": "iterative-single-typed",
|
|
732
|
+
"requirements": [
|
|
733
|
+
{
|
|
734
|
+
"id": "req-code",
|
|
735
|
+
"stepType": "behavior-change",
|
|
736
|
+
"summary": "Fix the checkout failure",
|
|
737
|
+
"acceptance": "the failing scenario succeeds"
|
|
738
|
+
},
|
|
739
|
+
{
|
|
740
|
+
"id": "req-verify",
|
|
741
|
+
"stepType": "verification",
|
|
742
|
+
"summary": "Verify the checkout change",
|
|
743
|
+
"acceptance": "objective check evidence is recorded"
|
|
744
|
+
}
|
|
745
|
+
],
|
|
746
|
+
"input": {
|
|
747
|
+
"baseFiles": {
|
|
748
|
+
".agents/harness-everything/project-docs.json": "{\n \"governed\": [\n {\n \"path\": \"docs/prd/**\",\n \"role\": \"prd\"\n },\n {\n \"path\": \"docs/adr/**\",\n \"role\": \"adr\"\n },\n {\n \"path\": \"docs/reference/**\",\n \"role\": \"reference\"\n }\n ],\n \"domains\": [\n \"GRPH\"\n ],\n \"legacy\": [\n \"docs/adr/legacy/**\"\n ],\n \"derived\": [\n {\n \"path\": \"docs/roadmap/index.md\",\n \"generator\": \"npm run docs:index\"\n }\n ],\n \"tickets\": \"tracker\"\n}\n",
|
|
749
|
+
"assets/notes.txt": "Release notes draft.\n",
|
|
750
|
+
"docs/adr/GRPH-001.md": "# GRPH-001 Checkout retry\n\nStatus: accepted\n\nCheckout MUST retry once.\n"
|
|
751
|
+
},
|
|
752
|
+
"candidateFiles": {},
|
|
753
|
+
"config": {
|
|
754
|
+
"role": "declared-test-origin",
|
|
755
|
+
"deriveConfig": "ci/fixtures/doc-obligations/derive/config.json"
|
|
756
|
+
},
|
|
757
|
+
"task": {
|
|
758
|
+
"role": "declared-test-origin",
|
|
759
|
+
"taskId": "task-w-scope-01",
|
|
760
|
+
"identityContract": "ci/fixtures/doc-obligations/reconciliation-prep/trust-contract.json"
|
|
761
|
+
}
|
|
762
|
+
},
|
|
763
|
+
"actions": [
|
|
764
|
+
{
|
|
765
|
+
"id": "route",
|
|
766
|
+
"op": "route",
|
|
767
|
+
"payload": {
|
|
768
|
+
"prompt": "Fix this checkout bug and add a regression test."
|
|
769
|
+
}
|
|
770
|
+
},
|
|
771
|
+
{
|
|
772
|
+
"id": "plan",
|
|
773
|
+
"op": "plan",
|
|
774
|
+
"payload": {
|
|
775
|
+
"requirements": "$requirements",
|
|
776
|
+
"strategy": "iterative-single",
|
|
777
|
+
"evidence": "two dependent requirements fit a bounded test-fix-verify loop"
|
|
778
|
+
}
|
|
779
|
+
},
|
|
780
|
+
{
|
|
781
|
+
"id": "start",
|
|
782
|
+
"op": "start",
|
|
783
|
+
"payload": {}
|
|
784
|
+
},
|
|
785
|
+
{
|
|
786
|
+
"id": "tdd-bind",
|
|
787
|
+
"op": "binding",
|
|
788
|
+
"payload": {
|
|
789
|
+
"stepId": "req-code",
|
|
790
|
+
"bindingId": "tdd",
|
|
791
|
+
"disposition": "loaded",
|
|
792
|
+
"evidence": "tdd skill located"
|
|
793
|
+
}
|
|
794
|
+
},
|
|
795
|
+
{
|
|
796
|
+
"id": "code-pass",
|
|
797
|
+
"op": "step",
|
|
798
|
+
"payload": {
|
|
799
|
+
"stepId": "req-code",
|
|
800
|
+
"disposition": "pass",
|
|
801
|
+
"evidence": "regression test added"
|
|
802
|
+
}
|
|
803
|
+
},
|
|
804
|
+
{
|
|
805
|
+
"id": "verify-bind",
|
|
806
|
+
"op": "binding",
|
|
807
|
+
"payload": {
|
|
808
|
+
"stepId": "req-verify",
|
|
809
|
+
"bindingId": "verification-loop",
|
|
810
|
+
"disposition": "loaded",
|
|
811
|
+
"evidence": "verification loop skill located"
|
|
812
|
+
}
|
|
813
|
+
},
|
|
814
|
+
{
|
|
815
|
+
"id": "verify-pass",
|
|
816
|
+
"op": "step",
|
|
817
|
+
"payload": {
|
|
818
|
+
"stepId": "req-verify",
|
|
819
|
+
"disposition": "pass",
|
|
820
|
+
"evidence": "objective check recorded"
|
|
821
|
+
}
|
|
822
|
+
},
|
|
823
|
+
{
|
|
824
|
+
"id": "stop-satisfied",
|
|
825
|
+
"op": "stop",
|
|
826
|
+
"payload": {}
|
|
827
|
+
},
|
|
828
|
+
{
|
|
829
|
+
"id": "add-governed-adr",
|
|
830
|
+
"op": "mutateIdentity",
|
|
831
|
+
"payload": {
|
|
832
|
+
"kind": "candidate",
|
|
833
|
+
"path": "docs/adr/GRPH-020.md",
|
|
834
|
+
"content": "# GRPH-020 Operator record\n\nStatus: accepted\n\nHandling MUST record the operator.\n"
|
|
835
|
+
}
|
|
836
|
+
},
|
|
837
|
+
{
|
|
838
|
+
"id": "stop-recheck",
|
|
839
|
+
"op": "stop",
|
|
840
|
+
"payload": {}
|
|
841
|
+
}
|
|
842
|
+
]
|
|
843
|
+
},
|
|
844
|
+
{
|
|
845
|
+
"id": "W-strict-f3-pin",
|
|
846
|
+
"family": "WSTRICT",
|
|
847
|
+
"description": "A2 section 4 strict row (F3): a governed candidate whose PRD was renamed commits mid-workflow; the pinned pilot baseline must not advance to the new HEAD, all rename-endpoint content stays attributed to its endpoints, and the assessment never re-derives scope from the committed tree.",
|
|
848
|
+
"topology": "iterative-single-typed",
|
|
849
|
+
"requirements": [
|
|
850
|
+
{
|
|
851
|
+
"id": "req-docs",
|
|
852
|
+
"stepType": "doc-change",
|
|
853
|
+
"summary": "Update the PRD REQ text",
|
|
854
|
+
"acceptance": "normative PRD text is reviewed"
|
|
855
|
+
},
|
|
856
|
+
{
|
|
857
|
+
"id": "req-review",
|
|
858
|
+
"stepType": "review",
|
|
859
|
+
"summary": "Review the PRD change",
|
|
860
|
+
"acceptance": "reviewed scope and findings are recorded"
|
|
861
|
+
},
|
|
862
|
+
{
|
|
863
|
+
"id": "req-verify",
|
|
864
|
+
"stepType": "verification",
|
|
865
|
+
"summary": "Verify the PRD change",
|
|
866
|
+
"acceptance": "objective doc checks are recorded"
|
|
867
|
+
}
|
|
868
|
+
],
|
|
869
|
+
"input": {
|
|
870
|
+
"baseFiles": {
|
|
871
|
+
".agents/harness-everything/project-docs.json": "{\n \"governed\": [\n {\n \"path\": \"docs/prd/**\",\n \"role\": \"prd\"\n },\n {\n \"path\": \"docs/adr/**\",\n \"role\": \"adr\"\n },\n {\n \"path\": \"docs/reference/**\",\n \"role\": \"reference\"\n }\n ],\n \"domains\": [\n \"GRPH\"\n ],\n \"legacy\": [\n \"docs/adr/legacy/**\"\n ],\n \"derived\": [\n {\n \"path\": \"docs/roadmap/index.md\",\n \"generator\": \"npm run docs:index\"\n }\n ],\n \"tickets\": \"tracker\"\n}\n",
|
|
872
|
+
"docs/prd/graph.md": "---\nid: \"PRD-GRPH-001\"\nrevision: 1\nstatus: \"effective\"\ndrafted_by: \"Alice Example\"\neffective_at: \"2026-10-17T00:01:00Z\"\napproval:\n by: \"Bob Independent\"\n at: \"2026-10-17T00:00:00Z\"\n ref: \"https://approvals.example.invalid/PRD-GRPH-001\"\n role: \"human\"\n content_digest: \"sha256:a103bf860ed9d2cf7100d93eb8f0e3c3bce322d47e0f9fd83914b5bcc264ef70\"\n---\n# Graph\n\n### REQ-GRPH-001\n\nThe router records one topology per task.\n\nAcceptance: exactly one topology is recorded.\n"
|
|
873
|
+
},
|
|
874
|
+
"candidateFiles": {
|
|
875
|
+
"docs/prd/graph.md": null,
|
|
876
|
+
"docs/prd/graph-renamed.md": "---\nid: \"PRD-GRPH-001\"\nrevision: 1\nstatus: \"effective\"\ndrafted_by: \"Alice Example\"\neffective_at: \"2026-10-17T00:01:00Z\"\napproval:\n by: \"Bob Independent\"\n at: \"2026-10-17T00:00:00Z\"\n ref: \"https://approvals.example.invalid/PRD-GRPH-001\"\n role: \"human\"\n content_digest: \"sha256:c5bc6c8aa29b39198eec91b7af210a946896d9b7975b9c72540ddd4a4bfb37ea\"\n---\n# Graph\n\n### REQ-GRPH-001\n\nThe router records one or more topologies per task.\n\nAcceptance: one or more topologies are recorded.\n"
|
|
877
|
+
},
|
|
878
|
+
"config": {
|
|
879
|
+
"role": "declared-test-origin",
|
|
880
|
+
"deriveConfig": "ci/fixtures/doc-obligations/derive/config.json"
|
|
881
|
+
},
|
|
882
|
+
"task": {
|
|
883
|
+
"role": "declared-test-origin",
|
|
884
|
+
"taskId": "task-w-rename-01",
|
|
885
|
+
"identityContract": "ci/fixtures/doc-obligations/reconciliation-prep/trust-contract.json"
|
|
886
|
+
}
|
|
887
|
+
},
|
|
888
|
+
"actions": [
|
|
889
|
+
{
|
|
890
|
+
"id": "route",
|
|
891
|
+
"op": "route",
|
|
892
|
+
"payload": {
|
|
893
|
+
"prompt": "Update the PRD REQ text, review it, and verify it."
|
|
894
|
+
}
|
|
895
|
+
},
|
|
896
|
+
{
|
|
897
|
+
"id": "plan",
|
|
898
|
+
"op": "plan",
|
|
899
|
+
"payload": {
|
|
900
|
+
"requirements": "$requirements",
|
|
901
|
+
"strategy": "iterative-single",
|
|
902
|
+
"evidence": "three dependent requirements fit a bounded documentation loop"
|
|
903
|
+
}
|
|
904
|
+
},
|
|
905
|
+
{
|
|
906
|
+
"id": "start",
|
|
907
|
+
"op": "start",
|
|
908
|
+
"payload": {}
|
|
909
|
+
},
|
|
910
|
+
{
|
|
911
|
+
"id": "doc-pass",
|
|
912
|
+
"op": "step",
|
|
913
|
+
"payload": {
|
|
914
|
+
"stepId": "req-docs",
|
|
915
|
+
"disposition": "pass",
|
|
916
|
+
"evidence": "PRD REQ content moved to the renamed path"
|
|
917
|
+
}
|
|
918
|
+
},
|
|
919
|
+
{
|
|
920
|
+
"id": "reviewer-agent-result",
|
|
921
|
+
"op": "hookDeliver",
|
|
922
|
+
"payload": {
|
|
923
|
+
"event": "PostToolUse",
|
|
924
|
+
"toolName": "Agent",
|
|
925
|
+
"command": "Agent: repo-docs-reviewer",
|
|
926
|
+
"toolUseId": "toolu_f4_reviewer_agent_W-strict-f3-pin",
|
|
927
|
+
"response": {
|
|
928
|
+
"agentId": "agent-f4-reviewer",
|
|
929
|
+
"status": "completed"
|
|
930
|
+
}
|
|
931
|
+
}
|
|
932
|
+
},
|
|
933
|
+
{
|
|
934
|
+
"id": "reviewer-stop",
|
|
935
|
+
"op": "hookDeliver",
|
|
936
|
+
"payload": {
|
|
937
|
+
"event": "SubagentStop",
|
|
938
|
+
"agentId": "agent-f4-reviewer",
|
|
939
|
+
"agentType": "repo-docs-reviewer",
|
|
940
|
+
"lastAssistantMessage": "Review verdict: approve. The PRD change keeps its acceptance criteria consistent.\nReviewed artifact: docs/prd/graph-renamed.md sha256:4d2b4ef924ba492f4de058d00eb7a27c91f0bad64f5fcb2eab28fb36e048ec6b"
|
|
941
|
+
}
|
|
942
|
+
},
|
|
943
|
+
{
|
|
944
|
+
"id": "review-pass",
|
|
945
|
+
"op": "step",
|
|
946
|
+
"payload": {
|
|
947
|
+
"stepId": "req-review",
|
|
948
|
+
"disposition": "pass",
|
|
949
|
+
"evidence": "independent host review approved the renamed PRD change"
|
|
950
|
+
},
|
|
951
|
+
"expectExit": {
|
|
952
|
+
"on": [
|
|
953
|
+
0,
|
|
954
|
+
2
|
|
955
|
+
]
|
|
956
|
+
}
|
|
957
|
+
},
|
|
958
|
+
{
|
|
959
|
+
"id": "verify-bind",
|
|
960
|
+
"op": "binding",
|
|
961
|
+
"payload": {
|
|
962
|
+
"stepId": "req-verify",
|
|
963
|
+
"bindingId": "verification-loop",
|
|
964
|
+
"disposition": "loaded",
|
|
965
|
+
"evidence": "verification loop skill located"
|
|
966
|
+
}
|
|
967
|
+
},
|
|
968
|
+
{
|
|
969
|
+
"id": "verify-pass",
|
|
970
|
+
"op": "step",
|
|
971
|
+
"payload": {
|
|
972
|
+
"stepId": "req-verify",
|
|
973
|
+
"disposition": "pass",
|
|
974
|
+
"evidence": "objective doc checks recorded"
|
|
975
|
+
},
|
|
976
|
+
"expectExit": {
|
|
977
|
+
"on": [
|
|
978
|
+
0,
|
|
979
|
+
2
|
|
980
|
+
]
|
|
981
|
+
}
|
|
982
|
+
},
|
|
983
|
+
{
|
|
984
|
+
"id": "commit-mid",
|
|
985
|
+
"op": "gitCommit",
|
|
986
|
+
"payload": {
|
|
987
|
+
"message": "commit the rename mid-workflow"
|
|
988
|
+
}
|
|
989
|
+
},
|
|
990
|
+
{
|
|
991
|
+
"id": "stop",
|
|
992
|
+
"op": "stop",
|
|
993
|
+
"payload": {}
|
|
994
|
+
}
|
|
995
|
+
]
|
|
996
|
+
},
|
|
997
|
+
{
|
|
998
|
+
"id": "W-strict-f5-gitdiag",
|
|
999
|
+
"family": "WSTRICT",
|
|
1000
|
+
"description": "A2 section 4 strict row (F5): when git itself is broken, the failure is diagnosed instead of crashing - the sweep surfaces the git failure (baseline-unavailable) rather than pretending the tree is empty; production code refuses safe exit 2, and Search and Verify keep exiting 0 in the same surface.",
|
|
1001
|
+
"topology": "iterative-single-typed",
|
|
1002
|
+
"requirements": [
|
|
1003
|
+
{
|
|
1004
|
+
"id": "req-docs",
|
|
1005
|
+
"stepType": "doc-change",
|
|
1006
|
+
"summary": "Update the PRD REQ text",
|
|
1007
|
+
"acceptance": "normative PRD text is reviewed"
|
|
1008
|
+
},
|
|
1009
|
+
{
|
|
1010
|
+
"id": "req-verify",
|
|
1011
|
+
"stepType": "verification",
|
|
1012
|
+
"summary": "Verify the PRD change",
|
|
1013
|
+
"acceptance": "objective doc checks are recorded"
|
|
1014
|
+
}
|
|
1015
|
+
],
|
|
1016
|
+
"input": {
|
|
1017
|
+
"baseFiles": {
|
|
1018
|
+
".agents/harness-everything/project-docs.json": "{\n \"governed\": [\n {\n \"path\": \"docs/prd/**\",\n \"role\": \"prd\"\n },\n {\n \"path\": \"docs/adr/**\",\n \"role\": \"adr\"\n },\n {\n \"path\": \"docs/reference/**\",\n \"role\": \"reference\"\n }\n ],\n \"domains\": [\n \"GRPH\"\n ],\n \"legacy\": [\n \"docs/adr/legacy/**\"\n ],\n \"derived\": [\n {\n \"path\": \"docs/roadmap/index.md\",\n \"generator\": \"npm run docs:index\"\n }\n ],\n \"tickets\": \"tracker\"\n}\n",
|
|
1019
|
+
"docs/prd/graph.md": "---\nid: \"PRD-GRPH-001\"\nrevision: 1\nstatus: \"effective\"\ndrafted_by: \"Alice Example\"\neffective_at: \"2026-10-17T00:01:00Z\"\napproval:\n by: \"Bob Independent\"\n at: \"2026-10-17T00:00:00Z\"\n ref: \"https://approvals.example.invalid/PRD-GRPH-001\"\n role: \"human\"\n content_digest: \"sha256:a103bf860ed9d2cf7100d93eb8f0e3c3bce322d47e0f9fd83914b5bcc264ef70\"\n---\n# Graph\n\n### REQ-GRPH-001\n\nThe router records one topology per task.\n\nAcceptance: exactly one topology is recorded.\n"
|
|
1020
|
+
},
|
|
1021
|
+
"candidateFiles": {
|
|
1022
|
+
"docs/prd/graph.md": "---\nid: \"PRD-GRPH-001\"\nrevision: 1\nstatus: \"effective\"\ndrafted_by: \"Alice Example\"\neffective_at: \"2026-10-17T00:01:00Z\"\napproval:\n by: \"Bob Independent\"\n at: \"2026-10-17T00:00:00Z\"\n ref: \"https://approvals.example.invalid/PRD-GRPH-001\"\n role: \"human\"\n content_digest: \"sha256:c5bc6c8aa29b39198eec91b7af210a946896d9b7975b9c72540ddd4a4bfb37ea\"\n---\n# Graph\n\n### REQ-GRPH-001\n\nThe router records one or more topologies per task.\n\nAcceptance: one or more topologies are recorded.\n"
|
|
1023
|
+
},
|
|
1024
|
+
"config": {
|
|
1025
|
+
"role": "declared-test-origin",
|
|
1026
|
+
"deriveConfig": "ci/fixtures/doc-obligations/derive/config.json"
|
|
1027
|
+
},
|
|
1028
|
+
"task": {
|
|
1029
|
+
"role": "declared-test-origin",
|
|
1030
|
+
"taskId": "task-w-gitdiag-01",
|
|
1031
|
+
"identityContract": "ci/fixtures/doc-obligations/reconciliation-prep/trust-contract.json"
|
|
1032
|
+
}
|
|
1033
|
+
},
|
|
1034
|
+
"actions": [
|
|
1035
|
+
{
|
|
1036
|
+
"id": "route",
|
|
1037
|
+
"op": "route",
|
|
1038
|
+
"payload": {
|
|
1039
|
+
"prompt": "Update the PRD REQ text and verify it."
|
|
1040
|
+
}
|
|
1041
|
+
},
|
|
1042
|
+
{
|
|
1043
|
+
"id": "plan",
|
|
1044
|
+
"op": "plan",
|
|
1045
|
+
"payload": {
|
|
1046
|
+
"requirements": "$requirements",
|
|
1047
|
+
"strategy": "iterative-single",
|
|
1048
|
+
"evidence": "two dependent requirements fit a bounded documentation loop"
|
|
1049
|
+
}
|
|
1050
|
+
},
|
|
1051
|
+
{
|
|
1052
|
+
"id": "start",
|
|
1053
|
+
"op": "start",
|
|
1054
|
+
"payload": {}
|
|
1055
|
+
},
|
|
1056
|
+
{
|
|
1057
|
+
"id": "doc-pass",
|
|
1058
|
+
"op": "step",
|
|
1059
|
+
"payload": {
|
|
1060
|
+
"stepId": "req-docs",
|
|
1061
|
+
"disposition": "pass",
|
|
1062
|
+
"evidence": "PRD REQ text updated"
|
|
1063
|
+
}
|
|
1064
|
+
},
|
|
1065
|
+
{
|
|
1066
|
+
"id": "corrupt-git",
|
|
1067
|
+
"op": "mutateIdentity",
|
|
1068
|
+
"payload": {
|
|
1069
|
+
"kind": "candidate",
|
|
1070
|
+
"path": ".git/HEAD",
|
|
1071
|
+
"content": "corrupted"
|
|
1072
|
+
}
|
|
1073
|
+
},
|
|
1074
|
+
{
|
|
1075
|
+
"id": "verify-bind",
|
|
1076
|
+
"op": "binding",
|
|
1077
|
+
"payload": {
|
|
1078
|
+
"stepId": "req-verify",
|
|
1079
|
+
"bindingId": "verification-loop",
|
|
1080
|
+
"disposition": "loaded",
|
|
1081
|
+
"evidence": "verification loop skill located"
|
|
1082
|
+
}
|
|
1083
|
+
},
|
|
1084
|
+
{
|
|
1085
|
+
"id": "verify-pass",
|
|
1086
|
+
"op": "step",
|
|
1087
|
+
"payload": {
|
|
1088
|
+
"stepId": "req-verify",
|
|
1089
|
+
"disposition": "pass",
|
|
1090
|
+
"evidence": "objective doc checks recorded"
|
|
1091
|
+
},
|
|
1092
|
+
"expectExit": {
|
|
1093
|
+
"off": [
|
|
1094
|
+
0
|
|
1095
|
+
],
|
|
1096
|
+
"on": [
|
|
1097
|
+
0,
|
|
1098
|
+
2
|
|
1099
|
+
]
|
|
1100
|
+
}
|
|
1101
|
+
},
|
|
1102
|
+
{
|
|
1103
|
+
"id": "stop",
|
|
1104
|
+
"op": "stop",
|
|
1105
|
+
"payload": {}
|
|
1106
|
+
}
|
|
1107
|
+
]
|
|
1108
|
+
}
|
|
1109
|
+
]
|
|
1110
|
+
}
|