harness-everything 0.30.10 → 0.31.0

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