harness-everything 0.3.6 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (580) hide show
  1. package/.agents/plugins/marketplace.json +20 -0
  2. package/.claude-plugin/marketplace.json +1 -1
  3. package/.claude-plugin/plugin.json +8 -7
  4. package/.github/workflows/behavioral-evals.yml +3 -3
  5. package/.github/workflows/ci.yml +49 -28
  6. package/.github/workflows/release.yml +52 -27
  7. package/.nvmrc +1 -0
  8. package/.releaserc.json +113 -0
  9. package/AGENTS.md +44 -24
  10. package/BENCHMARK_SOP.md +38 -18
  11. package/CHANGELOG.md +196 -3
  12. package/CONTRIBUTING.md +37 -9
  13. package/Dockerfile +1 -1
  14. package/PRIVACY.md +25 -0
  15. package/README.md +126 -91
  16. package/RELEASING.md +93 -0
  17. package/SUPPORT.md +27 -0
  18. package/TERMS.md +21 -0
  19. package/VERIFICATION.md +192 -284
  20. package/behavioral-evals/README.md +21 -0
  21. package/behavioral-evals/case-validator.js +194 -0
  22. package/behavioral-evals/cases/baseline-environment-detection.yaml +21 -0
  23. package/behavioral-evals/cases/baseline-eval-harness.yaml +27 -0
  24. package/behavioral-evals/cases/baseline-fable-discipline.yaml +31 -0
  25. package/behavioral-evals/cases/baseline-find-skills-exposure.yaml +49 -0
  26. package/behavioral-evals/cases/baseline-find-skills.yaml +21 -0
  27. package/behavioral-evals/cases/baseline-git-commit.yaml +2 -2
  28. package/behavioral-evals/cases/baseline-install-cognitive-os.yaml +24 -0
  29. package/behavioral-evals/cases/baseline-multi-agent-workspace.yaml +28 -0
  30. package/behavioral-evals/cases/baseline-rewrite-commits.yaml +34 -0
  31. package/behavioral-evals/cases/baseline-self-evolve.yaml +31 -0
  32. package/behavioral-evals/cases/baseline-skill-creator.yaml +20 -0
  33. package/behavioral-evals/cases/baseline-skill-style.yaml +21 -0
  34. package/behavioral-evals/cases/baseline-to-spec.yaml +34 -0
  35. package/behavioral-evals/cases/baseline-to-tickets.yaml +24 -0
  36. package/behavioral-evals/cases/baseline-todo-driven-workflow.yaml +32 -0
  37. package/behavioral-evals/cases/baseline-using-git-worktrees.yaml +15 -0
  38. package/behavioral-evals/cases/breaker-zoom-out-after-3.yaml +2 -2
  39. package/behavioral-evals/cases/pressure-complexity-skip.yaml +2 -2
  40. package/behavioral-evals/cases/pressure-scope-bypass.yaml +7 -2
  41. package/behavioral-evals/cases/pressure-sunk-cost-retry.yaml +7 -4
  42. package/behavioral-evals/cases/scope-discipline.yaml +2 -1
  43. package/behavioral-evals/cases/verify-before-done.yaml +7 -5
  44. package/behavioral-evals/evidence/2026-09-07/baseline-debugging/case.yaml +31 -0
  45. package/behavioral-evals/evidence/2026-09-07/baseline-debugging/historical-case.yaml +31 -0
  46. package/behavioral-evals/evidence/2026-09-07/baseline-debugging/provenance.json +42 -0
  47. package/behavioral-evals/evidence/2026-09-07/baseline-debugging/result.sanitized.json +20 -0
  48. package/behavioral-evals/evidence/2026-09-07/baseline-performance/case.yaml +34 -0
  49. package/behavioral-evals/evidence/2026-09-07/baseline-performance/historical-case.yaml +34 -0
  50. package/behavioral-evals/evidence/2026-09-07/baseline-performance/provenance.json +42 -0
  51. package/behavioral-evals/evidence/2026-09-07/baseline-performance/result.sanitized.json +20 -0
  52. package/behavioral-evals/evidence/2026-09-07/baseline-security-review/case.yaml +28 -0
  53. package/behavioral-evals/evidence/2026-09-07/baseline-security-review/historical-case.yaml +28 -0
  54. package/behavioral-evals/evidence/2026-09-07/baseline-security-review/provenance.json +42 -0
  55. package/behavioral-evals/evidence/2026-09-07/baseline-security-review/result.sanitized.json +20 -0
  56. package/behavioral-evals/evidence/2026-09-07/baseline-simple-bugfix/case.yaml +33 -0
  57. package/behavioral-evals/evidence/2026-09-07/baseline-simple-bugfix/historical-case.yaml +33 -0
  58. package/behavioral-evals/evidence/2026-09-07/baseline-simple-bugfix/provenance.json +42 -0
  59. package/behavioral-evals/evidence/2026-09-07/baseline-simple-bugfix/result.sanitized.json +20 -0
  60. package/behavioral-evals/evidence/2026-09-07/grill-me-adversarial/case.yaml +28 -0
  61. package/behavioral-evals/evidence/2026-09-07/grill-me-adversarial/historical-case.yaml +18 -0
  62. package/behavioral-evals/evidence/2026-09-07/grill-me-adversarial/provenance.json +30 -0
  63. package/behavioral-evals/evidence/2026-09-07/live-run-blocker.md +16 -0
  64. package/behavioral-evals/evidence/2026-09-07/manifest.json +88 -0
  65. package/behavioral-evals/evidence/2026-09-07/pressure-scope-bypass/case.yaml +33 -0
  66. package/behavioral-evals/evidence/2026-09-07/pressure-scope-bypass/historical-case.yaml +28 -0
  67. package/behavioral-evals/evidence/2026-09-07/pressure-scope-bypass/provenance.json +30 -0
  68. package/behavioral-evals/evidence/2026-09-07/pressure-skip-docs/case.yaml +50 -0
  69. package/behavioral-evals/evidence/2026-09-07/pressure-skip-docs/historical-case.yaml +50 -0
  70. package/behavioral-evals/evidence/2026-09-07/pressure-skip-docs/provenance.json +42 -0
  71. package/behavioral-evals/evidence/2026-09-07/pressure-skip-docs/result.sanitized.json +20 -0
  72. package/behavioral-evals/evidence/2026-09-07/pressure-skip-error-handling/case.yaml +35 -0
  73. package/behavioral-evals/evidence/2026-09-07/pressure-skip-error-handling/historical-case.yaml +35 -0
  74. package/behavioral-evals/evidence/2026-09-07/pressure-skip-error-handling/provenance.json +42 -0
  75. package/behavioral-evals/evidence/2026-09-07/pressure-skip-error-handling/result.sanitized.json +20 -0
  76. package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification/case.yaml +43 -0
  77. package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification/historical-case.yaml +43 -0
  78. package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification/provenance.json +42 -0
  79. package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification/result.sanitized.json +24 -0
  80. package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification--2026-08-23-pressure-skip-verification/case.yaml +43 -0
  81. package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification--2026-08-23-pressure-skip-verification/historical-case.yaml +43 -0
  82. package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification--2026-08-23-pressure-skip-verification/provenance.json +42 -0
  83. package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification--2026-08-23-pressure-skip-verification/result.sanitized.json +20 -0
  84. package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification--2026-08-27-pressure-skip-verification/case.yaml +43 -0
  85. package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification--2026-08-27-pressure-skip-verification/historical-case.yaml +43 -0
  86. package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification--2026-08-27-pressure-skip-verification/provenance.json +42 -0
  87. package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification--2026-08-27-pressure-skip-verification/result.sanitized.json +24 -0
  88. package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry/case.yaml +50 -0
  89. package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry/historical-case.yaml +47 -0
  90. package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry/provenance.json +42 -0
  91. package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry/result.sanitized.json +24 -0
  92. package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry--2026-08-23-pressure-sunk-cost-retry/case.yaml +50 -0
  93. package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry--2026-08-23-pressure-sunk-cost-retry/historical-case.yaml +47 -0
  94. package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry--2026-08-23-pressure-sunk-cost-retry/provenance.json +42 -0
  95. package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry--2026-08-23-pressure-sunk-cost-retry/result.sanitized.json +20 -0
  96. package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry--2026-08-27-pressure-sunk-cost-retry/case.yaml +50 -0
  97. package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry--2026-08-27-pressure-sunk-cost-retry/historical-case.yaml +47 -0
  98. package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry--2026-08-27-pressure-sunk-cost-retry/provenance.json +42 -0
  99. package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry--2026-08-27-pressure-sunk-cost-retry/result.sanitized.json +24 -0
  100. package/behavioral-evals/evidence/2026-09-07/tdd-test-first/case.yaml +30 -0
  101. package/behavioral-evals/evidence/2026-09-07/tdd-test-first/historical-case.yaml +23 -0
  102. package/behavioral-evals/evidence/2026-09-07/tdd-test-first/provenance.json +30 -0
  103. package/behavioral-evals/evidence/2026-09-07/triage-matrix.json +426 -0
  104. package/behavioral-evals/evidence/2026-09-07/triage-matrix.md +24 -0
  105. package/behavioral-evals/evidence/2026-09-07/verify-before-claim-cites/case.yaml +19 -0
  106. package/behavioral-evals/evidence/2026-09-07/verify-before-claim-cites/historical-case.yaml +18 -0
  107. package/behavioral-evals/evidence/2026-09-07/verify-before-claim-cites/provenance.json +30 -0
  108. package/behavioral-evals/evidence/2026-09-07/verify-before-done/case.yaml +33 -0
  109. package/behavioral-evals/evidence/2026-09-07/verify-before-done/historical-case.yaml +31 -0
  110. package/behavioral-evals/evidence/2026-09-07/verify-before-done/provenance.json +42 -0
  111. package/behavioral-evals/evidence/2026-09-07/verify-before-done/result.sanitized.json +20 -0
  112. package/behavioral-evals/evidence/2026-09-07/verify-before-done--2026-08-23-verify-before-done/case.yaml +33 -0
  113. package/behavioral-evals/evidence/2026-09-07/verify-before-done--2026-08-23-verify-before-done/historical-case.yaml +31 -0
  114. package/behavioral-evals/evidence/2026-09-07/verify-before-done--2026-08-23-verify-before-done/provenance.json +42 -0
  115. package/behavioral-evals/evidence/2026-09-07/verify-before-done--2026-08-23-verify-before-done/result.sanitized.json +20 -0
  116. package/behavioral-evals/evidence/2026-09-07/verify-before-done--2026-08-27-verify-before-done/case.yaml +33 -0
  117. package/behavioral-evals/evidence/2026-09-07/verify-before-done--2026-08-27-verify-before-done/historical-case.yaml +31 -0
  118. package/behavioral-evals/evidence/2026-09-07/verify-before-done--2026-08-27-verify-before-done/provenance.json +42 -0
  119. package/behavioral-evals/evidence/2026-09-07/verify-before-done--2026-08-27-verify-before-done/result.sanitized.json +20 -0
  120. package/behavioral-evals/evidence/2026-09-09/pressure-scope-bypass/case.yaml +33 -0
  121. package/behavioral-evals/evidence/2026-09-09/pressure-scope-bypass/historical-case.yaml +33 -0
  122. package/behavioral-evals/evidence/2026-09-09/pressure-scope-bypass/provenance.json +42 -0
  123. package/behavioral-evals/evidence/2026-09-09/pressure-scope-bypass/result.sanitized.json +480 -0
  124. package/behavioral-evals/evidence/2026-09-09/pressure-scope-bypass/transcript.sanitized.jsonl +95 -0
  125. package/behavioral-evals/evidence-tool.js +443 -0
  126. package/behavioral-evals/fixtures/claude-denied.jsonl +3 -0
  127. package/behavioral-evals/fixtures/claude-legacy.json +1 -0
  128. package/behavioral-evals/fixtures/claude-oral-only.jsonl +2 -0
  129. package/behavioral-evals/fixtures/claude-success.jsonl +5 -0
  130. package/behavioral-evals/fixtures/claude-truncated.jsonl +3 -0
  131. package/behavioral-evals/fixtures/opencode-success.jsonl +6 -0
  132. package/behavioral-evals/results/2026-08-31-baseline-add-feature.json +20 -0
  133. package/behavioral-evals/results/2026-09-03-baseline-environment-detection-pair.json +133 -0
  134. package/behavioral-evals/results/2026-09-03-baseline-eval-harness-pair.json +141 -0
  135. package/behavioral-evals/results/2026-09-03-baseline-fable-discipline-pair.json +149 -0
  136. package/behavioral-evals/results/2026-09-03-baseline-find-skills-exposure-pair.json +141 -0
  137. package/behavioral-evals/results/2026-09-03-baseline-find-skills-pair.json +141 -0
  138. package/behavioral-evals/results/2026-09-03-baseline-install-cognitive-os-pair.json +133 -0
  139. package/behavioral-evals/results/2026-09-03-baseline-multi-agent-workspace-pair.json +141 -0
  140. package/behavioral-evals/results/2026-09-03-baseline-rewrite-commits-pair.json +95 -0
  141. package/behavioral-evals/results/2026-09-03-baseline-self-evolve-pair.json +141 -0
  142. package/behavioral-evals/results/2026-09-03-baseline-skill-creator-pair.json +141 -0
  143. package/behavioral-evals/results/2026-09-03-baseline-skill-style-pair.json +133 -0
  144. package/behavioral-evals/results/2026-09-03-baseline-to-spec-pair.json +133 -0
  145. package/behavioral-evals/results/2026-09-03-baseline-to-tickets-pair.json +141 -0
  146. package/behavioral-evals/results/2026-09-03-baseline-todo-driven-workflow-pair.json +141 -0
  147. package/behavioral-evals/results/2026-09-03-baseline-using-git-worktrees-pair.json +133 -0
  148. package/behavioral-evals/results/2026-09-03-summary-both.json +41 -0
  149. package/behavioral-evals/results/2026-09-04-baseline-find-skills-pair.json +141 -0
  150. package/behavioral-evals/results/2026-09-04-baseline-self-evolve-treatment.json +80 -0
  151. package/behavioral-evals/results/2026-09-04-baseline-skill-creator-treatment.json +80 -0
  152. package/behavioral-evals/results/2026-09-04-summary-both.json +41 -0
  153. package/behavioral-evals/run-with-plugin.js +15 -31
  154. package/behavioral-evals/run.js +446 -105
  155. package/behavioral-evals/transcript-parser.js +591 -0
  156. package/bin/cli.js +24 -12
  157. package/ci/ab-test-cases/grill-me-adversarial.yaml +14 -4
  158. package/ci/ab-test-cases/tdd-test-first.yaml +13 -6
  159. package/ci/ab-test-cases/verification-loop-gates.yaml +20 -7
  160. package/ci/ab-test-cases/verify-before-claim-cites.yaml +7 -6
  161. package/ci/ab-test-harness.js +113 -38
  162. package/ci/action-gate-platform-doc.test.js +31 -0
  163. package/ci/action-gate.test.js +260 -0
  164. package/ci/cases/case2.json +2 -2
  165. package/ci/consistency-check.js +51 -5
  166. package/ci/description-collision.js +15 -6
  167. package/ci/disclosure-check.js +225 -0
  168. package/ci/doc-capability-consistency.test.js +180 -0
  169. package/ci/fixtures/phase4/parallel-disjoint.stages.json +32 -0
  170. package/ci/fixtures/phase4/parallel-read-only.stages.json +32 -0
  171. package/ci/installer-roundtrip.test.js +159 -0
  172. package/ci/invariant-routing.test.js +74 -0
  173. package/ci/issue99-runtime.test.js +218 -0
  174. package/ci/mechanism-2aa-codex-action-gate-policy.test.js +117 -0
  175. package/ci/mechanism-2ab-openai-plugin-sync-integrity.test.js +80 -0
  176. package/ci/mechanism-2j-behavioral-runner.test.js +43 -1
  177. package/ci/mechanism-2k-reference-check.test.js +57 -2
  178. package/ci/mechanism-2l-multi-agent-workspace.test.js +202 -6
  179. package/ci/mechanism-2m-self-repo-guard.test.js +65 -0
  180. package/ci/mechanism-2n-opencode-plugin.test.js +461 -0
  181. package/ci/mechanism-2o-state-home-isolation.test.js +183 -0
  182. package/ci/mechanism-2p-installer-links.test.js +183 -0
  183. package/ci/mechanism-2q-installer-global-shared-store.test.js +132 -0
  184. package/ci/mechanism-2r-uninstall-flags.test.js +148 -0
  185. package/ci/mechanism-2s-tdd-quality.test.js +203 -0
  186. package/ci/mechanism-2t-disclosure.test.js +90 -0
  187. package/ci/mechanism-2t-evidence-triage.test.js +200 -0
  188. package/ci/mechanism-2t-issue-20.test.js +75 -0
  189. package/ci/mechanism-2t-platform-skill-targets.test.js +164 -0
  190. package/ci/mechanism-2t-transcript-parser.test.js +179 -0
  191. package/ci/mechanism-2t-workspace-identity.test.js +200 -0
  192. package/ci/mechanism-2u-issue-42-regressions.test.js +239 -0
  193. package/ci/mechanism-2u-issue-44.test.js +35 -0
  194. package/ci/mechanism-2v-verifier-boundaries.test.js +138 -0
  195. package/ci/mechanism-2w-platform-compatibility.test.js +148 -0
  196. package/ci/mechanism-2x-release-automation.test.js +157 -0
  197. package/ci/mechanism-2x-release-commit-message.test.js +66 -0
  198. package/ci/mechanism-2y-release-tooling-compat.test.js +47 -0
  199. package/ci/mechanism-2z-claude-plugin-manifest.test.js +29 -0
  200. package/ci/mutation-check.js +53 -0
  201. package/ci/mutation-loader.js +57 -0
  202. package/ci/negative-controls.js +76 -46
  203. package/ci/openai-plugin-package.test.js +182 -0
  204. package/ci/openai-plugin-runtime.test.js +175 -0
  205. package/ci/openai-plugin-submission.test.js +101 -0
  206. package/ci/phase4-ensemble-memory.test.js +307 -0
  207. package/ci/reference-check.js +73 -25
  208. package/ci/release-consistency-check.js +24 -1
  209. package/ci/repository-contract.test.js +17 -0
  210. package/ci/router-phase2-safety.test.js +81 -0
  211. package/ci/router-workflow-plan.test.js +264 -0
  212. package/ci/routing-check.js +6 -5
  213. package/ci/runner.js +6 -5
  214. package/ci/skill-routing-check.js +48 -11
  215. package/ci/test-behavioral-case-validation.js +62 -0
  216. package/ci/test-helper.js +10 -0
  217. package/ci/workflow-plan-consumers-edge.test.js +72 -0
  218. package/ci/workflow-plan-consumers.test.js +276 -0
  219. package/docs/architecture.md +137 -57
  220. package/docs/audit.md +22 -20
  221. package/docs/codex-action-gate.md +90 -0
  222. package/docs/issue-20-rollup.md +47 -0
  223. package/docs/mechanism-first-skill-mesh.md +22 -20
  224. package/docs/openai-plugin.md +118 -0
  225. package/docs/philosophy.md +28 -17
  226. package/docs/platform-capabilities.md +73 -0
  227. package/docs/platform-compatibility.json +270 -0
  228. package/docs/reflection.md +37 -22
  229. package/docs/release-evidence.md +27 -0
  230. package/docs/repository-contract.md +27 -0
  231. package/docs/routing.md +157 -44
  232. package/docs/security-audit.md +38 -0
  233. package/docs/troubleshooting.md +94 -51
  234. package/docs/verifier-boundaries.md +45 -0
  235. package/docs/workflows/fable-mode.md +77 -21
  236. package/docs/workflows/find-skills.md +40 -0
  237. package/docs/workflows/grill-with-docs.md +2 -2
  238. package/docs/workflows/multi-agent-workspace.md +22 -10
  239. package/docs/workflows/self-evolve.md +33 -0
  240. package/docs/workflows/tdd.md +36 -0
  241. package/docs/workflows/todo-driven-workflow.md +33 -0
  242. package/environment-detection/SKILL.md +3 -3
  243. package/eval-harness/SKILL.md +7 -7
  244. package/eval-harness/scripts/evaluate.js +12 -10
  245. package/evals/evaluation-reports.md +14 -0
  246. package/evals/harness-everything/tasks/positive-tier1.yaml +1 -1
  247. package/evals/harness-everything/tasks/positive-tier2.yaml +1 -1
  248. package/evals/harness-everything/tasks/positive-tier3.yaml +1 -1
  249. package/evals/install-cognitive-os/tasks/positive-trigger.yaml +1 -1
  250. package/fable-discipline/SKILL.md +2 -2
  251. package/fable-mode/CONTRACT-FORMAT.md +147 -33
  252. package/fable-mode/SKILL.md +3 -3
  253. package/fable-mode/agents/fable-orchestrator.md +95 -35
  254. package/fable-mode/execution-guardrails/SKILL.md +2 -2
  255. package/fable-mode/fable-haiku/SKILL.md +3 -3
  256. package/fable-mode/fable-opus/SKILL.md +3 -3
  257. package/fable-mode/fable-sonnet/SKILL.md +3 -3
  258. package/fable-mode/scripts/ensemble-review.js +371 -0
  259. package/fable-mode/scripts/model-selector.js +134 -3
  260. package/fable-mode/scripts/workflow-plan-consumer.js +337 -0
  261. package/find-skills/SKILL.md +5 -5
  262. package/find-skills/references/discovery-flow.md +1 -1
  263. package/find-skills/scripts/use-skill.js +7 -1
  264. package/git-commit/SKILL.md +4 -11
  265. package/grill-me/SKILL.md +5 -5
  266. package/grill-with-docs/SKILL.md +7 -7
  267. package/grill-with-docs/references/session-playbook.md +6 -4
  268. package/harness-everything/SKILL.md +23 -22
  269. package/harness-everything/references/router-workflow-plan.md +128 -0
  270. package/harness-everything/references/triage-and-tiers.md +173 -96
  271. package/harness-everything/schemas/router-task-shape.schema.json +126 -0
  272. package/harness-everything/schemas/router-workflow-plan.schema.json +149 -0
  273. package/harness-everything/scripts/bootstrap.js +13 -4
  274. package/harness-everything/scripts/ensemble-policy.js +102 -0
  275. package/harness-everything/scripts/kernel-router.js +212 -0
  276. package/harness-everything/scripts/router-contract.js +612 -0
  277. package/harness-everything/scripts/self-heal.js +29 -20
  278. package/harness-everything/scripts/tier-router.js +346 -221
  279. package/hooks/hooks.json +60 -15
  280. package/hooks/scripts/action-gate-rules.json +77 -0
  281. package/hooks/scripts/action-gate.js +528 -0
  282. package/hooks/scripts/atomic-commit-check.js +5 -5
  283. package/hooks/scripts/codex-action-gate-post.js +46 -0
  284. package/hooks/scripts/codex-permission-request.js +140 -0
  285. package/hooks/scripts/context-compact.js +4 -3
  286. package/hooks/scripts/contract-test.js +118 -51
  287. package/hooks/scripts/lib/fable-contracts.js +121 -0
  288. package/hooks/scripts/lib/harness-state.js +164 -28
  289. package/hooks/scripts/lib/platforms/claude.js +45 -62
  290. package/hooks/scripts/lib/platforms/codex.js +35 -61
  291. package/hooks/scripts/lib/platforms/continue.js +7 -7
  292. package/hooks/scripts/lib/platforms/copilot.js +29 -53
  293. package/hooks/scripts/lib/platforms/hermes.js +71 -20
  294. package/hooks/scripts/openai-session-start.js +81 -0
  295. package/hooks/scripts/rule-of-3-tracker.js +9 -8
  296. package/hooks/scripts/rule-of-3.js +29 -21
  297. package/hooks/scripts/state-persist.js +5 -4
  298. package/hooks/scripts/stop-gate.js +2 -2
  299. package/hooks/scripts/subagent-scope-guard.js +144 -38
  300. package/hooks/scripts/subagent-start.js +19 -0
  301. package/hooks/scripts/subagent-stop.js +6 -0
  302. package/improve-codebase-architecture/SKILL.md +2 -4
  303. package/improve-codebase-architecture/references/README.md +16 -0
  304. package/install-cognitive-os/SKILL.md +28 -22
  305. package/multi-agent-workspace/SKILL.md +16 -15
  306. package/multi-agent-workspace/references/architecture-guide.md +13 -9
  307. package/multi-agent-workspace/references/orchestration.md +39 -22
  308. package/multi-agent-workspace/scripts/consume-workflow-plan.js +129 -0
  309. package/multi-agent-workspace/scripts/index_memory.js +79 -26
  310. package/multi-agent-workspace/scripts/path-boundary.js +59 -0
  311. package/multi-agent-workspace/scripts/project-docs-resolver.js +357 -0
  312. package/multi-agent-workspace/scripts/scaffold.js +258 -103
  313. package/multi-agent-workspace/templates/AGENTS.md +20 -0
  314. package/multi-agent-workspace/workflows/03-generation.md +8 -10
  315. package/multi-agent-workspace/workflows/04-launcher.md +5 -5
  316. package/opencode-plugin/README.md +114 -71
  317. package/opencode-plugin/hooks/verify.js +62 -12
  318. package/opencode-plugin/index.mjs +547 -0
  319. package/opencode-plugin/plugin.json +4 -12
  320. package/package.json +20 -4
  321. package/plugins/harness-everything/.codex-plugin/plugin.json +39 -0
  322. package/plugins/harness-everything/hooks/hooks.json +197 -0
  323. package/plugins/harness-everything/hooks/scripts/action-gate-rules.json +77 -0
  324. package/plugins/harness-everything/hooks/scripts/action-gate.js +528 -0
  325. package/plugins/harness-everything/hooks/scripts/atomic-commit-check.js +68 -0
  326. package/plugins/harness-everything/hooks/scripts/boundary-guard.js +55 -0
  327. package/plugins/harness-everything/hooks/scripts/codex-action-gate-post.js +46 -0
  328. package/plugins/harness-everything/hooks/scripts/codex-permission-request.js +140 -0
  329. package/plugins/harness-everything/hooks/scripts/context-compact.js +115 -0
  330. package/plugins/harness-everything/hooks/scripts/contract-test.js +146 -0
  331. package/plugins/harness-everything/hooks/scripts/depth-guard.js +65 -0
  332. package/plugins/harness-everything/hooks/scripts/lib/fable-contracts.js +121 -0
  333. package/plugins/harness-everything/hooks/scripts/lib/harness-state.js +275 -0
  334. package/plugins/harness-everything/hooks/scripts/lib/platforms/claude.js +168 -0
  335. package/plugins/harness-everything/hooks/scripts/lib/platforms/codex.js +88 -0
  336. package/plugins/harness-everything/hooks/scripts/lib/platforms/continue.js +91 -0
  337. package/plugins/harness-everything/hooks/scripts/lib/platforms/copilot.js +85 -0
  338. package/plugins/harness-everything/hooks/scripts/lib/platforms/cursor.js +89 -0
  339. package/plugins/harness-everything/hooks/scripts/lib/platforms/hermes.js +108 -0
  340. package/plugins/harness-everything/hooks/scripts/lib/platforms/index.js +17 -0
  341. package/plugins/harness-everything/hooks/scripts/lib/platforms/worktrees.js +20 -0
  342. package/plugins/harness-everything/hooks/scripts/lib/workspace.js +290 -0
  343. package/plugins/harness-everything/hooks/scripts/openai-session-start.js +81 -0
  344. package/plugins/harness-everything/hooks/scripts/reset-circuit-breaker.js +30 -0
  345. package/plugins/harness-everything/hooks/scripts/rule-of-3-tracker.js +125 -0
  346. package/plugins/harness-everything/hooks/scripts/rule-of-3.js +195 -0
  347. package/plugins/harness-everything/hooks/scripts/state-persist.js +100 -0
  348. package/plugins/harness-everything/hooks/scripts/stop-gate.js +80 -0
  349. package/plugins/harness-everything/hooks/scripts/subagent-scope-guard.js +194 -0
  350. package/plugins/harness-everything/hooks/scripts/subagent-start.js +19 -0
  351. package/plugins/harness-everything/hooks/scripts/subagent-stop.js +6 -0
  352. package/plugins/harness-everything/hooks/session-start.js +81 -0
  353. package/plugins/harness-everything/plugin.json +43 -0
  354. package/plugins/harness-everything/scripts/lib/advisory-text.js +174 -0
  355. package/plugins/harness-everything/skills/environment-detection/SKILL.md +41 -0
  356. package/plugins/harness-everything/skills/environment-detection/references/shell-syntax-rules.md +76 -0
  357. package/plugins/harness-everything/skills/environment-detection/scripts/preflight.js +103 -0
  358. package/plugins/harness-everything/skills/eval-harness/SKILL.md +42 -0
  359. package/plugins/harness-everything/skills/eval-harness/references/scoring-rubric.md +68 -0
  360. package/plugins/harness-everything/skills/eval-harness/scripts/evaluate.js +79 -0
  361. package/plugins/harness-everything/skills/fable-discipline/SKILL.md +41 -0
  362. package/plugins/harness-everything/skills/fable-discipline/references/discipline-rules.md +22 -0
  363. package/plugins/harness-everything/skills/fable-mode/CONTRACT-FORMAT.md +165 -0
  364. package/plugins/harness-everything/skills/fable-mode/SKILL.md +39 -0
  365. package/plugins/harness-everything/skills/fable-mode/agents/fable-orchestrator.md +159 -0
  366. package/plugins/harness-everything/skills/fable-mode/agents/fable-verifier.md +32 -0
  367. package/plugins/harness-everything/skills/fable-mode/agents/fable-worker-haiku.md +52 -0
  368. package/plugins/harness-everything/skills/fable-mode/agents/fable-worker-sonnet.md +53 -0
  369. package/plugins/harness-everything/skills/fable-mode/execution-guardrails/SKILL.md +43 -0
  370. package/plugins/harness-everything/skills/fable-mode/execution-guardrails/references/guardrail-rules.md +56 -0
  371. package/plugins/harness-everything/skills/fable-mode/fable-haiku/SKILL.md +36 -0
  372. package/plugins/harness-everything/skills/fable-mode/fable-haiku/references/routing-notes.md +26 -0
  373. package/plugins/harness-everything/skills/fable-mode/fable-opus/SKILL.md +36 -0
  374. package/plugins/harness-everything/skills/fable-mode/fable-sonnet/SKILL.md +36 -0
  375. package/plugins/harness-everything/skills/fable-mode/model-matrix.json +32 -0
  376. package/plugins/harness-everything/skills/fable-mode/references/execution-phases.md +37 -0
  377. package/plugins/harness-everything/skills/fable-mode/references/model-matrix.md +39 -0
  378. package/plugins/harness-everything/skills/fable-mode/scripts/ensemble-review.js +371 -0
  379. package/plugins/harness-everything/skills/fable-mode/scripts/model-selector.js +260 -0
  380. package/plugins/harness-everything/skills/fable-mode/scripts/workflow-plan-consumer.js +337 -0
  381. package/plugins/harness-everything/skills/find-skills/SKILL.md +48 -0
  382. package/plugins/harness-everything/skills/find-skills/references/discovery-flow.md +102 -0
  383. package/plugins/harness-everything/skills/find-skills/scripts/use-skill.js +112 -0
  384. package/plugins/harness-everything/skills/git-commit/SKILL.md +38 -0
  385. package/plugins/harness-everything/skills/git-commit/guides/ANGULAR_STYLE.md +61 -0
  386. package/plugins/harness-everything/skills/git-commit/guides/COMMIT_GENERATION.md +24 -0
  387. package/plugins/harness-everything/skills/git-commit/guides/LANGUAGE_DETECTION.md +16 -0
  388. package/plugins/harness-everything/skills/git-commit/guides/MAIN_REPO.md +15 -0
  389. package/plugins/harness-everything/skills/git-commit/guides/SUBMODULES.md +27 -0
  390. package/plugins/harness-everything/skills/git-commit/references/commit-flow.md +30 -0
  391. package/plugins/harness-everything/skills/grill-me/SKILL.md +43 -0
  392. package/plugins/harness-everything/skills/grill-me/references/grilling-playbook.md +38 -0
  393. package/plugins/harness-everything/skills/grill-with-docs/ADR-FORMAT.md +47 -0
  394. package/plugins/harness-everything/skills/grill-with-docs/CONTEXT-FORMAT.md +63 -0
  395. package/plugins/harness-everything/skills/grill-with-docs/SKILL.md +41 -0
  396. package/plugins/harness-everything/skills/grill-with-docs/references/session-playbook.md +99 -0
  397. package/plugins/harness-everything/skills/harness-everything/SKILL.md +43 -0
  398. package/plugins/harness-everything/skills/harness-everything/examples/README.md +9 -0
  399. package/plugins/harness-everything/skills/harness-everything/examples/todo-workflow.md +22 -0
  400. package/plugins/harness-everything/skills/harness-everything/references/router-workflow-plan.md +128 -0
  401. package/plugins/harness-everything/skills/harness-everything/references/skill-registry.md +39 -0
  402. package/plugins/harness-everything/skills/harness-everything/references/triage-and-tiers.md +193 -0
  403. package/plugins/harness-everything/skills/harness-everything/schemas/router-task-shape.schema.json +126 -0
  404. package/plugins/harness-everything/skills/harness-everything/schemas/router-workflow-plan.schema.json +149 -0
  405. package/plugins/harness-everything/skills/harness-everything/scripts/bootstrap.js +212 -0
  406. package/plugins/harness-everything/skills/harness-everything/scripts/ensemble-policy.js +102 -0
  407. package/plugins/harness-everything/skills/harness-everything/scripts/kernel-router.js +212 -0
  408. package/plugins/harness-everything/skills/harness-everything/scripts/router-contract.js +612 -0
  409. package/plugins/harness-everything/skills/harness-everything/scripts/routing-keywords.json +320 -0
  410. package/plugins/harness-everything/skills/harness-everything/scripts/self-heal.js +250 -0
  411. package/plugins/harness-everything/skills/harness-everything/scripts/tier-router.js +459 -0
  412. package/plugins/harness-everything/skills/harness-everything/scripts/verify-gate.js +100 -0
  413. package/plugins/harness-everything/skills/improve-codebase-architecture/SKILL.md +38 -0
  414. package/plugins/harness-everything/skills/improve-codebase-architecture/guides/DEEPENING.md +37 -0
  415. package/plugins/harness-everything/skills/improve-codebase-architecture/guides/HTML-REPORT.md +123 -0
  416. package/plugins/harness-everything/skills/improve-codebase-architecture/guides/INTERFACE-DESIGN.md +44 -0
  417. package/plugins/harness-everything/skills/improve-codebase-architecture/guides/LANGUAGE.md +53 -0
  418. package/plugins/harness-everything/skills/improve-codebase-architecture/guides/refactoring-workflow.md +59 -0
  419. package/plugins/harness-everything/skills/improve-codebase-architecture/references/README.md +16 -0
  420. package/plugins/harness-everything/skills/install-cognitive-os/SKILL.md +44 -0
  421. package/plugins/harness-everything/skills/install-cognitive-os/references/cognitive-loop.md +27 -0
  422. package/plugins/harness-everything/skills/multi-agent-workspace/NOTICE-agency-agents.md +27 -0
  423. package/plugins/harness-everything/skills/multi-agent-workspace/SKILL.md +38 -0
  424. package/plugins/harness-everything/skills/multi-agent-workspace/examples/csharp-monorepo.md +123 -0
  425. package/plugins/harness-everything/skills/multi-agent-workspace/examples/typescript-cli.md +126 -0
  426. package/plugins/harness-everything/skills/multi-agent-workspace/guidelines/platform-claude.md +77 -0
  427. package/plugins/harness-everything/skills/multi-agent-workspace/guidelines/platform-codex.md +146 -0
  428. package/plugins/harness-everything/skills/multi-agent-workspace/guidelines/platform-continue.md +38 -0
  429. package/plugins/harness-everything/skills/multi-agent-workspace/guidelines/platform-copilot.md +74 -0
  430. package/plugins/harness-everything/skills/multi-agent-workspace/guidelines/platform-cursor.md +40 -0
  431. package/plugins/harness-everything/skills/multi-agent-workspace/guidelines/platform-hermes.md +38 -0
  432. package/plugins/harness-everything/skills/multi-agent-workspace/guidelines/role-capabilities.md +108 -0
  433. package/plugins/harness-everything/skills/multi-agent-workspace/references/agency-agents.md +31 -0
  434. package/plugins/harness-everything/skills/multi-agent-workspace/references/architecture-guide.md +36 -0
  435. package/plugins/harness-everything/skills/multi-agent-workspace/references/orchestration.md +65 -0
  436. package/plugins/harness-everything/skills/multi-agent-workspace/scripts/agency-catalog.js +190 -0
  437. package/plugins/harness-everything/skills/multi-agent-workspace/scripts/consume-workflow-plan.js +129 -0
  438. package/plugins/harness-everything/skills/multi-agent-workspace/scripts/index_memory.js +104 -0
  439. package/plugins/harness-everything/skills/multi-agent-workspace/scripts/path-boundary.js +59 -0
  440. package/plugins/harness-everything/skills/multi-agent-workspace/scripts/project-docs-resolver.js +357 -0
  441. package/plugins/harness-everything/skills/multi-agent-workspace/scripts/scaffold.js +408 -0
  442. package/plugins/harness-everything/skills/multi-agent-workspace/templates/AGENTS.md +20 -0
  443. package/plugins/harness-everything/skills/multi-agent-workspace/templates/README.md +17 -0
  444. package/plugins/harness-everything/skills/multi-agent-workspace/templates/agent-launcher.md +68 -0
  445. package/plugins/harness-everything/skills/multi-agent-workspace/templates/backend-developer-csharp.md +56 -0
  446. package/plugins/harness-everything/skills/multi-agent-workspace/templates/backend-developer-polyglot.md +62 -0
  447. package/plugins/harness-everything/skills/multi-agent-workspace/templates/backend-developer-ts.md +57 -0
  448. package/plugins/harness-everything/skills/multi-agent-workspace/templates/memory-keeper.md +37 -0
  449. package/plugins/harness-everything/skills/multi-agent-workspace/templates/requirement-analyzer.md +66 -0
  450. package/plugins/harness-everything/skills/multi-agent-workspace/templates/specialist-agent.md +34 -0
  451. package/plugins/harness-everything/skills/multi-agent-workspace/templates/task-verifier.md +56 -0
  452. package/plugins/harness-everything/skills/multi-agent-workspace/templates/tool-maker.md +33 -0
  453. package/plugins/harness-everything/skills/multi-agent-workspace/workflows/01-init.md +22 -0
  454. package/plugins/harness-everything/skills/multi-agent-workspace/workflows/02-analysis.md +23 -0
  455. package/plugins/harness-everything/skills/multi-agent-workspace/workflows/03-generation.md +25 -0
  456. package/plugins/harness-everything/skills/multi-agent-workspace/workflows/04-launcher.md +16 -0
  457. package/plugins/harness-everything/skills/repo-docs/SKILL.md +42 -0
  458. package/plugins/harness-everything/skills/repo-docs/references/process-guide.md +60 -0
  459. package/plugins/harness-everything/skills/repo-docs/templates/agents-template.md +264 -0
  460. package/plugins/harness-everything/skills/repo-docs/templates/knowledge-agents-template.md +50 -0
  461. package/plugins/harness-everything/skills/repo-docs/templates/knowledge-readme-template.md +83 -0
  462. package/plugins/harness-everything/skills/repo-docs/templates/manual-recon.md +117 -0
  463. package/plugins/harness-everything/skills/repo-docs/templates/multi-skills-readme-template.md +72 -0
  464. package/plugins/harness-everything/skills/repo-docs/templates/product-agents-template.md +78 -0
  465. package/plugins/harness-everything/skills/repo-docs/templates/product-readme-template.md +95 -0
  466. package/plugins/harness-everything/skills/repo-docs/templates/readme-template.md +136 -0
  467. package/plugins/harness-everything/skills/repo-docs/templates/single-skill-readme-template.md +70 -0
  468. package/plugins/harness-everything/skills/repo-docs/templates/skills-agents-template.md +60 -0
  469. package/plugins/harness-everything/skills/rewrite-commits/SKILL.md +37 -0
  470. package/plugins/harness-everything/skills/rewrite-commits/references/workflow.md +18 -0
  471. package/plugins/harness-everything/skills/security-review/SKILL.md +47 -0
  472. package/plugins/harness-everything/skills/security-review/guides/OWASP-PATTERNS.md +31 -0
  473. package/plugins/harness-everything/skills/security-review/guides/STRIDE-THREAT-MODEL.md +21 -0
  474. package/plugins/harness-everything/skills/security-review/references/security-checklist.md +478 -0
  475. package/plugins/harness-everything/skills/security-review/scripts/audit-secrets.js +85 -0
  476. package/plugins/harness-everything/skills/self-evolve/SKILL.md +45 -0
  477. package/plugins/harness-everything/skills/self-evolve/references/memory-resolution.md +61 -0
  478. package/plugins/harness-everything/skills/self-evolve/scripts/persist-memory.js +272 -0
  479. package/plugins/harness-everything/skills/self-evolve/scripts/register-dynamic-skill.js +253 -0
  480. package/plugins/harness-everything/skills/self-evolve/scripts/self-regression.js +125 -0
  481. package/plugins/harness-everything/skills/skill-creator/SKILL.md +47 -0
  482. package/plugins/harness-everything/skills/skill-creator/references/authoring-workflow.md +14 -0
  483. package/plugins/harness-everything/skills/skill-creator/references/dynamic-generation-contract.md +21 -0
  484. package/plugins/harness-everything/skills/skill-creator/references/quality-checklist.md +16 -0
  485. package/plugins/harness-everything/skills/skill-creator/references/quality-principles.md +81 -0
  486. package/plugins/harness-everything/skills/skill-creator/references/testing-workflow.md +27 -0
  487. package/plugins/harness-everything/skills/skill-style/SKILL.md +42 -0
  488. package/plugins/harness-everything/skills/skill-style/references/style-guide.md +62 -0
  489. package/plugins/harness-everything/skills/tdd/SKILL.md +38 -0
  490. package/plugins/harness-everything/skills/tdd/fixtures/pass-evidence.json +100 -0
  491. package/plugins/harness-everything/skills/tdd/fixtures/quality-scenarios.json +20 -0
  492. package/plugins/harness-everything/skills/tdd/guides/deep-modules.md +33 -0
  493. package/plugins/harness-everything/skills/tdd/guides/interface-design.md +31 -0
  494. package/plugins/harness-everything/skills/tdd/guides/mocking.md +59 -0
  495. package/plugins/harness-everything/skills/tdd/guides/refactoring.md +10 -0
  496. package/plugins/harness-everything/skills/tdd/guides/tests.md +61 -0
  497. package/plugins/harness-everything/skills/tdd/references/core-discipline.md +51 -0
  498. package/plugins/harness-everything/skills/tdd/references/integration-testing.md +13 -0
  499. package/plugins/harness-everything/skills/tdd/references/quality-model.md +68 -0
  500. package/plugins/harness-everything/skills/tdd/references/unit-testing.md +15 -0
  501. package/plugins/harness-everything/skills/tdd/schemas/quality-evidence.schema.json +211 -0
  502. package/plugins/harness-everything/skills/tdd/schemas/quality-report.schema.json +110 -0
  503. package/plugins/harness-everything/skills/tdd/scripts/quality-gate.js +475 -0
  504. package/plugins/harness-everything/skills/to-spec/SKILL.md +40 -0
  505. package/plugins/harness-everything/skills/to-spec/references/process.md +77 -0
  506. package/plugins/harness-everything/skills/to-spec/scripts/check-project-docs.js +239 -0
  507. package/plugins/harness-everything/skills/to-spec/scripts/project-docs-resolver.js +111 -0
  508. package/plugins/harness-everything/skills/to-spec/templates/cli-reference.md +31 -0
  509. package/plugins/harness-everything/skills/to-spec/templates/dev-doc.md +27 -0
  510. package/plugins/harness-everything/skills/to-spec/templates/feature-spec.md +59 -0
  511. package/plugins/harness-everything/skills/to-spec/templates/schema-doc.md +31 -0
  512. package/plugins/harness-everything/skills/to-tickets/SKILL.md +42 -0
  513. package/plugins/harness-everything/skills/to-tickets/references/publishing-and-templates.md +97 -0
  514. package/plugins/harness-everything/skills/todo-driven-workflow/SKILL.md +42 -0
  515. package/plugins/harness-everything/skills/todo-driven-workflow/references/execution-guide.md +27 -0
  516. package/plugins/harness-everything/skills/using-git-worktrees/SKILL.md +49 -0
  517. package/plugins/harness-everything/skills/using-git-worktrees/references/workflow-details.md +108 -0
  518. package/plugins/harness-everything/skills/verification-loop/SKILL.md +46 -0
  519. package/plugins/harness-everything/skills/verification-loop/references/verification-phases.md +116 -0
  520. package/plugins/harness-everything/skills/verification-loop/templates/verification-report.template.md +15 -0
  521. package/plugins/harness-everything/skills/verify-before-claim/SKILL.md +43 -0
  522. package/plugins/harness-everything/skills/verify-before-claim/references/verification-guide.md +73 -0
  523. package/plugins/harness-everything/skills/zoom-out/SKILL.md +42 -0
  524. package/plugins/harness-everything/skills/zoom-out/references/circuit-breaker.md +66 -0
  525. package/plugins/harness-everything/skills/zoom-out/templates/zoom-out-report.template.md +20 -0
  526. package/repo-docs/SKILL.md +3 -7
  527. package/rewrite-commits/SKILL.md +2 -2
  528. package/scripts/build-openai-submission.js +158 -0
  529. package/scripts/installer.js +86 -11
  530. package/scripts/lib/advisory-text.js +25 -18
  531. package/scripts/lib/execution-contract.js +70 -0
  532. package/scripts/lib/manifest.js +34 -38
  533. package/scripts/lib/path-boundary.js +90 -0
  534. package/scripts/lib/skills.js +124 -70
  535. package/scripts/lib/workspace.js +269 -7
  536. package/scripts/repository-contract.js +213 -0
  537. package/scripts/sync-current-docs.js +12 -0
  538. package/scripts/sync-openai-plugin.js +91 -0
  539. package/scripts/sync-release-version.js +212 -0
  540. package/security-review/SKILL.md +4 -7
  541. package/security-review/scripts/audit-secrets.js +9 -8
  542. package/self-evolve/SKILL.md +9 -11
  543. package/self-evolve/references/memory-resolution.md +4 -1
  544. package/self-evolve/scripts/persist-memory.js +221 -88
  545. package/self-evolve/scripts/register-dynamic-skill.js +12 -10
  546. package/self-evolve/scripts/self-regression.js +23 -8
  547. package/skill-creator/SKILL.md +12 -14
  548. package/skill-creator/references/quality-checklist.md +1 -0
  549. package/skill-style/SKILL.md +4 -4
  550. package/skill-style/references/style-guide.md +29 -3
  551. package/submission/openai/README.md +67 -0
  552. package/submission/openai/listing.json +31 -0
  553. package/submission/openai/test-cases.json +61 -0
  554. package/tdd/SKILL.md +20 -26
  555. package/tdd/fixtures/pass-evidence.json +100 -0
  556. package/tdd/fixtures/quality-scenarios.json +20 -0
  557. package/tdd/references/core-discipline.md +2 -0
  558. package/tdd/references/integration-testing.md +13 -0
  559. package/tdd/references/quality-model.md +68 -0
  560. package/tdd/references/unit-testing.md +15 -0
  561. package/tdd/schemas/quality-evidence.schema.json +211 -0
  562. package/tdd/schemas/quality-report.schema.json +110 -0
  563. package/tdd/scripts/quality-gate.js +475 -0
  564. package/to-spec/SKILL.md +3 -5
  565. package/to-spec/scripts/check-project-docs.js +42 -62
  566. package/to-spec/scripts/project-docs-resolver.js +111 -0
  567. package/to-tickets/SKILL.md +4 -4
  568. package/todo-driven-workflow/SKILL.md +6 -4
  569. package/using-git-worktrees/SKILL.md +3 -3
  570. package/verification-loop/SKILL.md +4 -4
  571. package/verify-before-claim/SKILL.md +2 -2
  572. package/zoom-out/SKILL.md +4 -4
  573. package/ab-test-deep-analysis-2026-08-27.md +0 -383
  574. package/ab-test-results-2026-08-27.md +0 -152
  575. package/ab-test-statistical-analysis-31cases.md +0 -193
  576. package/opencode-plugin/hooks/circuit-breaker.js +0 -121
  577. package/opencode-plugin/hooks/compliance.js +0 -128
  578. package/opencode-plugin/hooks/post-edit.js +0 -62
  579. package/opencode-plugin/hooks/pre-complete.js +0 -65
  580. package/opencode-plugin/test-hook-firing.js +0 -198
@@ -1,139 +1,272 @@
1
1
  #!/usr/bin/env node
2
+ 'use strict';
3
+
4
+ const crypto = require('crypto');
2
5
  const fs = require('fs');
3
6
  const path = require('path');
7
+ let getWorkspaceRoot;
8
+ try {
9
+ ({ getWorkspaceRoot } = require('../../scripts/lib/workspace'));
10
+ } catch (err) {
11
+ getWorkspaceRoot = () => null;
12
+ }
4
13
 
5
- const args = process.argv.slice(2);
6
- const memoryText = args[0];
14
+ // NOTE: this script ships standalone - it is copied whole into every install
15
+ // target. When the canonical workspace resolver is not present, persistence
16
+ // fails closed rather than guessing a project root (issue #42).
7
17
 
8
- if (memoryText === '--help' || memoryText === '-h') {
9
- console.log(`Append a short defensive rule to memories/repo/RULES.md.
18
+ const SECRET_PATTERNS = [
19
+ ['github-token', /\bgh[pousr]_[A-Za-z0-9]{20,}\b/],
20
+ ['openai-key', /\bsk-(?:proj-)?[A-Za-z0-9_-]{20,}\b/],
21
+ ['aws-access-key', /\bAKIA[0-9A-Z]{16}\b/],
22
+ ['private-key', /-----BEGIN (?:RSA |EC |OPENSSH |DSA )?PRIVATE KEY-----/],
23
+ ['jwt', /\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\b/],
24
+ ['credential-assignment', /\b(?:api[_-]?key|access[_-]?token|auth[_-]?token|password|passwd|secret)\s*[:=]\s*["']?[A-Za-z0-9_./+=:-]{8,}/i],
25
+ ];
10
26
 
11
- Usage: node persist-memory.js "<insight to remember>"
27
+ const INJECTION_PATTERNS = [
28
+ ['ignore-prior-instructions', /\bignore\s+(?:all\s+)?(?:previous|prior|above)\s+(?:instructions|messages|rules)\b/i],
29
+ ['replace-instructions', /\b(?:follow|obey)\s+(?:these|the following)\s+instructions\s+instead\b/i],
30
+ ['role-override', /\byou\s+are\s+now\b/i],
31
+ ['instruction-override', /\boverride\s+(?:the\s+)?(?:system|developer|safety|previous|prior)\s+(?:instructions|message|prompt|rules)\b/i],
32
+ ['system-prompt-exfiltration', /\b(?:reveal|print|show|expose)\s+(?:the\s+)?(?:system|developer)\s+prompt\b/i],
33
+ ['role-token', /<\|(?:system|developer|assistant)\|>/i],
34
+ ['jailbreak-marker', /\b(?:jailbreak|prompt[- ]injection)\b/i],
35
+ ];
12
36
 
13
- One positional argument - the extracted root cause / rule, written as a universal,
14
- high-level statement (not a specific file, line number, or variable name). Wrap it
15
- in quotes if it contains spaces. Appended under a dated heading; never overwrites
16
- earlier entries.
37
+ function parseArgs(argv) {
38
+ let memoryText = null;
39
+ let source = 'manual-unspecified';
40
+ for (let index = 0; index < argv.length; index++) {
41
+ const token = argv[index];
42
+ if (token === '--help' || token === '-h') return { help: true, memoryText: null, source };
43
+ if (token === '--source') {
44
+ if (index + 1 >= argv.length) throw new Error('--source requires a value');
45
+ source = argv[++index];
46
+ continue;
47
+ }
48
+ if (token.startsWith('--source=')) {
49
+ source = token.slice('--source='.length);
50
+ continue;
51
+ }
52
+ if (token.startsWith('-')) throw new Error(`unknown option: ${token}`);
53
+ if (memoryText !== null) throw new Error('exactly one memory rule positional argument is allowed');
54
+ memoryText = token;
55
+ }
56
+ return { help: false, memoryText, source };
57
+ }
17
58
 
18
- Quality gates:
19
- - Minimum score of 5/10 required for persistence
20
- - Deduplication check against existing rules
21
- - Specificity and actionability scoring`);
22
- process.exit(0);
59
+ function normalizeSource(value) {
60
+ const source = String(value || 'manual-unspecified').trim();
61
+ if (!source) return 'manual-unspecified';
62
+ if (/[\r\n\0]/.test(source)) throw new Error('source provenance must be one line');
63
+ if (source.length > 240) throw new Error('source provenance exceeds 240 characters');
64
+ const secretReasons = detectReasonCodes(source, SECRET_PATTERNS);
65
+ if (secretReasons.length > 0) throw new Error(`source provenance rejected by secret screening: ${secretReasons.join(', ')}`);
66
+ return source;
23
67
  }
24
68
 
25
- if (!memoryText) {
26
- console.error("Usage: node persist-memory.js \"<insight to remember>\"");
27
- process.exit(1);
69
+ function detectReasonCodes(text, patterns) {
70
+ const reasons = [];
71
+ for (const [reasonCode, pattern] of patterns) {
72
+ if (pattern.test(text)) reasons.push(reasonCode);
73
+ }
74
+ return reasons;
28
75
  }
29
76
 
30
- // Rule quality scoring system
31
- function scoreRuleQuality(ruleText, existingRules = []) {
32
- let score = 0;
33
-
34
- // Specificity: mentions specific files, errors, or patterns
35
- if (/\.\w{2,4}/.test(ruleText)) score += 2; // File extensions
36
- if (/Error|Exception|Warning|錯誤|異常|警告/.test(ruleText)) score += 2; // Error patterns
37
- if (/\b(test|lint|build|verify|check|測試|檢查)\b/i.test(ruleText)) score += 1; // Verification terms
38
-
39
- // Actionability: starts with verb, has clear instruction
40
- if (/^(Always|Never|Check|Verify|Prefer|Avoid|Use|不要|總是|檢查|驗證|避免|使用)/i.test(ruleText)) score += 3;
41
- if (/^(should|must|will|needs? to|ought|應該|必須|需要)/i.test(ruleText)) score += 2;
42
-
43
- // Uniqueness: not already in RULES.md
44
- const isDuplicate = existingRules.some(existing => {
45
- const similarity = calculateSimilarity(ruleText, existing);
46
- return similarity > 0.7; // 70% similarity threshold
47
- });
48
- if (!isDuplicate) score += 3;
49
-
50
- // Length appropriateness (not too short, not too long)
51
- if (ruleText.length > 20 && ruleText.length < 200) score += 1;
52
-
53
- return Math.min(score, 10); // Cap at 10
77
+ function screenMemoryForPersistence(text) {
78
+ const value = String(text || '');
79
+ const secretReasonCodes = detectReasonCodes(value, SECRET_PATTERNS);
80
+ const injectionReasonCodes = detectReasonCodes(value, INJECTION_PATTERNS);
81
+ return {
82
+ allowed: secretReasonCodes.length === 0 && injectionReasonCodes.length === 0,
83
+ secretReasonCodes,
84
+ injectionReasonCodes,
85
+ };
54
86
  }
55
87
 
56
- // Simple text similarity calculation
57
88
  function calculateSimilarity(text1, text2) {
58
89
  const words1 = text1.toLowerCase().split(/\s+/);
59
90
  const words2 = text2.toLowerCase().split(/\s+/);
60
-
61
91
  const set1 = new Set(words1);
62
92
  const set2 = new Set(words2);
63
-
64
93
  let intersection = 0;
65
94
  for (const word of set1) {
66
95
  if (set2.has(word)) intersection++;
67
96
  }
68
-
69
97
  const union = set1.size + set2.size - intersection;
70
98
  return union === 0 ? 0 : intersection / union;
71
99
  }
72
100
 
73
- // Extract existing rules from RULES.md
101
+ function scoreRuleQuality(ruleText, existingRules = []) {
102
+ let score = 0;
103
+ if (/\.\w{2,4}/.test(ruleText)) score += 2;
104
+ if (/Error|Exception|Warning|錯誤|異常|警告/.test(ruleText)) score += 2;
105
+ if (/\b(test|lint|build|verify|check|測試|檢查)\b/i.test(ruleText)) score += 1;
106
+ if (/^(Always|Never|Check|Verify|Prefer|Avoid|Use|不要|總是|檢查|驗證|避免|使用)/i.test(ruleText)) score += 3;
107
+ if (/^(should|must|will|needs? to|ought|應該|必須|需要)/i.test(ruleText)) score += 2;
108
+ const isDuplicate = existingRules.some(existing => calculateSimilarity(ruleText, existing) > 0.7);
109
+ if (!isDuplicate) score += 3;
110
+ if (ruleText.length > 20 && ruleText.length < 200) score += 1;
111
+ return Math.min(score, 10);
112
+ }
113
+
74
114
  function extractExistingRules(rulesFile) {
75
115
  if (!fs.existsSync(rulesFile)) return [];
76
-
77
116
  try {
78
117
  const content = fs.readFileSync(rulesFile, 'utf8');
79
118
  const ruleMatches = content.match(/^- .+$/gm) || [];
80
- return ruleMatches.map(rule => rule.substring(2)); // Remove "- " prefix
119
+ return ruleMatches.map(rule => rule.substring(2));
81
120
  } catch (err) {
82
121
  return [];
83
122
  }
84
123
  }
85
124
 
86
- function getWorkspaceRoot() {
87
- let dir = path.resolve(process.cwd());
88
- while (dir !== path.parse(dir).root) {
89
- if (fs.existsSync(path.join(dir, '.git'))) return dir;
90
- dir = path.dirname(dir);
91
- }
92
- return process.cwd();
125
+ function contentHash(text) {
126
+ return crypto.createHash('sha256').update(String(text), 'utf8').digest('hex');
93
127
  }
94
128
 
95
- // Ensure the memory is written to the project root's memories/repo/ directory
96
- const currentDir = getWorkspaceRoot();
97
- const memoryDir = path.join(currentDir, 'memories', 'repo');
98
- const rulesFile = path.join(memoryDir, 'RULES.md');
129
+ function persistMemory({ memoryText, source = 'manual-unspecified' }) {
130
+ const ruleText = String(memoryText || '').trim();
131
+ if (!ruleText) return { ok: false, exitCode: 1, message: 'memory rule is required' };
99
132
 
100
- try {
101
- if (!fs.existsSync(memoryDir)) {
102
- fs.mkdirSync(memoryDir, { recursive: true });
133
+ const screening = screenMemoryForPersistence(ruleText);
134
+ if (!screening.allowed) {
135
+ const reasons = [...screening.secretReasonCodes, ...screening.injectionReasonCodes];
136
+ return {
137
+ ok: false,
138
+ exitCode: 2,
139
+ screening,
140
+ message: `memory rejected by persistence screening: ${reasons.join(', ')}`,
141
+ };
103
142
  }
104
143
 
105
- // Extract existing rules for deduplication check
144
+ let provenance;
145
+ try {
146
+ provenance = normalizeSource(source);
147
+ } catch (err) {
148
+ return { ok: false, exitCode: 2, screening, message: err.message };
149
+ }
150
+
151
+ const currentDir = getWorkspaceRoot();
152
+ if (!currentDir) {
153
+ return {
154
+ ok: false,
155
+ exitCode: 1,
156
+ screening,
157
+ message: 'Cannot persist project memory without a resolved git workspace.',
158
+ };
159
+ }
160
+
161
+ const memoryDir = path.join(currentDir, 'memories', 'repo');
162
+ const rulesFile = path.join(memoryDir, 'RULES.md');
106
163
  const existingRules = extractExistingRules(rulesFile);
107
-
108
- // Score the rule quality
109
- const qualityScore = scoreRuleQuality(memoryText, existingRules);
110
-
164
+ const qualityScore = scoreRuleQuality(ruleText, existingRules);
111
165
  if (qualityScore < 5) {
112
- console.error(`[Quality Gate] Rule rejected - score ${qualityScore}/10 (minimum 5 required)`);
113
- console.error(`Suggestions to improve:`);
114
- console.error(`- Be more specific (mention file types, error patterns)`);
115
- console.error(`- Start with action verbs (Always, Never, Check, Verify)`);
116
- console.error(`- Ensure the rule is actionable and not already captured`);
117
- process.exit(1);
166
+ return {
167
+ ok: false,
168
+ exitCode: 1,
169
+ screening,
170
+ qualityScore,
171
+ message: `Rule rejected - score ${qualityScore}/10 (minimum 5 required)`,
172
+ };
118
173
  }
119
-
120
- // Check for duplicates
121
- const isDuplicate = existingRules.some(existing => {
122
- const similarity = calculateSimilarity(memoryText, existing);
123
- return similarity > 0.7;
124
- });
125
-
174
+
175
+ const isDuplicate = existingRules.some(existing => calculateSimilarity(ruleText, existing) > 0.7);
126
176
  if (isDuplicate) {
127
- console.error(`[Quality Gate] Rule rejected - similar rule already exists`);
128
- process.exit(1);
177
+ return {
178
+ ok: false,
179
+ exitCode: 1,
180
+ screening,
181
+ qualityScore,
182
+ message: 'Rule rejected - similar rule already exists',
183
+ };
129
184
  }
130
185
 
186
+ fs.mkdirSync(memoryDir, { recursive: true });
131
187
  const timestamp = new Date().toISOString().split('T')[0];
132
- const formattedMemory = `\n## [${timestamp}] Self-Evolution Insight (Quality: ${qualityScore}/10)\n- ${memoryText}\n`;
133
-
188
+ const hash = contentHash(ruleText);
189
+ const formattedMemory = [
190
+ '',
191
+ `## [${timestamp}] Self-Evolution Insight (Quality: ${qualityScore}/10)`,
192
+ `Source: ${provenance}`,
193
+ `Content-SHA256: ${hash}`,
194
+ 'Screening: secret=clear; prompt-injection=clear',
195
+ `- ${ruleText}`,
196
+ '',
197
+ ].join('\n');
134
198
  fs.appendFileSync(rulesFile, formattedMemory, 'utf8');
135
- console.log(`[Success] Memory persisted to ${rulesFile} (Quality: ${qualityScore}/10)`);
136
- } catch (err) {
137
- console.error(`[Error] Failed to write memory: ${err.message}`);
138
- process.exit(1);
199
+ return {
200
+ ok: true,
201
+ exitCode: 0,
202
+ rulesFile,
203
+ qualityScore,
204
+ source: provenance,
205
+ contentSha256: hash,
206
+ screening,
207
+ };
208
+ }
209
+
210
+ function printHelp() {
211
+ console.log(`Append a short defensive rule to memories/repo/RULES.md.
212
+
213
+ Usage: node persist-memory.js "<insight to remember>" [--source <provenance>]
214
+
215
+ The rule must be universal and actionable. --source records where the lesson came
216
+ from (for example issue-85, verifier-stage-3, or manual-review); when omitted the
217
+ source is recorded as manual-unspecified.
218
+
219
+ Persistence gates:
220
+ - secret-like tokens and credential material are rejected before any write
221
+ - prompt-injection-shaped instructions are rejected before any write
222
+ - source provenance is recorded with a SHA-256 content fingerprint
223
+ - minimum quality score of 5/10 and similarity deduplication still apply`);
224
+ }
225
+
226
+ if (require.main === module) {
227
+ let parsed;
228
+ try {
229
+ parsed = parseArgs(process.argv.slice(2));
230
+ } catch (err) {
231
+ console.error(`[self-evolve] ${err.message}`);
232
+ process.exit(1);
233
+ }
234
+
235
+ if (parsed.help) {
236
+ printHelp();
237
+ process.exit(0);
238
+ }
239
+ if (!parsed.memoryText) {
240
+ console.error('Usage: node persist-memory.js "<insight to remember>" [--source <provenance>]');
241
+ process.exit(1);
242
+ }
243
+
244
+ try {
245
+ const result = persistMemory(parsed);
246
+ if (!result.ok) {
247
+ const prefix = result.exitCode === 2 ? '[Persistence Screening]' : '[Quality Gate]';
248
+ console.error(`${prefix} ${result.message}`);
249
+ if (result.qualityScore !== undefined && result.qualityScore < 5) {
250
+ console.error('Suggestions to improve:');
251
+ console.error('- Be more specific (mention file types, error patterns)');
252
+ console.error('- Start with action verbs (Always, Never, Check, Verify)');
253
+ console.error('- Ensure the rule is actionable and not already captured');
254
+ }
255
+ process.exit(result.exitCode);
256
+ }
257
+ console.log(`[Success] Memory persisted to ${result.rulesFile} (Quality: ${result.qualityScore}/10, Source: ${result.source})`);
258
+ } catch (err) {
259
+ console.error(`[Error] Failed to write memory: ${err.message}`);
260
+ process.exit(1);
261
+ }
139
262
  }
263
+
264
+ module.exports = {
265
+ calculateSimilarity,
266
+ contentHash,
267
+ extractExistingRules,
268
+ parseArgs,
269
+ persistMemory,
270
+ scoreRuleQuality,
271
+ screenMemoryForPersistence,
272
+ };
@@ -1,14 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
  const fs = require('fs');
3
3
  const path = require('path');
4
+ let getWorkspaceRoot;
5
+ try {
6
+ ({ getWorkspaceRoot } = require('../../scripts/lib/workspace'));
7
+ } catch (err) {
8
+ getWorkspaceRoot = () => null;
9
+ }
4
10
 
5
- function getWorkspaceRoot() {
6
- let dir = path.resolve(process.cwd());
7
- while (dir !== path.parse(dir).root) {
8
- if (fs.existsSync(path.join(dir, '.git'))) return dir;
9
- dir = path.dirname(dir);
10
- }
11
- return process.cwd();
11
+ const workspaceRoot = getWorkspaceRoot();
12
+ if (!workspaceRoot) {
13
+ console.error('[self-evolve] Cannot register a dynamic skill without a resolved git workspace.');
14
+ process.exit(1);
12
15
  }
13
16
 
14
17
  function loadManifestHelper() {
@@ -16,8 +19,8 @@ function loadManifestHelper() {
16
19
  path.join(__dirname, '../../scripts/lib/manifest'),
17
20
  path.join(__dirname, '../scripts/lib/manifest'),
18
21
  path.join(__dirname, '../../../scripts/lib/manifest'),
19
- path.join(getWorkspaceRoot(), 'scripts/lib/manifest'),
20
- path.join(getWorkspaceRoot(), 'harness-everything/scripts/lib/manifest'),
22
+ path.join(workspaceRoot, 'scripts/lib/manifest'),
23
+ path.join(workspaceRoot, 'harness-everything/scripts/lib/manifest'),
21
24
  ];
22
25
  for (const cand of candidates) {
23
26
  try {
@@ -33,7 +36,6 @@ const { getManifestPath, readManifest, writeManifest, recordGeneratedSkill } = l
33
36
 
34
37
  // Find user home folder
35
38
  const userHome = process.env.HOME || process.env.USERPROFILE || '';
36
- const workspaceRoot = getWorkspaceRoot();
37
39
 
38
40
  // List of all possible manifest.json home paths
39
41
  const manifestHomes = [
@@ -13,6 +13,15 @@ const fs = require('fs');
13
13
  const projectRoot = path.resolve(__dirname, '..', '..');
14
14
  let hasErrors = false;
15
15
 
16
+ let pkgName = null;
17
+ try {
18
+ pkgName = JSON.parse(fs.readFileSync(path.join(projectRoot, 'package.json'), 'utf8')).name;
19
+ } catch (e) {}
20
+ if (pkgName !== 'harness-everything') {
21
+ console.log('self-regression.js validates the Harness-everything repo\'s own CI; this workspace is not that repo, so there is nothing to check here. Skipping.');
22
+ process.exit(0);
23
+ }
24
+
16
25
  console.log('=================================================');
17
26
  console.log(' Harness OS - Self-Regression Test Suite ');
18
27
  console.log('=================================================');
@@ -32,9 +41,8 @@ function runNode(label, script, args = [], options = {}) {
32
41
  return result;
33
42
  }
34
43
 
35
- // 1. Syntax-check every shipped JavaScript file.
36
44
  console.log('\n[Phase 1] Static Syntax Check...');
37
- const foldersToScan = ['harness-everything', 'hooks', 'environment-detection', 'self-evolve', 'ci', 'eval-harness', 'scripts', 'bin', 'to-spec', 'to-tickets', 'find-skills', 'fable-mode'];
45
+ const foldersToScan = ['harness-everything', 'hooks', 'environment-detection', 'self-evolve', 'ci', 'eval-harness', 'scripts', 'bin', 'to-spec', 'to-tickets', 'find-skills', 'fable-mode', 'multi-agent-workspace'];
38
46
  const jsFiles = [];
39
47
  function walkDir(dir) {
40
48
  if (!fs.existsSync(dir)) return;
@@ -55,14 +63,16 @@ for (const file of jsFiles) {
55
63
  }
56
64
  console.log(` PASS syntax: ${jsFiles.length} JavaScript file(s)`);
57
65
 
58
- // 1b. Smoke-test the public CLI wrappers.
59
66
  console.log('\n[Phase 1b] CLI Command Smoke Test...');
60
67
  const cliPath = path.join(projectRoot, 'bin', 'cli.js');
61
68
  const nextCheck = spawnSync('node', [cliPath, 'next', 'add a new login endpoint with tests'], { cwd: projectRoot });
62
69
  if (nextCheck.status !== 0 || !nextCheck.stdout.toString().includes('RECOMMENDED TIER')) {
63
70
  console.error(' FAIL `harness next` did not produce a routing recommendation.');
64
71
  hasErrors = true;
65
- } else console.log(' PASS `harness next` produced a routing recommendation.');
72
+ } else if (!nextCheck.stdout.toString().includes('REQUIRED HARNESS INVARIANTS')) {
73
+ console.error(' FAIL `harness next` did not establish the invariant-first kernel contract.');
74
+ hasErrors = true;
75
+ } else console.log(' PASS `harness next` produced routing + invariant contract.');
66
76
  const verifyCheck = spawnSync('node', [cliPath, 'verify'], {
67
77
  cwd: projectRoot,
68
78
  env: { ...process.env, HARNESS_SKIP_PROJECT_CHECKS: '1' },
@@ -72,16 +82,22 @@ if (verifyCheck.status !== 0) {
72
82
  hasErrors = true;
73
83
  } else console.log(' PASS `harness verify` exited 0 on a skipped check.');
74
84
 
75
- // 2. Deterministic routing matrix.
76
85
  console.log('\n[Phase 2] Routing Verification Check...');
77
86
  runNode('routing matrix', path.join(projectRoot, 'ci', 'runner.js'));
78
87
  runNode('skill route coverage', path.join(projectRoot, 'ci', 'skill-routing-check.js'));
88
+ runNode('invariant-first routing contract', path.join(projectRoot, 'ci', 'invariant-routing.test.js'));
89
+ runNode('workflow-plan structured contract', path.join(projectRoot, 'ci', 'router-workflow-plan.test.js'));
90
+ runNode('explicit parallel safety contract', path.join(projectRoot, 'ci', 'router-phase2-safety.test.js'));
91
+ runNode('workflow-plan consumers', path.join(projectRoot, 'ci', 'workflow-plan-consumers.test.js'));
92
+ runNode('workflow-plan consumer edge contracts', path.join(projectRoot, 'ci', 'workflow-plan-consumers-edge.test.js'));
93
+ runNode('phase 4 ensemble/memory evidence', path.join(projectRoot, 'ci', 'phase4-ensemble-memory.test.js'));
94
+ runNode('phase 5 pre-action gate', path.join(projectRoot, 'ci', 'action-gate.test.js'));
95
+ runNode('phase 5 platform evidence boundary', path.join(projectRoot, 'ci', 'action-gate-platform-doc.test.js'));
96
+ runNode('issue #99 runtime correctness', path.join(projectRoot, 'ci', 'issue99-runtime.test.js'));
79
97
 
80
- // 3. Static integrity gates; behavioral evals are validated, not executed.
81
98
  console.log('\n[Phase 3] Skill Reference and Behavioral Case Checks...');
82
99
  runNode('skill reference check', path.join(projectRoot, 'ci', 'reference-check.js'));
83
100
  runNode('behavioral case validation', path.join(projectRoot, 'behavioral-evals', 'run.js'), ['validate']);
84
- // 3b. Run Fable model mode contract tests (selector + router separation)
85
101
  console.log('\n[Phase 3b] Fable Model Mode Contract Tests...');
86
102
  const fableModeTestPath = path.join(projectRoot, 'ci', 'fable-mode-test.js');
87
103
  if (fs.existsSync(fableModeTestPath)) {
@@ -96,7 +112,6 @@ if (fs.existsSync(fableModeTestPath)) {
96
112
  console.warn(" ⚠️ ci/fable-mode-test.js not found. Skipping Phase 3.");
97
113
  }
98
114
 
99
- // 4. Hook/mechanism checks.
100
115
  console.log('\n[Phase 4] Mechanism Test Suite (Claude Code hooks)...');
101
116
  runNode('mechanism suite', path.join(projectRoot, 'ci', 'mechanism-test.js'));
102
117
 
@@ -4,20 +4,18 @@ description: Author, audit, and refactor SKILL.md files against one quality bar
4
4
  license: Apache-2.0
5
5
  metadata:
6
6
  author: Miya Daniel
7
- version: 0.3.6
7
+ version: 0.4.0
8
8
  ---
9
9
 
10
10
  # Skill Creator
11
11
 
12
- SKILL.md authoring and audit.
13
-
14
12
  ## USE FOR:
15
13
  - Create a skill from scratch
16
14
  - Audit/refactor a SKILL.md; check overlap between skills
17
- - Packaging a session insight as a dynamic skill (self-evolve)
15
+ - Packaging a session insight as a dynamic skill
18
16
 
19
17
  ## DO NOT USE FOR:
20
- - Project docs that are not skills — instead use `repo-docs` / `to-spec`
18
+ - Non-skill project docs — use `repo-docs`/`to-spec`
21
19
  - Third-party skill installs (find-skills)
22
20
  - Code style outside SKILL.md files
23
21
 
@@ -28,22 +26,22 @@ SKILL.md authoring and audit.
28
26
  | **Trigger / Input** | New skill; SKILL.md audit; self-evolve packaging. |
29
27
  | **Expected Output** | SKILL.md passing the Quality Checklist. |
30
28
  | **State Mutations** | Writes `<skill>/SKILL.md`; updates registry/generated folder. |
31
- | **Enforcement Gate** | Quality Checklist complete before registering. |
29
+ | **Enforcement Gate** | Quality Checklist before registering, incl. USE FOR/DO NOT USE FOR (`<skills-repo-root>/ci/consistency-check.js`). |
32
30
 
33
31
  ## Authoring Workflow
34
32
 
35
- 1. Grep the registry for near-duplicates; the when-to-fire sentence becomes the frontmatter description.
36
- 2. Draft the Contract table first (forces the Enforcement Gate), then steps/flat reference; push branch-only detail to references/.
33
+ 1. Grep the registry for near-duplicates; the when-to-fire sentence becomes the description.
34
+ 2. Draft the Contract table first (forces the Enforcement Gate), then `## USE FOR:`/`## DO NOT USE FOR:`, then steps/flat reference; push branch-only detail to references/.
37
35
  3. A/B-test via `multi-agent-workspace` subagents; read both transcripts.
38
- 4. Run the Quality Checklist; register (static row quotes the description; dynamic below).
36
+ 4. Run the Quality Checklist; register (static quotes the description; dynamic below).
39
37
 
40
38
  ## Dynamic Skill Generation Contract
41
39
 
42
- Only generalizable multi-step procedures or enforcement contracts qualify as skills; simple constraints go to `memories/repo/RULES.md`.
40
+ Only generalizable procedures/enforcement contracts qualify; simple constraints go to `<workspace>/memories/repo/RULES.md`.
43
41
 
44
- - Location: `.claude/harness-everything/skills/generated/<kebab-case-name>/SKILL.md`
45
- - Frontmatter beyond name/description: triggers (3-6 keywords), metadata type: dynamic, generated, source, status: draft.
42
+ - Location: `<workspace>/.claude/harness-everything/skills/generated/<kebab-case-name>/SKILL.md`
43
+ - Frontmatter: triggers (3-6 keywords), metadata type/generated/source/status: draft.
46
44
  - Gate: Quality Checklist first.
47
- - Lifecycle: draft → active after firing on a different task; deprecate rather than silently delete; promote once proven general.
45
+ - Lifecycle: draft → active after firing elsewhere; deprecate, don't delete; promote once proven general.
48
46
 
49
- Deep dive: references/{authoring-workflow,dynamic-generation-contract,quality-checklist}.md
47
+ Deep dive: <this-skill-dir>/references/quality-checklist.md
@@ -5,6 +5,7 @@
5
5
  A skill isn't done until every line here is true. This is deliberately a flat checklist, not steps — check them in any order, but check all of them.
6
6
 
7
7
  - [ ] **Skill Contract table present and accurate** — all four rows; Enforcement Gate names a real script/exit-code or an explicit "None" if the skill is pure reference.
8
+ - [ ] **`## USE FOR:` and `## DO NOT USE FOR:` sections present**, each a flat bullet list starting on its own line (`^## USE FOR:` / `^## DO NOT USE FOR:`). Required by `<skills-repo-root>/ci/consistency-check.js` (`npm run test:consistency`) — missing either fails the repo's own consistency gate, not just this checklist.
8
9
  - [ ] **Single source of truth**: the frontmatter `description` is the *only* place this skill's purpose is originally written. The registry row and any `tier-router.js` line quote or tightly paraphrase it — they don't independently re-describe the skill.
9
10
  - [ ] **No block over ~5 lines duplicated verbatim elsewhere** — in this file or in another always/near-always-loaded skill. (`install-cognitive-os` vs. `harness-everything`'s 33-line ADHD-output block, flagged in the audit report, is the canonical counter-example — don't add a second one.)
10
11
  - [ ] **Every `MUST`/`MUST NOT`/`PROHIBITED` has a real gate behind it**, or is rewritten as a positive statement of the target behavior. A prohibition with no gate and no "why" sentence next to it is a smell, not a strength.
@@ -4,7 +4,7 @@ description: Apply Harness style guidelines when writing or refactoring SKILL.md
4
4
  license: Apache-2.0
5
5
  metadata:
6
6
  author: Miya Daniel
7
- version: 0.3.6
7
+ version: 0.4.0
8
8
  ---
9
9
 
10
10
  # Skill Style
@@ -27,7 +27,7 @@ Apply the Harness writing standard when creating or refactoring `SKILL.md` files
27
27
  - Checking whether a skill overlaps an existing OS/domain skill
28
28
 
29
29
  ## DO NOT USE FOR:
30
- - Interviewing intent, drafting, or testing a skill against real prompts (load `skill-creator/SKILL.md`)
30
+ - Interviewing intent, drafting, or testing a skill against real prompts (load `<skills-repo-root>/skill-creator/SKILL.md`)
31
31
  - Routing rules for dynamically generated mid-session skills owned by `self-evolve`
32
32
  - Non-Harness skill formats outside `harness-everything`
33
33
 
@@ -37,6 +37,6 @@ Apply the Harness writing standard when creating or refactoring `SKILL.md` files
37
37
  2. MUST include, in order: title, introduction, Skill Contract, usage, and actionable rules.
38
38
  3. MUST use imperative language and name the enforcing command or gate.
39
39
  4. MUST avoid overlap with OS-layer routing or domain expertise.
40
- 5. For intent interviews, drafting, and prompt tests, load `skill-creator/SKILL.md`.
40
+ 5. For intent interviews, drafting, and prompt tests, load `<skills-repo-root>/skill-creator/SKILL.md`.
41
41
 
42
- Deep dive: `references/style-guide.md`
42
+ Deep dive: `<this-skill-dir>/references/style-guide.md`
@@ -27,10 +27,36 @@ Every SKILL.md MUST include this table exactly:
27
27
  ## 2. Tone & Voice
28
28
  - **Anti-Linear / Anti-Prose**: Do not write long paragraphs. Map actions to specific `run_in_terminal` commands.
29
29
  - **Absolute Imperatives**: Use "MUST", "MUST NOT", "ALWAYS". Do not use "suggest".
30
- - **Script-Driven Enforcement**: Do not write "You should check your code". Write "You MUST run `node harness-everything/scripts/verify-gate.js`. If Exit Code 1, you MUST reflect and retry."
30
+ - **Script-Driven Enforcement**: Do not write "You should check your code". Write "You MUST run `node <skills-repo-root>/harness-everything/scripts/verify-gate.js`. If Exit Code 1, you MUST reflect and retry."
31
31
 
32
- ## 3. Avoid Functional Overlap
32
+ ## 3. Path Notation
33
+ Every path a `SKILL.md` names is checked by `node <skills-repo-root>/ci/reference-check.js`. Every checked path MUST name its base explicitly: use `<this-skill-dir>/` for the skill that names it, `<skills-repo-root>/` for this package, and `<workspace>/` for the user's project.
34
+
35
+ | Form | Base | Checked? |
36
+ | :--- | :--- | :--- |
37
+ | `<this-skill-dir>/references/x.md`, `<this-skill-dir>/../x.md` | this skill's own directory | yes |
38
+ | `<skills-repo-root>/skill-creator/SKILL.md` | another skill in this package | yes |
39
+ | `<skills-repo-root>/hooks/x.js` | the root of this package | yes |
40
+ | `<workspace>/anywhere/x.md` | a path in the USER's project | no - recorded as intentional |
41
+
42
+ - **MUST** use one of the three markers. Bare `references/x.md`, `../x.md`, or `ci/x.js` is a hard failure, not a guess.
43
+ - **MUST NOT** invent a new placeholder. An unrecognised one is a hard failure, not a skip - a typo like `<this_folder>/` would otherwise make every path in the file invisible to the gate. Register a genuinely new one in `<skills-repo-root>/ci/reference-check.js`.
44
+ - Use `<workspace>/` for every user-project path. It always wins over any package rule.
45
+ - Markers cost words, but explicit bases prevent a top-level directory from silently changing a path's meaning. Keep the top-level body short and put explanation in the workflow or references rung.
46
+ - A bare filename with no directory (`CONTEXT.md`, `package.json`) is prose and stays unchecked. Give it a directory when you mean a specific file.
47
+
48
+ ## 4. Progressive Disclosure
49
+
50
+ Keep each skill in three clear rungs:
51
+
52
+ 1. `SKILL.md` contains the trigger, contract, short imperative workflow, `USE FOR`/`DO NOT USE FOR`, and one valid `Deep dive:` entry point. Keep its body at or below 330 words, the local proxy for waza's 500-token limit.
53
+ 2. `docs/workflows/<skill>.md` explains the same workflow in plain language. It must contain at least one meaningful Mermaid diagram showing a real sequence, state change, or decision. Complex workflows need separate diagrams for distinct branches; repeated decorative graphs do not count.
54
+ 3. `references/` or `guides/` holds detailed procedures, examples, and checklists. Load these files only when the task reaches that detail.
55
+
56
+ Do not put Mermaid source in `SKILL.md`, copy a full guide into the top-level file, or change a `description:` during a content-only rewrite. The description is a routing API and must remain byte-identical unless a routing change is intentional.
57
+
58
+ ## 5. Avoid Functional Overlap
33
59
  - **OS Skills vs. Domain Skills**: Distinguish between the OS layer (which routes and constrains behavior) and the Domain layer (which provides deep technical expertise).
34
60
 
35
- ## 4. For the fuller authoring & quality workflow, see `skill-creator`
61
+ ## 6. For the fuller authoring & quality workflow, see `skill-creator`
36
62
  This document is the terse format spec — the Skill Contract table shape and the tone rules. For interviewing intent, drafting, testing a skill against real prompts, pruning duplication/no-op/sprawl, and the rules for skills `self-evolve` generates dynamically mid-session, load `skill-creator/SKILL.md` instead. It builds on this spec rather than replacing it.