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,110 @@
1
+ # F2-P report — opening paragraph of `docs/doc-workflow-reconciliation.md`
2
+
3
+ ## 1. Files read (in order)
4
+
5
+ 1. `<repo>/.worktrees/packets/feat-path/F2-P-f2-task.md`
6
+ 2. `<paired>/arm-f2/harness-everything/SKILL.md`
7
+ 3. `<paired>/arm-f2/docs/doc-workflow-reconciliation.md`
8
+ 4. `<paired>/arm-f2/AGENTS.md`
9
+ 5. `<paired>/arm-f2/harness-everything/references/triage-and-tiers.md`
10
+ 6. `<paired>/arm-f2/harness-everything/references/doc-check.md`
11
+ 7. `<paired>/arm-f2/harness-everything/references/documentation/_shared/writing-craft.md`
12
+ 8. `<paired>/arm-f2/.agents/harness-everything/project-docs.json`
13
+
14
+ ## 2. Paragraph before / after (verbatim)
15
+
16
+ Before:
17
+
18
+ ```
19
+ **Status: S1 runtime ships default OFF; opt in with `HARNESS_DOC_RECONCILIATION_PILOT=1`.
20
+ S1 grants no positive document verification credit. S2/S3 are pending; E1 has not started.**
21
+ This document refines the [document lifecycle contract](document-lifecycle.md#phase-3b--narrow-integration-contract-s1-shipped-default-off-positive-reconciliation-not-shipped).
22
+ The [accepted E0](https://github.com/dyphn1/Harness-everything/issues/341#issuecomment-6308604128)
23
+ permits this limited, reversible consumer under the
24
+ [owner's E0/E1 decision](https://github.com/dyphn1/Harness-everything/issues/325#issuecomment-6283237637).
25
+ Current evidence establishes deterministic mechanism/package behavior, not live-host loading or E1 GO.
26
+ ```
27
+
28
+ After:
29
+
30
+ ```
31
+ **Status: the S1 runtime documented here is a temporary, no-credit Phase 3b slice that
32
+ ships default OFF. To opt in, set `HARNESS_DOC_RECONCILIATION_PILOT=1`.
33
+ S1 grants no positive document verification credit. S2/S3 are pending; E1 has not started.**
34
+ This document refines the [document lifecycle contract](document-lifecycle.md#phase-3b--narrow-integration-contract-s1-shipped-default-off-positive-reconciliation-not-shipped)
35
+ by adding a limited, reversible consumer of that contract.
36
+ The [accepted E0](https://github.com/dyphn1/Harness-everything/issues/341#issuecomment-6308604128)
37
+ permits that consumer under the
38
+ [owner's E0/E1 decision](https://github.com/dyphn1/Harness-everything/issues/325#issuecomment-6283237637).
39
+ Current evidence establishes deterministic mechanism/package behavior, not live-host loading or E1 GO.
40
+ ```
41
+
42
+ All three links, the anchor (including its URL fragment), the frontmatter, and every factual/contract claim are preserved. The rest of the file was not touched. The only additions ("temporary", "no-credit", "Phase 3b", sentence splits, the explicit "consumer of that contract") are restatements of claims already in the document (e.g. "S1 is a temporary negative-credit slice", "Phase 3b", "preserve the checker's current envelope boundary" sections).
43
+
44
+ ## 3. Check run
45
+
46
+ Per doc-check.md ("Use an absolute workspace path"), run once from the workspace root. `--base` is omitted because the packet forbids git commands, so the output records `evidence.immutability: not-observed` as the guidance anticipates.
47
+
48
+ Command:
49
+
50
+ ```
51
+ node "<paired>/arm-f2/harness-everything/scripts/doc-check.js" check \
52
+ --workspace "<paired>/arm-f2" \
53
+ --config .agents/harness-everything/project-docs.json \
54
+ --changed-path "docs/doc-workflow-reconciliation.md"
55
+ ```
56
+
57
+ Exit code: `0`
58
+
59
+ Full stdout:
60
+
61
+ ```text
62
+ {
63
+ "lint": {
64
+ "exit": 0,
65
+ "evidence": {
66
+ "immutability": "not-observed"
67
+ },
68
+ "diagnostics": []
69
+ },
70
+ "links": {
71
+ "checked": 10,
72
+ "broken": []
73
+ },
74
+ "coverage": {
75
+ "unsupported": [
76
+ {
77
+ "reason": "no domains declared; bare <DOMAIN>-NNN references are not checked"
78
+ }
79
+ ]
80
+ },
81
+ "reminders": [
82
+ {
83
+ "code": "prose-share",
84
+ "path": "docs/doc-workflow-reconciliation.md",
85
+ "strength": "SHOULD",
86
+ "proseLines": 559,
87
+ "eligibleLines": 721,
88
+ "share": 0.7753120665742025,
89
+ "threshold": 0.5
90
+ }
91
+ ]
92
+ }
93
+ ```
94
+
95
+ Notes (not caused by my edit, not fixed):
96
+
97
+ - `coverage.unsupported` reports that the config declares no `domains`, so bare `<DOMAIN>-NNN` references are not checked; this is a config property that existed before the edit.
98
+ - The `prose-share` reminder is advisory (`strength: "SHOULD"`) per writing-craft.md; the doc already exceeded the threshold before the edit, and the task forbids restructuring. Dismissed by reading; exit code unchanged.
99
+
100
+ ## 4. Guidance followed (and the files that instructed it)
101
+
102
+ 1. `arm-f2/harness-everything/SKILL.md` — invariants to route the work and verify with objective evidence ("Verify (MUST)"); its deep dive pointer to `references/triage-and-tiers.md`.
103
+ 2. `arm-f2/harness-everything/references/triage-and-tiers.md` — the Governed-doc check: "any edit to a file governed by `.agents/harness-everything/project-docs.json` runs the editorial check in doc-check.md: lifecycle lint plus local link targets."
104
+ 3. `arm-f2/harness-everything/references/doc-check.md` — the exact check command, its output/exit-code contract, that a reminder is a SHOULD dismissed by reading, and to record the full command, exit code, stdout, and whether `coverage.unsupported` is empty.
105
+ 4. `arm-f2/harness-everything/references/documentation/_shared/writing-craft.md` — read before editing a governed doc (per doc-check.md): one idea per sentence, prose ≤ 3 sentences per paragraph, the prose-share reminder rules.
106
+ 5. `arm-f2/.agents/harness-everything/project-docs.json` — confirmed `docs/doc-workflow-reconciliation.md` is governed (`role: reference`), so the check MUST run.
107
+
108
+ Because of this guidance I rewrote the paragraph with one idea per sentence (writing-craft.md), confirmed the doc is governed (project-docs.json), and ran `doc-check.js` with the workspace, governed-config and changed path exactly as doc-check.md prescribes; nothing the check reported was caused by my edit, so nothing further needed fixing.
109
+
110
+ STATUS: DONE
@@ -0,0 +1,21 @@
1
+ # Doc edit task (arm f2)
2
+
3
+ **Workspace:** `<paired>/arm-f2`. Work **only** inside it. No git or gh commands. Do not open any other copy of this repository.
4
+
5
+ ## Task
6
+
7
+ This project uses Harness skills, whose source is inside the workspace. Start by reading `<paired>/arm-f2/harness-everything/SKILL.md`, and follow its guidance for editing a governed project document.
8
+
9
+ Edit `docs/doc-workflow-reconciliation.md`: make its opening explanatory paragraph (the first paragraph after the H1 title) clearer for a first-time reader. Keep every link, the frontmatter, and every factual or contract claim. Do not restructure the rest of the file.
10
+
11
+ When done, run whatever check the Harness guidance tells you to run for a governed doc, and fix anything it reports that your edit caused.
12
+
13
+ ## Report
14
+
15
+ Write `<repo>/.worktrees/packets/feat-path/F2-P-f2-report.md` with these sections:
16
+ 1. **Files read**, in order, with absolute paths. Include every file you opened.
17
+ 2. **Paragraph before / after**, verbatim.
18
+ 3. **Check run:** the exact command, the exit code and the full stdout.
19
+ 4. **Guidance followed:** what you did because a Harness file told you to, naming the file.
20
+
21
+ The last line must be `STATUS: DONE` or `STATUS: BLOCKED: <reason>`.
@@ -0,0 +1,19 @@
1
+ --- <base>/docs/doc-workflow-reconciliation.md 2026-10-22 10:18:31
2
+ +++ <arm-f2>/docs/doc-workflow-reconciliation.md 2026-10-22 10:47:26
3
+ @@ -5,11 +5,13 @@
4
+
5
+ # Document workflow reconciliation — Phase 3b S1 runtime
6
+
7
+ -**Status: S1 runtime ships default OFF; opt in with `HARNESS_DOC_RECONCILIATION_PILOT=1`.
8
+ +**Status: the S1 runtime documented here is a temporary, no-credit Phase 3b slice that
9
+ +ships default OFF. To opt in, set `HARNESS_DOC_RECONCILIATION_PILOT=1`.
10
+ S1 grants no positive document verification credit. S2/S3 are pending; E1 has not started.**
11
+ -This document refines the [document lifecycle contract](document-lifecycle.md#phase-3b--narrow-integration-contract-s1-shipped-default-off-positive-reconciliation-not-shipped).
12
+ +This document refines the [document lifecycle contract](document-lifecycle.md#phase-3b--narrow-integration-contract-s1-shipped-default-off-positive-reconciliation-not-shipped)
13
+ +by adding a limited, reversible consumer of that contract.
14
+ The [accepted E0](https://github.com/dyphn1/Harness-everything/issues/341#issuecomment-6308604128)
15
+ -permits this limited, reversible consumer under the
16
+ +permits that consumer under the
17
+ [owner's E0/E1 decision](https://github.com/dyphn1/Harness-everything/issues/325#issuecomment-6283237637).
18
+ Current evidence establishes deterministic mechanism/package behavior, not live-host loading or E1 GO.
19
+
@@ -0,0 +1,34 @@
1
+ # F3 paired task: F2 carrier vs F3 carrier, stale derived view (2026-10-22)
2
+
3
+ The task is a metadata change that makes a declared derived view stale. Each arm ran once. The two arms differ only in the Harness tree under test. This shows whether the regenerate-equals loop was followed. It is **not** evidence of quality or of #341 E1.
4
+
5
+ ## Setup
6
+
7
+ | Item | F2 arm | F3 arm |
8
+ |---|---|---|
9
+ | Tree | `feat/325-f2-doc-craft` @ `3413ece` (rsync copy, no `.git`, no `node_modules`) | F3 working tree after F3-I2 and the generated index |
10
+ | Start state | F3's `project-docs.json` (with the `derived` declaration) and F3's current `docs/governed-index.md` copied in, so both arms have the same declaration and the same current view (checked with `diff`) | same |
11
+ | Agent | OpenCode, GLM-5.3-Flash, fresh session (`/new`) | same |
12
+ | Task | [arm-f2-task.md](arm-f2-task.md) and [arm-f3-task.md](arm-f3-task.md). Byte-identical apart from the workspace path. Mark `docs/architecture.md` deprecated, keep dependents consistent, and run any declared command (authorized). | same |
13
+
14
+ ## Results
15
+
16
+ | Measure | F2 arm | F3 arm |
17
+ |---|---|---|
18
+ | Outcome | `status: deprecated`; index regenerated | `status: deprecated`; index regenerated |
19
+ | Final index | byte-identical to the F3 arm | byte-identical to the F2 arm |
20
+ | Coordinator re-check (`compare-derived` from a fresh regeneration) | `equal` | `equal` |
21
+ | Files changed | `architecture.md`, `governed-index.md` | `architecture.md`, `governed-index.md` |
22
+ | Carrier path read | `SKILL.md` → `document-lifecycle.md` → config → index (no `doc-check.md`) | `SKILL.md` → `triage-and-tiers.md` → `doc-check.md` → config → index |
23
+ | Doc check run | no | yes, before and after the change |
24
+ | Stale view detected **before** replacement | no record | `check` listed the view as `unverified`, then `compare-derived` returned `stale` (exit 1) |
25
+ | Regenerate-equals evidence | none; the generator output was written directly | `compare-derived` returned `equal` (exit 0) after the write |
26
+ | Off-task commands | `verify-gate.js` and a `2ax` test run (environment failure unrelated to the task) | none |
27
+
28
+ - **executed:** the coordinator verified both outcomes from disk: the diffs, the byte-identical indexes, and an independent regenerate-and-compare.
29
+ - **source-traced:** the read lists and command lists are the agents' self-reports.
30
+ - **inconclusive:** n = 1 per arm. The F2 agent reached the right result by reading the config. F3 changes the **evidence**, giving a recorded stale→equal comparison, and does not change the outcome in this run.
31
+
32
+ ## Comparison with F1/F2
33
+
34
+ `check` keeps its F2 exit codes and reminders. F3 adds only the `unverified` coverage entries and the separate, pure `compare-derived` command. Discovery never executes the generator: D1 of the F3 suite uses a sentinel command to verify this.
@@ -0,0 +1,43 @@
1
+ # F3-P-f2 report
2
+
3
+ Workspace: `<paired>/arm-f2` (all work confined to it; no git/gh used).
4
+
5
+ ## 1. Files read (in order)
6
+
7
+ 1. `<scratch>` — routed per its instructions.
8
+ 2. `<scratch>` — the governed document to deprecate.
9
+ 3. `<scratch>` — D6.1 status vocabulary: role `reference` permits `active` / `deprecated`; D6.5/D6.6 diff-fact and event obligations; generated-index contract.
10
+ 4. `<scratch>` — governed paths + the declared derived-index generator.
11
+ 5. `<scratch>` — derived view depending on the document (read to confirm staleness after the edit).
12
+ 6. `<scratch>` (lines 14–19) — to diagnose the 55 failing mechanism suites.
13
+
14
+ ## 2. Files changed
15
+
16
+ - `docs/architecture.md` — frontmatter `status: active` → `status: deprecated`. Owner deprecation decision; sole content change (no body edit).
17
+ - `docs/governed-index.md` — regenerated with the project-declared generator because its shown status for `docs/architecture.md` now depended on the edited frontmatter.
18
+
19
+ ## 3. Commands run
20
+
21
+ | Command | Exit | Trimmed stdout |
22
+ |---|---|---|
23
+ | `node harness-everything/scripts/doc-lifecycle.js index --workspace . --config .agents/harness-everything/project-docs.json --all` (dry run) | 0 | index showing `docs/architecture.md` with `status: deprecated` |
24
+ | same command redirected to `docs/governed-index.md` (regenerate) | 0 | regenerated index |
25
+ | `node harness-everything/scripts/doc-lifecycle.js lint --workspace . --config .agents/harness-everything/project-docs.json --changed-path docs/architecture.md --changed-path docs/governed-index.md` | 0 | `{"diagnostics": [], "evidence": {"immutability": "not-observed"}}` |
26
+ | regenerate-again piped, diffed against committed `docs/governed-index.md` | 0 | `regenerate-equals: identical` |
27
+ | `node harness-everything/scripts/verify-gate.js --json` | 0 (report status FAILED) | `check package-test exited 1` — `npm run test` runs 55 pre-existing environmental failures, see below |
28
+ | `npm run test --silent` | 1 | 55 mechanism suites fail with `TypeError ... path.join(...) Received null at ci/test-helper.js:17` (plus `ENOENT ... node_modules`, `1 invalid case file(s)`) |
29
+ | `node ci/mechanism-2ax-doc-lifecycle.test.js` (with change applied) | fails | same `ERR_INVALID_ARG_TYPE` at `ci/test-helper.js:17` |
30
+ | `node ci/mechanism-2ax-doc-lifecycle.test.js` (baseline: revert applied, identical output) | fails | byte-identical `ERR_INVALID_ARG_TYPE` failure |
31
+ | revert re-applied; lint + regenerate-equals re-run | 0 | as above |
32
+
33
+ Baseline evidence: the representative failing suite fails identically with and without my edit, so the 55 `npm test` failures are pre-existing environmental (scratchpad has no `node_modules`; `getWorkspaceRoot()` returns null at `ci/test-helper.js:17`), not caused by the change.
34
+
35
+ ## 4. Guidance followed
36
+
37
+ - `harness-everything/SKILL.md` (Workflow step 1+): routed task, then used the project's document-lifecycle guidance rather than improvising. Its `verify-gate.js --json` invariant (MUST) was run; it fails on pre-existing environmental `npm test` failures, shown not caused by this change via the revert baseline above.
38
+ - `docs/document-lifecycle.md` (D6.1 status table): role `reference` vocabulary is `active` / `deprecated` → used exactly `status: deprecated`.
39
+ - `docs/document-lifecycle.md` (D6.5 diff facts): "Any governed file touched" → lint + in-repo link check; "Normative field: frontmatter status" → this is the status-field fact; "Declared derived source affected" → regenerate + regenerate-equals — all satisfied.
40
+ - `.agents/harness-everything/project-docs.json` (D5 derived generator): ran the declared generator command verbatim to regenerate `docs/governed-index.md`, then verified byte-identical regeneration.
41
+ - No other content edits: remaining `docs/architecture.md` mentions in `docs/audit.md` are historical narrative, not governance dependencies; no `supersedes` edge involved.
42
+
43
+ STATUS: DONE
@@ -0,0 +1,21 @@
1
+ # Doc edit task (arm f2)
2
+
3
+ **Workspace:** `<paired>/arm-f2`. Work **only** inside it. No git or gh commands. Do not open any other copy of this repository.
4
+
5
+ ## Task
6
+
7
+ This project uses Harness skills, and their source is inside the workspace. Start by reading `<paired>/arm-f2/harness-everything/SKILL.md`, then follow its guidance for changing a governed project document.
8
+
9
+ The owner has decided that `docs/architecture.md` is now **deprecated**. Record that decision in the document's frontmatter, using the project's own status vocabulary for that document's role. Make no other content change.
10
+
11
+ Then do everything the Harness guidance and the project configuration require for this kind of change. Keep anything that depends on this document consistent. If the guidance requires running a command that the project declares, you are authorized to run it. When you finish, run whatever checks the guidance names, and fix anything they report that your change caused.
12
+
13
+ ## Report
14
+
15
+ Write `<repo>/.worktrees/packets/feat-path/F3-P-f2-report.md` with these sections:
16
+ 1. **Files read**, in order, as absolute paths.
17
+ 2. **Files changed**, each with a one-line reason.
18
+ 3. **Commands run**, each with its exact command line, exit code and trimmed stdout.
19
+ 4. **Guidance followed**: what you did because a Harness file or the project config told you to, naming the file.
20
+
21
+ The last line must be `STATUS: DONE` or `STATUS: BLOCKED: <reason>`.
@@ -0,0 +1,21 @@
1
+ --- <start>/docs/architecture.md 2026-10-22 11:07:09
2
+ +++ <arm-f2>/docs/architecture.md 2026-10-22 11:59:28
3
+ @@ -1,6 +1,6 @@
4
+ ---
5
+ role: reference
6
+ -status: active
7
+ +status: deprecated
8
+ ---
9
+
10
+ # Harness Architecture
11
+ --- <start>/docs/governed-index.md 2026-10-22 11:41:59
12
+ +++ <arm-f2>/docs/governed-index.md 2026-10-22 11:43:34
13
+ @@ -2,7 +2,7 @@
14
+
15
+ ## Active documents
16
+
17
+ -- `(no id)` — `docs/architecture.md` (role: reference; status: active)
18
+ +- `(no id)` — `docs/architecture.md` (role: reference; status: deprecated)
19
+ - `(no id)` — `docs/doc-workflow-reconciliation.md` (role: reference; status: active)
20
+
21
+ ## PRD revision chains
@@ -0,0 +1,57 @@
1
+ # F3-P-f3 report (arm f3)
2
+
3
+ ## 1. Files read (absolute paths, in order)
4
+
5
+ 1. `<paired>/arm-f3/harness-everything/SKILL.md`
6
+ 2. `<paired>/arm-f3/harness-everything/references/triage-and-tiers.md`
7
+ 3. `<paired>/arm-f3/harness-everything/references/doc-check.md`
8
+ 4. `<paired>/arm-f3/.agents/harness-everything/project-docs.json`
9
+ 5. `<paired>/arm-f3/docs/architecture.md`
10
+ 6. `<paired>/arm-f3/docs/governed-index.md`
11
+ 7. `<paired>/arm-f3/AGENTS.md`
12
+ 8. `<paired>/arm-f3/harness-everything/scripts/doc-lifecycle.js` (status vocabulary, via grep/sed)
13
+
14
+ ## 2. Files changed
15
+
16
+ | File | Reason |
17
+ |---|---|
18
+ | `docs/architecture.md` | Frontmatter `status: active` → `status: deprecated` (owner deprecation decision; only status vocabulary value for role `reference` that records deprecation). No other content changed. |
19
+ | `docs/governed-index.md` | Derived view regenerated per its declared generator; it previously showed `docs/architecture.md` as `status: active`. |
20
+
21
+ ## 3. Commands run
22
+
23
+ Workspace root for all commands:
24
+ `<paired>/arm-f3`
25
+
26
+ **3.1 Doc check (before derived-view regeneration)** — `node harness-everything/scripts/doc-check.js check --workspace "$PWD" --config .agents/harness-everything/project-docs.json --changed-path "docs/architecture.md"`
27
+ - exit 0; lint exit 0, diagnostics []; links checked 2, broken []; coverage.unsupported: domains notice + governed-index.md listed as unverified derived view.
28
+ - `--base` omitted (git commands forbidden in this workspace), so `evidence.immutability: not-observed`.
29
+
30
+ **3.2 Authorized generator (stdout captured to scratch)** — `node harness-everything/scripts/doc-lifecycle.js index --workspace . --config .agents/harness-everything/project-docs.json --all > <tmpdir>/opencode/governed-index-candidate.md 2> <tmpdir>/opencode/governed-index-gen.stderr`
31
+ - exit 0; stdout artifact 303 bytes; stderr 0 bytes (empty).
32
+ - This is the exact generator string declared in `.agents/harness-everything/project-docs.json` for this view; packet authorized running project-declared commands.
33
+
34
+ **3.3 First compare-derived (target not yet regenerated)** — `node harness-everything/scripts/doc-check.js compare-derived --workspace "$PWD" --config .agents/harness-everything/project-docs.json --view docs/governed-index.md --candidate scratch-candidate --generation-status ok`
35
+ - exit 1; result `stale`, "candidate bytes differ from the declared target; target left unchanged".
36
+
37
+ **3.4 Write declared target** — `cp <scratch candidate> docs/governed-index.md` (exit 0). New target content shows:
38
+ - `(no id)` — `docs/architecture.md` (role: reference; status: **deprecated**)
39
+ - `(no id)` — `docs/doc-workflow-reconciliation.md` (role: reference; status: active)
40
+
41
+ **3.5 Second compare-derived (after write)** — same as 3.3
42
+ - exit 0; result `equal`, "candidate bytes equal the declared target".
43
+
44
+ **3.6 Final doc check (both changed paths)** — `node harness-everything/scripts/doc-check.js check --workspace "$PWD" --config .agents/harness-everything/project-docs.json --changed-path "docs/architecture.md" --changed-path "docs/governed-index.md"`
45
+ - exit 0; lint exit 0, diagnostics []; links checked 2, broken []; no reminders.
46
+ - coverage.unsupported: the two expected partial-coverage items — the "no domains declared" notice, and governed-index.md reported both as `not governed` (it is a derived target, not a governed source) and `unverified` (check never runs generators under this contract). The equality claim for the derived view is carried by command 3.5's `equal` at exit 0, per doc-check.md ("Record one comparison per affected view in the task report").
47
+
48
+ ## 4. Guidance followed
49
+
50
+ - **`harness-everything/SKILL.md`** — routed the task through Harness; triaged as Tier 1 (single small governed-doc edit) with `direct-single` smallest topology; kept semantic obligations: verify before claim, single Harness Status block, re-plan rule not triggered.
51
+ - **`harness-everything/references/triage-and-tiers.md`** — the SKILL.md deep dive pointer led here; its "Governed-doc check" section sent edits of files governed by `.agents/harness-everything/project-docs.json` to the doc-check lane in `references/doc-check.md`.
52
+ - **`harness-everything/references/doc-check.md`** — ran lifecycle lint + link check after the edit; followed the "Derived views" contract: applicability `conservative-all-governed` (the governed source edit affects the declared derived view), authorized generation with stdout-only capture to a scratch file outside source globs, then `compare-derived` byte-equality verification. Called this command evidence, not document-obligation credit.
53
+ - **`.agents/harness-everything/project-docs.json`** (`project-docs-resolver` project config) — declared `docs/architecture.md` governed with role `reference`, and the derived view `docs/governed-index.md` with its exact generator command; used as written.
54
+ - **`harness-everything/scripts/doc-lifecycle.js`** — supplied the project's status vocabulary: role `reference` allows `active` / `deprecated`; `deprecated` chosen.
55
+ - **`AGENTS.md` (workspace)** — emitted the Harness Status block; avoided git/gh commands as packet-required; verification per the doc lane (npm `verify:all` not run: this workspace change is docs-only and the packet scope is the controlled copy, not the parent repo).
56
+
57
+ STATUS: DONE
@@ -0,0 +1,21 @@
1
+ # Doc edit task (arm f3)
2
+
3
+ **Workspace:** `<paired>/arm-f3`. Work **only** inside it. No git or gh commands. Do not open any other copy of this repository.
4
+
5
+ ## Task
6
+
7
+ This project uses Harness skills, and their source is inside the workspace. Start by reading `<paired>/arm-f3/harness-everything/SKILL.md`, then follow its guidance for changing a governed project document.
8
+
9
+ The owner has decided that `docs/architecture.md` is now **deprecated**. Record that decision in the document's frontmatter, using the project's own status vocabulary for that document's role. Make no other content change.
10
+
11
+ Then do everything the Harness guidance and the project configuration require for this kind of change. Keep anything that depends on this document consistent. If the guidance requires running a command that the project declares, you are authorized to run it. When you finish, run whatever checks the guidance names, and fix anything they report that your change caused.
12
+
13
+ ## Report
14
+
15
+ Write `<repo>/.worktrees/packets/feat-path/F3-P-f3-report.md` with these sections:
16
+ 1. **Files read**, in order, as absolute paths.
17
+ 2. **Files changed**, each with a one-line reason.
18
+ 3. **Commands run**, each with its exact command line, exit code and trimmed stdout.
19
+ 4. **Guidance followed**: what you did because a Harness file or the project config told you to, naming the file.
20
+
21
+ The last line must be `STATUS: DONE` or `STATUS: BLOCKED: <reason>`.
@@ -0,0 +1,21 @@
1
+ --- <start>/docs/architecture.md 2026-10-22 11:07:09
2
+ +++ <arm-f3>/docs/architecture.md 2026-10-22 11:45:46
3
+ @@ -1,6 +1,6 @@
4
+ ---
5
+ role: reference
6
+ -status: active
7
+ +status: deprecated
8
+ ---
9
+
10
+ # Harness Architecture
11
+ --- <start>/docs/governed-index.md 2026-10-22 11:41:59
12
+ +++ <arm-f3>/docs/governed-index.md 2026-10-22 11:45:53
13
+ @@ -2,7 +2,7 @@
14
+
15
+ ## Active documents
16
+
17
+ -- `(no id)` — `docs/architecture.md` (role: reference; status: active)
18
+ +- `(no id)` — `docs/architecture.md` (role: reference; status: deprecated)
19
+ - `(no id)` — `docs/doc-workflow-reconciliation.md` (role: reference; status: active)
20
+
21
+ ## PRD revision chains
@@ -0,0 +1,99 @@
1
+ # Live-host capture: claude-325-3b-s2b (F4-L2)
2
+
3
+ **Qualifying run: Run 2b.** A headless Claude Code session completed the registered doc-check command and the reviewer returned a labelled verdict. The Pre and Post PreToolUse/PostToolUse of the doc-check call are correlated on one `tool_use_id`, and the reviewer's `agent_id` is populated and correlated with the parent session. This run is field-availability evidence, not live-host credit. The qualification export (`hooks/scripts/lib/doc-reconciliation-qualification.json`) is written and ships with a sibling copy of `capture.sanitized.jsonl`. No live-host credit run exists yet.
4
+
5
+ Run 1 (gate unmet) and Run 2a (a denied attempt) are kept below for the record.
6
+
7
+ ## Pins
8
+
9
+ | Item | Value |
10
+ |---|---|
11
+ | F4 HEAD (capture implementation) | `97243e5054329ef2f8d20138f41cf9b6d6d1cfdd` |
12
+ | HEAD tree | `aa21c5dd93d6b5894c683222e0c3d66a72f09aeb` |
13
+ | Staging | `node scripts/stage-claude-plugin.js <scratch>/plugin` at the clean HEAD (1711 tracked files) |
14
+ | Host | Claude Code `2.1.308`, macOS (darwin 25.6.0), zsh |
15
+ | Plugin loaded | `harness-everything` 0.39.0, source `inline`, from `--plugin-dir` |
16
+
17
+ The live worktree has an uncommitted change to `hooks/scripts/lib/doc-reconciliation-pilot.js` that is not part of the staged copy and was not exercised.
18
+
19
+ ## Run 2b (qualifying)
20
+
21
+ ### Command (sanitized)
22
+
23
+ ```text
24
+ cd <scratch>/project
25
+ HARNESS_DOC_RECONCILIATION_PILOT=1 HARNESS_STATE_HOME=<scratch>/state-run2b \
26
+ claude -p "<fixed prompt: read docs/a.md; run exactly the registered doc-check command (quoted path); invoke the foreground doc-reviewer; wait; stop>" \
27
+ --plugin-dir <scratch>/plugin \
28
+ --settings <scratch>/capture-settings-run2.json \
29
+ --agents '{"doc-reviewer":{"description":"Read-only documentation reviewer","prompt":"Read only. Return explicit verdict, summary and reviewed artifact digests; never edit or execute the implementation."}}' \
30
+ --allowedTools "Bash(node \"<staged doc-check.js>\" check:*)" Read Task \
31
+ --session-id <fresh UUID> --setting-sources project,local \
32
+ --output-format stream-json --verbose
33
+ ```
34
+
35
+ No bypass flag. The allowlist is the coordinator's scoped set: the one doc-check invocation pattern, `Read`, and `Task`. No `Bash(*)`, no Write or Edit.
36
+
37
+ ### Settings and digests (sha256)
38
+
39
+ | File | sha256 |
40
+ |---|---|
41
+ | `capture-settings-run2.json` (session `--settings`, five events) | `b1f480c9971e9104ef6e4d36856a52bb7ba4dc10a8c4b4d7c87fe4aeb75d402c` |
42
+ | `capture-wrapper-run2.js` (log-only, no hook call) | `6172f35858439f7de63c8f726dc7bf0ee8eaefa913ced0c55aba319e7c30b331` |
43
+ | staged `hooks/hooks.json` | `e3c711dce8d8cebaad1ea433febf4d2de2d4a3a03e514024657544d3e0c1304e` |
44
+ | staged `harness-everything/scripts/doc-check.js` | `1bbf23e8f830690ffae8e8535c70ed3db0dc35d2ae4d3d76aea1bfc2b1a6a426` |
45
+
46
+ ### Exit and outcome
47
+
48
+ - `claude` exit `0`. Result `subtype: success`, `is_error: false`, 4 turns.
49
+ - The registered doc-check Bash call **completed**: tool result `is_error: false`, and it emitted `harness.doc-check.check.v1`.
50
+ - The doc-reviewer was invoked through the `Agent` tool (the host's name in this build), with `subagent_type: doc-reviewer`. It returned `Review verdict: approve` with a summary.
51
+ - The reviewer's own `shasum` Bash call was **denied** (`This Bash command contains multiple operations. The following part requires approval`). This is the allowlist working as intended: subagent shell calls are not granted. The reviewer still returned its verdict.
52
+
53
+ ### Must-report table (Run 2b)
54
+
55
+ | Field | Observed? | Evidence (sanitized placeholders) |
56
+ |---|---|---|
57
+ | `tool_use_id` on the doc-check tool, Pre and Post correlated | **yes** | `<tool-use-3>`: wrapper `PreToolUse,PostToolUse`; journal `PreToolUse,PostToolUse`. Post `tool_response.interrupted: false` |
58
+ | `tool_response.interrupted` present and its value | **yes, `false`** | Post keys include `interrupted` |
59
+ | Reviewer `agent_id` / `agent_type` on SubagentStart/Stop, correlated with parent session | **yes** | `<agent-1>`, `agent_type: doc-reviewer`. SubagentStart and SubagentStop carry the same `session_id` as the parent session |
60
+ | Agent/Task result alias correlation | **yes** | the `Agent` tool's PostToolUse `tool_response.agentId` equals `<agent-1>`, `status: completed` |
61
+ | Hook list actually loaded (duplicates or missing) | **no duplicates** | see below |
62
+
63
+ ### Reviewer verdict
64
+
65
+ SubagentStop `last_assistant_message` begins `Review verdict: approve`, then a summary. The journal record carries `reviewVerdict: approve` and `reviewSummary`. The verdict is host-bound to `<agent-1>`.
66
+
67
+ ### Loaded hooks and what fired
68
+
69
+ Declared for the five events (staged `hooks/hooks.json`): PreToolUse matches `Bash|PowerShell|Task|Agent` → `state-persist`; PostToolUse matches `Task|Agent` and `Edit|Write|Bash|PowerShell|apply_patch` → `state-persist`; PostToolUseFailure matches `Bash|PowerShell|apply_patch` → `state-persist`; SubagentStart and SubagentStop → `state-persist`. Other declared hooks are not recorded: the stream reports only SessionStart hook events.
70
+
71
+ Observed in the plugin journal (11 records, **zero duplicates**):
72
+
73
+ - PreToolUse and PostToolUse for the doc-check Bash call, from the plugin's own mounted `state-persist`.
74
+ - SubagentStart, SubagentStop, and PreToolUse and PostToolUse for the reviewer's Bash calls, all carrying `agent_id`.
75
+ - PostToolUse for the `Agent` tool, carrying the alias `agentId`.
76
+
77
+ The wrapper logged 11 payloads and ran no hook of its own, so no record was journaled twice.
78
+
79
+ ## Run 1 (gate unmet)
80
+
81
+ First attempt: Bash denied outright (`This command requires approval`) with no allowlist. No PostToolUse, no reviewer. Settings `e0ba8b39…`, wrapper `d8f568cd…`. The wrapper also ran the staged hook, so the PreToolUse for the denied call was journaled **twice** (two capture ids, two pids). Duplicate mounting caused by the wrapper, now removed in Run 2b.
82
+
83
+ Run 1 sanitized lines: `run: "1"` in `capture.sanitized.jsonl`.
84
+
85
+ ## Run 2a (denied, allowlist pattern mismatch)
86
+
87
+ Same allowlist text with the path **unquoted** in the prompt. The model's command was `node /private/…/doc-check.js check …`, which does not match the quoted pattern `node "…" check:*`. The call was denied (`This command requires approval`). No PostToolUse. Its journal was cleared when Run 2b started, so only its wrapper payload is retained (`run: "2a"`). Fixed by quoting the path in the prompt; the allowlist text itself was not changed.
88
+
89
+ ## Files
90
+
91
+ - `capture.sanitized.jsonl`: 26 lines across runs 1, 2a and 2b. Every line has a top-level `event`, `tool_use_id`, `agent_id` and `interrupted` where the host supplied them (absent stays absent). Two sources per run: `wrapper-stdin` (the raw hook payload, sanitized) and `journal-record` (the plugin's capture record). One consistent placeholder map across runs (`<session-N>`, `<tool-use-N>`, `<prompt-N>`, `<agent-N>`, `<capture-N>`). Tool response bodies are reduced to keys, `interrupted`, `status`, `agentId` and a digest. No local paths, no session ids, no tokens (checked by grep). The production validator (`resolveContext`) reads these lines: payload checks pass for Run 2b, and, with the shipped export validated against this capture, the gate opens. This is field availability; it is not a live credit run.
92
+ - Raw payloads, transcripts, journals and the staged plugin stay **private** in `scratchpad/live-l/`.
93
+
94
+ ## What this does not establish
95
+
96
+ - Live credit. The production gate is evaluated by the provider; this directory alone does not open it (see the report).
97
+ - Reviewer `reviewed digest` binding: the reviewer's own digest calculation was denied, so the bound digest is the SubagentStop `last_assistant_message` digest, not a digest the reviewer computed.
98
+ - Hooks other than `state-persist` on these events: their execution is not recorded here.
99
+ - One session on one host. No Windows, no other host.
@@ -0,0 +1,26 @@
1
+ {"run":"1","source":"wrapper-stdin","wrapperLabel":"PreToolUse","event":"PreToolUse","tool_use_id":"<tool-use-1>","payload":{"hook_event_name":"PreToolUse","tool_name":"Bash","tool_use_id":"<tool-use-1>","session_id":"<session-1>","prompt_id":"<prompt-1>","tool_input_command":"node <scratch>/plugin/harness-everything/scripts/doc-check.js check --workspace <scratch>/project --config .agents/harness-everything/project-docs.json --changed-path docs/a.md","cwd":"<scratch>/project","transcript_path":"<home-path>"}}
2
+ {"run":"2a","source":"wrapper-stdin","wrapperLabel":"PreToolUse","event":"PreToolUse","tool_use_id":"<tool-use-2>","payload":{"hook_event_name":"PreToolUse","tool_name":"Bash","tool_use_id":"<tool-use-2>","session_id":"<session-2>","prompt_id":"<prompt-2>","tool_input_command":"node <scratch>/plugin/harness-everything/scripts/doc-check.js check --workspace <scratch>/project --config .agents/harness-everything/project-docs.json --changed-path docs/a.md","cwd":"<scratch>/project","transcript_path":"<home-path>"}}
3
+ {"run":"2b","source":"wrapper-stdin","wrapperLabel":"PreToolUse","event":"PreToolUse","tool_use_id":"<tool-use-3>","payload":{"hook_event_name":"PreToolUse","tool_name":"Bash","tool_use_id":"<tool-use-3>","session_id":"<session-3>","prompt_id":"<prompt-3>","tool_input_command":"node \"<scratch>/plugin/harness-everything/scripts/doc-check.js\" check --workspace <scratch>/project --config .agents/harness-everything/project-docs.json --changed-path docs/a.md","cwd":"<scratch>/project","transcript_path":"<home-path>"}}
4
+ {"run":"2b","source":"wrapper-stdin","wrapperLabel":"PostToolUse","event":"PostToolUse","tool_use_id":"<tool-use-3>","interrupted":false,"payload":{"hook_event_name":"PostToolUse","tool_name":"Bash","tool_use_id":"<tool-use-3>","session_id":"<session-3>","prompt_id":"<prompt-3>","tool_input_command":"node \"<scratch>/plugin/harness-everything/scripts/doc-check.js\" check --workspace <scratch>/project --config .agents/harness-everything/project-docs.json --changed-path docs/a.md","cwd":"<scratch>/project","transcript_path":"<home-path>","tool_response":{"keys":["interrupted","isImage","noOutputExpected","stderr","stdout"],"interrupted":false,"digest":"sha256:22cd89eb079e65f996432f65cfd9bed1a29366def8f3f8af9af94c26c60bd1f5"}}}
5
+ {"run":"2b","source":"wrapper-stdin","wrapperLabel":"PreToolUse","event":"PreToolUse","tool_use_id":"<tool-use-4>","payload":{"hook_event_name":"PreToolUse","tool_name":"Agent","tool_use_id":"<tool-use-4>","session_id":"<session-3>","prompt_id":"<prompt-3>","cwd":"<scratch>/project","transcript_path":"<home-path>"}}
6
+ {"run":"2b","source":"wrapper-stdin","wrapperLabel":"SubagentStart","event":"SubagentStart","agent_id":"<agent-1>","payload":{"hook_event_name":"SubagentStart","session_id":"<session-3>","prompt_id":"<prompt-3>","agent_id":"<agent-1>","agent_type":"doc-reviewer","cwd":"<scratch>/project","transcript_path":"<home-path>"}}
7
+ {"run":"2b","source":"wrapper-stdin","wrapperLabel":"PreToolUse","event":"PreToolUse","tool_use_id":"<tool-use-5>","agent_id":"<agent-1>","payload":{"hook_event_name":"PreToolUse","tool_name":"Bash","tool_use_id":"<tool-use-5>","session_id":"<session-3>","prompt_id":"<prompt-3>","agent_id":"<agent-1>","agent_type":"doc-reviewer","tool_input_command":"cat docs/a.md && git diff docs/a.md && shasum -a 256 docs/a.md","cwd":"<scratch>/project","transcript_path":"<home-path>"}}
8
+ {"run":"2b","source":"wrapper-stdin","wrapperLabel":"PreToolUse","event":"PreToolUse","tool_use_id":"<tool-use-6>","agent_id":"<agent-1>","payload":{"hook_event_name":"PreToolUse","tool_name":"Bash","tool_use_id":"<tool-use-6>","session_id":"<session-3>","prompt_id":"<prompt-3>","agent_id":"<agent-1>","agent_type":"doc-reviewer","tool_input_command":"git diff docs/a.md","cwd":"<scratch>/project","transcript_path":"<home-path>"}}
9
+ {"run":"2b","source":"wrapper-stdin","wrapperLabel":"PostToolUse","event":"PostToolUse","tool_use_id":"<tool-use-6>","agent_id":"<agent-1>","interrupted":false,"payload":{"hook_event_name":"PostToolUse","tool_name":"Bash","tool_use_id":"<tool-use-6>","session_id":"<session-3>","prompt_id":"<prompt-3>","agent_id":"<agent-1>","agent_type":"doc-reviewer","tool_input_command":"git diff docs/a.md","cwd":"<scratch>/project","transcript_path":"<home-path>","tool_response":{"keys":["interrupted","isImage","noOutputExpected","stderr","stdout"],"interrupted":false,"digest":"sha256:5ff449b9366059bd45c22c411728c93b8c4b5d5a083f1243c7882279b8b2e656"}}}
10
+ {"run":"2b","source":"wrapper-stdin","wrapperLabel":"PreToolUse","event":"PreToolUse","tool_use_id":"<tool-use-7>","agent_id":"<agent-1>","payload":{"hook_event_name":"PreToolUse","tool_name":"Bash","tool_use_id":"<tool-use-7>","session_id":"<session-3>","prompt_id":"<prompt-3>","agent_id":"<agent-1>","agent_type":"doc-reviewer","tool_input_command":"ls docs; grep -rni retr . --include=*.md","cwd":"<scratch>/project","transcript_path":"<home-path>"}}
11
+ {"run":"2b","source":"wrapper-stdin","wrapperLabel":"PostToolUse","event":"PostToolUse","tool_use_id":"<tool-use-7>","agent_id":"<agent-1>","interrupted":false,"payload":{"hook_event_name":"PostToolUse","tool_name":"Bash","tool_use_id":"<tool-use-7>","session_id":"<session-3>","prompt_id":"<prompt-3>","agent_id":"<agent-1>","agent_type":"doc-reviewer","tool_input_command":"ls docs; grep -rni retr . --include=*.md","cwd":"<scratch>/project","transcript_path":"<home-path>","tool_response":{"keys":["interrupted","isImage","noOutputExpected","returnCodeInterpretation","stderr","stdout"],"interrupted":false,"digest":"sha256:f4f1baf50b0770a29763b15493f7c7f315321f5c2c92b5288b18d20c3480f97a"}}}
12
+ {"run":"2b","source":"wrapper-stdin","wrapperLabel":"SubagentStop","event":"SubagentStop","agent_id":"<agent-1>","payload":{"hook_event_name":"SubagentStop","session_id":"<session-3>","prompt_id":"<prompt-3>","agent_id":"<agent-1>","agent_type":"doc-reviewer","cwd":"<scratch>/project","transcript_path":"<home-path>","agent_transcript_path":"<home-path>","last_assistant_message":"Review verdict: approve\n\nSummary: The only change to `docs/a.md` is \"retries once\" becoming \"retries twice\". The front matter is intact, and the link to `b.md` resolves because that file exists. Nothing else in the repo mentions retries, so I found no contradiction. I could not check the \"twice\" claim against the code, since this repo has no code or other source for it. I also couldn't compute a SHA-256, because the shell blocked `shasum`.\n\nReviewed artifact digest: `<scratch>/project/docs/a.md`, the working-tree version, uncommitted on top of baseline 8648a71. The identifying content is the diff hunk `@@ -3,4 +3,4 @@`, with the blob change `0936062..3bea475`. The body line is \"The checkout retries twice. See [b](b.md).\""}}
13
+ {"run":"2b","source":"wrapper-stdin","wrapperLabel":"PostToolUse","event":"PostToolUse","tool_use_id":"<tool-use-4>","payload":{"hook_event_name":"PostToolUse","tool_name":"Agent","tool_use_id":"<tool-use-4>","session_id":"<session-3>","prompt_id":"<prompt-3>","cwd":"<scratch>/project","transcript_path":"<home-path>","tool_response":{"keys":["agentId","agentType","canContinueAgent","content","harnessNoteCount","harnessSectionHash","harnessTailCount","prompt","resolvedModel","status","toolStats","totalDurationMs","totalTokens","totalToolUseCount","usage"],"status":"completed","agentId":"<agent-1>","digest":"sha256:f035f2ed002f3dc6827f3109a8fdbc99ae439472bc504fc4d460b5bf0ac4204e"}}}
14
+ {"run":"1","source":"journal-record","event":"PreToolUse","tool_use_id":"<tool-use-1>","record":{"captureId":"<capture-1>","event":"PreToolUse","tool_use_id":"<tool-use-1>","session_id":"<session-1>","command":"node <scratch>/plugin/harness-everything/scripts/doc-check.js check --workspace <scratch>/project --config .agents/harness-everything/project-docs.json --changed-path docs/a.md","cwd":"<scratch>/project","responseDigest":"eb045d78d273107348b0300c01d29b7552d622abbc6faf81b3ec55359aa9950c"}}
15
+ {"run":"1","source":"journal-record","event":"PreToolUse","tool_use_id":"<tool-use-1>","record":{"captureId":"<capture-2>","event":"PreToolUse","tool_use_id":"<tool-use-1>","session_id":"<session-1>","command":"node <scratch>/plugin/harness-everything/scripts/doc-check.js check --workspace <scratch>/project --config .agents/harness-everything/project-docs.json --changed-path docs/a.md","cwd":"<scratch>/project","responseDigest":"eb045d78d273107348b0300c01d29b7552d622abbc6faf81b3ec55359aa9950c"}}
16
+ {"run":"2b","source":"journal-record","event":"PreToolUse","tool_use_id":"<tool-use-3>","record":{"captureId":"<capture-3>","event":"PreToolUse","tool_use_id":"<tool-use-3>","session_id":"<session-3>","command":"node \"<scratch>/plugin/harness-everything/scripts/doc-check.js\" check --workspace <scratch>/project --config .agents/harness-everything/project-docs.json --changed-path docs/a.md","cwd":"<scratch>/project","responseDigest":"eb045d78d273107348b0300c01d29b7552d622abbc6faf81b3ec55359aa9950c"}}
17
+ {"run":"2b","source":"journal-record","event":"PostToolUse","tool_use_id":"<tool-use-3>","interrupted":false,"record":{"captureId":"<capture-4>","event":"PostToolUse","tool_use_id":"<tool-use-3>","session_id":"<session-3>","command":"node \"<scratch>/plugin/harness-everything/scripts/doc-check.js\" check --workspace <scratch>/project --config .agents/harness-everything/project-docs.json --changed-path docs/a.md","cwd":"<scratch>/project","interrupted":false,"responseDigest":"80ccfae628fb7127a06592ddb8439b864093a34d1b11007d5b137fbc6f95fcef"}}
18
+ {"run":"2b","source":"journal-record","event":"PreToolUse","tool_use_id":"<tool-use-4>","record":{"captureId":"<capture-5>","event":"PreToolUse","tool_use_id":"<tool-use-4>","session_id":"<session-3>","cwd":"<scratch>/project","responseDigest":"eb045d78d273107348b0300c01d29b7552d622abbc6faf81b3ec55359aa9950c"}}
19
+ {"run":"2b","source":"journal-record","event":"SubagentStart","agent_id":"<agent-1>","record":{"captureId":"<capture-6>","event":"SubagentStart","session_id":"<session-3>","agent_id":"<agent-1>","agent_type":"doc-reviewer","cwd":"<scratch>/project","responseDigest":"eb045d78d273107348b0300c01d29b7552d622abbc6faf81b3ec55359aa9950c"}}
20
+ {"run":"2b","source":"journal-record","event":"PreToolUse","tool_use_id":"<tool-use-5>","agent_id":"<agent-1>","record":{"captureId":"<capture-7>","event":"PreToolUse","tool_use_id":"<tool-use-5>","session_id":"<session-3>","agent_id":"<agent-1>","agent_type":"doc-reviewer","command":"cat docs/a.md && git diff docs/a.md && shasum -a 256 docs/a.md","cwd":"<scratch>/project","responseDigest":"eb045d78d273107348b0300c01d29b7552d622abbc6faf81b3ec55359aa9950c"}}
21
+ {"run":"2b","source":"journal-record","event":"PreToolUse","tool_use_id":"<tool-use-6>","agent_id":"<agent-1>","record":{"captureId":"<capture-8>","event":"PreToolUse","tool_use_id":"<tool-use-6>","session_id":"<session-3>","agent_id":"<agent-1>","agent_type":"doc-reviewer","command":"git diff docs/a.md","cwd":"<scratch>/project","responseDigest":"eb045d78d273107348b0300c01d29b7552d622abbc6faf81b3ec55359aa9950c"}}
22
+ {"run":"2b","source":"journal-record","event":"PostToolUse","tool_use_id":"<tool-use-6>","agent_id":"<agent-1>","interrupted":false,"record":{"captureId":"<capture-9>","event":"PostToolUse","tool_use_id":"<tool-use-6>","session_id":"<session-3>","agent_id":"<agent-1>","agent_type":"doc-reviewer","command":"git diff docs/a.md","cwd":"<scratch>/project","interrupted":false,"responseDigest":"f8770735e00cf9d10b07d43d91379c17ab2ca5444610dd3d5944b52912d13369"}}
23
+ {"run":"2b","source":"journal-record","event":"PreToolUse","tool_use_id":"<tool-use-7>","agent_id":"<agent-1>","record":{"captureId":"<capture-10>","event":"PreToolUse","tool_use_id":"<tool-use-7>","session_id":"<session-3>","agent_id":"<agent-1>","agent_type":"doc-reviewer","command":"ls docs; grep -rni retr . --include=*.md","cwd":"<scratch>/project","responseDigest":"eb045d78d273107348b0300c01d29b7552d622abbc6faf81b3ec55359aa9950c"}}
24
+ {"run":"2b","source":"journal-record","event":"PostToolUse","tool_use_id":"<tool-use-7>","agent_id":"<agent-1>","interrupted":false,"record":{"captureId":"<capture-11>","event":"PostToolUse","tool_use_id":"<tool-use-7>","session_id":"<session-3>","agent_id":"<agent-1>","agent_type":"doc-reviewer","command":"ls docs; grep -rni retr . --include=*.md","cwd":"<scratch>/project","interrupted":false,"responseDigest":"4a1d1e23f6b3c88bbc86f5960e2492acc61d65201a9cea4863610c068beb907c"}}
25
+ {"run":"2b","source":"journal-record","event":"SubagentStop","agent_id":"<agent-1>","record":{"captureId":"<capture-12>","event":"SubagentStop","session_id":"<session-3>","agent_id":"<agent-1>","agent_type":"doc-reviewer","cwd":"<scratch>/project","reviewVerdict":"approve","reviewSummary":"Summary: The only change to `docs/a.md` is \"retries once\" becoming \"retries twice\". The front matter is intact, and the link to `b.md` resolves because that file exists. Nothing else in the repo mentions retries, so I found no contradiction. I could not check the \"twice\" claim against the code, since this repo has no code or other source for it. I also couldn't compute a SHA-256, because the shell blocked `shasum`.\n\n\nReviewed artifact digest: `<scratch>/project/docs/a.md`, the working-tree version, uncommitted on top of baseline 8648a71. The identifying content is the diff hunk `@@ -3,4 +3,4 @@`, with the blob change `0936062..3bea475`. The body line is \"The checkout retries twice. See [b](b.md).\"","responseDigest":"eb045d78d273107348b0300c01d29b7552d622abbc6faf81b3ec55359aa9950c"}}
26
+ {"run":"2b","source":"journal-record","event":"PostToolUse","tool_use_id":"<tool-use-4>","agent_id":"<agent-1>","record":{"captureId":"<capture-13>","event":"PostToolUse","tool_use_id":"<tool-use-4>","session_id":"<session-3>","agent_id":"<agent-1>","cwd":"<scratch>/project","responseDigest":"51be05fc9c852f14829a9e01ccd0b2d9d743e0d16c237de69db752d100fad0dc"}}