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.
Files changed (161) hide show
  1. package/.agents/harness-everything/project-docs.json +9 -0
  2. package/.claude-plugin/marketplace.json +1 -1
  3. package/.claude-plugin/plugin.json +1 -1
  4. package/CHANGELOG.md +51 -0
  5. package/benchmarks/results/f1-doc-path-baseline/1-source-clean.stderr.txt +0 -0
  6. package/benchmarks/results/f1-doc-path-baseline/1-source-clean.stdout.json +20 -0
  7. package/benchmarks/results/f1-doc-path-baseline/2-injected-architecture.md +229 -0
  8. package/benchmarks/results/f1-doc-path-baseline/2-source-injected.stderr.txt +0 -0
  9. package/benchmarks/results/f1-doc-path-baseline/2-source-injected.stdout.json +33 -0
  10. package/benchmarks/results/f1-doc-path-baseline/3-source-reverted.stderr.txt +0 -0
  11. package/benchmarks/results/f1-doc-path-baseline/3-source-reverted.stdout.json +20 -0
  12. package/benchmarks/results/f1-doc-path-baseline/4a-packaged-clean.stderr.txt +0 -0
  13. package/benchmarks/results/f1-doc-path-baseline/4a-packaged-clean.stdout.json +20 -0
  14. package/benchmarks/results/f1-doc-path-baseline/4b-packaged-injected.stderr.txt +0 -0
  15. package/benchmarks/results/f1-doc-path-baseline/4b-packaged-injected.stdout.json +33 -0
  16. package/benchmarks/results/f1-doc-path-baseline/5-source-missing-config.stderr.txt +0 -0
  17. package/benchmarks/results/f1-doc-path-baseline/5-source-missing-config.stdout.json +15 -0
  18. package/benchmarks/results/f1-doc-path-baseline/5b-packaged-missing-config.stderr.txt +0 -0
  19. package/benchmarks/results/f1-doc-path-baseline/5b-packaged-missing-config.stdout.json +15 -0
  20. package/benchmarks/results/f1-doc-path-baseline/README.md +54 -0
  21. package/benchmarks/results/f1-doc-path-baseline/before-fix/1-source-clean.stderr.txt +0 -0
  22. package/benchmarks/results/f1-doc-path-baseline/before-fix/1-source-clean.stdout.json +115 -0
  23. package/benchmarks/results/f1-doc-path-baseline/before-fix/2-injected-document.md +328 -0
  24. package/benchmarks/results/f1-doc-path-baseline/before-fix/2-source-injected.stderr.txt +0 -0
  25. package/benchmarks/results/f1-doc-path-baseline/before-fix/2-source-injected.stdout.json +127 -0
  26. package/benchmarks/results/f1-doc-path-baseline/before-fix/3-source-reverted.stderr.txt +0 -0
  27. package/benchmarks/results/f1-doc-path-baseline/before-fix/3-source-reverted.stdout.json +115 -0
  28. package/benchmarks/results/f1-doc-path-baseline/before-fix/4a-packaged-clean.stderr.txt +0 -0
  29. package/benchmarks/results/f1-doc-path-baseline/before-fix/4a-packaged-clean.stdout.json +115 -0
  30. package/benchmarks/results/f1-doc-path-baseline/before-fix/4b-packaged-injected.stderr.txt +0 -0
  31. package/benchmarks/results/f1-doc-path-baseline/before-fix/4b-packaged-injected.stdout.json +127 -0
  32. package/benchmarks/results/f1-doc-path-baseline/before-fix/5-source-missing-config.stderr.txt +0 -0
  33. package/benchmarks/results/f1-doc-path-baseline/before-fix/5-source-missing-config.stdout.json +15 -0
  34. package/benchmarks/results/f1-doc-path-baseline/before-fix/5b-packaged-missing-config.stderr.txt +0 -0
  35. package/benchmarks/results/f1-doc-path-baseline/before-fix/5b-packaged-missing-config.stdout.json +15 -0
  36. package/benchmarks/results/f1-doc-path-baseline/before-fix/6-supplementary-fixture-ok.input.md +8 -0
  37. package/benchmarks/results/f1-doc-path-baseline/before-fix/6-supplementary-fixture-ok.stdout.json +16 -0
  38. package/benchmarks/results/f1-doc-path-baseline/before-fix/README.md +34 -0
  39. package/benchmarks/results/f1-doc-path-baseline/probe-31-docs/after.json +248 -0
  40. package/benchmarks/results/f1-doc-path-baseline/probe-31-docs/before.json +254 -0
  41. package/benchmarks/results/f1-doc-path-baseline/probe-31-docs/probe.js +26 -0
  42. package/benchmarks/results/f2-doc-craft-baseline/README.md +32 -0
  43. package/benchmarks/results/f2-doc-craft-baseline/arm-f1-report.md +84 -0
  44. package/benchmarks/results/f2-doc-craft-baseline/arm-f1-task.md +21 -0
  45. package/benchmarks/results/f2-doc-craft-baseline/arm-f1.diff +19 -0
  46. package/benchmarks/results/f2-doc-craft-baseline/arm-f2-report.md +110 -0
  47. package/benchmarks/results/f2-doc-craft-baseline/arm-f2-task.md +21 -0
  48. package/benchmarks/results/f2-doc-craft-baseline/arm-f2.diff +19 -0
  49. package/benchmarks/results/f3-derived-views-baseline/README.md +34 -0
  50. package/benchmarks/results/f3-derived-views-baseline/arm-f2-report.md +43 -0
  51. package/benchmarks/results/f3-derived-views-baseline/arm-f2-task.md +21 -0
  52. package/benchmarks/results/f3-derived-views-baseline/arm-f2.diff +21 -0
  53. package/benchmarks/results/f3-derived-views-baseline/arm-f3-report.md +57 -0
  54. package/benchmarks/results/f3-derived-views-baseline/arm-f3-task.md +21 -0
  55. package/benchmarks/results/f3-derived-views-baseline/arm-f3.diff +21 -0
  56. package/benchmarks/results/live-host/claude-325-3b-s2b/README.md +99 -0
  57. package/benchmarks/results/live-host/claude-325-3b-s2b/capture.sanitized.jsonl +26 -0
  58. package/ci/archive/325-prep/README.md +71 -0
  59. package/ci/{prep → archive/325-prep}/doc-reconciliation-red.js +9 -7
  60. package/ci/archive/325-prep/f4-expected-red.json +34 -0
  61. package/ci/archive/325-prep/historical-qualification.test.js +143 -0
  62. package/ci/fixtures/doc-obligations/reconciliation-prep/cases.json +17 -4
  63. package/ci/fixtures/doc-obligations/reconciliation-prep/pending-red.json +8 -56
  64. package/ci/fixtures/doc-obligations/reconciliation-prep/trust-contract.json +2 -2
  65. package/ci/fixtures/doc-obligations/reconciliation-s1/cases.json +17 -5
  66. package/ci/fixtures/doc-obligations/reconciliation-s2b/capture/harness.js +415 -0
  67. package/ci/fixtures/doc-obligations/reconciliation-s2b/capture/off-handoff-golden.json +16 -0
  68. package/ci/fixtures/doc-obligations/reconciliation-s2b/capture/payload-post-tool-use-failure.json +11 -0
  69. package/ci/fixtures/doc-obligations/reconciliation-s2b/capture/payload-post-tool-use-success-minimal.json +9 -0
  70. package/ci/fixtures/doc-obligations/reconciliation-s2b/capture/payload-post-tool-use-success.json +13 -0
  71. package/ci/fixtures/doc-obligations/reconciliation-s2b/capture/payload-subagent-start.json +7 -0
  72. package/ci/fixtures/doc-obligations/reconciliation-s2b/capture/payload-subagent-stop-freetext-reject.json +11 -0
  73. package/ci/fixtures/doc-obligations/reconciliation-s2b/capture/payload-subagent-stop-reject.json +11 -0
  74. package/ci/fixtures/doc-obligations/reconciliation-s2b/capture/payload-subagent-stop.json +11 -0
  75. package/ci/fixtures/doc-obligations/reconciliation-s2b/capture/payload-task-result.json +19 -0
  76. package/ci/fixtures/doc-obligations/reconciliation-s2b/corpus/off-capture-only.json +99 -0
  77. package/ci/fixtures/doc-obligations/reconciliation-s2b/corpus/off-legacy.json +67 -0
  78. package/ci/fixtures/doc-obligations/reconciliation-s2b/corpus/on-concurrent-writers.json +62 -0
  79. package/ci/fixtures/doc-obligations/reconciliation-s2b/corpus/on-lookalikes-runtime-mutations.json +67 -0
  80. package/ci/fixtures/doc-obligations/reconciliation-s2b/corpus/on-malformed.json +85 -0
  81. package/ci/fixtures/doc-obligations/reconciliation-s2b/corpus/on-normal-session.json +74 -0
  82. package/ci/fixtures/doc-obligations/reconciliation-s2b/corpus/on-runtime-drift-later-npm-test.json +58 -0
  83. package/ci/fixtures/doc-obligations/reconciliation-s2b/corpus/on-valid-direct-quoted-review.json +85 -0
  84. package/ci/fixtures/doc-obligations/reconciliation-s2b/f4/cases.json +2267 -0
  85. package/ci/fixtures/doc-obligations/reconciliation-s2b/wiring/cases.json +1110 -0
  86. package/ci/fixtures/doc-obligations/reconciliation-s2b/wiring/legacy-off-golden.json +674 -0
  87. package/ci/lib/doc-reconciliation-file-spy.js +23 -0
  88. package/ci/lib/doc-reconciliation-prep-fixtures.js +136 -10
  89. package/ci/lib/doc-reconciliation-qualification-preload.js +37 -0
  90. package/ci/lib/doc-reconciliation-replay.js +104 -0
  91. package/ci/lib/doc-reconciliation-staged-tree.js +102 -0
  92. package/ci/mechanism-2p-opencode-v2-entrypoint.test.js +179 -0
  93. package/ci/mechanism-325-3b-preparation.test.js +27 -101
  94. package/ci/mechanism-325-3b-s2b-capture.test.js +561 -0
  95. package/ci/mechanism-325-3b-s2b-wiring.test.js +668 -0
  96. package/ci/mechanism-325-f1-doc-check.test.js +674 -0
  97. package/ci/mechanism-325-f2-doc-craft.test.js +597 -0
  98. package/ci/mechanism-325-f3-derived-views.test.js +798 -0
  99. package/ci/mechanism-325-f4-invariants.test.js +606 -0
  100. package/ci/mechanism-325-f4-projections.test.js +382 -0
  101. package/ci/mechanism-325-f4-qualification.test.js +228 -0
  102. package/ci/mechanism-325-f4-trust-boundary.test.js +880 -0
  103. package/ci/mechanism-365-step-edit-accounting.test.js +395 -0
  104. package/ci/mutation-check.js +26 -3
  105. package/docs/architecture.md +5 -0
  106. package/docs/doc-workflow-reconciliation.md +331 -4
  107. package/docs/document-lifecycle.md +11 -0
  108. package/docs/governed-index.md +20 -0
  109. package/docs/platform-capabilities.md +22 -2
  110. package/grill-with-docs/SKILL.md +1 -1
  111. package/grill-with-docs/references/session-playbook.md +4 -0
  112. package/harness-everything/SKILL.md +1 -1
  113. package/harness-everything/references/doc-check.md +186 -0
  114. package/harness-everything/references/documentation/_shared/maintenance.md +41 -0
  115. package/harness-everything/references/documentation/_shared/writing-craft.md +59 -0
  116. package/harness-everything/references/triage-and-tiers.md +4 -0
  117. package/harness-everything/scripts/doc-check.js +442 -0
  118. package/harness-everything/scripts/doc-lifecycle.js +3 -0
  119. package/hooks/hooks.json +46 -0
  120. package/hooks/scripts/lib/doc-reconciliation-capture.sanitized.jsonl +26 -0
  121. package/hooks/scripts/lib/doc-reconciliation-pilot.js +171 -2
  122. package/hooks/scripts/lib/doc-reconciliation-provider.js +1059 -0
  123. package/hooks/scripts/lib/doc-reconciliation-qualification.json +34 -0
  124. package/hooks/scripts/lib/workflow-obligations.js +7 -0
  125. package/hooks/scripts/state-persist.js +105 -3
  126. package/hooks/scripts/workflow-stop-gate.js +7 -2
  127. package/opencode-plugin/README.md +15 -0
  128. package/opencode-plugin/index.mjs +77 -0
  129. package/opencode-plugin/plugin.json +1 -1
  130. package/package.json +1 -1
  131. package/plugins/harness-everything/.codex-plugin/plugin.json +1 -1
  132. package/plugins/harness-everything/hooks/scripts/lib/doc-reconciliation-capture.sanitized.jsonl +26 -0
  133. package/plugins/harness-everything/hooks/scripts/lib/doc-reconciliation-pilot.js +171 -2
  134. package/plugins/harness-everything/hooks/scripts/lib/doc-reconciliation-provider.js +1059 -0
  135. package/plugins/harness-everything/hooks/scripts/lib/doc-reconciliation-qualification.json +34 -0
  136. package/plugins/harness-everything/hooks/scripts/lib/workflow-obligations.js +7 -0
  137. package/plugins/harness-everything/hooks/scripts/state-persist.js +105 -3
  138. package/plugins/harness-everything/hooks/scripts/workflow-stop-gate.js +7 -2
  139. package/plugins/harness-everything/plugin.json +1 -1
  140. package/plugins/harness-everything/skills/grill-with-docs/SKILL.md +1 -1
  141. package/plugins/harness-everything/skills/grill-with-docs/references/session-playbook.md +4 -0
  142. package/plugins/harness-everything/skills/harness-everything/SKILL.md +1 -1
  143. package/plugins/harness-everything/skills/harness-everything/references/doc-check.md +186 -0
  144. package/plugins/harness-everything/skills/harness-everything/references/documentation/_shared/maintenance.md +41 -0
  145. package/plugins/harness-everything/skills/harness-everything/references/documentation/_shared/writing-craft.md +59 -0
  146. package/plugins/harness-everything/skills/harness-everything/references/triage-and-tiers.md +4 -0
  147. package/plugins/harness-everything/skills/harness-everything/scripts/doc-check.js +442 -0
  148. package/plugins/harness-everything/skills/harness-everything/scripts/doc-lifecycle.js +3 -0
  149. package/plugins/harness-everything/skills/repo-docs/SKILL.md +1 -1
  150. package/plugins/harness-everything/skills/repo-docs/references/process-guide.md +4 -0
  151. package/plugins/harness-everything/skills/to-spec/SKILL.md +1 -1
  152. package/plugins/harness-everything/skills/to-spec/references/process.md +4 -0
  153. package/plugins/harness-everything/skills/to-tickets/SKILL.md +1 -1
  154. package/plugins/harness-everything/skills/to-tickets/references/publishing-and-templates.md +4 -0
  155. package/repo-docs/SKILL.md +1 -1
  156. package/repo-docs/references/process-guide.md +4 -0
  157. package/sbom.cdx.json +7 -7
  158. package/to-spec/SKILL.md +1 -1
  159. package/to-spec/references/process.md +4 -0
  160. package/to-tickets/SKILL.md +1 -1
  161. package/to-tickets/references/publishing-and-templates.md +4 -0
@@ -0,0 +1,2267 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "phase": "F4-T1b",
4
+ "description": "F4 credited-reconciliation replay corpus (F4-T1, F4-T1b). Replayed by ci/mechanism-325-f4-projections.test.js through fx.replayCase. Host events are delivered only through the hostRun and hookDeliver ops, which drive the real doc-check entry and the real state-persist hook. Nothing here carries an accepted record or a journal record.",
5
+ "cases": [
6
+ {
7
+ "id": "F4-POS-body-edit",
8
+ "description": "Positive: a body-only edit to one governed reference, checked by the registered doc-check through the real hook. Applicable MUSTs are lint and links only.",
9
+ "input": {
10
+ "baseFiles": {
11
+ ".agents/harness-everything/project-docs.json": "{\n \"governed\": [\n {\n \"path\": \"docs/a.md\",\n \"role\": \"reference\"\n }\n ],\n \"domains\": [\n \"GRPH\"\n ]\n}\n",
12
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries once. See [b](b.md).\n",
13
+ "docs/b.md": "b\n"
14
+ },
15
+ "candidateFiles": {
16
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries twice. See [b](b.md).\n"
17
+ }
18
+ },
19
+ "requirements": [
20
+ {
21
+ "id": "req-docs",
22
+ "stepType": "doc-change",
23
+ "summary": "Correct the checkout retry sentence",
24
+ "acceptance": "the governed reference body is reviewed"
25
+ },
26
+ {
27
+ "id": "req-verify",
28
+ "stepType": "verification",
29
+ "summary": "Verify the reference change",
30
+ "acceptance": "objective doc checks are recorded"
31
+ }
32
+ ],
33
+ "actions": [
34
+ {
35
+ "id": "route",
36
+ "op": "route",
37
+ "payload": {
38
+ "prompt": "Update the governed reference docs/a.md text, review it, and verify it."
39
+ }
40
+ },
41
+ {
42
+ "id": "plan",
43
+ "op": "plan",
44
+ "payload": {
45
+ "requirements": "$requirements",
46
+ "strategy": "iterative-single",
47
+ "evidence": "two dependent requirements fit a bounded documentation loop"
48
+ }
49
+ },
50
+ {
51
+ "id": "start",
52
+ "op": "start",
53
+ "payload": {}
54
+ },
55
+ {
56
+ "id": "doc-pass",
57
+ "op": "step",
58
+ "payload": {
59
+ "stepId": "req-docs",
60
+ "disposition": "pass",
61
+ "evidence": "sentence corrected in docs/a.md"
62
+ }
63
+ },
64
+ {
65
+ "id": "verify-bind",
66
+ "op": "binding",
67
+ "payload": {
68
+ "stepId": "req-verify",
69
+ "bindingId": "verification-loop",
70
+ "disposition": "loaded",
71
+ "evidence": "verification loop skill located"
72
+ }
73
+ },
74
+ {
75
+ "id": "lint-run",
76
+ "op": "hostRun",
77
+ "payload": {
78
+ "command": "doc-check",
79
+ "args": [
80
+ "check",
81
+ "--workspace",
82
+ ".",
83
+ "--config",
84
+ ".agents/harness-everything/project-docs.json",
85
+ "--changed-path",
86
+ "docs/a.md"
87
+ ]
88
+ }
89
+ },
90
+ {
91
+ "id": "post-lint",
92
+ "op": "hookDeliver",
93
+ "payload": {
94
+ "event": "PostToolUse",
95
+ "command": "node {{DOC_CHECK}} check --workspace . --config .agents/harness-everything/project-docs.json --changed-path docs/a.md",
96
+ "toolUseId": "toolu_f4_check_01",
97
+ "fromRun": "lint-run"
98
+ }
99
+ },
100
+ {
101
+ "id": "verify-pass",
102
+ "op": "step",
103
+ "payload": {
104
+ "stepId": "req-verify",
105
+ "disposition": "pass",
106
+ "evidence": "objective doc check recorded"
107
+ },
108
+ "expectExit": {
109
+ "on": [
110
+ 0,
111
+ 2
112
+ ]
113
+ }
114
+ },
115
+ {
116
+ "id": "stop",
117
+ "op": "stop"
118
+ },
119
+ {
120
+ "id": "stop-generic",
121
+ "op": "stopGeneric"
122
+ }
123
+ ]
124
+ },
125
+ {
126
+ "id": "F4-NEG-echo-pass",
127
+ "description": "Negative: a successful shell command that prints PASS is not a doc check and earns no lint or link credit.",
128
+ "input": {
129
+ "baseFiles": {
130
+ ".agents/harness-everything/project-docs.json": "{\n \"governed\": [\n {\n \"path\": \"docs/a.md\",\n \"role\": \"reference\"\n }\n ],\n \"domains\": [\n \"GRPH\"\n ]\n}\n",
131
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries once. See [b](b.md).\n",
132
+ "docs/b.md": "b\n"
133
+ },
134
+ "candidateFiles": {
135
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries twice. See [b](b.md).\n"
136
+ }
137
+ },
138
+ "requirements": [
139
+ {
140
+ "id": "req-docs",
141
+ "stepType": "doc-change",
142
+ "summary": "Correct the checkout retry sentence",
143
+ "acceptance": "the governed reference body is reviewed"
144
+ },
145
+ {
146
+ "id": "req-verify",
147
+ "stepType": "verification",
148
+ "summary": "Verify the reference change",
149
+ "acceptance": "objective doc checks are recorded"
150
+ }
151
+ ],
152
+ "actions": [
153
+ {
154
+ "id": "route",
155
+ "op": "route",
156
+ "payload": {
157
+ "prompt": "Update the governed reference docs/a.md text, review it, and verify it."
158
+ }
159
+ },
160
+ {
161
+ "id": "plan",
162
+ "op": "plan",
163
+ "payload": {
164
+ "requirements": "$requirements",
165
+ "strategy": "iterative-single",
166
+ "evidence": "two dependent requirements fit a bounded documentation loop"
167
+ }
168
+ },
169
+ {
170
+ "id": "start",
171
+ "op": "start",
172
+ "payload": {}
173
+ },
174
+ {
175
+ "id": "doc-pass",
176
+ "op": "step",
177
+ "payload": {
178
+ "stepId": "req-docs",
179
+ "disposition": "pass",
180
+ "evidence": "sentence corrected in docs/a.md"
181
+ }
182
+ },
183
+ {
184
+ "id": "verify-bind",
185
+ "op": "binding",
186
+ "payload": {
187
+ "stepId": "req-verify",
188
+ "bindingId": "verification-loop",
189
+ "disposition": "loaded",
190
+ "evidence": "verification loop skill located"
191
+ }
192
+ },
193
+ {
194
+ "id": "post-echo",
195
+ "op": "hookDeliver",
196
+ "payload": {
197
+ "event": "PostToolUse",
198
+ "command": "echo PASS",
199
+ "toolUseId": "toolu_f4_echo_01",
200
+ "response": {
201
+ "stdout": "PASS",
202
+ "stderr": "",
203
+ "interrupted": false
204
+ }
205
+ }
206
+ },
207
+ {
208
+ "id": "verify-pass",
209
+ "op": "step",
210
+ "payload": {
211
+ "stepId": "req-verify",
212
+ "disposition": "pass",
213
+ "evidence": "objective doc check recorded"
214
+ },
215
+ "expectExit": {
216
+ "on": [
217
+ 0,
218
+ 2
219
+ ]
220
+ }
221
+ },
222
+ {
223
+ "id": "stop",
224
+ "op": "stop"
225
+ },
226
+ {
227
+ "id": "stop-generic",
228
+ "op": "stopGeneric"
229
+ }
230
+ ]
231
+ },
232
+ {
233
+ "id": "F4-NEG-unregistered-stdout",
234
+ "description": "Negative: the real doc-check stdout reported under an unregistered script name is not credited.",
235
+ "input": {
236
+ "baseFiles": {
237
+ ".agents/harness-everything/project-docs.json": "{\n \"governed\": [\n {\n \"path\": \"docs/a.md\",\n \"role\": \"reference\"\n }\n ],\n \"domains\": [\n \"GRPH\"\n ]\n}\n",
238
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries once. See [b](b.md).\n",
239
+ "docs/b.md": "b\n"
240
+ },
241
+ "candidateFiles": {
242
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries twice. See [b](b.md).\n"
243
+ }
244
+ },
245
+ "requirements": [
246
+ {
247
+ "id": "req-docs",
248
+ "stepType": "doc-change",
249
+ "summary": "Correct the checkout retry sentence",
250
+ "acceptance": "the governed reference body is reviewed"
251
+ },
252
+ {
253
+ "id": "req-verify",
254
+ "stepType": "verification",
255
+ "summary": "Verify the reference change",
256
+ "acceptance": "objective doc checks are recorded"
257
+ }
258
+ ],
259
+ "actions": [
260
+ {
261
+ "id": "route",
262
+ "op": "route",
263
+ "payload": {
264
+ "prompt": "Update the governed reference docs/a.md text, review it, and verify it."
265
+ }
266
+ },
267
+ {
268
+ "id": "plan",
269
+ "op": "plan",
270
+ "payload": {
271
+ "requirements": "$requirements",
272
+ "strategy": "iterative-single",
273
+ "evidence": "two dependent requirements fit a bounded documentation loop"
274
+ }
275
+ },
276
+ {
277
+ "id": "start",
278
+ "op": "start",
279
+ "payload": {}
280
+ },
281
+ {
282
+ "id": "doc-pass",
283
+ "op": "step",
284
+ "payload": {
285
+ "stepId": "req-docs",
286
+ "disposition": "pass",
287
+ "evidence": "sentence corrected in docs/a.md"
288
+ }
289
+ },
290
+ {
291
+ "id": "verify-bind",
292
+ "op": "binding",
293
+ "payload": {
294
+ "stepId": "req-verify",
295
+ "bindingId": "verification-loop",
296
+ "disposition": "loaded",
297
+ "evidence": "verification loop skill located"
298
+ }
299
+ },
300
+ {
301
+ "id": "lint-run",
302
+ "op": "hostRun",
303
+ "payload": {
304
+ "command": "doc-check",
305
+ "args": [
306
+ "check",
307
+ "--workspace",
308
+ ".",
309
+ "--config",
310
+ ".agents/harness-everything/project-docs.json",
311
+ "--changed-path",
312
+ "docs/a.md"
313
+ ]
314
+ }
315
+ },
316
+ {
317
+ "id": "post-fake",
318
+ "op": "hookDeliver",
319
+ "payload": {
320
+ "event": "PostToolUse",
321
+ "command": "node scripts/fake-check.js check --workspace . --config .agents/harness-everything/project-docs.json --changed-path docs/a.md",
322
+ "toolUseId": "toolu_f4_fake_01",
323
+ "fromRun": "lint-run"
324
+ }
325
+ },
326
+ {
327
+ "id": "verify-pass",
328
+ "op": "step",
329
+ "payload": {
330
+ "stepId": "req-verify",
331
+ "disposition": "pass",
332
+ "evidence": "objective doc check recorded"
333
+ },
334
+ "expectExit": {
335
+ "on": [
336
+ 0,
337
+ 2
338
+ ]
339
+ }
340
+ },
341
+ {
342
+ "id": "stop",
343
+ "op": "stop"
344
+ },
345
+ {
346
+ "id": "stop-generic",
347
+ "op": "stopGeneric"
348
+ }
349
+ ]
350
+ },
351
+ {
352
+ "id": "F4-NEG-no-domains",
353
+ "description": "Negative: with no domains declared, the coverage gap is reported and must not become full lint coverage.",
354
+ "input": {
355
+ "baseFiles": {
356
+ ".agents/harness-everything/project-docs.json": "{\n \"governed\": [\n {\n \"path\": \"docs/a.md\",\n \"role\": \"reference\"\n }\n ]\n}\n",
357
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries once. See [b](b.md).\n",
358
+ "docs/b.md": "b\n"
359
+ },
360
+ "candidateFiles": {
361
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries twice. See [b](b.md).\n"
362
+ }
363
+ },
364
+ "requirements": [
365
+ {
366
+ "id": "req-docs",
367
+ "stepType": "doc-change",
368
+ "summary": "Correct the checkout retry sentence",
369
+ "acceptance": "the governed reference body is reviewed"
370
+ },
371
+ {
372
+ "id": "req-verify",
373
+ "stepType": "verification",
374
+ "summary": "Verify the reference change",
375
+ "acceptance": "objective doc checks are recorded"
376
+ }
377
+ ],
378
+ "actions": [
379
+ {
380
+ "id": "route",
381
+ "op": "route",
382
+ "payload": {
383
+ "prompt": "Update the governed reference docs/a.md text, review it, and verify it."
384
+ }
385
+ },
386
+ {
387
+ "id": "plan",
388
+ "op": "plan",
389
+ "payload": {
390
+ "requirements": "$requirements",
391
+ "strategy": "iterative-single",
392
+ "evidence": "two dependent requirements fit a bounded documentation loop"
393
+ }
394
+ },
395
+ {
396
+ "id": "start",
397
+ "op": "start",
398
+ "payload": {}
399
+ },
400
+ {
401
+ "id": "doc-pass",
402
+ "op": "step",
403
+ "payload": {
404
+ "stepId": "req-docs",
405
+ "disposition": "pass",
406
+ "evidence": "sentence corrected in docs/a.md"
407
+ }
408
+ },
409
+ {
410
+ "id": "verify-bind",
411
+ "op": "binding",
412
+ "payload": {
413
+ "stepId": "req-verify",
414
+ "bindingId": "verification-loop",
415
+ "disposition": "loaded",
416
+ "evidence": "verification loop skill located"
417
+ }
418
+ },
419
+ {
420
+ "id": "lint-run",
421
+ "op": "hostRun",
422
+ "payload": {
423
+ "command": "doc-check",
424
+ "args": [
425
+ "check",
426
+ "--workspace",
427
+ ".",
428
+ "--config",
429
+ ".agents/harness-everything/project-docs.json",
430
+ "--changed-path",
431
+ "docs/a.md"
432
+ ]
433
+ }
434
+ },
435
+ {
436
+ "id": "post-lint",
437
+ "op": "hookDeliver",
438
+ "payload": {
439
+ "event": "PostToolUse",
440
+ "command": "node {{DOC_CHECK}} check --workspace . --config .agents/harness-everything/project-docs.json --changed-path docs/a.md",
441
+ "toolUseId": "toolu_f4_check_01",
442
+ "fromRun": "lint-run"
443
+ }
444
+ },
445
+ {
446
+ "id": "verify-pass",
447
+ "op": "step",
448
+ "payload": {
449
+ "stepId": "req-verify",
450
+ "disposition": "pass",
451
+ "evidence": "objective doc check recorded"
452
+ },
453
+ "expectExit": {
454
+ "on": [
455
+ 0,
456
+ 2
457
+ ]
458
+ }
459
+ },
460
+ {
461
+ "id": "stop",
462
+ "op": "stop"
463
+ },
464
+ {
465
+ "id": "stop-generic",
466
+ "op": "stopGeneric"
467
+ }
468
+ ]
469
+ },
470
+ {
471
+ "id": "F4-NEG-later-failure",
472
+ "description": "Negative: a PostToolUseFailure for the same tool_use_id after a success voids the success mapping.",
473
+ "input": {
474
+ "baseFiles": {
475
+ ".agents/harness-everything/project-docs.json": "{\n \"governed\": [\n {\n \"path\": \"docs/a.md\",\n \"role\": \"reference\"\n }\n ],\n \"domains\": [\n \"GRPH\"\n ]\n}\n",
476
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries once. See [b](b.md).\n",
477
+ "docs/b.md": "b\n"
478
+ },
479
+ "candidateFiles": {
480
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries twice. See [b](b.md).\n"
481
+ }
482
+ },
483
+ "requirements": [
484
+ {
485
+ "id": "req-docs",
486
+ "stepType": "doc-change",
487
+ "summary": "Correct the checkout retry sentence",
488
+ "acceptance": "the governed reference body is reviewed"
489
+ },
490
+ {
491
+ "id": "req-verify",
492
+ "stepType": "verification",
493
+ "summary": "Verify the reference change",
494
+ "acceptance": "objective doc checks are recorded"
495
+ }
496
+ ],
497
+ "actions": [
498
+ {
499
+ "id": "route",
500
+ "op": "route",
501
+ "payload": {
502
+ "prompt": "Update the governed reference docs/a.md text, review it, and verify it."
503
+ }
504
+ },
505
+ {
506
+ "id": "plan",
507
+ "op": "plan",
508
+ "payload": {
509
+ "requirements": "$requirements",
510
+ "strategy": "iterative-single",
511
+ "evidence": "two dependent requirements fit a bounded documentation loop"
512
+ }
513
+ },
514
+ {
515
+ "id": "start",
516
+ "op": "start",
517
+ "payload": {}
518
+ },
519
+ {
520
+ "id": "doc-pass",
521
+ "op": "step",
522
+ "payload": {
523
+ "stepId": "req-docs",
524
+ "disposition": "pass",
525
+ "evidence": "sentence corrected in docs/a.md"
526
+ }
527
+ },
528
+ {
529
+ "id": "verify-bind",
530
+ "op": "binding",
531
+ "payload": {
532
+ "stepId": "req-verify",
533
+ "bindingId": "verification-loop",
534
+ "disposition": "loaded",
535
+ "evidence": "verification loop skill located"
536
+ }
537
+ },
538
+ {
539
+ "id": "lint-run",
540
+ "op": "hostRun",
541
+ "payload": {
542
+ "command": "doc-check",
543
+ "args": [
544
+ "check",
545
+ "--workspace",
546
+ ".",
547
+ "--config",
548
+ ".agents/harness-everything/project-docs.json",
549
+ "--changed-path",
550
+ "docs/a.md"
551
+ ]
552
+ }
553
+ },
554
+ {
555
+ "id": "post-lint",
556
+ "op": "hookDeliver",
557
+ "payload": {
558
+ "event": "PostToolUse",
559
+ "command": "node {{DOC_CHECK}} check --workspace . --config .agents/harness-everything/project-docs.json --changed-path docs/a.md",
560
+ "toolUseId": "toolu_f4_check_01",
561
+ "fromRun": "lint-run"
562
+ }
563
+ },
564
+ {
565
+ "id": "post-fail",
566
+ "op": "hookDeliver",
567
+ "payload": {
568
+ "event": "PostToolUseFailure",
569
+ "command": "node {{DOC_CHECK}} check --workspace . --config .agents/harness-everything/project-docs.json --changed-path docs/a.md",
570
+ "toolUseId": "toolu_f4_check_01",
571
+ "error": "Command failed with Exit code 1",
572
+ "isInterrupt": false
573
+ }
574
+ },
575
+ {
576
+ "id": "verify-pass",
577
+ "op": "step",
578
+ "payload": {
579
+ "stepId": "req-verify",
580
+ "disposition": "pass",
581
+ "evidence": "objective doc check recorded"
582
+ },
583
+ "expectExit": {
584
+ "on": [
585
+ 0,
586
+ 2
587
+ ]
588
+ }
589
+ },
590
+ {
591
+ "id": "stop",
592
+ "op": "stop"
593
+ },
594
+ {
595
+ "id": "stop-generic",
596
+ "op": "stopGeneric"
597
+ }
598
+ ]
599
+ },
600
+ {
601
+ "id": "F4-NEG-duplicate-tool-id",
602
+ "description": "Negative: a second PostToolUse with the same tool_use_id is ambiguous and earns no credit.",
603
+ "input": {
604
+ "baseFiles": {
605
+ ".agents/harness-everything/project-docs.json": "{\n \"governed\": [\n {\n \"path\": \"docs/a.md\",\n \"role\": \"reference\"\n }\n ],\n \"domains\": [\n \"GRPH\"\n ]\n}\n",
606
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries once. See [b](b.md).\n",
607
+ "docs/b.md": "b\n"
608
+ },
609
+ "candidateFiles": {
610
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries twice. See [b](b.md).\n"
611
+ }
612
+ },
613
+ "requirements": [
614
+ {
615
+ "id": "req-docs",
616
+ "stepType": "doc-change",
617
+ "summary": "Correct the checkout retry sentence",
618
+ "acceptance": "the governed reference body is reviewed"
619
+ },
620
+ {
621
+ "id": "req-verify",
622
+ "stepType": "verification",
623
+ "summary": "Verify the reference change",
624
+ "acceptance": "objective doc checks are recorded"
625
+ }
626
+ ],
627
+ "actions": [
628
+ {
629
+ "id": "route",
630
+ "op": "route",
631
+ "payload": {
632
+ "prompt": "Update the governed reference docs/a.md text, review it, and verify it."
633
+ }
634
+ },
635
+ {
636
+ "id": "plan",
637
+ "op": "plan",
638
+ "payload": {
639
+ "requirements": "$requirements",
640
+ "strategy": "iterative-single",
641
+ "evidence": "two dependent requirements fit a bounded documentation loop"
642
+ }
643
+ },
644
+ {
645
+ "id": "start",
646
+ "op": "start",
647
+ "payload": {}
648
+ },
649
+ {
650
+ "id": "doc-pass",
651
+ "op": "step",
652
+ "payload": {
653
+ "stepId": "req-docs",
654
+ "disposition": "pass",
655
+ "evidence": "sentence corrected in docs/a.md"
656
+ }
657
+ },
658
+ {
659
+ "id": "verify-bind",
660
+ "op": "binding",
661
+ "payload": {
662
+ "stepId": "req-verify",
663
+ "bindingId": "verification-loop",
664
+ "disposition": "loaded",
665
+ "evidence": "verification loop skill located"
666
+ }
667
+ },
668
+ {
669
+ "id": "lint-run",
670
+ "op": "hostRun",
671
+ "payload": {
672
+ "command": "doc-check",
673
+ "args": [
674
+ "check",
675
+ "--workspace",
676
+ ".",
677
+ "--config",
678
+ ".agents/harness-everything/project-docs.json",
679
+ "--changed-path",
680
+ "docs/a.md"
681
+ ]
682
+ }
683
+ },
684
+ {
685
+ "id": "post-lint",
686
+ "op": "hookDeliver",
687
+ "payload": {
688
+ "event": "PostToolUse",
689
+ "command": "node {{DOC_CHECK}} check --workspace . --config .agents/harness-everything/project-docs.json --changed-path docs/a.md",
690
+ "toolUseId": "toolu_f4_check_01",
691
+ "fromRun": "lint-run"
692
+ }
693
+ },
694
+ {
695
+ "id": "post-dup",
696
+ "op": "hookDeliver",
697
+ "payload": {
698
+ "event": "PostToolUse",
699
+ "command": "node {{DOC_CHECK}} check --workspace . --config .agents/harness-everything/project-docs.json --changed-path docs/a.md",
700
+ "toolUseId": "toolu_f4_check_01",
701
+ "fromRun": "lint-run"
702
+ }
703
+ },
704
+ {
705
+ "id": "verify-pass",
706
+ "op": "step",
707
+ "payload": {
708
+ "stepId": "req-verify",
709
+ "disposition": "pass",
710
+ "evidence": "objective doc check recorded"
711
+ },
712
+ "expectExit": {
713
+ "on": [
714
+ 0,
715
+ 2
716
+ ]
717
+ }
718
+ },
719
+ {
720
+ "id": "stop",
721
+ "op": "stop"
722
+ },
723
+ {
724
+ "id": "stop-generic",
725
+ "op": "stopGeneric"
726
+ }
727
+ ]
728
+ },
729
+ {
730
+ "id": "F4-NEG-interrupted",
731
+ "description": "Negative: an interrupted success is never mapped to exit 0.",
732
+ "input": {
733
+ "baseFiles": {
734
+ ".agents/harness-everything/project-docs.json": "{\n \"governed\": [\n {\n \"path\": \"docs/a.md\",\n \"role\": \"reference\"\n }\n ],\n \"domains\": [\n \"GRPH\"\n ]\n}\n",
735
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries once. See [b](b.md).\n",
736
+ "docs/b.md": "b\n"
737
+ },
738
+ "candidateFiles": {
739
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries twice. See [b](b.md).\n"
740
+ }
741
+ },
742
+ "requirements": [
743
+ {
744
+ "id": "req-docs",
745
+ "stepType": "doc-change",
746
+ "summary": "Correct the checkout retry sentence",
747
+ "acceptance": "the governed reference body is reviewed"
748
+ },
749
+ {
750
+ "id": "req-verify",
751
+ "stepType": "verification",
752
+ "summary": "Verify the reference change",
753
+ "acceptance": "objective doc checks are recorded"
754
+ }
755
+ ],
756
+ "actions": [
757
+ {
758
+ "id": "route",
759
+ "op": "route",
760
+ "payload": {
761
+ "prompt": "Update the governed reference docs/a.md text, review it, and verify it."
762
+ }
763
+ },
764
+ {
765
+ "id": "plan",
766
+ "op": "plan",
767
+ "payload": {
768
+ "requirements": "$requirements",
769
+ "strategy": "iterative-single",
770
+ "evidence": "two dependent requirements fit a bounded documentation loop"
771
+ }
772
+ },
773
+ {
774
+ "id": "start",
775
+ "op": "start",
776
+ "payload": {}
777
+ },
778
+ {
779
+ "id": "doc-pass",
780
+ "op": "step",
781
+ "payload": {
782
+ "stepId": "req-docs",
783
+ "disposition": "pass",
784
+ "evidence": "sentence corrected in docs/a.md"
785
+ }
786
+ },
787
+ {
788
+ "id": "verify-bind",
789
+ "op": "binding",
790
+ "payload": {
791
+ "stepId": "req-verify",
792
+ "bindingId": "verification-loop",
793
+ "disposition": "loaded",
794
+ "evidence": "verification loop skill located"
795
+ }
796
+ },
797
+ {
798
+ "id": "lint-run",
799
+ "op": "hostRun",
800
+ "payload": {
801
+ "command": "doc-check",
802
+ "args": [
803
+ "check",
804
+ "--workspace",
805
+ ".",
806
+ "--config",
807
+ ".agents/harness-everything/project-docs.json",
808
+ "--changed-path",
809
+ "docs/a.md"
810
+ ]
811
+ }
812
+ },
813
+ {
814
+ "id": "post-interrupted",
815
+ "op": "hookDeliver",
816
+ "payload": {
817
+ "event": "PostToolUse",
818
+ "command": "node {{DOC_CHECK}} check --workspace . --config .agents/harness-everything/project-docs.json --changed-path docs/a.md",
819
+ "toolUseId": "toolu_f4_check_01",
820
+ "fromRun": "lint-run",
821
+ "interrupted": true
822
+ }
823
+ },
824
+ {
825
+ "id": "verify-pass",
826
+ "op": "step",
827
+ "payload": {
828
+ "stepId": "req-verify",
829
+ "disposition": "pass",
830
+ "evidence": "objective doc check recorded"
831
+ },
832
+ "expectExit": {
833
+ "on": [
834
+ 0,
835
+ 2
836
+ ]
837
+ }
838
+ },
839
+ {
840
+ "id": "stop",
841
+ "op": "stop"
842
+ },
843
+ {
844
+ "id": "stop-generic",
845
+ "op": "stopGeneric"
846
+ }
847
+ ]
848
+ },
849
+ {
850
+ "id": "F4-NEG-other-session",
851
+ "description": "Negative: a record captured under another session cannot belong to this workflow assessment.",
852
+ "input": {
853
+ "baseFiles": {
854
+ ".agents/harness-everything/project-docs.json": "{\n \"governed\": [\n {\n \"path\": \"docs/a.md\",\n \"role\": \"reference\"\n }\n ],\n \"domains\": [\n \"GRPH\"\n ]\n}\n",
855
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries once. See [b](b.md).\n",
856
+ "docs/b.md": "b\n"
857
+ },
858
+ "candidateFiles": {
859
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries twice. See [b](b.md).\n"
860
+ }
861
+ },
862
+ "requirements": [
863
+ {
864
+ "id": "req-docs",
865
+ "stepType": "doc-change",
866
+ "summary": "Correct the checkout retry sentence",
867
+ "acceptance": "the governed reference body is reviewed"
868
+ },
869
+ {
870
+ "id": "req-verify",
871
+ "stepType": "verification",
872
+ "summary": "Verify the reference change",
873
+ "acceptance": "objective doc checks are recorded"
874
+ }
875
+ ],
876
+ "actions": [
877
+ {
878
+ "id": "route",
879
+ "op": "route",
880
+ "payload": {
881
+ "prompt": "Update the governed reference docs/a.md text, review it, and verify it."
882
+ }
883
+ },
884
+ {
885
+ "id": "plan",
886
+ "op": "plan",
887
+ "payload": {
888
+ "requirements": "$requirements",
889
+ "strategy": "iterative-single",
890
+ "evidence": "two dependent requirements fit a bounded documentation loop"
891
+ }
892
+ },
893
+ {
894
+ "id": "start",
895
+ "op": "start",
896
+ "payload": {}
897
+ },
898
+ {
899
+ "id": "doc-pass",
900
+ "op": "step",
901
+ "payload": {
902
+ "stepId": "req-docs",
903
+ "disposition": "pass",
904
+ "evidence": "sentence corrected in docs/a.md"
905
+ }
906
+ },
907
+ {
908
+ "id": "verify-bind",
909
+ "op": "binding",
910
+ "payload": {
911
+ "stepId": "req-verify",
912
+ "bindingId": "verification-loop",
913
+ "disposition": "loaded",
914
+ "evidence": "verification loop skill located"
915
+ }
916
+ },
917
+ {
918
+ "id": "lint-run",
919
+ "op": "hostRun",
920
+ "payload": {
921
+ "command": "doc-check",
922
+ "args": [
923
+ "check",
924
+ "--workspace",
925
+ ".",
926
+ "--config",
927
+ ".agents/harness-everything/project-docs.json",
928
+ "--changed-path",
929
+ "docs/a.md"
930
+ ]
931
+ }
932
+ },
933
+ {
934
+ "id": "post-other",
935
+ "op": "hookDeliver",
936
+ "payload": {
937
+ "event": "PostToolUse",
938
+ "command": "node {{DOC_CHECK}} check --workspace . --config .agents/harness-everything/project-docs.json --changed-path docs/a.md",
939
+ "toolUseId": "toolu_f4_check_01",
940
+ "fromRun": "lint-run",
941
+ "sessionId": "f4-other-session"
942
+ }
943
+ },
944
+ {
945
+ "id": "verify-pass",
946
+ "op": "step",
947
+ "payload": {
948
+ "stepId": "req-verify",
949
+ "disposition": "pass",
950
+ "evidence": "objective doc check recorded"
951
+ },
952
+ "expectExit": {
953
+ "on": [
954
+ 0,
955
+ 2
956
+ ]
957
+ }
958
+ },
959
+ {
960
+ "id": "stop",
961
+ "op": "stop"
962
+ },
963
+ {
964
+ "id": "stop-generic",
965
+ "op": "stopGeneric"
966
+ }
967
+ ]
968
+ },
969
+ {
970
+ "id": "F4-NEG-zero-events",
971
+ "description": "Negative: a replay with no delivered host events cannot earn credit.",
972
+ "input": {
973
+ "baseFiles": {
974
+ ".agents/harness-everything/project-docs.json": "{\n \"governed\": [\n {\n \"path\": \"docs/a.md\",\n \"role\": \"reference\"\n }\n ],\n \"domains\": [\n \"GRPH\"\n ]\n}\n",
975
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries once. See [b](b.md).\n",
976
+ "docs/b.md": "b\n"
977
+ },
978
+ "candidateFiles": {
979
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries twice. See [b](b.md).\n"
980
+ }
981
+ },
982
+ "requirements": [
983
+ {
984
+ "id": "req-docs",
985
+ "stepType": "doc-change",
986
+ "summary": "Correct the checkout retry sentence",
987
+ "acceptance": "the governed reference body is reviewed"
988
+ },
989
+ {
990
+ "id": "req-verify",
991
+ "stepType": "verification",
992
+ "summary": "Verify the reference change",
993
+ "acceptance": "objective doc checks are recorded"
994
+ }
995
+ ],
996
+ "actions": [
997
+ {
998
+ "id": "route",
999
+ "op": "route",
1000
+ "payload": {
1001
+ "prompt": "Update the governed reference docs/a.md text, review it, and verify it."
1002
+ }
1003
+ },
1004
+ {
1005
+ "id": "plan",
1006
+ "op": "plan",
1007
+ "payload": {
1008
+ "requirements": "$requirements",
1009
+ "strategy": "iterative-single",
1010
+ "evidence": "two dependent requirements fit a bounded documentation loop"
1011
+ }
1012
+ },
1013
+ {
1014
+ "id": "start",
1015
+ "op": "start",
1016
+ "payload": {}
1017
+ },
1018
+ {
1019
+ "id": "doc-pass",
1020
+ "op": "step",
1021
+ "payload": {
1022
+ "stepId": "req-docs",
1023
+ "disposition": "pass",
1024
+ "evidence": "sentence corrected in docs/a.md"
1025
+ }
1026
+ },
1027
+ {
1028
+ "id": "verify-bind",
1029
+ "op": "binding",
1030
+ "payload": {
1031
+ "stepId": "req-verify",
1032
+ "bindingId": "verification-loop",
1033
+ "disposition": "loaded",
1034
+ "evidence": "verification loop skill located"
1035
+ }
1036
+ },
1037
+ {
1038
+ "id": "verify-pass",
1039
+ "op": "step",
1040
+ "payload": {
1041
+ "stepId": "req-verify",
1042
+ "disposition": "pass",
1043
+ "evidence": "objective doc check recorded"
1044
+ },
1045
+ "expectExit": {
1046
+ "on": [
1047
+ 0,
1048
+ 2
1049
+ ]
1050
+ }
1051
+ },
1052
+ {
1053
+ "id": "stop",
1054
+ "op": "stop"
1055
+ },
1056
+ {
1057
+ "id": "stop-generic",
1058
+ "op": "stopGeneric"
1059
+ }
1060
+ ]
1061
+ },
1062
+ {
1063
+ "id": "F4-NEG-source-change",
1064
+ "description": "Negative: a source change after a valid PASS makes the credit stale, and the final Stop must show it pending.",
1065
+ "input": {
1066
+ "baseFiles": {
1067
+ ".agents/harness-everything/project-docs.json": "{\n \"governed\": [\n {\n \"path\": \"docs/a.md\",\n \"role\": \"reference\"\n }\n ],\n \"domains\": [\n \"GRPH\"\n ]\n}\n",
1068
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries once. See [b](b.md).\n",
1069
+ "docs/b.md": "b\n"
1070
+ },
1071
+ "candidateFiles": {
1072
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries twice. See [b](b.md).\n"
1073
+ }
1074
+ },
1075
+ "requirements": [
1076
+ {
1077
+ "id": "req-docs",
1078
+ "stepType": "doc-change",
1079
+ "summary": "Correct the checkout retry sentence",
1080
+ "acceptance": "the governed reference body is reviewed"
1081
+ },
1082
+ {
1083
+ "id": "req-verify",
1084
+ "stepType": "verification",
1085
+ "summary": "Verify the reference change",
1086
+ "acceptance": "objective doc checks are recorded"
1087
+ }
1088
+ ],
1089
+ "actions": [
1090
+ {
1091
+ "id": "route",
1092
+ "op": "route",
1093
+ "payload": {
1094
+ "prompt": "Update the governed reference docs/a.md text, review it, and verify it."
1095
+ }
1096
+ },
1097
+ {
1098
+ "id": "plan",
1099
+ "op": "plan",
1100
+ "payload": {
1101
+ "requirements": "$requirements",
1102
+ "strategy": "iterative-single",
1103
+ "evidence": "two dependent requirements fit a bounded documentation loop"
1104
+ }
1105
+ },
1106
+ {
1107
+ "id": "start",
1108
+ "op": "start",
1109
+ "payload": {}
1110
+ },
1111
+ {
1112
+ "id": "doc-pass",
1113
+ "op": "step",
1114
+ "payload": {
1115
+ "stepId": "req-docs",
1116
+ "disposition": "pass",
1117
+ "evidence": "sentence corrected in docs/a.md"
1118
+ }
1119
+ },
1120
+ {
1121
+ "id": "verify-bind",
1122
+ "op": "binding",
1123
+ "payload": {
1124
+ "stepId": "req-verify",
1125
+ "bindingId": "verification-loop",
1126
+ "disposition": "loaded",
1127
+ "evidence": "verification loop skill located"
1128
+ }
1129
+ },
1130
+ {
1131
+ "id": "lint-run",
1132
+ "op": "hostRun",
1133
+ "payload": {
1134
+ "command": "doc-check",
1135
+ "args": [
1136
+ "check",
1137
+ "--workspace",
1138
+ ".",
1139
+ "--config",
1140
+ ".agents/harness-everything/project-docs.json",
1141
+ "--changed-path",
1142
+ "docs/a.md"
1143
+ ]
1144
+ }
1145
+ },
1146
+ {
1147
+ "id": "post-lint",
1148
+ "op": "hookDeliver",
1149
+ "payload": {
1150
+ "event": "PostToolUse",
1151
+ "command": "node {{DOC_CHECK}} check --workspace . --config .agents/harness-everything/project-docs.json --changed-path docs/a.md",
1152
+ "toolUseId": "toolu_f4_check_01",
1153
+ "fromRun": "lint-run"
1154
+ }
1155
+ },
1156
+ {
1157
+ "id": "verify-pass",
1158
+ "op": "step",
1159
+ "payload": {
1160
+ "stepId": "req-verify",
1161
+ "disposition": "pass",
1162
+ "evidence": "objective doc check recorded"
1163
+ },
1164
+ "expectExit": {
1165
+ "on": [
1166
+ 0,
1167
+ 2
1168
+ ]
1169
+ }
1170
+ },
1171
+ {
1172
+ "id": "edit-after",
1173
+ "op": "mutateIdentity",
1174
+ "payload": {
1175
+ "kind": "source-change",
1176
+ "path": "docs/a.md",
1177
+ "content": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries twice. See [b](b.md).\nAn extra sentence.\n"
1178
+ }
1179
+ },
1180
+ {
1181
+ "id": "stop",
1182
+ "op": "stop"
1183
+ },
1184
+ {
1185
+ "id": "stop-generic",
1186
+ "op": "stopGeneric"
1187
+ }
1188
+ ]
1189
+ },
1190
+ {
1191
+ "id": "F4-NEG-edited-payload",
1192
+ "description": "Negative: a retained host result edited on disk after capture must not be credited; assessment revalidates the captured digest.",
1193
+ "input": {
1194
+ "baseFiles": {
1195
+ ".agents/harness-everything/project-docs.json": "{\n \"governed\": [\n {\n \"path\": \"docs/a.md\",\n \"role\": \"reference\"\n }\n ],\n \"domains\": [\n \"GRPH\"\n ]\n}\n",
1196
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries once. See [b](b.md).\n",
1197
+ "docs/b.md": "b\n"
1198
+ },
1199
+ "candidateFiles": {
1200
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries twice. See [b](b.md).\n"
1201
+ }
1202
+ },
1203
+ "requirements": [
1204
+ {
1205
+ "id": "req-docs",
1206
+ "stepType": "doc-change",
1207
+ "summary": "Correct the checkout retry sentence",
1208
+ "acceptance": "the governed reference body is reviewed"
1209
+ },
1210
+ {
1211
+ "id": "req-verify",
1212
+ "stepType": "verification",
1213
+ "summary": "Verify the reference change",
1214
+ "acceptance": "objective doc checks are recorded"
1215
+ }
1216
+ ],
1217
+ "actions": [
1218
+ {
1219
+ "id": "route",
1220
+ "op": "route",
1221
+ "payload": {
1222
+ "prompt": "Update the governed reference docs/a.md text, review it, and verify it."
1223
+ }
1224
+ },
1225
+ {
1226
+ "id": "plan",
1227
+ "op": "plan",
1228
+ "payload": {
1229
+ "requirements": "$requirements",
1230
+ "strategy": "iterative-single",
1231
+ "evidence": "two dependent requirements fit a bounded documentation loop"
1232
+ }
1233
+ },
1234
+ {
1235
+ "id": "start",
1236
+ "op": "start",
1237
+ "payload": {}
1238
+ },
1239
+ {
1240
+ "id": "doc-pass",
1241
+ "op": "step",
1242
+ "payload": {
1243
+ "stepId": "req-docs",
1244
+ "disposition": "pass",
1245
+ "evidence": "sentence corrected in docs/a.md"
1246
+ }
1247
+ },
1248
+ {
1249
+ "id": "verify-bind",
1250
+ "op": "binding",
1251
+ "payload": {
1252
+ "stepId": "req-verify",
1253
+ "bindingId": "verification-loop",
1254
+ "disposition": "loaded",
1255
+ "evidence": "verification loop skill located"
1256
+ }
1257
+ },
1258
+ {
1259
+ "id": "lint-run",
1260
+ "op": "hostRun",
1261
+ "payload": {
1262
+ "command": "doc-check",
1263
+ "args": [
1264
+ "check",
1265
+ "--workspace",
1266
+ ".",
1267
+ "--config",
1268
+ ".agents/harness-everything/project-docs.json",
1269
+ "--changed-path",
1270
+ "docs/a.md"
1271
+ ]
1272
+ }
1273
+ },
1274
+ {
1275
+ "id": "post-lint",
1276
+ "op": "hookDeliver",
1277
+ "payload": {
1278
+ "event": "PostToolUse",
1279
+ "command": "node {{DOC_CHECK}} check --workspace . --config .agents/harness-everything/project-docs.json --changed-path docs/a.md",
1280
+ "toolUseId": "toolu_f4_check_01",
1281
+ "fromRun": "lint-run"
1282
+ }
1283
+ },
1284
+ {
1285
+ "id": "edit-journal",
1286
+ "op": "editJournal",
1287
+ "payload": {
1288
+ "index": 0,
1289
+ "key": "responseDigest",
1290
+ "value": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
1291
+ }
1292
+ },
1293
+ {
1294
+ "id": "verify-pass",
1295
+ "op": "step",
1296
+ "payload": {
1297
+ "stepId": "req-verify",
1298
+ "disposition": "pass",
1299
+ "evidence": "objective doc check recorded"
1300
+ },
1301
+ "expectExit": {
1302
+ "on": [
1303
+ 0,
1304
+ 2
1305
+ ]
1306
+ }
1307
+ },
1308
+ {
1309
+ "id": "stop",
1310
+ "op": "stop"
1311
+ },
1312
+ {
1313
+ "id": "stop-generic",
1314
+ "op": "stopGeneric"
1315
+ }
1316
+ ]
1317
+ },
1318
+ {
1319
+ "id": "F4-NEG-self-reported-pass",
1320
+ "description": "Negative: a bare \"PASS\" evidence string with no host events is refused as verification evidence.",
1321
+ "input": {
1322
+ "baseFiles": {
1323
+ ".agents/harness-everything/project-docs.json": "{\n \"governed\": [\n {\n \"path\": \"docs/a.md\",\n \"role\": \"reference\"\n }\n ],\n \"domains\": [\n \"GRPH\"\n ]\n}\n",
1324
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries once. See [b](b.md).\n",
1325
+ "docs/b.md": "b\n"
1326
+ },
1327
+ "candidateFiles": {
1328
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries twice. See [b](b.md).\n"
1329
+ }
1330
+ },
1331
+ "requirements": [
1332
+ {
1333
+ "id": "req-docs",
1334
+ "stepType": "doc-change",
1335
+ "summary": "Correct the checkout retry sentence",
1336
+ "acceptance": "the governed reference body is reviewed"
1337
+ },
1338
+ {
1339
+ "id": "req-verify",
1340
+ "stepType": "verification",
1341
+ "summary": "Verify the reference change",
1342
+ "acceptance": "objective doc checks are recorded"
1343
+ }
1344
+ ],
1345
+ "actions": [
1346
+ {
1347
+ "id": "route",
1348
+ "op": "route",
1349
+ "payload": {
1350
+ "prompt": "Update the governed reference docs/a.md text, review it, and verify it."
1351
+ }
1352
+ },
1353
+ {
1354
+ "id": "plan",
1355
+ "op": "plan",
1356
+ "payload": {
1357
+ "requirements": "$requirements",
1358
+ "strategy": "iterative-single",
1359
+ "evidence": "two dependent requirements fit a bounded documentation loop"
1360
+ }
1361
+ },
1362
+ {
1363
+ "id": "start",
1364
+ "op": "start",
1365
+ "payload": {}
1366
+ },
1367
+ {
1368
+ "id": "doc-pass",
1369
+ "op": "step",
1370
+ "payload": {
1371
+ "stepId": "req-docs",
1372
+ "disposition": "pass",
1373
+ "evidence": "sentence corrected in docs/a.md"
1374
+ }
1375
+ },
1376
+ {
1377
+ "id": "verify-bind",
1378
+ "op": "binding",
1379
+ "payload": {
1380
+ "stepId": "req-verify",
1381
+ "bindingId": "verification-loop",
1382
+ "disposition": "loaded",
1383
+ "evidence": "verification loop skill located"
1384
+ }
1385
+ },
1386
+ {
1387
+ "id": "verify-bare",
1388
+ "op": "step",
1389
+ "payload": {
1390
+ "stepId": "req-verify",
1391
+ "disposition": "pass",
1392
+ "evidence": "PASS"
1393
+ },
1394
+ "expectExit": {
1395
+ "on": [
1396
+ 2
1397
+ ]
1398
+ }
1399
+ },
1400
+ {
1401
+ "id": "stop",
1402
+ "op": "stop"
1403
+ },
1404
+ {
1405
+ "id": "stop-generic",
1406
+ "op": "stopGeneric"
1407
+ }
1408
+ ]
1409
+ },
1410
+ {
1411
+ "id": "F4-NEG-partial-path",
1412
+ "description": "N1: two governed references changed, but the observed check was given only one. The omitted path earns no lint or link credit, and a whole-command exit 0 is not coverage.",
1413
+ "input": {
1414
+ "baseFiles": {
1415
+ ".agents/harness-everything/project-docs.json": "{\n \"governed\": [\n {\n \"path\": \"docs/a.md\",\n \"role\": \"reference\"\n },\n {\n \"path\": \"docs/c.md\",\n \"role\": \"reference\"\n }\n ],\n \"domains\": [\n \"GRPH\"\n ]\n}\n",
1416
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries once. See [b](b.md).\n",
1417
+ "docs/b.md": "b\n",
1418
+ "docs/c.md": "---\nrole: reference\nstatus: active\n---\n\nBase C.\n"
1419
+ },
1420
+ "candidateFiles": {
1421
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries twice. See [b](b.md).\n",
1422
+ "docs/c.md": "---\nrole: reference\nstatus: active\n---\n\nEdited C.\n"
1423
+ }
1424
+ },
1425
+ "requirements": [
1426
+ {
1427
+ "id": "req-docs",
1428
+ "stepType": "doc-change",
1429
+ "summary": "Correct the checkout retry sentence",
1430
+ "acceptance": "the governed reference body is reviewed"
1431
+ },
1432
+ {
1433
+ "id": "req-verify",
1434
+ "stepType": "verification",
1435
+ "summary": "Verify the reference change",
1436
+ "acceptance": "objective doc checks are recorded"
1437
+ }
1438
+ ],
1439
+ "actions": [
1440
+ {
1441
+ "id": "route",
1442
+ "op": "route",
1443
+ "payload": {
1444
+ "prompt": "Update the governed reference docs/a.md text, review it, and verify it."
1445
+ }
1446
+ },
1447
+ {
1448
+ "id": "plan",
1449
+ "op": "plan",
1450
+ "payload": {
1451
+ "requirements": "$requirements",
1452
+ "strategy": "iterative-single",
1453
+ "evidence": "two dependent requirements fit a bounded documentation loop"
1454
+ }
1455
+ },
1456
+ {
1457
+ "id": "start",
1458
+ "op": "start",
1459
+ "payload": {}
1460
+ },
1461
+ {
1462
+ "id": "doc-pass",
1463
+ "op": "step",
1464
+ "payload": {
1465
+ "stepId": "req-docs",
1466
+ "disposition": "pass",
1467
+ "evidence": "sentence corrected in docs/a.md"
1468
+ }
1469
+ },
1470
+ {
1471
+ "id": "verify-bind",
1472
+ "op": "binding",
1473
+ "payload": {
1474
+ "stepId": "req-verify",
1475
+ "bindingId": "verification-loop",
1476
+ "disposition": "loaded",
1477
+ "evidence": "verification loop skill located"
1478
+ }
1479
+ },
1480
+ {
1481
+ "id": "lint-run",
1482
+ "op": "hostRun",
1483
+ "payload": {
1484
+ "command": "doc-check",
1485
+ "args": [
1486
+ "check",
1487
+ "--workspace",
1488
+ ".",
1489
+ "--config",
1490
+ ".agents/harness-everything/project-docs.json",
1491
+ "--changed-path",
1492
+ "docs/a.md"
1493
+ ]
1494
+ }
1495
+ },
1496
+ {
1497
+ "id": "post-partial",
1498
+ "op": "hookDeliver",
1499
+ "payload": {
1500
+ "event": "PostToolUse",
1501
+ "command": "node {{DOC_CHECK}} check --workspace . --config .agents/harness-everything/project-docs.json --changed-path docs/a.md",
1502
+ "toolUseId": "toolu_f4_partial_01",
1503
+ "fromRun": "lint-run"
1504
+ }
1505
+ },
1506
+ {
1507
+ "id": "verify-pass",
1508
+ "op": "step",
1509
+ "payload": {
1510
+ "stepId": "req-verify",
1511
+ "disposition": "pass",
1512
+ "evidence": "objective doc check recorded"
1513
+ },
1514
+ "expectExit": {
1515
+ "on": [
1516
+ 0,
1517
+ 2
1518
+ ]
1519
+ }
1520
+ },
1521
+ {
1522
+ "id": "stop",
1523
+ "op": "stop"
1524
+ },
1525
+ {
1526
+ "id": "stop-generic",
1527
+ "op": "stopGeneric"
1528
+ }
1529
+ ]
1530
+ },
1531
+ {
1532
+ "id": "F4-NEG-unsupported-link",
1533
+ "description": "N2: the expected reference uses reference-style link syntax the check cannot resolve, so link-check reports it unsupported and earns no credit.",
1534
+ "input": {
1535
+ "baseFiles": {
1536
+ ".agents/harness-everything/project-docs.json": "{\n \"governed\": [\n {\n \"path\": \"docs/a.md\",\n \"role\": \"reference\"\n }\n ],\n \"domains\": [\n \"GRPH\"\n ]\n}\n",
1537
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries once. See [b](b.md).\n",
1538
+ "docs/b.md": "b\n"
1539
+ },
1540
+ "candidateFiles": {
1541
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries twice. See [r][ref].\n\n[ref]: b.md\n"
1542
+ }
1543
+ },
1544
+ "requirements": [
1545
+ {
1546
+ "id": "req-docs",
1547
+ "stepType": "doc-change",
1548
+ "summary": "Correct the checkout retry sentence",
1549
+ "acceptance": "the governed reference body is reviewed"
1550
+ },
1551
+ {
1552
+ "id": "req-verify",
1553
+ "stepType": "verification",
1554
+ "summary": "Verify the reference change",
1555
+ "acceptance": "objective doc checks are recorded"
1556
+ }
1557
+ ],
1558
+ "actions": [
1559
+ {
1560
+ "id": "route",
1561
+ "op": "route",
1562
+ "payload": {
1563
+ "prompt": "Update the governed reference docs/a.md text, review it, and verify it."
1564
+ }
1565
+ },
1566
+ {
1567
+ "id": "plan",
1568
+ "op": "plan",
1569
+ "payload": {
1570
+ "requirements": "$requirements",
1571
+ "strategy": "iterative-single",
1572
+ "evidence": "two dependent requirements fit a bounded documentation loop"
1573
+ }
1574
+ },
1575
+ {
1576
+ "id": "start",
1577
+ "op": "start",
1578
+ "payload": {}
1579
+ },
1580
+ {
1581
+ "id": "doc-pass",
1582
+ "op": "step",
1583
+ "payload": {
1584
+ "stepId": "req-docs",
1585
+ "disposition": "pass",
1586
+ "evidence": "sentence corrected in docs/a.md"
1587
+ }
1588
+ },
1589
+ {
1590
+ "id": "verify-bind",
1591
+ "op": "binding",
1592
+ "payload": {
1593
+ "stepId": "req-verify",
1594
+ "bindingId": "verification-loop",
1595
+ "disposition": "loaded",
1596
+ "evidence": "verification loop skill located"
1597
+ }
1598
+ },
1599
+ {
1600
+ "id": "lint-run",
1601
+ "op": "hostRun",
1602
+ "payload": {
1603
+ "command": "doc-check",
1604
+ "args": [
1605
+ "check",
1606
+ "--workspace",
1607
+ ".",
1608
+ "--config",
1609
+ ".agents/harness-everything/project-docs.json",
1610
+ "--changed-path",
1611
+ "docs/a.md"
1612
+ ]
1613
+ }
1614
+ },
1615
+ {
1616
+ "id": "post-lint",
1617
+ "op": "hookDeliver",
1618
+ "payload": {
1619
+ "event": "PostToolUse",
1620
+ "command": "node {{DOC_CHECK}} check --workspace . --config .agents/harness-everything/project-docs.json --changed-path docs/a.md",
1621
+ "toolUseId": "toolu_f4_check_01",
1622
+ "fromRun": "lint-run"
1623
+ }
1624
+ },
1625
+ {
1626
+ "id": "verify-pass",
1627
+ "op": "step",
1628
+ "payload": {
1629
+ "stepId": "req-verify",
1630
+ "disposition": "pass",
1631
+ "evidence": "objective doc check recorded"
1632
+ },
1633
+ "expectExit": {
1634
+ "on": [
1635
+ 0,
1636
+ 2
1637
+ ]
1638
+ }
1639
+ },
1640
+ {
1641
+ "id": "stop",
1642
+ "op": "stop"
1643
+ },
1644
+ {
1645
+ "id": "stop-generic",
1646
+ "op": "stopGeneric"
1647
+ }
1648
+ ]
1649
+ },
1650
+ {
1651
+ "id": "F4-NEG-not-governed",
1652
+ "description": "N3a: the observed check ran under a config that does not govern the expected path, so the path is reported not governed and earns no credit.",
1653
+ "input": {
1654
+ "baseFiles": {
1655
+ ".agents/harness-everything/project-docs.json": "{\n \"governed\": [\n {\n \"path\": \"docs/a.md\",\n \"role\": \"reference\"\n }\n ],\n \"domains\": [\n \"GRPH\"\n ]\n}\n",
1656
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries once. See [b](b.md).\n",
1657
+ "docs/b.md": "b\n",
1658
+ ".agents/harness-everything/alt-project-docs.json": "{\n \"governed\": [\n {\n \"path\": \"docs/c.md\",\n \"role\": \"reference\"\n }\n ],\n \"domains\": [\n \"GRPH\"\n ]\n}\n"
1659
+ },
1660
+ "candidateFiles": {
1661
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries twice. See [b](b.md).\n"
1662
+ }
1663
+ },
1664
+ "requirements": [
1665
+ {
1666
+ "id": "req-docs",
1667
+ "stepType": "doc-change",
1668
+ "summary": "Correct the checkout retry sentence",
1669
+ "acceptance": "the governed reference body is reviewed"
1670
+ },
1671
+ {
1672
+ "id": "req-verify",
1673
+ "stepType": "verification",
1674
+ "summary": "Verify the reference change",
1675
+ "acceptance": "objective doc checks are recorded"
1676
+ }
1677
+ ],
1678
+ "actions": [
1679
+ {
1680
+ "id": "route",
1681
+ "op": "route",
1682
+ "payload": {
1683
+ "prompt": "Update the governed reference docs/a.md text, review it, and verify it."
1684
+ }
1685
+ },
1686
+ {
1687
+ "id": "plan",
1688
+ "op": "plan",
1689
+ "payload": {
1690
+ "requirements": "$requirements",
1691
+ "strategy": "iterative-single",
1692
+ "evidence": "two dependent requirements fit a bounded documentation loop"
1693
+ }
1694
+ },
1695
+ {
1696
+ "id": "start",
1697
+ "op": "start",
1698
+ "payload": {}
1699
+ },
1700
+ {
1701
+ "id": "doc-pass",
1702
+ "op": "step",
1703
+ "payload": {
1704
+ "stepId": "req-docs",
1705
+ "disposition": "pass",
1706
+ "evidence": "sentence corrected in docs/a.md"
1707
+ }
1708
+ },
1709
+ {
1710
+ "id": "verify-bind",
1711
+ "op": "binding",
1712
+ "payload": {
1713
+ "stepId": "req-verify",
1714
+ "bindingId": "verification-loop",
1715
+ "disposition": "loaded",
1716
+ "evidence": "verification loop skill located"
1717
+ }
1718
+ },
1719
+ {
1720
+ "id": "lint-run",
1721
+ "op": "hostRun",
1722
+ "payload": {
1723
+ "command": "doc-check",
1724
+ "args": [
1725
+ "check",
1726
+ "--workspace",
1727
+ ".",
1728
+ "--config",
1729
+ ".agents/harness-everything/alt-project-docs.json",
1730
+ "--changed-path",
1731
+ "docs/a.md"
1732
+ ]
1733
+ },
1734
+ "expectExit": {
1735
+ "off": [
1736
+ 0,
1737
+ 1
1738
+ ],
1739
+ "on": [
1740
+ 0,
1741
+ 1
1742
+ ]
1743
+ }
1744
+ },
1745
+ {
1746
+ "id": "post-ungoverned",
1747
+ "op": "hookDeliver",
1748
+ "payload": {
1749
+ "event": "PostToolUse",
1750
+ "command": "node {{DOC_CHECK}} check --workspace . --config .agents/harness-everything/alt-project-docs.json --changed-path docs/a.md",
1751
+ "toolUseId": "toolu_f4_ungov_01",
1752
+ "fromRun": "lint-run"
1753
+ }
1754
+ },
1755
+ {
1756
+ "id": "verify-pass",
1757
+ "op": "step",
1758
+ "payload": {
1759
+ "stepId": "req-verify",
1760
+ "disposition": "pass",
1761
+ "evidence": "objective doc check recorded"
1762
+ },
1763
+ "expectExit": {
1764
+ "on": [
1765
+ 0,
1766
+ 2
1767
+ ]
1768
+ }
1769
+ },
1770
+ {
1771
+ "id": "stop",
1772
+ "op": "stop"
1773
+ },
1774
+ {
1775
+ "id": "stop-generic",
1776
+ "op": "stopGeneric"
1777
+ }
1778
+ ]
1779
+ },
1780
+ {
1781
+ "id": "F4-NEG-not-on-disk",
1782
+ "description": "N3b: the expected path is absent from the candidate tree, so the check reports it not on disk and earns no credit.",
1783
+ "input": {
1784
+ "baseFiles": {
1785
+ ".agents/harness-everything/project-docs.json": "{\n \"governed\": [\n {\n \"path\": \"docs/a.md\",\n \"role\": \"reference\"\n }\n ],\n \"domains\": [\n \"GRPH\"\n ]\n}\n",
1786
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries once. See [b](b.md).\n",
1787
+ "docs/b.md": "b\n"
1788
+ },
1789
+ "candidateFiles": {
1790
+ "docs/a.md": null
1791
+ }
1792
+ },
1793
+ "requirements": [
1794
+ {
1795
+ "id": "req-docs",
1796
+ "stepType": "doc-change",
1797
+ "summary": "Correct the checkout retry sentence",
1798
+ "acceptance": "the governed reference body is reviewed"
1799
+ },
1800
+ {
1801
+ "id": "req-verify",
1802
+ "stepType": "verification",
1803
+ "summary": "Verify the reference change",
1804
+ "acceptance": "objective doc checks are recorded"
1805
+ }
1806
+ ],
1807
+ "actions": [
1808
+ {
1809
+ "id": "route",
1810
+ "op": "route",
1811
+ "payload": {
1812
+ "prompt": "Update the governed reference docs/a.md text, review it, and verify it."
1813
+ }
1814
+ },
1815
+ {
1816
+ "id": "plan",
1817
+ "op": "plan",
1818
+ "payload": {
1819
+ "requirements": "$requirements",
1820
+ "strategy": "iterative-single",
1821
+ "evidence": "two dependent requirements fit a bounded documentation loop"
1822
+ }
1823
+ },
1824
+ {
1825
+ "id": "start",
1826
+ "op": "start",
1827
+ "payload": {}
1828
+ },
1829
+ {
1830
+ "id": "doc-pass",
1831
+ "op": "step",
1832
+ "payload": {
1833
+ "stepId": "req-docs",
1834
+ "disposition": "pass",
1835
+ "evidence": "sentence corrected in docs/a.md"
1836
+ }
1837
+ },
1838
+ {
1839
+ "id": "verify-bind",
1840
+ "op": "binding",
1841
+ "payload": {
1842
+ "stepId": "req-verify",
1843
+ "bindingId": "verification-loop",
1844
+ "disposition": "loaded",
1845
+ "evidence": "verification loop skill located"
1846
+ }
1847
+ },
1848
+ {
1849
+ "id": "lint-run",
1850
+ "op": "hostRun",
1851
+ "payload": {
1852
+ "command": "doc-check",
1853
+ "args": [
1854
+ "check",
1855
+ "--workspace",
1856
+ ".",
1857
+ "--config",
1858
+ ".agents/harness-everything/project-docs.json",
1859
+ "--changed-path",
1860
+ "docs/a.md"
1861
+ ]
1862
+ },
1863
+ "expectExit": {
1864
+ "off": [
1865
+ 0,
1866
+ 1
1867
+ ],
1868
+ "on": [
1869
+ 0,
1870
+ 1
1871
+ ]
1872
+ }
1873
+ },
1874
+ {
1875
+ "id": "post-missing",
1876
+ "op": "hookDeliver",
1877
+ "payload": {
1878
+ "event": "PostToolUse",
1879
+ "command": "node {{DOC_CHECK}} check --workspace . --config .agents/harness-everything/project-docs.json --changed-path docs/a.md",
1880
+ "toolUseId": "toolu_f4_missing_01",
1881
+ "fromRun": "lint-run"
1882
+ }
1883
+ },
1884
+ {
1885
+ "id": "verify-pass",
1886
+ "op": "step",
1887
+ "payload": {
1888
+ "stepId": "req-verify",
1889
+ "disposition": "pass",
1890
+ "evidence": "objective doc check recorded"
1891
+ },
1892
+ "expectExit": {
1893
+ "on": [
1894
+ 0,
1895
+ 2
1896
+ ]
1897
+ }
1898
+ },
1899
+ {
1900
+ "id": "stop",
1901
+ "op": "stop"
1902
+ },
1903
+ {
1904
+ "id": "stop-generic",
1905
+ "op": "stopGeneric"
1906
+ }
1907
+ ]
1908
+ },
1909
+ {
1910
+ "id": "F4-REM-prose-share-present",
1911
+ "description": "N4: a valid body-only edit whose observed check carries the F2 prose-share reminder. The reminder must add or withhold no credit.",
1912
+ "input": {
1913
+ "baseFiles": {
1914
+ ".agents/harness-everything/project-docs.json": "{\n \"governed\": [\n {\n \"path\": \"docs/a.md\",\n \"role\": \"reference\"\n }\n ],\n \"domains\": [\n \"GRPH\"\n ]\n}\n",
1915
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries once. See [b](b.md).\n",
1916
+ "docs/b.md": "b\n"
1917
+ },
1918
+ "candidateFiles": {
1919
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries twice. See [b](b.md).\n"
1920
+ }
1921
+ },
1922
+ "requirements": [
1923
+ {
1924
+ "id": "req-docs",
1925
+ "stepType": "doc-change",
1926
+ "summary": "Correct the checkout retry sentence",
1927
+ "acceptance": "the governed reference body is reviewed"
1928
+ },
1929
+ {
1930
+ "id": "req-verify",
1931
+ "stepType": "verification",
1932
+ "summary": "Verify the reference change",
1933
+ "acceptance": "objective doc checks are recorded"
1934
+ }
1935
+ ],
1936
+ "actions": [
1937
+ {
1938
+ "id": "route",
1939
+ "op": "route",
1940
+ "payload": {
1941
+ "prompt": "Update the governed reference docs/a.md text, review it, and verify it."
1942
+ }
1943
+ },
1944
+ {
1945
+ "id": "plan",
1946
+ "op": "plan",
1947
+ "payload": {
1948
+ "requirements": "$requirements",
1949
+ "strategy": "iterative-single",
1950
+ "evidence": "two dependent requirements fit a bounded documentation loop"
1951
+ }
1952
+ },
1953
+ {
1954
+ "id": "start",
1955
+ "op": "start",
1956
+ "payload": {}
1957
+ },
1958
+ {
1959
+ "id": "doc-pass",
1960
+ "op": "step",
1961
+ "payload": {
1962
+ "stepId": "req-docs",
1963
+ "disposition": "pass",
1964
+ "evidence": "sentence corrected in docs/a.md"
1965
+ }
1966
+ },
1967
+ {
1968
+ "id": "verify-bind",
1969
+ "op": "binding",
1970
+ "payload": {
1971
+ "stepId": "req-verify",
1972
+ "bindingId": "verification-loop",
1973
+ "disposition": "loaded",
1974
+ "evidence": "verification loop skill located"
1975
+ }
1976
+ },
1977
+ {
1978
+ "id": "lint-run",
1979
+ "op": "hostRun",
1980
+ "payload": {
1981
+ "command": "doc-check",
1982
+ "args": [
1983
+ "check",
1984
+ "--workspace",
1985
+ ".",
1986
+ "--config",
1987
+ ".agents/harness-everything/project-docs.json",
1988
+ "--changed-path",
1989
+ "docs/a.md"
1990
+ ]
1991
+ }
1992
+ },
1993
+ {
1994
+ "id": "post-lint",
1995
+ "op": "hookDeliver",
1996
+ "payload": {
1997
+ "event": "PostToolUse",
1998
+ "command": "node {{DOC_CHECK}} check --workspace . --config .agents/harness-everything/project-docs.json --changed-path docs/a.md",
1999
+ "toolUseId": "toolu_f4_check_01",
2000
+ "fromRun": "lint-run"
2001
+ }
2002
+ },
2003
+ {
2004
+ "id": "verify-pass",
2005
+ "op": "step",
2006
+ "payload": {
2007
+ "stepId": "req-verify",
2008
+ "disposition": "pass",
2009
+ "evidence": "objective doc check recorded"
2010
+ },
2011
+ "expectExit": {
2012
+ "on": [
2013
+ 0,
2014
+ 2
2015
+ ]
2016
+ }
2017
+ },
2018
+ {
2019
+ "id": "stop",
2020
+ "op": "stop"
2021
+ },
2022
+ {
2023
+ "id": "stop-generic",
2024
+ "op": "stopGeneric"
2025
+ }
2026
+ ]
2027
+ },
2028
+ {
2029
+ "id": "F4-REM-prose-share-absent",
2030
+ "description": "N5: the same valid body-only edit with a structured body, so the observed check carries no reminder. Credit must match N4.",
2031
+ "input": {
2032
+ "baseFiles": {
2033
+ ".agents/harness-everything/project-docs.json": "{\n \"governed\": [\n {\n \"path\": \"docs/a.md\",\n \"role\": \"reference\"\n }\n ],\n \"domains\": [\n \"GRPH\"\n ]\n}\n",
2034
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries once. See [b](b.md).\n",
2035
+ "docs/b.md": "b\n"
2036
+ },
2037
+ "candidateFiles": {
2038
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\n# Retry\n\n| Step | Rule |\n|---|---|\n| one | retry |\n| two | retry |\n\n```\ncode line\n```\n\n- item\n- item\n\nThe checkout retries twice. See [b](b.md).\n"
2039
+ }
2040
+ },
2041
+ "requirements": [
2042
+ {
2043
+ "id": "req-docs",
2044
+ "stepType": "doc-change",
2045
+ "summary": "Correct the checkout retry sentence",
2046
+ "acceptance": "the governed reference body is reviewed"
2047
+ },
2048
+ {
2049
+ "id": "req-verify",
2050
+ "stepType": "verification",
2051
+ "summary": "Verify the reference change",
2052
+ "acceptance": "objective doc checks are recorded"
2053
+ }
2054
+ ],
2055
+ "actions": [
2056
+ {
2057
+ "id": "route",
2058
+ "op": "route",
2059
+ "payload": {
2060
+ "prompt": "Update the governed reference docs/a.md text, review it, and verify it."
2061
+ }
2062
+ },
2063
+ {
2064
+ "id": "plan",
2065
+ "op": "plan",
2066
+ "payload": {
2067
+ "requirements": "$requirements",
2068
+ "strategy": "iterative-single",
2069
+ "evidence": "two dependent requirements fit a bounded documentation loop"
2070
+ }
2071
+ },
2072
+ {
2073
+ "id": "start",
2074
+ "op": "start",
2075
+ "payload": {}
2076
+ },
2077
+ {
2078
+ "id": "doc-pass",
2079
+ "op": "step",
2080
+ "payload": {
2081
+ "stepId": "req-docs",
2082
+ "disposition": "pass",
2083
+ "evidence": "sentence corrected in docs/a.md"
2084
+ }
2085
+ },
2086
+ {
2087
+ "id": "verify-bind",
2088
+ "op": "binding",
2089
+ "payload": {
2090
+ "stepId": "req-verify",
2091
+ "bindingId": "verification-loop",
2092
+ "disposition": "loaded",
2093
+ "evidence": "verification loop skill located"
2094
+ }
2095
+ },
2096
+ {
2097
+ "id": "lint-run",
2098
+ "op": "hostRun",
2099
+ "payload": {
2100
+ "command": "doc-check",
2101
+ "args": [
2102
+ "check",
2103
+ "--workspace",
2104
+ ".",
2105
+ "--config",
2106
+ ".agents/harness-everything/project-docs.json",
2107
+ "--changed-path",
2108
+ "docs/a.md"
2109
+ ]
2110
+ }
2111
+ },
2112
+ {
2113
+ "id": "post-lint",
2114
+ "op": "hookDeliver",
2115
+ "payload": {
2116
+ "event": "PostToolUse",
2117
+ "command": "node {{DOC_CHECK}} check --workspace . --config .agents/harness-everything/project-docs.json --changed-path docs/a.md",
2118
+ "toolUseId": "toolu_f4_check_01",
2119
+ "fromRun": "lint-run"
2120
+ }
2121
+ },
2122
+ {
2123
+ "id": "verify-pass",
2124
+ "op": "step",
2125
+ "payload": {
2126
+ "stepId": "req-verify",
2127
+ "disposition": "pass",
2128
+ "evidence": "objective doc check recorded"
2129
+ },
2130
+ "expectExit": {
2131
+ "on": [
2132
+ 0,
2133
+ 2
2134
+ ]
2135
+ }
2136
+ },
2137
+ {
2138
+ "id": "stop",
2139
+ "op": "stop"
2140
+ },
2141
+ {
2142
+ "id": "stop-generic",
2143
+ "op": "stopGeneric"
2144
+ }
2145
+ ]
2146
+ },
2147
+ {
2148
+ "id": "F4-NEG-relative-path",
2149
+ "description": "F4-T5 conflict 2: the same valid body-only edit, but the registered check is invoked by its relative path (harness-everything/scripts/doc-check.js). The relative path resolves to no installed script from the captured workspace, so F1 refuses it: no lint or link credit, and the journal keeps the command as delivered.",
2150
+ "input": {
2151
+ "baseFiles": {
2152
+ ".agents/harness-everything/project-docs.json": "{\n \"governed\": [\n {\n \"path\": \"docs/a.md\",\n \"role\": \"reference\"\n }\n ],\n \"domains\": [\n \"GRPH\"\n ]\n}\n",
2153
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries once. See [b](b.md).\n",
2154
+ "docs/b.md": "b\n"
2155
+ },
2156
+ "candidateFiles": {
2157
+ "docs/a.md": "---\nrole: reference\nstatus: active\n---\n\nThe checkout retries twice. See [b](b.md).\n"
2158
+ }
2159
+ },
2160
+ "requirements": [
2161
+ {
2162
+ "id": "req-docs",
2163
+ "stepType": "doc-change",
2164
+ "summary": "Correct the checkout retry sentence",
2165
+ "acceptance": "the governed reference body is reviewed"
2166
+ },
2167
+ {
2168
+ "id": "req-verify",
2169
+ "stepType": "verification",
2170
+ "summary": "Verify the reference change",
2171
+ "acceptance": "objective doc checks are recorded"
2172
+ }
2173
+ ],
2174
+ "actions": [
2175
+ {
2176
+ "id": "route",
2177
+ "op": "route",
2178
+ "payload": {
2179
+ "prompt": "Update the governed reference docs/a.md text, review it, and verify it."
2180
+ }
2181
+ },
2182
+ {
2183
+ "id": "plan",
2184
+ "op": "plan",
2185
+ "payload": {
2186
+ "requirements": "$requirements",
2187
+ "strategy": "iterative-single",
2188
+ "evidence": "two dependent requirements fit a bounded documentation loop"
2189
+ }
2190
+ },
2191
+ {
2192
+ "id": "start",
2193
+ "op": "start",
2194
+ "payload": {}
2195
+ },
2196
+ {
2197
+ "id": "doc-pass",
2198
+ "op": "step",
2199
+ "payload": {
2200
+ "stepId": "req-docs",
2201
+ "disposition": "pass",
2202
+ "evidence": "sentence corrected in docs/a.md"
2203
+ }
2204
+ },
2205
+ {
2206
+ "id": "verify-bind",
2207
+ "op": "binding",
2208
+ "payload": {
2209
+ "stepId": "req-verify",
2210
+ "bindingId": "verification-loop",
2211
+ "disposition": "loaded",
2212
+ "evidence": "verification loop skill located"
2213
+ }
2214
+ },
2215
+ {
2216
+ "id": "lint-run",
2217
+ "op": "hostRun",
2218
+ "payload": {
2219
+ "command": "doc-check",
2220
+ "args": [
2221
+ "check",
2222
+ "--workspace",
2223
+ ".",
2224
+ "--config",
2225
+ ".agents/harness-everything/project-docs.json",
2226
+ "--changed-path",
2227
+ "docs/a.md"
2228
+ ]
2229
+ }
2230
+ },
2231
+ {
2232
+ "id": "post-lint",
2233
+ "op": "hookDeliver",
2234
+ "payload": {
2235
+ "event": "PostToolUse",
2236
+ "command": "node harness-everything/scripts/doc-check.js check --workspace . --config .agents/harness-everything/project-docs.json --changed-path docs/a.md",
2237
+ "toolUseId": "toolu_f4_check_01",
2238
+ "fromRun": "lint-run"
2239
+ }
2240
+ },
2241
+ {
2242
+ "id": "verify-pass",
2243
+ "op": "step",
2244
+ "payload": {
2245
+ "stepId": "req-verify",
2246
+ "disposition": "pass",
2247
+ "evidence": "objective doc check recorded"
2248
+ },
2249
+ "expectExit": {
2250
+ "on": [
2251
+ 0,
2252
+ 2
2253
+ ]
2254
+ }
2255
+ },
2256
+ {
2257
+ "id": "stop",
2258
+ "op": "stop"
2259
+ },
2260
+ {
2261
+ "id": "stop-generic",
2262
+ "op": "stopGeneric"
2263
+ }
2264
+ ]
2265
+ }
2266
+ ]
2267
+ }