harness-everything 0.30.9 → 0.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/AGENTS.md +1 -1
  4. package/CHANGELOG.md +34 -0
  5. package/README.md +8 -9
  6. package/VERIFICATION.md +1 -1
  7. package/benchmarks/results/live-host/claude-2026-10-08-issue-297/README.md +27 -0
  8. package/benchmarks/results/live-host/codex-2026-10-13/README.md +55 -0
  9. package/benchmarks/results/live-host/codex-2026-10-13/observation-records.json +88 -0
  10. package/benchmarks/results/pr-303-review-2026-10-13/README.md +81 -0
  11. package/benchmarks/results/pr-303-review-2026-10-13/ci/run.json +1330 -0
  12. package/benchmarks/results/pr-303-review-2026-10-13/diagnostics/mechanism-35-clean-env.log +1 -0
  13. package/benchmarks/results/pr-303-review-2026-10-13/diagnostics/mechanism-35-inherited-flag.log +34 -0
  14. package/benchmarks/results/pr-303-review-2026-10-13/diagnostics/verify-gate-captured.json +46 -0
  15. package/benchmarks/results/pr-303-review-2026-10-13/diagnostics/verify-gate-diagnosis.md +13 -0
  16. package/benchmarks/results/pr-303-review-2026-10-13/diagnostics/verify-gate.json +46 -0
  17. package/benchmarks/results/pr-303-review-2026-10-13/gates/contracts/summary.json +57 -0
  18. package/benchmarks/results/pr-303-review-2026-10-13/gates/contracts/test-collision.log +8 -0
  19. package/benchmarks/results/pr-303-review-2026-10-13/gates/contracts/test-consistency.log +624 -0
  20. package/benchmarks/results/pr-303-review-2026-10-13/gates/contracts/test-docs-capabilities.log +131 -0
  21. package/benchmarks/results/pr-303-review-2026-10-13/gates/contracts/test-platform-compatibility.log +9 -0
  22. package/benchmarks/results/pr-303-review-2026-10-13/gates/contracts/test-plugin-openai.log +6 -0
  23. package/benchmarks/results/pr-303-review-2026-10-13/gates/contracts/test-plugin-submission.log +5 -0
  24. package/benchmarks/results/pr-303-review-2026-10-13/gates/contracts/test-references.log +6 -0
  25. package/benchmarks/results/pr-303-review-2026-10-13/gates/contracts/test-release.log +73 -0
  26. package/benchmarks/results/pr-303-review-2026-10-13/gates/contracts/test-repo-contract.log +5 -0
  27. package/benchmarks/results/pr-303-review-2026-10-13/gates/contracts/test-routing-invariants.log +785 -0
  28. package/benchmarks/results/pr-303-review-2026-10-13/gates/contracts/test-routing-skills.log +44 -0
  29. package/benchmarks/results/pr-303-review-2026-10-13/gates/final-fast/summary.json +12 -0
  30. package/benchmarks/results/pr-303-review-2026-10-13/gates/final-fast/test-consistency.log +624 -0
  31. package/benchmarks/results/pr-303-review-2026-10-13/gates/final-fast/test-release.log +73 -0
  32. package/benchmarks/results/pr-303-review-2026-10-13/gates/heavy/summary.json +79 -0
  33. package/benchmarks/results/pr-303-review-2026-10-13/gates/heavy/test-mechanism.log +1737 -0
  34. package/benchmarks/results/pr-303-review-2026-10-13/gates/heavy/test-mutations.log +16 -0
  35. package/benchmarks/results/pr-303-review-2026-10-13/gates/heavy/test.log +3297 -0
  36. package/benchmarks/results/pr-303-review-2026-10-13/manifest.json +319 -0
  37. package/benchmarks/results/pr-303-review-2026-10-13/regression/binding-resolution-green.log +36 -0
  38. package/benchmarks/results/pr-303-review-2026-10-13/regression/determinism.json +174 -0
  39. package/benchmarks/results/pr-303-review-2026-10-13/regression/quality-evidence.json +314 -0
  40. package/benchmarks/results/pr-303-review-2026-10-13/regression/quality-report.json +638 -0
  41. package/benchmarks/results/pr-303-review-2026-10-13/regression/red.log +240 -0
  42. package/benchmarks/results/pr-303-review-2026-10-13/regression/untyped-fable-probe.json +22 -0
  43. package/benchmarks/results/pr-303-review-2026-10-13/regression/workflow-obligations-green.log +254 -0
  44. package/benchmarks/results/pr-303-review-2026-10-13/verification/mechanism-35-clean-env-fixed.log +1 -0
  45. package/benchmarks/results/pr-303-review-2026-10-13/verification/mechanism-35-inherited-flag-fixed.log +1 -0
  46. package/benchmarks/results/pr-303-review-2026-10-13/verification/nested-test.meta.json +8 -0
  47. package/benchmarks/results/pr-303-review-2026-10-13/verification/nested-test.stderr.log +90 -0
  48. package/benchmarks/results/pr-303-review-2026-10-13/verification/nested-test.stdout.log +3186 -0
  49. package/benchmarks/results/pr-303-review-2026-10-13/verification/verify-gate-final.json +46 -0
  50. package/bin/cli.js +1 -1
  51. package/ci/doc-capability-consistency.test.js +11 -1
  52. package/ci/invariant-routing.test.js +7 -4
  53. package/ci/mechanism-2ag-router-worktree-contract.test.js +2 -2
  54. package/ci/mechanism-2ai-workspace-fingerprint-batch.test.js +2 -1
  55. package/ci/mechanism-2al-codex-hooks-compat.test.js +19 -0
  56. package/ci/mechanism-2am-observations-session-import.test.js +221 -0
  57. package/ci/mechanism-2an-workflow-obligations.test.js +352 -3
  58. package/ci/mechanism-2ao-plugin-sync.test.js +129 -4
  59. package/ci/mechanism-2aq-fable-stage-bindings.test.js +168 -0
  60. package/ci/mechanism-2ar-binding-resolution.test.js +211 -0
  61. package/ci/mechanism-2w-platform-compatibility.test.js +12 -0
  62. package/ci/mechanism-34-observations.test.js +64 -0
  63. package/ci/mechanism-35-verification-contract.test.js +1 -1
  64. package/ci/mutation-check.js +2 -0
  65. package/ci/mutation-loader.js +4 -0
  66. package/ci/openai-plugin-package.test.js +7 -5
  67. package/ci/prompt-contract-regressions.test.js +7 -6
  68. package/ci/router-workflow-plan.test.js +109 -14
  69. package/ci/skill-routing-check.js +44 -15
  70. package/ci/workflow-plan-consumers.test.js +41 -1
  71. package/docs/architecture.md +10 -10
  72. package/docs/enforcement-locks.md +1 -1
  73. package/docs/mechanism-first-skill-mesh.md +12 -11
  74. package/docs/openai-plugin.md +1 -1
  75. package/docs/philosophy.md +7 -6
  76. package/docs/platform-capabilities.md +14 -12
  77. package/docs/platform-compatibility.json +5 -5
  78. package/docs/routing.md +16 -17
  79. package/docs/system-one-observations.md +36 -9
  80. package/docs/system-one-routing.md +10 -7
  81. package/docs/system-one-suggestion-gates.md +5 -5
  82. package/docs/workflow-runtime.md +6 -2
  83. package/docs/workflows/harness-everything.md +14 -14
  84. package/evals/harness-everything/tasks/positive-tier1.yaml +1 -1
  85. package/evals/harness-everything/tasks/positive-tier2.yaml +1 -1
  86. package/evals/harness-everything/tasks/positive-tier3.yaml +1 -1
  87. package/fable-mode/CONTRACT-FORMAT.md +4 -1
  88. package/fable-mode/SKILL.md +6 -8
  89. package/fable-mode/agents/fable-orchestrator.md +10 -3
  90. package/fable-mode/execution-guardrails/SKILL.md +1 -1
  91. package/fable-mode/fable-haiku/SKILL.md +1 -1
  92. package/fable-mode/fable-opus/SKILL.md +1 -1
  93. package/fable-mode/fable-sonnet/SKILL.md +1 -1
  94. package/fable-mode/scripts/workflow-plan-consumer.js +101 -2
  95. package/harness-everything/SKILL.md +8 -7
  96. package/harness-everything/references/router-workflow-plan.md +11 -6
  97. package/harness-everything/references/triage-and-tiers.md +21 -23
  98. package/harness-everything/schemas/router-workflow-plan.schema.json +2 -0
  99. package/harness-everything/scripts/kernel-router-core.js +52 -55
  100. package/harness-everything/scripts/kernel-router.js +48 -5
  101. package/harness-everything/scripts/router-contract-core.js +7 -7
  102. package/harness-everything/scripts/router-contract.js +1 -3
  103. package/harness-everything/scripts/routing-keywords.json +417 -121
  104. package/harness-everything/scripts/tier-router.js +64 -113
  105. package/hooks/scripts/contract-test.js +29 -3
  106. package/hooks/scripts/lib/binding-resolver.js +76 -0
  107. package/hooks/scripts/lib/fable-contracts.js +1 -1
  108. package/hooks/scripts/lib/observations.js +88 -12
  109. package/hooks/scripts/lib/workflow-obligations.js +292 -7
  110. package/hooks/scripts/lib/workflow-runtime.js +8 -1
  111. package/hooks/scripts/workflow-disposition.js +116 -2
  112. package/opencode-plugin/plugin.json +1 -1
  113. package/package.json +1 -1
  114. package/plugins/harness-everything/.codex-plugin/plugin.json +1 -1
  115. package/plugins/harness-everything/hooks/scripts/contract-test.js +29 -3
  116. package/plugins/harness-everything/hooks/scripts/lib/binding-resolver.js +76 -0
  117. package/plugins/harness-everything/hooks/scripts/lib/fable-contracts.js +1 -1
  118. package/plugins/harness-everything/hooks/scripts/lib/observations.js +88 -12
  119. package/plugins/harness-everything/hooks/scripts/lib/workflow-obligations.js +292 -7
  120. package/plugins/harness-everything/hooks/scripts/lib/workflow-runtime.js +8 -1
  121. package/plugins/harness-everything/hooks/scripts/workflow-disposition.js +116 -2
  122. package/plugins/harness-everything/plugin.json +1 -1
  123. package/plugins/harness-everything/scripts/lib/advisory-text.js +2 -2
  124. package/plugins/harness-everything/scripts/lib/generated-skills.js +78 -0
  125. package/plugins/harness-everything/skills/fable-mode/CONTRACT-FORMAT.md +4 -1
  126. package/plugins/harness-everything/skills/fable-mode/SKILL.md +6 -8
  127. package/plugins/harness-everything/skills/fable-mode/agents/fable-orchestrator.md +10 -3
  128. package/plugins/harness-everything/skills/fable-mode/execution-guardrails/SKILL.md +1 -1
  129. package/plugins/harness-everything/skills/fable-mode/fable-haiku/SKILL.md +1 -1
  130. package/plugins/harness-everything/skills/fable-mode/fable-opus/SKILL.md +1 -1
  131. package/plugins/harness-everything/skills/fable-mode/fable-sonnet/SKILL.md +1 -1
  132. package/plugins/harness-everything/skills/fable-mode/scripts/workflow-plan-consumer.js +101 -2
  133. package/plugins/harness-everything/skills/harness-everything/SKILL.md +8 -7
  134. package/plugins/harness-everything/skills/harness-everything/references/router-workflow-plan.md +11 -6
  135. package/plugins/harness-everything/skills/harness-everything/references/triage-and-tiers.md +21 -23
  136. package/plugins/harness-everything/skills/harness-everything/schemas/router-workflow-plan.schema.json +2 -0
  137. package/plugins/harness-everything/skills/harness-everything/scripts/kernel-router-core.js +52 -55
  138. package/plugins/harness-everything/skills/harness-everything/scripts/kernel-router.js +48 -5
  139. package/plugins/harness-everything/skills/harness-everything/scripts/router-contract-core.js +7 -7
  140. package/plugins/harness-everything/skills/harness-everything/scripts/router-contract.js +1 -3
  141. package/plugins/harness-everything/skills/harness-everything/scripts/routing-keywords.json +417 -121
  142. package/plugins/harness-everything/skills/harness-everything/scripts/tier-router.js +64 -113
  143. package/sbom.cdx.json +7 -7
  144. package/scripts/codex-hooks-compat.js +39 -14
  145. package/scripts/lib/advisory-text.js +2 -2
  146. package/scripts/lib/generated-skills.js +78 -0
  147. package/scripts/plugin-sync.js +100 -29
  148. package/scripts/system-one-observations-export.js +29 -2
  149. package/scripts/system-one-observations-import-codex-sessions.js +307 -0
  150. package/scripts/system-one-observations-review.js +11 -1
@@ -0,0 +1,1737 @@
1
+
2
+ > harness-everything@0.30.10 test:mechanism
3
+ > node ci/mechanism-test.js
4
+
5
+ =================================================
6
+ === 🔧 Harness Mechanism Test Suite (VERIFICATION.md §2) ===
7
+ =================================================
8
+
9
+ Discovered 76 mechanism test suite(s):
10
+ - mechanism-2a-rule-of-3.test.js
11
+ - mechanism-2aa-codex-action-gate-policy.test.js
12
+ - mechanism-2ab-openai-plugin-sync-integrity.test.js
13
+ - mechanism-2ac-atomic-commit-check.test.js
14
+ - mechanism-2ad-action-gate-classifier-hardening.test.js
15
+ - mechanism-2af-worktree-isolation.test.js
16
+ - mechanism-2ag-router-worktree-contract.test.js
17
+ - mechanism-2ah-workflow-lifecycle.test.js
18
+ - mechanism-2ai-workspace-fingerprint-batch.test.js
19
+ - mechanism-2aj-waza-reference-adapter.test.js
20
+ - mechanism-2ak-contract-probe-adapter.test.js
21
+ - mechanism-2al-codex-hooks-compat.test.js
22
+ - mechanism-2am-observations-session-import.test.js
23
+ - mechanism-2am-openai-packaged-helper-runtime.test.js
24
+ - mechanism-2an-environment-detection-readonly.test.js
25
+ - mechanism-2an-workflow-obligations.test.js
26
+ - mechanism-2ao-plugin-sync.test.js
27
+ - mechanism-2ap-sbom.test.js
28
+ - mechanism-2aq-fable-stage-bindings.test.js
29
+ - mechanism-2ar-binding-resolution.test.js
30
+ - mechanism-2b-boundary-guard.test.js
31
+ - mechanism-2c-state-persist.test.js
32
+ - mechanism-2d-fact-audit.test.js
33
+ - mechanism-2e-scope-guard.test.js
34
+ - mechanism-2f-stop-gate.test.js
35
+ - mechanism-2g-platform-ignore.test.js
36
+ - mechanism-2h-installer-manifest.test.js
37
+ - mechanism-2i-crlf-frontmatter.test.js
38
+ - mechanism-2i-install-verification.test.js
39
+ - mechanism-2j-behavioral-runner.test.js
40
+ - mechanism-2j-fixture-entrypoints.test.js
41
+ - mechanism-2k-reference-check.test.js
42
+ - mechanism-2l-multi-agent-workspace.test.js
43
+ - mechanism-2m-self-repo-guard.test.js
44
+ - mechanism-2n-opencode-plugin.test.js
45
+ - mechanism-2o-state-home-isolation.test.js
46
+ - mechanism-2p-installer-links.test.js
47
+ - mechanism-2q-installer-global-shared-store.test.js
48
+ - mechanism-2r-uninstall-flags.test.js
49
+ - mechanism-2s-tdd-quality.test.js
50
+ - mechanism-2t-disclosure.test.js
51
+ - mechanism-2t-evidence-triage.test.js
52
+ - mechanism-2t-issue-20.test.js
53
+ - mechanism-2t-platform-skill-targets.test.js
54
+ - mechanism-2t-transcript-parser.test.js
55
+ - mechanism-2t-workspace-identity.test.js
56
+ - mechanism-2u-issue-42-regressions.test.js
57
+ - mechanism-2u-issue-44.test.js
58
+ - mechanism-2v-verifier-boundaries.test.js
59
+ - mechanism-2w-platform-compatibility.test.js
60
+ - mechanism-2x-release-automation.test.js
61
+ - mechanism-2x-release-commit-message.test.js
62
+ - mechanism-2y-release-tooling-compat.test.js
63
+ - mechanism-2z-claude-plugin-manifest.test.js
64
+ - mechanism-30-opencode-plugin-loadability.test.js
65
+ - mechanism-31-opencode-hardlock-evidence.test.js
66
+ - mechanism-32-paired-benchmark.test.js
67
+ - mechanism-33-issues-205-207.test.js
68
+ - mechanism-34-observations.test.js
69
+ - mechanism-34-worktree-submodule-reachability.test.js
70
+ - mechanism-35-verification-contract.test.js
71
+ - mechanism-packaging-bytecode.test.js
72
+ - mechanism-system-one-collect.test.js
73
+ - mechanism-system-one-contract.test.js
74
+ - mechanism-system-one-corpus.test.js
75
+ - mechanism-system-one-evaluation.test.js
76
+ - mechanism-system-one-install.test.js
77
+ - mechanism-system-one-intent.test.js
78
+ - mechanism-system-one-label.test.js
79
+ - mechanism-system-one-laya.test.js
80
+ - mechanism-system-one-ngram.test.js
81
+ - mechanism-system-one-provider.test.js
82
+ - mechanism-system-one-relevance.test.js
83
+ - mechanism-system-one-resident.test.js
84
+ - mechanism-system-one-router.test.js
85
+ - mechanism-system-one-train.test.js
86
+
87
+ -------------------------------------------------
88
+
89
+ ▶️ Running test suite: mechanism-2a-rule-of-3.test.js
90
+
91
+ [2a] Rule of 3 circuit breaker...
92
+ ✅ 2a-wiring. PostToolUseFailure invokes the Rule-of-3 tracker
93
+ ✅ 2a-wiring. apply_patch is covered before and after execution
94
+ ✅ 2a-three. exactly three matching failures arm zoom-out
95
+ npm.cmd : [CRITICAL] RULE OF 3 CIRCUIT BREAKER TRIGGERED!
96
+ 位於 線路:4 字元:1
97
+ + & npm.cmd run test:mechanism *> $log
98
+ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
99
+ + CategoryInfo : NotSpecified: ([CRITICAL] RULE...AKER TRIGGERED!:String) [], RemoteException
100
+ + FullyQualifiedErrorId : NativeCommandError
101
+
102
+ The same failure signature has now occurred 3 times.
103
+ Error Signature: 84edbe719770818783c799972ef28e77
104
+
105
+ Mutating tools (Bash/PowerShell/Edit/Write/apply_patch) are locked - not because you
106
+ must wait for a human, but because you must stop drilling and rebuild the
107
+ full picture first. Do NOT ask the Human Partner yet.
108
+
109
+ ACTION REQUIRED (reflect first):
110
+ 1. CEASE FIRE. No new fix attempts, no variations of the last one.
111
+ 2. Load the 'zoom-out' skill and follow its Reflect & Fact-Check protocol.
112
+ 3. Using READ-ONLY tools (Read/Grep/Glob - still available), re-verify the
113
+ assumption behind each failed attempt against the actual code/logs/docs.
114
+ 4. Write your findings to '<temp>\harness-mechanism-state-V9H7Y9\workspaces\harness-e
115
+ verything-issue-297-6eb1109f6a2a\state\sessions\__mechanism_test__\zoom-out-report.md' (the ONLY write
116
+ allowed right now) with sections: ## Goal, ## Failed Attempts,
117
+ ## Verified Facts, ## Diagnosis, ## Decision (ending RESUME: or ESCALATE:).
118
+
119
+ A valid report releases this breaker automatically. Escalate to the Human
120
+ Partner ONLY if your Decision concludes a genuinely human call is needed
121
+ (requirement conflict, architecture trade-off, destructive action, missing
122
+ access) - and then present options with a recommendation, not apologies.
123
+ ✅ 2a-trip. third matching failure blocks mutation for reflection
124
+ ✅ 2a-release. valid reflection releases breaker and resets count
125
+ [CRITICAL] RULE OF 3 CIRCUIT BREAKER TRIGGERED!
126
+ The same failure signature has now occurred 3 times.
127
+ Error Signature: mech-test
128
+
129
+ Mutating tools (Bash/PowerShell/Edit/Write/apply_patch) are locked - not because you
130
+ must wait for a human, but because you must stop drilling and rebuild the
131
+ full picture first. Do NOT ask the Human Partner yet.
132
+
133
+ ACTION REQUIRED (reflect first):
134
+ 1. CEASE FIRE. No new fix attempts, no variations of the last one.
135
+ 2. Load the 'zoom-out' skill and follow its Reflect & Fact-Check protocol.
136
+ 3. Using READ-ONLY tools (Read/Grep/Glob - still available), re-verify the
137
+ assumption behind each failed attempt against the actual code/logs/docs.
138
+ 4. Write your findings to '<temp>\harness-mechanism-state-V9H7Y9\workspaces\harness-e
139
+ verything-issue-297-6eb1109f6a2a\state\sessions\__mechanism_test__\zoom-out-report.md' (the ONLY write
140
+ allowed right now) with sections: ## Goal, ## Failed Attempts,
141
+ ## Verified Facts, ## Diagnosis, ## Decision (ending RESUME: or ESCALATE:).
142
+
143
+ A valid report releases this breaker automatically. Escalate to the Human
144
+ Partner ONLY if your Decision concludes a genuinely human call is needed
145
+ (requirement conflict, architecture trade-off, destructive action, missing
146
+ access) - and then present options with a recommendation, not apologies.
147
+ ✅ 2a-repeat. later three-failure cycle requests another zoom-out, not permanent hard lock
148
+ ✅ 2a-category. permission failures still use the same threshold of three
149
+ ✅ 2a-category-two. two permission failures do not trip early
150
+ [CRITICAL] RULE OF 3 CIRCUIT BREAKER TRIGGERED!
151
+ The same failure signature has now occurred 3 times.
152
+ Error Signature: ca808a9df9b7d8c531929ca6ea04a324
153
+
154
+ Mutating tools (Bash/PowerShell/Edit/Write/apply_patch) are locked - not because you
155
+ must wait for a human, but because you must stop drilling and rebuild the
156
+ full picture first. Do NOT ask the Human Partner yet.
157
+
158
+ ACTION REQUIRED (reflect first):
159
+ 1. CEASE FIRE. No new fix attempts, no variations of the last one.
160
+ 2. Load the 'zoom-out' skill and follow its Reflect & Fact-Check protocol.
161
+ 3. Using READ-ONLY tools (Read/Grep/Glob - still available), re-verify the
162
+ assumption behind each failed attempt against the actual code/logs/docs.
163
+ 4. Write your findings to '<temp>\harness-mechanism-state-V9H7Y9\workspaces\harness-e
164
+ verything-issue-297-6eb1109f6a2a\state\sessions\__mechanism_test__\zoom-out-report.md' (the ONLY write
165
+ allowed right now) with sections: ## Goal, ## Failed Attempts,
166
+ ## Verified Facts, ## Diagnosis, ## Decision (ending RESUME: or ESCALATE:).
167
+
168
+ A valid report releases this breaker automatically. Escalate to the Human
169
+ Partner ONLY if your Decision concludes a genuinely human call is needed
170
+ (requirement conflict, architecture trade-off, destructive action, missing
171
+ access) - and then present options with a recommendation, not apologies.
172
+ ✅ 2a-category-three. third permission failure trips normally
173
+ ✅ 2a-interleaved. unrelated success preserves the matching failure count
174
+ ✅ 2a-interleaved-three. third matching failure still arms zoom-out after unrelated success
175
+ ✅ 2a-resolved. same-operation success clears the resolved signature
176
+
177
+ ▶️ Running test suite: mechanism-2aa-codex-action-gate-policy.test.js
178
+ PASS: Codex action-gate uses supported hard blocking, attributable PreToolUse entry evidence, and non-authorizing PermissionRequest observation.
179
+
180
+ ▶️ Running test suite: mechanism-2ab-openai-plugin-sync-integrity.test.js
181
+ PASS: OpenAI/Codex plugin sync is idempotent, uses portable plugin placeholders, and preserves every referenced hook runtime file.
182
+
183
+ ▶️ Running test suite: mechanism-2ac-atomic-commit-check.test.js
184
+ PASS: atomic commit check scopes edits to the workspace and suppresses clean-tree false nudges
185
+
186
+ ▶️ Running test suite: mechanism-2ad-action-gate-classifier-hardening.test.js
187
+ PASS: destructive-command classifier covers confirmed bypasses while suppressing quoted-text false positives
188
+
189
+ ▶️ Running test suite: mechanism-2af-worktree-isolation.test.js
190
+ PASS fixture repository initializes
191
+ PASS Tier-3 primary-tree mutation is not hard-blocked
192
+ PASS Tier-3 primary-tree mutation emits mandatory isolation disposition without blocking
193
+ PASS mutation-shaped shell command remains available
194
+ PASS mutation-shaped shell command receives the same isolation contract
195
+ PASS read-only discovery remains available
196
+ PASS linked worktree fixture creates
197
+ PASS linked-worktree mutation remains available
198
+ PASS cross-worktree target is reminder-only
199
+ PASS cross-worktree target emits scope/isolation guidance
200
+ PASS legacy blocked workflow state does not trap mutation
201
+ PASS legacy blocked state is surfaced as reminder
202
+ PASS corrupt workflow state fails open
203
+ PASS: worktree isolation is a semantic MUST disposition, not a cognitive lock
204
+
205
+ ▶️ Running test suite: mechanism-2ag-router-worktree-contract.test.js
206
+ PASS: router major-workflow plan carries worktree isolation independently of multi-agent workspace state.
207
+
208
+ ▶️ Running test suite: mechanism-2ah-workflow-lifecycle.test.js
209
+ PASS workflow guidance fixture is created
210
+ PASS hooks/scripts/workflow-gate.js malformed payload fails open
211
+ PASS hooks/scripts/workflow-stop-gate.js malformed payload fails open
212
+ PASS legacy exhausted state no longer blocks mutation
213
+ PASS legacy state is a reminder
214
+ PASS unproven shell is not iteration-blocked
215
+ PASS no mutation-probe state is created
216
+ PASS failed shell mutation tracking is fail-open
217
+ PASS failed-but-mutating shell advances edit freshness without fabricating verification
218
+ PASS missing verification does not block Stop
219
+ PASS missing verification emits reminder
220
+ PASS exec_command verification is fail-open
221
+ PASS #193 exec_command records lastVerifyAt
222
+ PASS resolved evidence never rewrites an explicit blocked workflow to satisfied
223
+ PASS: workflow guidance lifecycle (14 assertions)
224
+ PASS: packaged OpenAI workflow guidance mirrors source
225
+
226
+ ▶️ Running test suite: mechanism-2ai-workspace-fingerprint-batch.test.js
227
+ PASS #169 batched fingerprint matches the legacy clean-worktree fingerprint
228
+ PASS #169 packaged plugin fingerprint matches canonical/legacy on a clean worktree
229
+ PASS #169 batched fingerprint matches legacy for dirty tracked + untracked content
230
+ PASS #169 packaged plugin batched fingerprint matches legacy dirty semantics
231
+ PASS #169 staging visible content does not change the workspace fingerprint
232
+ PASS #169 tracked deletion keeps legacy fingerprint semantics
233
+ PASS #169 1000-untracked-file fingerprint returns a valid digest
234
+ PASS #169 1000-untracked-file fingerprint stays below 5s regression ceiling (actual 501.9ms)
235
+ PASS #169 packaged plugin fingerprint remains byte-identical for 1000 untracked files
236
+ PASS #169 explicit fingerprint cap reports a structured conservative-fallback signal
237
+ PASS #169 large-workspace Tier-2 fixture routes normally
238
+ PASS #169 large-workspace Tier-2 fixture resolves requirements/workflow planning
239
+ PASS #169 large-workspace Tier-2 fixture starts after planning
240
+ PASS #169 >5000 observed paths degrade conservatively instead of blocking the shell call
241
+ PASS #190 shell admission no longer creates conservative budget/probe state
242
+ PASS: batched workspace fingerprint (15 assertions, 1000-file 501.9ms)
243
+
244
+ ▶️ Running test suite: mechanism-2aj-waza-reference-adapter.test.js
245
+ PASS discovers the canonical Harness skill set
246
+ PASS adapter invokes Waza exactly once per canonical top-level skill
247
+ PASS Waza receives explicit canonical skill paths instead of recursive workspace discovery
248
+ PASS environment-detection placeholder reference is reachable: references/shell-syntax-rules.md
249
+ PASS environment-detection removes Waza orphan advisories for Harness-reachable references
250
+ PASS environment-detection reports the suppressed advisories explicitly
251
+ PASS environment-detection recomputes readiness without false local-orphan failures
252
+ PASS eval-harness placeholder reference is reachable: references/scoring-rubric.md
253
+ PASS eval-harness removes Waza orphan advisories for Harness-reachable references
254
+ PASS eval-harness reports the suppressed advisories explicitly
255
+ PASS eval-harness recomputes readiness without false local-orphan failures
256
+ PASS fable-discipline placeholder reference is reachable: references/discipline-rules.md
257
+ PASS fable-discipline removes Waza orphan advisories for Harness-reachable references
258
+ PASS fable-discipline reports the suppressed advisories explicitly
259
+ PASS fable-discipline recomputes readiness without false local-orphan failures
260
+ PASS fable-mode placeholder reference is reachable: references/profile-lookup.md
261
+ PASS fable-mode placeholder reference is reachable: references/model-matrix.md
262
+ PASS fable-mode removes Waza orphan advisories for Harness-reachable references
263
+ PASS fable-mode reports the suppressed advisories explicitly
264
+ PASS fable-mode recomputes readiness without false local-orphan failures
265
+ PASS find-skills placeholder reference is reachable: references/discovery-flow.md
266
+ PASS find-skills removes Waza orphan advisories for Harness-reachable references
267
+ PASS find-skills reports the suppressed advisories explicitly
268
+ PASS find-skills recomputes readiness without false local-orphan failures
269
+ PASS git-commit placeholder reference is reachable: references/commit-flow.md
270
+ PASS git-commit removes Waza orphan advisories for Harness-reachable references
271
+ PASS git-commit reports the suppressed advisories explicitly
272
+ PASS git-commit recomputes readiness without false local-orphan failures
273
+ PASS grill-me placeholder reference is reachable: references/grilling-playbook.md
274
+ PASS grill-me removes Waza orphan advisories for Harness-reachable references
275
+ PASS grill-me reports the suppressed advisories explicitly
276
+ PASS grill-me recomputes readiness without false local-orphan failures
277
+ PASS grill-with-docs placeholder reference is reachable: references/session-playbook.md
278
+ PASS grill-with-docs removes Waza orphan advisories for Harness-reachable references
279
+ PASS grill-with-docs reports the suppressed advisories explicitly
280
+ PASS grill-with-docs recomputes readiness without false local-orphan failures
281
+ PASS harness-everything placeholder reference is reachable: references/triage-and-tiers.md
282
+ PASS harness-everything removes Waza orphan advisories for Harness-reachable references
283
+ PASS harness-everything reports the suppressed advisories explicitly
284
+ PASS harness-everything recomputes readiness without false local-orphan failures
285
+ PASS improve-codebase-architecture placeholder reference is reachable: references/README.md
286
+ PASS improve-codebase-architecture removes Waza orphan advisories for Harness-reachable references
287
+ PASS improve-codebase-architecture reports the suppressed advisories explicitly
288
+ PASS improve-codebase-architecture recomputes readiness without false local-orphan failures
289
+ PASS install-cognitive-os placeholder reference is reachable: references/cognitive-loop.md
290
+ PASS install-cognitive-os removes Waza orphan advisories for Harness-reachable references
291
+ PASS install-cognitive-os reports the suppressed advisories explicitly
292
+ PASS install-cognitive-os recomputes readiness without false local-orphan failures
293
+ PASS multi-agent-workspace placeholder reference is reachable: references/orchestration.md
294
+ PASS multi-agent-workspace placeholder reference is reachable: references/architecture-guide.md
295
+ PASS multi-agent-workspace removes Waza orphan advisories for Harness-reachable references
296
+ PASS multi-agent-workspace reports the suppressed advisories explicitly
297
+ PASS multi-agent-workspace recomputes readiness without false local-orphan failures
298
+ PASS repo-docs placeholder reference is reachable: references/process-guide.md
299
+ PASS repo-docs removes Waza orphan advisories for Harness-reachable references
300
+ PASS repo-docs reports the suppressed advisories explicitly
301
+ PASS repo-docs recomputes readiness without false local-orphan failures
302
+ PASS rewrite-commits placeholder reference is reachable: references/workflow.md
303
+ PASS rewrite-commits removes Waza orphan advisories for Harness-reachable references
304
+ PASS rewrite-commits reports the suppressed advisories explicitly
305
+ PASS rewrite-commits recomputes readiness without false local-orphan failures
306
+ PASS security-review placeholder reference is reachable: references/security-checklist.md
307
+ PASS security-review removes Waza orphan advisories for Harness-reachable references
308
+ PASS security-review reports the suppressed advisories explicitly
309
+ PASS security-review recomputes readiness without false local-orphan failures
310
+ PASS self-evolve placeholder reference is reachable: references/memory-resolution.md
311
+ PASS self-evolve removes Waza orphan advisories for Harness-reachable references
312
+ PASS self-evolve reports the suppressed advisories explicitly
313
+ PASS self-evolve recomputes readiness without false local-orphan failures
314
+ PASS skill-creator placeholder reference is reachable: references/quality-checklist.md
315
+ PASS skill-creator removes Waza orphan advisories for Harness-reachable references
316
+ PASS skill-creator reports the suppressed advisories explicitly
317
+ PASS skill-creator recomputes readiness without false local-orphan failures
318
+ PASS skill-style placeholder reference is reachable: references/style-guide.md
319
+ PASS skill-style removes Waza orphan advisories for Harness-reachable references
320
+ PASS skill-style reports the suppressed advisories explicitly
321
+ PASS skill-style recomputes readiness without false local-orphan failures
322
+ PASS tdd placeholder reference is reachable: references/core-discipline.md
323
+ PASS tdd removes Waza orphan advisories for Harness-reachable references
324
+ PASS tdd reports the suppressed advisories explicitly
325
+ PASS tdd recomputes readiness without false local-orphan failures
326
+ PASS to-spec placeholder reference is reachable: references/process.md
327
+ PASS to-spec removes Waza orphan advisories for Harness-reachable references
328
+ PASS to-spec reports the suppressed advisories explicitly
329
+ PASS to-spec recomputes readiness without false local-orphan failures
330
+ PASS to-tickets placeholder reference is reachable: references/publishing-and-templates.md
331
+ PASS to-tickets removes Waza orphan advisories for Harness-reachable references
332
+ PASS to-tickets reports the suppressed advisories explicitly
333
+ PASS to-tickets recomputes readiness without false local-orphan failures
334
+ PASS todo-driven-workflow placeholder reference is reachable: references/execution-guide.md
335
+ PASS todo-driven-workflow removes Waza orphan advisories for Harness-reachable references
336
+ PASS todo-driven-workflow reports the suppressed advisories explicitly
337
+ PASS todo-driven-workflow recomputes readiness without false local-orphan failures
338
+ PASS using-git-worktrees placeholder reference is reachable: references/submodules-in-worktrees.md
339
+ PASS using-git-worktrees placeholder reference is reachable: references/workflow-details.md
340
+ PASS using-git-worktrees removes Waza orphan advisories for Harness-reachable references
341
+ PASS using-git-worktrees reports the suppressed advisories explicitly
342
+ PASS using-git-worktrees recomputes readiness without false local-orphan failures
343
+ PASS verification-loop placeholder reference is reachable: references/project-verification-contract.md
344
+ PASS verification-loop placeholder reference is reachable: references/verification-phases.md
345
+ PASS verification-loop removes Waza orphan advisories for Harness-reachable references
346
+ PASS verification-loop reports the suppressed advisories explicitly
347
+ PASS verification-loop recomputes readiness without false local-orphan failures
348
+ PASS verify-before-claim placeholder reference is reachable: references/verification-guide.md
349
+ PASS verify-before-claim removes Waza orphan advisories for Harness-reachable references
350
+ PASS verify-before-claim reports the suppressed advisories explicitly
351
+ PASS verify-before-claim recomputes readiness without false local-orphan failures
352
+ PASS zoom-out placeholder reference is reachable: references/circuit-breaker.md
353
+ PASS zoom-out removes Waza orphan advisories for Harness-reachable references
354
+ PASS zoom-out reports the suppressed advisories explicitly
355
+ PASS zoom-out recomputes readiness without false local-orphan failures
356
+ PASS at least one canonical skill uses the Harness placeholder reference contract
357
+ PASS adapter resolves canonical placeholder-orphan advisories
358
+ PASS fable-mode nested reference remains reachable: references/execution-phases.md
359
+ PASS fable-mode nested reference advisories are resolved through the reachable reference graph
360
+ PASS harness-everything nested reference remains reachable: references/router-workflow-plan.md
361
+ PASS harness-everything nested reference remains reachable: references/skill-registry.md
362
+ PASS harness-everything nested reference advisories are resolved through the reachable reference graph
363
+ PASS multi-agent-workspace nested reference remains reachable: references/agency-agents.md
364
+ PASS multi-agent-workspace nested reference advisories are resolved through the reachable reference graph
365
+ PASS skill-creator nested reference remains reachable: references/authoring-workflow.md
366
+ PASS skill-creator nested reference remains reachable: references/testing-workflow.md
367
+ PASS skill-creator nested reference remains reachable: references/quality-principles.md
368
+ PASS skill-creator nested reference remains reachable: references/dynamic-generation-contract.md
369
+ PASS skill-creator nested reference advisories are resolved through the reachable reference graph
370
+ PASS tdd nested reference remains reachable: references/quality-model.md
371
+ PASS tdd nested reference remains reachable: references/unit-testing.md
372
+ PASS tdd nested reference remains reachable: references/integration-testing.md
373
+ PASS tdd nested reference advisories are resolved through the reachable reference graph
374
+ PASS <skills-repo-root> existing target is a resolved Harness contract link
375
+ PASS generic runtime placeholder is classified as a template advisory
376
+ PASS unknown placeholder remains a real local-link problem
377
+ PASS existing repo-scope relative link is resolved by the Harness repository contract
378
+ PASS missing repo-scope relative link remains a hard local-link problem
379
+ PASS links inside generated-document templates remain visible template advisories
380
+ PASS network and generic-template findings do not masquerade as broken local links
381
+ PASS network and template findings are retained in separate advisory categories
382
+ PASS normalized readiness remains green when only false-orphan/network/template advisories remain
383
+ PASS non-link readiness failures remain explicit machine-readable blockers
384
+ PASS: Waza/Harness reference adapter (139 assertions across 26 skills)
385
+
386
+ ▶️ Running test suite: mechanism-2ak-contract-probe-adapter.test.js
387
+ === Contract Integrity Phase 3 Node Probe Adapter (#84) ===
388
+ PASS declared node-npm-v1 probe plan validates
389
+ PASS green baseline plus both explicit probes produces PROTECTED evidence
390
+ PASS env and exact-replace probes are killed only by expected contract failures
391
+ PASS adapter never mutates the source workspace
392
+ PASS probe report retains output hashes/evidence refs instead of project test output
393
+ PASS derived adapter evidence feeds the existing #84/#58 strict integrity gate
394
+ PASS green test run under a required probe is explicitly SURVIVED, never PASS
395
+ PASS green but weak suite cannot compensate 100 completeness with a surviving contract probe
396
+ PASS unrelated failing test output is INVALID and cannot be credited as a kill
397
+ PASS ambiguous exact-replace fallback fails closed without mutating source
398
+ PASS replace probe rejects symlink/junction escape without mutating outside the isolated workspace
399
+ PASS workspace copy rejects source symlinks/junctions before project code can mutate an outside target
400
+ PASS v1 adapter refuses to infer/install external dependencies
401
+ PASS non-green baseline blocks all protection claims
402
+ PASS probe plan rejects replace targets that escape the isolated workspace
403
+ PASS CLI returns exit 0 only for fully killed declared probes
404
+ PASS adapter documentation states exact supported scope and explicit non-support
405
+
406
+ PASS: #84 contract protection node adapter (0 failures)
407
+
408
+ ▶️ Running test suite: mechanism-2al-codex-hooks-compat.test.js
409
+
410
+ [2al] Codex user-hook compatibility fallback (#122)...
411
+ PASS explicit install materializes compatibility entries
412
+ PASS install never changes Codex trust/config.toml state
413
+ PASS status verifies exact installed entry hashes and runtime tree
414
+ PASS status distinguishes installed hooks from Codex-trusted live capture
415
+ PASS existing unrelated user hooks and top-level metadata are preserved semantically
416
+ PASS every compatibility hook command resolves to the Harness-owned runtime copy
417
+ PASS compatibility entries use literal absolute runtime paths without shell-specific plugin expansion
418
+ PASS compatibility runtime is self-contained for hook and router dependencies
419
+ PASS reinstall/update is idempotent and does not duplicate hook entries
420
+ PASS update preserves user hooks added after the initial compatibility install
421
+ PASS modified Harness compatibility entry makes update fail closed without rewriting user config
422
+ PASS modified Harness compatibility entry makes uninstall fail closed rather than deleting user edits
423
+ PASS explicit uninstall removes exact Harness-owned entries without changing trust state
424
+ PASS uninstall preserves unrelated pre-existing and later-added user hooks
425
+ PASS uninstall leaves config.toml/trust state byte-identical
426
+ PASS uninstall removes Harness compatibility ownership manifest
427
+ PASS compatibility install can create a new hooks.json when none exists
428
+ PASS uninstall removes hooks.json only when Harness created it and no user entries remain
429
+ PASS compatibility runtime is copied from the verified installed marketplace source
430
+ PASS extra identical Harness hook is treated as user config drift, not silently deleted
431
+ PASS uninstall never recreates a user hooks.json that was removed after compatibility install
432
+ PASS byte-identical pre-existing user hooks are reused but never recorded as Harness-owned
433
+ PASS uninstall preserves byte-identical hooks that predated compatibility install
434
+ PASS forged manifest ownership fails closed without deleting a user hook
435
+ PASS failed manifest commit rolls hooks.json back byte-identically
436
+ PASS linked compatibility owner path cannot redirect writes outside Codex home
437
+ PASS malformed user hooks.json fails closed without replacement
438
+ PASS status clearly reports inactive observation capture when hooks are absent
439
+ PASS fallback derives from the current packaged hook manifest instead of maintaining a second manual hook inventory
440
+
441
+ PASS: #122 Codex compatibility fallback (0 failures)
442
+
443
+ ▶️ Running test suite: mechanism-2am-observations-session-import.test.js
444
+ PASS: post-revision Codex session labels import as redacted, prompt-paired, idempotent observations.
445
+
446
+ ▶️ Running test suite: mechanism-2am-openai-packaged-helper-runtime.test.js
447
+ OpenAI packaged helper runtime smoke test passed
448
+
449
+ ▶️ Running test suite: mechanism-2an-environment-detection-readonly.test.js
450
+ Issue #213 verified: detection is read-only across six adapters, repair is explicit/idempotent, and OpenCode stays separate.
451
+
452
+ ▶️ Running test suite: mechanism-2an-workflow-obligations.test.js
453
+ === Issue #85 requirements-first workflow contract ===
454
+ PASS Tier 2 route persists successfully
455
+ PASS Tier 2 receives a preliminary iterative-single route
456
+ PASS selected Tier 2 workflow begins pending
457
+ PASS persisted workflow records semantic-contract mode rather than advisory-workflow
458
+ PASS Tier 2 immediately materializes a planning contract
459
+ PASS planning starts with decompose then compose
460
+ PASS requirements begin empty instead of being invented by the router
461
+ PASS router topology is recorded only as candidate strategy
462
+ PASS workflow start refuses to pretend planning is complete
463
+ PASS failed start leaves workflow pending
464
+ PASS unresolved planning does not hard-block ordinary tools
465
+ PASS Stop remains fail-open while planning is unresolved
466
+ PASS unresolved planning cannot silently become satisfied
467
+ PASS decomposition gap is visible
468
+ PASS workflow-composition gap is visible
469
+ PASS new single-agent plans cannot bypass active step typing
470
+ PASS requirements and workflow selection are recorded before execution
471
+ PASS requirement fragments are machine-readable
472
+ PASS workflow choice is explicitly confirmed after decomposition
473
+ PASS decompose obligation resolves from requirement fragments
474
+ PASS compose obligation resolves from workflow-selection evidence
475
+ PASS start activates the confirmed non-Fable workflow
476
+ PASS confirmed workflow becomes running
477
+ PASS planning contract advances to execution phase
478
+ PASS execution adds execute/verify without losing planning evidence
479
+ PASS execution obligation accepts bounded evidence-backed escape
480
+ PASS verification obligation cannot be escaped
481
+ PASS verification obligation can record explicit blocked evidence
482
+ PASS blocked obligation still reminds without trapping Stop
483
+ PASS blocked obligation keeps workflow unresolved rather than satisfied
484
+ PASS blocked verification remains visible
485
+ PASS verification can later resolve to pass with evidence
486
+ PASS behavior-change binding resolves before its active step passes
487
+ PASS behavior-change step advances after TDD binding resolution
488
+ PASS verification skill resolves only when the verification step becomes active
489
+ PASS verification step passes with objective evidence
490
+ PASS objective verification milestone is observed after the earlier mutation
491
+ PASS resolved workflow Stop remains fail-open
492
+ PASS planning + execution + verification allow satisfied
493
+ PASS satisfied workflow has no unresolved obligations
494
+ PASS Tier 2 route persists for active-step binding coverage
495
+
496
+ === Binding declaration validation ===
497
+ PASS invalid requiredBindings null fixture route persists (typed)
498
+ PASS plan exits 2 for requiredBindings null (typed requirement)
499
+ PASS rejected requiredBindings null plan writes no stdout (typed)
500
+ PASS rejection identifies requiredBindings for null (typed requirement)
501
+ PASS rejected requiredBindings null plan leaves workflow state unchanged (typed)
502
+ PASS rejected requiredBindings null plan leaves obligation state unchanged (typed)
503
+ PASS invalid requiredBindings null fixture route persists (untyped)
504
+ PASS plan exits 2 for requiredBindings null (untyped requirement)
505
+ PASS rejected requiredBindings null plan writes no stdout (untyped)
506
+ PASS rejection identifies requiredBindings for null (untyped requirement)
507
+ PASS rejected requiredBindings null plan leaves workflow state unchanged (untyped)
508
+ PASS rejected requiredBindings null plan leaves obligation state unchanged (untyped)
509
+ PASS invalid requiredBindings object fixture route persists (typed)
510
+ PASS plan exits 2 for requiredBindings object (typed requirement)
511
+ PASS rejected requiredBindings object plan writes no stdout (typed)
512
+ PASS rejection identifies requiredBindings for object (typed requirement)
513
+ PASS rejected requiredBindings object plan leaves workflow state unchanged (typed)
514
+ PASS rejected requiredBindings object plan leaves obligation state unchanged (typed)
515
+ PASS invalid requiredBindings object fixture route persists (untyped)
516
+ PASS plan exits 2 for requiredBindings object (untyped requirement)
517
+ PASS rejected requiredBindings object plan writes no stdout (untyped)
518
+ PASS rejection identifies requiredBindings for object (untyped requirement)
519
+ PASS rejected requiredBindings object plan leaves workflow state unchanged (untyped)
520
+ PASS rejected requiredBindings object plan leaves obligation state unchanged (untyped)
521
+ PASS invalid requiredBindings string fixture route persists (typed)
522
+ PASS plan exits 2 for requiredBindings string (typed requirement)
523
+ PASS rejected requiredBindings string plan writes no stdout (typed)
524
+ PASS rejection identifies requiredBindings for string (typed requirement)
525
+ PASS rejected requiredBindings string plan leaves workflow state unchanged (typed)
526
+ PASS rejected requiredBindings string plan leaves obligation state unchanged (typed)
527
+ PASS invalid requiredBindings string fixture route persists (untyped)
528
+ PASS plan exits 2 for requiredBindings string (untyped requirement)
529
+ PASS rejected requiredBindings string plan writes no stdout (untyped)
530
+ PASS rejection identifies requiredBindings for string (untyped requirement)
531
+ PASS rejected requiredBindings string plan leaves workflow state unchanged (untyped)
532
+ PASS rejected requiredBindings string plan leaves obligation state unchanged (untyped)
533
+ PASS invalid requiredBindings boolean fixture route persists (typed)
534
+ PASS plan exits 2 for requiredBindings boolean (typed requirement)
535
+ PASS rejected requiredBindings boolean plan writes no stdout (typed)
536
+ PASS rejection identifies requiredBindings for boolean (typed requirement)
537
+ PASS rejected requiredBindings boolean plan leaves workflow state unchanged (typed)
538
+ PASS rejected requiredBindings boolean plan leaves obligation state unchanged (typed)
539
+ PASS invalid requiredBindings boolean fixture route persists (untyped)
540
+ PASS plan exits 2 for requiredBindings boolean (untyped requirement)
541
+ PASS rejected requiredBindings boolean plan writes no stdout (untyped)
542
+ PASS rejection identifies requiredBindings for boolean (untyped requirement)
543
+ PASS rejected requiredBindings boolean plan leaves workflow state unchanged (untyped)
544
+ PASS rejected requiredBindings boolean plan leaves obligation state unchanged (untyped)
545
+ PASS invalid requiredBindings number fixture route persists (typed)
546
+ PASS plan exits 2 for requiredBindings number (typed requirement)
547
+ PASS rejected requiredBindings number plan writes no stdout (typed)
548
+ PASS rejection identifies requiredBindings for number (typed requirement)
549
+ PASS rejected requiredBindings number plan leaves workflow state unchanged (typed)
550
+ PASS rejected requiredBindings number plan leaves obligation state unchanged (typed)
551
+ PASS invalid requiredBindings number fixture route persists (untyped)
552
+ PASS plan exits 2 for requiredBindings number (untyped requirement)
553
+ PASS rejected requiredBindings number plan writes no stdout (untyped)
554
+ PASS rejection identifies requiredBindings for number (untyped requirement)
555
+ PASS rejected requiredBindings number plan leaves workflow state unchanged (untyped)
556
+ PASS rejected requiredBindings number plan leaves obligation state unchanged (untyped)
557
+ PASS invalid optionalBindings null fixture route persists (typed)
558
+ PASS plan exits 2 for optionalBindings null (typed requirement)
559
+ PASS rejected optionalBindings null plan writes no stdout (typed)
560
+ PASS rejection identifies optionalBindings for null (typed requirement)
561
+ PASS rejected optionalBindings null plan leaves workflow state unchanged (typed)
562
+ PASS rejected optionalBindings null plan leaves obligation state unchanged (typed)
563
+ PASS invalid optionalBindings null fixture route persists (untyped)
564
+ PASS plan exits 2 for optionalBindings null (untyped requirement)
565
+ PASS rejected optionalBindings null plan writes no stdout (untyped)
566
+ PASS rejection identifies optionalBindings for null (untyped requirement)
567
+ PASS rejected optionalBindings null plan leaves workflow state unchanged (untyped)
568
+ PASS rejected optionalBindings null plan leaves obligation state unchanged (untyped)
569
+ PASS invalid optionalBindings object fixture route persists (typed)
570
+ PASS plan exits 2 for optionalBindings object (typed requirement)
571
+ PASS rejected optionalBindings object plan writes no stdout (typed)
572
+ PASS rejection identifies optionalBindings for object (typed requirement)
573
+ PASS rejected optionalBindings object plan leaves workflow state unchanged (typed)
574
+ PASS rejected optionalBindings object plan leaves obligation state unchanged (typed)
575
+ PASS invalid optionalBindings object fixture route persists (untyped)
576
+ PASS plan exits 2 for optionalBindings object (untyped requirement)
577
+ PASS rejected optionalBindings object plan writes no stdout (untyped)
578
+ PASS rejection identifies optionalBindings for object (untyped requirement)
579
+ PASS rejected optionalBindings object plan leaves workflow state unchanged (untyped)
580
+ PASS rejected optionalBindings object plan leaves obligation state unchanged (untyped)
581
+ PASS invalid optionalBindings string fixture route persists (typed)
582
+ PASS plan exits 2 for optionalBindings string (typed requirement)
583
+ PASS rejected optionalBindings string plan writes no stdout (typed)
584
+ PASS rejection identifies optionalBindings for string (typed requirement)
585
+ PASS rejected optionalBindings string plan leaves workflow state unchanged (typed)
586
+ PASS rejected optionalBindings string plan leaves obligation state unchanged (typed)
587
+ PASS invalid optionalBindings string fixture route persists (untyped)
588
+ PASS plan exits 2 for optionalBindings string (untyped requirement)
589
+ PASS rejected optionalBindings string plan writes no stdout (untyped)
590
+ PASS rejection identifies optionalBindings for string (untyped requirement)
591
+ PASS rejected optionalBindings string plan leaves workflow state unchanged (untyped)
592
+ PASS rejected optionalBindings string plan leaves obligation state unchanged (untyped)
593
+ PASS invalid optionalBindings boolean fixture route persists (typed)
594
+ PASS plan exits 2 for optionalBindings boolean (typed requirement)
595
+ PASS rejected optionalBindings boolean plan writes no stdout (typed)
596
+ PASS rejection identifies optionalBindings for boolean (typed requirement)
597
+ PASS rejected optionalBindings boolean plan leaves workflow state unchanged (typed)
598
+ PASS rejected optionalBindings boolean plan leaves obligation state unchanged (typed)
599
+ PASS invalid optionalBindings boolean fixture route persists (untyped)
600
+ PASS plan exits 2 for optionalBindings boolean (untyped requirement)
601
+ PASS rejected optionalBindings boolean plan writes no stdout (untyped)
602
+ PASS rejection identifies optionalBindings for boolean (untyped requirement)
603
+ PASS rejected optionalBindings boolean plan leaves workflow state unchanged (untyped)
604
+ PASS rejected optionalBindings boolean plan leaves obligation state unchanged (untyped)
605
+ PASS invalid optionalBindings number fixture route persists (typed)
606
+ PASS plan exits 2 for optionalBindings number (typed requirement)
607
+ PASS rejected optionalBindings number plan writes no stdout (typed)
608
+ PASS rejection identifies optionalBindings for number (typed requirement)
609
+ PASS rejected optionalBindings number plan leaves workflow state unchanged (typed)
610
+ PASS rejected optionalBindings number plan leaves obligation state unchanged (typed)
611
+ PASS invalid optionalBindings number fixture route persists (untyped)
612
+ PASS plan exits 2 for optionalBindings number (untyped requirement)
613
+ PASS rejected optionalBindings number plan writes no stdout (untyped)
614
+ PASS rejection identifies optionalBindings for number (untyped requirement)
615
+ PASS rejected optionalBindings number plan leaves workflow state unchanged (untyped)
616
+ PASS rejected optionalBindings number plan leaves obligation state unchanged (untyped)
617
+ PASS empty-array binding fixture route persists
618
+ PASS plan accepts omitted and explicit empty binding arrays
619
+ PASS omitted binding arrays remain empty after normalization
620
+ PASS explicit empty binding arrays remain empty after normalization
621
+ PASS normalized ordered steps are recorded in the existing requirements contract
622
+ PASS typed steps preserve request order
623
+ PASS behavior-change step materializes required TDD binding
624
+ PASS verification step owns its verification-loop binding
625
+ PASS commit step materializes required git-commit binding
626
+ PASS typed-step plan cannot omit the mandatory verification step
627
+ PASS start accepts a confirmed typed-step workflow
628
+ PASS start returns the first ordered step as active
629
+ PASS start returns concrete commands for resolving the active binding and passing the step
630
+ PASS review starts without TDD and surfaces only its optional binding
631
+ PASS active optional binding includes its load path
632
+ PASS start does not disclose future-step bindings
633
+ PASS future-step binding cannot be resolved before its step becomes active
634
+ PASS active step is persisted in workflow-obligations state
635
+ PASS typed-step workflows do not reintroduce global suggested-skill pushes
636
+ PASS active step cannot pass before surfaced optional bindings are resolved
637
+ PASS active optional binding can be loaded with evidence
638
+ PASS optional binding cannot be marked not-needed without evidence
639
+ PASS active optional binding can be marked not-needed with evidence
640
+ PASS review step can pass after its surfaced optional binding is resolved
641
+ PASS review advance returns only the behavior-change step and its required TDD binding
642
+ PASS behavior-change output includes its TDD path but keeps later bindings hidden
643
+ PASS behavior-change cannot pass before required TDD binding is resolved
644
+ PASS required TDD binding resolves with load evidence
645
+ PASS resolved behavior-change advances to the mandatory verification step
646
+ PASS verification binding is disclosed only when verification becomes active
647
+ PASS verification binding resolves at its own step
648
+ PASS verification step advances to commit only after its binding resolves
649
+ PASS commit binding is disclosed only when the commit step becomes active
650
+ PASS required git-commit binding resolves at the commit step
651
+ PASS advancing the last step leaves no active-step bindings
652
+ PASS completed typed steps resolve their aggregate execute and verify obligations with linked evidence
653
+ PASS all typed steps can satisfy the workflow without separate aggregate dispositions
654
+ PASS satisfied typed-step workflow has no unresolved obligations
655
+ PASS verification-only workflow route persists
656
+ PASS verification-only typed plan is accepted
657
+ PASS verification-only typed plan starts at its verification step
658
+ PASS empty typed execution group resolves as explicit verification-only evidence
659
+ PASS verification-only step resolves its required binding
660
+ PASS verification-only step passes with objective evidence
661
+ PASS verification-only workflow can satisfy without an execution step
662
+ PASS verification-only completion also resolves the aggregate verify obligation
663
+ PASS route persists for unknown-required-binding coverage
664
+ PASS unknown required binding is accepted into the auditable contract
665
+ PASS start surfaces rather than silently discarding an unknown required binding
666
+ PASS unknown required binding remains visible as pending/unavailable
667
+ PASS unknown required binding cannot be falsely marked loaded
668
+ PASS step with unknown required binding cannot pass
669
+ PASS unknown required binding does not hard-block ordinary tools
670
+ PASS missing binding keeps Stop fail-open while workflow remains unresolved
671
+ PASS Stop reports the unresolved unknown binding
672
+ PASS custom-reference workflow route persists
673
+ PASS step contracts accept an explicit skill/reference path
674
+ PASS custom reference path is normalized and disclosed only at its active step
675
+ PASS explicit reference binding can resolve with evidence
676
+ PASS active step can pass after its explicit reference binding is resolved
677
+ PASS unsafe-reference workflow route persists
678
+ PASS step bindings reject paths that traverse outside repository scope
679
+ PASS drive-reference workflow route persists
680
+ PASS step bindings reject Windows drive-relative paths
681
+ PASS second Tier 2 route persists for replan discriminator
682
+ PASS initial route records normalized knowledge signals
683
+ PASS post-decomposition workflow can be recomposed through the router contract
684
+ PASS recomposed workflow receives an explicit confirmed disposition
685
+ PASS requested and router-confirmed post-decomposition strategy are preserved
686
+ PASS recomposed plan becomes the pending execution contract
687
+ PASS strategy recomposition preserves the original knowledge signals
688
+ PASS recomposed workflow cannot become satisfied before its selected topology starts
689
+ PASS recomposed Fable topology proceeds to its native stage-contract requirement
690
+ PASS recomposed planning state still does not recreate a tool lock
691
+ PASS prohibition fixture routes successfully
692
+ PASS prohibited post-decomposition choice is evaluated by router policy
693
+ PASS original user prohibition survives recomposition
694
+ PASS requirements remain valid while only the prohibited workflow choice stays unresolved
695
+ PASS Tier 3 Fable candidate persists successfully
696
+ PASS Tier 3 keeps Fable as preliminary candidate
697
+ PASS Fable also requires requirements/workflow planning before stage execution
698
+ PASS Fable cannot enter stage execution before planning contract resolves
699
+ PASS Tier 1 route persists successfully
700
+ PASS clear bounded Tier 1 intent has no decomposition overhead
701
+ PASS Tier 1 direct Stop remains lightweight
702
+ PASS Tier 1 remains a minimal direct path
703
+ PASS #190 mutation-probe lock remains retired
704
+ PASS #190 hard budget state remains retired
705
+
706
+ PASS: issue #85 requirements-first workflow contract (0 failures)
707
+
708
+ ▶️ Running test suite: mechanism-2ao-plugin-sync.test.js
709
+ Native plugin sync verified: absent plugins install, installed plugins update, and unknown state fails closed.
710
+
711
+ ▶️ Running test suite: mechanism-2ap-sbom.test.js
712
+ CycloneDX SBOM verified: 123 lockfile components and npm pack inclusion.
713
+ (node:8596) [DEP0190] DeprecationWarning: Passing args to a child process with shell option true can lead to security v
714
+ ulnerabilities, as the arguments are not escaped, only concatenated.
715
+ (Use `node --trace-deprecation ...` to show where the warning was created)
716
+
717
+ ▶️ Running test suite: mechanism-2aq-fable-stage-bindings.test.js
718
+ === #297 Fable active-stage bindings ===
719
+ PASS post-tool check hook remains fail-open
720
+ PASS a successful check does not pass a stage while its declared bindings remain unresolved
721
+ PASS check success and unresolved binding status are recorded separately
722
+ PASS retained Fable notification shows the current stage
723
+ PASS retained Fable notification shows only current-stage bindings
724
+ PASS retained Fable notification hides future bindings and avoids repeating the full plan
725
+ PASS unresolved Fable bindings do not hard-block ordinary mutation tools
726
+ PASS unresolved Fable bindings do not hard-block Stop
727
+ PASS Stop exposes the binding gap without locking the workflow
728
+ PASS active required stage binding can be explicitly resolved
729
+ PASS resolving one binding does not pass the stage while an optional binding is undecided
730
+ PASS optional binding can be explicitly declined with evidence
731
+ PASS stage check remains callable after binding resolution
732
+ PASS successful stage check discloses the newly dependency-ready verifier binding
733
+ PASS stage passes only after check and binding dispositions both resolve
734
+ PASS passing stage retains correlated check evidence
735
+ PASS packaged skill binding resolves to the installed Harness skill at run preparation
736
+ PASS workspace reference binding resolves to the workspace file, not the Harness copy
737
+ PASS a declared stage path with no file is recorded as missing, not available
738
+ PASS a missing stage binding cannot be recorded as loaded
739
+ PASS: #297 Fable stage binding gate mechanics
740
+
741
+ ▶️ Running test suite: mechanism-2ar-binding-resolution.test.js
742
+ === PR #303 binding resolution ===
743
+ PASS Tier 2 route persists for declared-path coverage
744
+ PASS plan with a missing declared path is still recorded
745
+ PASS a declared path with no file is recorded as missing, not available
746
+ PASS a declared path that exists resolves to its readable file
747
+ PASS workflow starts with a visible missing binding
748
+ PASS a missing required binding cannot be marked loaded
749
+ PASS the failed load leaves the required binding visibly unavailable
750
+ PASS the step cannot pass while its required binding is unresolved
751
+ PASS an existing optional binding can be loaded
752
+ PASS repository/Claude plugin layout resolves tdd/SKILL.md at the package root
753
+ PASS Codex plugin package ships the binding resolver
754
+ PASS Codex plugin layout resolves tdd/SKILL.md under its skills/ root
755
+ PASS a path absent from workspace and package roots is missing
756
+ PASS fixture precondition: Harness ships docs/architecture.md
757
+ PASS a missing workspace reference does not resolve to the Harness package copy
758
+ PASS a skill id naming its own SKILL.md still resolves from the package
759
+ PASS a registered id at an unregistered path is treated as a workspace reference
760
+ PASS Tier 2 route persists in a client workspace
761
+ PASS client plan declares a workspace reference that collides with a Harness file
762
+ PASS step flow records the colliding workspace reference as missing
763
+ PASS client workflow starts
764
+ PASS step flow cannot load the Harness copy as the workspace reference
765
+ PASS stage flow records the colliding workspace reference as missing
766
+ PASS router runs against a workspace with a generated-skill manifest
767
+ PASS matching self-evolved skill surfaces as a metadata-only id
768
+ PASS router does not disclose the generated skill path or text
769
+ PASS unrelated prompts do not surface the generated skill
770
+ PASS Tier 2 route persists in the generated-skill workspace
771
+ PASS a step can declare the generated skill id as a binding
772
+ PASS the generated binding is not disclosed before its step is active
773
+ PASS built-in TDD binding resolves from the package root outside the Harness repo
774
+ PASS the generated binding becomes available with its SKILL.md once its step is active
775
+ PASS the active generated binding can be loaded
776
+
777
+ PASS: PR #303 binding resolution (0 failures)
778
+
779
+ ▶️ Running test suite: mechanism-2b-boundary-guard.test.js
780
+
781
+ [2b] Boundary reminder...
782
+ ✅ 2b. Large read emits a reminder but remains available
783
+
784
+ ▶️ Running test suite: mechanism-2c-state-persist.test.js
785
+
786
+ [2c] State persistence (WAL)...
787
+ ✅ 2c. Failing Bash call is recorded as status=failed
788
+ ✅ 2c. Claude-shaped PostToolUse without exitCode clears failed state even with stderr diagnostics
789
+ ✅ 2c. Numeric non-zero exit still records failure on hosts that report exit codes
790
+ ✅ 2c. Numeric zero exit still clears failure state
791
+ ✅ 2c. PostToolUseFailure remains authoritative without numeric exitCode
792
+
793
+ ▶️ Running test suite: mechanism-2d-fact-audit.test.js
794
+
795
+ [2d] Fact-audit reminder...
796
+ ✅ 2d. tier-router.js reads {"prompt":...} from stdin and emits FACT-AUDIT REMINDER
797
+
798
+ ▶️ Running test suite: mechanism-2e-scope-guard.test.js
799
+
800
+ [2e] Subagent scope reminder...
801
+ ✅ 2e. Scope drift is reported without blocking
802
+
803
+ ▶️ Running test suite: mechanism-2f-stop-gate.test.js
804
+
805
+ [2f] Verification reminders...
806
+ ✅ 2f. Unverified dirty Stop emits reminder and exits 0
807
+ ✅ 2f. Stop reminder creates no lock/throttle state
808
+ ✅ 2f. Observed verification can mark workflow satisfied
809
+ ✅ 2f. Missing verification is reminder-only
810
+ ✅ 2f. Missing verification does not create blocked state
811
+
812
+ ▶️ Running test suite: mechanism-2g-platform-ignore.test.js
813
+
814
+ [2g] Platform ignore patterns / Gitignore matching...
815
+ ✅ 2g. getIgnorePatterns returns ONLY Harness skills
816
+ ✅ 2g. isMatch returns true for parent folder match (Claude)
817
+ ✅ 2g. isMatch returns true for exact match of harness skill (Claude)
818
+ ✅ 2g. getIgnorePatterns returns ONLY Harness skills (Cursor)
819
+ ✅ 2g. isMatch returns true for parent folder match (Cursor)
820
+
821
+ ▶️ Running test suite: mechanism-2h-installer-manifest.test.js
822
+
823
+ [2h] Installer manifest and skill bookkeeping...
824
+ ✅ 2h. readManifest returns fallback structure when file does not exist
825
+ ✅ 2h. recordSkillInstall successfully records skill information
826
+ ✅ 2h. recordGeneratedSkill successfully records generated skill with triggers
827
+ ✅ 2h. removeGeneratedSkill removes generated skill correctly
828
+ ✅ 2h. isHarnessSkillDir detects Harness author correctly
829
+ ✅ 2h. isHarnessSkillDir detects author under metadata: (spec format)
830
+ ✅ 2h. isHarnessSkillDir returns false for foreign authors
831
+ ✅ 2h. removeSkillFromManifest cleans up or unlinks empty manifest
832
+ ⚠️ Preserved existing agent without overwrite: <workspace>\.mechanism-test-man
833
+ ifest-ws\agents\fable-orchestrator.md
834
+ ✅ Installed agent: test-agents/fable-verifier.md
835
+ ✅ Installed agent: test-agents/fable-worker-haiku.md
836
+ ✅ Installed agent: test-agents/fable-worker-sonnet.md
837
+ ✅ 2h. Fable agents are manifest tracked without overwriting a conflicting file
838
+ ✅ 2h. Removing Fable agents removes only tracked files and manifest state
839
+ ⚠️ Preserved existing agent without overwrite: <workspace>\.mechanism-test-man
840
+ ifest-ws\agents\fable-orchestrator.md
841
+ ⚠️ Preserved pre-existing identical agent without claiming ownership: <repo>-issue-
842
+ 297\.mechanism-test-manifest-ws\agents\fable-verifier.md
843
+ ✅ Installed agent: test-agents/fable-worker-haiku.md
844
+ ✅ Installed agent: test-agents/fable-worker-sonnet.md
845
+ ✅ 2h. Pre-existing identical agent is not claimed as Harness-owned
846
+ ✅ 2h. Pre-existing identical agent survives tracked-agent removal
847
+
848
+ ▶️ Running test suite: mechanism-2i-crlf-frontmatter.test.js
849
+ ✅ 2i-pre. Found enough SKILL.md fixtures in copied tree
850
+ ✅ 2i-a. consistency-check passes on all-CRLF tree
851
+ ✅ 2i-b. description-collision passes on all-CRLF tree
852
+ ✅ 2i-c. Negative control: planted CRLF duplicate FAILS collision check
853
+
854
+ [2i] CRLF frontmatter immunity: all checks passed.
855
+
856
+ ▶️ Running test suite: mechanism-2i-install-verification.test.js
857
+
858
+ [2i] Installed version and skill-tree verification...
859
+ ✅ 2i. matching version and tree pass
860
+ ✅ 2i. modified installed skill is reported stale
861
+ ✅ 2i. old package version is reported stale
862
+ ✅ 2i. legacy install without a manifest is reported stale
863
+
864
+ ▶️ Running test suite: mechanism-2j-behavioral-runner.test.js
865
+
866
+ [2j] Behavioral runner argv integrity...
867
+ ✅ 2j. opencode receives the complete prompt as one argv value
868
+ ✅ 2j. claude receives the complete prompt as one argv value
869
+ ✅ 2j. Claude baseline excludes user customizations
870
+ ✅ 2j. Claude treatment keeps only project/local customizations
871
+ ✅ 2j. Claude emits parseable verbose stream JSON
872
+ ✅ 2j. behavioral workspace builder accepts a valid nested fixture through the public execution contract
873
+ ✅ 2j. behavioral fixtures reject traversal for the expected boundary reason
874
+ ✅ 2j. fixture setup runs via Node in the generated workspace
875
+ ✅ 2j. setup failure is classified as fixture-error before any model session
876
+ ✅ 2j. worktree/submodule setup creates the real #243 topology before model execution
877
+ ✅ 2j. fixture errors remain distinct aggregate infrastructure failures
878
+
879
+ ▶️ Running test suite: mechanism-2j-fixture-entrypoints.test.js
880
+ Fixture entrypoints: paired baseline/treatment and plugin execute setup; failures skip installation/model and are excluded from scores.
881
+
882
+ ▶️ Running test suite: mechanism-2k-reference-check.test.js
883
+
884
+ [2k] Skill reference checker negative control...
885
+ ✅ 2k. dangling executable reference fails
886
+ ✅ 2k. existing executable reference passes
887
+ ✅ 2k. bare skill-local paths fail the explicit marker rule
888
+ ✅ 2k. explicit skill-local paths pass
889
+ ✅ 2k. <this-skill-dir>/ is authoritative and never falls back to the repo root
890
+ ✅ 2k. <this-skill-dir>/ resolves under the skill itself
891
+ ✅ 2k. <this-skill-dir>/../ reaches a sibling
892
+ ✅ 2k. unknown placeholder fails instead of being skipped
893
+ ✅ 2k. <workspace>/ paths are skipped, not resolved locally
894
+
895
+ ▶️ Running test suite: mechanism-2l-multi-agent-workspace.test.js
896
+
897
+ [2l] Multi-agent workspace integration...
898
+ ✅ 2l. skill contract names global runtime and resolved document writes
899
+ ✅ 2l. grill fallback names committable document paths
900
+ ✅ 2l. missing agency source is explicit and still scaffolds core workspace
901
+ ✅ 2l. root CONTEXT-MAP takes precedence for every document zone
902
+ ✅ 2l. CONTEXT-MAP common paths are case-insensitive on Windows
903
+ ✅ 2l. projectDocs paths are explicit and do not become inferred paths
904
+ ✅ 2l. existing repository document folders are inferred
905
+ ✅ 2l. legacy authored records migrate to the resolved repository path
906
+ ✅ 2l. migration conflicts preserve both existing files and legacy source
907
+ ✅ 2l. migration rejects duplicate destinations before copying or deleting records
908
+ ✅ 2l. document paths reject junction escapes from the workspace
909
+ ✅ 2l. legacy migration rejects a linked source before copying or deleting outside files
910
+ ✅ 2l. installed router template resolves paths into global runtime
911
+ ✅ 2l. an explicitly missing agency source fails clearly
912
+ ✅ 2l. fixture source selects metadata and records a verified handoff
913
+ ✅ 2l. repeated scaffold is idempotent
914
+ ✅ 2l. installed indexer runs independently and lists selected specialist
915
+ ✅ 2l. indexer uses explicit manifest/output paths without depth inference
916
+ ✅ 2l. indexer fails clearly when its manifest is missing
917
+ ✅ 2l. unsupported platform fails explicitly
918
+ ✅ 2l. duplicate agent names fail before writing output
919
+ ✅ 2l. empty division fails before writing output
920
+ ✅ 2l. unsafe division path is rejected before reading outside source
921
+ ✅ 2l. source revision drift requires an explicit override
922
+
923
+ ▶️ Running test suite: mechanism-2m-self-repo-guard.test.js
924
+
925
+ [2m] Self-repo guard identifies the harness repo by identity, not path...
926
+ ✅ 2m. isHarnessRepo() recognises a harness checkout
927
+ ✅ 2m. isHarnessRepo() rejects an unrelated project
928
+ ✅ 2m. isHarnessRepo() is false when package.json is absent
929
+ ✅ 2m. bootstrap run out-of-tree against a harness checkout advises no repair
930
+ ✅ 2m. bootstrap still advises repair for an unrelated project (guard is not blanket suppression)
931
+ ✅ 2m. self-heal reports an unmarked AGENTS.md as present-without-block, not missing
932
+
933
+ ▶️ Running test suite: mechanism-2n-opencode-plugin.test.js
934
+
935
+ [2n] opencode enforcement plugin: real hook API and firing behavior...
936
+ ✅ 2n. the repository inventory manifest exists
937
+ ✅ 2n. every standalone hook file on disk is declared in the inventory manifest
938
+ ✅ 2n. every declared inventory hook path exists on disk
939
+ ✅ 2n. no standalone hook is declared more than once
940
+ ✅ 2n. the plugin ships as a single self-contained module (installable by copying one file)
941
+ ✅ 2n. exports exactly the hooks it uses (tool.execute.before/after, event)
942
+ ✅ 2n. non-edit tools do not mark verification pending
943
+ ✅ 2n. an edit tool call marks verification pending
944
+ ✅ 2n. a passing verification on session.idle clears pending state
945
+ ✅ 2n. no follow-up prompt is sent when verification passes
946
+ ✅ 2n. two failures on the same signature: still allowed, not yet tripped
947
+ ✅ 2n. each failed verification sends exactly one follow-up prompt
948
+ ✅ 2n. 3rd failure on the same signature forces reflection
949
+ ✅ 2n. the forced-reflection prompt says to reflect
950
+ ✅ 2n. pending reflection blocks another code edit
951
+ ✅ 2n. pending reflection still allows read tools
952
+ ✅ 2n. the forced-reflection prompt names a verifiable artifact token
953
+ ✅ 2n. a directive outside the Decision section does not complete reflection
954
+ ✅ 2n. apply_patch reflection completes the lifecycle, resets the signature count, and persists lastReflection
955
+ ✅ 2n. repeated idle does not duplicate verification or follow-up prompts
956
+ ✅ 2n. apply_patch is allowed to write a pending reflection artifact
957
+ ✅ 2n. apply_patch output args complete a pending reflection
958
+ ✅ 2n. mixed apply_patch cannot bypass a pending reflection
959
+ ✅ 2n. first post-reflection failure starts again at count=1
960
+ ✅ 2n. no permanent post-reflection hard lock remains
961
+ ✅ 2n. a second session has an independent breaker stream
962
+ Harness: ignoring corrupt circuit-breaker state at "<workspace>\.mechanism-test-
963
+ opencode-home\.agents\harness-everything\workspaces\.mechanism-test-opencode-workspace-f1d77c78973a\state\sessions\corr
964
+ upt\circuit-breaker.json" and starting fresh.
965
+ ✅ 2n. corrupt breaker state fails open instead of becoming a cognitive lock
966
+ ✅ 2n. failed prompt delivery remains retryable
967
+ ✅ 2n. next idle retries the saved follow-up exactly once
968
+ ✅ 2n. session.created resets only the current session state
969
+ ✅ 2n. a reset session can edit again
970
+ ✅ 2n. dot and dotdot session IDs never escape the sessions root
971
+ ✅ 2n. resetting an unsafe session cannot delete an outside sentinel
972
+ ✅ 2n. resetting s1 leaves the independent s2 state
973
+ ✅ 2n. legacy flat state migrates into the workspace-keyed root
974
+ ✅ 2n. hook state stayed inside the redirected HOME
975
+
976
+ ▶️ Running test suite: mechanism-2o-state-home-isolation.test.js
977
+
978
+ [2o] State-home isolation: runtime state never scatters into cwd (issue #42)...
979
+ ✅ 2o. harness-state.js creates zero files in a non-git nested dir
980
+ ✅ 2o. ...and the session dir lands under the global state home instead
981
+ ✅ 2o. model-selector.js (zero-walk before the fix) creates zero files in a non-git nested dir
982
+ ✅ 2o. ...and its audit log lands under the same global state/ stream as harness-state.js
983
+ ✅ 2o. scaffold.js with no --workspace resolves to the repo root from a nested dir
984
+ ✅ 2o. ...and does not scatter runtime files into the repository or nested invocation directory
985
+ ✅ 2o. harness-state.js walks up to the repo root from a nested in-repo dir, not the nested dir
986
+ ✅ 2o. ...and its state dir is under the global home, not under the git fixture at all
987
+ ✅ 2o. pre-existing scattered state migrates into the new global location
988
+ ✅ 2o. ...and the old in-repo location is gone afterward
989
+
990
+ ▶️ Running test suite: mechanism-2p-installer-links.test.js
991
+
992
+ [2p] Canonical-store link/copy install + link-aware uninstall (issue #49)...
993
+ ✅ Installed skill: .claude/skills/tdd/ (junction -> ..\..\.agents\skills\tdd)
994
+ ✅ Installed skill: .cursor/skills/tdd/ (junction -> ..\..\.agents\skills\tdd)
995
+ ✅ 2p. both platform targets are real links (symlink/junction), not physical copies
996
+ ✅ 2p. the canonical copy itself is a physical directory, not a link
997
+ ✅ 2p. content is readable through the link and matches source
998
+ ✅ 2p. manifest records kind + canonicalPath for a linked entry
999
+ ✅ 2p. getInstalledSkills lists exactly the 2 linked entries, not the canonical dir as a 3rd
1000
+ ✅ 2p. removing one link deletes only that link, canonical copy survives (still referenced)
1001
+ ✅ 2p. removing the LAST link also removes the now-orphaned canonical copy
1002
+ ✅ Installed skill: .codex/skills/tdd/
1003
+ ✅ 2p. --copy mode installs a physical directory, not a link
1004
+ ✅ 2p. --copy mode manifest entry has no kind/canonicalPath
1005
+ ✅ 2p. --copy mode entry uninstalls cleanly
1006
+ ✅ Installed skill: .continue/skills/tdd/ (junction -> ..\..\.agents\skills\tdd)
1007
+ ✅ 2p. a dangling link is still detected as present (pathPresent) even though its target is gone
1008
+ ✅ 2p. getInstalledSkills still surfaces the dangling link for cleanup
1009
+ ✅ 2p. removeSkill cleans up the dangling link and its manifest row
1010
+ ✅ 2p. a pre-#49 manifest entry (no kind/canonicalPath) is still discovered
1011
+ ✅ 2p. a pre-#49 entry uninstalls cleanly with no canonical-store side effects
1012
+
1013
+ ▶️ Running test suite: mechanism-2q-installer-global-shared-store.test.js
1014
+
1015
+ [2q] Global scope: canonical store reuses the pre-existing shared ~/.agents/skills (issue #49)...
1016
+ ✅ 2q. global installer works from a non-git directory
1017
+ ✅ 2q. global canonical dir IS the pre-existing shared ~/.agents/skills path, not a new location
1018
+ ✅ Installed skill: ~/.agents/skills/tdd/
1019
+ ✅ Installed skill: ~/.claude/skills/tdd/ (junction -> ..\..\.agents\skills\tdd)
1020
+ ✅ 2q. the shared target (cursor/codex/continue/copilot/hermes stand-in) gets the PHYSICAL copy, not a link to itself
1021
+ ✅ 2q. Claude's separate global target links into the shared store instead of duplicating it
1022
+ ✅ 2q. the shared-store manifest entry records a plain copy (no kind/canonicalPath)
1023
+ ✅ 2q. removing Claude's link leaves the shared store intact (still independently in use)
1024
+ ✅ Installed skill: ~/.claude/skills/tdd/ (junction -> ..\..\.agents\skills\tdd)
1025
+ ✅ 2q. (setup) Claude re-linked to the shared store
1026
+ ✅ 2q. removing the shared store directly also sweeps Claude's now-dangling dependent link
1027
+
1028
+ ▶️ Running test suite: mechanism-2r-uninstall-flags.test.js
1029
+
1030
+ [2r] Uninstall CLI flag handling: no silent no-op, combined local+global (issue #48)...
1031
+ ✅ 2r. bare uninstall with no TTY exits non-zero instead of silently succeeding
1032
+ ✅ 2r. ...and prints a hint about the flags to pass
1033
+ ✅ 2r. ...and actually removed nothing (settings.json + skill both still present)
1034
+ ✅ 2r. `uninstall --local --skills` exits 0
1035
+ ✅ 2r. ...and actually removed the local skill
1036
+ ✅ 2r. `uninstall --local --global --skills` exits 0
1037
+ ✅ 2r. ...local skill removed
1038
+ ✅ 2r. ...AND global skill removed in the SAME run
1039
+ ✅ 2r. first run (--local only) exits 0
1040
+ ✅ 2r. ...and leaves the skill in place as requested
1041
+ ✅ 2r. second run (--skills) exits 0
1042
+ ✅ 2r. ...and this time removes the skill left over from the first run
1043
+
1044
+ ▶️ Running test suite: mechanism-2s-tdd-quality.test.js
1045
+
1046
+ [2s] TDD quality evidence gate (issue #58)...
1047
+ ✅ 2s. fixture catalog covers every required outcome
1048
+ ✅ 2s. complete profile-routed evidence passes with a 100 score
1049
+ ✅ 2s. report publishes the canonical weights and pass threshold
1050
+ ✅ 2s. integration score follows the canonical weighted formula exactly
1051
+ ✅ 2s. every requirement must declare its selected test profile
1052
+ ✅ 2s. only unit and integration profiles are accepted
1053
+ ✅ 2s. unit evidence may mark integration determinism N/A with a reason
1054
+ ✅ 2s. unit score renormalizes only the applicable canonical weights
1055
+ ✅ 2s. integration evidence cannot bypass repeated determinism checks
1056
+ ✅ 2s. report exposes raw counts, percentages, and mandatory gates
1057
+ ✅ 2s. missing an applicable input class is rejected
1058
+ ✅ 2s. incomplete output validation is rejected
1059
+ ✅ 2s. failed unexpected-input behavior is rejected
1060
+ ✅ 2s. untested and skipped error paths are rejected and visible
1061
+ ✅ 2s. unequal repeated integration output is rejected
1062
+ ✅ 2s. implementation/source mismatches fail
1063
+ ✅ 2s. source defects are reported separately without inventing a mismatch
1064
+ ✅ 2s. unresolved authoritative source conflicts fail
1065
+ ✅ 2s. inferred expectations remain explicit and traceable
1066
+ ✅ 2s. N/A declarations without a written reason are rejected
1067
+ ✅ 2s. reasoned N/A stays visible and does not lower applicable scores
1068
+ ✅ 2s. explicitly source-backed volatile fields may be normalized
1069
+ ✅ 2s. malformed evidence fails closed
1070
+ ✅ 2s. incomplete deterministic side-effect evidence is rejected
1071
+ ✅ 2s. duplicate requirement IDs are rejected
1072
+ ✅ 2s. CLI emits per-requirement human scores and structured JSON
1073
+ ✅ 2s. CLI returns exit 1 and writes structured JSON for a valid FAIL report
1074
+ ✅ 2s. CLI returns exit 2 for malformed JSON
1075
+ ✅ 2s. shipped PASS evidence is executable
1076
+
1077
+ ▶️ Running test suite: mechanism-2t-disclosure.test.js
1078
+
1079
+ [2t] Progressive-disclosure negative controls...
1080
+ ✅ 2t. complete disclosure surface passes
1081
+ ✅ 2t. missing workflow pairing fails
1082
+ ✅ 2t. missing Mermaid coverage fails
1083
+ ✅ 2t. empty Mermaid transition fails
1084
+ ✅ 2t. dashes inside a node label do not fake a transition
1085
+ ✅ 2t. wildcard Deep dive requires a matching file
1086
+ ✅ 2t. wildcard Deep dive resolves a matching file
1087
+ ✅ 2t. Deep dive traversal stays inside the package
1088
+ ✅ 2t. dangling Deep dive pointer fails
1089
+ ✅ 2t. Mermaid inside SKILL.md fails
1090
+ ✅ 2t. missing references directory fails
1091
+ ✅ 2t. orphan workflow document fails
1092
+
1093
+ ▶️ Running test suite: mechanism-2t-evidence-triage.test.js
1094
+ Behavioral evidence-triage regressions passed.
1095
+
1096
+ ▶️ Running test suite: mechanism-2t-issue-20.test.js
1097
+
1098
+ [2t] Issue #20 regression coverage...
1099
+ ✅ 2t. behavioral YAML parsing preserves block scalars under CRLF
1100
+ ✅ 2t. opencode plugin runner validate command exits successfully
1101
+ ✅ 2t. routing check gracefully skips when waza is unavailable
1102
+ ✅ 2t. description collision gate fails closed on malformed YAML
1103
+ ✅ 2t. negative controls execute real gates and pass
1104
+
1105
+ ▶️ Running test suite: mechanism-2t-platform-skill-targets.test.js
1106
+
1107
+ [2t] Platform-native skill targets + install ownership safety (issue #80)...
1108
+ ✅ 2t. codex local target matches the installer contract
1109
+ ✅ Installed skill: .agents/skills/tdd/
1110
+ ✅ 2t. codex local --copy writes a readable SKILL.md
1111
+ ✅ 2t. continue global target matches the installer contract
1112
+ ✅ Installed skill: ~/.continue/skills/tdd/
1113
+ ✅ 2t. continue global --copy writes a readable SKILL.md
1114
+ ✅ 2t. hermes local target matches the installer contract
1115
+ ✅ Installed skill: .agents/skills/tdd/
1116
+ ✅ 2t. hermes local --copy writes a readable SKILL.md
1117
+ ✅ 2t. hermes global target matches the installer contract
1118
+ ✅ Installed skill: ~/.hermes/skills/tdd/
1119
+ ✅ 2t. hermes global --copy writes a readable SKILL.md
1120
+ ✅ 2t. Continue native global manifest is discoverable
1121
+ ✅ 2t. Hermes native global manifest is discoverable
1122
+ ✅ 2t. native global skill scopes use the protected global sentinel
1123
+ ℹ️ Hermes global skills install to ~/.hermes/skills/. Project advisory context remains project-scoped via .hermes.md.
1124
+ ✅ 2t. Hermes global install writes an owned detection marker
1125
+ ✅ 2t. Hermes global uninstall removes its detection marker
1126
+ ✅ 2t. malformed Claude settings fail closed
1127
+ ✅ 2t. malformed Claude settings remain byte-for-byte unchanged
1128
+ ✅ 2t. Continue refuses to overwrite a user-owned harness.md
1129
+ ✅ 2t. Continue collision leaves original bytes unchanged
1130
+ ✅ 2t. copilot global install refuses a user-owned fixed prompt file
1131
+ ✅ 2t. copilot global uninstall preserves non-Harness file
1132
+ ✅ 2t. codex global install refuses a user-owned fixed prompt file
1133
+ ✅ 2t. codex global uninstall preserves non-Harness file
1134
+
1135
+ ▶️ Running test suite: mechanism-2t-transcript-parser.test.js
1136
+
1137
+ [2t] Structured behavioral transcript parser...
1138
+ ✅ 2t. Claude stream is parsed
1139
+ ✅ 2t. Claude trace keeps assistant text and tool input
1140
+ ✅ 2t. Claude trace excludes tool output
1141
+ ✅ 2t. Claude preserves result metadata
1142
+ ✅ 2t. Claude correlates completed tool evidence
1143
+ ✅ 2t. Permission denial is evidence
1144
+ ✅ 2t. Denial grader passes only denied evidence
1145
+ ✅ 2t. Oral command mention has no attempted tool
1146
+ ✅ 2t. Oral command prose cannot satisfy trace execution evidence
1147
+ ✅ 2t. Existing opencode JSONL remains supported
1148
+ ✅ 2t. Duplicate opencode tool events are one call
1149
+ ✅ 2t. Opencode tool output never enters trace
1150
+ ✅ 2t. Explicit IDs coalesce only by their ID
1151
+ ✅ 2t. Out-of-order result and call events coalesce by ID
1152
+ ✅ 2t. Output text cannot masquerade as permission denial
1153
+ ✅ 2t. Truncated CRLF stream is inconclusive
1154
+ ✅ 2t. Partial execution evidence is inconclusive
1155
+ ✅ 2t. Legacy JSON keeps readable final text
1156
+ ✅ 2t. Legacy JSON does not claim tool visibility
1157
+ ✅ 2t. Unavailable evidence is inconclusive
1158
+ ✅ 2t. Auto detection preserves legacy JSON
1159
+ ✅ 2t. Legacy final prose cannot produce a definitive trace grade
1160
+ ✅ 2t. Claude user-event text is not agent trace
1161
+ ✅ 2t. {"type":"tool_executed","command":"npm test"} does not match another completed command
1162
+ ✅ 2t. {"type":"tool_executed","command":"rm -rf /"} does not match another completed command
1163
+ ✅ 2t. {"type":"tool_executed","tool":"npm test"} does not match another completed command
1164
+ ✅ 2t. Command targets reject extra arguments
1165
+ ✅ 2t. top-level tool calls and results remain structured evidence
1166
+ ✅ 2t. structured trace preserves tool-before-text event order
1167
+ ✅ 2t. bare patch filenames count as edits for after_edit grading
1168
+ ✅ 2t. runner trace keeps bare patch, bash, then final text order
1169
+ ✅ 2t. Tool input qualifiers do not match unrelated TodoWrite state
1170
+ ✅ 2t. Behavioral cases do not retain the obsolete #52 trace limitation
1171
+ ✅ 2t. Non-definitive arm cannot produce effectiveness
1172
+ ✅ 2t. Session errors cannot produce effectiveness
1173
+ ✅ 2t. Inconclusive pairs are excluded from effectiveness aggregates
1174
+ ✅ 2t. Missing tool counts preserve a null delta
1175
+
1176
+ ▶️ Running test suite: mechanism-2t-workspace-identity.test.js
1177
+
1178
+ [2t] Session-stable workspace identity and standalone fable audit...
1179
+ PASS SessionStart binds the repository root
1180
+ PASS same session stays bound after entering a nested directory
1181
+ PASS same session stays bound after entering a scratch directory
1182
+ PASS same session stays bound after entering a nested repository
1183
+ PASS explicit workspace context outranks inherited workspace environment
1184
+ PASS resume SessionStart keeps the existing binding
1185
+ PASS explicit identity reset permits a deliberate rebind
1186
+ PASS identity reset persists the new binding for later cwd changes
1187
+ PASS host/session identity binds the first host workspace
1188
+ PASS same host/session stays bound after a nested-repository cwd change
1189
+ PASS hostless follow-up reuses an unambiguous host/session binding
1190
+ PASS different hosts may bind the same session id independently
1191
+ PASS ambiguous hostless identity falls back to explicit context
1192
+ PASS hooks can resolve state from a bound session after cwd changes
1193
+ PASS standalone fable audit runs after install
1194
+ PASS standalone fable audit follows its session binding across cwd changes
1195
+ PASS migration keeps conflicting sources available for recovery
1196
+ PASS migration merges independent platform sources even when one conflicts
1197
+ PASS migration preserves unsupported symlink entries
1198
+ PASS migration retry completes after the conflict is resolved
1199
+
1200
+ ▶️ Running test suite: mechanism-2u-issue-42-regressions.test.js
1201
+
1202
+ [2u] Issue #42 adversarial regressions...
1203
+ PASS 2u. no-context non-git calls do not adopt either invocation directory
1204
+ PASS 2u. no-context non-git calls use one stable unbound workspace key
1205
+ PASS 2u. scaffold refuses to infer a workspace outside git instead of writing locally
1206
+ PASS 2u. evaluate refuses to write a report without a resolved workspace
1207
+ PASS 2u. persist-memory refuses to write project memory without a resolved workspace
1208
+ PASS 2u. eval-harness/scripts/evaluate.js has no bare process.cwd fallback
1209
+ PASS 2u. multi-agent-workspace/scripts/scaffold.js has no bare process.cwd fallback
1210
+ PASS 2u. self-evolve/scripts/persist-memory.js has no bare process.cwd fallback
1211
+ PASS 2u. self-evolve/scripts/register-dynamic-skill.js has no bare process.cwd fallback
1212
+ PASS 2u. security-review/scripts/audit-secrets.js has no bare process.cwd fallback
1213
+ PASS 2u. to-spec/scripts/check-project-docs.js has no bare process.cwd fallback
1214
+ PASS 2u. find-skills reads its cache from HARNESS_STATE_HOME
1215
+ PASS 2u. find-skills does not create the legacy OS-temp cache
1216
+ PASS 2u. standalone fable calls from unrelated non-git dirs share one unbound audit stream
1217
+ PASS 2u. git fixture initialized for migration checks
1218
+ PASS 2u. legacy .harness/multi-agent state moves under the global workspace state
1219
+ PASS 2u. Windows case variants resolve to one workspace key
1220
+ PASS 2u. opencode merges flat legacy state even when the target directory exists
1221
+ All issue-42 regression checks passed.
1222
+
1223
+ ▶️ Running test suite: mechanism-2u-issue-44.test.js
1224
+
1225
+ [2u] Issue #44 release metadata regression checks...
1226
+ ✅ 2u. fable-mode carries stable release metadata
1227
+ ✅ 2u. fable-mode/execution-guardrails inherits the parent version
1228
+ ✅ 2u. fable-mode/fable-haiku inherits the parent version
1229
+ ✅ 2u. fable-mode/fable-opus inherits the parent version
1230
+ ✅ 2u. fable-mode/fable-sonnet inherits the parent version
1231
+ ✅ 2u. todo-driven-workflow carries stable release metadata
1232
+ ✅ 2u. changelog records the Issue #44 disclosure policy
1233
+
1234
+ ▶️ Running test suite: mechanism-2v-verifier-boundaries.test.js
1235
+
1236
+ [2v] Verifier boundary contracts...
1237
+ ✅ 2v. a normal nested path is inside its physical boundary
1238
+ ✅ 2v. lexical parent traversal is rejected
1239
+ ✅ 2v. a junction/symlink inside the boundary cannot escape it
1240
+ ✅ 2v. a missing leaf reached through a link is rejected before writing
1241
+ ✅ 2v. a link component is rejected even when its target stays inside the boundary
1242
+ ✅ 2v. Windows path casing does not change containment
1243
+ ✅ 2v. exact commands match after harmless whitespace normalization
1244
+ ✅ 2v. invalid boundary arguments use a stable error code
1245
+ ✅ 2v. a command containing the expected text is not an exact match
1246
+ ✅ 2v. extra command arguments are not silently accepted
1247
+ ✅ 2v. argv commands compare each argument exactly
1248
+ ✅ 2v. a real node script invocation can use a basename expectation
1249
+ ✅ 2v. a non-launcher mention cannot satisfy a script expectation
1250
+ ✅ 2v. patch parser returns every touched path
1251
+ ✅ 2v. a multi-file patch is authorized only when every path is allowed
1252
+ ✅ 2v. one unrelated path rejects the whole patch
1253
+ ✅ 2v. traversal paths are never authorized even when allowlisted
1254
+
1255
+ ▶️ Running test suite: mechanism-2w-platform-compatibility.test.js
1256
+ OpenAI skill bundle: <temp>\harness-2w-submission-35768.zip
1257
+ Files: 196
1258
+ SHA256: fc897c3f4e0d80701f2d4485a156f6022845279475600ade452ec228593ebac9
1259
+ Manifest: <temp>\harness-2w-submission-35768.manifest.json
1260
+ Platform compatibility verified: official-source matrix, installer targets, package manifests, and public bundle boundaries.
1261
+
1262
+ ▶️ Running test suite: mechanism-2x-release-automation.test.js
1263
+ warning: in the working copy of '.claude-plugin/marketplace.json', LF will be replaced by CRLF the next time Git touche
1264
+ s it
1265
+ warning: in the working copy of '.claude-plugin/plugin.json', LF will be replaced by CRLF the next time Git touches it
1266
+ warning: in the working copy of 'alpha/SKILL.md', LF will be replaced by CRLF the next time Git touches it
1267
+ warning: in the working copy of 'alpha/nested/SKILL.md', LF will be replaced by CRLF the next time Git touches it
1268
+ warning: in the working copy of 'beta/SKILL.md', LF will be replaced by CRLF the next time Git touches it
1269
+ warning: in the working copy of 'opencode-plugin/plugin.json', LF will be replaced by CRLF the next time Git touches it
1270
+ warning: in the working copy of 'package-lock.json', LF will be replaced by CRLF the next time Git touches it
1271
+ warning: in the working copy of 'package.json', LF will be replaced by CRLF the next time Git touches it
1272
+ warning: in the working copy of 'plugins/harness-everything/.codex-plugin/plugin.json', LF will be replaced by CRLF the
1273
+ next time Git touches it
1274
+ warning: in the working copy of 'plugins/harness-everything/plugin.json', LF will be replaced by CRLF the next time Git
1275
+ touches it
1276
+ warning: in the working copy of '.claude-plugin/marketplace.json', LF will be replaced by CRLF the next time Git touche
1277
+ s it
1278
+ warning: in the working copy of '.claude-plugin/plugin.json', LF will be replaced by CRLF the next time Git touches it
1279
+ warning: in the working copy of 'alpha/SKILL.md', LF will be replaced by CRLF the next time Git touches it
1280
+ warning: in the working copy of 'alpha/nested/SKILL.md', LF will be replaced by CRLF the next time Git touches it
1281
+ warning: in the working copy of 'beta/SKILL.md', LF will be replaced by CRLF the next time Git touches it
1282
+ warning: in the working copy of 'opencode-plugin/plugin.json', LF will be replaced by CRLF the next time Git touches it
1283
+ warning: in the working copy of 'package-lock.json', LF will be replaced by CRLF the next time Git touches it
1284
+ warning: in the working copy of 'package.json', LF will be replaced by CRLF the next time Git touches it
1285
+ warning: in the working copy of 'plugins/harness-everything/.codex-plugin/plugin.json', LF will be replaced by CRLF the
1286
+ next time Git touches it
1287
+ warning: in the working copy of 'plugins/harness-everything/plugin.json', LF will be replaced by CRLF the next time Git
1288
+ touches it
1289
+ warning: in the working copy of 'alpha/behavior.txt', LF will be replaced by CRLF the next time Git touches it
1290
+ Release automation contract verified: stable SemVer rules, full manifest lockstep, changed-skill versioning, drift detection, idempotency, and fail-before-write behavior.
1291
+
1292
+ ▶️ Running test suite: mechanism-2x-release-commit-message.test.js
1293
+ Release commit contract verified: compact message passes commitlint and legacy release-note embedding is rejected.
1294
+
1295
+ ▶️ Running test suite: mechanism-2y-release-tooling-compat.test.js
1296
+ Release tooling compatibility verified: generator 14 is paired with conventionalcommits 9.x, and the v10 regression is rejected.
1297
+
1298
+ ▶️ Running test suite: mechanism-2z-claude-plugin-manifest.test.js
1299
+ PASS: Claude plugin manifest, marketplace, 26 skills, 4 agents, and 29 hook commands are internally consistent.
1300
+
1301
+ ▶️ Running test suite: mechanism-30-opencode-plugin-loadability.test.js
1302
+ ✅ 30. real install statement produces a byte-identical .js/.ts-discoverable file; non-allowlisted filenames and content mutations fail
1303
+
1304
+ ▶️ Running test suite: mechanism-31-opencode-hardlock-evidence.test.js
1305
+
1306
+ [31] opencode live Rule-of-3 reflection evidence contract...
1307
+ ✅ 31. complete attributed reflection/re-trip evidence passes
1308
+ ✅ 31. evidence fails when the installed plugin hash differs from the canonical source hash
1309
+ ✅ 31. reflection gate fails if the blocked marker reached the filesystem
1310
+ ✅ 31. current evidence rejects the retired hardLock field
1311
+ ✅ 31. evidence fails without a second Rule-of-3 reflection request
1312
+ ✅ 31. evidence fails when no structured edit was attempted during reflectionPending
1313
+ ✅ 31. evidence fails without the preserved first reflection artifact
1314
+
1315
+ ▶️ Running test suite: mechanism-32-paired-benchmark.test.js
1316
+
1317
+ [32] paired behavioral benchmark contract...
1318
+ ✅ 32. a paired study cannot start without a predeclared minimum effect
1319
+ ✅ 32. an explicit model is required so both arms share the same model contract
1320
+ ✅ 32. plugin-enforcement is not generalized beyond the currently attributed OpenCode surface
1321
+ ✅ 32. skill-text control contains no Harness skill or plugin
1322
+ ✅ 32. skill-text treatment installs the named skill without installing hooks/plugin enforcement
1323
+ ✅ 32. plugin experiment holds skill text constant and changes only enforcement installation
1324
+ ✅ 32. lesson-retrieval case requires a valid accepted-lesson fixture contract
1325
+ ✅ 32. lesson-retrieval is an explicit paired effect type rather than being disguised as skill-text
1326
+ ✅ 32. lesson memory store stays outside both agent workspaces
1327
+ ✅ 32. both arms execute the same scoped retrieval while only treatment receives the context
1328
+ ✅ 32. attributed lesson-retrieval pair is includable only with constant skill text and identical retrieval set
1329
+ ✅ 32. mismatched memory retrieval set excludes the pair instead of counting it as lesson effect
1330
+ ✅ 32. treatment without the untrusted-memory boundary is excluded from causal evidence
1331
+ ✅ 32. changed lesson exposure text invalidates the predeclared pair contract
1332
+ ✅ 32. malformed lesson provenance is rejected before any live model call
1333
+ ✅ 32. a correctly isolated skill-text pair is includable
1334
+ ✅ 32. actual model mismatch excludes the pair instead of counting it as behavior
1335
+ ✅ 32. plugin pair is includable only when preflight, hash, constant skill text, and per-arm attribution agree
1336
+ ✅ 32. missing live plugin attribution is infrastructure/inconclusive, not a behavioral result
1337
+ ✅ 32. summary excludes infrastructure outcomes and reports paired transitions
1338
+ ✅ 32. paired effect is derived from within-pair transitions and carries a deterministic uncertainty interval
1339
+ ✅ 32. repeated runs remain separate samples and expose per-case variance instead of overwriting
1340
+ ✅ 32. cost and execution overhead are reported separately from correctness
1341
+ ✅ 32. exact discordant-pair statistic is available without turning it into an unpaired pass-rate verdict
1342
+ ✅ 32. the predeclared practical threshold is retained in the summary decision contract
1343
+
1344
+ ▶️ Running test suite: mechanism-33-issues-205-207.test.js
1345
+ PASS #205 docker verifier resolves one canonical session state directory
1346
+ PASS #205 docker verifier does not seed or read the legacy repo-relative state directory
1347
+ PASS #205 docker verifier routes all state checks through STATE_DIR
1348
+ PASS #206 architecture keeps loop-awareness numeric guidance explicitly non-mandatory
1349
+ PASS #206 architecture does not describe retired loop budgets as enforcement
1350
+ PASS #207 commitlint aligns subject-case with repository Conventional Commit history
1351
+ PASS #207 representative lowercase repository subject passes commitlint
1352
+
1353
+ PASS: issues #205-#207 regression mechanism (0 failures)
1354
+
1355
+ ▶️ Running test suite: mechanism-34-observations.test.js
1356
+ PASS label line parses and validates
1357
+ PASS redaction removes email addresses and home paths
1358
+ PASS commands are classified without keeping their text
1359
+ PASS detailed appends distinguish duplicates and bounded lock timeouts
1360
+ PASS tier comes from the self-report, owner review overrides, behavior only flags contradictions
1361
+ PASS Claude Code turn: prompt, behavior and label are recorded
1362
+ PASS second turn keeps the previous final message; missing label is recorded, not fatal
1363
+ PASS Codex turn: final message from the rollout transcript, apply_patch counted
1364
+ PASS Claude transcript fallback when the Stop payload has no message
1365
+ PASS opt-out writes nothing; malformed input fails open
1366
+ PASS exporter derives labels, splits by time and reports agreement
1367
+ PASS exporter can select post-cutoff rows with self-reported labels for training
1368
+ PASS review page lists disagreements blind and owner decisions override
1369
+ PASS transcript fallback reads only the current turn
1370
+ PASS concurrent tool hooks keep every event
1371
+ PASS expired text is neither exported nor reviewed, and old session text is dropped
1372
+ PASS expiring a record keeps a shared text blob that an active record still uses
1373
+ PASS failed tool attempts are not counted as writes or loads
1374
+ PASS owner review overrides context dependence, explicit false included
1375
+ PASS resuming an expired unfinished turn does not renew its text
1376
+ PASS resuming an unfinished turn inside the window keeps its text and original deadline
1377
+ PASS module and runner prefixes are classified by what they run
1378
+ PASS the label contract is the router output's last section and covers every turn
1379
+ PASS router/self agreement counts only turns where the router chose a tier
1380
+ PASS label slips seen live: unknown intents dropped, unterminated final line accepted
1381
+ PASS Codex router hook returns its contract as JSON additionalContext
1382
+ PASS hooks are registered for both hosts and the contract asks for the label line
1383
+ system-one observation tests passed
1384
+
1385
+ ▶️ Running test suite: mechanism-34-worktree-submodule-reachability.test.js
1386
+ Worktree submodule reachability: detached, named-unpublished, uninitialized, and unmerged gitlinks fail safely; primary/remote reachability and no-submodule controls pass.
1387
+
1388
+ ▶️ Running test suite: mechanism-35-verification-contract.test.js
1389
+ Issue #242 verification contract: taxonomy, discovery, execution safety, multi-root scope, hook recognition, and Stop evidence verified.
1390
+
1391
+ ▶️ Running test suite: mechanism-packaging-bytecode.test.js
1392
+ ✔ PK-01 skills installer copy and submission file walk skip Python bytecode (7.019ms)
1393
+ ✔ PK-02 plugin sync does not mirror bytecode from the canonical tree (355.8109ms)
1394
+ ✔ PK-03 Python tests do not write bytecode into the source tree (3152.099ms)
1395
+ ℹ tests 3
1396
+ ℹ suites 0
1397
+ ℹ pass 3
1398
+ ℹ fail 0
1399
+ ℹ cancelled 0
1400
+ ℹ skipped 0
1401
+ ℹ todo 0
1402
+ ℹ duration_ms 3520.2064
1403
+
1404
+ ▶️ Running test suite: mechanism-system-one-collect.test.js
1405
+ ✔ S1-C101 each source yields only owner-typed text (22.9437ms)
1406
+ ✔ S1-C106 only interactive Codex sessions count, and VS Code terminal notifications are dropped (14.7559ms)
1407
+ ✔ S1-C102 filters, redaction and deduplication (0.4686ms)
1408
+ ✔ S1-C103 prompts that near-duplicate a holdout prompt are dropped (0.8419ms)
1409
+ ✔ S1-C107 every holdout guards against leakage: the defaults cover the tier and intent holdouts, and --holdout repeats (104.8505ms)
1410
+ ✔ S1-C104 splits are stable per family and near 15% validation (7.8813ms)
1411
+ ✔ S1-C105 CLI writes a deterministic local dataset outside the repository (424.5865ms)
1412
+ ℹ tests 7
1413
+ ℹ suites 0
1414
+ ℹ pass 7
1415
+ ℹ fail 0
1416
+ ℹ cancelled 0
1417
+ ℹ skipped 0
1418
+ ℹ todo 0
1419
+ ℹ duration_ms 581.5028
1420
+
1421
+ ▶️ Running test suite: mechanism-system-one-contract.test.js
1422
+ ✔ S1-C01 complete response, no mutation and repeatability (2.6997ms)
1423
+ ✔ S1-C02 rejected input partitions and byte boundaries (9.7305ms)
1424
+ ✔ S1-C03 complete output validation and no raw-data leakage (1.2884ms)
1425
+ ✔ S1-C04 abstention and policy boundaries (0.3538ms)
1426
+ ℹ tests 4
1427
+ ℹ suites 0
1428
+ ℹ pass 4
1429
+ ℹ fail 0
1430
+ ℹ cancelled 0
1431
+ ℹ skipped 0
1432
+ ℹ todo 0
1433
+ ℹ duration_ms 18.9672
1434
+
1435
+ ▶️ Running test suite: mechanism-system-one-corpus.test.js
1436
+ ✔ S1-K01 an unreviewed draft assembles into a valid corpus that cannot pass the review gate (3.6207ms)
1437
+ ✔ S1-K02 accept, relabel and reject apply exactly; the reviewer gold wins (0.4451ms)
1438
+ ✔ S1-K03 a decision for changed prompt text is stale and never counts as review (0.2126ms)
1439
+ ✔ S1-K04 malformed reviews are rejected instead of silently applied (0.5171ms)
1440
+ ✔ S1-K05 draft validation: exact fields, unique ids and prompts, known sources, no private data (0.3205ms)
1441
+ ✔ S1-K06 the gate passes only with >=200 reviewed cases and >=50 per language (12.898ms)
1442
+ ✔ S1-K07 CLI builds a corpus file and fails closed on invalid input (484.7251ms)
1443
+ ✔ S1-K08 the committed holdout draft meets size, language, class and length requirements (6.0282ms)
1444
+ ✔ S1-K09 the committed reviewed holdout is reproducible from owner decisions and meets the gate (7.7689ms)
1445
+ ℹ tests 9
1446
+ ℹ suites 0
1447
+ ℹ pass 9
1448
+ ℹ fail 0
1449
+ ℹ cancelled 0
1450
+ ℹ skipped 0
1451
+ ℹ todo 0
1452
+ ℹ duration_ms 521.5473
1453
+
1454
+ ▶️ Running test suite: mechanism-system-one-evaluation.test.js
1455
+ ✔ S1-E01 exact paired metrics, no promotion from fixtures or cold timing (6.2069ms)
1456
+ ✔ S1-E02 corpus completeness, family leakage and no duplicated prompts (0.9818ms)
1457
+ ✔ S1-E03 missing/extra/invalid predictions cannot silently improve scores (2.3526ms)
1458
+ ✔ S1-E06 repeatability compares the full score vector, not only top-2 summaries (0.5499ms)
1459
+ ✔ S1-E04 zero coverage and wrong accepted predictions fail quality gates (0.9481ms)
1460
+ ✔ S1-E05 real evaluation CLI repeats with only documented timing volatility (311.7467ms)
1461
+ ✔ S1-E07 source provenance gate requires the pinned cua_s1 revision (1.5026ms)
1462
+ ✔ S1-E09 an ngram source passes provenance only with a verified artifact (0.5333ms)
1463
+ ✔ S1-E08 the accepted-precision gate is the owner advisory 85% (1.901ms)
1464
+ ℹ tests 9
1465
+ ℹ suites 0
1466
+ ℹ pass 9
1467
+ ℹ fail 0
1468
+ ℹ cancelled 0
1469
+ ℹ skipped 0
1470
+ ℹ todo 0
1471
+ ℹ duration_ms 333.8541
1472
+
1473
+ ▶️ Running test suite: mechanism-system-one-install.test.js
1474
+ ✔ S1-I01 pins stay consistent with the provider contract (2.0135ms)
1475
+ ✔ S1-I02 interpreter selection accepts only the upstream-supported Python range (1.5432ms)
1476
+ ✔ S1-I03 argument parsing is explicit and rejects ambiguous input (0.8766ms)
1477
+ ✔ S1-I04 downloads are verified before an atomic write; a valid file is reused (8.5618ms)
1478
+ ✔ S1-I06 child command output goes to stderr so stdout stays machine-readable JSON (648.4374ms)
1479
+ ✔ S1-I05 dry run prints the pinned plan and changes nothing, repeatably (324.3241ms)
1480
+ ℹ tests 6
1481
+ ℹ suites 0
1482
+ ℹ pass 6
1483
+ ℹ fail 0
1484
+ ℹ cancelled 0
1485
+ ℹ skipped 0
1486
+ ℹ todo 0
1487
+ ℹ duration_ms 994.049
1488
+
1489
+ ▶️ Running test suite: mechanism-system-one-intent.test.js
1490
+ ✔ S1-I01 the intent catalog is the owner's fixed list, frozen, beside the tier catalog (11.8115ms)
1491
+ ✔ S1-I02 the evaluator scores an intent corpus over the intent labels only (3.8242ms)
1492
+ ✔ S1-I03 the corpus assembler builds an intent holdout from its own draft and reviews (2.4715ms)
1493
+ ✔ S1-I04 the labeler labels intent from the intent document with the intent labels only (1.7338ms)
1494
+ ✔ S1-I05 graded agreement follows the owner's grades and is symmetric (0.2448ms)
1495
+ ✔ S1-I07 intent calibration uses graded precision and picks a secondary threshold on validation (10.6994ms)
1496
+ ﹣ S1-I08 the ngram trainer trains the intent stage with soft targets (skipped without torch) (125.803ms) # torch not installed
1497
+ ✔ S1-I09 the manifest carries an optional secondary threshold that decide never sees (1.1056ms)
1498
+ ✔ S1-I10 the evaluator grades accepted intent predictions and reports family consistency (0.7972ms)
1499
+ ✔ S1-I11 the evaluation CLI scores an intent holdout with a majority-class baseline (119.9486ms)
1500
+ ✔ S1-I06 family consistency counts families of two or more that share one primary (0.2421ms)
1501
+ ✔ S1-I12 the labeler asks for tie-free relevance scores and derives the bands from them (1.9619ms)
1502
+ ﹣ S1-I13 the ngram trainer learns scored intent labels as per-intent targets (skipped without torch) (86.0105ms) # torch not installed
1503
+ ✔ S1-I14 low-scoring labels go to a second model, which replaces them unless it fails (1.1066ms)
1504
+ ✔ S1-I15 scaled labels read the scores relative to the top, and only lagging margins escalate (0.7984ms)
1505
+ ℹ tests 15
1506
+ ℹ suites 0
1507
+ ℹ pass 13
1508
+ ℹ fail 0
1509
+ ℹ cancelled 0
1510
+ ℹ skipped 2
1511
+ ℹ todo 0
1512
+ ℹ duration_ms 376.9297
1513
+
1514
+ ▶️ Running test suite: mechanism-system-one-label.test.js
1515
+ ✔ S1-L01 the instructions carry the owner rules from the corpus document and every item (1.0422ms)
1516
+ ✔ S1-L02 a batch reply must label every index exactly once with a known label (0.6082ms)
1517
+ ✔ S1-L03 invalid replies are retried once, persistent failures are recorded, never partially accepted, and runs resume (1.9701ms)
1518
+ ✔ S1-L06 the codex engine runs one stateless exec per batch and reads the schema-checked last message (163.7419ms)
1519
+ ✔ S1-L04 holdout agreement reports overall, per-class recall and confusion (0.6384ms)
1520
+ ✔ S1-L05 CLI labels through the configured command, resumes, checks the holdout and refuses repository output (1153.0543ms)
1521
+ ℹ tests 6
1522
+ ℹ suites 0
1523
+ ℹ pass 6
1524
+ ℹ fail 0
1525
+ ℹ cancelled 0
1526
+ ℹ skipped 0
1527
+ ℹ todo 0
1528
+ ℹ duration_ms 1325.2462
1529
+
1530
+ ▶️ Running test suite: mechanism-system-one-laya.test.js
1531
+ ✔ S1-L01 the Laya dense labeler contract holds without model weights (120.251ms)
1532
+ ✔ S1-L02 the Laya calibration contract holds without model weights (103.9136ms)
1533
+ ✔ S1-L03 the Laya soft-target exporter contract holds without model weights (128.6381ms)
1534
+ ✔ S1-L04 the single-device trainer contract holds (torch parts skip without torch) (86.7378ms)
1535
+ ✔ S1-L05 the fine-tuned provider bridge contract holds without model weights (128.7217ms)
1536
+ ✔ S1-L06 the per-intent Bernoulli contract holds without model weights (97.5124ms)
1537
+ ℹ tests 6
1538
+ ℹ suites 0
1539
+ ℹ pass 6
1540
+ ℹ fail 0
1541
+ ℹ cancelled 0
1542
+ ℹ skipped 0
1543
+ ℹ todo 0
1544
+ ℹ duration_ms 670.0284
1545
+
1546
+ ▶️ Running test suite: mechanism-system-one-ngram.test.js
1547
+ ✔ S1-N01 fnv1a32 matches the published test vectors (0.5979ms)
1548
+ ✔ S1-N02 featurization follows the pinned rules (1.8218ms)
1549
+ ✔ S1-N03 the Python trainer and the Node provider produce identical features (72.0171ms)
1550
+ ✔ S1-N04 the ngram transport scores in process with the Phase 0 response shape (5.7457ms)
1551
+ ✔ S1-N05 any artifact mismatch is provider-config and never scores (15.7124ms)
1552
+ ✔ S1-N06 manifest rules: ngram needs a .bin and no python; other transports still need python (1.9854ms)
1553
+ ✔ S1-N08 the evaluator records ngram samples warm and verifies the artifact as provenance (219.1155ms)
1554
+ ﹣ S1-N07 a real ngram training run produces an artifact the provider scores (skipped without torch) (61.6225ms) # torch not installed
1555
+ ℹ tests 8
1556
+ ℹ suites 0
1557
+ ℹ pass 7
1558
+ ℹ fail 0
1559
+ ℹ cancelled 0
1560
+ ℹ skipped 1
1561
+ ℹ todo 0
1562
+ ℹ duration_ms 384.4157
1563
+
1564
+ ▶️ Running test suite: mechanism-system-one-provider.test.js
1565
+ ✔ S1-P01 real IPC exact input/output repeated in clean child processes (130.7794ms)
1566
+ ✔ S1-P02 unavailable, timeout, output bounds, malformed output and repeatability (1761.0999ms)
1567
+ ✔ S1-P03 trusted manifest validation (1.4556ms)
1568
+ ✔ S1-P04 Python artifact validation and byte-limit rejection without ML dependency (3391.8991ms)
1569
+ ✔ S1-P05 runtime/source provenance is recorded, and a missing or mismatched revision stays visible (1067.6415ms)
1570
+ ℹ tests 5
1571
+ ℹ suites 0
1572
+ ℹ pass 5
1573
+ ℹ fail 0
1574
+ ℹ cancelled 0
1575
+ ℹ skipped 0
1576
+ ℹ todo 0
1577
+ ℹ duration_ms 6356.9945
1578
+
1579
+ ▶️ Running test suite: mechanism-system-one-relevance.test.js
1580
+ ✔ S1-R01 independent intents fire on their own thresholds (1.3365ms)
1581
+ ✔ S1-R02 silence abstains and unclassified never fires (0.2559ms)
1582
+ ✔ S1-R03 the simplex rule does not apply to relevance vectors (0.3272ms)
1583
+ ✔ S1-R04 malformed relevance inputs fail closed (1.1401ms)
1584
+ ✔ S1-R05 relevance grading reports micro, macro, cardinality and abstain (0.5568ms)
1585
+ ✔ S1-R06 relevance gates follow the reviewed promotion contract (0.4182ms)
1586
+ ℹ tests 6
1587
+ ℹ suites 0
1588
+ ℹ pass 6
1589
+ ℹ fail 0
1590
+ ℹ cancelled 0
1591
+ ℹ skipped 0
1592
+ ℹ todo 0
1593
+ ℹ duration_ms 7.7579
1594
+
1595
+ ▶️ Running test suite: mechanism-system-one-resident.test.js
1596
+ ✔ S1-RS00 Windows Node 23 and 24 shutdown compatibility boundary (1.3333ms)
1597
+ ✔ S1-RS01 manifest transport fields and digest-bound file names (3.652ms)
1598
+ ✔ S1-RS02 cold start never blocks, spawns once, then serves warm repeatable scores (1150.328ms)
1599
+ ✔ S1-RS03 stale state is removed and replaced; a wrong token is rejected without respawn (1324.0113ms)
1600
+ ✔ S1-RS04 a slow server times out within the deadline and is not respawned (2084.4033ms)
1601
+ ✔ S1-RS05 startup failure is visible and throttled instead of respawning every prompt (564.578ms)
1602
+ ✔ S1-RS06 provider dispatch uses the real adapter and reports a missing ML runtime (863.5358ms)
1603
+ ✔ S1-RS07 operator CLI reports status and stops a running server (1210.1235ms)
1604
+ ✔ S1-RS08 an executable that cannot spawn is recorded as a visible, throttled failure (6.523ms)
1605
+ ✔ S1-RS09 a corrupted state file never leaves an orphan server behind (1721.1821ms)
1606
+ ✔ S1-RS10 scoreAsync matches the sync client and keeps every start/failure mapping (1133.6685ms)
1607
+ ✔ S1-RS10b scoreAsync removes refused state, restarts once, and times out slow servers (2208.9108ms)
1608
+ ✔ S1-RS10c provider.scoreAsync dispatches by transport with the sync result shapes (1233.2244ms)
1609
+ ✔ S1-RS11 the hook entry pre-scores over async IPC: it still scores when worker threads cannot start (1488.115ms)
1610
+ ✔ S1-RS12 the evaluator times the async path: no worker thread per warm score (2055.3747ms)
1611
+ ﹣ S1-RS13 manifest acceptance thresholds are validated, carried by scored results and applied by the evaluator (0.0741ms) # Windows Node 24 < 24.20.0 lacks upstream shutdown fix nodejs/node#61999; use Node 24.20+ or Node 22
1612
+ ✔ S1-RS14 resident transport names its adapter and stays inside the scripts dir (3.7444ms)
1613
+ ✔ S1-RS15 repeated teardown waits for resident PID and removes every fixture (8342.5077ms)
1614
+ ℹ tests 18
1615
+ ℹ suites 0
1616
+ ℹ pass 17
1617
+ ℹ fail 0
1618
+ ℹ cancelled 0
1619
+ ℹ skipped 1
1620
+ ℹ todo 0
1621
+ ℹ duration_ms 25405.509
1622
+
1623
+ ▶️ Running test suite: mechanism-system-one-router.test.js
1624
+ ✔ S1-R01 off/shadow/prefer and rollback (2.056ms)
1625
+ ✔ S1-R02 explicit precedence, abstention and every failure leave fallback intact (0.4064ms)
1626
+ ✔ S1-R03 real CLI/kernel off parity and shadow failure repeated (797.0847ms)
1627
+ ✔ S1-R04 integrated accepted route preserves policy and explicit model choice (16.7687ms)
1628
+ ✔ S1-R05 structural floor: a scorer can raise but never lower a deterministic macro/multi-task tier (6.7595ms)
1629
+ ✔ S1-R07 a scored result with calibrated acceptance thresholds decides with them (0.4019ms)
1630
+ ✔ S1-R06 prescoreTier: off loads nothing; a matching request reuses the async result; mismatch and failure keep sync semantics (0.8107ms)
1631
+ ℹ tests 7
1632
+ ℹ suites 0
1633
+ ℹ pass 7
1634
+ ℹ fail 0
1635
+ ℹ cancelled 0
1636
+ ℹ skipped 0
1637
+ ℹ todo 0
1638
+ ℹ duration_ms 829.0669
1639
+
1640
+ ▶️ Running test suite: mechanism-system-one-train.test.js
1641
+ ✔ S1-T01 trainer data handling is exercised without torch (105.2309ms)
1642
+ ✔ S1-T02 a validation row is accepted only above both thresholds and never as unclassified (0.4037ms)
1643
+ ✔ S1-T03 calibration maximizes coverage subject to accepted precision on validation only (35.807ms)
1644
+ ✔ S1-T06 the default calibration target is the owner advisory 85% (25.3875ms)
1645
+ ✔ S1-T04 calibration CLI reads validation scores and writes thresholds (172.9973ms)
1646
+ ﹣ S1-T05 a real tiny training run produces a checkpoint the adapter loads (skipped without torch) (69.4018ms) # torch/cua_s1 not installed; mechanism tests above still run
1647
+ ℹ tests 6
1648
+ ℹ suites 0
1649
+ ℹ pass 5
1650
+ ℹ fail 0
1651
+ ℹ cancelled 0
1652
+ ℹ skipped 1
1653
+ ℹ todo 0
1654
+ ℹ duration_ms 414.093
1655
+
1656
+ =================================================
1657
+ Mechanism Test Summary
1658
+ =================================================
1659
+ ✅ mechanism-2a-rule-of-3.test.js [PASSED]
1660
+ ✅ mechanism-2aa-codex-action-gate-policy.test.js [PASSED]
1661
+ ✅ mechanism-2ab-openai-plugin-sync-integrity.test.js [PASSED]
1662
+ ✅ mechanism-2ac-atomic-commit-check.test.js [PASSED]
1663
+ ✅ mechanism-2ad-action-gate-classifier-hardening.test.js [PASSED]
1664
+ ✅ mechanism-2af-worktree-isolation.test.js [PASSED]
1665
+ ✅ mechanism-2ag-router-worktree-contract.test.js [PASSED]
1666
+ ✅ mechanism-2ah-workflow-lifecycle.test.js [PASSED]
1667
+ ✅ mechanism-2ai-workspace-fingerprint-batch.test.js [PASSED]
1668
+ ✅ mechanism-2aj-waza-reference-adapter.test.js [PASSED]
1669
+ ✅ mechanism-2ak-contract-probe-adapter.test.js [PASSED]
1670
+ ✅ mechanism-2al-codex-hooks-compat.test.js [PASSED]
1671
+ ✅ mechanism-2am-observations-session-import.test.js [PASSED]
1672
+ ✅ mechanism-2am-openai-packaged-helper-runtime.test.js [PASSED]
1673
+ ✅ mechanism-2an-environment-detection-readonly.test.js [PASSED]
1674
+ ✅ mechanism-2an-workflow-obligations.test.js [PASSED]
1675
+ ✅ mechanism-2ao-plugin-sync.test.js [PASSED]
1676
+ ✅ mechanism-2ap-sbom.test.js [PASSED]
1677
+ ✅ mechanism-2aq-fable-stage-bindings.test.js [PASSED]
1678
+ ✅ mechanism-2ar-binding-resolution.test.js [PASSED]
1679
+ ✅ mechanism-2b-boundary-guard.test.js [PASSED]
1680
+ ✅ mechanism-2c-state-persist.test.js [PASSED]
1681
+ ✅ mechanism-2d-fact-audit.test.js [PASSED]
1682
+ ✅ mechanism-2e-scope-guard.test.js [PASSED]
1683
+ ✅ mechanism-2f-stop-gate.test.js [PASSED]
1684
+ ✅ mechanism-2g-platform-ignore.test.js [PASSED]
1685
+ ✅ mechanism-2h-installer-manifest.test.js [PASSED]
1686
+ ✅ mechanism-2i-crlf-frontmatter.test.js [PASSED]
1687
+ ✅ mechanism-2i-install-verification.test.js [PASSED]
1688
+ ✅ mechanism-2j-behavioral-runner.test.js [PASSED]
1689
+ ✅ mechanism-2j-fixture-entrypoints.test.js [PASSED]
1690
+ ✅ mechanism-2k-reference-check.test.js [PASSED]
1691
+ ✅ mechanism-2l-multi-agent-workspace.test.js [PASSED]
1692
+ ✅ mechanism-2m-self-repo-guard.test.js [PASSED]
1693
+ ✅ mechanism-2n-opencode-plugin.test.js [PASSED]
1694
+ ✅ mechanism-2o-state-home-isolation.test.js [PASSED]
1695
+ ✅ mechanism-2p-installer-links.test.js [PASSED]
1696
+ ✅ mechanism-2q-installer-global-shared-store.test.js [PASSED]
1697
+ ✅ mechanism-2r-uninstall-flags.test.js [PASSED]
1698
+ ✅ mechanism-2s-tdd-quality.test.js [PASSED]
1699
+ ✅ mechanism-2t-disclosure.test.js [PASSED]
1700
+ ✅ mechanism-2t-evidence-triage.test.js [PASSED]
1701
+ ✅ mechanism-2t-issue-20.test.js [PASSED]
1702
+ ✅ mechanism-2t-platform-skill-targets.test.js [PASSED]
1703
+ ✅ mechanism-2t-transcript-parser.test.js [PASSED]
1704
+ ✅ mechanism-2t-workspace-identity.test.js [PASSED]
1705
+ ✅ mechanism-2u-issue-42-regressions.test.js [PASSED]
1706
+ ✅ mechanism-2u-issue-44.test.js [PASSED]
1707
+ ✅ mechanism-2v-verifier-boundaries.test.js [PASSED]
1708
+ ✅ mechanism-2w-platform-compatibility.test.js [PASSED]
1709
+ ✅ mechanism-2x-release-automation.test.js [PASSED]
1710
+ ✅ mechanism-2x-release-commit-message.test.js [PASSED]
1711
+ ✅ mechanism-2y-release-tooling-compat.test.js [PASSED]
1712
+ ✅ mechanism-2z-claude-plugin-manifest.test.js [PASSED]
1713
+ ✅ mechanism-30-opencode-plugin-loadability.test.js [PASSED]
1714
+ ✅ mechanism-31-opencode-hardlock-evidence.test.js [PASSED]
1715
+ ✅ mechanism-32-paired-benchmark.test.js [PASSED]
1716
+ ✅ mechanism-33-issues-205-207.test.js [PASSED]
1717
+ ✅ mechanism-34-observations.test.js [PASSED]
1718
+ ✅ mechanism-34-worktree-submodule-reachability.test.js [PASSED]
1719
+ ✅ mechanism-35-verification-contract.test.js [PASSED]
1720
+ ✅ mechanism-packaging-bytecode.test.js [PASSED]
1721
+ ✅ mechanism-system-one-collect.test.js [PASSED]
1722
+ ✅ mechanism-system-one-contract.test.js [PASSED]
1723
+ ✅ mechanism-system-one-corpus.test.js [PASSED]
1724
+ ✅ mechanism-system-one-evaluation.test.js [PASSED]
1725
+ ✅ mechanism-system-one-install.test.js [PASSED]
1726
+ ✅ mechanism-system-one-intent.test.js [PASSED]
1727
+ ✅ mechanism-system-one-label.test.js [PASSED]
1728
+ ✅ mechanism-system-one-laya.test.js [PASSED]
1729
+ ✅ mechanism-system-one-ngram.test.js [PASSED]
1730
+ ✅ mechanism-system-one-provider.test.js [PASSED]
1731
+ ✅ mechanism-system-one-relevance.test.js [PASSED]
1732
+ ✅ mechanism-system-one-resident.test.js [PASSED]
1733
+ ✅ mechanism-system-one-router.test.js [PASSED]
1734
+ ✅ mechanism-system-one-train.test.js [PASSED]
1735
+ -------------------------------------------------
1736
+ 🎉 All VERIFICATION.md §2 mechanism checks passed.
1737
+ =================================================