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
@@ -0,0 +1,239 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Project Docs Framework Check
4
+ *
5
+ * Mechanized gate for `to-spec` (and `to-tickets`, once installed): has this
6
+ * repo already pinned down where reference docs live, how issues are
7
+ * tracked, and what counts as a valid issue? Stored as a `projectDocs` entry
8
+ * inside the SAME harness-everything/manifest.json this package already
9
+ * owns (see scripts/lib/manifest.js and self-evolve's `generated` skill
10
+ * registry) - not a new docs/agents/ file convention, so there's one config
11
+ * surface, not two.
12
+ *
13
+ * Deliberately repo-local only: unlike self-evolve's `generated` skills
14
+ * (intentionally reusable across projects), doc location / tracker / issue
15
+ * definition are PER-REPO facts. Reading or writing them through the global
16
+ * ~/.agents or ~/.claude manifest homes would leak one project's tracker
17
+ * into every other project sharing that global install, so this script
18
+ * scans only the workspace-relative platform homes, never the user-home ones.
19
+ *
20
+ * Exit 0 -> at least one detected platform's manifest.json (inside this
21
+ * repo) has a complete projectDocs entry. Read it, skip Step 0.
22
+ * Exit 1 -> missing or incomplete everywhere. Run the Step 0 interview in
23
+ * to-spec/SKILL.md for the flagged field(s), then persist with `init`.
24
+ *
25
+ * manifest.json is read on every single tier-router.js invocation (every
26
+ * prompt, not just to-spec runs) to scan for self-evolve's generated
27
+ * skills - so projectDocs MUST stay a short pointer, never a growing log.
28
+ * `init` enforces a length cap per field (see MAX_FIELD_LENGTH) precisely so
29
+ * this can't quietly bloat over time. If a real answer is genuinely long
30
+ * (a multi-context doc map, a full custom issue template), write that detail
31
+ * into its own file - a CONTEXT-MAP.md entry, a `.github/ISSUE_TEMPLATE/`
32
+ * file, a docs/ README - and pass just that path as the field's value.
33
+ * Anything to-spec might later want to log per-session or per-doc (e.g.
34
+ * "which doc got published for which conversation") belongs in a separate,
35
+ * session-scoped file under the state dir (see hooks/scripts/lib/harness-
36
+ * state.js's getSessionDir) - never appended into this manifest.
37
+ */
38
+ const fs = require('fs');
39
+ const path = require('path');
40
+ // Keep project-doc path decisions in the resolver carried by the installed
41
+ // multi-agent-workspace skill. This script consumes the same contract.
42
+ const { getWorkspaceRoot, getRepoManifestHomes, detectProjectDocsConventions } =
43
+ require('./project-docs-resolver');
44
+
45
+ function loadManifestHelper() {
46
+ const candidates = [
47
+ path.join(__dirname, '../../scripts/lib/manifest'),
48
+ path.join(__dirname, '../scripts/lib/manifest'),
49
+ path.join(__dirname, '../../../scripts/lib/manifest'),
50
+ path.join(getWorkspaceRoot(), 'scripts/lib/manifest'),
51
+ path.join(getWorkspaceRoot(), 'harness-everything/scripts/lib/manifest'),
52
+ ];
53
+ for (const cand of candidates) {
54
+ try {
55
+ if (fs.existsSync(cand + '.js') || fs.existsSync(cand)) {
56
+ return require(cand);
57
+ }
58
+ } catch (e) {}
59
+ }
60
+ // A standalone installed skill may not carry the package helper. Keep its
61
+ // manifest format compatible with the package's tiny helper instead of
62
+ // making document resolution depend on the source checkout.
63
+ return {
64
+ getManifestPath: home => path.join(home, 'harness-everything', 'manifest.json'),
65
+ readManifest: file => {
66
+ try {
67
+ const data = JSON.parse(fs.readFileSync(file, 'utf8'));
68
+ if (!Array.isArray(data.skills)) data.skills = [];
69
+ if (!Array.isArray(data.agents)) data.agents = [];
70
+ return data;
71
+ } catch {
72
+ return { package: 'harness-everything', skills: [], agents: [] };
73
+ }
74
+ },
75
+ writeManifest: (file, data) => {
76
+ fs.mkdirSync(path.dirname(file), { recursive: true });
77
+ fs.writeFileSync(file, JSON.stringify(data, null, 2), 'utf8');
78
+ }
79
+ };
80
+ }
81
+ const { getManifestPath, readManifest, writeManifest } = loadManifestHelper();
82
+
83
+ const REQUIRED_FIELDS = ['docLocation', 'tracker', 'issueDefinition'];
84
+ const FLAG_TO_FIELD = {
85
+ 'doc-location': 'docLocation',
86
+ 'tracker': 'tracker',
87
+ 'issue-definition': 'issueDefinition',
88
+ };
89
+ // A pointer, not a payload: one short line each. Long enough for "GitHub
90
+ // Issues via gh, label ready-for-agent" or "docs/reference/, see
91
+ // CONTEXT-MAP.md for per-context layout", too short for embedding a full
92
+ // issue template or a multi-paragraph doc-location policy inline.
93
+ const MAX_FIELD_LENGTH = 200;
94
+
95
+ function missingFields(projectDocs) {
96
+ if (!projectDocs) return REQUIRED_FIELDS.slice();
97
+ return REQUIRED_FIELDS.filter(f => !String(projectDocs[f] || '').trim());
98
+ }
99
+
100
+ function detectWorkspaceConventions(workspaceRoot) {
101
+ return detectProjectDocsConventions(workspaceRoot);
102
+ }
103
+
104
+ function runCheck(workspaceRoot) {
105
+ const existingPaths = getRepoManifestHomes(workspaceRoot)
106
+ .map(getManifestPath)
107
+ .filter(p => fs.existsSync(p));
108
+
109
+ // Check explicit projectDocs entries in manifest files
110
+ for (const manifestPath of existingPaths) {
111
+ const docs = readManifest(manifestPath).projectDocs;
112
+ if (docs && missingFields(docs).length === 0) {
113
+ console.log(`[Project Docs Check] OK: ${manifestPath} defines document location, issue tracker, and issue definition.`);
114
+ process.exit(0);
115
+ }
116
+ }
117
+
118
+ // Fallback to heuristic workspace detection
119
+ const inferred = detectWorkspaceConventions(workspaceRoot);
120
+ const missingInferred = missingFields(inferred);
121
+
122
+ if (missingInferred.length === 0) {
123
+ console.log(`[Project Docs Check] OK (Inferred from workspace structure):`);
124
+ console.log(` - docLocation: ${inferred.docLocation}`);
125
+ console.log(` - tracker: ${inferred.tracker}`);
126
+ console.log(` - issueDefinition: ${inferred.issueDefinition}`);
127
+ process.exit(0);
128
+ }
129
+
130
+ console.log(`[Project Docs Check] INCOMPLETE: no manifest.json or standard folder structure covers all fields. Missing: ${missingInferred.join(', ')}`);
131
+ console.log('=> Run the Step 0 framework interview for missing fields, or proceed using default workspace fallbacks.');
132
+ process.exit(1);
133
+ }
134
+
135
+ function parseFlags(args) {
136
+ const values = {};
137
+ for (let i = 0; i < args.length; i += 2) {
138
+ const flag = args[i];
139
+ const value = args[i + 1];
140
+ if (flag && flag.startsWith('--') && value !== undefined) {
141
+ values[flag.slice(2)] = value;
142
+ }
143
+ }
144
+ return values;
145
+ }
146
+
147
+ function runInit(workspaceRoot, args) {
148
+ const flags = parseFlags(args);
149
+ const missingFlags = Object.keys(FLAG_TO_FIELD).filter(f => !flags[f]);
150
+ if (missingFlags.length > 0) {
151
+ console.error(`[Project Docs Check] init requires --${missingFlags.join(', --')}`);
152
+ process.exit(1);
153
+ }
154
+
155
+ const oversizedFlags = Object.keys(FLAG_TO_FIELD).filter(f => flags[f].length > MAX_FIELD_LENGTH);
156
+ if (oversizedFlags.length > 0) {
157
+ for (const f of oversizedFlags) {
158
+ console.error(`[Project Docs Check] --${f} is ${flags[f].length} chars - projectDocs fields must stay <= ${MAX_FIELD_LENGTH} chars (a pointer, not the content).`);
159
+ }
160
+ console.error('=> Write the detailed content to its own file instead (e.g. a CONTEXT-MAP.md entry, a .github/ISSUE_TEMPLATE/ file, a docs/ README), then pass just that path here.');
161
+ process.exit(1);
162
+ }
163
+
164
+ const projectDocs = {
165
+ docLocation: flags['doc-location'],
166
+ tracker: flags['tracker'],
167
+ issueDefinition: flags['issue-definition'],
168
+ updatedAt: new Date().toISOString(),
169
+ };
170
+
171
+ const homes = getRepoManifestHomes(workspaceRoot);
172
+
173
+ // Write to every platform home already bootstrapped with harness in THIS
174
+ // repo (their harness-everything/ subfolder already exists), so switching
175
+ // editors mid-project never loses this config.
176
+ let wrote = 0;
177
+ for (const home of homes) {
178
+ const manifestPath = getManifestPath(home);
179
+ if (!fs.existsSync(path.dirname(manifestPath))) continue;
180
+ const data = readManifest(manifestPath);
181
+ data.projectDocs = projectDocs;
182
+ writeManifest(manifestPath, data);
183
+ console.log(`[Project Docs Check] Wrote projectDocs to ${manifestPath}`);
184
+ wrote++;
185
+ }
186
+
187
+ // No repo-local platform bootstrapped yet: create the primary one
188
+ // (.claude/harness-everything/manifest.json) rather than falling back to
189
+ // any global/user-home manifest - this data must never leave the repo.
190
+ if (wrote === 0) {
191
+ const manifestPath = getManifestPath(homes[0]);
192
+ const data = readManifest(manifestPath);
193
+ data.projectDocs = projectDocs;
194
+ writeManifest(manifestPath, data);
195
+ console.log(`[Project Docs Check] No platform bootstrapped yet in this repo - wrote projectDocs to ${manifestPath}`);
196
+ }
197
+
198
+ process.exit(0);
199
+ }
200
+
201
+ if (process.argv[2] === '--help' || process.argv[2] === '-h') {
202
+ console.log(`Gate: has this repo already pinned doc location / issue tracker / issue definition?
203
+
204
+ Usage:
205
+ node check-project-docs.js [check] Exit 0 if a complete projectDocs entry already exists in this repo's manifest.json; exit 1 with the missing field(s) otherwise.
206
+ node check-project-docs.js init --doc-location "..." --tracker "..." --issue-definition "..."
207
+ Persist all three fields (each <= ${MAX_FIELD_LENGTH} chars - a pointer, not the content) to every already-bootstrapped platform manifest.json in this repo.
208
+
209
+ Repo-local only: writes only to workspace-relative manifest homes (.claude/, .cursor/,
210
+ .github/, .codex/, .continue/), never to the user-home manifests self-evolve uses.`);
211
+ process.exit(0);
212
+ }
213
+
214
+ const command = process.argv[2] || 'check';
215
+ const commandArgs = process.argv.slice(3);
216
+ const workspaceIndex = commandArgs.indexOf('--workspace');
217
+ // An explicit workspace is authoritative. Only the omitted flag walks up to
218
+ // the repository root; otherwise a nested target would silently resolve to
219
+ // its containing checkout and inspect the wrong project configuration.
220
+ if (workspaceIndex !== -1 && !commandArgs[workspaceIndex + 1]) {
221
+ console.error('[Project Docs Check] --workspace requires a path');
222
+ process.exit(1);
223
+ }
224
+ const workspaceRoot = workspaceIndex === -1
225
+ ? getWorkspaceRoot()
226
+ : path.resolve(commandArgs[workspaceIndex + 1]);
227
+ if (!workspaceRoot) {
228
+ console.error('[to-spec/check-project-docs] Cannot inspect project docs without a resolved git workspace.');
229
+ process.exit(1);
230
+ }
231
+
232
+ if (command === 'check') {
233
+ runCheck(workspaceRoot);
234
+ } else if (command === 'init') {
235
+ runInit(workspaceRoot, commandArgs);
236
+ } else {
237
+ console.error(`[Project Docs Check] Unknown command "${command}". Use 'check' or 'init'.`);
238
+ process.exit(1);
239
+ }
@@ -0,0 +1,111 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+
4
+ // In the source tree this is the single shared resolver. A to-spec-only
5
+ // installation has no sibling multi-agent skill, so its fallback preserves
6
+ // the same explicit/inferred/fallback provenance contract locally.
7
+ try {
8
+ module.exports = require('../../multi-agent-workspace/scripts/project-docs-resolver');
9
+ } catch (error) {
10
+ const fs = require('fs');
11
+ const os = require('os');
12
+ const path = require('path');
13
+ const crypto = require('crypto');
14
+ const PLATFORM_HOMES = Object.freeze(['.claude', '.cursor', '.github', '.codex', '.continue']);
15
+ function getWorkspaceRoot(start = process.cwd()) {
16
+ let dir = path.resolve(start);
17
+ while (dir !== path.parse(dir).root) {
18
+ if (fs.existsSync(path.join(dir, '.git'))) return dir;
19
+ dir = path.dirname(dir);
20
+ }
21
+ return path.resolve(start);
22
+ }
23
+ function getRepoManifestHomes(root) { return PLATFORM_HOMES.map(home => path.join(root, home)); }
24
+ function readProjectDocs(root) {
25
+ for (const home of getRepoManifestHomes(root)) {
26
+ const file = path.join(home, 'harness-everything', 'manifest.json');
27
+ try {
28
+ const data = JSON.parse(fs.readFileSync(file, 'utf8'));
29
+ if (data.projectDocs) return { file, projectDocs: data.projectDocs };
30
+ } catch { /* not bootstrapped or invalid; the check command reports it */ }
31
+ }
32
+ return null;
33
+ }
34
+ function getWorkspaceKey(root) {
35
+ let real = path.resolve(root);
36
+ try { real = fs.realpathSync(real); } catch { /* best effort */ }
37
+ const slug = path.basename(real).toLowerCase().replace(/[^a-z0-9._-]+/g, '-').replace(/^-+|-+$/g, '') || 'workspace';
38
+ return `${slug}-${crypto.createHash('sha1').update(real).digest('hex').slice(0, 12)}`;
39
+ }
40
+ function getStateHome() { return process.env.HARNESS_STATE_HOME || path.join(os.homedir(), '.agents', 'harness-everything'); }
41
+ function getRuntimeRoot(root) { return path.join(getStateHome(), 'workspaces', getWorkspaceKey(root), 'multi-agent'); }
42
+ function resolveProjectDocs(root) {
43
+ const workspaceRoot = path.resolve(root);
44
+ const manifest = readProjectDocs(workspaceRoot);
45
+ const docs = manifest ? manifest.projectDocs : {};
46
+ const fields = {
47
+ decision: ['decisionLocation', 'decisions', 'adrLocation', 'adr'],
48
+ domain: ['domainLocation', 'domains', 'contextLocation', 'contexts', 'domain'],
49
+ architecture: ['architectureLocation', 'architectures', 'architecture']
50
+ };
51
+ const conventional = {
52
+ decision: ['docs/adr', 'docs/decisions', 'adr', 'decisions'],
53
+ domain: ['docs/domain', 'docs/contexts', 'domain', 'contexts'],
54
+ architecture: ['docs/architecture', 'architecture']
55
+ };
56
+ const fallback = { decision: 'docs/adr', domain: 'docs/domain', architecture: 'docs/architecture' };
57
+ const paths = {};
58
+ for (const zone of Object.keys(fields)) {
59
+ let selected = null;
60
+ for (const field of fields[zone]) {
61
+ if (typeof docs[field] === 'string' && docs[field].trim()) {
62
+ selected = { path: path.resolve(workspaceRoot, docs[field]), source: 'projectDocs', resolution: 'explicit', field };
63
+ break;
64
+ }
65
+ }
66
+ if (!selected && docs.docLocation) {
67
+ const base = path.resolve(workspaceRoot, docs.docLocation);
68
+ const names = { decision: ['adr', 'decisions'], domain: ['domain', 'contexts'], architecture: ['architecture'] }[zone];
69
+ selected = { path: names.includes(path.basename(base).toLowerCase()) ? base : path.join(base, names[0]), source: 'projectDocs', resolution: 'inferred' };
70
+ }
71
+ if (!selected) {
72
+ const existing = conventional[zone].map(item => path.join(workspaceRoot, item)).find(item => {
73
+ try { return fs.statSync(item).isDirectory(); } catch { return false; }
74
+ });
75
+ if (existing) selected = { path: existing, source: 'inference', resolution: 'inferred' };
76
+ }
77
+ if (!selected) selected = { path: path.join(workspaceRoot, fallback[zone]), source: 'fallback', resolution: 'fallback' };
78
+ paths[zone] = { path: path.resolve(selected.path), relativePath: path.relative(workspaceRoot, selected.path).replace(/\\/g, '/'), source: selected.source, resolution: selected.resolution || selected.source, origin: selected.source, ...(selected.field ? { field: selected.field } : {}) };
79
+ }
80
+ const runtimeRoot = getRuntimeRoot(workspaceRoot);
81
+ return {
82
+ workspaceRoot,
83
+ workspaceKey: getWorkspaceKey(workspaceRoot),
84
+ stateHome: getStateHome(),
85
+ runtimeRoot,
86
+ runtime: { root: runtimeRoot, state: path.join(runtimeRoot, 'state'), logs: path.join(runtimeRoot, 'logs'), roles: path.join(runtimeRoot, 'roles') },
87
+ projectDocs: manifest ? { ...manifest.projectDocs, manifestPath: manifest.file } : null,
88
+ paths,
89
+ decisions: paths.decision,
90
+ domains: paths.domain,
91
+ architectures: paths.architecture
92
+ };
93
+ }
94
+ function detectProjectDocsConventions(root) {
95
+ const workspaceRoot = path.resolve(root);
96
+ const configured = readProjectDocs(workspaceRoot);
97
+ const inferred = configured && configured.projectDocs && configured.projectDocs.docLocation
98
+ ? { docLocation: configured.projectDocs.docLocation } : {};
99
+ if (!inferred.docLocation) {
100
+ for (const dir of ['docs/roadmaps', 'docs/reference', 'docs/specs', 'docs', 'doc']) {
101
+ if (fs.existsSync(path.join(workspaceRoot, dir))) { inferred.docLocation = `${dir}/`; break; }
102
+ }
103
+ }
104
+ if (fs.existsSync(path.join(workspaceRoot, '.github', 'ISSUE_TEMPLATE'))) inferred.tracker = 'GitHub Issues via .github/ISSUE_TEMPLATE/';
105
+ else if (inferred.docLocation) inferred.tracker = `${inferred.docLocation}tickets/ local markdown tickets`;
106
+ if (inferred.tracker && inferred.tracker.includes('ISSUE_TEMPLATE')) inferred.issueDefinition = '.github/ISSUE_TEMPLATE/ template structure';
107
+ else if (inferred.tracker) inferred.issueDefinition = 'Title + acceptance criteria + Status: ready-for-agent';
108
+ return inferred;
109
+ }
110
+ module.exports = { PLATFORM_HOMES, getWorkspaceRoot, getStateHome, getRuntimeRoot, getWorkspaceKey, getRepoManifestHomes, readProjectDocs, resolveProjectDocs, detectProjectDocsConventions, ensureCommittableFallback: resolution => resolution };
111
+ }
@@ -0,0 +1,31 @@
1
+ # CLI / API Reference Template
2
+
3
+ Use this shape when the artifact is documenting a new or changed command surface — a CLI command, flag set, or a single API endpoint. Lighter than `feature-spec.md`: no user stories, no seam-sketching. Fits Tier 2 work just as often as Tier 3.
4
+
5
+ <spec-template>
6
+
7
+ ## Synopsis
8
+
9
+ One-line usage form, e.g. `harness todo add <task> [--priority <n>]` or `POST /api/orders/:id/cancel`.
10
+
11
+ ## Description
12
+
13
+ What this command/endpoint does and when you'd reach for it, from the caller's perspective.
14
+
15
+ ## Flags / Arguments / Parameters
16
+
17
+ Each flag, positional argument, or request field: name, type, required/optional, default, what it controls.
18
+
19
+ ## Examples
20
+
21
+ 2-3 concrete invocations covering the common case and at least one edge case.
22
+
23
+ ## Exit Codes / Errors
24
+
25
+ Every distinct exit code or error response: what triggers it, what the caller should do about it.
26
+
27
+ ## Related Commands / See Also
28
+
29
+ Other commands/endpoints this one is commonly paired with, supersedes, or is superseded by.
30
+
31
+ </spec-template>
@@ -0,0 +1,27 @@
1
+ # Dev / Design Doc Template
2
+
3
+ Use this shape for a scoped technical decision that doesn't rise to a full ADR (see `grill-with-docs`'s three-criteria test) but is still worth writing down before implementing — the kind of thing a Tier 2 task produces when it makes a real design call along the way.
4
+
5
+ <spec-template>
6
+
7
+ ## Context
8
+
9
+ What prompted this decision — the constraint, bug, or request behind it.
10
+
11
+ ## Decision
12
+
13
+ What was decided, stated plainly.
14
+
15
+ ## Alternatives Considered
16
+
17
+ Other options that were on the table and why they were passed over.
18
+
19
+ ## Trade-offs
20
+
21
+ What this decision costs, even though it was the right call.
22
+
23
+ ## Rollout / Rollback
24
+
25
+ How this ships (flag, gradual, all-at-once) and how to undo it if it's wrong.
26
+
27
+ </spec-template>
@@ -0,0 +1,59 @@
1
+ # Feature Spec (PRD) Template
2
+
3
+ Use this shape when the artifact is a new feature, product surface, or anything with user-facing behavior and multiple implementation decisions to record. This is the heaviest template — reserve it for work that will get broken into tickets by `to-tickets` afterward.
4
+
5
+ <spec-template>
6
+
7
+ ## Problem Statement
8
+
9
+ The problem that the user is facing, from the user's perspective.
10
+
11
+ ## Solution
12
+
13
+ The solution to the problem, from the user's perspective.
14
+
15
+ ## User Stories
16
+
17
+ A LONG, numbered list of user stories. Each user story should be in the format of:
18
+
19
+ 1. As an <actor>, I want a <feature>, so that <benefit>
20
+
21
+ <user-story-example>
22
+ 1. As a mobile bank customer, I want to see balance on my accounts, so that I can make better informed decisions about my spending
23
+ </user-story-example>
24
+
25
+ This list of user stories should be extremely extensive and cover all aspects of the feature.
26
+
27
+ ## Implementation Decisions
28
+
29
+ A list of implementation decisions that were made. This can include:
30
+
31
+ - The modules that will be built/modified
32
+ - The interfaces of those modules that will be modified
33
+ - Technical clarifications from the developer
34
+ - Architectural decisions
35
+ - Schema changes
36
+ - API contracts
37
+ - Specific interactions
38
+
39
+ Do NOT include specific file paths or code snippets. They may end up being outdated very quickly.
40
+
41
+ Exception: if a prototype produced a snippet that encodes a decision more precisely than prose can (state machine, reducer, schema, type shape), inline it within the relevant decision and note briefly that it came from a prototype. Trim to the decision-rich parts — not a working demo, just the important bits.
42
+
43
+ ## Testing Decisions
44
+
45
+ A list of testing decisions that were made. Include:
46
+
47
+ - A description of what makes a good test (only test external behavior, not implementation details)
48
+ - Which modules will be tested
49
+ - Prior art for the tests (i.e. similar types of tests in the codebase)
50
+
51
+ ## Out of Scope
52
+
53
+ A description of the things that are out of scope for this spec.
54
+
55
+ ## Further Notes
56
+
57
+ Any further notes about the feature.
58
+
59
+ </spec-template>
@@ -0,0 +1,31 @@
1
+ # Schema / File Format Template
2
+
3
+ Use this shape when the artifact is documenting a data shape — a database schema change, a config file format, a wire payload, or an on-disk state file. Lighter than `feature-spec.md`: no user stories, no seam-sketching.
4
+
5
+ <spec-template>
6
+
7
+ ## Purpose
8
+
9
+ What this schema represents and why it exists, in one or two sentences.
10
+
11
+ ## Shape
12
+
13
+ Every field: name, type, required/optional, constraints (enum values, ranges, format). A snippet is appropriate here — schemas are exactly the case where inlining the shape beats describing it in prose.
14
+
15
+ ## Versioning / Migration
16
+
17
+ How a previous version maps to this one, if this is a change rather than a new schema. Whether old readers/writers still work, and for how long.
18
+
19
+ ## Validation Rules
20
+
21
+ Constraints that span multiple fields, or that a type system alone can't express (e.g. "end_date must be after start_date").
22
+
23
+ ## Backward Compatibility
24
+
25
+ What breaks for existing consumers, if anything, and what the mitigation is (dual-write, expand-contract, feature flag).
26
+
27
+ ## Example Payload
28
+
29
+ One realistic, complete example instance of the schema.
30
+
31
+ </spec-template>
@@ -0,0 +1,42 @@
1
+ ---
2
+ name: to-tickets
3
+ description: Break a to-spec feature-spec, a plan, or a conversation into tracer-bullet tickets with declared blocking edges — one file per ticket locally or issues on a real tracker via projectDocs. Use when an approved spec needs dependency-aware ordering.
4
+ license: Apache-2.0
5
+ metadata:
6
+ author: Miya Daniel
7
+ version: 0.4.0
8
+ ---
9
+
10
+ # To Tickets
11
+
12
+ Cuts a plan or spec into tracer-bullet vertical slices, each declaring its blockers.
13
+
14
+ ## USE FOR:
15
+ - Break a spec or settled plan into tracer-bullet vertical slices
16
+ - Declaring blocking edges and dependency order
17
+ - Publishing tickets to local files or a tracker
18
+
19
+ ## DO NOT USE FOR:
20
+ - Writing the feature spec itself — instead use `to-spec`
21
+ - Trivial single-edit tasks needing no breakdown
22
+ - Closing parent tracker issues
23
+
24
+ ## Skill Contract
25
+
26
+ | Component | Specification |
27
+ | :--- | :--- |
28
+ | **Trigger / Input** | Explicit /to-tickets only; input: spec reference or plan in context. |
29
+ | **Expected Output** | Tickets with What-to-build, Blocked-by, criteria — per projectDocs/convention/fallback. |
30
+ | **State Mutations** | None to manifest.json (reads only); writes tickets at resolved location. |
31
+ | **Enforcement Gate** | Run `node "<skills-repo-root>/to-spec/scripts/check-project-docs.js" check` if available; never block on Exit 1; MUST get user approval before publishing. |
32
+
33
+ ## Process
34
+
35
+ 1. Resolve path: script check (Exit 0 = configured location) → workspace convention dirs → platform fallback (`.claude`/`.github`/`.cursor` + `/harness-everything/tickets/`).
36
+ 2. Gather context: prefer a referenced to-spec spec — design-audit verification MANDATORY first, else refuse; no spec is fine.
37
+ 3. Explore codebase (optional): evidence-cited findings only; prefactor first.
38
+ 4. Draft vertical slices: complete path through every layer, demoable alone, one context window each; declare blocking edges.
39
+ 5. Quiz the user on granularity and edges until approved (MANDATORY gate).
40
+ 6. Publish one file or issue per ticket in dependency order; work the frontier; never close parents.
41
+
42
+ Deep dive: <this-skill-dir>/references/publishing-and-templates.md
@@ -0,0 +1,97 @@
1
+ # Storage Path Resolution & Publishing Detail (moved from SKILL.md)
2
+
3
+ ### 0. Resolve Storage Path & Framework (Gated Resolution Loop)
4
+
5
+ Follow the decision matrix below to determine where ticket artifacts must be published:
6
+
7
+ ```mermaid
8
+ flowchart TD
9
+ Start[Receive /to-tickets Request] --> CheckScript{1. Node.js & Script Executable?}
10
+
11
+ CheckScript -- Yes --> RunCheck[Run check-project-docs.js check]
12
+ RunCheck -- Exit 0 (Configured) --> PathConfig[Use Project Configured Path<br>e.g. docs/roadmaps/, tracker, or .scratch/]
13
+ RunCheck -- Exit 1 (Unset) --> InspectRepo
14
+
15
+ CheckScript -- No / Fails --> InspectRepo{2. Inspect Existing Workspace Conventions}
16
+
17
+ InspectRepo -- Existing Folder Found --> PathRepo[Use Workspace Convention<br>e.g. docs/roadmaps/, docs/tickets/, tasks/tickets/]
18
+ InspectRepo -- No Conventional Folder --> CheckPlatform{3. Fallback to Active Platform Home}
19
+
20
+ CheckPlatform -- Claude Code --> PathClaude[Write to .claude/harness-everything/tickets/]
21
+ CheckPlatform -- GitHub Copilot / VS Code --> PathCopilot[Write to .github/harness-everything/tickets/]
22
+ CheckPlatform -- Cursor / Other --> PathCursor[Write to .cursor/harness-everything/tickets/]
23
+
24
+ PathConfig --> Draft
25
+ PathRepo --> Draft
26
+ PathClaude --> Draft
27
+ PathCopilot --> Draft
28
+ PathCursor --> Draft
29
+ Draft[Draft & Publish Tickets]
30
+ ```
31
+
32
+ #### Path Resolution Rules:
33
+ 1. **Explicit Project Configuration (`projectDocs`)**: If `check-project-docs.js` returns `Exit 0`, use the configured `docLocation` or `tracker`.
34
+ 2. **Workspace Convention Inspection**: If unconfigured or script unavailable, check if any of these directories exist in the workspace:
35
+ - `docs/roadmaps/`
36
+ - `docs/tickets/`
37
+ - `tasks/tickets/`
38
+ - `.scratch/issues/`
39
+ If found, save tickets in the matching directory.
40
+ 3. **Platform Isolation Fallback**: If no directory convention exists, create and write ticket files inside the active IDE platform state folder:
41
+ - Claude Code: `.claude/harness-everything/tickets/<NN>-<slug>.md`
42
+ - GitHub Copilot: `.github/harness-everything/tickets/<NN>-<slug>.md`
43
+ - Cursor: `.cursor/harness-everything/tickets/<NN>-<slug>.md`
44
+
45
+ # Wide Refactors: Expand-Contract Exception
46
+
47
+ Give each ticket its **blocking edges** — the other tickets that must complete before it can start. A ticket with no blockers can start immediately.
48
+
49
+ **Wide refactors are the exception to vertical slicing.** A **wide refactor** is one mechanical change — rename a column, retype a shared symbol — whose **blast radius** fans across the whole codebase, so a single edit breaks thousands of call sites at once and no vertical slice can land green. Don't force it into a tracer bullet; sequence it as **expand–contract**. First expand: add the new form beside the old so nothing breaks. Then migrate the call sites over in batches sized by blast radius (per package, per directory), each batch its own ticket blocked by the expand, keeping CI green batch to batch because the old form still exists. Finally contract: delete the old form once no caller remains, in a ticket blocked by every migrate batch. When even the batches can't stay green alone, keep the sequence but let them share an integration branch that all block a final integrate-and-verify ticket — green is promised only there.
50
+
51
+ # Ticket Templates
52
+
53
+ <local-ticket-template>
54
+
55
+ # <NN> — <Ticket title>
56
+
57
+ **What to build:** the end-to-end behaviour this ticket makes work, from the user's perspective — not a layer-by-layer implementation list.
58
+
59
+ **Blocked by:** the numbers/titles of the tickets that gate this one, or "None — can start immediately".
60
+
61
+ **Status:** ready-for-agent
62
+
63
+ - [ ] Acceptance criterion 1
64
+ - [ ] Acceptance criterion 2
65
+
66
+ </local-ticket-template>
67
+
68
+ <issue-template>
69
+
70
+ ## Parent
71
+
72
+ A reference to the parent issue/spec on the tracker (the `to-spec` feature spec this came from, if any — otherwise omit this section).
73
+
74
+ ## What to build
75
+
76
+ The end-to-end behaviour this ticket makes work, from the user's perspective — not layer-by-layer implementation.
77
+
78
+ ## Acceptance criteria
79
+
80
+ - [ ] Criterion 1
81
+ - [ ] Criterion 2
82
+
83
+ ## Blocked by
84
+
85
+ - A reference to each blocking ticket, or "None — can start immediately".
86
+
87
+ </issue-template>
88
+
89
+ In either form, avoid specific file paths or code snippets — they go stale fast. Exception: if a prototype produced a snippet that encodes a decision more precisely than prose can (state machine, reducer, schema, type shape), inline it and note briefly that it came from a prototype. Trim to the decision-rich parts — not a working demo, just the important bits.
90
+
91
+ # Gather-Context Notes
92
+
93
+ If the referenced doc is a cli-reference, schema-doc, or dev-doc (a lighter to-spec shape, not a feature-spec), it is usually already ticket-sized on its own — confirm with the user whether it needs splitting before drafting.
94
+
95
+ # Evidence Format (Zero-Trust Exploration)
96
+
97
+ Every finding must cite explicit evidence: `Evidence: [File path & line number / Tool output] -> Finding: [What it means]`. Never guess codebase layout or dependencies.