harness-everything 0.47.1 → 0.47.2

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