harness-everything 0.47.1 → 0.47.3

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 (103) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.github/workflows/ci.yml +14 -0
  4. package/CHANGELOG.md +18 -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/ci/lib/opencode-verification-loader.js +24 -0
  85. package/ci/mechanism-2p-opencode-v2-entrypoint.test.js +8 -1
  86. package/ci/mechanism-325-f3-derived-views.test.js +42 -2
  87. package/ci/mechanism-338-opencode-async.test.js +229 -0
  88. package/ci/mechanism-341-opencode-lane.test.js +14 -3
  89. package/ci/mechanism-36-verify-timeout.test.js +7 -168
  90. package/docs/platform-capabilities.md +8 -0
  91. package/harness-everything/SKILL.md +1 -1
  92. package/harness-everything/scripts/doc-check.js +5 -4
  93. package/hooks/scripts/lib/doc-reconciliation-provider.js +1 -1
  94. package/opencode-plugin/README.md +28 -30
  95. package/opencode-plugin/index.mjs +249 -112
  96. package/opencode-plugin/plugin.json +1 -1
  97. package/package.json +1 -1
  98. package/plugins/harness-everything/.codex-plugin/plugin.json +1 -1
  99. package/plugins/harness-everything/hooks/scripts/lib/doc-reconciliation-provider.js +1 -1
  100. package/plugins/harness-everything/plugin.json +1 -1
  101. package/plugins/harness-everything/skills/harness-everything/SKILL.md +1 -1
  102. package/plugins/harness-everything/skills/harness-everything/scripts/doc-check.js +5 -4
  103. package/sbom.cdx.json +7 -7
@@ -0,0 +1,3373 @@
1
+
2
+ > harness-everything@0.31.1 test
3
+ > node self-evolve/scripts/self-regression.js
4
+
5
+ =================================================
6
+ Harness OS - Self-Regression Test Suite
7
+ =================================================
8
+
9
+ [Phase 1] Static Syntax Check...
10
+ PASS syntax: 234 JavaScript file(s)
11
+
12
+ [Phase 1b] CLI Command Smoke Test...
13
+ PASS `harness next` produced routing + invariant contract.
14
+ PASS `harness verify` exited 0 on a skipped check.
15
+
16
+ [Phase 2] Routing Verification Check...
17
+ === Harness Tier Verification Framework ===
18
+ This framework simulates routing prompts to verify trigger rates.
19
+
20
+ [Testing] Refactoring large module
21
+ Prompt: "We need to refactor the entire authentication architecture"
22
+ Expected Tier: Tier 3
23
+ -> Result: PASS (Got Tier 3)
24
+
25
+ [Testing] Small feature
26
+ Prompt: "Add a small feature to validate phone numbers"
27
+ Expected Tier: Tier 2
28
+ -> Result: PASS (Got Tier 2)
29
+
30
+ [Testing] One README typo
31
+ Prompt: "Update one README typo"
32
+ Expected Tier: Tier 1
33
+ -> Result: PASS (Got Tier 1)
34
+
35
+ [Testing] Chinese full skill audit
36
+ Prompt: "請逐一評估所有 skill 的內容、檔案結構與版本,並用數據比較是否仍然有效"
37
+ Expected Tier: Tier 3
38
+ -> Result: PASS (Got Tier 3)
39
+
40
+ [Testing] Small bugfix without matched routing signal
41
+ Prompt: "Fix the typo in the login screen"
42
+ Expected Tier: Unclassified
43
+ -> Result: PASS (Got Unclassified)
44
+
45
+ [Testing] API implementation with tests
46
+ Prompt: "Implement the new payment API and write integration tests"
47
+ Expected Tier: Tier 2
48
+ -> Result: PASS (Got Tier 2)
49
+
50
+ [Testing] Chinese prompt - API with tests
51
+ Prompt: "幫我實作新的付款 API 並寫整合測試"
52
+ Expected Tier: Tier 2
53
+ -> Result: PASS (Got Tier 2)
54
+
55
+ [Testing] Chinese prompt - architectural refactor
56
+ Prompt: "重構整個認證模組的架構"
57
+ Expected Tier: Tier 3
58
+ -> Result: PASS (Got Tier 3)
59
+
60
+ [Testing] Full skill efficacy audit
61
+ Prompt: "Evaluate every skill in this Harness repository and verify whether each one is still useful using data"
62
+ Expected Tier: Tier 3
63
+ -> Result: PASS (Got Tier 3)
64
+
65
+ [Testing] All-skill stale reference review
66
+ Prompt: "Review all skills for stale references and compare the installed file tree with the release"
67
+ Expected Tier: Tier 3
68
+ -> Result: PASS (Got Tier 3)
69
+
70
+ [Testing] Controlled A/B benchmark
71
+ Prompt: "Run a controlled A/B benchmark of the agent with and without the Harness skills and report confidence intervals"
72
+ Expected Tier: Tier 3
73
+ -> Result: PASS (Got Tier 3)
74
+
75
+ [Testing] Repository version audit
76
+ Prompt: "Audit this repository version and fix four issues across routing, benchmarks, pressure cases, and missing files"
77
+ Expected Tier: Tier 3
78
+ -> Result: PASS (Got Tier 3)
79
+
80
+ --- Summary: 12 passed, 0 failed ---
81
+ PASS routing matrix
82
+ node:internal/modules/cjs/loader:1459
83
+ throw err;
84
+ ^
85
+
86
+ Error: Cannot find module 'js-yaml'
87
+ Require stack:
88
+ - <HARNESS_SOURCE>/ci/skill-routing-check.js
89
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1456:15)
90
+ at defaultResolveImpl (node:internal/modules/cjs/loader:1066:19)
91
+ at resolveForCJSWithHooks (node:internal/modules/cjs/loader:1071:22)
92
+ at Module._load (node:internal/modules/cjs/loader:1242:25)
93
+ at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)
94
+ at Module.require (node:internal/modules/cjs/loader:1556:12)
95
+ at require (node:internal/modules/helpers:152:16)
96
+ at Object.<anonymous> (<HARNESS_SOURCE>/ci/skill-routing-check.js:14:14)
97
+ at Module._compile (node:internal/modules/cjs/loader:1812:14)
98
+ at Object..js (node:internal/modules/cjs/loader:1943:10) {
99
+ code: 'MODULE_NOT_FOUND',
100
+ requireStack: [
101
+ '<HARNESS_SOURCE>/ci/skill-routing-check.js'
102
+ ]
103
+ }
104
+
105
+ Node.js v24.14.1
106
+ FAIL skill route coverage
107
+ === Semantic Contract-Strength Routing Contract ===
108
+ PASS kernel router exits successfully
109
+ PASS classifier result is preserved
110
+ PASS Tier 2 selects iterative-single workflow
111
+ PASS iterative work exposes loop-awareness instead of a hard budget
112
+ PASS active-step binding resolution is explicitly mandatory
113
+ PASS orchestration policy preserves semantic MUST obligations
114
+ PASS kernel separates semantic contract from non-blocking observation
115
+ PASS worktree isolation disposition is a semantic MUST
116
+ PASS old planning-guidance label is absent
117
+ PASS old worktree hard-block wording is absent
118
+ PASS future step knowledge stays undisclosed
119
+ PASS required binding gaps remain visible without adding a lock
120
+ PASS global read-every-suggestion invariant is removed
121
+ PASS workflow plan carries mandatory user-visible status invariant
122
+ PASS kernel emits the mandatory unified status contract
123
+ PASS kernel status contract includes readable Markdown field ### 🚦 Harness Status
124
+ PASS kernel status contract includes readable Markdown field - **Current:**
125
+ PASS kernel status contract includes readable Markdown field - **Read / Evidence:**
126
+ PASS kernel status contract includes readable Markdown field - **Next:**
127
+ PASS kernel status contract includes readable Markdown field - **Risk / Blocked:**
128
+ PASS routing checkpoint is marked internal rather than user-facing
129
+ PASS legacy duplicate-visible checkpoint label is absent
130
+ PASS kernel tells agents to split dense evidence into nested bullets
131
+ PASS kernel separates semantic MUST from mechanical blocking
132
+ PASS Tier 3 routing exits successfully
133
+ PASS macro task remains Tier 3
134
+ PASS Tier 3 keeps the worktree isolation invariant
135
+ PASS Tier 3 does not push a global worktree skill path
136
+ PASS Tier 3 requires an isolation disposition without a hard lock
137
+ PASS Harness skill separates required obligations from adaptable tactics
138
+ PASS Harness skill names the only intentional blocking boundaries
139
+ PASS Harness skill requires the readable unified user-visible status
140
+ PASS Harness skill mirror matches
141
+ PASS worktree skill requires isolation disposition but permits degraded fallback
142
+ PASS worktree creation failure is not a cognitive blocked state
143
+ PASS worktree skill mirror matches
144
+ PASS triage reference uses contract-first policy
145
+ PASS triage defines the mandatory unified status contract
146
+ PASS triage mirror matches
147
+ PASS current doc docs/routing.md preserves explicit semantic strength
148
+ PASS current doc docs/architecture.md preserves explicit semantic strength
149
+ PASS current doc docs/philosophy.md preserves explicit semantic strength
150
+ PASS current doc docs/routing.md defines mandatory user-visible status
151
+ PASS current doc docs/architecture.md defines mandatory user-visible status
152
+ PASS current doc docs/workflow-runtime.md defines mandatory user-visible status
153
+ PASS philosophy defines canonical MUST/SHOULD/MAY strength
154
+ PASS contract-strength audit classifies Route before software/project execution
155
+ PASS contract-strength audit classifies Resolve active required skill/reference bindings before their step
156
+ PASS contract-strength audit classifies Resolve selected-topology invariants/stages/checks/synthesis/verification
157
+ PASS contract-strength audit classifies Discover relevant environment/host facts
158
+ PASS contract-strength audit classifies Resolve Tier-3/Fable isolation before broad mutation
159
+ PASS contract-strength audit classifies Numeric iteration/revision/replan/worker values
160
+ PASS contract-strength audit classifies Durable memory writes
161
+ PASS old ambiguous philosophy wording is removed
162
+ PASS instruction-only installer preserves MUST/MAY semantics
163
+ PASS instruction-only installers carry the readable mandatory status contract
164
+ PASS installer text preserves Rule-of-3 and permission boundaries
165
+ PASS OpenAI advisory mirror matches
166
+ PASS repository agent contract is contract-first
167
+ PASS repository agent contract requires readable unified user-visible status
168
+ PASS repository worktree rule requires disposition without hard lock
169
+ PASS architecture skill aligns rollback with the third same-signature failure
170
+ PASS architecture skill no longer waits beyond the Rule-of-3 threshold
171
+ PASS architecture skill mirror matches
172
+ PASS environment discovery is a conditional semantic MUST
173
+ PASS environment skill mirror matches
174
+ PASS commit skill separates staged-diff MUST from split SHOULD
175
+ PASS git-commit skill mirror matches
176
+ PASS Claude packages workflow reminder hook
177
+ PASS Claude preserves Rule-of-3 boundary
178
+ PASS Claude preserves action permission gate
179
+
180
+ PASS: semantic contract-strength routing contract (0 failures)
181
+ PASS invariant-first routing contract
182
+ === Router Workflow Plan Contract — Phase 2 ===
183
+ PASS direct-single: tier router exits successfully
184
+ PASS direct-single: structured contract exists
185
+ PASS direct-single: contract validates (no errors)
186
+ PASS one-file trivial task remains tier1
187
+ PASS one-file trivial task selects direct-single
188
+ PASS direct-single is a selected strategy
189
+ PASS every selected workflow carries the user-visible status invariant
190
+ PASS every selected workflow carries conditional environment-alignment MUST
191
+ PASS direct-single does not require a workspace
192
+ PASS direct-single does not parallelize
193
+ PASS iterative-single: tier router exits successfully
194
+ PASS iterative-single: structured contract exists
195
+ PASS iterative-single: contract validates (no errors)
196
+ PASS ordinary test-first bug fix is tier2
197
+ PASS ordinary bug fix selects iterative-single
198
+ PASS iterative-single retains a MAY iteration planning value
199
+ PASS workflow exposes a MAY revision planning value
200
+ PASS workflow exposes a MAY replan planning value
201
+ PASS workflow exposes a MAY worker planning value
202
+ PASS iterative-single carries objective verification invariant
203
+ PASS iterative-single carries semantic loop-awareness obligation while numeric counts remain MAY
204
+ PASS test-related keywords become normalized step input signals
205
+ PASS selected topology no longer pushes a global skill list
206
+ PASS knowledge signals do not directly select documents
207
+ PASS ordinary iterative work cannot write durable memory
208
+ PASS binding ids remain step-local rather than workflow invariants
209
+ PASS self-evolve persistence: tier router exits successfully
210
+ PASS self-evolve persistence: structured contract exists
211
+ PASS self-evolve persistence: contract validates (no errors)
212
+ PASS bounded explicit persistence request receives a selected workflow
213
+ PASS explicit persistence request authorizes only self-evolve durable write
214
+ PASS durable memory route carries runtime authorization invariant
215
+ PASS memory authorization does not add a global self-evolve suggestion
216
+ PASS persistence intent is recorded in task shape
217
+ PASS memory prohibition: tier router exits successfully
218
+ PASS memory prohibition: structured contract exists
219
+ PASS memory prohibition: contract validates (no errors)
220
+ PASS explicit memory prohibition overrides persistence intent
221
+ PASS memory prohibition conflict is auditable
222
+ PASS bounded operation: Audit this SKILL.md only.: tier router exits successfully
223
+ PASS bounded operation: Audit this SKILL.md only.: structured contract exists
224
+ PASS bounded operation: Audit this SKILL.md only.: contract validates (no errors)
225
+ PASS bounded operation verb does not force Tier 3: Audit this SKILL.md only.
226
+ PASS bounded operation verb does not emit macro-scope-signal: Audit this SKILL.md only.
227
+ PASS bounded operation records macroScope=false: Audit this SKILL.md only.
228
+ PASS bounded operation: Compare these two functions.: tier router exits successfully
229
+ PASS bounded operation: Compare these two functions.: structured contract exists
230
+ PASS bounded operation: Compare these two functions.: contract validates (no errors)
231
+ PASS bounded operation verb does not force Tier 3: Compare these two functions.
232
+ PASS bounded operation verb does not emit macro-scope-signal: Compare these two functions.
233
+ PASS bounded operation records macroScope=false: Compare these two functions.
234
+ PASS bounded operation: Benchmark this parser function.: tier router exits successfully
235
+ PASS bounded operation: Benchmark this parser function.: structured contract exists
236
+ PASS bounded operation: Benchmark this parser function.: contract validates (no errors)
237
+ PASS bounded operation verb does not force Tier 3: Benchmark this parser function.
238
+ PASS bounded operation verb does not emit macro-scope-signal: Benchmark this parser function.
239
+ PASS bounded operation records macroScope=false: Benchmark this parser function.
240
+ PASS controlled A/B benchmark: tier router exits successfully
241
+ PASS controlled A/B benchmark: structured contract exists
242
+ PASS controlled A/B benchmark: contract validates (no errors)
243
+ PASS structured A/B benchmark remains Tier 3
244
+ PASS structured A/B benchmark records macroScope=true
245
+ PASS structured A/B benchmark keeps macro-scope-signal
246
+ PASS Tier 3 keyword rationale: tier router exits successfully
247
+ PASS Tier 3 keyword rationale: structured contract exists
248
+ PASS Tier 3 keyword rationale: contract validates (no errors)
249
+ PASS new feature remains Tier 3
250
+ PASS new feature records tier3-keyword
251
+ PASS Tier 3 keyword rationale names the actual trigger class
252
+ PASS Tier 3 keyword rationale does not claim unrelated macro signals
253
+ PASS fable-staged: tier router exits successfully
254
+ PASS fable-staged: structured contract exists
255
+ PASS fable-staged: contract validates (no errors)
256
+ PASS multi-stage architecture work is tier3
257
+ PASS dependent multi-stage work selects fable-staged
258
+ PASS dependent stages remain sequential
259
+ PASS fable-staged requires cold verification
260
+ PASS fable-staged carries mandatory isolation disposition
261
+ PASS fable-staged keeps its worktree isolation invariant
262
+ PASS fable topology does not globally push worktree/fable skills
263
+ PASS fable-parallel: tier router exits successfully
264
+ PASS fable-parallel: structured contract exists
265
+ PASS fable-parallel: contract validates (no errors)
266
+ PASS parallel task records independent dependency graph
267
+ PASS parallel audit records read-only write set
268
+ PASS independent read-only audits select fable-parallel
269
+ PASS fable-parallel exposes allowed=true
270
+ PASS parallel strategy requires synthesis barrier
271
+ PASS shared-write serialization: tier router exits successfully
272
+ PASS shared-write serialization: structured contract exists
273
+ PASS shared-write serialization: contract validates (no errors)
274
+ PASS same-file writers are recorded as overlapping
275
+ PASS same-file writers are serialized instead of fable-parallel
276
+ PASS overlapping writes cannot dispatch in parallel
277
+ PASS multi-agent workspace: tier router exits successfully
278
+ PASS multi-agent workspace: structured contract exists
279
+ PASS multi-agent workspace: contract validates (no errors)
280
+ PASS durable reusable specialists select workspace topology
281
+ PASS workspace topology marks workspace required
282
+ PASS workspace topology scopes reads through workspace index
283
+ PASS workspace memory writes remain proposals
284
+ PASS unclassified: tier router exits successfully
285
+ PASS unclassified: structured contract exists
286
+ PASS unclassified: contract validates (no errors)
287
+ PASS no matched signal remains unclassified
288
+ PASS unclassified does not silently select direct-single
289
+ PASS unclassified strategy selection is deferred
290
+ PASS deferred selection has deterministic reason code
291
+ PASS actionGate: tier router exits successfully
292
+ PASS actionGate: structured contract exists
293
+ PASS actionGate: contract validates (no errors)
294
+ PASS irreversible command intent requires actionGate independent of tier
295
+ PASS actionGate records irreversible-action
296
+ PASS actionGate closes at pending approval before execution
297
+ PASS actionGate adds pre-action invariant
298
+ PASS external side effect: tier router exits successfully
299
+ PASS external side effect: structured contract exists
300
+ PASS external side effect: contract validates (no errors)
301
+ PASS external side effect requires actionGate
302
+ PASS external side effect reason is explicit
303
+ PASS fable keyword trivial edit: tier router exits successfully
304
+ PASS fable keyword trivial edit: structured contract exists
305
+ PASS fable keyword trivial edit: contract validates (no errors)
306
+ PASS fable keyword does not force Tier 3 on a trivial README typo
307
+ PASS fable README typo remains direct-single
308
+ PASS explicit Fable profile: tier router exits successfully
309
+ PASS explicit Fable profile: structured contract exists
310
+ PASS explicit Fable profile: contract validates (no errors)
311
+ PASS explicit Fable request selects Fable topology
312
+ PASS legacy opus alias normalizes to orchestrator profile
313
+ PASS legacy alias remains auditable
314
+ PASS explicit Fable profile remains visible
315
+ PASS explicit Fable sonnect alias: tier router exits successfully
316
+ PASS explicit Fable sonnect alias: structured contract exists
317
+ PASS explicit Fable sonnect alias: contract validates (no errors)
318
+ PASS sonnect normalizes to reasoning profile
319
+ PASS raw sonnect alias remains auditable end-to-end
320
+ PASS router output preserves raw sonnect alias
321
+ PASS bounded Fable lookup: tier router exits successfully
322
+ PASS bounded Fable lookup: structured contract exists
323
+ PASS bounded Fable lookup: contract validates (no errors)
324
+ PASS Could you please explain fable on sonnet? Return only JSON.: lookup remains a bounded Tier 1 operation
325
+ PASS Could you please explain fable on sonnet? Return only JSON.: lookup selects direct-single before loading references
326
+ PASS lookup does not delegate
327
+ PASS Could you please explain fable on sonnet? Return only JSON.: lookup selects only compact reference
328
+ PASS Could you please explain fable on sonnet? Return only JSON.: lookup omits unrelated keyword guides
329
+ PASS Could you please explain fable on sonnet? Return only JSON.: lookup does not send agent to selector implementation
330
+ PASS Could you please explain fable on sonnet? Return only JSON.: lookup contract is deterministic
331
+ PASS bounded Fable lookup: tier router exits successfully
332
+ PASS bounded Fable lookup: structured contract exists
333
+ PASS bounded Fable lookup: contract validates (no errors)
334
+ PASS Please, explain fable on sonnet; return only JSON.: lookup remains a bounded Tier 1 operation
335
+ PASS Please, explain fable on sonnet; return only JSON.: lookup selects direct-single before loading references
336
+ PASS lookup does not delegate
337
+ PASS Please, explain fable on sonnet; return only JSON.: lookup selects only compact reference
338
+ PASS Please, explain fable on sonnet; return only JSON.: lookup omits unrelated keyword guides
339
+ PASS Please, explain fable on sonnet; return only JSON.: lookup does not send agent to selector implementation
340
+ PASS Please, explain fable on sonnet; return only JSON.: lookup contract is deterministic
341
+ PASS bounded Fable lookup: tier router exits successfully
342
+ PASS bounded Fable lookup: structured contract exists
343
+ PASS bounded Fable lookup: contract validates (no errors)
344
+ PASS What is fable on opus? Return only JSON.: lookup remains a bounded Tier 1 operation
345
+ PASS What is fable on opus? Return only JSON.: lookup selects direct-single before loading references
346
+ PASS lookup does not delegate
347
+ PASS What is fable on opus? Return only JSON.: lookup selects only compact reference
348
+ PASS What is fable on opus? Return only JSON.: lookup omits unrelated keyword guides
349
+ PASS What is fable on opus? Return only JSON.: lookup does not send agent to selector implementation
350
+ PASS What is fable on opus? Return only JSON.: lookup contract is deterministic
351
+ PASS bounded Fable lookup: tier router exits successfully
352
+ PASS bounded Fable lookup: structured contract exists
353
+ PASS bounded Fable lookup: contract validates (no errors)
354
+ PASS Explain what fable on sonnet means.Return only JSON.: lookup remains a bounded Tier 1 operation
355
+ PASS Explain what fable on sonnet means.Return only JSON.: lookup selects direct-single before loading references
356
+ PASS lookup does not delegate
357
+ PASS Explain what fable on sonnet means.Return only JSON.: lookup selects only compact reference
358
+ PASS Explain what fable on sonnet means.Return only JSON.: lookup omits unrelated keyword guides
359
+ PASS Explain what fable on sonnet means.Return only JSON.: lookup does not send agent to selector implementation
360
+ PASS Explain what fable on sonnet means.Return only JSON.: lookup contract is deterministic
361
+ PASS bounded Fable lookup: tier router exits successfully
362
+ PASS bounded Fable lookup: structured contract exists
363
+ PASS bounded Fable lookup: contract validates (no errors)
364
+ PASS Could you please explain fable on sonnet as a compact JSON record.: lookup remains a bounded Tier 1 operation
365
+ PASS Could you please explain fable on sonnet as a compact JSON record.: lookup selects direct-single before loading references
366
+ PASS lookup does not delegate
367
+ PASS Could you please explain fable on sonnet as a compact JSON record.: lookup selects only compact reference
368
+ PASS Could you please explain fable on sonnet as a compact JSON record.: lookup omits unrelated keyword guides
369
+ PASS Could you please explain fable on sonnet as a compact JSON record.: lookup does not send agent to selector implementation
370
+ PASS Could you please explain fable on sonnet as a compact JSON record.: lookup contract is deterministic
371
+ PASS bounded Fable lookup: tier router exits successfully
372
+ PASS bounded Fable lookup: structured contract exists
373
+ PASS bounded Fable lookup: contract validates (no errors)
374
+ PASS 說明 fable on sonnet,不必啟動任何流程,請只輸出 JSON。: lookup remains a bounded Tier 1 operation
375
+ PASS 說明 fable on sonnet,不必啟動任何流程,請只輸出 JSON。: lookup selects direct-single before loading references
376
+ PASS lookup does not delegate
377
+ PASS 說明 fable on sonnet,不必啟動任何流程,請只輸出 JSON。: lookup selects only compact reference
378
+ PASS 說明 fable on sonnet,不必啟動任何流程,請只輸出 JSON。: lookup omits unrelated keyword guides
379
+ PASS 說明 fable on sonnet,不必啟動任何流程,請只輸出 JSON。: lookup does not send agent to selector implementation
380
+ PASS 說明 fable on sonnet,不必啟動任何流程,請只輸出 JSON。: lookup contract is deterministic
381
+ PASS bounded Fable lookup: tier router exits successfully
382
+ PASS bounded Fable lookup: structured contract exists
383
+ PASS bounded Fable lookup: contract validates (no errors)
384
+ PASS 解釋 fable on opus,無須進入任何階段,請回傳 JSON。: lookup remains a bounded Tier 1 operation
385
+ PASS 解釋 fable on opus,無須進入任何階段,請回傳 JSON。: lookup selects direct-single before loading references
386
+ PASS lookup does not delegate
387
+ PASS 解釋 fable on opus,無須進入任何階段,請回傳 JSON。: lookup selects only compact reference
388
+ PASS 解釋 fable on opus,無須進入任何階段,請回傳 JSON。: lookup omits unrelated keyword guides
389
+ PASS 解釋 fable on opus,無須進入任何階段,請回傳 JSON。: lookup does not send agent to selector implementation
390
+ PASS 解釋 fable on opus,無須進入任何階段,請回傳 JSON。: lookup contract is deterministic
391
+ PASS bounded Fable lookup: tier router exits successfully
392
+ PASS bounded Fable lookup: structured contract exists
393
+ PASS bounded Fable lookup: contract validates (no errors)
394
+ PASS Explain what 'fable on sonnect' means; return only a small JSON selection record.: lookup remains a bounded Tier 1 operation
395
+ PASS Explain what 'fable on sonnect' means; return only a small JSON selection record.: lookup selects direct-single before loading references
396
+ PASS lookup does not delegate
397
+ PASS Explain what 'fable on sonnect' means; return only a small JSON selection record.: lookup selects only compact reference
398
+ PASS Explain what 'fable on sonnect' means; return only a small JSON selection record.: lookup omits unrelated keyword guides
399
+ PASS Explain what 'fable on sonnect' means; return only a small JSON selection record.: lookup does not send agent to selector implementation
400
+ PASS Explain what 'fable on sonnect' means; return only a small JSON selection record.: lookup contract is deterministic
401
+ PASS bounded Fable lookup: tier router exits successfully
402
+ PASS bounded Fable lookup: structured contract exists
403
+ PASS bounded Fable lookup: contract validates (no errors)
404
+ PASS Resolve fable on haiku into a profile JSON record; no orchestration or delegation.: lookup remains a bounded Tier 1 operation
405
+ PASS Resolve fable on haiku into a profile JSON record; no orchestration or delegation.: lookup selects direct-single before loading references
406
+ PASS lookup does not delegate
407
+ PASS Resolve fable on haiku into a profile JSON record; no orchestration or delegation.: lookup selects only compact reference
408
+ PASS Resolve fable on haiku into a profile JSON record; no orchestration or delegation.: lookup omits unrelated keyword guides
409
+ PASS Resolve fable on haiku into a profile JSON record; no orchestration or delegation.: lookup does not send agent to selector implementation
410
+ PASS Resolve fable on haiku into a profile JSON record; no orchestration or delegation.: lookup contract is deterministic
411
+ PASS bounded Fable lookup: tier router exits successfully
412
+ PASS bounded Fable lookup: structured contract exists
413
+ PASS bounded Fable lookup: contract validates (no errors)
414
+ PASS 解釋 fable on opus 的意思,只回傳 JSON。: lookup remains a bounded Tier 1 operation
415
+ PASS 解釋 fable on opus 的意思,只回傳 JSON。: lookup selects direct-single before loading references
416
+ PASS lookup does not delegate
417
+ PASS 解釋 fable on opus 的意思,只回傳 JSON。: lookup selects only compact reference
418
+ PASS 解釋 fable on opus 的意思,只回傳 JSON。: lookup omits unrelated keyword guides
419
+ PASS 解釋 fable on opus 的意思,只回傳 JSON。: lookup does not send agent to selector implementation
420
+ PASS 解釋 fable on opus 的意思,只回傳 JSON。: lookup contract is deterministic
421
+ PASS bounded Fable lookup: tier router exits successfully
422
+ PASS bounded Fable lookup: structured contract exists
423
+ PASS bounded Fable lookup: contract validates (no errors)
424
+ PASS Explain what 'run fable on sonnect' means; return only JSON.: lookup remains a bounded Tier 1 operation
425
+ PASS Explain what 'run fable on sonnect' means; return only JSON.: lookup selects direct-single before loading references
426
+ PASS lookup does not delegate
427
+ PASS Explain what 'run fable on sonnect' means; return only JSON.: lookup selects only compact reference
428
+ PASS Explain what 'run fable on sonnect' means; return only JSON.: lookup omits unrelated keyword guides
429
+ PASS Explain what 'run fable on sonnect' means; return only JSON.: lookup does not send agent to selector implementation
430
+ PASS Explain what 'run fable on sonnect' means; return only JSON.: lookup contract is deterministic
431
+ PASS bounded Fable lookup: tier router exits successfully
432
+ PASS bounded Fable lookup: structured contract exists
433
+ PASS bounded Fable lookup: contract validates (no errors)
434
+ PASS Explain fable on sonnet; return JSON with requestedProfile, effectiveProfile.: lookup remains a bounded Tier 1 operation
435
+ PASS Explain fable on sonnet; return JSON with requestedProfile, effectiveProfile.: lookup selects direct-single before loading references
436
+ PASS lookup does not delegate
437
+ PASS Explain fable on sonnet; return JSON with requestedProfile, effectiveProfile.: lookup selects only compact reference
438
+ PASS Explain fable on sonnet; return JSON with requestedProfile, effectiveProfile.: lookup omits unrelated keyword guides
439
+ PASS Explain fable on sonnet; return JSON with requestedProfile, effectiveProfile.: lookup does not send agent to selector implementation
440
+ PASS Explain fable on sonnet; return JSON with requestedProfile, effectiveProfile.: lookup contract is deterministic
441
+ PASS bounded Fable lookup: tier router exits successfully
442
+ PASS bounded Fable lookup: structured contract exists
443
+ PASS bounded Fable lookup: contract validates (no errors)
444
+ PASS Explain what 'fable on sonnect' means; return only a small JSON selection record with requestedProfile, effectiveProfile, profileAlias, assignedRole, runtimeModel, runtimeEffort. No orchestration or delegation.: lookup remains a bounded Tier 1 operation
445
+ PASS Explain what 'fable on sonnect' means; return only a small JSON selection record with requestedProfile, effectiveProfile, profileAlias, assignedRole, runtimeModel, runtimeEffort. No orchestration or delegation.: lookup selects direct-single before loading references
446
+ PASS lookup does not delegate
447
+ PASS Explain what 'fable on sonnect' means; return only a small JSON selection record with requestedProfile, effectiveProfile, profileAlias, assignedRole, runtimeModel, runtimeEffort. No orchestration or delegation.: lookup selects only compact reference
448
+ PASS Explain what 'fable on sonnect' means; return only a small JSON selection record with requestedProfile, effectiveProfile, profileAlias, assignedRole, runtimeModel, runtimeEffort. No orchestration or delegation.: lookup omits unrelated keyword guides
449
+ PASS Explain what 'fable on sonnect' means; return only a small JSON selection record with requestedProfile, effectiveProfile, profileAlias, assignedRole, runtimeModel, runtimeEffort. No orchestration or delegation.: lookup does not send agent to selector implementation
450
+ PASS Explain what 'fable on sonnect' means; return only a small JSON selection record with requestedProfile, effectiveProfile, profileAlias, assignedRole, runtimeModel, runtimeEffort. No orchestration or delegation.: lookup contract is deterministic
451
+ PASS bounded Fable lookup: tier router exits successfully
452
+ PASS bounded Fable lookup: structured contract exists
453
+ PASS bounded Fable lookup: contract validates (no errors)
454
+ PASS Explain fable on haiku; output JSON with `requestedProfile`, `runtimeModel` and `runtimeEffort`.: lookup remains a bounded Tier 1 operation
455
+ PASS Explain fable on haiku; output JSON with `requestedProfile`, `runtimeModel` and `runtimeEffort`.: lookup selects direct-single before loading references
456
+ PASS lookup does not delegate
457
+ PASS Explain fable on haiku; output JSON with `requestedProfile`, `runtimeModel` and `runtimeEffort`.: lookup selects only compact reference
458
+ PASS Explain fable on haiku; output JSON with `requestedProfile`, `runtimeModel` and `runtimeEffort`.: lookup omits unrelated keyword guides
459
+ PASS Explain fable on haiku; output JSON with `requestedProfile`, `runtimeModel` and `runtimeEffort`.: lookup does not send agent to selector implementation
460
+ PASS Explain fable on haiku; output JSON with `requestedProfile`, `runtimeModel` and `runtimeEffort`.: lookup contract is deterministic
461
+ PASS bounded Fable lookup: tier router exits successfully
462
+ PASS bounded Fable lookup: structured contract exists
463
+ PASS bounded Fable lookup: contract validates (no errors)
464
+ PASS 解釋 fable on opus 的意思,只回傳 JSON,包含 requestedProfile、effectiveProfile、runtimeEffort。: lookup remains a bounded Tier 1 operation
465
+ PASS 解釋 fable on opus 的意思,只回傳 JSON,包含 requestedProfile、effectiveProfile、runtimeEffort。: lookup selects direct-single before loading references
466
+ PASS lookup does not delegate
467
+ PASS 解釋 fable on opus 的意思,只回傳 JSON,包含 requestedProfile、effectiveProfile、runtimeEffort。: lookup selects only compact reference
468
+ PASS 解釋 fable on opus 的意思,只回傳 JSON,包含 requestedProfile、effectiveProfile、runtimeEffort。: lookup omits unrelated keyword guides
469
+ PASS 解釋 fable on opus 的意思,只回傳 JSON,包含 requestedProfile、effectiveProfile、runtimeEffort。: lookup does not send agent to selector implementation
470
+ PASS 解釋 fable on opus 的意思,只回傳 JSON,包含 requestedProfile、effectiveProfile、runtimeEffort。: lookup contract is deterministic
471
+ PASS bounded Fable lookup: tier router exits successfully
472
+ PASS bounded Fable lookup: structured contract exists
473
+ PASS bounded Fable lookup: contract validates (no errors)
474
+ PASS Explain what 'use fable on opus' means; no execution or model switching.: lookup remains a bounded Tier 1 operation
475
+ PASS Explain what 'use fable on opus' means; no execution or model switching.: lookup selects direct-single before loading references
476
+ PASS lookup does not delegate
477
+ PASS Explain what 'use fable on opus' means; no execution or model switching.: lookup selects only compact reference
478
+ PASS Explain what 'use fable on opus' means; no execution or model switching.: lookup omits unrelated keyword guides
479
+ PASS Explain what 'use fable on opus' means; no execution or model switching.: lookup does not send agent to selector implementation
480
+ PASS Explain what 'use fable on opus' means; no execution or model switching.: lookup contract is deterministic
481
+ PASS bounded Fable lookup: tier router exits successfully
482
+ PASS bounded Fable lookup: structured contract exists
483
+ PASS bounded Fable lookup: contract validates (no errors)
484
+ PASS Explain fable on sonnet; return JSON; no stages, delegation or execution.: lookup remains a bounded Tier 1 operation
485
+ PASS Explain fable on sonnet; return JSON; no stages, delegation or execution.: lookup selects direct-single before loading references
486
+ PASS lookup does not delegate
487
+ PASS Explain fable on sonnet; return JSON; no stages, delegation or execution.: lookup selects only compact reference
488
+ PASS Explain fable on sonnet; return JSON; no stages, delegation or execution.: lookup omits unrelated keyword guides
489
+ PASS Explain fable on sonnet; return JSON; no stages, delegation or execution.: lookup does not send agent to selector implementation
490
+ PASS Explain fable on sonnet; return JSON; no stages, delegation or execution.: lookup contract is deterministic
491
+ PASS bounded Fable lookup: tier router exits successfully
492
+ PASS bounded Fable lookup: structured contract exists
493
+ PASS bounded Fable lookup: contract validates (no errors)
494
+ PASS 請說明 fable on sonnet 的意思,並只回傳含 requestedProfile 的 JSON。: lookup remains a bounded Tier 1 operation
495
+ PASS 請說明 fable on sonnet 的意思,並只回傳含 requestedProfile 的 JSON。: lookup selects direct-single before loading references
496
+ PASS lookup does not delegate
497
+ PASS 請說明 fable on sonnet 的意思,並只回傳含 requestedProfile 的 JSON。: lookup selects only compact reference
498
+ PASS 請說明 fable on sonnet 的意思,並只回傳含 requestedProfile 的 JSON。: lookup omits unrelated keyword guides
499
+ PASS 請說明 fable on sonnet 的意思,並只回傳含 requestedProfile 的 JSON。: lookup does not send agent to selector implementation
500
+ PASS 請說明 fable on sonnet 的意思,並只回傳含 requestedProfile 的 JSON。: lookup contract is deterministic
501
+ PASS bounded Fable lookup: tier router exits successfully
502
+ PASS bounded Fable lookup: structured contract exists
503
+ PASS bounded Fable lookup: contract validates (no errors)
504
+ PASS Explain fable on sonnet, please return JSON.: lookup remains a bounded Tier 1 operation
505
+ PASS Explain fable on sonnet, please return JSON.: lookup selects direct-single before loading references
506
+ PASS lookup does not delegate
507
+ PASS Explain fable on sonnet, please return JSON.: lookup selects only compact reference
508
+ PASS Explain fable on sonnet, please return JSON.: lookup omits unrelated keyword guides
509
+ PASS Explain fable on sonnet, please return JSON.: lookup does not send agent to selector implementation
510
+ PASS Explain fable on sonnet, please return JSON.: lookup contract is deterministic
511
+ PASS bounded Fable lookup: tier router exits successfully
512
+ PASS bounded Fable lookup: structured contract exists
513
+ PASS bounded Fable lookup: contract validates (no errors)
514
+ PASS Explain fable on sonnet and please return only JSON.: lookup remains a bounded Tier 1 operation
515
+ PASS Explain fable on sonnet and please return only JSON.: lookup selects direct-single before loading references
516
+ PASS lookup does not delegate
517
+ PASS Explain fable on sonnet and please return only JSON.: lookup selects only compact reference
518
+ PASS Explain fable on sonnet and please return only JSON.: lookup omits unrelated keyword guides
519
+ PASS Explain fable on sonnet and please return only JSON.: lookup does not send agent to selector implementation
520
+ PASS Explain fable on sonnet and please return only JSON.: lookup contract is deterministic
521
+ PASS bounded Fable lookup: tier router exits successfully
522
+ PASS bounded Fable lookup: structured contract exists
523
+ PASS bounded Fable lookup: contract validates (no errors)
524
+ PASS 請說明 fable on sonnet,請只回傳 JSON。: lookup remains a bounded Tier 1 operation
525
+ PASS 請說明 fable on sonnet,請只回傳 JSON。: lookup selects direct-single before loading references
526
+ PASS lookup does not delegate
527
+ PASS 請說明 fable on sonnet,請只回傳 JSON。: lookup selects only compact reference
528
+ PASS 請說明 fable on sonnet,請只回傳 JSON。: lookup omits unrelated keyword guides
529
+ PASS 請說明 fable on sonnet,請只回傳 JSON。: lookup does not send agent to selector implementation
530
+ PASS 請說明 fable on sonnet,請只回傳 JSON。: lookup contract is deterministic
531
+ PASS bounded Fable lookup: tier router exits successfully
532
+ PASS bounded Fable lookup: structured contract exists
533
+ PASS bounded Fable lookup: contract validates (no errors)
534
+ PASS Explain what “run fable on sonnect” means; return only JSON.: lookup remains a bounded Tier 1 operation
535
+ PASS Explain what “run fable on sonnect” means; return only JSON.: lookup selects direct-single before loading references
536
+ PASS lookup does not delegate
537
+ PASS Explain what “run fable on sonnect” means; return only JSON.: lookup selects only compact reference
538
+ PASS Explain what “run fable on sonnect” means; return only JSON.: lookup omits unrelated keyword guides
539
+ PASS Explain what “run fable on sonnect” means; return only JSON.: lookup does not send agent to selector implementation
540
+ PASS Explain what “run fable on sonnect” means; return only JSON.: lookup contract is deterministic
541
+ PASS bounded Fable lookup: tier router exits successfully
542
+ PASS bounded Fable lookup: structured contract exists
543
+ PASS bounded Fable lookup: contract validates (no errors)
544
+ PASS Explain what ‘use fable on opus’ means.: lookup remains a bounded Tier 1 operation
545
+ PASS Explain what ‘use fable on opus’ means.: lookup selects direct-single before loading references
546
+ PASS lookup does not delegate
547
+ PASS Explain what ‘use fable on opus’ means.: lookup selects only compact reference
548
+ PASS Explain what ‘use fable on opus’ means.: lookup omits unrelated keyword guides
549
+ PASS Explain what ‘use fable on opus’ means.: lookup does not send agent to selector implementation
550
+ PASS Explain what ‘use fable on opus’ means.: lookup contract is deterministic
551
+ PASS bounded Fable lookup: tier router exits successfully
552
+ PASS bounded Fable lookup: structured contract exists
553
+ PASS bounded Fable lookup: contract validates (no errors)
554
+ PASS Explain fable on sonnet; no model switching.: lookup remains a bounded Tier 1 operation
555
+ PASS Explain fable on sonnet; no model switching.: lookup selects direct-single before loading references
556
+ PASS lookup does not delegate
557
+ PASS Explain fable on sonnet; no model switching.: lookup selects only compact reference
558
+ PASS Explain fable on sonnet; no model switching.: lookup omits unrelated keyword guides
559
+ PASS Explain fable on sonnet; no model switching.: lookup does not send agent to selector implementation
560
+ PASS Explain fable on sonnet; no model switching.: lookup contract is deterministic
561
+ PASS bounded Fable lookup: tier router exits successfully
562
+ PASS bounded Fable lookup: structured contract exists
563
+ PASS bounded Fable lookup: contract validates (no errors)
564
+ PASS Explain fable on sonnet; don't switch model or delegate.: lookup remains a bounded Tier 1 operation
565
+ PASS Explain fable on sonnet; don't switch model or delegate.: lookup selects direct-single before loading references
566
+ PASS lookup does not delegate
567
+ PASS Explain fable on sonnet; don't switch model or delegate.: lookup selects only compact reference
568
+ PASS Explain fable on sonnet; don't switch model or delegate.: lookup omits unrelated keyword guides
569
+ PASS Explain fable on sonnet; don't switch model or delegate.: lookup does not send agent to selector implementation
570
+ PASS Explain fable on sonnet; don't switch model or delegate.: lookup contract is deterministic
571
+ PASS bounded Fable lookup: tier router exits successfully
572
+ PASS bounded Fable lookup: structured contract exists
573
+ PASS bounded Fable lookup: contract validates (no errors)
574
+ PASS Explain fable on sonnet; no stages and no delegation.: lookup remains a bounded Tier 1 operation
575
+ PASS Explain fable on sonnet; no stages and no delegation.: lookup selects direct-single before loading references
576
+ PASS lookup does not delegate
577
+ PASS Explain fable on sonnet; no stages and no delegation.: lookup selects only compact reference
578
+ PASS Explain fable on sonnet; no stages and no delegation.: lookup omits unrelated keyword guides
579
+ PASS Explain fable on sonnet; no stages and no delegation.: lookup does not send agent to selector implementation
580
+ PASS Explain fable on sonnet; no stages and no delegation.: lookup contract is deterministic
581
+ PASS bounded Fable lookup: tier router exits successfully
582
+ PASS bounded Fable lookup: structured contract exists
583
+ PASS bounded Fable lookup: contract validates (no errors)
584
+ PASS 解釋 fable on sonnet,不要委派或切換模型。: lookup remains a bounded Tier 1 operation
585
+ PASS 解釋 fable on sonnet,不要委派或切換模型。: lookup selects direct-single before loading references
586
+ PASS lookup does not delegate
587
+ PASS 解釋 fable on sonnet,不要委派或切換模型。: lookup selects only compact reference
588
+ PASS 解釋 fable on sonnet,不要委派或切換模型。: lookup omits unrelated keyword guides
589
+ PASS 解釋 fable on sonnet,不要委派或切換模型。: lookup does not send agent to selector implementation
590
+ PASS 解釋 fable on sonnet,不要委派或切換模型。: lookup contract is deterministic
591
+ PASS Fable execution boundary: tier router exits successfully
592
+ PASS Fable execution boundary: structured contract exists
593
+ PASS Fable execution boundary: contract validates (no errors)
594
+ PASS execution/macro scope preserves staged topology
595
+ PASS mixed execution never records the bounded lookup reason
596
+ PASS execution retains isolation obligation
597
+ PASS Fable execution boundary: tier router exits successfully
598
+ PASS Fable execution boundary: structured contract exists
599
+ PASS Fable execution boundary: contract validates (no errors)
600
+ PASS execution/macro scope preserves staged topology
601
+ PASS mixed execution never records the bounded lookup reason
602
+ PASS execution retains isolation obligation
603
+ PASS Fable execution boundary: tier router exits successfully
604
+ PASS Fable execution boundary: structured contract exists
605
+ PASS Fable execution boundary: contract validates (no errors)
606
+ PASS execution/macro scope preserves staged topology
607
+ PASS mixed execution never records the bounded lookup reason
608
+ PASS execution retains isolation obligation
609
+ PASS Fable execution boundary: tier router exits successfully
610
+ PASS Fable execution boundary: structured contract exists
611
+ PASS Fable execution boundary: contract validates (no errors)
612
+ PASS execution/macro scope preserves staged topology
613
+ PASS mixed execution never records the bounded lookup reason
614
+ PASS execution retains isolation obligation
615
+ PASS Fable execution boundary: tier router exits successfully
616
+ PASS Fable execution boundary: structured contract exists
617
+ PASS Fable execution boundary: contract validates (no errors)
618
+ PASS execution/macro scope preserves staged topology
619
+ PASS mixed execution never records the bounded lookup reason
620
+ PASS execution retains isolation obligation
621
+ PASS Fable execution boundary: tier router exits successfully
622
+ PASS Fable execution boundary: structured contract exists
623
+ PASS Fable execution boundary: contract validates (no errors)
624
+ PASS execution/macro scope preserves staged topology
625
+ PASS mixed execution never records the bounded lookup reason
626
+ PASS execution retains isolation obligation
627
+ PASS Fable execution boundary: tier router exits successfully
628
+ PASS Fable execution boundary: structured contract exists
629
+ PASS Fable execution boundary: contract validates (no errors)
630
+ PASS execution/macro scope preserves staged topology
631
+ PASS mixed execution never records the bounded lookup reason
632
+ PASS execution retains isolation obligation
633
+ PASS Fable execution boundary: tier router exits successfully
634
+ PASS Fable execution boundary: structured contract exists
635
+ PASS Fable execution boundary: contract validates (no errors)
636
+ PASS execution/macro scope preserves staged topology
637
+ PASS mixed execution never records the bounded lookup reason
638
+ PASS execution retains isolation obligation
639
+ PASS Fable execution boundary: tier router exits successfully
640
+ PASS Fable execution boundary: structured contract exists
641
+ PASS Fable execution boundary: contract validates (no errors)
642
+ PASS execution/macro scope preserves staged topology
643
+ PASS mixed execution never records the bounded lookup reason
644
+ PASS execution retains isolation obligation
645
+ PASS Fable execution boundary: tier router exits successfully
646
+ PASS Fable execution boundary: structured contract exists
647
+ PASS Fable execution boundary: contract validates (no errors)
648
+ PASS execution/macro scope preserves staged topology
649
+ PASS mixed execution never records the bounded lookup reason
650
+ PASS execution retains isolation obligation
651
+ PASS Fable execution boundary: tier router exits successfully
652
+ PASS Fable execution boundary: structured contract exists
653
+ PASS Fable execution boundary: contract validates (no errors)
654
+ PASS execution/macro scope preserves staged topology
655
+ PASS mixed execution never records the bounded lookup reason
656
+ PASS execution retains isolation obligation
657
+ PASS Fable execution boundary: tier router exits successfully
658
+ PASS Fable execution boundary: structured contract exists
659
+ PASS Fable execution boundary: contract validates (no errors)
660
+ PASS execution/macro scope preserves staged topology
661
+ PASS mixed execution never records the bounded lookup reason
662
+ PASS execution retains isolation obligation
663
+ PASS Fable execution boundary: tier router exits successfully
664
+ PASS Fable execution boundary: structured contract exists
665
+ PASS Fable execution boundary: contract validates (no errors)
666
+ PASS execution/macro scope preserves staged topology
667
+ PASS mixed execution never records the bounded lookup reason
668
+ PASS execution retains isolation obligation
669
+ PASS Fable execution boundary: tier router exits successfully
670
+ PASS Fable execution boundary: structured contract exists
671
+ PASS Fable execution boundary: contract validates (no errors)
672
+ PASS execution/macro scope preserves staged topology
673
+ PASS mixed execution never records the bounded lookup reason
674
+ PASS execution retains isolation obligation
675
+ PASS Fable execution boundary: tier router exits successfully
676
+ PASS Fable execution boundary: structured contract exists
677
+ PASS Fable execution boundary: contract validates (no errors)
678
+ PASS execution/macro scope preserves staged topology
679
+ PASS mixed execution never records the bounded lookup reason
680
+ PASS execution retains isolation obligation
681
+ PASS Fable execution boundary: tier router exits successfully
682
+ PASS Fable execution boundary: structured contract exists
683
+ PASS Fable execution boundary: contract validates (no errors)
684
+ PASS execution/macro scope preserves staged topology
685
+ PASS mixed execution never records the bounded lookup reason
686
+ PASS execution retains isolation obligation
687
+ PASS Fable execution boundary: tier router exits successfully
688
+ PASS Fable execution boundary: structured contract exists
689
+ PASS Fable execution boundary: contract validates (no errors)
690
+ PASS execution/macro scope preserves staged topology
691
+ PASS mixed execution never records the bounded lookup reason
692
+ PASS execution retains isolation obligation
693
+ PASS Fable execution boundary: tier router exits successfully
694
+ PASS Fable execution boundary: structured contract exists
695
+ PASS Fable execution boundary: contract validates (no errors)
696
+ PASS execution/macro scope preserves staged topology
697
+ PASS mixed execution never records the bounded lookup reason
698
+ PASS execution retains isolation obligation
699
+ PASS Fable execution boundary: tier router exits successfully
700
+ PASS Fable execution boundary: structured contract exists
701
+ PASS Fable execution boundary: contract validates (no errors)
702
+ PASS execution/macro scope preserves staged topology
703
+ PASS mixed execution never records the bounded lookup reason
704
+ PASS execution retains isolation obligation
705
+ PASS Fable execution boundary: tier router exits successfully
706
+ PASS Fable execution boundary: structured contract exists
707
+ PASS Fable execution boundary: contract validates (no errors)
708
+ PASS execution/macro scope preserves staged topology
709
+ PASS mixed execution never records the bounded lookup reason
710
+ PASS execution retains isolation obligation
711
+ PASS Fable execution boundary: tier router exits successfully
712
+ PASS Fable execution boundary: structured contract exists
713
+ PASS Fable execution boundary: contract validates (no errors)
714
+ PASS execution/macro scope preserves staged topology
715
+ PASS mixed execution never records the bounded lookup reason
716
+ PASS execution retains isolation obligation
717
+ PASS Fable execution boundary: tier router exits successfully
718
+ PASS Fable execution boundary: structured contract exists
719
+ PASS Fable execution boundary: contract validates (no errors)
720
+ PASS execution/macro scope preserves staged topology
721
+ PASS mixed execution never records the bounded lookup reason
722
+ PASS execution retains isolation obligation
723
+ PASS Fable execution boundary: tier router exits successfully
724
+ PASS Fable execution boundary: structured contract exists
725
+ PASS Fable execution boundary: contract validates (no errors)
726
+ PASS execution/macro scope preserves staged topology
727
+ PASS mixed execution never records the bounded lookup reason
728
+ PASS execution retains isolation obligation
729
+ PASS Fable execution boundary: tier router exits successfully
730
+ PASS Fable execution boundary: structured contract exists
731
+ PASS Fable execution boundary: contract validates (no errors)
732
+ PASS execution/macro scope preserves staged topology
733
+ PASS mixed execution never records the bounded lookup reason
734
+ PASS execution retains isolation obligation
735
+ PASS Fable execution boundary: tier router exits successfully
736
+ PASS Fable execution boundary: structured contract exists
737
+ PASS Fable execution boundary: contract validates (no errors)
738
+ PASS execution/macro scope preserves staged topology
739
+ PASS mixed execution never records the bounded lookup reason
740
+ PASS execution retains isolation obligation
741
+ PASS Fable execution boundary: tier router exits successfully
742
+ PASS Fable execution boundary: structured contract exists
743
+ PASS Fable execution boundary: contract validates (no errors)
744
+ PASS execution/macro scope preserves staged topology
745
+ PASS mixed execution never records the bounded lookup reason
746
+ PASS execution retains isolation obligation
747
+ PASS Fable execution boundary: tier router exits successfully
748
+ PASS Fable execution boundary: structured contract exists
749
+ PASS Fable execution boundary: contract validates (no errors)
750
+ PASS execution/macro scope preserves staged topology
751
+ PASS mixed execution never records the bounded lookup reason
752
+ PASS execution retains isolation obligation
753
+ PASS Fable execution boundary: tier router exits successfully
754
+ PASS Fable execution boundary: structured contract exists
755
+ PASS Fable execution boundary: contract validates (no errors)
756
+ PASS execution/macro scope preserves staged topology
757
+ PASS mixed execution never records the bounded lookup reason
758
+ PASS execution retains isolation obligation
759
+ PASS Fable execution boundary: tier router exits successfully
760
+ PASS Fable execution boundary: structured contract exists
761
+ PASS Fable execution boundary: contract validates (no errors)
762
+ PASS execution/macro scope preserves staged topology
763
+ PASS mixed execution never records the bounded lookup reason
764
+ PASS execution retains isolation obligation
765
+ PASS Fable execution boundary: tier router exits successfully
766
+ PASS Fable execution boundary: structured contract exists
767
+ PASS Fable execution boundary: contract validates (no errors)
768
+ PASS execution/macro scope preserves staged topology
769
+ PASS mixed execution never records the bounded lookup reason
770
+ PASS execution retains isolation obligation
771
+ PASS Fable execution boundary: tier router exits successfully
772
+ PASS Fable execution boundary: structured contract exists
773
+ PASS Fable execution boundary: contract validates (no errors)
774
+ PASS execution/macro scope preserves staged topology
775
+ PASS mixed execution never records the bounded lookup reason
776
+ PASS execution retains isolation obligation
777
+ PASS explicit strategy override: tier router exits successfully
778
+ PASS explicit strategy override: structured contract exists
779
+ PASS explicit strategy override: contract validates (no errors)
780
+ PASS explicit user strategy overrides derived Tier 3 topology
781
+ PASS explicit strategy override is recorded
782
+ PASS parallel prohibition: tier router exits successfully
783
+ PASS parallel prohibition: structured contract exists
784
+ PASS parallel prohibition: contract validates (no errors)
785
+ PASS explicit no-parallel prohibition serializes derived parallel work
786
+ PASS parallel prohibition is a visible reduced fallback
787
+ PASS parallel prohibition reason is recorded
788
+ PASS parallel capability fallback: tier router exits successfully
789
+ PASS parallel capability fallback: structured contract exists
790
+ PASS parallel capability fallback: contract validates (no errors)
791
+ PASS missing parallel capability serializes to fable-staged
792
+ PASS parallel capability fallback is visibly serialized
793
+ PASS missing parallel capability reason is recorded
794
+ PASS concurrency budget fallback: tier router exits successfully
795
+ PASS concurrency budget fallback: structured contract exists
796
+ PASS concurrency budget fallback: contract validates (no errors)
797
+ PASS concurrency=1 serializes fable-parallel
798
+ PASS concurrency budget reason is recorded
799
+ PASS workspace state block: tier router exits successfully
800
+ PASS workspace state block: structured contract exists
801
+ PASS workspace state block: contract validates (no errors)
802
+ PASS workspace requirement remains explicit when state is unavailable
803
+ PASS missing durable state blocks rather than silently downgrades
804
+ PASS workspace block reason is recorded
805
+ PASS runtime model capability advisory: tier router exits successfully
806
+ PASS runtime model capability advisory: structured contract exists
807
+ PASS runtime model capability advisory: contract validates (no errors)
808
+ PASS opus remains a behavior-profile alias
809
+ PASS runtime model availability does not block Fable profile selection
810
+ PASS router no longer treats a branded model as a Fable requirement
811
+ PASS actionGate capability block: tier router exits successfully
812
+ PASS actionGate capability block: structured contract exists
813
+ PASS actionGate capability block: contract validates (no errors)
814
+ PASS actionGate requirement survives missing hook capability
815
+ PASS known missing action-gate hook blocks side effect
816
+ PASS missing hook capability is visible
817
+ PASS overlapping keywords deduplicate normalized security input signals
818
+ PASS keyword matching does not print a document path
819
+ PASS keyword matching no longer pushes guide lists
820
+ PASS profile lookup clause splitting keeps filenames and dotted versions intact
821
+ PASS profile lookup clause splitting recognizes a no-space output clause boundary
822
+ PASS same normalized input produces byte-equivalent structured contracts
823
+ PASS degraded routing: tier router exits successfully
824
+ PASS degraded routing: structured contract exists
825
+ PASS degraded routing: contract validates (no errors)
826
+ PASS invalid routing config emits routingStatus=degraded
827
+ PASS invalid routing config never silently becomes Tier 1
828
+ PASS degraded routing does not select a strategy
829
+ PASS degraded strategy deferral is explicit
830
+ PASS kernel consumes selected/deferred structured contract successfully
831
+ PASS kernel emits the Phase 2 workflow-plan checkpoint
832
+ PASS kernel exposes deferred unclassified selection
833
+ PASS kernel does not expose a silent Tier 1 fallback for unmatched prompts
834
+ PASS host notification persistence failure stays fail-open
835
+ PASS host notification remains a routing no-op when state persistence fails
836
+ PASS host notification persistence failure remains visible as a reminder
837
+ PASS kernel consumes strategy from structured plan
838
+ PASS kernel prints dynamic semantic plan obligations
839
+ PASS kernel prints the user-visible status invariant
840
+ PASS kernel prints the canonical mandatory user-visible status contract
841
+ PASS kernel identifies knowledge signals as planning inputs
842
+ PASS initial router output waits for an active step before disclosing a skill path
843
+ PASS legacy read-every-suggestion invariant is removed
844
+ PASS retained workflow fixture routes successfully
845
+ PASS new selected workflow exposes its planning step
846
+ PASS retained workflow records typed requirements before execution
847
+ PASS retained workflow starts at its first typed step
848
+ PASS start returns concrete active binding and step disposition commands
849
+ PASS retained workflow advances to its active behavior-change step
850
+ PASS host notification retains the active workflow
851
+ PASS retained notification preserves only the active step and its binding
852
+ PASS retained notification surfaces the binding and step disposition syntax
853
+ PASS retained notification hides future-step bindings
854
+ PASS host notification avoids repeating the full workflow contract
855
+ PASS host notification does not replace or advance workflow state
856
+ PASS harness-everything/schemas/router-task-shape.schema.json is valid JSON Schema metadata
857
+ PASS harness-everything/schemas/router-workflow-plan.schema.json is valid JSON Schema metadata
858
+
859
+ PASS: router workflow plan phase 2 (0 failures)
860
+ PASS workflow-plan structured contract
861
+ === Workflow Guidance Contract ===
862
+ PASS harness-everything/scripts/kernel-router.js parses as valid JavaScript
863
+ PASS hooks/scripts/workflow-gate.js parses as valid JavaScript
864
+ PASS hooks/scripts/workflow-stop-gate.js parses as valid JavaScript
865
+ PASS hooks/scripts/workflow-disposition.js parses as valid JavaScript
866
+ PASS hooks/scripts/state-persist.js parses as valid JavaScript
867
+ PASS hooks/scripts/rule-of-3.js parses as valid JavaScript
868
+ PASS hooks/scripts/rule-of-3-tracker.js parses as valid JavaScript
869
+ PASS iteration remains a MAY planning hint rather than blocking
870
+ PASS revision remains a MAY planning hint rather than blocking
871
+ PASS replan remains a MAY planning hint rather than blocking
872
+ PASS worker-acquire remains a MAY planning hint rather than blocking
873
+ PASS mutation probes reserve no capacity
874
+ PASS mutation probe registration is a no-op
875
+ PASS reset-budget API is retired compatibility only
876
+ PASS reset-budget is no longer a controller command
877
+ PASS runtime contains no mutation-probe lock
878
+ PASS runtime contains no budget-exhausted transition
879
+ PASS workflow gate has no probe/budget enforcement
880
+ PASS workflow gate emits reminders
881
+ PASS Rule of 3 uses fixed third-failure boundary
882
+ PASS Rule of 3 has no second-stage permanent hard lock
883
+ PASS Rule of 3 has no category-specific thresholds
884
+ PASS OpenCode has no permanent hard-lock action
885
+ PASS obsolete mutation-probe PermissionDenied hook is removed
886
+ PASS Fable independent verifier accepts edits older than verifier evidence
887
+ PASS Fable independent verifier is invalidated by newer handoff shell-edit evidence
888
+
889
+ PASS: workflow semantic contract mechanics (0 failures)
890
+ PASS workflow execution budget contract
891
+ === Router Phase 2 Explicit-Parallel Safety ===
892
+ PASS unproven explicit parallel request does not crash routing
893
+ PASS unproven explicit parallel request emits a contract
894
+ PASS serialized explicit request validates (no errors)
895
+ PASS original explicit fable-parallel request remains recorded
896
+ PASS unproven parallel request serializes to fable-staged
897
+ PASS unproven parallel request exposes reduced fallback
898
+ PASS unproven parallel request exposes serialized fallback mode
899
+ PASS unproven parallel request records precondition reason
900
+ PASS overlapping explicit parallel request does not crash routing
901
+ PASS overlapping explicit parallel request emits a contract
902
+ PASS overlap evidence is machine-visible
903
+ PASS explicit parallel overlap serializes to staged
904
+ PASS overlap serialization has a deterministic reason
905
+ PASS validated explicit parallel request routes successfully
906
+ PASS validated explicit parallel request emits a contract
907
+ PASS validated explicit parallel contract passes (no errors)
908
+ PASS validated explicit parallel request keeps fable-parallel
909
+ PASS validated explicit parallel request enables parallelism
910
+ PASS validated explicit parallel request needs no fallback
911
+ PASS contradictory explicit request remains representable
912
+ PASS contradictory explicit request emits a contract
913
+ PASS blocked contradiction is still a valid audit contract (no errors)
914
+ PASS explicit strategy/prohibition conflict is blocked
915
+ PASS explicit contradiction records its reason
916
+
917
+ PASS: router phase 2 explicit-parallel safety (0 failures)
918
+ PASS explicit parallel safety contract
919
+ === #85 Phase 3 Workflow Plan Consumers ===
920
+ PASS fixture selects fable-parallel
921
+ PASS fixture selects fable-staged
922
+ PASS fixture selects fable-multi-agent-workspace
923
+ PASS planId is deterministic and content-addressed
924
+ PASS parallel plan emits dependency-safe ready batches
925
+ PASS run manifest retains maxWorkers as an advisory planning hint
926
+ PASS run-scoped stage contract is written
927
+ PASS downstream stage has its own contract
928
+ PASS only dependency-ready Fable stages expose bindings
929
+ PASS unknown required binding remains visible and unresolved
930
+ PASS active optional reference path appears only on its ready stage
931
+ PASS future-stage binding paths stay hidden until dependencies pass
932
+ PASS a stage marked pass with unresolved bindings does not activate dependents
933
+ PASS downstream bindings appear only after every dependency passes
934
+ PASS current stage receives only its own declared binding path
935
+ PASS same router plan shares deterministic planId across executions
936
+ PASS same stageIds in concurrent runs never share mutable contract paths
937
+ PASS ready set is not hard-chunked by the advisory maxWorkers hint
938
+ PASS all dependency-ready stages remain dispatchable
939
+ PASS advisory worker guidance preserves every ready stage
940
+ PASS fable-staged serializes otherwise independent stages
941
+ PASS unknown dependency is rejected (broken: unresolved dependency missing)
942
+ PASS dependency cycle is rejected (cyclic stage dependency detected at a)
943
+ PASS binding paths reject traversal outside the repository (writeSet path escapes or ambiguously names repository scope: ../outside.md)
944
+ PASS binding paths reject Windows drive-relative names (writeSet paths must be repository-relative: C:outside.md)
945
+ PASS a stage binding cannot be both required and optional (duplicate-binding: binding cannot be both required and optional: same)
946
+ PASS parallel write-set overlap rejects dispatch (parallel write-set overlap: a:src/auth conflicts with b:src/auth/token.js)
947
+ PASS scope matcher accepts descendants of a declared path
948
+ PASS scope matcher uses path boundaries, not string prefixes
949
+ PASS workspace consumer preserves selected roles/provenance
950
+ PASS workspace consumer preserves existing memory index
951
+ PASS workspace handoff is correlated to router planId
952
+ PASS workspace handoff records shared runId
953
+ PASS router does not take ownership of role selection
954
+ PASS exact correlated stage check passes (no stderr)
955
+ PASS contract-test resolves exactly one run-scoped stage contract
956
+ PASS stage contract links run-scoped verification evidence
957
+ PASS verification evidence correlates plan/run/stage
958
+ PASS ambiguous same-command correlation is reported without blocking
959
+ PASS ambiguous-a remains unmodified after ambiguous check
960
+ PASS ambiguous-b remains unmodified after ambiguous check
961
+ PASS scope guard captures machine-readable write-set snapshot
962
+ PASS declared in-scope worker edit is attributed and accepted
963
+ PASS next burst starts from rolled-forward baseline
964
+ PASS undeclared worker edit is reported without blocking
965
+ PASS Fable contract documentation requires dependency/write-set declarations
966
+ PASS Fable orchestrator consumes structured plan and correlation ids
967
+ PASS workspace no longer independently chooses topology from task size
968
+
969
+ PASS: #85 Phase 3 workflow-plan consumers (0 failures)
970
+ PASS workflow-plan consumers
971
+ PASS fable-staged serializes overlapping writers instead of rejecting them
972
+ PASS scope matcher accepts already-normalized paths
973
+ PASS a cross-session check is reported without resolving the run contract
974
+ PASS cross-session check leaves the target contract unmodified
975
+
976
+ PASS: #85 Phase 3 edge contracts (0 failures)
977
+ PASS workflow-plan consumer edge contracts
978
+ === #85 Phase 4 Bounded Parallel / Ensemble / Memory Evidence ===
979
+ PASS eligible high-uncertainty comparison routes successfully
980
+ PASS kernel exposes a bounded ensemble modifier
981
+ PASS kernel exposes disagreement-preserving synthesis
982
+ PASS kernel requires an independent ensemble verifier
983
+ PASS kernel exposes preserve-disagreement as a required invariant
984
+ PASS creative negative control routes successfully
985
+ PASS creative generation never adds ensemble-review
986
+ PASS creative exclusion is machine-visible
987
+ PASS mechanical negative control routes successfully
988
+ PASS mechanical bulk work never adds ensemble-review
989
+ PASS mechanical exclusion is machine-visible
990
+ PASS ensemble prohibition routes successfully
991
+ PASS explicit ensemble prohibition wins
992
+ PASS ensemble prohibition reason is visible
993
+ PASS ensemble task-shape detector records high-stakes comparable disagreement
994
+ PASS known unavailable subagents suppress ensemble modifier
995
+ PASS ensemble capability fallback is explicit
996
+ PASS read-only Phase 4 fixture uses Phase 3 fable-parallel topology
997
+ PASS ensemble bound has one deterministic router policy source
998
+ PASS read-only fixture dispatches both independent stages in one validated batch
999
+ PASS disjoint-write fixture dispatches in one validated batch
1000
+ PASS independent verifier can accept the strict-majority position
1001
+ PASS accepted synthesis still preserves the minority position
1002
+ PASS minority evidence remains attached to the synthesis
1003
+ PASS ensemble cannot claim improvement without paired #71 evidence
1004
+ PASS measurement envelope points to existing benchmark/telemetry owners
1005
+ PASS correctness and execution-cost metrics remain separate
1006
+ PASS well-formed paired evidence can explicitly unlock an improvement claim
1007
+ PASS incomplete paired evidence never unlocks an improvement claim
1008
+ PASS majority vote cannot override an objective verification failure
1009
+ PASS same model/prompt/evidence fingerprint is rejected as fake diversity
1010
+ PASS same-pool or non-independent verifier cannot gate ensemble output
1011
+ PASS ensemble synthesis writes run-scoped correlated evidence
1012
+ PASS ensemble evidence correlates planId and runId
1013
+ PASS memory screening fixture initializes a git workspace
1014
+ PASS ordinary workflow keeps memory.write=none
1015
+ PASS memory.write=none does not issue a write capability
1016
+ PASS forged/free-form authorization cannot bypass memory.write=none
1017
+ PASS explicit memory persistence route succeeds
1018
+ PASS explicit persistence route authorizes only self-evolve durable write
1019
+ PASS router emits a single-use workflow/session-bound memory capability
1020
+ PASS authorized reusable rule passes screening and persists
1021
+ PASS authorized memory rule is persisted in the resolved workspace
1022
+ PASS durable write creates machine-readable memory-index.json
1023
+ PASS persisted memory records source provenance
1024
+ PASS persisted memory records a deterministic content fingerprint
1025
+ PASS persisted memory records screening disposition
1026
+ PASS metadata records trusted session/workflow writer provenance
1027
+ PASS metadata records runtime-issued writer role/disposition
1028
+ PASS retention policy is persisted without deleting the human rule
1029
+ PASS single-use memory capability cannot authorize a second write
1030
+ PASS scoped retrieval returns relevant active memory as untrusted data
1031
+ PASS retrieval exposes the authority boundary explicitly
1032
+ PASS unrelated task memory is excluded even when another scope dimension matches
1033
+ PASS retrieval without task/requirement/role context returns no memory
1034
+ PASS expired memory is excluded from default scoped retrieval
1035
+ PASS expired memory remains auditable on disk and is not auto-deleted
1036
+ PASS stale memory is excluded but retained
1037
+ PASS workspace topology issues a proposal-only capability
1038
+ PASS memory.write=propose creates a reviewable candidate
1039
+ PASS proposal-only path does not mutate durable RULES.md
1040
+ PASS concurrent session capabilities independently authorize their own proposals
1041
+ PASS candidate paths remain isolated by runtime session
1042
+ PASS one session cannot reuse a consumed capability to authorize another pending write
1043
+ PASS likely paraphrase is retained as a review candidate instead of silently deleting or duplicating it
1044
+ PASS paraphrase review does not silently mutate durable memory
1045
+ PASS secret-like token is rejected before persistence
1046
+ PASS rejected secret-like token never reaches RULES.md or durable index
1047
+ PASS prompt-injection-shaped memory is rejected before persistence
1048
+ PASS rejected prompt injection never reaches RULES.md
1049
+ PASS plugin mirror matches canonical: harness-everything/scripts/ensemble-policy.js
1050
+ PASS plugin mirror matches canonical: harness-everything/scripts/kernel-router.js
1051
+ PASS plugin mirror matches canonical: harness-everything/schemas/router-workflow-plan.schema.json
1052
+ PASS plugin mirror matches canonical: fable-mode/scripts/ensemble-review.js
1053
+ PASS plugin mirror matches canonical: self-evolve/scripts/persist-memory.js
1054
+ PASS plugin mirror matches canonical: multi-agent-workspace/scripts/index_memory.js
1055
+
1056
+ PASS: #85 Phase 4 bounded parallel / ensemble / memory evidence (0 failures)
1057
+ PASS phase 4 ensemble/memory evidence
1058
+ === #141 Self-Evolve Closed Loop Phase 1-4 Mechanism ===
1059
+ PASS Rule-of-3 recovery tracker stays non-blocking
1060
+ PASS zoom-out followed by confirmed success emits one lesson candidate
1061
+ PASS runtime recovery enters observed -> proposed lifecycle
1062
+ PASS runtime candidate excludes raw command/output contents
1063
+ PASS automatic opportunity detection never mutates durable memory
1064
+ PASS Rule-of-3 linear recovery is not misrepresented as counterfactual replay
1065
+ PASS non-replayable candidate requires paired/later evidence and makes no improvement claim
1066
+ PASS inconclusive runtime lesson cannot be promoted
1067
+ PASS verifier fixture selects Fable staged workflow
1068
+ PASS first verifier failure remains authoritative without blocking the hook
1069
+ PASS failed verifier evidence remains authoritative in the stage contract
1070
+ PASS same correlated verifier can later pass after correction
1071
+ PASS verifier fail -> pass transition emits one lesson candidate
1072
+ PASS verifier candidate retains structured plan/run/stage evidence only
1073
+ PASS verifier candidate links fail and pass source event identities
1074
+ PASS objective fail->pass evidence can accept a candidate for governed memory promotion
1075
+ PASS accepted memory eligibility still does not claim behavioral improvement
1076
+ PASS router issues #134 capability for explicit lesson promotion
1077
+ PASS accepted candidate persists only through #134 authorized memory path
1078
+ PASS candidate lifecycle records governed persistence
1079
+ PASS candidate distinguishes originating recovery session from authorized promotion session
1080
+ PASS durable memory retains originating lesson-candidate provenance
1081
+ PASS durable memory records the actual #134 promotion writer provenance
1082
+ PASS later relevant task retrieves the accepted lesson
1083
+ PASS retrieval is correlated to originating lesson candidate
1084
+ PASS retrieved lesson remains untrusted context
1085
+ PASS unrelated task does not receive lesson merely because it exists
1086
+ PASS later retrieval can advance the candidate lifecycle with evidence
1087
+ PASS later outcome evidence can advance a retrieved lesson to validated
1088
+ PASS same runtime evidence is idempotent and cannot duplicate a lesson candidate
1089
+ PASS secret/injection screening rejects unsafe lesson before any promotion
1090
+ PASS rejected lesson never mutates durable memory
1091
+ PASS negative-control anchors require both runtime emitters
1092
+ PASS runtime recovery hooks cannot directly persist memory
1093
+ PASS self-evolve lifecycle emits telemetry event: learning_opportunity
1094
+ PASS self-evolve lifecycle emits telemetry event: lesson_proposed
1095
+ PASS self-evolve lifecycle emits telemetry event: lesson_screened
1096
+ PASS self-evolve lifecycle emits telemetry event: lesson_evaluated
1097
+ PASS self-evolve lifecycle emits telemetry event: lesson_accepted
1098
+ PASS self-evolve lifecycle emits telemetry event: lesson_rejected
1099
+ PASS self-evolve lifecycle emits telemetry event: lesson_inconclusive
1100
+ PASS self-evolve lifecycle emits telemetry event: lesson_persisted
1101
+ PASS self-evolve lifecycle emits telemetry event: lesson_retrieved
1102
+ PASS self-evolve lifecycle emits telemetry event: lesson_validated
1103
+ PASS telemetry report exposes opportunity -> disposition -> persisted -> retrieved -> validated funnel
1104
+ PASS lesson telemetry excludes generalized rules, evidence refs, and raw runtime output
1105
+ PASS versioned lesson schema covers lifecycle and trigger vocabulary
1106
+ PASS plugin mirror matches canonical: hooks/scripts/lib/learning-opportunity.js
1107
+ PASS plugin mirror matches canonical: hooks/scripts/rule-of-3-tracker.js
1108
+ PASS plugin mirror matches canonical: hooks/scripts/contract-test.js
1109
+ PASS plugin mirror matches canonical: self-evolve/scripts/lesson-candidate.js
1110
+ PASS plugin mirror matches canonical: multi-agent-workspace/scripts/index_memory.js
1111
+ PASS plugin mirror matches canonical: self-evolve/schemas/lesson-candidate.schema.json
1112
+
1113
+ PASS: #141 self-evolve closed loop phase 1-4 mechanism (0 failures)
1114
+ PASS self-evolve closed loop phase 1-3
1115
+ === Issue #85 Phase 5 — Pre-action gate ===
1116
+ PASS production action-gate rule table loads without fallback
1117
+ PASS production rule table is non-empty and keeps the destructive baseline
1118
+ PASS rule table contains git-force-push
1119
+ PASS rule table contains git-reset-hard
1120
+ PASS rule table contains git-clean-force-delete
1121
+ PASS rule table contains recursive-delete
1122
+ PASS rule table contains powershell-recursive-force-delete
1123
+ PASS rule table contains sql-destructive-ddl
1124
+ PASS rule table contains package-publish
1125
+ PASS rule table contains github-release-create
1126
+ PASS rule table contains production-deploy
1127
+ PASS Claude force-push defers to the host permission flow without forcing a prompt
1128
+ PASS deferred decision still names the matched rule
1129
+ PASS matched Claude action is audited as deferred-to-host
1130
+ PASS audit records matched rule
1131
+ PASS audit hashes the exact command payload
1132
+ PASS always-ask policy restores the forced Claude prompt
1133
+ PASS ask decision uses Claude PreToolUse hookSpecificOutput
1134
+ PASS ask reason names the matched rule
1135
+ PASS always-ask action is audited as pending-approval
1136
+ PASS git status passes untouched
1137
+ PASS safe unmatched command creates no gate audit record
1138
+ PASS permission_mode=default defers to the host without a forced prompt
1139
+ PASS audit records permission_mode=default
1140
+ PASS permission_mode=acceptEdits defers to the host without a forced prompt
1141
+ PASS audit records permission_mode=acceptEdits
1142
+ PASS permission_mode=plan defers to the host without a forced prompt
1143
+ PASS audit records permission_mode=plan
1144
+ PASS permission_mode=auto defers to the host without a forced prompt
1145
+ PASS audit records permission_mode=auto
1146
+ PASS permission_mode=dontAsk defers to the host without a forced prompt
1147
+ PASS audit records permission_mode=dontAsk
1148
+ PASS permission_mode=bypassPermissions defers to the host without a forced prompt
1149
+ PASS audit records permission_mode=bypassPermissions
1150
+ PASS permission_mode=missing defers to the host without a forced prompt
1151
+ PASS audit records permission_mode=missing
1152
+ PASS command classification gates destructive action even when router hint says not required
1153
+ PASS router actionGate hint is recorded without controlling enforcement
1154
+ PASS safe command is not gated solely because prompt router predicted risk
1155
+ PASS structured MCP delete is gated before execution
1156
+ PASS audit retains normalized structured action identity
1157
+ PASS structured action audit binds to exact payload hash
1158
+ PASS structured action audit does not persist raw secret arguments
1159
+ PASS read-only MCP fixture passes without a false gate
1160
+ PASS obvious structured mutation is classified from tool identity
1161
+ PASS non-shell local-function destructive fixture uses the same structured gate
1162
+ PASS unknown structured action fails closed when workflow requires a gate
1163
+ PASS unknown structured action is not fabricated as destructive without a gate requirement
1164
+ PASS changed structured payload cannot reuse a prior approval/audit decision
1165
+ PASS PowerShell recursive force delete outside scratch is gated
1166
+ PASS PowerShell recursive force delete inside session scratch is exempt
1167
+ PASS rm -rf outside scratch is gated
1168
+ PASS rm -rf inside OS temp is exempt
1169
+ PASS git reset --hard HEAD matches git-reset-hard
1170
+ PASS git clean -fd matches git-clean-force-delete
1171
+ PASS psql -c "DROP TABLE users" matches sql-destructive-ddl
1172
+ PASS npm publish matches package-publish
1173
+ PASS gh release create v1.2.3 matches github-release-create
1174
+ PASS npm run deploy matches production-deploy
1175
+ PASS host without verified ask-style decision blocks with exit 2
1176
+ PASS non-ask host block reason names the matched rule
1177
+ PASS non-ask host block is audited as rejected
1178
+ PASS internal action-gate error on Claude defers to the host instead of allowing or forcing a prompt
1179
+ PASS internal error is shown to the user as a systemMessage without a permission decision
1180
+ PASS internal error on Claude is audited as deferred-to-host
1181
+ PASS internal action-gate error under always-ask fails closed to ask
1182
+ PASS internal error on host without ask fails closed to block
1183
+ PASS missing/invalid rule table visibly falls back to built-in defaults
1184
+ PASS built-in fallback still classifies and audits destructive action
1185
+ PASS fallback degradation is shown to the user as a systemMessage
1186
+ PASS valid empty rule table does not silently activate built-in defaults
1187
+ PASS empty-table mutation control disables detection, proving production non-empty assertion is meaningful
1188
+ PASS PostToolUse closes a deferred payload as executed
1189
+ PASS executed audit keeps exact approved payload hash
1190
+ PASS PostToolUseFailure records attempted execution without pretending success
1191
+ PASS post-tool payload mismatch is never accepted as the approved command
1192
+ PASS Stop closes unexecuted deferred and pending payloads
1193
+ PASS unexecuted deferred payload is audited as rejected
1194
+ PASS unexecuted always-ask approval is audited as rejected
1195
+ PASS hook process returns no decision for a matched command under the default policy
1196
+ PASS hook process audits the deferred command with its permission mode
1197
+ PASS HARNESS_ACTION_GATE_POLICY=always-ask makes the hook process emit ask
1198
+ PASS Claude hook manifest wires action-gate to shell and MCP pre-action surfaces
1199
+ PASS Claude hook manifest audits successful tool execution
1200
+ PASS Claude hook manifest audits failed tool execution
1201
+ PASS Claude hook manifest closes unresolved approvals on Stop
1202
+ PASS OpenAI plugin preserves the attribution-aware Codex shell action-gate adapter
1203
+ PASS OpenAI plugin packages an isolated structured MCP pre-action adapter without widening unrelated hooks
1204
+ PASS OpenAI plugin packages an isolated structured MCP post-action audit adapter
1205
+ PASS Codex plugin does not declare unsupported PostToolUseFailure lifecycle event
1206
+ PASS Codex plugin infers action-gate outcome from supported PostToolUse
1207
+ PASS Codex PostToolUse maps zero exit code to success
1208
+ PASS Codex PostToolUse maps non-zero exit code to failure
1209
+ PASS Codex PostToolUse conservatively recognizes failure stderr without exit code
1210
+ PASS OpenAI plugin closes pending approvals at Stop
1211
+ PASS canonical and plugin action-gate rule tables are byte-identical
1212
+ PASS OpenAI plugin packages action-gate runtime
1213
+
1214
+ PASS: action-gate phase 5 (0 failures)
1215
+ PASS phase 5 pre-action gate
1216
+ Action-gate platform evidence boundary verified.
1217
+ PASS phase 5 platform evidence boundary
1218
+ === Cross-Agent Telemetry (#83) ===
1219
+ PASS telemetry fixture initializes git workspace
1220
+ PASS Claude-compatible skill pre hook is fail-open
1221
+ PASS Claude-compatible skill post hook is fail-open
1222
+ PASS existing state-persist hook remains successful with telemetry observer
1223
+ PASS Stop closes active telemetry window without gating task
1224
+ PASS skill invoke/load, tool observation, and completion are retained as four normalized events
1225
+ PASS all retained JSONL events satisfy the normalized event contract
1226
+ PASS raw host session identity is replaced by local hash
1227
+ PASS telemetry never stores prompt/tool argument/output secret fixture
1228
+ PASS telemetry never stores absolute workspace paths
1229
+ PASS telemetry event payload has no raw command field
1230
+ PASS host-provided tool duration is attributed separately while skill is active
1231
+ PASS active window is recorded independently from skill load/tool time
1232
+ PASS skill load duration has its own metric
1233
+ PASS aggregation groups events by host/skill
1234
+ PASS aggregation retains invocation and attributed-tool counts
1235
+ PASS report documents active-window semantics instead of calling it runtime
1236
+ PASS lesson lifecycle telemetry accepts privacy-safe event: learning_opportunity
1237
+ PASS lesson lifecycle telemetry accepts privacy-safe event: lesson_proposed
1238
+ PASS lesson lifecycle telemetry accepts privacy-safe event: lesson_screened
1239
+ PASS lesson lifecycle telemetry accepts privacy-safe event: lesson_evaluated
1240
+ PASS lesson lifecycle telemetry accepts privacy-safe event: lesson_accepted
1241
+ PASS lesson lifecycle telemetry accepts privacy-safe event: lesson_persisted
1242
+ PASS lesson lifecycle telemetry accepts privacy-safe event: lesson_retrieved
1243
+ PASS lesson lifecycle events do not contaminate skill execution aggregates
1244
+ PASS report projects one correlated self-evolve opportunity -> accepted -> persisted -> retrieved funnel
1245
+ PASS lesson telemetry hashes candidate/session identities instead of retaining raw IDs
1246
+ PASS privacy contract rejects forbidden content-bearing fields
1247
+ PASS telemetry storage failure is returned as observability failure rather than throwing
1248
+ PASS telemetry can be locally disabled without task failure
1249
+ PASS real OpenCode plugin emits skill invocation and turn-boundary completion events
1250
+ PASS OpenCode adapter measures in-process tool duration while skill is active
1251
+ PASS OpenCode adapter records locally resolved skill version without storing skill-file path
1252
+ PASS OpenCode telemetry also excludes raw tool arguments
1253
+ PASS instrumentation benchmark measures local append overhead
1254
+ INFO telemetry local sink overhead: p50=0.025ms p95=0.040ms max=0.071ms
1255
+ PASS Claude manifest wires narrow Skill pre telemetry hook
1256
+ PASS Claude manifest closes active windows at Stop
1257
+ PASS OpenAI package contains mechanism-level Skill telemetry adapter
1258
+ PASS Codex package does not invent unsupported PostToolUseFailure telemetry
1259
+ PASS plugin mirror matches canonical: hooks/scripts/lib/telemetry.js
1260
+ PASS plugin mirror matches canonical: hooks/scripts/telemetry-adapter.js
1261
+ PASS plugin mirror matches canonical: hooks/scripts/state-persist.js
1262
+ PASS versioned telemetry schema preserves timing plus self-evolve lifecycle vocabulary
1263
+
1264
+ PASS: #83 cross-agent telemetry (0 failures)
1265
+ PASS cross-agent telemetry
1266
+ === Contract Integrity Phase 1-2 (#84) ===
1267
+ PASS #58 completeness evaluator remains independently backward compatible
1268
+ PASS fully traced current contract passes strict reconciliation
1269
+ PASS integrity score is min(100 completeness, 100 protection)
1270
+ PASS consistent requirement has no fabricated drift category
1271
+ PASS only predeclared required probe evidence determines protection
1272
+ PASS strict mode fails when ticket feedback moves behavior ahead of living contract
1273
+ PASS ticket-ahead fixture reports exact stale-spec and untraced-change categories
1274
+ PASS drift report points to the ticket that outran the contract
1275
+ PASS ADR amendment + living spec/test/implementation revision reconciliation restores PASS
1276
+ PASS decision supersession is linked instead of appending ticket chronology to old ADR
1277
+ PASS #58 evidence bound to an old source cannot certify the current living spec
1278
+ PASS stale #58 source binding blocks strict completion despite a 100 completeness score
1279
+ PASS probe derived from a stale source section is rejected as protection evidence
1280
+ PASS stale probe evidence fails closed to zero protection
1281
+ PASS extra killed probes cannot dilute one surviving predeclared required probe
1282
+ PASS padding tests/probes cannot turn a weak protection result green
1283
+ PASS compile/build failure cannot be counted as a killed contract probe
1284
+ PASS invalid probe evidence fails closed rather than lowering thresholds
1285
+ PASS missing required probe is explicit NOT_EVALUATED
1286
+ PASS strict mode cannot authorize completion without protection evidence
1287
+ PASS audit-only adoption reports legacy debt without claiming completion eligibility
1288
+ PASS legacy audit exposes missing ticket/test/implementation/protection links
1289
+ PASS source defect stays distinct and fail-closed in strict mode
1290
+ PASS source conflict stays distinct and fail-closed
1291
+ PASS explicit requirement supersession is distinguished from stale/untraced drift
1292
+ PASS historical superseded requirement does not poison the current contract gate
1293
+ PASS Markdown report exposes drift and score formula
1294
+ PASS machine report uses only the declared drift vocabulary
1295
+ PASS machine report publishes a traceable contract graph
1296
+ PASS strict CLI writes both machine-readable JSON and concise Markdown reports
1297
+ PASS CLI reports retain deterministic PASS evidence
1298
+ PASS audit mode exits zero for migration/debt inventory without pretending to pass
1299
+ PASS strict CLI returns failure for valid-but-incomplete protection evidence
1300
+ PASS malformed trace returns infrastructure/schema exit 2
1301
+ PASS runtime rejects fields that the JSON schema does not permit
1302
+ PASS trace report rejects machine-specific absolute artifact paths
1303
+ PASS versioned trace schema includes probe disposition vocabulary
1304
+ PASS schema prevents duplicate required-probe padding
1305
+ PASS ADR guidance preserves accepted history and requires supersession/requirement lineage
1306
+ PASS to-spec/templates/feature-spec.md carries stable requirement id/status/revision/decision lineage
1307
+ PASS to-spec/templates/cli-reference.md carries stable requirement id/status/revision/decision lineage
1308
+ PASS to-spec/templates/schema-doc.md carries stable requirement id/status/revision/decision lineage
1309
+ PASS to-spec/templates/dev-doc.md carries stable requirement id/status/revision/decision lineage
1310
+ PASS to-spec process reconciles behavior/architecture changes back to current contract sources
1311
+ PASS ticket templates require source requirement revision and change-impact classification
1312
+ PASS behavior/architecture ticket drift is routed back to living spec/ADR before completion
1313
+ PASS verification-loop makes current contract reconciliation a non-compensating delivery gate
1314
+ PASS verification report cannot hide unresolved contract state behind green build/tests
1315
+ PASS Phase 2 integrates existing routed skills instead of adding a colliding contract-integrity routing surface
1316
+ PASS Phase 2 OpenAI package mirror matches canonical: grill-with-docs/ADR-FORMAT.md
1317
+ PASS Phase 2 OpenAI package mirror matches canonical: to-spec/references/process.md
1318
+ PASS Phase 2 OpenAI package mirror matches canonical: to-spec/templates/feature-spec.md
1319
+ PASS Phase 2 OpenAI package mirror matches canonical: to-spec/templates/cli-reference.md
1320
+ PASS Phase 2 OpenAI package mirror matches canonical: to-spec/templates/schema-doc.md
1321
+ PASS Phase 2 OpenAI package mirror matches canonical: to-spec/templates/dev-doc.md
1322
+ PASS Phase 2 OpenAI package mirror matches canonical: to-tickets/references/publishing-and-templates.md
1323
+ PASS Phase 2 OpenAI package mirror matches canonical: verification-loop/SKILL.md
1324
+ PASS Phase 2 OpenAI package mirror matches canonical: verification-loop/references/verification-phases.md
1325
+ PASS Phase 2 OpenAI package mirror matches canonical: verification-loop/templates/verification-report.template.md
1326
+ PASS stale-spec drift emits requirement-scoped living-spec repair guidance
1327
+ PASS surviving required probe emits BLOCKER weak-oracle guidance
1328
+ PASS Markdown keeps repair guidance concise and tied to requirement identity
1329
+ PASS strict audit may emit a PASS report without workspace binding for immediate inspection
1330
+ PASS report created without workspace fingerprints cannot later authorize freshness against a supplied workspace
1331
+ PASS strict audit with existing workspace artifacts produces fresh PASS report
1332
+ PASS report provenance records trace/TDD hashes plus current artifact hashes
1333
+ PASS unchanged PASS report can authorize completion
1334
+ PASS surviving required probe produces a reusable FAIL report fixture
1335
+ PASS freshness verification re-derives the current gate instead of trusting forged PASS fields
1336
+ PASS workspace-aware audit rejects artifact paths that resolve through a symlink or junction
1337
+ PASS test artifact change invalidates previously passing report
1338
+ PASS #58 evidence change invalidates previously passing report
1339
+ PASS strict workspace-aware audit fails closed when traced implementation evidence is missing
1340
+
1341
+ PASS: #84 contract integrity phase 1-4 mechanism (0 failures)
1342
+ PASS contract integrity phase 1
1343
+ === Issue #99 — runtime correctness ===
1344
+ PASS canonical Claude hook manifest contains command hooks
1345
+ PASS every canonical Claude plugin hook is anchored to CLAUDE_PLUGIN_ROOT
1346
+ PASS SessionStart hook resolves from plugin root: harness-everything/scripts/bootstrap.js
1347
+ PASS SessionStart hook resolves and starts from unrelated cwd
1348
+ PASS UserPromptSubmit hook resolves from plugin root: harness-everything/scripts/kernel-router.js
1349
+ PASS UserPromptSubmit hook resolves and starts from unrelated cwd
1350
+ PASS UserPromptSubmit hook resolves from plugin root: hooks/scripts/observation-hook.js
1351
+ PASS UserPromptSubmit hook resolves and starts from unrelated cwd
1352
+ PASS PreToolUse hook resolves from plugin root: hooks/scripts/workflow-gate.js
1353
+ PASS PreToolUse hook resolves and starts from unrelated cwd
1354
+ PASS PreToolUse hook resolves from plugin root: hooks/scripts/action-gate.js
1355
+ PASS PreToolUse hook resolves and starts from unrelated cwd
1356
+ PASS PreToolUse hook resolves from plugin root: hooks/scripts/rule-of-3.js
1357
+ PASS PreToolUse hook resolves and starts from unrelated cwd
1358
+ PASS PreToolUse hook resolves from plugin root: hooks/scripts/boundary-guard.js
1359
+ PASS PreToolUse hook resolves and starts from unrelated cwd
1360
+ PASS PreToolUse hook resolves from plugin root: hooks/scripts/depth-guard.js
1361
+ PASS PreToolUse hook resolves and starts from unrelated cwd
1362
+ PASS PreToolUse hook resolves from plugin root: hooks/scripts/context-compact.js
1363
+ PASS PreToolUse hook resolves and starts from unrelated cwd
1364
+ PASS PreToolUse hook resolves from plugin root: hooks/scripts/subagent-scope-guard.js
1365
+ PASS PreToolUse hook resolves and starts from unrelated cwd
1366
+ PASS PreToolUse hook resolves from plugin root: hooks/scripts/telemetry-adapter.js
1367
+ PASS PreToolUse hook resolves and starts from unrelated cwd
1368
+ PASS Stop hook resolves from plugin root: hooks/scripts/action-gate.js
1369
+ PASS Stop hook resolves and starts from unrelated cwd
1370
+ PASS Stop hook resolves from plugin root: hooks/scripts/workflow-stop-gate.js
1371
+ PASS Stop hook resolves and starts from unrelated cwd
1372
+ PASS Stop hook resolves from plugin root: hooks/scripts/stop-gate.js
1373
+ PASS Stop hook resolves and starts from unrelated cwd
1374
+ PASS Stop hook resolves from plugin root: hooks/scripts/telemetry-adapter.js
1375
+ PASS Stop hook resolves and starts from unrelated cwd
1376
+ PASS Stop hook resolves from plugin root: hooks/scripts/observation-hook.js
1377
+ PASS Stop hook resolves and starts from unrelated cwd
1378
+ PASS PostToolUse hook resolves from plugin root: hooks/scripts/action-gate.js
1379
+ PASS PostToolUse hook resolves and starts from unrelated cwd
1380
+ PASS PostToolUse hook resolves from plugin root: hooks/scripts/rule-of-3-tracker.js
1381
+ PASS PostToolUse hook resolves and starts from unrelated cwd
1382
+ PASS PostToolUse hook resolves from plugin root: hooks/scripts/state-persist.js
1383
+ PASS PostToolUse hook resolves and starts from unrelated cwd
1384
+ PASS PostToolUse hook resolves from plugin root: hooks/scripts/atomic-commit-check.js
1385
+ PASS PostToolUse hook resolves and starts from unrelated cwd
1386
+ PASS PostToolUse hook resolves from plugin root: hooks/scripts/contract-test.js
1387
+ PASS PostToolUse hook resolves and starts from unrelated cwd
1388
+ PASS PostToolUse hook resolves from plugin root: hooks/scripts/subagent-scope-guard.js
1389
+ PASS PostToolUse hook resolves and starts from unrelated cwd
1390
+ PASS PostToolUse hook resolves from plugin root: hooks/scripts/telemetry-adapter.js
1391
+ PASS PostToolUse hook resolves and starts from unrelated cwd
1392
+ PASS PostToolUse hook resolves from plugin root: hooks/scripts/observation-hook.js
1393
+ PASS PostToolUse hook resolves and starts from unrelated cwd
1394
+ PASS PostToolUseFailure hook resolves from plugin root: hooks/scripts/action-gate.js
1395
+ PASS PostToolUseFailure hook resolves and starts from unrelated cwd
1396
+ PASS PostToolUseFailure hook resolves from plugin root: hooks/scripts/rule-of-3-tracker.js
1397
+ PASS PostToolUseFailure hook resolves and starts from unrelated cwd
1398
+ PASS PostToolUseFailure hook resolves from plugin root: hooks/scripts/state-persist.js
1399
+ PASS PostToolUseFailure hook resolves and starts from unrelated cwd
1400
+ PASS PostToolUseFailure hook resolves from plugin root: hooks/scripts/telemetry-adapter.js
1401
+ PASS PostToolUseFailure hook resolves and starts from unrelated cwd
1402
+ PASS PostToolUseFailure hook resolves from plugin root: hooks/scripts/observation-hook.js
1403
+ PASS PostToolUseFailure hook resolves and starts from unrelated cwd
1404
+ Created .claude directory
1405
+ ✅ Configured Claude Code hooks safely in /.claude/settings.json
1406
+ PASS Claude installer preserves the full hook command set
1407
+ PASS SessionStart installer substitutes CLAUDE_PLUGIN_ROOT
1408
+ PASS SessionStart installer writes an existing absolute hook path
1409
+ PASS UserPromptSubmit installer substitutes CLAUDE_PLUGIN_ROOT
1410
+ PASS UserPromptSubmit installer writes an existing absolute hook path
1411
+ PASS UserPromptSubmit installer substitutes CLAUDE_PLUGIN_ROOT
1412
+ PASS UserPromptSubmit installer writes an existing absolute hook path
1413
+ PASS PreToolUse installer substitutes CLAUDE_PLUGIN_ROOT
1414
+ PASS PreToolUse installer writes an existing absolute hook path
1415
+ PASS PreToolUse installer substitutes CLAUDE_PLUGIN_ROOT
1416
+ PASS PreToolUse installer writes an existing absolute hook path
1417
+ PASS PreToolUse installer substitutes CLAUDE_PLUGIN_ROOT
1418
+ PASS PreToolUse installer writes an existing absolute hook path
1419
+ PASS PreToolUse installer substitutes CLAUDE_PLUGIN_ROOT
1420
+ PASS PreToolUse installer writes an existing absolute hook path
1421
+ PASS PreToolUse installer substitutes CLAUDE_PLUGIN_ROOT
1422
+ PASS PreToolUse installer writes an existing absolute hook path
1423
+ PASS PreToolUse installer substitutes CLAUDE_PLUGIN_ROOT
1424
+ PASS PreToolUse installer writes an existing absolute hook path
1425
+ PASS PreToolUse installer substitutes CLAUDE_PLUGIN_ROOT
1426
+ PASS PreToolUse installer writes an existing absolute hook path
1427
+ PASS PreToolUse installer substitutes CLAUDE_PLUGIN_ROOT
1428
+ PASS PreToolUse installer writes an existing absolute hook path
1429
+ PASS Stop installer substitutes CLAUDE_PLUGIN_ROOT
1430
+ PASS Stop installer writes an existing absolute hook path
1431
+ PASS Stop installer substitutes CLAUDE_PLUGIN_ROOT
1432
+ PASS Stop installer writes an existing absolute hook path
1433
+ PASS Stop installer substitutes CLAUDE_PLUGIN_ROOT
1434
+ PASS Stop installer writes an existing absolute hook path
1435
+ PASS Stop installer substitutes CLAUDE_PLUGIN_ROOT
1436
+ PASS Stop installer writes an existing absolute hook path
1437
+ PASS Stop installer substitutes CLAUDE_PLUGIN_ROOT
1438
+ PASS Stop installer writes an existing absolute hook path
1439
+ PASS PostToolUse installer substitutes CLAUDE_PLUGIN_ROOT
1440
+ PASS PostToolUse installer writes an existing absolute hook path
1441
+ PASS PostToolUse installer substitutes CLAUDE_PLUGIN_ROOT
1442
+ PASS PostToolUse installer writes an existing absolute hook path
1443
+ PASS PostToolUse installer substitutes CLAUDE_PLUGIN_ROOT
1444
+ PASS PostToolUse installer writes an existing absolute hook path
1445
+ PASS PostToolUse installer substitutes CLAUDE_PLUGIN_ROOT
1446
+ PASS PostToolUse installer writes an existing absolute hook path
1447
+ PASS PostToolUse installer substitutes CLAUDE_PLUGIN_ROOT
1448
+ PASS PostToolUse installer writes an existing absolute hook path
1449
+ PASS PostToolUse installer substitutes CLAUDE_PLUGIN_ROOT
1450
+ PASS PostToolUse installer writes an existing absolute hook path
1451
+ PASS PostToolUse installer substitutes CLAUDE_PLUGIN_ROOT
1452
+ PASS PostToolUse installer writes an existing absolute hook path
1453
+ PASS PostToolUse installer substitutes CLAUDE_PLUGIN_ROOT
1454
+ PASS PostToolUse installer writes an existing absolute hook path
1455
+ PASS PostToolUseFailure installer substitutes CLAUDE_PLUGIN_ROOT
1456
+ PASS PostToolUseFailure installer writes an existing absolute hook path
1457
+ PASS PostToolUseFailure installer substitutes CLAUDE_PLUGIN_ROOT
1458
+ PASS PostToolUseFailure installer writes an existing absolute hook path
1459
+ PASS PostToolUseFailure installer substitutes CLAUDE_PLUGIN_ROOT
1460
+ PASS PostToolUseFailure installer writes an existing absolute hook path
1461
+ PASS PostToolUseFailure installer substitutes CLAUDE_PLUGIN_ROOT
1462
+ PASS PostToolUseFailure installer writes an existing absolute hook path
1463
+ PASS PostToolUseFailure installer substitutes CLAUDE_PLUGIN_ROOT
1464
+ PASS PostToolUseFailure installer writes an existing absolute hook path
1465
+ PASS chained rm checks every target and gates the outside-scratch delete
1466
+ PASS chained rm remains exempt when every target is scratch/temp
1467
+ PASS chained Remove-Item checks every target and gates the outside-scratch delete
1468
+ PASS setup: approved payload reaches executed before audit-error probe
1469
+ PASS PostToolUse internal error never emits a PreToolUse ask decision
1470
+ PASS PostToolUse internal error does not overwrite an executed audit record
1471
+ PASS Stop internal error remains an audit error, not an authorization prompt
1472
+ PASS canonical and Codex/OpenAI plugin action-gate runtimes are byte-identical
1473
+ PASS stdin timeout path preserves Codex exit-2 fail-closed decision
1474
+ PASS stdin timeout block still reports the matched destructive rule
1475
+
1476
+ PASS: issue #99 runtime correctness (0 failures)
1477
+ PASS issue #99 runtime correctness
1478
+
1479
+ [Phase 3] Skill Reference and Behavioral Case Checks...
1480
+ Checked 68 skill path reference(s) across 26 skill(s).
1481
+ ALL SKILL REFERENCES RESOLVE.
1482
+ PASS skill reference check
1483
+ ✅ baseline-add-feature (baseline)
1484
+ ✅ baseline-api-design (baseline)
1485
+ ✅ baseline-debugging (baseline)
1486
+ ✅ baseline-dependency (baseline)
1487
+ ✅ baseline-documentation (baseline)
1488
+ ✅ baseline-environment-detection (baseline)
1489
+ ✅ baseline-error-handling (baseline)
1490
+ ✅ baseline-eval-harness (baseline)
1491
+ ✅ baseline-fable-discipline (baseline)
1492
+ ✅ baseline-find-skills-exposure (baseline)
1493
+ ✅ baseline-find-skills (baseline)
1494
+ ✅ baseline-git-commit (baseline)
1495
+ ✅ baseline-install-cognitive-os (baseline)
1496
+ ✅ baseline-multi-agent-workspace (baseline)
1497
+ ✅ baseline-performance-monitoring (baseline)
1498
+ ✅ baseline-performance (baseline)
1499
+ ✅ baseline-refactor-with-tests (baseline)
1500
+ ✅ baseline-refactor (baseline)
1501
+ ✅ baseline-rewrite-commits (baseline)
1502
+ ✅ baseline-security-review (baseline)
1503
+ ✅ baseline-self-evolve (baseline)
1504
+ ✅ baseline-simple-bugfix (baseline)
1505
+ ✅ baseline-skill-creator (baseline)
1506
+ ✅ baseline-skill-style (baseline)
1507
+ ✅ baseline-tdd-workflow (baseline)
1508
+ ✅ baseline-to-spec (baseline)
1509
+ ✅ baseline-to-tickets (baseline)
1510
+ ✅ baseline-todo-driven-workflow (baseline)
1511
+ ✅ baseline-using-git-worktrees (baseline)
1512
+ ✅ baseline-worktree-submodule-reachability (baseline)
1513
+ ✅ breaker-zoom-out-after-3 (baseline)
1514
+ ✅ pressure-budget-skip-review (pressure)
1515
+ ✅ pressure-bypass-review (pressure)
1516
+ ✅ pressure-complexity-skip (pressure)
1517
+ ✅ pressure-expert-skip-testing (pressure)
1518
+ ✅ pressure-fatigue-skip (pressure)
1519
+ ✅ pressure-management-skip-all (pressure)
1520
+ ✅ pressure-scope-bypass (pressure)
1521
+ ✅ pressure-skip-docs (pressure)
1522
+ ✅ pressure-skip-error-handling (pressure)
1523
+ ✅ pressure-skip-security (pressure)
1524
+ ✅ pressure-skip-tests (pressure)
1525
+ ✅ pressure-skip-verification (pressure)
1526
+ ✅ pressure-social-skip-review (pressure)
1527
+ ✅ pressure-status-visibility (pressure)
1528
+ ✅ pressure-sunk-cost-retry (pressure)
1529
+ ✅ scope-discipline (baseline)
1530
+ ✅ self-evolve-retrieval-recurrence (baseline)
1531
+ ✅ tier1-no-overplan (baseline)
1532
+ ✅ verify-before-done (baseline)
1533
+
1534
+ 🎉 All 50 case files are structurally valid.
1535
+ PASS behavioral case validation
1536
+
1537
+ [Phase 3b] Fable Model Mode Contract Tests...
1538
+ === Fable behavior profile + runtime floor contract tests ===
1539
+ PASS: profiles are behavior contracts; runtime floors are advisory; agent fallback remains explicit
1540
+
1541
+ ✅ Fable model mode contract suite 100% Passed!
1542
+
1543
+ [Phase 4] Mechanism Test Suite (Claude Code hooks)...
1544
+ =================================================
1545
+ === 🔧 Harness Mechanism Test Suite (VERIFICATION.md §2) ===
1546
+ =================================================
1547
+
1548
+ Discovered 76 mechanism test suite(s):
1549
+ - mechanism-2a-rule-of-3.test.js
1550
+ - mechanism-2aa-codex-action-gate-policy.test.js
1551
+ - mechanism-2ab-openai-plugin-sync-integrity.test.js
1552
+ - mechanism-2ac-atomic-commit-check.test.js
1553
+ - mechanism-2ad-action-gate-classifier-hardening.test.js
1554
+ - mechanism-2af-worktree-isolation.test.js
1555
+ - mechanism-2ag-router-worktree-contract.test.js
1556
+ - mechanism-2ah-workflow-lifecycle.test.js
1557
+ - mechanism-2ai-workspace-fingerprint-batch.test.js
1558
+ - mechanism-2aj-waza-reference-adapter.test.js
1559
+ - mechanism-2ak-contract-probe-adapter.test.js
1560
+ - mechanism-2al-codex-hooks-compat.test.js
1561
+ - mechanism-2am-observations-session-import.test.js
1562
+ - mechanism-2am-openai-packaged-helper-runtime.test.js
1563
+ - mechanism-2an-environment-detection-readonly.test.js
1564
+ - mechanism-2an-workflow-obligations.test.js
1565
+ - mechanism-2ao-plugin-sync.test.js
1566
+ - mechanism-2ap-sbom.test.js
1567
+ - mechanism-2aq-fable-stage-bindings.test.js
1568
+ - mechanism-2ar-binding-resolution.test.js
1569
+ - mechanism-2b-boundary-guard.test.js
1570
+ - mechanism-2c-state-persist.test.js
1571
+ - mechanism-2d-fact-audit.test.js
1572
+ - mechanism-2e-scope-guard.test.js
1573
+ - mechanism-2f-stop-gate.test.js
1574
+ - mechanism-2g-platform-ignore.test.js
1575
+ - mechanism-2h-installer-manifest.test.js
1576
+ - mechanism-2i-crlf-frontmatter.test.js
1577
+ - mechanism-2i-install-verification.test.js
1578
+ - mechanism-2j-behavioral-runner.test.js
1579
+ - mechanism-2j-fixture-entrypoints.test.js
1580
+ - mechanism-2k-reference-check.test.js
1581
+ - mechanism-2l-multi-agent-workspace.test.js
1582
+ - mechanism-2m-self-repo-guard.test.js
1583
+ - mechanism-2n-opencode-plugin.test.js
1584
+ - mechanism-2o-state-home-isolation.test.js
1585
+ - mechanism-2p-installer-links.test.js
1586
+ - mechanism-2q-installer-global-shared-store.test.js
1587
+ - mechanism-2r-uninstall-flags.test.js
1588
+ - mechanism-2s-tdd-quality.test.js
1589
+ - mechanism-2t-disclosure.test.js
1590
+ - mechanism-2t-evidence-triage.test.js
1591
+ - mechanism-2t-issue-20.test.js
1592
+ - mechanism-2t-platform-skill-targets.test.js
1593
+ - mechanism-2t-transcript-parser.test.js
1594
+ - mechanism-2t-workspace-identity.test.js
1595
+ - mechanism-2u-issue-42-regressions.test.js
1596
+ - mechanism-2u-issue-44.test.js
1597
+ - mechanism-2v-verifier-boundaries.test.js
1598
+ - mechanism-2w-platform-compatibility.test.js
1599
+ - mechanism-2x-release-automation.test.js
1600
+ - mechanism-2x-release-commit-message.test.js
1601
+ - mechanism-2y-release-tooling-compat.test.js
1602
+ - mechanism-2z-claude-plugin-manifest.test.js
1603
+ - mechanism-30-opencode-plugin-loadability.test.js
1604
+ - mechanism-31-opencode-hardlock-evidence.test.js
1605
+ - mechanism-32-paired-benchmark.test.js
1606
+ - mechanism-33-issues-205-207.test.js
1607
+ - mechanism-34-observations.test.js
1608
+ - mechanism-34-worktree-submodule-reachability.test.js
1609
+ - mechanism-35-verification-contract.test.js
1610
+ - mechanism-packaging-bytecode.test.js
1611
+ - mechanism-system-one-collect.test.js
1612
+ - mechanism-system-one-contract.test.js
1613
+ - mechanism-system-one-corpus.test.js
1614
+ - mechanism-system-one-evaluation.test.js
1615
+ - mechanism-system-one-install.test.js
1616
+ - mechanism-system-one-intent.test.js
1617
+ - mechanism-system-one-label.test.js
1618
+ - mechanism-system-one-laya.test.js
1619
+ - mechanism-system-one-ngram.test.js
1620
+ - mechanism-system-one-provider.test.js
1621
+ - mechanism-system-one-relevance.test.js
1622
+ - mechanism-system-one-resident.test.js
1623
+ - mechanism-system-one-router.test.js
1624
+ - mechanism-system-one-train.test.js
1625
+
1626
+ -------------------------------------------------
1627
+
1628
+ ▶️ Running test suite: mechanism-2a-rule-of-3.test.js
1629
+
1630
+ [2a] Rule of 3 circuit breaker...
1631
+ ✅ 2a-wiring. PostToolUseFailure invokes the Rule-of-3 tracker
1632
+ ✅ 2a-wiring. apply_patch is covered before and after execution
1633
+ ✅ 2a-three. exactly three matching failures arm zoom-out
1634
+ [CRITICAL] RULE OF 3 CIRCUIT BREAKER TRIGGERED!
1635
+ The same failure signature has now occurred 3 times.
1636
+ Error Signature: 84edbe719770818783c799972ef28e77
1637
+
1638
+ Mutating tools (Bash/PowerShell/Edit/Write/apply_patch) are locked - not because you
1639
+ must wait for a human, but because you must stop drilling and rebuild the
1640
+ full picture first. Do NOT ask the Human Partner yet.
1641
+
1642
+ ACTION REQUIRED (reflect first):
1643
+ 1. CEASE FIRE. No new fix attempts, no variations of the last one.
1644
+ 2. Load the 'zoom-out' skill and follow its Reflect & Fact-Check protocol.
1645
+ 3. Using READ-ONLY tools (Read/Grep/Glob - still available), re-verify the
1646
+ assumption behind each failed attempt against the actual code/logs/docs.
1647
+ 4. Write your findings to '<TMP>/harness-mechanism-state-ixtXYI/workspaces/harness-issue290-pilot-280af2ebc7c1/state/sessions/__mechanism_test__/zoom-out-report.md' (the ONLY write
1648
+ allowed right now) with sections: ## Goal, ## Failed Attempts,
1649
+ ## Verified Facts, ## Diagnosis, ## Decision (ending RESUME: or ESCALATE:).
1650
+
1651
+ A valid report releases this breaker automatically. Escalate to the Human
1652
+ Partner ONLY if your Decision concludes a genuinely human call is needed
1653
+ (requirement conflict, architecture trade-off, destructive action, missing
1654
+ access) - and then present options with a recommendation, not apologies.
1655
+ ✅ 2a-trip. third matching failure blocks mutation for reflection
1656
+ ✅ 2a-release. valid reflection releases breaker and resets count
1657
+ [CRITICAL] RULE OF 3 CIRCUIT BREAKER TRIGGERED!
1658
+ The same failure signature has now occurred 3 times.
1659
+ Error Signature: mech-test
1660
+
1661
+ Mutating tools (Bash/PowerShell/Edit/Write/apply_patch) are locked - not because you
1662
+ must wait for a human, but because you must stop drilling and rebuild the
1663
+ full picture first. Do NOT ask the Human Partner yet.
1664
+
1665
+ ACTION REQUIRED (reflect first):
1666
+ 1. CEASE FIRE. No new fix attempts, no variations of the last one.
1667
+ 2. Load the 'zoom-out' skill and follow its Reflect & Fact-Check protocol.
1668
+ 3. Using READ-ONLY tools (Read/Grep/Glob - still available), re-verify the
1669
+ assumption behind each failed attempt against the actual code/logs/docs.
1670
+ 4. Write your findings to '<TMP>/harness-mechanism-state-ixtXYI/workspaces/harness-issue290-pilot-280af2ebc7c1/state/sessions/__mechanism_test__/zoom-out-report.md' (the ONLY write
1671
+ allowed right now) with sections: ## Goal, ## Failed Attempts,
1672
+ ## Verified Facts, ## Diagnosis, ## Decision (ending RESUME: or ESCALATE:).
1673
+
1674
+ A valid report releases this breaker automatically. Escalate to the Human
1675
+ Partner ONLY if your Decision concludes a genuinely human call is needed
1676
+ (requirement conflict, architecture trade-off, destructive action, missing
1677
+ access) - and then present options with a recommendation, not apologies.
1678
+ ✅ 2a-repeat. later three-failure cycle requests another zoom-out, not permanent hard lock
1679
+ ✅ 2a-category. permission failures still use the same threshold of three
1680
+ ✅ 2a-category-two. two permission failures do not trip early
1681
+ [CRITICAL] RULE OF 3 CIRCUIT BREAKER TRIGGERED!
1682
+ The same failure signature has now occurred 3 times.
1683
+ Error Signature: ca808a9df9b7d8c531929ca6ea04a324
1684
+
1685
+ Mutating tools (Bash/PowerShell/Edit/Write/apply_patch) are locked - not because you
1686
+ must wait for a human, but because you must stop drilling and rebuild the
1687
+ full picture first. Do NOT ask the Human Partner yet.
1688
+
1689
+ ACTION REQUIRED (reflect first):
1690
+ 1. CEASE FIRE. No new fix attempts, no variations of the last one.
1691
+ 2. Load the 'zoom-out' skill and follow its Reflect & Fact-Check protocol.
1692
+ 3. Using READ-ONLY tools (Read/Grep/Glob - still available), re-verify the
1693
+ assumption behind each failed attempt against the actual code/logs/docs.
1694
+ 4. Write your findings to '<TMP>/harness-mechanism-state-ixtXYI/workspaces/harness-issue290-pilot-280af2ebc7c1/state/sessions/__mechanism_test__/zoom-out-report.md' (the ONLY write
1695
+ allowed right now) with sections: ## Goal, ## Failed Attempts,
1696
+ ## Verified Facts, ## Diagnosis, ## Decision (ending RESUME: or ESCALATE:).
1697
+
1698
+ A valid report releases this breaker automatically. Escalate to the Human
1699
+ Partner ONLY if your Decision concludes a genuinely human call is needed
1700
+ (requirement conflict, architecture trade-off, destructive action, missing
1701
+ access) - and then present options with a recommendation, not apologies.
1702
+ ✅ 2a-category-three. third permission failure trips normally
1703
+ ✅ 2a-interleaved. unrelated success preserves the matching failure count
1704
+ ✅ 2a-interleaved-three. third matching failure still arms zoom-out after unrelated success
1705
+ ✅ 2a-resolved. same-operation success clears the resolved signature
1706
+
1707
+ ▶️ Running test suite: mechanism-2aa-codex-action-gate-policy.test.js
1708
+ PASS: Codex action-gate uses supported hard blocking, attributable PreToolUse entry evidence, and non-authorizing PermissionRequest observation.
1709
+
1710
+ ▶️ Running test suite: mechanism-2ab-openai-plugin-sync-integrity.test.js
1711
+ PASS: OpenAI/Codex plugin sync is idempotent, uses portable plugin placeholders, and preserves every referenced hook runtime file.
1712
+
1713
+ ▶️ Running test suite: mechanism-2ac-atomic-commit-check.test.js
1714
+ PASS: atomic commit check scopes edits to the workspace and suppresses clean-tree false nudges
1715
+
1716
+ ▶️ Running test suite: mechanism-2ad-action-gate-classifier-hardening.test.js
1717
+ PASS: destructive-command classifier covers confirmed bypasses while suppressing quoted-text false positives
1718
+
1719
+ ▶️ Running test suite: mechanism-2af-worktree-isolation.test.js
1720
+ PASS fixture repository initializes
1721
+ PASS Tier-3 primary-tree mutation is not hard-blocked
1722
+ PASS Tier-3 primary-tree mutation emits mandatory isolation disposition without blocking
1723
+ PASS mutation-shaped shell command remains available
1724
+ PASS mutation-shaped shell command receives the same isolation contract
1725
+ PASS read-only discovery remains available
1726
+ PASS linked worktree fixture creates
1727
+ PASS linked-worktree mutation remains available
1728
+ PASS cross-worktree target is reminder-only
1729
+ PASS cross-worktree target emits scope/isolation guidance
1730
+ PASS legacy blocked workflow state does not trap mutation
1731
+ PASS legacy blocked state is surfaced as reminder
1732
+ PASS corrupt workflow state fails open
1733
+ PASS: worktree isolation is a semantic MUST disposition, not a cognitive lock
1734
+
1735
+ ▶️ Running test suite: mechanism-2ag-router-worktree-contract.test.js
1736
+ PASS: router major-workflow plan carries worktree isolation independently of multi-agent workspace state.
1737
+
1738
+ ▶️ Running test suite: mechanism-2ah-workflow-lifecycle.test.js
1739
+ PASS workflow guidance fixture is created
1740
+ PASS hooks/scripts/workflow-gate.js malformed payload fails open
1741
+ PASS hooks/scripts/workflow-stop-gate.js malformed payload fails open
1742
+ PASS legacy exhausted state no longer blocks mutation
1743
+ PASS legacy state is a reminder
1744
+ PASS unproven shell is not iteration-blocked
1745
+ PASS no mutation-probe state is created
1746
+ PASS failed shell mutation tracking is fail-open
1747
+ PASS failed-but-mutating shell advances edit freshness without fabricating verification
1748
+ PASS missing verification does not block Stop
1749
+ PASS missing verification emits reminder
1750
+ PASS exec_command verification is fail-open
1751
+ PASS #193 exec_command records lastVerifyAt
1752
+ PASS resolved evidence never rewrites an explicit blocked workflow to satisfied
1753
+ PASS: workflow guidance lifecycle (14 assertions)
1754
+ PASS: packaged OpenAI workflow guidance mirrors source
1755
+
1756
+ ▶️ Running test suite: mechanism-2ai-workspace-fingerprint-batch.test.js
1757
+ PASS #169 batched fingerprint matches the legacy clean-worktree fingerprint
1758
+ PASS #169 packaged plugin fingerprint matches canonical/legacy on a clean worktree
1759
+ PASS #169 batched fingerprint matches legacy for dirty tracked + untracked content
1760
+ PASS #169 packaged plugin batched fingerprint matches legacy dirty semantics
1761
+ PASS #169 staging visible content does not change the workspace fingerprint
1762
+ PASS #169 tracked deletion keeps legacy fingerprint semantics
1763
+ PASS #169 1000-untracked-file fingerprint returns a valid digest
1764
+ PASS #169 1000-untracked-file fingerprint stays below 5s regression ceiling (actual 38.0ms)
1765
+ PASS #169 packaged plugin fingerprint remains byte-identical for 1000 untracked files
1766
+ PASS #169 explicit fingerprint cap reports a structured conservative-fallback signal
1767
+ PASS #169 large-workspace Tier-2 fixture routes normally
1768
+ PASS #169 large-workspace Tier-2 fixture resolves requirements/workflow planning
1769
+ PASS #169 large-workspace Tier-2 fixture starts after planning
1770
+ PASS #169 >5000 observed paths degrade conservatively instead of blocking the shell call
1771
+ PASS #190 shell admission no longer creates conservative budget/probe state
1772
+ PASS: batched workspace fingerprint (15 assertions, 1000-file 38.0ms)
1773
+
1774
+ ▶️ Running test suite: mechanism-2aj-waza-reference-adapter.test.js
1775
+ PASS discovers the canonical Harness skill set
1776
+ PASS adapter invokes Waza exactly once per canonical top-level skill
1777
+ PASS Waza receives explicit canonical skill paths instead of recursive workspace discovery
1778
+ PASS environment-detection placeholder reference is reachable: references/shell-syntax-rules.md
1779
+ PASS environment-detection removes Waza orphan advisories for Harness-reachable references
1780
+ PASS environment-detection reports the suppressed advisories explicitly
1781
+ PASS environment-detection recomputes readiness without false local-orphan failures
1782
+ PASS eval-harness placeholder reference is reachable: references/scoring-rubric.md
1783
+ PASS eval-harness removes Waza orphan advisories for Harness-reachable references
1784
+ PASS eval-harness reports the suppressed advisories explicitly
1785
+ PASS eval-harness recomputes readiness without false local-orphan failures
1786
+ PASS fable-discipline placeholder reference is reachable: references/discipline-rules.md
1787
+ PASS fable-discipline removes Waza orphan advisories for Harness-reachable references
1788
+ PASS fable-discipline reports the suppressed advisories explicitly
1789
+ PASS fable-discipline recomputes readiness without false local-orphan failures
1790
+ PASS fable-mode placeholder reference is reachable: references/profile-lookup.md
1791
+ PASS fable-mode placeholder reference is reachable: references/model-matrix.md
1792
+ PASS fable-mode removes Waza orphan advisories for Harness-reachable references
1793
+ PASS fable-mode reports the suppressed advisories explicitly
1794
+ PASS fable-mode recomputes readiness without false local-orphan failures
1795
+ PASS find-skills placeholder reference is reachable: references/discovery-flow.md
1796
+ PASS find-skills removes Waza orphan advisories for Harness-reachable references
1797
+ PASS find-skills reports the suppressed advisories explicitly
1798
+ PASS find-skills recomputes readiness without false local-orphan failures
1799
+ PASS git-commit placeholder reference is reachable: references/commit-flow.md
1800
+ PASS git-commit removes Waza orphan advisories for Harness-reachable references
1801
+ PASS git-commit reports the suppressed advisories explicitly
1802
+ PASS git-commit recomputes readiness without false local-orphan failures
1803
+ PASS grill-me placeholder reference is reachable: references/grilling-playbook.md
1804
+ PASS grill-me removes Waza orphan advisories for Harness-reachable references
1805
+ PASS grill-me reports the suppressed advisories explicitly
1806
+ PASS grill-me recomputes readiness without false local-orphan failures
1807
+ PASS grill-with-docs placeholder reference is reachable: references/session-playbook.md
1808
+ PASS grill-with-docs removes Waza orphan advisories for Harness-reachable references
1809
+ PASS grill-with-docs reports the suppressed advisories explicitly
1810
+ PASS grill-with-docs recomputes readiness without false local-orphan failures
1811
+ PASS harness-everything placeholder reference is reachable: references/triage-and-tiers.md
1812
+ PASS harness-everything removes Waza orphan advisories for Harness-reachable references
1813
+ PASS harness-everything reports the suppressed advisories explicitly
1814
+ PASS harness-everything recomputes readiness without false local-orphan failures
1815
+ PASS improve-codebase-architecture placeholder reference is reachable: references/README.md
1816
+ PASS improve-codebase-architecture removes Waza orphan advisories for Harness-reachable references
1817
+ PASS improve-codebase-architecture reports the suppressed advisories explicitly
1818
+ PASS improve-codebase-architecture recomputes readiness without false local-orphan failures
1819
+ PASS install-cognitive-os placeholder reference is reachable: references/cognitive-loop.md
1820
+ PASS install-cognitive-os removes Waza orphan advisories for Harness-reachable references
1821
+ PASS install-cognitive-os reports the suppressed advisories explicitly
1822
+ PASS install-cognitive-os recomputes readiness without false local-orphan failures
1823
+ PASS multi-agent-workspace placeholder reference is reachable: references/orchestration.md
1824
+ PASS multi-agent-workspace placeholder reference is reachable: references/architecture-guide.md
1825
+ PASS multi-agent-workspace removes Waza orphan advisories for Harness-reachable references
1826
+ PASS multi-agent-workspace reports the suppressed advisories explicitly
1827
+ PASS multi-agent-workspace recomputes readiness without false local-orphan failures
1828
+ PASS repo-docs placeholder reference is reachable: references/process-guide.md
1829
+ PASS repo-docs removes Waza orphan advisories for Harness-reachable references
1830
+ PASS repo-docs reports the suppressed advisories explicitly
1831
+ PASS repo-docs recomputes readiness without false local-orphan failures
1832
+ PASS rewrite-commits placeholder reference is reachable: references/workflow.md
1833
+ PASS rewrite-commits removes Waza orphan advisories for Harness-reachable references
1834
+ PASS rewrite-commits reports the suppressed advisories explicitly
1835
+ PASS rewrite-commits recomputes readiness without false local-orphan failures
1836
+ PASS security-review placeholder reference is reachable: references/security-checklist.md
1837
+ PASS security-review removes Waza orphan advisories for Harness-reachable references
1838
+ PASS security-review reports the suppressed advisories explicitly
1839
+ PASS security-review recomputes readiness without false local-orphan failures
1840
+ PASS self-evolve placeholder reference is reachable: references/memory-resolution.md
1841
+ PASS self-evolve removes Waza orphan advisories for Harness-reachable references
1842
+ PASS self-evolve reports the suppressed advisories explicitly
1843
+ PASS self-evolve recomputes readiness without false local-orphan failures
1844
+ PASS skill-creator placeholder reference is reachable: references/quality-checklist.md
1845
+ PASS skill-creator removes Waza orphan advisories for Harness-reachable references
1846
+ PASS skill-creator reports the suppressed advisories explicitly
1847
+ PASS skill-creator recomputes readiness without false local-orphan failures
1848
+ PASS skill-style placeholder reference is reachable: references/style-guide.md
1849
+ PASS skill-style removes Waza orphan advisories for Harness-reachable references
1850
+ PASS skill-style reports the suppressed advisories explicitly
1851
+ PASS skill-style recomputes readiness without false local-orphan failures
1852
+ PASS tdd placeholder reference is reachable: references/core-discipline.md
1853
+ PASS tdd removes Waza orphan advisories for Harness-reachable references
1854
+ PASS tdd reports the suppressed advisories explicitly
1855
+ PASS tdd recomputes readiness without false local-orphan failures
1856
+ PASS to-spec placeholder reference is reachable: references/process.md
1857
+ PASS to-spec removes Waza orphan advisories for Harness-reachable references
1858
+ PASS to-spec reports the suppressed advisories explicitly
1859
+ PASS to-spec recomputes readiness without false local-orphan failures
1860
+ PASS to-tickets placeholder reference is reachable: references/publishing-and-templates.md
1861
+ PASS to-tickets removes Waza orphan advisories for Harness-reachable references
1862
+ PASS to-tickets reports the suppressed advisories explicitly
1863
+ PASS to-tickets recomputes readiness without false local-orphan failures
1864
+ PASS todo-driven-workflow placeholder reference is reachable: references/execution-guide.md
1865
+ PASS todo-driven-workflow removes Waza orphan advisories for Harness-reachable references
1866
+ PASS todo-driven-workflow reports the suppressed advisories explicitly
1867
+ PASS todo-driven-workflow recomputes readiness without false local-orphan failures
1868
+ PASS using-git-worktrees placeholder reference is reachable: references/submodules-in-worktrees.md
1869
+ PASS using-git-worktrees placeholder reference is reachable: references/workflow-details.md
1870
+ PASS using-git-worktrees removes Waza orphan advisories for Harness-reachable references
1871
+ PASS using-git-worktrees reports the suppressed advisories explicitly
1872
+ PASS using-git-worktrees recomputes readiness without false local-orphan failures
1873
+ PASS verification-loop placeholder reference is reachable: references/project-verification-contract.md
1874
+ PASS verification-loop placeholder reference is reachable: references/verification-phases.md
1875
+ PASS verification-loop removes Waza orphan advisories for Harness-reachable references
1876
+ PASS verification-loop reports the suppressed advisories explicitly
1877
+ PASS verification-loop recomputes readiness without false local-orphan failures
1878
+ PASS verify-before-claim placeholder reference is reachable: references/verification-guide.md
1879
+ PASS verify-before-claim removes Waza orphan advisories for Harness-reachable references
1880
+ PASS verify-before-claim reports the suppressed advisories explicitly
1881
+ PASS verify-before-claim recomputes readiness without false local-orphan failures
1882
+ PASS zoom-out placeholder reference is reachable: references/circuit-breaker.md
1883
+ PASS zoom-out removes Waza orphan advisories for Harness-reachable references
1884
+ PASS zoom-out reports the suppressed advisories explicitly
1885
+ PASS zoom-out recomputes readiness without false local-orphan failures
1886
+ PASS at least one canonical skill uses the Harness placeholder reference contract
1887
+ PASS adapter resolves canonical placeholder-orphan advisories
1888
+ PASS fable-mode nested reference remains reachable: references/execution-phases.md
1889
+ PASS fable-mode nested reference advisories are resolved through the reachable reference graph
1890
+ PASS harness-everything nested reference remains reachable: references/router-workflow-plan.md
1891
+ PASS harness-everything nested reference remains reachable: references/skill-registry.md
1892
+ PASS harness-everything nested reference advisories are resolved through the reachable reference graph
1893
+ PASS multi-agent-workspace nested reference remains reachable: references/agency-agents.md
1894
+ PASS multi-agent-workspace nested reference advisories are resolved through the reachable reference graph
1895
+ PASS skill-creator nested reference remains reachable: references/authoring-workflow.md
1896
+ PASS skill-creator nested reference remains reachable: references/testing-workflow.md
1897
+ PASS skill-creator nested reference remains reachable: references/quality-principles.md
1898
+ PASS skill-creator nested reference remains reachable: references/dynamic-generation-contract.md
1899
+ PASS skill-creator nested reference advisories are resolved through the reachable reference graph
1900
+ PASS tdd nested reference remains reachable: references/quality-model.md
1901
+ PASS tdd nested reference remains reachable: references/unit-testing.md
1902
+ PASS tdd nested reference remains reachable: references/integration-testing.md
1903
+ PASS tdd nested reference advisories are resolved through the reachable reference graph
1904
+ PASS <skills-repo-root> existing target is a resolved Harness contract link
1905
+ PASS generic runtime placeholder is classified as a template advisory
1906
+ PASS unknown placeholder remains a real local-link problem
1907
+ PASS existing repo-scope relative link is resolved by the Harness repository contract
1908
+ PASS missing repo-scope relative link remains a hard local-link problem
1909
+ PASS links inside generated-document templates remain visible template advisories
1910
+ PASS network and generic-template findings do not masquerade as broken local links
1911
+ PASS network and template findings are retained in separate advisory categories
1912
+ PASS normalized readiness remains green when only false-orphan/network/template advisories remain
1913
+ PASS non-link readiness failures remain explicit machine-readable blockers
1914
+ PASS: Waza/Harness reference adapter (139 assertions across 26 skills)
1915
+
1916
+ ▶️ Running test suite: mechanism-2ak-contract-probe-adapter.test.js
1917
+ === Contract Integrity Phase 3 Node Probe Adapter (#84) ===
1918
+ PASS declared node-npm-v1 probe plan validates
1919
+ PASS green baseline plus both explicit probes produces PROTECTED evidence
1920
+ PASS env and exact-replace probes are killed only by expected contract failures
1921
+ PASS adapter never mutates the source workspace
1922
+ PASS probe report retains output hashes/evidence refs instead of project test output
1923
+ PASS derived adapter evidence feeds the existing #84/#58 strict integrity gate
1924
+ PASS green test run under a required probe is explicitly SURVIVED, never PASS
1925
+ PASS green but weak suite cannot compensate 100 completeness with a surviving contract probe
1926
+ PASS unrelated failing test output is INVALID and cannot be credited as a kill
1927
+ PASS ambiguous exact-replace fallback fails closed without mutating source
1928
+ PASS replace probe rejects symlink/junction escape without mutating outside the isolated workspace
1929
+ PASS workspace copy rejects source symlinks/junctions before project code can mutate an outside target
1930
+ PASS v1 adapter refuses to infer/install external dependencies
1931
+ PASS non-green baseline blocks all protection claims
1932
+ PASS probe plan rejects replace targets that escape the isolated workspace
1933
+ PASS CLI returns exit 0 only for fully killed declared probes
1934
+ PASS adapter documentation states exact supported scope and explicit non-support
1935
+
1936
+ PASS: #84 contract protection node adapter (0 failures)
1937
+
1938
+ ▶️ Running test suite: mechanism-2al-codex-hooks-compat.test.js
1939
+
1940
+ [2al] Codex user-hook compatibility fallback (#122)...
1941
+ PASS explicit install materializes compatibility entries
1942
+ PASS install never changes Codex trust/config.toml state
1943
+ PASS status verifies exact installed entry hashes and runtime tree
1944
+ PASS status distinguishes installed hooks from Codex-trusted live capture
1945
+ PASS existing unrelated user hooks and top-level metadata are preserved semantically
1946
+ PASS every compatibility hook command resolves to the Harness-owned runtime copy
1947
+ PASS compatibility entries use literal absolute runtime paths without shell-specific plugin expansion
1948
+ PASS compatibility runtime is self-contained for hook and router dependencies
1949
+ PASS reinstall/update is idempotent and does not duplicate hook entries
1950
+ PASS update preserves user hooks added after the initial compatibility install
1951
+ PASS modified Harness compatibility entry makes update fail closed without rewriting user config
1952
+ PASS modified Harness compatibility entry makes uninstall fail closed rather than deleting user edits
1953
+ PASS explicit uninstall removes exact Harness-owned entries without changing trust state
1954
+ PASS uninstall preserves unrelated pre-existing and later-added user hooks
1955
+ PASS uninstall leaves config.toml/trust state byte-identical
1956
+ PASS uninstall removes Harness compatibility ownership manifest
1957
+ PASS compatibility install can create a new hooks.json when none exists
1958
+ PASS uninstall removes hooks.json only when Harness created it and no user entries remain
1959
+ PASS compatibility runtime is copied from the verified installed marketplace source
1960
+ PASS extra identical Harness hook is treated as user config drift, not silently deleted
1961
+ PASS uninstall never recreates a user hooks.json that was removed after compatibility install
1962
+ PASS byte-identical pre-existing user hooks are reused but never recorded as Harness-owned
1963
+ PASS uninstall preserves byte-identical hooks that predated compatibility install
1964
+ PASS forged manifest ownership fails closed without deleting a user hook
1965
+ PASS failed manifest commit rolls hooks.json back byte-identically
1966
+ PASS linked compatibility owner path cannot redirect writes outside Codex home
1967
+ PASS malformed user hooks.json fails closed without replacement
1968
+ PASS status clearly reports inactive observation capture when hooks are absent
1969
+ PASS fallback derives from the current packaged hook manifest instead of maintaining a second manual hook inventory
1970
+
1971
+ PASS: #122 Codex compatibility fallback (0 failures)
1972
+
1973
+ ▶️ Running test suite: mechanism-2am-observations-session-import.test.js
1974
+ PASS: post-revision Codex session labels import as redacted, prompt-paired, idempotent observations.
1975
+
1976
+ ▶️ Running test suite: mechanism-2am-openai-packaged-helper-runtime.test.js
1977
+ OpenAI packaged helper runtime smoke test passed
1978
+
1979
+ ▶️ Running test suite: mechanism-2an-environment-detection-readonly.test.js
1980
+ Issue #213 verified: detection is read-only across six adapters, repair is explicit/idempotent, and OpenCode stays separate.
1981
+
1982
+ ▶️ Running test suite: mechanism-2an-workflow-obligations.test.js
1983
+ === Issue #85 requirements-first workflow contract ===
1984
+ PASS Tier 2 route persists successfully
1985
+ PASS Tier 2 receives a preliminary iterative-single route
1986
+ PASS selected Tier 2 workflow begins pending
1987
+ PASS persisted workflow records semantic-contract mode rather than advisory-workflow
1988
+ PASS Tier 2 immediately materializes a planning contract
1989
+ PASS planning starts with decompose then compose
1990
+ PASS requirements begin empty instead of being invented by the router
1991
+ PASS router topology is recorded only as candidate strategy
1992
+ PASS workflow start refuses to pretend planning is complete
1993
+ PASS failed start leaves workflow pending
1994
+ PASS unresolved planning does not hard-block ordinary tools
1995
+ PASS Stop remains fail-open while planning is unresolved
1996
+ PASS unresolved planning cannot silently become satisfied
1997
+ PASS decomposition gap is visible
1998
+ PASS workflow-composition gap is visible
1999
+ PASS new single-agent plans cannot bypass active step typing
2000
+ PASS requirements and workflow selection are recorded before execution
2001
+ PASS requirement fragments are machine-readable
2002
+ PASS workflow choice is explicitly confirmed after decomposition
2003
+ PASS decompose obligation resolves from requirement fragments
2004
+ PASS compose obligation resolves from workflow-selection evidence
2005
+ PASS start activates the confirmed non-Fable workflow
2006
+ PASS confirmed workflow becomes running
2007
+ PASS planning contract advances to execution phase
2008
+ PASS execution adds execute/verify without losing planning evidence
2009
+ PASS execution obligation accepts bounded evidence-backed escape
2010
+ PASS verification obligation cannot be escaped
2011
+ PASS verification obligation can record explicit blocked evidence
2012
+ PASS blocked obligation still reminds without trapping Stop
2013
+ PASS blocked obligation keeps workflow unresolved rather than satisfied
2014
+ PASS blocked verification remains visible
2015
+ PASS verification can later resolve to pass with evidence
2016
+ PASS behavior-change binding resolves before its active step passes
2017
+ PASS behavior-change step advances after TDD binding resolution
2018
+ PASS verification skill resolves only when the verification step becomes active
2019
+ PASS verification step passes with objective evidence
2020
+ PASS objective verification milestone is observed after the earlier mutation
2021
+ PASS resolved workflow Stop remains fail-open
2022
+ PASS planning + execution + verification allow satisfied
2023
+ PASS satisfied workflow has no unresolved obligations
2024
+ PASS Tier 2 route persists for active-step binding coverage
2025
+
2026
+ === Binding declaration validation ===
2027
+ PASS invalid requiredBindings null fixture route persists (typed)
2028
+ PASS plan exits 2 for requiredBindings null (typed requirement)
2029
+ PASS rejected requiredBindings null plan writes no stdout (typed)
2030
+ PASS rejection identifies requiredBindings for null (typed requirement)
2031
+ PASS rejected requiredBindings null plan leaves workflow state unchanged (typed)
2032
+ PASS rejected requiredBindings null plan leaves obligation state unchanged (typed)
2033
+ PASS invalid requiredBindings null fixture route persists (untyped)
2034
+ PASS plan exits 2 for requiredBindings null (untyped requirement)
2035
+ PASS rejected requiredBindings null plan writes no stdout (untyped)
2036
+ PASS rejection identifies requiredBindings for null (untyped requirement)
2037
+ PASS rejected requiredBindings null plan leaves workflow state unchanged (untyped)
2038
+ PASS rejected requiredBindings null plan leaves obligation state unchanged (untyped)
2039
+ PASS invalid requiredBindings object fixture route persists (typed)
2040
+ PASS plan exits 2 for requiredBindings object (typed requirement)
2041
+ PASS rejected requiredBindings object plan writes no stdout (typed)
2042
+ PASS rejection identifies requiredBindings for object (typed requirement)
2043
+ PASS rejected requiredBindings object plan leaves workflow state unchanged (typed)
2044
+ PASS rejected requiredBindings object plan leaves obligation state unchanged (typed)
2045
+ PASS invalid requiredBindings object fixture route persists (untyped)
2046
+ PASS plan exits 2 for requiredBindings object (untyped requirement)
2047
+ PASS rejected requiredBindings object plan writes no stdout (untyped)
2048
+ PASS rejection identifies requiredBindings for object (untyped requirement)
2049
+ PASS rejected requiredBindings object plan leaves workflow state unchanged (untyped)
2050
+ PASS rejected requiredBindings object plan leaves obligation state unchanged (untyped)
2051
+ PASS invalid requiredBindings string fixture route persists (typed)
2052
+ PASS plan exits 2 for requiredBindings string (typed requirement)
2053
+ PASS rejected requiredBindings string plan writes no stdout (typed)
2054
+ PASS rejection identifies requiredBindings for string (typed requirement)
2055
+ PASS rejected requiredBindings string plan leaves workflow state unchanged (typed)
2056
+ PASS rejected requiredBindings string plan leaves obligation state unchanged (typed)
2057
+ PASS invalid requiredBindings string fixture route persists (untyped)
2058
+ PASS plan exits 2 for requiredBindings string (untyped requirement)
2059
+ PASS rejected requiredBindings string plan writes no stdout (untyped)
2060
+ PASS rejection identifies requiredBindings for string (untyped requirement)
2061
+ PASS rejected requiredBindings string plan leaves workflow state unchanged (untyped)
2062
+ PASS rejected requiredBindings string plan leaves obligation state unchanged (untyped)
2063
+ PASS invalid requiredBindings boolean fixture route persists (typed)
2064
+ PASS plan exits 2 for requiredBindings boolean (typed requirement)
2065
+ PASS rejected requiredBindings boolean plan writes no stdout (typed)
2066
+ PASS rejection identifies requiredBindings for boolean (typed requirement)
2067
+ PASS rejected requiredBindings boolean plan leaves workflow state unchanged (typed)
2068
+ PASS rejected requiredBindings boolean plan leaves obligation state unchanged (typed)
2069
+ PASS invalid requiredBindings boolean fixture route persists (untyped)
2070
+ PASS plan exits 2 for requiredBindings boolean (untyped requirement)
2071
+ PASS rejected requiredBindings boolean plan writes no stdout (untyped)
2072
+ PASS rejection identifies requiredBindings for boolean (untyped requirement)
2073
+ PASS rejected requiredBindings boolean plan leaves workflow state unchanged (untyped)
2074
+ PASS rejected requiredBindings boolean plan leaves obligation state unchanged (untyped)
2075
+ PASS invalid requiredBindings number fixture route persists (typed)
2076
+ PASS plan exits 2 for requiredBindings number (typed requirement)
2077
+ PASS rejected requiredBindings number plan writes no stdout (typed)
2078
+ PASS rejection identifies requiredBindings for number (typed requirement)
2079
+ PASS rejected requiredBindings number plan leaves workflow state unchanged (typed)
2080
+ PASS rejected requiredBindings number plan leaves obligation state unchanged (typed)
2081
+ PASS invalid requiredBindings number fixture route persists (untyped)
2082
+ PASS plan exits 2 for requiredBindings number (untyped requirement)
2083
+ PASS rejected requiredBindings number plan writes no stdout (untyped)
2084
+ PASS rejection identifies requiredBindings for number (untyped requirement)
2085
+ PASS rejected requiredBindings number plan leaves workflow state unchanged (untyped)
2086
+ PASS rejected requiredBindings number plan leaves obligation state unchanged (untyped)
2087
+ PASS invalid optionalBindings null fixture route persists (typed)
2088
+ PASS plan exits 2 for optionalBindings null (typed requirement)
2089
+ PASS rejected optionalBindings null plan writes no stdout (typed)
2090
+ PASS rejection identifies optionalBindings for null (typed requirement)
2091
+ PASS rejected optionalBindings null plan leaves workflow state unchanged (typed)
2092
+ PASS rejected optionalBindings null plan leaves obligation state unchanged (typed)
2093
+ PASS invalid optionalBindings null fixture route persists (untyped)
2094
+ PASS plan exits 2 for optionalBindings null (untyped requirement)
2095
+ PASS rejected optionalBindings null plan writes no stdout (untyped)
2096
+ PASS rejection identifies optionalBindings for null (untyped requirement)
2097
+ PASS rejected optionalBindings null plan leaves workflow state unchanged (untyped)
2098
+ PASS rejected optionalBindings null plan leaves obligation state unchanged (untyped)
2099
+ PASS invalid optionalBindings object fixture route persists (typed)
2100
+ PASS plan exits 2 for optionalBindings object (typed requirement)
2101
+ PASS rejected optionalBindings object plan writes no stdout (typed)
2102
+ PASS rejection identifies optionalBindings for object (typed requirement)
2103
+ PASS rejected optionalBindings object plan leaves workflow state unchanged (typed)
2104
+ PASS rejected optionalBindings object plan leaves obligation state unchanged (typed)
2105
+ PASS invalid optionalBindings object fixture route persists (untyped)
2106
+ PASS plan exits 2 for optionalBindings object (untyped requirement)
2107
+ PASS rejected optionalBindings object plan writes no stdout (untyped)
2108
+ PASS rejection identifies optionalBindings for object (untyped requirement)
2109
+ PASS rejected optionalBindings object plan leaves workflow state unchanged (untyped)
2110
+ PASS rejected optionalBindings object plan leaves obligation state unchanged (untyped)
2111
+ PASS invalid optionalBindings string fixture route persists (typed)
2112
+ PASS plan exits 2 for optionalBindings string (typed requirement)
2113
+ PASS rejected optionalBindings string plan writes no stdout (typed)
2114
+ PASS rejection identifies optionalBindings for string (typed requirement)
2115
+ PASS rejected optionalBindings string plan leaves workflow state unchanged (typed)
2116
+ PASS rejected optionalBindings string plan leaves obligation state unchanged (typed)
2117
+ PASS invalid optionalBindings string fixture route persists (untyped)
2118
+ PASS plan exits 2 for optionalBindings string (untyped requirement)
2119
+ PASS rejected optionalBindings string plan writes no stdout (untyped)
2120
+ PASS rejection identifies optionalBindings for string (untyped requirement)
2121
+ PASS rejected optionalBindings string plan leaves workflow state unchanged (untyped)
2122
+ PASS rejected optionalBindings string plan leaves obligation state unchanged (untyped)
2123
+ PASS invalid optionalBindings boolean fixture route persists (typed)
2124
+ PASS plan exits 2 for optionalBindings boolean (typed requirement)
2125
+ PASS rejected optionalBindings boolean plan writes no stdout (typed)
2126
+ PASS rejection identifies optionalBindings for boolean (typed requirement)
2127
+ PASS rejected optionalBindings boolean plan leaves workflow state unchanged (typed)
2128
+ PASS rejected optionalBindings boolean plan leaves obligation state unchanged (typed)
2129
+ PASS invalid optionalBindings boolean fixture route persists (untyped)
2130
+ PASS plan exits 2 for optionalBindings boolean (untyped requirement)
2131
+ PASS rejected optionalBindings boolean plan writes no stdout (untyped)
2132
+ PASS rejection identifies optionalBindings for boolean (untyped requirement)
2133
+ PASS rejected optionalBindings boolean plan leaves workflow state unchanged (untyped)
2134
+ PASS rejected optionalBindings boolean plan leaves obligation state unchanged (untyped)
2135
+ PASS invalid optionalBindings number fixture route persists (typed)
2136
+ PASS plan exits 2 for optionalBindings number (typed requirement)
2137
+ PASS rejected optionalBindings number plan writes no stdout (typed)
2138
+ PASS rejection identifies optionalBindings for number (typed requirement)
2139
+ PASS rejected optionalBindings number plan leaves workflow state unchanged (typed)
2140
+ PASS rejected optionalBindings number plan leaves obligation state unchanged (typed)
2141
+ PASS invalid optionalBindings number fixture route persists (untyped)
2142
+ PASS plan exits 2 for optionalBindings number (untyped requirement)
2143
+ PASS rejected optionalBindings number plan writes no stdout (untyped)
2144
+ PASS rejection identifies optionalBindings for number (untyped requirement)
2145
+ PASS rejected optionalBindings number plan leaves workflow state unchanged (untyped)
2146
+ PASS rejected optionalBindings number plan leaves obligation state unchanged (untyped)
2147
+ PASS empty-array binding fixture route persists
2148
+ PASS plan accepts omitted and explicit empty binding arrays
2149
+ PASS omitted binding arrays remain empty after normalization
2150
+ PASS explicit empty binding arrays remain empty after normalization
2151
+ PASS normalized ordered steps are recorded in the existing requirements contract
2152
+ PASS typed steps preserve request order
2153
+ PASS behavior-change step materializes required TDD binding
2154
+ PASS verification step owns its verification-loop binding
2155
+ PASS commit step materializes required git-commit binding
2156
+ PASS typed-step plan cannot omit the mandatory verification step
2157
+ PASS start accepts a confirmed typed-step workflow
2158
+ PASS start returns the first ordered step as active
2159
+ PASS start returns concrete commands for resolving the active binding and passing the step
2160
+ PASS review starts without TDD and surfaces only its optional binding
2161
+ PASS active optional binding includes its load path
2162
+ PASS start does not disclose future-step bindings
2163
+ PASS future-step binding cannot be resolved before its step becomes active
2164
+ PASS active step is persisted in workflow-obligations state
2165
+ PASS typed-step workflows do not reintroduce global suggested-skill pushes
2166
+ PASS active step cannot pass before surfaced optional bindings are resolved
2167
+ PASS active optional binding can be loaded with evidence
2168
+ PASS optional binding cannot be marked not-needed without evidence
2169
+ PASS active optional binding can be marked not-needed with evidence
2170
+ PASS review step can pass after its surfaced optional binding is resolved
2171
+ PASS review advance returns only the behavior-change step and its required TDD binding
2172
+ PASS behavior-change output includes its TDD path but keeps later bindings hidden
2173
+ PASS behavior-change cannot pass before required TDD binding is resolved
2174
+ PASS required TDD binding resolves with load evidence
2175
+ PASS resolved behavior-change advances to the mandatory verification step
2176
+ PASS verification binding is disclosed only when verification becomes active
2177
+ PASS verification binding resolves at its own step
2178
+ PASS verification step advances to commit only after its binding resolves
2179
+ PASS commit binding is disclosed only when the commit step becomes active
2180
+ PASS required git-commit binding resolves at the commit step
2181
+ PASS advancing the last step leaves no active-step bindings
2182
+ PASS completed typed steps resolve their aggregate execute and verify obligations with linked evidence
2183
+ PASS all typed steps can satisfy the workflow without separate aggregate dispositions
2184
+ PASS satisfied typed-step workflow has no unresolved obligations
2185
+ PASS verification-only workflow route persists
2186
+ PASS verification-only typed plan is accepted
2187
+ PASS verification-only typed plan starts at its verification step
2188
+ PASS empty typed execution group resolves as explicit verification-only evidence
2189
+ PASS verification-only step resolves its required binding
2190
+ PASS verification-only step passes with objective evidence
2191
+ PASS verification-only workflow can satisfy without an execution step
2192
+ PASS verification-only completion also resolves the aggregate verify obligation
2193
+ PASS route persists for unknown-required-binding coverage
2194
+ PASS unknown required binding is accepted into the auditable contract
2195
+ PASS start surfaces rather than silently discarding an unknown required binding
2196
+ PASS unknown required binding remains visible as pending/unavailable
2197
+ PASS unknown required binding cannot be falsely marked loaded
2198
+ PASS step with unknown required binding cannot pass
2199
+ PASS unknown required binding does not hard-block ordinary tools
2200
+ PASS missing binding keeps Stop fail-open while workflow remains unresolved
2201
+ PASS Stop reports the unresolved unknown binding
2202
+ PASS custom-reference workflow route persists
2203
+ PASS step contracts accept an explicit skill/reference path
2204
+ PASS custom reference path is normalized and disclosed only at its active step
2205
+ PASS explicit reference binding can resolve with evidence
2206
+ PASS active step can pass after its explicit reference binding is resolved
2207
+ PASS unsafe-reference workflow route persists
2208
+ PASS step bindings reject paths that traverse outside repository scope
2209
+ PASS drive-reference workflow route persists
2210
+ PASS step bindings reject Windows drive-relative paths
2211
+ PASS second Tier 2 route persists for replan discriminator
2212
+ PASS initial route records normalized knowledge signals
2213
+ PASS post-decomposition workflow can be recomposed through the router contract
2214
+ PASS recomposed workflow receives an explicit confirmed disposition
2215
+ PASS requested and router-confirmed post-decomposition strategy are preserved
2216
+ PASS recomposed plan becomes the pending execution contract
2217
+ PASS strategy recomposition preserves the original knowledge signals
2218
+ PASS recomposed workflow cannot become satisfied before its selected topology starts
2219
+ PASS recomposed Fable topology proceeds to its native stage-contract requirement
2220
+ PASS recomposed planning state still does not recreate a tool lock
2221
+ PASS prohibition fixture routes successfully
2222
+ PASS prohibited post-decomposition choice is evaluated by router policy
2223
+ PASS original user prohibition survives recomposition
2224
+ PASS requirements remain valid while only the prohibited workflow choice stays unresolved
2225
+ PASS Tier 3 Fable candidate persists successfully
2226
+ PASS Tier 3 keeps Fable as preliminary candidate
2227
+ PASS Fable also requires requirements/workflow planning before stage execution
2228
+ PASS Fable cannot enter stage execution before planning contract resolves
2229
+ PASS Tier 1 route persists successfully
2230
+ PASS clear bounded Tier 1 intent has no decomposition overhead
2231
+ PASS Tier 1 direct Stop remains lightweight
2232
+ PASS Tier 1 remains a minimal direct path
2233
+ PASS #190 mutation-probe lock remains retired
2234
+ PASS #190 hard budget state remains retired
2235
+
2236
+ PASS: issue #85 requirements-first workflow contract (0 failures)
2237
+
2238
+ ▶️ Running test suite: mechanism-2ao-plugin-sync.test.js
2239
+ Native plugin sync verified: absent plugins install, installed plugins update, and unknown state fails closed.
2240
+
2241
+ ▶️ Running test suite: mechanism-2ap-sbom.test.js
2242
+ npm warn gitignore-fallback No .npmignore file found, using .gitignore for file exclusion. Consider creating a .npmignore file to explicitly control published files.
2243
+ CycloneDX SBOM verified: 123 lockfile components and npm pack inclusion.
2244
+
2245
+ ▶️ Running test suite: mechanism-2aq-fable-stage-bindings.test.js
2246
+ === #297 Fable active-stage bindings ===
2247
+ PASS post-tool check hook remains fail-open
2248
+ PASS a successful check does not pass a stage while its declared bindings remain unresolved
2249
+ PASS check success and unresolved binding status are recorded separately
2250
+ PASS retained Fable notification shows the current stage
2251
+ PASS retained Fable notification shows only current-stage bindings
2252
+ PASS retained Fable notification hides future bindings and avoids repeating the full plan
2253
+ PASS unresolved Fable bindings do not hard-block ordinary mutation tools
2254
+ PASS unresolved Fable bindings do not hard-block Stop
2255
+ PASS Stop exposes the binding gap without locking the workflow
2256
+ PASS active required stage binding can be explicitly resolved
2257
+ PASS resolving one binding does not pass the stage while an optional binding is undecided
2258
+ PASS optional binding can be explicitly declined with evidence
2259
+ PASS stage check remains callable after binding resolution
2260
+ PASS successful stage check discloses the newly dependency-ready verifier binding
2261
+ PASS stage passes only after check and binding dispositions both resolve
2262
+ PASS passing stage retains correlated check evidence
2263
+ PASS packaged skill binding resolves to the installed Harness skill at run preparation
2264
+ PASS workspace reference binding resolves to the workspace file, not the Harness copy
2265
+ PASS a declared stage path with no file is recorded as missing, not available
2266
+ PASS a missing stage binding cannot be recorded as loaded
2267
+ PASS: #297 Fable stage binding gate mechanics
2268
+
2269
+ ▶️ Running test suite: mechanism-2ar-binding-resolution.test.js
2270
+ === PR #303 binding resolution ===
2271
+ PASS Tier 2 route persists for declared-path coverage
2272
+ PASS plan with a missing declared path is still recorded
2273
+ PASS a declared path with no file is recorded as missing, not available
2274
+ PASS a declared path that exists resolves to its readable file
2275
+ PASS workflow starts with a visible missing binding
2276
+ PASS a missing required binding cannot be marked loaded
2277
+ PASS the failed load leaves the required binding visibly unavailable
2278
+ PASS the step cannot pass while its required binding is unresolved
2279
+ PASS an existing optional binding can be loaded
2280
+ PASS repository/Claude plugin layout resolves tdd/SKILL.md at the package root
2281
+ PASS Codex plugin package ships the binding resolver
2282
+ PASS Codex plugin layout resolves tdd/SKILL.md under its skills/ root
2283
+ PASS a path absent from workspace and package roots is missing
2284
+ PASS fixture precondition: Harness ships docs/architecture.md
2285
+ PASS a missing workspace reference does not resolve to the Harness package copy
2286
+ PASS a skill id naming its own SKILL.md still resolves from the package
2287
+ PASS a registered id at an unregistered path is treated as a workspace reference
2288
+ PASS Tier 2 route persists in a client workspace
2289
+ PASS client plan declares a workspace reference that collides with a Harness file
2290
+ PASS step flow records the colliding workspace reference as missing
2291
+ PASS client workflow starts
2292
+ PASS step flow cannot load the Harness copy as the workspace reference
2293
+ PASS stage flow records the colliding workspace reference as missing
2294
+ PASS router runs against a workspace with a generated-skill manifest
2295
+ PASS matching self-evolved skill surfaces as a metadata-only id
2296
+ PASS router does not disclose the generated skill path or text
2297
+ PASS unrelated prompts do not surface the generated skill
2298
+ PASS Tier 2 route persists in the generated-skill workspace
2299
+ PASS a step can declare the generated skill id as a binding
2300
+ PASS the generated binding is not disclosed before its step is active
2301
+ PASS built-in TDD binding resolves from the package root outside the Harness repo
2302
+ PASS the generated binding becomes available with its SKILL.md once its step is active
2303
+ PASS the active generated binding can be loaded
2304
+
2305
+ PASS: PR #303 binding resolution (0 failures)
2306
+
2307
+ ▶️ Running test suite: mechanism-2b-boundary-guard.test.js
2308
+
2309
+ [2b] Boundary reminder...
2310
+ ✅ 2b. Large read emits a reminder but remains available
2311
+
2312
+ ▶️ Running test suite: mechanism-2c-state-persist.test.js
2313
+
2314
+ [2c] State persistence (WAL)...
2315
+ ✅ 2c. Failing Bash call is recorded as status=failed
2316
+ ✅ 2c. Claude-shaped PostToolUse without exitCode clears failed state even with stderr diagnostics
2317
+ ✅ 2c. Numeric non-zero exit still records failure on hosts that report exit codes
2318
+ ✅ 2c. Numeric zero exit still clears failure state
2319
+ ✅ 2c. PostToolUseFailure remains authoritative without numeric exitCode
2320
+
2321
+ ▶️ Running test suite: mechanism-2d-fact-audit.test.js
2322
+
2323
+ [2d] Fact-audit reminder...
2324
+ ✅ 2d. tier-router.js reads {"prompt":...} from stdin and emits FACT-AUDIT REMINDER
2325
+
2326
+ ▶️ Running test suite: mechanism-2e-scope-guard.test.js
2327
+
2328
+ [2e] Subagent scope reminder...
2329
+ ✅ 2e. Scope drift is reported without blocking
2330
+
2331
+ ▶️ Running test suite: mechanism-2f-stop-gate.test.js
2332
+
2333
+ [2f] Verification reminders...
2334
+ ✅ 2f. Unverified dirty Stop emits reminder and exits 0
2335
+ ✅ 2f. Stop reminder creates no lock/throttle state
2336
+ ✅ 2f. Observed verification can mark workflow satisfied
2337
+ ✅ 2f. Missing verification is reminder-only
2338
+ ✅ 2f. Missing verification does not create blocked state
2339
+
2340
+ ▶️ Running test suite: mechanism-2g-platform-ignore.test.js
2341
+
2342
+ [2g] Platform ignore patterns / Gitignore matching...
2343
+ ✅ 2g. getIgnorePatterns returns ONLY Harness skills
2344
+ ✅ 2g. isMatch returns true for parent folder match (Claude)
2345
+ ✅ 2g. isMatch returns true for exact match of harness skill (Claude)
2346
+ ✅ 2g. getIgnorePatterns returns ONLY Harness skills (Cursor)
2347
+ ✅ 2g. isMatch returns true for parent folder match (Cursor)
2348
+
2349
+ ▶️ Running test suite: mechanism-2h-installer-manifest.test.js
2350
+
2351
+ [2h] Installer manifest and skill bookkeeping...
2352
+ ✅ 2h. readManifest returns fallback structure when file does not exist
2353
+ ✅ 2h. recordSkillInstall successfully records skill information
2354
+ ✅ 2h. recordGeneratedSkill successfully records generated skill with triggers
2355
+ ✅ 2h. removeGeneratedSkill removes generated skill correctly
2356
+ ✅ 2h. isHarnessSkillDir detects Harness author correctly
2357
+ ✅ 2h. isHarnessSkillDir detects author under metadata: (spec format)
2358
+ ✅ 2h. isHarnessSkillDir returns false for foreign authors
2359
+ ✅ 2h. removeSkillFromManifest cleans up or unlinks empty manifest
2360
+ ⚠️ Preserved existing agent without overwrite: <HARNESS_SOURCE>/.mechanism-test-manifest-ws/agents/fable-orchestrator.md
2361
+ ✅ Installed agent: test-agents/fable-verifier.md
2362
+ ✅ Installed agent: test-agents/fable-worker-haiku.md
2363
+ ✅ Installed agent: test-agents/fable-worker-sonnet.md
2364
+ ✅ 2h. Fable agents are manifest tracked without overwriting a conflicting file
2365
+ ✅ 2h. Removing Fable agents removes only tracked files and manifest state
2366
+ ⚠️ Preserved existing agent without overwrite: <HARNESS_SOURCE>/.mechanism-test-manifest-ws/agents/fable-orchestrator.md
2367
+ ⚠️ Preserved pre-existing identical agent without claiming ownership: <HARNESS_SOURCE>/.mechanism-test-manifest-ws/agents/fable-verifier.md
2368
+ ✅ Installed agent: test-agents/fable-worker-haiku.md
2369
+ ✅ Installed agent: test-agents/fable-worker-sonnet.md
2370
+ ✅ 2h. Pre-existing identical agent is not claimed as Harness-owned
2371
+ ✅ 2h. Pre-existing identical agent survives tracked-agent removal
2372
+
2373
+ ▶️ Running test suite: mechanism-2i-crlf-frontmatter.test.js
2374
+ ❌ 2i-setup. Test harness error: ENOENT: no such file or directory, lstat '<HARNESS_SOURCE>/node_modules'
2375
+ ❌ Test suite failed: mechanism-2i-crlf-frontmatter.test.js
2376
+
2377
+ ▶️ Running test suite: mechanism-2i-install-verification.test.js
2378
+
2379
+ [2i] Installed version and skill-tree verification...
2380
+ ✅ 2i. matching version and tree pass
2381
+ ✅ 2i. modified installed skill is reported stale
2382
+ ✅ 2i. old package version is reported stale
2383
+ ✅ 2i. legacy install without a manifest is reported stale
2384
+
2385
+ ▶️ Running test suite: mechanism-2j-behavioral-runner.test.js
2386
+
2387
+ [2j] Behavioral runner argv integrity...
2388
+ ✅ 2j. opencode receives the complete prompt as one argv value
2389
+ ✅ 2j. claude receives the complete prompt as one argv value
2390
+ ✅ 2j. Claude baseline excludes user customizations
2391
+ ✅ 2j. Claude treatment keeps only project/local customizations
2392
+ ✅ 2j. Claude emits parseable verbose stream JSON
2393
+ ✅ 2j. behavioral workspace builder accepts a valid nested fixture through the public execution contract
2394
+ ✅ 2j. behavioral fixtures reject traversal for the expected boundary reason
2395
+ ✅ 2j. fixture setup runs via Node in the generated workspace
2396
+ ✅ 2j. setup failure is classified as fixture-error before any model session
2397
+ ✅ 2j. worktree/submodule setup creates the real #243 topology before model execution
2398
+ ✅ 2j. fixture errors remain distinct aggregate infrastructure failures
2399
+
2400
+ ▶️ Running test suite: mechanism-2j-fixture-entrypoints.test.js
2401
+ Fixture entrypoints: paired baseline/treatment and plugin execute setup; failures skip installation/model and are excluded from scores.
2402
+
2403
+ ▶️ Running test suite: mechanism-2k-reference-check.test.js
2404
+
2405
+ [2k] Skill reference checker negative control...
2406
+ ✅ 2k. dangling executable reference fails
2407
+ ✅ 2k. existing executable reference passes
2408
+ ✅ 2k. bare skill-local paths fail the explicit marker rule
2409
+ ✅ 2k. explicit skill-local paths pass
2410
+ ✅ 2k. <this-skill-dir>/ is authoritative and never falls back to the repo root
2411
+ ✅ 2k. <this-skill-dir>/ resolves under the skill itself
2412
+ ✅ 2k. <this-skill-dir>/../ reaches a sibling
2413
+ ✅ 2k. unknown placeholder fails instead of being skipped
2414
+ ✅ 2k. <workspace>/ paths are skipped, not resolved locally
2415
+
2416
+ ▶️ Running test suite: mechanism-2l-multi-agent-workspace.test.js
2417
+
2418
+ [2l] Multi-agent workspace integration...
2419
+ ✅ 2l. skill contract names global runtime and resolved document writes
2420
+ ✅ 2l. grill fallback names committable document paths
2421
+ ✅ 2l. missing agency source is explicit and still scaffolds core workspace
2422
+ ✅ 2l. root CONTEXT-MAP takes precedence for every document zone
2423
+ ✅ 2l. projectDocs paths are explicit and do not become inferred paths
2424
+ ✅ 2l. existing repository document folders are inferred
2425
+ ✅ 2l. legacy authored records migrate to the resolved repository path
2426
+ ✅ 2l. migration conflicts preserve both existing files and legacy source
2427
+ ✅ 2l. migration rejects duplicate destinations before copying or deleting records
2428
+ ✅ 2l. document paths reject junction escapes from the workspace
2429
+ ✅ 2l. legacy migration rejects a linked source before copying or deleting outside files
2430
+ ✅ 2l. installed router template resolves paths into global runtime
2431
+ ✅ 2l. an explicitly missing agency source fails clearly
2432
+ ✅ 2l. fixture source selects metadata and records a verified handoff
2433
+ ✅ 2l. repeated scaffold is idempotent
2434
+ ✅ 2l. installed indexer runs independently and lists selected specialist
2435
+ ✅ 2l. indexer uses explicit manifest/output paths without depth inference
2436
+ ✅ 2l. indexer fails clearly when its manifest is missing
2437
+ ✅ 2l. unsupported platform fails explicitly
2438
+ ✅ 2l. duplicate agent names fail before writing output
2439
+ ✅ 2l. empty division fails before writing output
2440
+ ✅ 2l. unsafe division path is rejected before reading outside source
2441
+ ✅ 2l. source revision drift requires an explicit override
2442
+
2443
+ ▶️ Running test suite: mechanism-2m-self-repo-guard.test.js
2444
+
2445
+ [2m] Self-repo guard identifies the harness repo by identity, not path...
2446
+ ✅ 2m. isHarnessRepo() recognises a harness checkout
2447
+ ✅ 2m. isHarnessRepo() rejects an unrelated project
2448
+ ✅ 2m. isHarnessRepo() is false when package.json is absent
2449
+ ✅ 2m. bootstrap run out-of-tree against a harness checkout advises no repair
2450
+ ✅ 2m. bootstrap still advises repair for an unrelated project (guard is not blanket suppression)
2451
+ ✅ 2m. self-heal reports an unmarked AGENTS.md as present-without-block, not missing
2452
+
2453
+ ▶️ Running test suite: mechanism-2n-opencode-plugin.test.js
2454
+
2455
+ [2n] opencode enforcement plugin: real hook API and firing behavior...
2456
+ ✅ 2n. the repository inventory manifest exists
2457
+ ✅ 2n. every standalone hook file on disk is declared in the inventory manifest
2458
+ ✅ 2n. every declared inventory hook path exists on disk
2459
+ ✅ 2n. no standalone hook is declared more than once
2460
+ ✅ 2n. the plugin ships as a single self-contained module (installable by copying one file)
2461
+ ✅ 2n. exports exactly the hooks it uses (tool.execute.before/after, event)
2462
+ ✅ 2n. non-edit tools do not mark verification pending
2463
+ ✅ 2n. an edit tool call marks verification pending
2464
+ ✅ 2n. a passing verification on session.idle clears pending state
2465
+ ✅ 2n. no follow-up prompt is sent when verification passes
2466
+ ✅ 2n. two failures on the same signature: still allowed, not yet tripped
2467
+ ✅ 2n. each failed verification sends exactly one follow-up prompt
2468
+ ✅ 2n. 3rd failure on the same signature forces reflection
2469
+ ✅ 2n. the forced-reflection prompt says to reflect
2470
+ ✅ 2n. pending reflection blocks another code edit
2471
+ ✅ 2n. pending reflection still allows read tools
2472
+ ✅ 2n. the forced-reflection prompt names a verifiable artifact token
2473
+ ✅ 2n. a directive outside the Decision section does not complete reflection
2474
+ ✅ 2n. apply_patch reflection completes the lifecycle, resets the signature count, and persists lastReflection
2475
+ ✅ 2n. repeated idle does not duplicate verification or follow-up prompts
2476
+ ✅ 2n. apply_patch is allowed to write a pending reflection artifact
2477
+ ✅ 2n. apply_patch output args complete a pending reflection
2478
+ ✅ 2n. mixed apply_patch cannot bypass a pending reflection
2479
+ ✅ 2n. first post-reflection failure starts again at count=1
2480
+ ✅ 2n. no permanent post-reflection hard lock remains
2481
+ ✅ 2n. a second session has an independent breaker stream
2482
+ 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.
2483
+ ✅ 2n. corrupt breaker state fails open instead of becoming a cognitive lock
2484
+ ✅ 2n. failed prompt delivery remains retryable
2485
+ ✅ 2n. next idle retries the saved follow-up exactly once
2486
+ ✅ 2n. session.created resets only the current session state
2487
+ ✅ 2n. a reset session can edit again
2488
+ ✅ 2n. dot and dotdot session IDs never escape the sessions root
2489
+ ✅ 2n. resetting an unsafe session cannot delete an outside sentinel
2490
+ ✅ 2n. resetting s1 leaves the independent s2 state
2491
+ ✅ 2n. legacy flat state migrates into the workspace-keyed root
2492
+ ✅ 2n. hook state stayed inside the redirected HOME
2493
+
2494
+ ▶️ Running test suite: mechanism-2o-state-home-isolation.test.js
2495
+
2496
+ [2o] State-home isolation: runtime state never scatters into cwd (issue #42)...
2497
+ ✅ 2o. harness-state.js creates zero files in a non-git nested dir
2498
+ ✅ 2o. ...and the session dir lands under the global state home instead
2499
+ ✅ 2o. model-selector.js (zero-walk before the fix) creates zero files in a non-git nested dir
2500
+ ✅ 2o. ...and its audit log lands under the same global state/ stream as harness-state.js
2501
+ ✅ 2o. scaffold.js with no --workspace resolves to the repo root from a nested dir
2502
+ ✅ 2o. ...and does not scatter runtime files into the repository or nested invocation directory
2503
+ ✅ 2o. harness-state.js walks up to the repo root from a nested in-repo dir, not the nested dir
2504
+ ✅ 2o. ...and its state dir is under the global home, not under the git fixture at all
2505
+ ✅ 2o. pre-existing scattered state migrates into the new global location
2506
+ ✅ 2o. ...and the old in-repo location is gone afterward
2507
+
2508
+ ▶️ Running test suite: mechanism-2p-installer-links.test.js
2509
+
2510
+ [2p] Canonical-store link/copy install + link-aware uninstall (issue #49)...
2511
+ ✅ Installed skill: .claude/skills/tdd/ (symlink -> ../../.agents/skills/tdd)
2512
+ ✅ Installed skill: .cursor/skills/tdd/ (symlink -> ../../.agents/skills/tdd)
2513
+ ✅ 2p. both platform targets are real links (symlink/junction), not physical copies
2514
+ ✅ 2p. the canonical copy itself is a physical directory, not a link
2515
+ ✅ 2p. content is readable through the link and matches source
2516
+ ✅ 2p. manifest records kind + canonicalPath for a linked entry
2517
+ ✅ 2p. getInstalledSkills lists exactly the 2 linked entries, not the canonical dir as a 3rd
2518
+ ✅ 2p. removing one link deletes only that link, canonical copy survives (still referenced)
2519
+ ✅ 2p. removing the LAST link also removes the now-orphaned canonical copy
2520
+ ✅ Installed skill: .codex/skills/tdd/
2521
+ ✅ 2p. --copy mode installs a physical directory, not a link
2522
+ ✅ 2p. --copy mode manifest entry has no kind/canonicalPath
2523
+ ✅ 2p. --copy mode entry uninstalls cleanly
2524
+ ✅ Installed skill: .continue/skills/tdd/ (symlink -> ../../.agents/skills/tdd)
2525
+ ✅ 2p. a dangling link is still detected as present (pathPresent) even though its target is gone
2526
+ ✅ 2p. getInstalledSkills still surfaces the dangling link for cleanup
2527
+ ✅ 2p. removeSkill cleans up the dangling link and its manifest row
2528
+ ✅ 2p. a pre-#49 manifest entry (no kind/canonicalPath) is still discovered
2529
+ ✅ 2p. a pre-#49 entry uninstalls cleanly with no canonical-store side effects
2530
+
2531
+ ▶️ Running test suite: mechanism-2q-installer-global-shared-store.test.js
2532
+
2533
+ [2q] Global scope: canonical store reuses the pre-existing shared ~/.agents/skills (issue #49)...
2534
+ ✅ 2q. global installer works from a non-git directory
2535
+ ✅ 2q. global canonical dir IS the pre-existing shared ~/.agents/skills path, not a new location
2536
+ ✅ Installed skill: ~/.agents/skills/tdd/
2537
+ ✅ Installed skill: ~/.claude/skills/tdd/ (symlink -> ../../.agents/skills/tdd)
2538
+ ✅ 2q. the shared target (cursor/codex/continue/copilot/hermes stand-in) gets the PHYSICAL copy, not a link to itself
2539
+ ✅ 2q. Claude's separate global target links into the shared store instead of duplicating it
2540
+ ✅ 2q. the shared-store manifest entry records a plain copy (no kind/canonicalPath)
2541
+ ✅ 2q. removing Claude's link leaves the shared store intact (still independently in use)
2542
+ ✅ Installed skill: ~/.claude/skills/tdd/ (symlink -> ../../.agents/skills/tdd)
2543
+ ✅ 2q. (setup) Claude re-linked to the shared store
2544
+ ✅ 2q. removing the shared store directly also sweeps Claude's now-dangling dependent link
2545
+
2546
+ ▶️ Running test suite: mechanism-2r-uninstall-flags.test.js
2547
+
2548
+ [2r] Uninstall CLI flag handling: no silent no-op, combined local+global (issue #48)...
2549
+ ✅ 2r. bare uninstall with no TTY exits non-zero instead of silently succeeding
2550
+ ✅ 2r. ...and prints a hint about the flags to pass
2551
+ ✅ 2r. ...and actually removed nothing (settings.json + skill both still present)
2552
+ ✅ 2r. `uninstall --local --skills` exits 0
2553
+ ✅ 2r. ...and actually removed the local skill
2554
+ ✅ 2r. `uninstall --local --global --skills` exits 0
2555
+ ✅ 2r. ...local skill removed
2556
+ ✅ 2r. ...AND global skill removed in the SAME run
2557
+ ✅ 2r. first run (--local only) exits 0
2558
+ ✅ 2r. ...and leaves the skill in place as requested
2559
+ ✅ 2r. second run (--skills) exits 0
2560
+ ✅ 2r. ...and this time removes the skill left over from the first run
2561
+
2562
+ ▶️ Running test suite: mechanism-2s-tdd-quality.test.js
2563
+
2564
+ [2s] TDD quality evidence gate (issue #58)...
2565
+ ✅ 2s. fixture catalog covers every required outcome
2566
+ ✅ 2s. complete profile-routed evidence passes with a 100 score
2567
+ ✅ 2s. report publishes the canonical weights and pass threshold
2568
+ ✅ 2s. integration score follows the canonical weighted formula exactly
2569
+ ✅ 2s. every requirement must declare its selected test profile
2570
+ ✅ 2s. only unit and integration profiles are accepted
2571
+ ✅ 2s. unit evidence may mark integration determinism N/A with a reason
2572
+ ✅ 2s. unit score renormalizes only the applicable canonical weights
2573
+ ✅ 2s. integration evidence cannot bypass repeated determinism checks
2574
+ ✅ 2s. report exposes raw counts, percentages, and mandatory gates
2575
+ ✅ 2s. missing an applicable input class is rejected
2576
+ ✅ 2s. incomplete output validation is rejected
2577
+ ✅ 2s. failed unexpected-input behavior is rejected
2578
+ ✅ 2s. untested and skipped error paths are rejected and visible
2579
+ ✅ 2s. unequal repeated integration output is rejected
2580
+ ✅ 2s. implementation/source mismatches fail
2581
+ ✅ 2s. source defects are reported separately without inventing a mismatch
2582
+ ✅ 2s. unresolved authoritative source conflicts fail
2583
+ ✅ 2s. inferred expectations remain explicit and traceable
2584
+ ✅ 2s. N/A declarations without a written reason are rejected
2585
+ ✅ 2s. reasoned N/A stays visible and does not lower applicable scores
2586
+ ✅ 2s. explicitly source-backed volatile fields may be normalized
2587
+ ✅ 2s. malformed evidence fails closed
2588
+ ✅ 2s. incomplete deterministic side-effect evidence is rejected
2589
+ ✅ 2s. duplicate requirement IDs are rejected
2590
+ ✅ 2s. CLI emits per-requirement human scores and structured JSON
2591
+ ✅ 2s. CLI returns exit 1 and writes structured JSON for a valid FAIL report
2592
+ ✅ 2s. CLI returns exit 2 for malformed JSON
2593
+ ✅ 2s. shipped PASS evidence is executable
2594
+
2595
+ ▶️ Running test suite: mechanism-2t-disclosure.test.js
2596
+
2597
+ [2t] Progressive-disclosure negative controls...
2598
+ ✅ 2t. complete disclosure surface passes
2599
+ ✅ 2t. missing workflow pairing fails
2600
+ ✅ 2t. missing Mermaid coverage fails
2601
+ ✅ 2t. empty Mermaid transition fails
2602
+ ✅ 2t. dashes inside a node label do not fake a transition
2603
+ ✅ 2t. wildcard Deep dive requires a matching file
2604
+ ✅ 2t. wildcard Deep dive resolves a matching file
2605
+ ✅ 2t. Deep dive traversal stays inside the package
2606
+ ✅ 2t. dangling Deep dive pointer fails
2607
+ ✅ 2t. Mermaid inside SKILL.md fails
2608
+ ✅ 2t. missing references directory fails
2609
+ ✅ 2t. orphan workflow document fails
2610
+
2611
+ ▶️ Running test suite: mechanism-2t-evidence-triage.test.js
2612
+ Behavioral evidence-triage regressions passed.
2613
+
2614
+ ▶️ Running test suite: mechanism-2t-issue-20.test.js
2615
+
2616
+ [2t] Issue #20 regression coverage...
2617
+ ✅ 2t. behavioral YAML parsing preserves block scalars under CRLF
2618
+ ✅ 2t. opencode plugin runner validate command exits successfully
2619
+ ✅ 2t. routing check gracefully skips when waza is unavailable
2620
+ ✅ 2t. description collision gate fails closed on malformed YAML
2621
+ ❌ 2t. negative controls execute real gates and pass
2622
+ exit 1
2623
+ real gate: description-collision.js exited 1
2624
+ ✅ description-collision rejects duplicate descriptions
2625
+
2626
+ Negative control results: 1 passed, 4 failed
2627
+
2628
+ ❌ consistency-check rejects malformed frontmatter
2629
+ consistency-check.js failed without the expected diagnostic:
2630
+
2631
+ node:internal/modules/cjs/loader:1459
2632
+ throw err;
2633
+ ^
2634
+
2635
+ Error: Cannot find module 'js-yaml'
2636
+ Require stack:
2637
+ - <HARNESS_SOURCE>/ci/consistency-check.js
2638
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1456:15)
2639
+ at defaultResolveImpl (node:internal/modules/cjs/loader:1066:19)
2640
+ at resolveForCJSWithHooks (node:internal/modules/cjs/loader:1071:22)
2641
+ at Module._load (node:internal/modules/cjs/loader:1242:25)
2642
+ at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)
2643
+ at Module.require (node:internal/modules/cjs/loader:1556:12)
2644
+ at require (node:internal/modules/helpers:152:16)
2645
+ at Object.<anonymous> (<HARNESS_SOURCE>/ci/consistency-check.js:18:14)
2646
+ at Module._compile (node:internal/modules/cjs/loader:1812:14)
2647
+ at Object..js (node:internal/modules/cjs/loader:1943:10) {
2648
+ code: 'MODULE_NOT_FOUND',
2649
+ requireStack: [
2650
+ '<HARNESS_SOURCE>/ci/consistency-check.js'
2651
+ ]
2652
+ }
2653
+
2654
+ Node.js v24.14.1
2655
+
2656
+ ❌ consistency-check rejects a missing frontmatter delimiter
2657
+ consistency-check.js failed without the expected diagnostic:
2658
+
2659
+ node:internal/modules/cjs/loader:1459
2660
+ throw err;
2661
+ ^
2662
+
2663
+ Error: Cannot find module 'js-yaml'
2664
+ Require stack:
2665
+ - <HARNESS_SOURCE>/ci/consistency-check.js
2666
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1456:15)
2667
+ at defaultResolveImpl (node:internal/modules/cjs/loader:1066:19)
2668
+ at resolveForCJSWithHooks (node:internal/modules/cjs/loader:1071:22)
2669
+ at Module._load (node:internal/modules/cjs/loader:1242:25)
2670
+ at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)
2671
+ at Module.require (node:internal/modules/cjs/loader:1556:12)
2672
+ at require (node:internal/modules/helpers:152:16)
2673
+ at Object.<anonymous> (<HARNESS_SOURCE>/ci/consistency-check.js:18:14)
2674
+ at Module._compile (node:internal/modules/cjs/loader:1812:14)
2675
+ at Object..js (node:internal/modules/cjs/loader:1943:10) {
2676
+ code: 'MODULE_NOT_FOUND',
2677
+ requireStack: [
2678
+ '<HARNESS_SOURCE>/ci/consistency-check.js'
2679
+ ]
2680
+ }
2681
+
2682
+ Node.js v24.14.1
2683
+
2684
+ ❌ consistency-check rejects an over-budget skill
2685
+ consistency-check.js failed without the expected diagnostic:
2686
+
2687
+ node:internal/modules/cjs/loader:1459
2688
+ throw err;
2689
+ ^
2690
+
2691
+ Error: Cannot find module 'js-yaml'
2692
+ Require stack:
2693
+ - <HARNESS_SOURCE>/ci/consistency-check.js
2694
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1456:15)
2695
+ at defaultResolveImpl (node:internal/modules/cjs/loader:1066:19)
2696
+ at resolveForCJSWithHooks (node:internal/modules/cjs/loader:1071:22)
2697
+ at Module._load (node:internal/modules/cjs/loader:1242:25)
2698
+ at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)
2699
+ at Module.require (node:internal/modules/cjs/loader:1556:12)
2700
+ at require (node:internal/modules/helpers:152:16)
2701
+ at Object.<anonymous> (<HARNESS_SOURCE>/ci/consistency-check.js:18:14)
2702
+ at Module._compile (node:internal/modules/cjs/loader:1812:14)
2703
+ at Object..js (node:internal/modules/cjs/loader:1943:10) {
2704
+ code: 'MODULE_NOT_FOUND',
2705
+ requireStack: [
2706
+ '<HARNESS_SOURCE>/ci/consistency-check.js'
2707
+ ]
2708
+ }
2709
+
2710
+ Node.js v24.14.1
2711
+
2712
+ ❌ normal repository passes the exercised gates
2713
+ consistency-check failed (exit 1)
2714
+
2715
+ ❌ Test suite failed: mechanism-2t-issue-20.test.js
2716
+
2717
+ ▶️ Running test suite: mechanism-2t-platform-skill-targets.test.js
2718
+
2719
+ [2t] Platform-native skill targets + install ownership safety (issue #80)...
2720
+ ✅ 2t. codex local target matches the installer contract
2721
+ ✅ Installed skill: .agents/skills/tdd/
2722
+ ✅ 2t. codex local --copy writes a readable SKILL.md
2723
+ ✅ 2t. continue global target matches the installer contract
2724
+ ✅ Installed skill: ~/.continue/skills/tdd/
2725
+ ✅ 2t. continue global --copy writes a readable SKILL.md
2726
+ ✅ 2t. hermes local target matches the installer contract
2727
+ ✅ Installed skill: .agents/skills/tdd/
2728
+ ✅ 2t. hermes local --copy writes a readable SKILL.md
2729
+ ✅ 2t. hermes global target matches the installer contract
2730
+ ✅ Installed skill: ~/.hermes/skills/tdd/
2731
+ ✅ 2t. hermes global --copy writes a readable SKILL.md
2732
+ ✅ 2t. Continue native global manifest is discoverable
2733
+ ✅ 2t. Hermes native global manifest is discoverable
2734
+ ✅ 2t. native global skill scopes use the protected global sentinel
2735
+ ℹ️ Hermes global skills install to ~/.hermes/skills/. Project advisory context remains project-scoped via .hermes.md.
2736
+ ✅ 2t. Hermes global install writes an owned detection marker
2737
+ ✅ 2t. Hermes global uninstall removes its detection marker
2738
+ ✅ 2t. malformed Claude settings fail closed
2739
+ ✅ 2t. malformed Claude settings remain byte-for-byte unchanged
2740
+ ✅ 2t. Continue refuses to overwrite a user-owned harness.md
2741
+ ✅ 2t. Continue collision leaves original bytes unchanged
2742
+ ✅ 2t. copilot global install refuses a user-owned fixed prompt file
2743
+ ✅ 2t. copilot global uninstall preserves non-Harness file
2744
+ ✅ 2t. codex global install refuses a user-owned fixed prompt file
2745
+ ✅ 2t. codex global uninstall preserves non-Harness file
2746
+
2747
+ ▶️ Running test suite: mechanism-2t-transcript-parser.test.js
2748
+
2749
+ [2t] Structured behavioral transcript parser...
2750
+ ✅ 2t. Claude stream is parsed
2751
+ ✅ 2t. Claude trace keeps assistant text and tool input
2752
+ ✅ 2t. Claude trace excludes tool output
2753
+ ✅ 2t. Claude preserves result metadata
2754
+ ✅ 2t. Claude correlates completed tool evidence
2755
+ ✅ 2t. Permission denial is evidence
2756
+ ✅ 2t. Denial grader passes only denied evidence
2757
+ ✅ 2t. Oral command mention has no attempted tool
2758
+ ✅ 2t. Oral command prose cannot satisfy trace execution evidence
2759
+ ✅ 2t. Existing opencode JSONL remains supported
2760
+ ✅ 2t. Duplicate opencode tool events are one call
2761
+ ✅ 2t. Opencode tool output never enters trace
2762
+ ✅ 2t. Explicit IDs coalesce only by their ID
2763
+ ✅ 2t. Out-of-order result and call events coalesce by ID
2764
+ ✅ 2t. Output text cannot masquerade as permission denial
2765
+ ✅ 2t. Truncated CRLF stream is inconclusive
2766
+ ✅ 2t. Partial execution evidence is inconclusive
2767
+ ✅ 2t. Legacy JSON keeps readable final text
2768
+ ✅ 2t. Legacy JSON does not claim tool visibility
2769
+ ✅ 2t. Unavailable evidence is inconclusive
2770
+ ✅ 2t. Auto detection preserves legacy JSON
2771
+ ✅ 2t. Legacy final prose cannot produce a definitive trace grade
2772
+ ✅ 2t. Claude user-event text is not agent trace
2773
+ ✅ 2t. {"type":"tool_executed","command":"npm test"} does not match another completed command
2774
+ ✅ 2t. {"type":"tool_executed","command":"rm -rf /"} does not match another completed command
2775
+ ✅ 2t. {"type":"tool_executed","tool":"npm test"} does not match another completed command
2776
+ ✅ 2t. Command targets reject extra arguments
2777
+ ✅ 2t. top-level tool calls and results remain structured evidence
2778
+ ✅ 2t. structured trace preserves tool-before-text event order
2779
+ ✅ 2t. bare patch filenames count as edits for after_edit grading
2780
+ ✅ 2t. runner trace keeps bare patch, bash, then final text order
2781
+ ✅ 2t. Tool input qualifiers do not match unrelated TodoWrite state
2782
+ ✅ 2t. Behavioral cases do not retain the obsolete #52 trace limitation
2783
+ ✅ 2t. Non-definitive arm cannot produce effectiveness
2784
+ ✅ 2t. Session errors cannot produce effectiveness
2785
+ ✅ 2t. Inconclusive pairs are excluded from effectiveness aggregates
2786
+ ✅ 2t. Missing tool counts preserve a null delta
2787
+
2788
+ ▶️ Running test suite: mechanism-2t-workspace-identity.test.js
2789
+
2790
+ [2t] Session-stable workspace identity and standalone fable audit...
2791
+ PASS SessionStart binds the repository root
2792
+ PASS same session stays bound after entering a nested directory
2793
+ PASS same session stays bound after entering a scratch directory
2794
+ PASS same session stays bound after entering a nested repository
2795
+ PASS explicit workspace context outranks inherited workspace environment
2796
+ PASS resume SessionStart keeps the existing binding
2797
+ PASS explicit identity reset permits a deliberate rebind
2798
+ PASS identity reset persists the new binding for later cwd changes
2799
+ PASS host/session identity binds the first host workspace
2800
+ PASS same host/session stays bound after a nested-repository cwd change
2801
+ PASS hostless follow-up reuses an unambiguous host/session binding
2802
+ PASS different hosts may bind the same session id independently
2803
+ PASS ambiguous hostless identity falls back to explicit context
2804
+ PASS hooks can resolve state from a bound session after cwd changes
2805
+ PASS standalone fable audit runs after install
2806
+ PASS standalone fable audit follows its session binding across cwd changes
2807
+ PASS migration keeps conflicting sources available for recovery
2808
+ PASS migration merges independent platform sources even when one conflicts
2809
+ PASS migration preserves unsupported symlink entries
2810
+ PASS migration retry completes after the conflict is resolved
2811
+
2812
+ ▶️ Running test suite: mechanism-2u-issue-42-regressions.test.js
2813
+
2814
+ [2u] Issue #42 adversarial regressions...
2815
+ PASS 2u. no-context non-git calls do not adopt either invocation directory
2816
+ PASS 2u. no-context non-git calls use one stable unbound workspace key
2817
+ PASS 2u. scaffold refuses to infer a workspace outside git instead of writing locally
2818
+ PASS 2u. evaluate refuses to write a report without a resolved workspace
2819
+ PASS 2u. persist-memory refuses to write project memory without a resolved workspace
2820
+ PASS 2u. eval-harness/scripts/evaluate.js has no bare process.cwd fallback
2821
+ PASS 2u. multi-agent-workspace/scripts/scaffold.js has no bare process.cwd fallback
2822
+ PASS 2u. self-evolve/scripts/persist-memory.js has no bare process.cwd fallback
2823
+ PASS 2u. self-evolve/scripts/register-dynamic-skill.js has no bare process.cwd fallback
2824
+ PASS 2u. security-review/scripts/audit-secrets.js has no bare process.cwd fallback
2825
+ PASS 2u. to-spec/scripts/check-project-docs.js has no bare process.cwd fallback
2826
+ PASS 2u. find-skills reads its cache from HARNESS_STATE_HOME
2827
+ PASS 2u. find-skills does not create the legacy OS-temp cache
2828
+ PASS 2u. standalone fable calls from unrelated non-git dirs share one unbound audit stream
2829
+ PASS 2u. git fixture initialized for migration checks
2830
+ PASS 2u. legacy .harness/multi-agent state moves under the global workspace state
2831
+ PASS 2u. opencode merges flat legacy state even when the target directory exists
2832
+ All issue-42 regression checks passed.
2833
+
2834
+ ▶️ Running test suite: mechanism-2u-issue-44.test.js
2835
+
2836
+ [2u] Issue #44 release metadata regression checks...
2837
+ ✅ 2u. fable-mode carries stable release metadata
2838
+ ✅ 2u. fable-mode/execution-guardrails inherits the parent version
2839
+ ✅ 2u. fable-mode/fable-haiku inherits the parent version
2840
+ ✅ 2u. fable-mode/fable-opus inherits the parent version
2841
+ ✅ 2u. fable-mode/fable-sonnet inherits the parent version
2842
+ ✅ 2u. todo-driven-workflow carries stable release metadata
2843
+ ✅ 2u. changelog records the Issue #44 disclosure policy
2844
+
2845
+ ▶️ Running test suite: mechanism-2v-verifier-boundaries.test.js
2846
+
2847
+ [2v] Verifier boundary contracts...
2848
+ ✅ 2v. a normal nested path is inside its physical boundary
2849
+ ✅ 2v. lexical parent traversal is rejected
2850
+ ✅ 2v. a junction/symlink inside the boundary cannot escape it
2851
+ ✅ 2v. a missing leaf reached through a link is rejected before writing
2852
+ ✅ 2v. a link component is rejected even when its target stays inside the boundary
2853
+ ✅ 2v. Windows path casing does not change containment
2854
+ ✅ 2v. exact commands match after harmless whitespace normalization
2855
+ ✅ 2v. invalid boundary arguments use a stable error code
2856
+ ✅ 2v. a command containing the expected text is not an exact match
2857
+ ✅ 2v. extra command arguments are not silently accepted
2858
+ ✅ 2v. argv commands compare each argument exactly
2859
+ ✅ 2v. a real node script invocation can use a basename expectation
2860
+ ✅ 2v. a non-launcher mention cannot satisfy a script expectation
2861
+ ✅ 2v. patch parser returns every touched path
2862
+ ✅ 2v. a multi-file patch is authorized only when every path is allowed
2863
+ ✅ 2v. one unrelated path rejects the whole patch
2864
+ ✅ 2v. traversal paths are never authorized even when allowlisted
2865
+
2866
+ ▶️ Running test suite: mechanism-2w-platform-compatibility.test.js
2867
+ OpenAI skill bundle: <TMP>/harness-2w-submission-86701.zip
2868
+ Files: 196
2869
+ SHA256: 90b8fec6511ae9d4d72d2646dd4f4ae6a0d95397aecc83920d5d851a9abdebf8
2870
+ Manifest: <TMP>/harness-2w-submission-86701.manifest.json
2871
+ Platform compatibility verified: official-source matrix, installer targets, package manifests, and public bundle boundaries.
2872
+
2873
+ ▶️ Running test suite: mechanism-2x-release-automation.test.js
2874
+ Release automation contract verified: stable SemVer rules, full manifest lockstep, changed-skill versioning, drift detection, idempotency, and fail-before-write behavior.
2875
+
2876
+ ▶️ Running test suite: mechanism-2x-release-commit-message.test.js
2877
+ node:internal/modules/cjs/loader:1459
2878
+ throw err;
2879
+ ^
2880
+
2881
+ Error: Cannot find module '@commitlint/cli/package.json'
2882
+ Require stack:
2883
+ - <HARNESS_SOURCE>/ci/mechanism-2x-release-commit-message.test.js
2884
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1456:15)
2885
+ at require.resolve (node:internal/modules/helpers:163:19)
2886
+ at Object.<anonymous> (<HARNESS_SOURCE>/ci/mechanism-2x-release-commit-message.test.js:36:39)
2887
+ at Module._compile (node:internal/modules/cjs/loader:1812:14)
2888
+ at Object..js (node:internal/modules/cjs/loader:1943:10)
2889
+ at Module.load (node:internal/modules/cjs/loader:1533:32)
2890
+ at Module._load (node:internal/modules/cjs/loader:1335:12)
2891
+ at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)
2892
+ at Module.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:154:5)
2893
+ at node:internal/main/run_main_module:33:47 {
2894
+ code: 'MODULE_NOT_FOUND',
2895
+ requireStack: [
2896
+ '<HARNESS_SOURCE>/ci/mechanism-2x-release-commit-message.test.js'
2897
+ ]
2898
+ }
2899
+
2900
+ Node.js v24.14.1
2901
+ ❌ Test suite failed: mechanism-2x-release-commit-message.test.js
2902
+
2903
+ ▶️ Running test suite: mechanism-2y-release-tooling-compat.test.js
2904
+ Release tooling compatibility verified: generator 14 is paired with conventionalcommits 9.x, and the v10 regression is rejected.
2905
+
2906
+ ▶️ Running test suite: mechanism-2z-claude-plugin-manifest.test.js
2907
+ PASS: Claude plugin manifest, marketplace, 26 skills, 4 agents, and 29 hook commands are internally consistent.
2908
+
2909
+ ▶️ Running test suite: mechanism-30-opencode-plugin-loadability.test.js
2910
+ ✅ 30. real install statement produces a byte-identical .js/.ts-discoverable file; non-allowlisted filenames and content mutations fail
2911
+
2912
+ ▶️ Running test suite: mechanism-31-opencode-hardlock-evidence.test.js
2913
+
2914
+ [31] opencode live Rule-of-3 reflection evidence contract...
2915
+ ✅ 31. complete attributed reflection/re-trip evidence passes
2916
+ ✅ 31. evidence fails when the installed plugin hash differs from the canonical source hash
2917
+ ✅ 31. reflection gate fails if the blocked marker reached the filesystem
2918
+ ✅ 31. current evidence rejects the retired hardLock field
2919
+ ✅ 31. evidence fails without a second Rule-of-3 reflection request
2920
+ ✅ 31. evidence fails when no structured edit was attempted during reflectionPending
2921
+ ✅ 31. evidence fails without the preserved first reflection artifact
2922
+
2923
+ ▶️ Running test suite: mechanism-32-paired-benchmark.test.js
2924
+
2925
+ [32] paired behavioral benchmark contract...
2926
+ ✅ 32. a paired study cannot start without a predeclared minimum effect
2927
+ ✅ 32. an explicit model is required so both arms share the same model contract
2928
+ ✅ 32. plugin-enforcement is not generalized beyond the currently attributed OpenCode surface
2929
+ ✅ 32. skill-text control contains no Harness skill or plugin
2930
+ ✅ 32. skill-text treatment installs the named skill without installing hooks/plugin enforcement
2931
+ ✅ 32. plugin experiment holds skill text constant and changes only enforcement installation
2932
+ ✅ 32. lesson-retrieval case requires a valid accepted-lesson fixture contract
2933
+ ✅ 32. lesson-retrieval is an explicit paired effect type rather than being disguised as skill-text
2934
+ ✅ 32. lesson memory store stays outside both agent workspaces
2935
+ ✅ 32. both arms execute the same scoped retrieval while only treatment receives the context
2936
+ ✅ 32. attributed lesson-retrieval pair is includable only with constant skill text and identical retrieval set
2937
+ ✅ 32. mismatched memory retrieval set excludes the pair instead of counting it as lesson effect
2938
+ ✅ 32. treatment without the untrusted-memory boundary is excluded from causal evidence
2939
+ ✅ 32. changed lesson exposure text invalidates the predeclared pair contract
2940
+ ✅ 32. malformed lesson provenance is rejected before any live model call
2941
+ ✅ 32. a correctly isolated skill-text pair is includable
2942
+ ✅ 32. actual model mismatch excludes the pair instead of counting it as behavior
2943
+ ✅ 32. plugin pair is includable only when preflight, hash, constant skill text, and per-arm attribution agree
2944
+ ✅ 32. missing live plugin attribution is infrastructure/inconclusive, not a behavioral result
2945
+ ✅ 32. summary excludes infrastructure outcomes and reports paired transitions
2946
+ ✅ 32. paired effect is derived from within-pair transitions and carries a deterministic uncertainty interval
2947
+ ✅ 32. repeated runs remain separate samples and expose per-case variance instead of overwriting
2948
+ ✅ 32. cost and execution overhead are reported separately from correctness
2949
+ ✅ 32. exact discordant-pair statistic is available without turning it into an unpaired pass-rate verdict
2950
+ ✅ 32. the predeclared practical threshold is retained in the summary decision contract
2951
+
2952
+ ▶️ Running test suite: mechanism-33-issues-205-207.test.js
2953
+ PASS #205 docker verifier resolves one canonical session state directory
2954
+ PASS #205 docker verifier does not seed or read the legacy repo-relative state directory
2955
+ PASS #205 docker verifier routes all state checks through STATE_DIR
2956
+ PASS #206 architecture keeps loop-awareness numeric guidance explicitly non-mandatory
2957
+ PASS #206 architecture does not describe retired loop budgets as enforcement
2958
+ PASS #207 commitlint aligns subject-case with repository Conventional Commit history
2959
+ node:internal/modules/cjs/loader:1459
2960
+ throw err;
2961
+ ^
2962
+
2963
+ Error: Cannot find module '@commitlint/cli/package.json'
2964
+ Require stack:
2965
+ - <HARNESS_SOURCE>/ci/mechanism-33-issues-205-207.test.js
2966
+ at Module._resolveFilename (node:internal/modules/cjs/loader:1456:15)
2967
+ at require.resolve (node:internal/modules/helpers:163:19)
2968
+ at Object.<anonymous> (<HARNESS_SOURCE>/ci/mechanism-33-issues-205-207.test.js:43:35)
2969
+ at Module._compile (node:internal/modules/cjs/loader:1812:14)
2970
+ at Object..js (node:internal/modules/cjs/loader:1943:10)
2971
+ at Module.load (node:internal/modules/cjs/loader:1533:32)
2972
+ at Module._load (node:internal/modules/cjs/loader:1335:12)
2973
+ at wrapModuleLoad (node:internal/modules/cjs/loader:255:19)
2974
+ at Module.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:154:5)
2975
+ at node:internal/main/run_main_module:33:47 {
2976
+ code: 'MODULE_NOT_FOUND',
2977
+ requireStack: [
2978
+ '<HARNESS_SOURCE>/ci/mechanism-33-issues-205-207.test.js'
2979
+ ]
2980
+ }
2981
+
2982
+ Node.js v24.14.1
2983
+ ❌ Test suite failed: mechanism-33-issues-205-207.test.js
2984
+
2985
+ ▶️ Running test suite: mechanism-34-observations.test.js
2986
+ PASS label line parses and validates
2987
+ PASS redaction removes email addresses and home paths
2988
+ PASS commands are classified without keeping their text
2989
+ PASS detailed appends distinguish duplicates and bounded lock timeouts
2990
+ PASS tier comes from the self-report, owner review overrides, behavior only flags contradictions
2991
+ PASS Claude Code turn: prompt, behavior and label are recorded
2992
+ PASS second turn keeps the previous final message; missing label is recorded, not fatal
2993
+ PASS Codex turn: final message from the rollout transcript, apply_patch counted
2994
+ PASS Claude transcript fallback when the Stop payload has no message
2995
+ PASS opt-out writes nothing; malformed input fails open
2996
+ PASS exporter derives labels, splits by time and reports agreement
2997
+ PASS exporter can select post-cutoff rows with self-reported labels for training
2998
+ PASS review page lists disagreements blind and owner decisions override
2999
+ PASS transcript fallback reads only the current turn
3000
+ PASS concurrent tool hooks keep every event
3001
+ PASS expired text is neither exported nor reviewed, and old session text is dropped
3002
+ PASS expiring a record keeps a shared text blob that an active record still uses
3003
+ PASS failed tool attempts are not counted as writes or loads
3004
+ PASS owner review overrides context dependence, explicit false included
3005
+ PASS resuming an expired unfinished turn does not renew its text
3006
+ PASS resuming an unfinished turn inside the window keeps its text and original deadline
3007
+ PASS module and runner prefixes are classified by what they run
3008
+ PASS the label contract is the router output's last section and covers every turn
3009
+ PASS router/self agreement counts only turns where the router chose a tier
3010
+ PASS label slips seen live: unknown intents dropped, unterminated final line accepted
3011
+ PASS Codex router hook returns its contract as JSON additionalContext
3012
+ PASS hooks are registered for both hosts and the contract asks for the label line
3013
+ system-one observation tests passed
3014
+
3015
+ ▶️ Running test suite: mechanism-34-worktree-submodule-reachability.test.js
3016
+ Worktree submodule reachability: detached, named-unpublished, uninitialized, and unmerged gitlinks fail safely; primary/remote reachability and no-submodule controls pass.
3017
+
3018
+ ▶️ Running test suite: mechanism-35-verification-contract.test.js
3019
+ Issue #242 verification contract: taxonomy, discovery, execution safety, multi-root scope, hook recognition, and Stop evidence verified.
3020
+ 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.
3021
+
3022
+ ▶️ Running test suite: mechanism-packaging-bytecode.test.js
3023
+ ✔ PK-01 skills installer copy and submission file walk skip Python bytecode (2.081959ms)
3024
+ ✔ PK-02 plugin sync does not mirror bytecode from the canonical tree (93.763291ms)
3025
+ ✔ PK-03 Python tests do not write bytecode into the source tree (2030.115083ms)
3026
+ ℹ tests 3
3027
+ ℹ suites 0
3028
+ ℹ pass 3
3029
+ ℹ fail 0
3030
+ ℹ cancelled 0
3031
+ ℹ skipped 0
3032
+ ℹ todo 0
3033
+ ℹ duration_ms 2128.6345
3034
+
3035
+ ▶️ Running test suite: mechanism-system-one-collect.test.js
3036
+ ✔ S1-C101 each source yields only owner-typed text (9.475708ms)
3037
+ ✔ S1-C106 only interactive Codex sessions count, and VS Code terminal notifications are dropped (2.548083ms)
3038
+ ✔ S1-C102 filters, redaction and deduplication (0.202416ms)
3039
+ ✔ S1-C103 prompts that near-duplicate a holdout prompt are dropped (0.803333ms)
3040
+ ✔ S1-C107 every holdout guards against leakage: the defaults cover the tier and intent holdouts, and --holdout repeats (32.805083ms)
3041
+ ✔ S1-C104 splits are stable per family and near 15% validation (2.861875ms)
3042
+ ✔ S1-C105 CLI writes a deterministic local dataset outside the repository (83.615542ms)
3043
+ ℹ tests 7
3044
+ ℹ suites 0
3045
+ ℹ pass 7
3046
+ ℹ fail 0
3047
+ ℹ cancelled 0
3048
+ ℹ skipped 0
3049
+ ℹ todo 0
3050
+ ℹ duration_ms 135.233458
3051
+
3052
+ ▶️ Running test suite: mechanism-system-one-contract.test.js
3053
+ ✔ S1-C01 complete response, no mutation and repeatability (0.93875ms)
3054
+ ✔ S1-C02 rejected input partitions and byte boundaries (3.112542ms)
3055
+ ✔ S1-C03 complete output validation and no raw-data leakage (0.3375ms)
3056
+ ✔ S1-C04 abstention and policy boundaries (0.160459ms)
3057
+ ℹ tests 4
3058
+ ℹ suites 0
3059
+ ℹ pass 4
3060
+ ℹ fail 0
3061
+ ℹ cancelled 0
3062
+ ℹ skipped 0
3063
+ ℹ todo 0
3064
+ ℹ duration_ms 6.912583
3065
+
3066
+ ▶️ Running test suite: mechanism-system-one-corpus.test.js
3067
+ ✔ S1-K01 an unreviewed draft assembles into a valid corpus that cannot pass the review gate (1.527291ms)
3068
+ ✔ S1-K02 accept, relabel and reject apply exactly; the reviewer gold wins (0.19675ms)
3069
+ ✔ S1-K03 a decision for changed prompt text is stale and never counts as review (0.106375ms)
3070
+ ✔ S1-K04 malformed reviews are rejected instead of silently applied (0.6185ms)
3071
+ ✔ S1-K05 draft validation: exact fields, unique ids and prompts, known sources, no private data (0.20125ms)
3072
+ ✔ S1-K06 the gate passes only with >=200 reviewed cases and >=50 per language (7.17225ms)
3073
+ ✔ S1-K07 CLI builds a corpus file and fails closed on invalid input (89.460708ms)
3074
+ ✔ S1-K08 the committed holdout draft meets size, language, class and length requirements (3.378083ms)
3075
+ ✔ S1-K09 the committed reviewed holdout is reproducible from owner decisions and meets the gate (3.965ms)
3076
+ ℹ tests 9
3077
+ ℹ suites 0
3078
+ ℹ pass 9
3079
+ ℹ fail 0
3080
+ ℹ cancelled 0
3081
+ ℹ skipped 0
3082
+ ℹ todo 0
3083
+ ℹ duration_ms 109.05175
3084
+
3085
+ ▶️ Running test suite: mechanism-system-one-evaluation.test.js
3086
+ ✔ S1-E01 exact paired metrics, no promotion from fixtures or cold timing (1.384834ms)
3087
+ ✔ S1-E02 corpus completeness, family leakage and no duplicated prompts (0.768917ms)
3088
+ ✔ S1-E03 missing/extra/invalid predictions cannot silently improve scores (0.863208ms)
3089
+ ✔ S1-E06 repeatability compares the full score vector, not only top-2 summaries (0.185791ms)
3090
+ ✔ S1-E04 zero coverage and wrong accepted predictions fail quality gates (0.131375ms)
3091
+ ✔ S1-E05 real evaluation CLI repeats with only documented timing volatility (66.512584ms)
3092
+ ✔ S1-E07 source provenance gate requires the pinned cua_s1 revision (0.477209ms)
3093
+ ✔ S1-E09 an ngram source passes provenance only with a verified artifact (0.247959ms)
3094
+ ✔ S1-E08 the accepted-precision gate is the owner advisory 85% (0.56025ms)
3095
+ ℹ tests 9
3096
+ ℹ suites 0
3097
+ ℹ pass 9
3098
+ ℹ fail 0
3099
+ ℹ cancelled 0
3100
+ ℹ skipped 0
3101
+ ℹ todo 0
3102
+ ℹ duration_ms 73.518375
3103
+
3104
+ ▶️ Running test suite: mechanism-system-one-install.test.js
3105
+ ✔ S1-I01 pins stay consistent with the provider contract (0.542083ms)
3106
+ ✔ S1-I02 interpreter selection accepts only the upstream-supported Python range (0.315417ms)
3107
+ ✔ S1-I03 argument parsing is explicit and rejects ambiguous input (0.262458ms)
3108
+ ✔ S1-I04 downloads are verified before an atomic write; a valid file is reused (1.077959ms)
3109
+ ✔ S1-I06 child command output goes to stderr so stdout stays machine-readable JSON (87.581166ms)
3110
+ ✔ S1-I05 dry run prints the pinned plan and changes nothing, repeatably (67.798958ms)
3111
+ ℹ tests 6
3112
+ ℹ suites 0
3113
+ ℹ pass 6
3114
+ ℹ fail 0
3115
+ ℹ cancelled 0
3116
+ ℹ skipped 0
3117
+ ℹ todo 0
3118
+ ℹ duration_ms 159.825042
3119
+
3120
+ ▶️ Running test suite: mechanism-system-one-intent.test.js
3121
+ ✔ S1-I01 the intent catalog is the owner's fixed list, frozen, beside the tier catalog (0.85575ms)
3122
+ ✔ S1-I02 the evaluator scores an intent corpus over the intent labels only (1.40925ms)
3123
+ ✔ S1-I03 the corpus assembler builds an intent holdout from its own draft and reviews (0.7405ms)
3124
+ ✔ S1-I04 the labeler labels intent from the intent document with the intent labels only (0.669458ms)
3125
+ ✔ S1-I05 graded agreement follows the owner's grades and is symmetric (0.110667ms)
3126
+ ✔ S1-I07 intent calibration uses graded precision and picks a secondary threshold on validation (3.838375ms)
3127
+ ﹣ S1-I08 the ngram trainer trains the intent stage with soft targets (skipped without torch) (23.952166ms) # torch not installed
3128
+ ✔ S1-I09 the manifest carries an optional secondary threshold that decide never sees (0.485959ms)
3129
+ ✔ S1-I10 the evaluator grades accepted intent predictions and reports family consistency (0.3705ms)
3130
+ ✔ S1-I11 the evaluation CLI scores an intent holdout with a majority-class baseline (27.558458ms)
3131
+ ✔ S1-I06 family consistency counts families of two or more that share one primary (0.083375ms)
3132
+ ✔ S1-I12 the labeler asks for tie-free relevance scores and derives the bands from them (0.665208ms)
3133
+ ﹣ S1-I13 the ngram trainer learns scored intent labels as per-intent targets (skipped without torch) (23.721458ms) # torch not installed
3134
+ ✔ S1-I14 low-scoring labels go to a second model, which replaces them unless it fails (0.39925ms)
3135
+ ✔ S1-I15 scaled labels read the scores relative to the top, and only lagging margins escalate (0.483542ms)
3136
+ ℹ tests 15
3137
+ ℹ suites 0
3138
+ ℹ pass 13
3139
+ ℹ fail 0
3140
+ ℹ cancelled 0
3141
+ ℹ skipped 2
3142
+ ℹ todo 0
3143
+ ℹ duration_ms 87.872167
3144
+
3145
+ ▶️ Running test suite: mechanism-system-one-label.test.js
3146
+ ✔ S1-L01 the instructions carry the owner rules from the corpus document and every item (0.500875ms)
3147
+ ✔ S1-L02 a batch reply must label every index exactly once with a known label (0.331042ms)
3148
+ ✔ S1-L03 invalid replies are retried once, persistent failures are recorded, never partially accepted, and runs resume (0.890292ms)
3149
+ ✔ S1-L06 the codex engine runs one stateless exec per batch and reads the schema-checked last message (42.917916ms)
3150
+ ✔ S1-L04 holdout agreement reports overall, per-class recall and confusion (0.206291ms)
3151
+ ✔ S1-L05 CLI labels through the configured command, resumes, checks the holdout and refuses repository output (217.828458ms)
3152
+ ℹ tests 6
3153
+ ℹ suites 0
3154
+ ℹ pass 6
3155
+ ℹ fail 0
3156
+ ℹ cancelled 0
3157
+ ℹ skipped 0
3158
+ ℹ todo 0
3159
+ ℹ duration_ms 264.865125
3160
+
3161
+ ▶️ Running test suite: mechanism-system-one-laya.test.js
3162
+ ✔ S1-L01 the Laya dense labeler contract holds without model weights (43.970833ms)
3163
+ ✔ S1-L02 the Laya calibration contract holds without model weights (36.632958ms)
3164
+ ✔ S1-L03 the Laya soft-target exporter contract holds without model weights (47.837375ms)
3165
+ ✔ S1-L04 the single-device trainer contract holds (torch parts skip without torch) (37.911708ms)
3166
+ ✔ S1-L05 the fine-tuned provider bridge contract holds without model weights (50.774458ms)
3167
+ ✔ S1-L06 the per-intent Bernoulli contract holds without model weights (37.062958ms)
3168
+ ℹ tests 6
3169
+ ℹ suites 0
3170
+ ℹ pass 6
3171
+ ℹ fail 0
3172
+ ℹ cancelled 0
3173
+ ℹ skipped 0
3174
+ ℹ todo 0
3175
+ ℹ duration_ms 256.889458
3176
+
3177
+ ▶️ Running test suite: mechanism-system-one-ngram.test.js
3178
+ ✔ S1-N01 fnv1a32 matches the published test vectors (0.32425ms)
3179
+ ✔ S1-N02 featurization follows the pinned rules (0.546333ms)
3180
+ ✔ S1-N03 the Python trainer and the Node provider produce identical features (25.069291ms)
3181
+ ✔ S1-N04 the ngram transport scores in process with the Phase 0 response shape (2.241792ms)
3182
+ ✔ S1-N05 any artifact mismatch is provider-config and never scores (4.367292ms)
3183
+ ✔ S1-N06 manifest rules: ngram needs a .bin and no python; other transports still need python (0.559917ms)
3184
+ ✔ S1-N08 the evaluator records ngram samples warm and verifies the artifact as provenance (83.575417ms)
3185
+ ﹣ S1-N07 a real ngram training run produces an artifact the provider scores (skipped without torch) (24.436875ms) # torch not installed
3186
+ ℹ tests 8
3187
+ ℹ suites 0
3188
+ ℹ pass 7
3189
+ ℹ fail 0
3190
+ ℹ cancelled 0
3191
+ ℹ skipped 1
3192
+ ℹ todo 0
3193
+ ℹ duration_ms 143.497834
3194
+
3195
+ ▶️ Running test suite: mechanism-system-one-provider.test.js
3196
+ ✔ S1-P01 real IPC exact input/output repeated in clean child processes (39.562083ms)
3197
+ ✔ S1-P02 unavailable, timeout, output bounds, malformed output and repeatability (1080.576625ms)
3198
+ ✔ S1-P03 trusted manifest validation (0.486583ms)
3199
+ ✔ S1-P04 Python artifact validation and byte-limit rejection without ML dependency (2017.793084ms)
3200
+ ✔ S1-P05 runtime/source provenance is recorded, and a missing or mismatched revision stays visible (86.250709ms)
3201
+ ℹ tests 5
3202
+ ℹ suites 0
3203
+ ℹ pass 5
3204
+ ℹ fail 0
3205
+ ℹ cancelled 0
3206
+ ℹ skipped 0
3207
+ ℹ todo 0
3208
+ ℹ duration_ms 3227.183208
3209
+
3210
+ ▶️ Running test suite: mechanism-system-one-relevance.test.js
3211
+ ✔ S1-R01 independent intents fire on their own thresholds (0.736333ms)
3212
+ ✔ S1-R02 silence abstains and unclassified never fires (0.187208ms)
3213
+ ✔ S1-R03 the simplex rule does not apply to relevance vectors (0.193333ms)
3214
+ ✔ S1-R04 malformed relevance inputs fail closed (0.342083ms)
3215
+ ✔ S1-R05 relevance grading reports micro, macro, cardinality and abstain (0.652875ms)
3216
+ ✔ S1-R06 relevance gates follow the reviewed promotion contract (0.192458ms)
3217
+ ℹ tests 6
3218
+ ℹ suites 0
3219
+ ℹ pass 6
3220
+ ℹ fail 0
3221
+ ℹ cancelled 0
3222
+ ℹ skipped 0
3223
+ ℹ todo 0
3224
+ ℹ duration_ms 4.350833
3225
+
3226
+ ▶️ Running test suite: mechanism-system-one-resident.test.js
3227
+ ✔ S1-RS00 Windows Node 23 and 24 shutdown compatibility boundary (0.402375ms)
3228
+ ✔ S1-RS01 manifest transport fields and digest-bound file names (1.122041ms)
3229
+ ✔ S1-RS02 cold start never blocks, spawns once, then serves warm repeatable scores (467.699ms)
3230
+ ✔ S1-RS03 stale state is removed and replaced; a wrong token is rejected without respawn (460.093625ms)
3231
+ ✔ S1-RS04 a slow server times out within the deadline and is not respawned (1425.461708ms)
3232
+ ✔ S1-RS05 startup failure is visible and throttled instead of respawning every prompt (112.889459ms)
3233
+ ✔ S1-RS06 provider dispatch uses the real adapter and reports a missing ML runtime (168.271208ms)
3234
+ ✔ S1-RS07 operator CLI reports status and stops a running server (321.776208ms)
3235
+ ✔ S1-RS08 an executable that cannot spawn is recorded as a visible, throttled failure (1.236ms)
3236
+ ✔ S1-RS09 a corrupted state file never leaves an orphan server behind (547.241875ms)
3237
+ ✔ S1-RS10 scoreAsync matches the sync client and keeps every start/failure mapping (410.27425ms)
3238
+ ✔ S1-RS10b scoreAsync removes refused state, restarts once, and times out slow servers (1404.444ms)
3239
+ ✔ S1-RS10c provider.scoreAsync dispatches by transport with the sync result shapes (464.712667ms)
3240
+ ✔ S1-RS11 the hook entry pre-scores over async IPC: it still scores when worker threads cannot start (579.89375ms)
3241
+ ✔ S1-RS12 the evaluator times the async path: no worker thread per warm score (555.349042ms)
3242
+ ✔ S1-RS13 manifest acceptance thresholds are validated, carried by scored results and applied by the evaluator (1101.492333ms)
3243
+ ✔ S1-RS14 resident transport names its adapter and stays inside the scripts dir (0.909292ms)
3244
+ ✔ S1-RS15 repeated teardown waits for resident PID and removes every fixture (2367.611708ms)
3245
+ ℹ tests 18
3246
+ ℹ suites 0
3247
+ ℹ pass 18
3248
+ ℹ fail 0
3249
+ ℹ cancelled 0
3250
+ ℹ skipped 0
3251
+ ℹ todo 0
3252
+ ℹ duration_ms 10394.360292
3253
+
3254
+ ▶️ Running test suite: mechanism-system-one-router.test.js
3255
+ ✔ S1-R01 off/shadow/prefer and rollback (1.1185ms)
3256
+ ✔ S1-R02 explicit precedence, abstention and every failure leave fallback intact (0.240833ms)
3257
+ ✔ S1-R03 real CLI/kernel off parity and shadow failure repeated (212.40775ms)
3258
+ ✔ S1-R04 integrated accepted route preserves policy and explicit model choice (7.649542ms)
3259
+ ✔ S1-R05 structural floor: a scorer can raise but never lower a deterministic macro/multi-task tier (1.769958ms)
3260
+ ✔ S1-R07 a scored result with calibrated acceptance thresholds decides with them (0.156583ms)
3261
+ ✔ S1-R06 prescoreTier: off loads nothing; a matching request reuses the async result; mismatch and failure keep sync semantics (0.461083ms)
3262
+ ℹ tests 7
3263
+ ℹ suites 0
3264
+ ℹ pass 7
3265
+ ℹ fail 0
3266
+ ℹ cancelled 0
3267
+ ℹ skipped 0
3268
+ ℹ todo 0
3269
+ ℹ duration_ms 226.536625
3270
+
3271
+ ▶️ Running test suite: mechanism-system-one-train.test.js
3272
+ ✔ S1-T01 trainer data handling is exercised without torch (31.048917ms)
3273
+ ✔ S1-T02 a validation row is accepted only above both thresholds and never as unclassified (0.22925ms)
3274
+ ✔ S1-T03 calibration maximizes coverage subject to accepted precision on validation only (25.7815ms)
3275
+ ✔ S1-T06 the default calibration target is the owner advisory 85% (20.204542ms)
3276
+ ✔ S1-T04 calibration CLI reads validation scores and writes thresholds (56.093625ms)
3277
+ ﹣ S1-T05 a real tiny training run produces a checkpoint the adapter loads (skipped without torch) (22.967583ms) # torch/cua_s1 not installed; mechanism tests above still run
3278
+ ℹ tests 6
3279
+ ℹ suites 0
3280
+ ℹ pass 5
3281
+ ℹ fail 0
3282
+ ℹ cancelled 0
3283
+ ℹ skipped 1
3284
+ ℹ todo 0
3285
+ ℹ duration_ms 158.774417
3286
+
3287
+ =================================================
3288
+ Mechanism Test Summary
3289
+ =================================================
3290
+ ✅ mechanism-2a-rule-of-3.test.js [PASSED]
3291
+ ✅ mechanism-2aa-codex-action-gate-policy.test.js [PASSED]
3292
+ ✅ mechanism-2ab-openai-plugin-sync-integrity.test.js [PASSED]
3293
+ ✅ mechanism-2ac-atomic-commit-check.test.js [PASSED]
3294
+ ✅ mechanism-2ad-action-gate-classifier-hardening.test.js [PASSED]
3295
+ ✅ mechanism-2af-worktree-isolation.test.js [PASSED]
3296
+ ✅ mechanism-2ag-router-worktree-contract.test.js [PASSED]
3297
+ ✅ mechanism-2ah-workflow-lifecycle.test.js [PASSED]
3298
+ ✅ mechanism-2ai-workspace-fingerprint-batch.test.js [PASSED]
3299
+ ✅ mechanism-2aj-waza-reference-adapter.test.js [PASSED]
3300
+ ✅ mechanism-2ak-contract-probe-adapter.test.js [PASSED]
3301
+ ✅ mechanism-2al-codex-hooks-compat.test.js [PASSED]
3302
+ ✅ mechanism-2am-observations-session-import.test.js [PASSED]
3303
+ ✅ mechanism-2am-openai-packaged-helper-runtime.test.js [PASSED]
3304
+ ✅ mechanism-2an-environment-detection-readonly.test.js [PASSED]
3305
+ ✅ mechanism-2an-workflow-obligations.test.js [PASSED]
3306
+ ✅ mechanism-2ao-plugin-sync.test.js [PASSED]
3307
+ ✅ mechanism-2ap-sbom.test.js [PASSED]
3308
+ ✅ mechanism-2aq-fable-stage-bindings.test.js [PASSED]
3309
+ ✅ mechanism-2ar-binding-resolution.test.js [PASSED]
3310
+ ✅ mechanism-2b-boundary-guard.test.js [PASSED]
3311
+ ✅ mechanism-2c-state-persist.test.js [PASSED]
3312
+ ✅ mechanism-2d-fact-audit.test.js [PASSED]
3313
+ ✅ mechanism-2e-scope-guard.test.js [PASSED]
3314
+ ✅ mechanism-2f-stop-gate.test.js [PASSED]
3315
+ ✅ mechanism-2g-platform-ignore.test.js [PASSED]
3316
+ ✅ mechanism-2h-installer-manifest.test.js [PASSED]
3317
+ ❌ mechanism-2i-crlf-frontmatter.test.js [FAILED]
3318
+ ✅ mechanism-2i-install-verification.test.js [PASSED]
3319
+ ✅ mechanism-2j-behavioral-runner.test.js [PASSED]
3320
+ ✅ mechanism-2j-fixture-entrypoints.test.js [PASSED]
3321
+ ✅ mechanism-2k-reference-check.test.js [PASSED]
3322
+ ✅ mechanism-2l-multi-agent-workspace.test.js [PASSED]
3323
+ ✅ mechanism-2m-self-repo-guard.test.js [PASSED]
3324
+ ✅ mechanism-2n-opencode-plugin.test.js [PASSED]
3325
+ ✅ mechanism-2o-state-home-isolation.test.js [PASSED]
3326
+ ✅ mechanism-2p-installer-links.test.js [PASSED]
3327
+ ✅ mechanism-2q-installer-global-shared-store.test.js [PASSED]
3328
+ ✅ mechanism-2r-uninstall-flags.test.js [PASSED]
3329
+ ✅ mechanism-2s-tdd-quality.test.js [PASSED]
3330
+ ✅ mechanism-2t-disclosure.test.js [PASSED]
3331
+ ✅ mechanism-2t-evidence-triage.test.js [PASSED]
3332
+ ❌ mechanism-2t-issue-20.test.js [FAILED]
3333
+ ✅ mechanism-2t-platform-skill-targets.test.js [PASSED]
3334
+ ✅ mechanism-2t-transcript-parser.test.js [PASSED]
3335
+ ✅ mechanism-2t-workspace-identity.test.js [PASSED]
3336
+ ✅ mechanism-2u-issue-42-regressions.test.js [PASSED]
3337
+ ✅ mechanism-2u-issue-44.test.js [PASSED]
3338
+ ✅ mechanism-2v-verifier-boundaries.test.js [PASSED]
3339
+ ✅ mechanism-2w-platform-compatibility.test.js [PASSED]
3340
+ ✅ mechanism-2x-release-automation.test.js [PASSED]
3341
+ ❌ mechanism-2x-release-commit-message.test.js [FAILED]
3342
+ ✅ mechanism-2y-release-tooling-compat.test.js [PASSED]
3343
+ ✅ mechanism-2z-claude-plugin-manifest.test.js [PASSED]
3344
+ ✅ mechanism-30-opencode-plugin-loadability.test.js [PASSED]
3345
+ ✅ mechanism-31-opencode-hardlock-evidence.test.js [PASSED]
3346
+ ✅ mechanism-32-paired-benchmark.test.js [PASSED]
3347
+ ❌ mechanism-33-issues-205-207.test.js [FAILED]
3348
+ ✅ mechanism-34-observations.test.js [PASSED]
3349
+ ✅ mechanism-34-worktree-submodule-reachability.test.js [PASSED]
3350
+ ✅ mechanism-35-verification-contract.test.js [PASSED]
3351
+ ✅ mechanism-packaging-bytecode.test.js [PASSED]
3352
+ ✅ mechanism-system-one-collect.test.js [PASSED]
3353
+ ✅ mechanism-system-one-contract.test.js [PASSED]
3354
+ ✅ mechanism-system-one-corpus.test.js [PASSED]
3355
+ ✅ mechanism-system-one-evaluation.test.js [PASSED]
3356
+ ✅ mechanism-system-one-install.test.js [PASSED]
3357
+ ✅ mechanism-system-one-intent.test.js [PASSED]
3358
+ ✅ mechanism-system-one-label.test.js [PASSED]
3359
+ ✅ mechanism-system-one-laya.test.js [PASSED]
3360
+ ✅ mechanism-system-one-ngram.test.js [PASSED]
3361
+ ✅ mechanism-system-one-provider.test.js [PASSED]
3362
+ ✅ mechanism-system-one-relevance.test.js [PASSED]
3363
+ ✅ mechanism-system-one-resident.test.js [PASSED]
3364
+ ✅ mechanism-system-one-router.test.js [PASSED]
3365
+ ✅ mechanism-system-one-train.test.js [PASSED]
3366
+ -------------------------------------------------
3367
+ ❌ 4 mechanism test suite(s) FAILED.
3368
+ =================================================
3369
+ FAIL mechanism suite
3370
+
3371
+ =================================================
3372
+ FAIL: self-regression found one or more problems.
3373
+ =================================================