mandrel 1.57.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (843) hide show
  1. package/.agents/README.md +954 -0
  2. package/.agents/docs/SDLC.md +1420 -0
  3. package/.agents/docs/agentrc-reference.json +278 -0
  4. package/.agents/docs/configuration.md +1040 -0
  5. package/.agents/docs/workflows.md +59 -0
  6. package/.agents/instructions.md +384 -0
  7. package/.agents/personas/architect.md +107 -0
  8. package/.agents/personas/devops-engineer.md +36 -0
  9. package/.agents/personas/engineer-mobile.md +119 -0
  10. package/.agents/personas/engineer-web.md +110 -0
  11. package/.agents/personas/engineer.md +90 -0
  12. package/.agents/personas/product.md +88 -0
  13. package/.agents/personas/project-manager.md +110 -0
  14. package/.agents/personas/qa-engineer.md +91 -0
  15. package/.agents/personas/refactorer.md +110 -0
  16. package/.agents/personas/security-engineer.md +112 -0
  17. package/.agents/personas/sre.md +86 -0
  18. package/.agents/personas/technical-writer.md +100 -0
  19. package/.agents/personas/ux-designer.md +95 -0
  20. package/.agents/rules/api-conventions.md +75 -0
  21. package/.agents/rules/changelog-style.md +238 -0
  22. package/.agents/rules/gherkin-standards.md +146 -0
  23. package/.agents/rules/git-conventions.md +146 -0
  24. package/.agents/rules/orchestration-error-handling.md +35 -0
  25. package/.agents/rules/security-baseline.md +92 -0
  26. package/.agents/rules/shell-conventions.md +70 -0
  27. package/.agents/rules/test-seams.md +59 -0
  28. package/.agents/rules/testing-standards.md +177 -0
  29. package/.agents/runtime-deps.json +18 -0
  30. package/.agents/schemas/acceptance-eval-verdict.schema.json +93 -0
  31. package/.agents/schemas/agentrc.schema.json +1583 -0
  32. package/.agents/schemas/audit-results.schema.json +69 -0
  33. package/.agents/schemas/audit-rules.json +134 -0
  34. package/.agents/schemas/audit-rules.schema.json +69 -0
  35. package/.agents/schemas/baselines/baseline-envelope.schema.json +44 -0
  36. package/.agents/schemas/baselines/bundle-size.schema.json +47 -0
  37. package/.agents/schemas/baselines/coverage.schema.json +50 -0
  38. package/.agents/schemas/baselines/crap.schema.json +52 -0
  39. package/.agents/schemas/baselines/duplication.schema.json +62 -0
  40. package/.agents/schemas/baselines/lighthouse.schema.json +59 -0
  41. package/.agents/schemas/baselines/lint.schema.json +47 -0
  42. package/.agents/schemas/baselines/maintainability.schema.json +71 -0
  43. package/.agents/schemas/baselines/mutation.schema.json +52 -0
  44. package/.agents/schemas/crap-baseline.schema.json +57 -0
  45. package/.agents/schemas/crap-report.schema.json +102 -0
  46. package/.agents/schemas/dispatch-manifest.json +232 -0
  47. package/.agents/schemas/epic-perf-report.schema.json +89 -0
  48. package/.agents/schemas/epic-spec.schema.json +183 -0
  49. package/.agents/schemas/friction-event.schema.json +56 -0
  50. package/.agents/schemas/lifecycle/README.md +18 -0
  51. package/.agents/schemas/lifecycle/acceptance.reconcile.failed.schema.json +13 -0
  52. package/.agents/schemas/lifecycle/acceptance.reconcile.ok.schema.json +13 -0
  53. package/.agents/schemas/lifecycle/acceptance.reconcile.skipped.schema.json +13 -0
  54. package/.agents/schemas/lifecycle/acceptance.reconcile.start.schema.json +12 -0
  55. package/.agents/schemas/lifecycle/acceptance.reconcile.waived.schema.json +13 -0
  56. package/.agents/schemas/lifecycle/checkpoint.written.schema.json +13 -0
  57. package/.agents/schemas/lifecycle/close-validate.end.schema.json +18 -0
  58. package/.agents/schemas/lifecycle/close-validate.start.schema.json +13 -0
  59. package/.agents/schemas/lifecycle/code-review.end.schema.json +30 -0
  60. package/.agents/schemas/lifecycle/code-review.start.schema.json +12 -0
  61. package/.agents/schemas/lifecycle/epic.automerge.end.schema.json +14 -0
  62. package/.agents/schemas/lifecycle/epic.automerge.start.schema.json +13 -0
  63. package/.agents/schemas/lifecycle/epic.blocked.schema.json +13 -0
  64. package/.agents/schemas/lifecycle/epic.cleanup.end.schema.json +12 -0
  65. package/.agents/schemas/lifecycle/epic.cleanup.start.schema.json +12 -0
  66. package/.agents/schemas/lifecycle/epic.close.end.schema.json +12 -0
  67. package/.agents/schemas/lifecycle/epic.complete.schema.json +13 -0
  68. package/.agents/schemas/lifecycle/epic.finalize.end.schema.json +13 -0
  69. package/.agents/schemas/lifecycle/epic.finalize.start.schema.json +12 -0
  70. package/.agents/schemas/lifecycle/epic.merge.armed.schema.json +13 -0
  71. package/.agents/schemas/lifecycle/epic.merge.blocked.schema.json +14 -0
  72. package/.agents/schemas/lifecycle/epic.merge.confirmed.schema.json +17 -0
  73. package/.agents/schemas/lifecycle/epic.merge.ready.schema.json +15 -0
  74. package/.agents/schemas/lifecycle/epic.plan.end.schema.json +18 -0
  75. package/.agents/schemas/lifecycle/epic.plan.start.schema.json +12 -0
  76. package/.agents/schemas/lifecycle/epic.snapshot.end.schema.json +16 -0
  77. package/.agents/schemas/lifecycle/epic.snapshot.start.schema.json +12 -0
  78. package/.agents/schemas/lifecycle/epic.watch.end.schema.json +28 -0
  79. package/.agents/schemas/lifecycle/epic.watch.start.schema.json +16 -0
  80. package/.agents/schemas/lifecycle/intervention.recorded.schema.json +15 -0
  81. package/.agents/schemas/lifecycle/ledger-record.schema.json +59 -0
  82. package/.agents/schemas/lifecycle/notification.emitted.schema.json +18 -0
  83. package/.agents/schemas/lifecycle/pr.created.schema.json +14 -0
  84. package/.agents/schemas/lifecycle/retro.end.schema.json +16 -0
  85. package/.agents/schemas/lifecycle/retro.start.schema.json +12 -0
  86. package/.agents/schemas/lifecycle/story.blocked.schema.json +13 -0
  87. package/.agents/schemas/lifecycle/story.dispatch.end.schema.json +17 -0
  88. package/.agents/schemas/lifecycle/story.dispatch.start.schema.json +15 -0
  89. package/.agents/schemas/lifecycle/story.heartbeat.schema.json +20 -0
  90. package/.agents/schemas/lifecycle/story.merged.schema.json +13 -0
  91. package/.agents/schemas/mi-report.schema.json +58 -0
  92. package/.agents/schemas/model-attribution.schema.json +49 -0
  93. package/.agents/schemas/qa-finding.schema.json +133 -0
  94. package/.agents/schemas/qa-ledger.schema.json +89 -0
  95. package/.agents/schemas/risk-verdict.schema.json +53 -0
  96. package/.agents/schemas/signal-event.schema.json +58 -0
  97. package/.agents/schemas/skill.schema.json +31 -0
  98. package/.agents/schemas/skills-index.schema.json +81 -0
  99. package/.agents/schemas/story-perf-summary.schema.json +73 -0
  100. package/.agents/schemas/validation-evidence.schema.json +78 -0
  101. package/.agents/scripts/README.md +93 -0
  102. package/.agents/scripts/acceptance-eval.js +284 -0
  103. package/.agents/scripts/acceptance-spec-reconciler.js +556 -0
  104. package/.agents/scripts/agents-bootstrap-github.js +634 -0
  105. package/.agents/scripts/analyze-execution.js +369 -0
  106. package/.agents/scripts/assert-branch.js +83 -0
  107. package/.agents/scripts/audit-labels-bootstrap.js +253 -0
  108. package/.agents/scripts/audit-to-stories.js +257 -0
  109. package/.agents/scripts/bootstrap.js +1378 -0
  110. package/.agents/scripts/check-baselines.js +81 -0
  111. package/.agents/scripts/check-dead-exports.js +311 -0
  112. package/.agents/scripts/check-doc-links.js +401 -0
  113. package/.agents/scripts/check-gherkin-placeholders.js +663 -0
  114. package/.agents/scripts/check-lifecycle-doc-drift.js +402 -0
  115. package/.agents/scripts/check-lifecycle-lint.js +379 -0
  116. package/.agents/scripts/check-prepush-recovery.js +90 -0
  117. package/.agents/scripts/check-windows-git-perf.js +138 -0
  118. package/.agents/scripts/cleanup-repo-test-temp.js +67 -0
  119. package/.agents/scripts/coverage-capture.js +112 -0
  120. package/.agents/scripts/detect-merges.js +111 -0
  121. package/.agents/scripts/diagnose-friction.js +257 -0
  122. package/.agents/scripts/diagnose.js +240 -0
  123. package/.agents/scripts/dispatcher.js +295 -0
  124. package/.agents/scripts/drain-pending-cleanup.js +147 -0
  125. package/.agents/scripts/epic-audit-prepare.js +419 -0
  126. package/.agents/scripts/epic-audit-recheck.js +241 -0
  127. package/.agents/scripts/epic-deliver-note-intervention.js +192 -0
  128. package/.agents/scripts/epic-deliver-preflight.js +407 -0
  129. package/.agents/scripts/epic-deliver-prepare.js +383 -0
  130. package/.agents/scripts/epic-execute-record-wave.js +463 -0
  131. package/.agents/scripts/epic-plan-clarity.js +201 -0
  132. package/.agents/scripts/epic-plan-decompose.js +79 -0
  133. package/.agents/scripts/epic-plan-healthcheck.js +363 -0
  134. package/.agents/scripts/epic-plan-spec-validate.js +111 -0
  135. package/.agents/scripts/epic-plan-spec.js +198 -0
  136. package/.agents/scripts/epic-reconcile.js +637 -0
  137. package/.agents/scripts/evidence-gate.js +235 -0
  138. package/.agents/scripts/generate-config-docs.js +516 -0
  139. package/.agents/scripts/generate-lifecycle-docs.js +224 -0
  140. package/.agents/scripts/generate-skills-index.js +252 -0
  141. package/.agents/scripts/generate-workflows-doc.js +168 -0
  142. package/.agents/scripts/git-cleanup.js +124 -0
  143. package/.agents/scripts/git-pr-quality-gate.js +203 -0
  144. package/.agents/scripts/git-rebase-and-resolve.js +234 -0
  145. package/.agents/scripts/hierarchy-gate.js +176 -0
  146. package/.agents/scripts/hydrate-context.js +179 -0
  147. package/.agents/scripts/install-matrix-assert.js +282 -0
  148. package/.agents/scripts/lib/Graph.js +326 -0
  149. package/.agents/scripts/lib/ITicketingProvider.js +349 -0
  150. package/.agents/scripts/lib/Logger.js +194 -0
  151. package/.agents/scripts/lib/audit-suite/cli.js +64 -0
  152. package/.agents/scripts/lib/audit-suite/findings.js +164 -0
  153. package/.agents/scripts/lib/audit-suite/frontmatter-lint.js +32 -0
  154. package/.agents/scripts/lib/audit-suite/frontmatter.js +110 -0
  155. package/.agents/scripts/lib/audit-suite/index.js +22 -0
  156. package/.agents/scripts/lib/audit-suite/runner.js +233 -0
  157. package/.agents/scripts/lib/audit-suite/selector.js +235 -0
  158. package/.agents/scripts/lib/audit-suite/substitutions.js +124 -0
  159. package/.agents/scripts/lib/audit-suite/workflow-loader.js +49 -0
  160. package/.agents/scripts/lib/audit-to-stories/build-story-body.js +130 -0
  161. package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +114 -0
  162. package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +93 -0
  163. package/.agents/scripts/lib/audit-to-stories/group-findings.js +265 -0
  164. package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +246 -0
  165. package/.agents/scripts/lib/audit-to-stories/seed-epic-from-findings.js +160 -0
  166. package/.agents/scripts/lib/auto-refresh-baselines.js +308 -0
  167. package/.agents/scripts/lib/baseline-loader.js +0 -0
  168. package/.agents/scripts/lib/baseline-schema-registry.js +69 -0
  169. package/.agents/scripts/lib/baseline-snapshot.js +716 -0
  170. package/.agents/scripts/lib/baselines/component-matcher.js +21 -0
  171. package/.agents/scripts/lib/baselines/components.js +126 -0
  172. package/.agents/scripts/lib/baselines/diff-scope-cli.js +203 -0
  173. package/.agents/scripts/lib/baselines/duplication-scanner.js +220 -0
  174. package/.agents/scripts/lib/baselines/env-overrides.js +129 -0
  175. package/.agents/scripts/lib/baselines/envelope.js +368 -0
  176. package/.agents/scripts/lib/baselines/exit-codes.js +89 -0
  177. package/.agents/scripts/lib/baselines/git-base.js +0 -0
  178. package/.agents/scripts/lib/baselines/kernel.js +111 -0
  179. package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +220 -0
  180. package/.agents/scripts/lib/baselines/kinds/bundle-size.js +157 -0
  181. package/.agents/scripts/lib/baselines/kinds/coverage.js +194 -0
  182. package/.agents/scripts/lib/baselines/kinds/crap.js +555 -0
  183. package/.agents/scripts/lib/baselines/kinds/duplication.js +197 -0
  184. package/.agents/scripts/lib/baselines/kinds/lighthouse.js +185 -0
  185. package/.agents/scripts/lib/baselines/kinds/lint.js +172 -0
  186. package/.agents/scripts/lib/baselines/kinds/maintainability.js +340 -0
  187. package/.agents/scripts/lib/baselines/kinds/mutation.js +153 -0
  188. package/.agents/scripts/lib/baselines/path-canon.js +279 -0
  189. package/.agents/scripts/lib/baselines/preview-gates.js +298 -0
  190. package/.agents/scripts/lib/baselines/reader.js +321 -0
  191. package/.agents/scripts/lib/baselines/refresh-service.js +733 -0
  192. package/.agents/scripts/lib/baselines/scope.js +291 -0
  193. package/.agents/scripts/lib/baselines/writer.js +312 -0
  194. package/.agents/scripts/lib/bdd-runner-detect.js +417 -0
  195. package/.agents/scripts/lib/bdd-scenario-scanner.js +310 -0
  196. package/.agents/scripts/lib/bootstrap/baselines-layout-migration.js +202 -0
  197. package/.agents/scripts/lib/bootstrap/branch-protection.js +222 -0
  198. package/.agents/scripts/lib/bootstrap/ci-workflow-template.js +171 -0
  199. package/.agents/scripts/lib/bootstrap/commit-push.js +146 -0
  200. package/.agents/scripts/lib/bootstrap/gh-list.js +153 -0
  201. package/.agents/scripts/lib/bootstrap/gh-preflight.js +306 -0
  202. package/.agents/scripts/lib/bootstrap/hitl-confirm.js +89 -0
  203. package/.agents/scripts/lib/bootstrap/install-ledger.js +174 -0
  204. package/.agents/scripts/lib/bootstrap/manifest.js +272 -0
  205. package/.agents/scripts/lib/bootstrap/merge-methods.js +108 -0
  206. package/.agents/scripts/lib/bootstrap/preflight.js +195 -0
  207. package/.agents/scripts/lib/bootstrap/project-bootstrap.js +801 -0
  208. package/.agents/scripts/lib/bootstrap/prompt.js +480 -0
  209. package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +370 -0
  210. package/.agents/scripts/lib/bootstrap/summary.js +75 -0
  211. package/.agents/scripts/lib/bootstrap/workflow-audit.js +256 -0
  212. package/.agents/scripts/lib/branch-name-guard.js +98 -0
  213. package/.agents/scripts/lib/c8-cli-path.js +21 -0
  214. package/.agents/scripts/lib/changed-files.js +184 -0
  215. package/.agents/scripts/lib/checks/baseline-drift-main-checkout.js +104 -0
  216. package/.agents/scripts/lib/checks/core-bare-clean.js +48 -0
  217. package/.agents/scripts/lib/checks/epic-merge-lock-stale.js +54 -0
  218. package/.agents/scripts/lib/checks/index.js +288 -0
  219. package/.agents/scripts/lib/checks/push-hook-parity.js +106 -0
  220. package/.agents/scripts/lib/checks/stale-origin-epic.js +49 -0
  221. package/.agents/scripts/lib/checks/state.js +558 -0
  222. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +186 -0
  223. package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +182 -0
  224. package/.agents/scripts/lib/checks/windows-coverage-noise-floor.js +92 -0
  225. package/.agents/scripts/lib/checks/worktree-bootstrap-env.js +81 -0
  226. package/.agents/scripts/lib/checks/worktree-residue-biome.js +55 -0
  227. package/.agents/scripts/lib/cli/parse-numeric.js +60 -0
  228. package/.agents/scripts/lib/cli/standard-args.js +351 -0
  229. package/.agents/scripts/lib/cli-args.js +286 -0
  230. package/.agents/scripts/lib/cli-utils.js +69 -0
  231. package/.agents/scripts/lib/close-validation/projections/head-sha.js +44 -0
  232. package/.agents/scripts/lib/close-validation/projections/inputs.js +86 -0
  233. package/.agents/scripts/lib/close-validation/projections/maintainability.js +286 -0
  234. package/.agents/scripts/lib/close-validation.js +897 -0
  235. package/.agents/scripts/lib/codebase-snapshot.js +513 -0
  236. package/.agents/scripts/lib/command-header.js +33 -0
  237. package/.agents/scripts/lib/config/acceptance-eval.js +95 -0
  238. package/.agents/scripts/lib/config/baselines.js +60 -0
  239. package/.agents/scripts/lib/config/ci.js +30 -0
  240. package/.agents/scripts/lib/config/commands.js +36 -0
  241. package/.agents/scripts/lib/config/defaults.js +119 -0
  242. package/.agents/scripts/lib/config/explain.js +348 -0
  243. package/.agents/scripts/lib/config/gates/bundle-size.schema.js +23 -0
  244. package/.agents/scripts/lib/config/gates/coverage.schema.js +18 -0
  245. package/.agents/scripts/lib/config/gates/crap.schema.js +33 -0
  246. package/.agents/scripts/lib/config/gates/duplication.schema.js +26 -0
  247. package/.agents/scripts/lib/config/gates/index.js +36 -0
  248. package/.agents/scripts/lib/config/gates/lighthouse.schema.js +23 -0
  249. package/.agents/scripts/lib/config/gates/lint.schema.js +9 -0
  250. package/.agents/scripts/lib/config/gates/maintainability.schema.js +20 -0
  251. package/.agents/scripts/lib/config/gates/mutation.schema.js +12 -0
  252. package/.agents/scripts/lib/config/gates/shared.js +117 -0
  253. package/.agents/scripts/lib/config/github.js +122 -0
  254. package/.agents/scripts/lib/config/lifecycle.js +40 -0
  255. package/.agents/scripts/lib/config/limits.js +211 -0
  256. package/.agents/scripts/lib/config/paths.js +73 -0
  257. package/.agents/scripts/lib/config/preflight.js +58 -0
  258. package/.agents/scripts/lib/config/quality.js +665 -0
  259. package/.agents/scripts/lib/config/retro.js +77 -0
  260. package/.agents/scripts/lib/config/runners.js +105 -0
  261. package/.agents/scripts/lib/config/runtime.js +167 -0
  262. package/.agents/scripts/lib/config/shared.js +46 -0
  263. package/.agents/scripts/lib/config/sync-agentrc.js +243 -0
  264. package/.agents/scripts/lib/config/temp-paths.js +373 -0
  265. package/.agents/scripts/lib/config/validate-orchestration.js +81 -0
  266. package/.agents/scripts/lib/config/worktree-isolation.js +80 -0
  267. package/.agents/scripts/lib/config-resolver.js +298 -0
  268. package/.agents/scripts/lib/config-schema-shared.js +32 -0
  269. package/.agents/scripts/lib/config-schema.js +20 -0
  270. package/.agents/scripts/lib/config-settings-schema-delivery.js +332 -0
  271. package/.agents/scripts/lib/config-settings-schema-quality.js +165 -0
  272. package/.agents/scripts/lib/config-settings-schema.js +420 -0
  273. package/.agents/scripts/lib/coverage-baseline.js +352 -0
  274. package/.agents/scripts/lib/coverage-capture.js +195 -0
  275. package/.agents/scripts/lib/coverage-utils.js +239 -0
  276. package/.agents/scripts/lib/cpu-pool.js +223 -0
  277. package/.agents/scripts/lib/crap-engine.js +119 -0
  278. package/.agents/scripts/lib/crap-utils.js +479 -0
  279. package/.agents/scripts/lib/degraded-mode.js +69 -0
  280. package/.agents/scripts/lib/dependency-parser.js +129 -0
  281. package/.agents/scripts/lib/duplicate-search.js +189 -0
  282. package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +70 -0
  283. package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +197 -0
  284. package/.agents/scripts/lib/dynamic-workflow/capability.js +396 -0
  285. package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +80 -0
  286. package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +72 -0
  287. package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +90 -0
  288. package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +43 -0
  289. package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +83 -0
  290. package/.agents/scripts/lib/env-loader.js +52 -0
  291. package/.agents/scripts/lib/epic-merge-lock.js +239 -0
  292. package/.agents/scripts/lib/epic-plan-clarity.js +142 -0
  293. package/.agents/scripts/lib/epic-plan-ideation.js +228 -0
  294. package/.agents/scripts/lib/error-redactor.js +125 -0
  295. package/.agents/scripts/lib/errors/index.js +67 -0
  296. package/.agents/scripts/lib/feedback-loop/audit-results-graduator.js +230 -0
  297. package/.agents/scripts/lib/feedback-loop/code-review-graduator.js +207 -0
  298. package/.agents/scripts/lib/feedback-loop/graduator-core.js +421 -0
  299. package/.agents/scripts/lib/feedback-loop/memory-freshness.js +480 -0
  300. package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +229 -0
  301. package/.agents/scripts/lib/findings/classify-finding.js +195 -0
  302. package/.agents/scripts/lib/findings/promote-finding.js +353 -0
  303. package/.agents/scripts/lib/findings/route-finding.js +283 -0
  304. package/.agents/scripts/lib/findings/semantic-issue-search.js +179 -0
  305. package/.agents/scripts/lib/findings/severity.js +102 -0
  306. package/.agents/scripts/lib/gates/baseline-store.js +106 -0
  307. package/.agents/scripts/lib/gates/friction.js +43 -0
  308. package/.agents/scripts/lib/gh-exec.js +553 -0
  309. package/.agents/scripts/lib/git/cached-fetch.js +0 -0
  310. package/.agents/scripts/lib/git/sync-from-base.js +162 -0
  311. package/.agents/scripts/lib/git-branch-cleanup.js +213 -0
  312. package/.agents/scripts/lib/git-branch-lifecycle.js +353 -0
  313. package/.agents/scripts/lib/git-merge-orchestrator.js +261 -0
  314. package/.agents/scripts/lib/git-utils.js +363 -0
  315. package/.agents/scripts/lib/github-url.js +29 -0
  316. package/.agents/scripts/lib/install-cmd-parser.js +51 -0
  317. package/.agents/scripts/lib/issue-link-parser.js +74 -0
  318. package/.agents/scripts/lib/json-utils.js +60 -0
  319. package/.agents/scripts/lib/label-constants.js +169 -0
  320. package/.agents/scripts/lib/label-taxonomy.js +200 -0
  321. package/.agents/scripts/lib/maintainability-engine.js +164 -0
  322. package/.agents/scripts/lib/maintainability-utils.js +343 -0
  323. package/.agents/scripts/lib/mandrel-catalog.js +170 -0
  324. package/.agents/scripts/lib/mutation/baseline-snapshot.js +238 -0
  325. package/.agents/scripts/lib/mutation/config-detector.js +119 -0
  326. package/.agents/scripts/lib/mutation/stryker-runner.js +306 -0
  327. package/.agents/scripts/lib/mutation/survivor-report.js +160 -0
  328. package/.agents/scripts/lib/notifications/notifier.js +75 -0
  329. package/.agents/scripts/lib/observability/active-story-env.js +182 -0
  330. package/.agents/scripts/lib/observability/baseline-refresh-rate.js +221 -0
  331. package/.agents/scripts/lib/observability/perf-aggregator.js +887 -0
  332. package/.agents/scripts/lib/observability/perf-report-readers.js +319 -0
  333. package/.agents/scripts/lib/observability/perf-report-render.js +182 -0
  334. package/.agents/scripts/lib/observability/signals-writer.js +296 -0
  335. package/.agents/scripts/lib/observability/source-classifier.js +103 -0
  336. package/.agents/scripts/lib/observability/tool-trace-hook.js +417 -0
  337. package/.agents/scripts/lib/onboard/detect-stack.js +300 -0
  338. package/.agents/scripts/lib/onboard/scaffold-docs.js +128 -0
  339. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +173 -0
  340. package/.agents/scripts/lib/orchestration/cascade-grouping.js +275 -0
  341. package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +131 -0
  342. package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +80 -0
  343. package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +132 -0
  344. package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +142 -0
  345. package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +149 -0
  346. package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +158 -0
  347. package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +56 -0
  348. package/.agents/scripts/lib/orchestration/code-review.js +652 -0
  349. package/.agents/scripts/lib/orchestration/column-sync.js +286 -0
  350. package/.agents/scripts/lib/orchestration/context-envelope.js +280 -0
  351. package/.agents/scripts/lib/orchestration/context-hydration-engine.js +581 -0
  352. package/.agents/scripts/lib/orchestration/dependency-analyzer.js +88 -0
  353. package/.agents/scripts/lib/orchestration/detectors-phase.js +188 -0
  354. package/.agents/scripts/lib/orchestration/dispatch-engine.js +144 -0
  355. package/.agents/scripts/lib/orchestration/dispatch-pipeline.js +206 -0
  356. package/.agents/scripts/lib/orchestration/doc-reader.js +94 -0
  357. package/.agents/scripts/lib/orchestration/epic-cleanup.js +473 -0
  358. package/.agents/scripts/lib/orchestration/epic-deliver-lease-guard.js +310 -0
  359. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/cli.js +167 -0
  360. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/context.js +151 -0
  361. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/creation.js +74 -0
  362. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/dag.js +78 -0
  363. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/diagnostics.js +72 -0
  364. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist-helpers.js +155 -0
  365. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist.js +321 -0
  366. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/planning-artifacts.js +75 -0
  367. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/reconcile-spawn.js +86 -0
  368. package/.agents/scripts/lib/orchestration/epic-plan-lease-guard.js +235 -0
  369. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/authoring-context.js +197 -0
  370. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/cli-args.js +48 -0
  371. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/drain.js +94 -0
  372. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/plan-epic.js +414 -0
  373. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/prompts.js +55 -0
  374. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/risk-verdict.js +105 -0
  375. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/run-spec-phase.js +235 -0
  376. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/spec-freshness.js +120 -0
  377. package/.agents/scripts/lib/orchestration/epic-plan-state-store.js +118 -0
  378. package/.agents/scripts/lib/orchestration/epic-run-state-store.js +295 -0
  379. package/.agents/scripts/lib/orchestration/epic-runner/concurrency-gate.js +186 -0
  380. package/.agents/scripts/lib/orchestration/epic-runner/deliver-phases.js +50 -0
  381. package/.agents/scripts/lib/orchestration/epic-runner/phases/build-wave-dag.js +146 -0
  382. package/.agents/scripts/lib/orchestration/epic-runner/phases/snapshot.js +110 -0
  383. package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/composition.js +392 -0
  384. package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/signals.js +217 -0
  385. package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/transport.js +235 -0
  386. package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter.js +69 -0
  387. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/_bullet-format.js +32 -0
  388. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/crap-drift.js +291 -0
  389. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/maintainability-drift.js +175 -0
  390. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/stalled-worktree.js +37 -0
  391. package/.agents/scripts/lib/orchestration/epic-runner/story-launcher.js +127 -0
  392. package/.agents/scripts/lib/orchestration/epic-runner/story-run-progress-writer.js +400 -0
  393. package/.agents/scripts/lib/orchestration/epic-runner/sub-agent-return.js +285 -0
  394. package/.agents/scripts/lib/orchestration/epic-runner/wave-scheduler.js +66 -0
  395. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-apply.js +797 -0
  396. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-diff.js +619 -0
  397. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-discriminator.js +335 -0
  398. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-format.js +230 -0
  399. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-ops.js +363 -0
  400. package/.agents/scripts/lib/orchestration/error-journal.js +139 -0
  401. package/.agents/scripts/lib/orchestration/file-assumption-enum.js +31 -0
  402. package/.agents/scripts/lib/orchestration/file-assumptions.js +506 -0
  403. package/.agents/scripts/lib/orchestration/finalize/close-planning-tickets.js +116 -0
  404. package/.agents/scripts/lib/orchestration/finalize/open-or-locate-pr.js +241 -0
  405. package/.agents/scripts/lib/orchestration/finalize/post-handoff-comment.js +489 -0
  406. package/.agents/scripts/lib/orchestration/finalize/sanitize-skip-ci.js +88 -0
  407. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +219 -0
  408. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +309 -0
  409. package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +99 -0
  410. package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +123 -0
  411. package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +57 -0
  412. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +114 -0
  413. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +426 -0
  414. package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +84 -0
  415. package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +365 -0
  416. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +72 -0
  417. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +69 -0
  418. package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +214 -0
  419. package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +137 -0
  420. package/.agents/scripts/lib/orchestration/label-transitions.js +43 -0
  421. package/.agents/scripts/lib/orchestration/lifecycle/bus.js +309 -0
  422. package/.agents/scripts/lib/orchestration/lifecycle/emit-story-dispatch-end.js +147 -0
  423. package/.agents/scripts/lib/orchestration/lifecycle/emit-story-heartbeat.js +155 -0
  424. package/.agents/scripts/lib/orchestration/lifecycle/ledger-writer.js +226 -0
  425. package/.agents/scripts/lib/orchestration/lifecycle/listeners/README.md +69 -0
  426. package/.agents/scripts/lib/orchestration/lifecycle/listeners/acceptance-reconciler.js +378 -0
  427. package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-armer.js +248 -0
  428. package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-predicate.js +527 -0
  429. package/.agents/scripts/lib/orchestration/lifecycle/listeners/branch-cleaner.js +259 -0
  430. package/.agents/scripts/lib/orchestration/lifecycle/listeners/checkpoint-pointer-writer.js +278 -0
  431. package/.agents/scripts/lib/orchestration/lifecycle/listeners/cleaner.js +355 -0
  432. package/.agents/scripts/lib/orchestration/lifecycle/listeners/finalizer.js +647 -0
  433. package/.agents/scripts/lib/orchestration/lifecycle/listeners/index.js +331 -0
  434. package/.agents/scripts/lib/orchestration/lifecycle/listeners/intervention-recorder.js +140 -0
  435. package/.agents/scripts/lib/orchestration/lifecycle/listeners/merge-watcher.js +421 -0
  436. package/.agents/scripts/lib/orchestration/lifecycle/listeners/notify-dispatcher.js +168 -0
  437. package/.agents/scripts/lib/orchestration/lifecycle/listeners/watcher.js +668 -0
  438. package/.agents/scripts/lib/orchestration/lifecycle/trace-logger.js +322 -0
  439. package/.agents/scripts/lib/orchestration/lint-baseline-service.js +114 -0
  440. package/.agents/scripts/lib/orchestration/manifest-builder.js +216 -0
  441. package/.agents/scripts/lib/orchestration/model-attribution.js +390 -0
  442. package/.agents/scripts/lib/orchestration/parked-follow-ons.js +147 -0
  443. package/.agents/scripts/lib/orchestration/phase-runner.js +87 -0
  444. package/.agents/scripts/lib/orchestration/plan-review-routing.js +63 -0
  445. package/.agents/scripts/lib/orchestration/plan-runner/plan-router.js +86 -0
  446. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +212 -0
  447. package/.agents/scripts/lib/orchestration/planning-context-budget.js +213 -0
  448. package/.agents/scripts/lib/orchestration/planning-risk.js +155 -0
  449. package/.agents/scripts/lib/orchestration/planning-state-manager.js +318 -0
  450. package/.agents/scripts/lib/orchestration/post-merge/phases/branch-cleanup.js +56 -0
  451. package/.agents/scripts/lib/orchestration/post-merge/phases/dashboard-refresh.js +33 -0
  452. package/.agents/scripts/lib/orchestration/post-merge/phases/notification.js +78 -0
  453. package/.agents/scripts/lib/orchestration/post-merge/phases/temp-cleanup.js +68 -0
  454. package/.agents/scripts/lib/orchestration/post-merge/phases/ticket-closure.js +118 -0
  455. package/.agents/scripts/lib/orchestration/post-merge/phases/worktree-reap.js +396 -0
  456. package/.agents/scripts/lib/orchestration/post-merge-pipeline.js +205 -0
  457. package/.agents/scripts/lib/orchestration/pr-base-guard.js +47 -0
  458. package/.agents/scripts/lib/orchestration/preflight-cache.js +164 -0
  459. package/.agents/scripts/lib/orchestration/reassert-status-column.js +202 -0
  460. package/.agents/scripts/lib/orchestration/reconciler.js +137 -0
  461. package/.agents/scripts/lib/orchestration/recurring-failure-detector.js +152 -0
  462. package/.agents/scripts/lib/orchestration/recut.js +56 -0
  463. package/.agents/scripts/lib/orchestration/resolves-token.js +127 -0
  464. package/.agents/scripts/lib/orchestration/retro/phases/checks.js +94 -0
  465. package/.agents/scripts/lib/orchestration/retro/phases/compose-body.js +448 -0
  466. package/.agents/scripts/lib/orchestration/retro/phases/gather-signals.js +335 -0
  467. package/.agents/scripts/lib/orchestration/retro/phases/post-and-mirror.js +133 -0
  468. package/.agents/scripts/lib/orchestration/retro-heuristics.js +57 -0
  469. package/.agents/scripts/lib/orchestration/retro-perf-heuristics.js +275 -0
  470. package/.agents/scripts/lib/orchestration/retro-proposals.js +395 -0
  471. package/.agents/scripts/lib/orchestration/retro-runner.js +171 -0
  472. package/.agents/scripts/lib/orchestration/review-depth.js +93 -0
  473. package/.agents/scripts/lib/orchestration/review-providers/codex.js +363 -0
  474. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +205 -0
  475. package/.agents/scripts/lib/orchestration/review-providers/native.js +805 -0
  476. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +73 -0
  477. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +396 -0
  478. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +373 -0
  479. package/.agents/scripts/lib/orchestration/review-providers/types.js +89 -0
  480. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +107 -0
  481. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +159 -0
  482. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +194 -0
  483. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +81 -0
  484. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +190 -0
  485. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +70 -0
  486. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +106 -0
  487. package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +42 -0
  488. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +73 -0
  489. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +225 -0
  490. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +315 -0
  491. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +149 -0
  492. package/.agents/scripts/lib/orchestration/skill-capsule-loader.js +110 -0
  493. package/.agents/scripts/lib/orchestration/spec-freshness.js +320 -0
  494. package/.agents/scripts/lib/orchestration/spec-renderer.js +456 -0
  495. package/.agents/scripts/lib/orchestration/spec-section-validator.js +80 -0
  496. package/.agents/scripts/lib/orchestration/story-close/auto-refresh-runner.js +797 -0
  497. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/gate-failure.js +163 -0
  498. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/pre-merge-attribution.js +152 -0
  499. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/refresh-commit.js +387 -0
  500. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/regression-projection.js +266 -0
  501. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/scope-discovery.js +48 -0
  502. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution-wiring.js +67 -0
  503. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution.js +161 -0
  504. package/.agents/scripts/lib/orchestration/story-close/baseline-friction-body.js +117 -0
  505. package/.agents/scripts/lib/orchestration/story-close/cd-out-guard.js +86 -0
  506. package/.agents/scripts/lib/orchestration/story-close/cleanup-reconciler.js +147 -0
  507. package/.agents/scripts/lib/orchestration/story-close/close-inputs.js +142 -0
  508. package/.agents/scripts/lib/orchestration/story-close/comment-bodies.js +62 -0
  509. package/.agents/scripts/lib/orchestration/story-close/format-autofix-scoped.js +221 -0
  510. package/.agents/scripts/lib/orchestration/story-close/format-autofix-shared.js +123 -0
  511. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +216 -0
  512. package/.agents/scripts/lib/orchestration/story-close/merge-runner.js +636 -0
  513. package/.agents/scripts/lib/orchestration/story-close/merge-subject.js +198 -0
  514. package/.agents/scripts/lib/orchestration/story-close/phases/branch-restore.js +105 -0
  515. package/.agents/scripts/lib/orchestration/story-close/phases/close.js +222 -0
  516. package/.agents/scripts/lib/orchestration/story-close/phases/code-review.js +220 -0
  517. package/.agents/scripts/lib/orchestration/story-close/phases/gates.js +291 -0
  518. package/.agents/scripts/lib/orchestration/story-close/phases/locked-pipeline.js +234 -0
  519. package/.agents/scripts/lib/orchestration/story-close/phases/preflight.js +110 -0
  520. package/.agents/scripts/lib/orchestration/story-close/phases/refresh.js +86 -0
  521. package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked-emitter.js +112 -0
  522. package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked.js +157 -0
  523. package/.agents/scripts/lib/orchestration/story-close/post-merge-close.js +434 -0
  524. package/.agents/scripts/lib/orchestration/story-close/pre-merge-validation.js +290 -0
  525. package/.agents/scripts/lib/orchestration/story-close-recovery.js +643 -0
  526. package/.agents/scripts/lib/orchestration/structured-comment-parser.js +67 -0
  527. package/.agents/scripts/lib/orchestration/task-body-validator.js +391 -0
  528. package/.agents/scripts/lib/orchestration/ticket-lease.js +358 -0
  529. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +783 -0
  530. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +367 -0
  531. package/.agents/scripts/lib/orchestration/ticket-validator.js +691 -0
  532. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +723 -0
  533. package/.agents/scripts/lib/orchestration/ticketing/reads.js +474 -0
  534. package/.agents/scripts/lib/orchestration/ticketing/state.js +559 -0
  535. package/.agents/scripts/lib/orchestration/ticketing.js +55 -0
  536. package/.agents/scripts/lib/orchestration/wave-marker.js +28 -0
  537. package/.agents/scripts/lib/orchestration/wave-record-io.js +277 -0
  538. package/.agents/scripts/lib/orchestration/wave-record-notifications.js +189 -0
  539. package/.agents/scripts/lib/orchestration/wave-record-projection.js +423 -0
  540. package/.agents/scripts/lib/path-security.js +25 -0
  541. package/.agents/scripts/lib/plan-phase-cleanup.js +125 -0
  542. package/.agents/scripts/lib/preflight-runner.js +196 -0
  543. package/.agents/scripts/lib/presentation/dispatch-manifest-render.js +95 -0
  544. package/.agents/scripts/lib/presentation/manifest-builder.js +245 -0
  545. package/.agents/scripts/lib/presentation/manifest-formatter.js +243 -0
  546. package/.agents/scripts/lib/presentation/manifest-helpers.js +213 -0
  547. package/.agents/scripts/lib/presentation/manifest-persistence.js +262 -0
  548. package/.agents/scripts/lib/presentation/manifest-procedures.js +55 -0
  549. package/.agents/scripts/lib/presentation/manifest-render-waves.js +252 -0
  550. package/.agents/scripts/lib/presentation/manifest-renderer.js +188 -0
  551. package/.agents/scripts/lib/presentation/manifest-story-views.js +119 -0
  552. package/.agents/scripts/lib/provider-factory.js +80 -0
  553. package/.agents/scripts/lib/push-epic-retry.js +209 -0
  554. package/.agents/scripts/lib/qa/console-allowlist.js +151 -0
  555. package/.agents/scripts/lib/qa/coverage-report.js +181 -0
  556. package/.agents/scripts/lib/qa/coverage-verdict.js +296 -0
  557. package/.agents/scripts/lib/qa/propose-missing-test.js +95 -0
  558. package/.agents/scripts/lib/qa/qa-context-hydrator.js +296 -0
  559. package/.agents/scripts/lib/qa/qa-session.js +197 -0
  560. package/.agents/scripts/lib/qa/redact-evidence.js +245 -0
  561. package/.agents/scripts/lib/qa/resolve-qa-contract.js +190 -0
  562. package/.agents/scripts/lib/qa/resolve-selection.js +373 -0
  563. package/.agents/scripts/lib/runtime-deps/ensure-installed.js +100 -0
  564. package/.agents/scripts/lib/runtime-deps/manifest.js +96 -0
  565. package/.agents/scripts/lib/runtime-deps/preflight.js +78 -0
  566. package/.agents/scripts/lib/runtime-deps/scan-imports.js +202 -0
  567. package/.agents/scripts/lib/signals/detectors/common.js +36 -0
  568. package/.agents/scripts/lib/signals/detectors/hotspot.js +298 -0
  569. package/.agents/scripts/lib/signals/detectors/index.js +14 -0
  570. package/.agents/scripts/lib/signals/detectors/retry.js +289 -0
  571. package/.agents/scripts/lib/signals/detectors/rework.js +204 -0
  572. package/.agents/scripts/lib/signals/index.js +39 -0
  573. package/.agents/scripts/lib/signals/read.js +268 -0
  574. package/.agents/scripts/lib/signals/schema.js +225 -0
  575. package/.agents/scripts/lib/signals/span-tree.js +290 -0
  576. package/.agents/scripts/lib/signals/write.js +19 -0
  577. package/.agents/scripts/lib/single-story/confirm-merge.js +201 -0
  578. package/.agents/scripts/lib/single-story/story-merged-notify.js +126 -0
  579. package/.agents/scripts/lib/single-story-sweep/protection.js +274 -0
  580. package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +169 -0
  581. package/.agents/scripts/lib/single-story-sweep.js +329 -0
  582. package/.agents/scripts/lib/skills/parse-skill.js +202 -0
  583. package/.agents/scripts/lib/skills/walk-skill-files.js +56 -0
  584. package/.agents/scripts/lib/spec/index.js +36 -0
  585. package/.agents/scripts/lib/spec/loader.js +425 -0
  586. package/.agents/scripts/lib/spec/state.js +217 -0
  587. package/.agents/scripts/lib/story-body/story-body.js +743 -0
  588. package/.agents/scripts/lib/story-init/blocker-validator.js +68 -0
  589. package/.agents/scripts/lib/story-init/branch-initializer.js +422 -0
  590. package/.agents/scripts/lib/story-init/context-resolver.js +92 -0
  591. package/.agents/scripts/lib/story-init/donor-precheck.js +207 -0
  592. package/.agents/scripts/lib/story-init/hierarchy-tracer.js +36 -0
  593. package/.agents/scripts/lib/story-init/state-transitioner.js +80 -0
  594. package/.agents/scripts/lib/story-init/task-graph-builder.js +114 -0
  595. package/.agents/scripts/lib/story-init/transition-summary.js +34 -0
  596. package/.agents/scripts/lib/story-lifecycle.js +186 -0
  597. package/.agents/scripts/lib/story-plan.js +246 -0
  598. package/.agents/scripts/lib/task-utils.js +26 -0
  599. package/.agents/scripts/lib/templates/decomposer-prompts.js +168 -0
  600. package/.agents/scripts/lib/test-env.js +30 -0
  601. package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +52 -0
  602. package/.agents/scripts/lib/test-isolate/list-files.js +90 -0
  603. package/.agents/scripts/lib/test-isolate/parse-tap.js +75 -0
  604. package/.agents/scripts/lib/test-isolate/runner.js +483 -0
  605. package/.agents/scripts/lib/test-profile/parse-tap.js +136 -0
  606. package/.agents/scripts/lib/test-profile/render-report.js +45 -0
  607. package/.agents/scripts/lib/test-reserved-epic-temp-ids.js +35 -0
  608. package/.agents/scripts/lib/test-tiers.js +94 -0
  609. package/.agents/scripts/lib/util/concurrent-map.js +59 -0
  610. package/.agents/scripts/lib/util/phase-timer-state.js +72 -0
  611. package/.agents/scripts/lib/util/phase-timer.js +163 -0
  612. package/.agents/scripts/lib/util/poll-loop.js +86 -0
  613. package/.agents/scripts/lib/util/with-timeout.js +32 -0
  614. package/.agents/scripts/lib/validation-evidence.js +323 -0
  615. package/.agents/scripts/lib/wave-runner/tick.js +665 -0
  616. package/.agents/scripts/lib/wave-runner/wave-checkpoint.js +91 -0
  617. package/.agents/scripts/lib/wave-runner/wave-runner-error.js +19 -0
  618. package/.agents/scripts/lib/workers/crap-worker.js +197 -0
  619. package/.agents/scripts/lib/workers/maintainability-report-worker.js +137 -0
  620. package/.agents/scripts/lib/workers/maintainability-worker.js +79 -0
  621. package/.agents/scripts/lib/workspace-provisioner.js +189 -0
  622. package/.agents/scripts/lib/worktree/bootstrapper.js +48 -0
  623. package/.agents/scripts/lib/worktree/inspector.js +140 -0
  624. package/.agents/scripts/lib/worktree/lifecycle/creation.js +118 -0
  625. package/.agents/scripts/lib/worktree/lifecycle/drift-detection.js +62 -0
  626. package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +276 -0
  627. package/.agents/scripts/lib/worktree/lifecycle/gc.js +49 -0
  628. package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +178 -0
  629. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +264 -0
  630. package/.agents/scripts/lib/worktree/lifecycle/precheck.js +100 -0
  631. package/.agents/scripts/lib/worktree/lifecycle/reap.js +588 -0
  632. package/.agents/scripts/lib/worktree/lifecycle/registry-sync.js +124 -0
  633. package/.agents/scripts/lib/worktree/lifecycle/shared.js +26 -0
  634. package/.agents/scripts/lib/worktree/lifecycle-manager.js +40 -0
  635. package/.agents/scripts/lib/worktree/node-modules-strategy.js +349 -0
  636. package/.agents/scripts/lib/worktree-manager.js +243 -0
  637. package/.agents/scripts/lifecycle-diff.js +206 -0
  638. package/.agents/scripts/lifecycle-emit-story-dispatch.js +194 -0
  639. package/.agents/scripts/lifecycle-emit.js +479 -0
  640. package/.agents/scripts/lint-baseline.js +507 -0
  641. package/.agents/scripts/lint-label-vocabulary.js +237 -0
  642. package/.agents/scripts/loc-delta.js +205 -0
  643. package/.agents/scripts/notify.js +307 -0
  644. package/.agents/scripts/package.json +3 -0
  645. package/.agents/scripts/post-structured-comment.js +127 -0
  646. package/.agents/scripts/pr-watch-with-update.js +152 -0
  647. package/.agents/scripts/providers/github/auth.js +65 -0
  648. package/.agents/scripts/providers/github/board-add.js +63 -0
  649. package/.agents/scripts/providers/github/branch-protection.js +186 -0
  650. package/.agents/scripts/providers/github/cache.js +72 -0
  651. package/.agents/scripts/providers/github/comments.js +131 -0
  652. package/.agents/scripts/providers/github/compose.js +111 -0
  653. package/.agents/scripts/providers/github/errors.js +242 -0
  654. package/.agents/scripts/providers/github/issues.js +242 -0
  655. package/.agents/scripts/providers/github/labels.js +179 -0
  656. package/.agents/scripts/providers/github/mappers.js +126 -0
  657. package/.agents/scripts/providers/github/merge-methods.js +82 -0
  658. package/.agents/scripts/providers/github/project-board.js +47 -0
  659. package/.agents/scripts/providers/github/projects-v2-graphql.js +472 -0
  660. package/.agents/scripts/providers/github/prs.js +103 -0
  661. package/.agents/scripts/providers/github/request-helpers.js +110 -0
  662. package/.agents/scripts/providers/github/sub-issues.js +369 -0
  663. package/.agents/scripts/providers/github/tickets.js +381 -0
  664. package/.agents/scripts/providers/github/transient-retry.js +62 -0
  665. package/.agents/scripts/providers/github.js +157 -0
  666. package/.agents/scripts/quality-preview.js +327 -0
  667. package/.agents/scripts/quality-watch.js +223 -0
  668. package/.agents/scripts/render-manifest.js +143 -0
  669. package/.agents/scripts/resync-status-column.js +176 -0
  670. package/.agents/scripts/retro-run.js +167 -0
  671. package/.agents/scripts/run-audit-suite.js +97 -0
  672. package/.agents/scripts/run-coverage.js +103 -0
  673. package/.agents/scripts/run-lint.js +94 -0
  674. package/.agents/scripts/run-test-profile.js +126 -0
  675. package/.agents/scripts/run-tests.js +185 -0
  676. package/.agents/scripts/run-verify.js +56 -0
  677. package/.agents/scripts/select-audits.js +155 -0
  678. package/.agents/scripts/signals-view.js +294 -0
  679. package/.agents/scripts/single-story-close.js +83 -0
  680. package/.agents/scripts/single-story-confirm-merge.js +183 -0
  681. package/.agents/scripts/single-story-init.js +692 -0
  682. package/.agents/scripts/stories-wave-tick.js +415 -0
  683. package/.agents/scripts/story-close.js +246 -0
  684. package/.agents/scripts/story-deliver-prepare.js +267 -0
  685. package/.agents/scripts/story-init.js +516 -0
  686. package/.agents/scripts/story-phase.js +327 -0
  687. package/.agents/scripts/story-plan.js +284 -0
  688. package/.agents/scripts/sync-agentrc.js +71 -0
  689. package/.agents/scripts/sync-branch-from-base.js +138 -0
  690. package/.agents/scripts/sync-claude-commands.js +151 -0
  691. package/.agents/scripts/test-isolate.js +222 -0
  692. package/.agents/scripts/test-wrapper.js +108 -0
  693. package/.agents/scripts/update-coverage-baseline.js +129 -0
  694. package/.agents/scripts/update-crap-baseline.js +177 -0
  695. package/.agents/scripts/update-duplication-baseline.js +134 -0
  696. package/.agents/scripts/update-maintainability-baseline.js +183 -0
  697. package/.agents/scripts/update-mutation-baseline.js +189 -0
  698. package/.agents/scripts/update-ticket-state.js +107 -0
  699. package/.agents/scripts/validate-docs-freshness.js +259 -0
  700. package/.agents/scripts/validate-skills.js +278 -0
  701. package/.agents/scripts/wave-tick.js +335 -0
  702. package/.agents/skills/core/analyze-execution/SKILL.md +98 -0
  703. package/.agents/skills/core/api-and-interface-design/SKILL.md +327 -0
  704. package/.agents/skills/core/baseline-refresh/SKILL.md +181 -0
  705. package/.agents/skills/core/browser-testing-with-devtools/SKILL.md +352 -0
  706. package/.agents/skills/core/ci-cd-and-automation/SKILL.md +274 -0
  707. package/.agents/skills/core/ci-cd-and-automation/examples.md +211 -0
  708. package/.agents/skills/core/code-review-and-quality/SKILL.md +421 -0
  709. package/.agents/skills/core/code-simplification/SKILL.md +389 -0
  710. package/.agents/skills/core/context-engineering/SKILL.md +309 -0
  711. package/.agents/skills/core/context-engineering/examples.md +58 -0
  712. package/.agents/skills/core/debugging-and-error-recovery/SKILL.md +338 -0
  713. package/.agents/skills/core/deprecation-and-migration/SKILL.md +250 -0
  714. package/.agents/skills/core/diagnose-friction/SKILL.md +79 -0
  715. package/.agents/skills/core/documentation-and-adrs/SKILL.md +323 -0
  716. package/.agents/skills/core/epic-plan-consolidate/SKILL.md +145 -0
  717. package/.agents/skills/core/epic-plan-decompose-author/SKILL.md +425 -0
  718. package/.agents/skills/core/epic-plan-spec-author/SKILL.md +393 -0
  719. package/.agents/skills/core/frontend-ui-engineering/SKILL.md +357 -0
  720. package/.agents/skills/core/git-workflow-and-versioning/SKILL.md +352 -0
  721. package/.agents/skills/core/hydrate-context/SKILL.md +118 -0
  722. package/.agents/skills/core/idea-refinement/SKILL.md +317 -0
  723. package/.agents/skills/core/idea-refinement/examples.md +437 -0
  724. package/.agents/skills/core/idea-refinement/frameworks.md +135 -0
  725. package/.agents/skills/core/idea-refinement/refinement-criteria.md +155 -0
  726. package/.agents/skills/core/idea-refinement/scripts/idea-refine.sh +15 -0
  727. package/.agents/skills/core/incremental-implementation/SKILL.md +271 -0
  728. package/.agents/skills/core/introducing-a-baseline-gate/SKILL.md +213 -0
  729. package/.agents/skills/core/knowledge-transfer/SKILL.md +175 -0
  730. package/.agents/skills/core/mutation-survivor-remediation/SKILL.md +117 -0
  731. package/.agents/skills/core/performance-optimization/SKILL.md +314 -0
  732. package/.agents/skills/core/planning-and-task-breakdown/SKILL.md +277 -0
  733. package/.agents/skills/core/property-based-testing/SKILL.md +148 -0
  734. package/.agents/skills/core/qa-coverage-mapping/SKILL.md +105 -0
  735. package/.agents/skills/core/refactoring-discipline/SKILL.md +111 -0
  736. package/.agents/skills/core/scope-triage/SKILL.md +127 -0
  737. package/.agents/skills/core/security-and-hardening/SKILL.md +400 -0
  738. package/.agents/skills/core/shipping-and-launch/SKILL.md +328 -0
  739. package/.agents/skills/core/spec-driven-development/SKILL.md +252 -0
  740. package/.agents/skills/core/test-driven-development/SKILL.md +475 -0
  741. package/.agents/skills/core/using-agent-skills/SKILL.md +232 -0
  742. package/.agents/skills/skills.index.json +596 -0
  743. package/.agents/skills/stack/architecture/monorepo-path-strategist/SKILL.md +31 -0
  744. package/.agents/skills/stack/architecture/structured-output-zod/SKILL.md +51 -0
  745. package/.agents/skills/stack/architecture/subagent-orchestration/SKILL.md +48 -0
  746. package/.agents/skills/stack/backend/cloudflare-hono-architect/SKILL.md +31 -0
  747. package/.agents/skills/stack/backend/cloudflare-hono-architect/examples/route-template.ts +33 -0
  748. package/.agents/skills/stack/backend/cloudflare-queue-manager/SKILL.md +31 -0
  749. package/.agents/skills/stack/backend/cloudflare-workers/SKILL.md +51 -0
  750. package/.agents/skills/stack/backend/highlevel-crm/SKILL.md +54 -0
  751. package/.agents/skills/stack/backend/sqlite-drizzle-expert/SKILL.md +29 -0
  752. package/.agents/skills/stack/backend/sqlite-drizzle-expert/examples/schema-template.ts +30 -0
  753. package/.agents/skills/stack/backend/stripe-integration/SKILL.md +57 -0
  754. package/.agents/skills/stack/backend/stripe-integration/scripts/listen-stripe.sh +9 -0
  755. package/.agents/skills/stack/backend/turso-sqlite/SKILL.md +48 -0
  756. package/.agents/skills/stack/frontend/astro/SKILL.md +62 -0
  757. package/.agents/skills/stack/frontend/astro-react-island-strategist/SKILL.md +30 -0
  758. package/.agents/skills/stack/frontend/expo-react-native-developer/SKILL.md +29 -0
  759. package/.agents/skills/stack/frontend/google-analytics-v4/SKILL.md +50 -0
  760. package/.agents/skills/stack/frontend/tailwind-v4/SKILL.md +58 -0
  761. package/.agents/skills/stack/frontend/ui-accessibility-engineer/SKILL.md +34 -0
  762. package/.agents/skills/stack/qa/audit-accessibility/SKILL.md +51 -0
  763. package/.agents/skills/stack/qa/gherkin-authoring/SKILL.md +257 -0
  764. package/.agents/skills/stack/qa/gherkin-authoring/examples/invoice-issue.feature +41 -0
  765. package/.agents/skills/stack/qa/lighthouse-baseline/SKILL.md +199 -0
  766. package/.agents/skills/stack/qa/playwright/SKILL.md +50 -0
  767. package/.agents/skills/stack/qa/playwright-bdd/SKILL.md +188 -0
  768. package/.agents/skills/stack/qa/qa-explore-driving/SKILL.md +142 -0
  769. package/.agents/skills/stack/qa/qa-harness/SKILL.md +220 -0
  770. package/.agents/skills/stack/qa/vitest/SKILL.md +51 -0
  771. package/.agents/skills/stack/security/backend-security-patterns/SKILL.md +68 -0
  772. package/.agents/starter-agentrc.json +22 -0
  773. package/.agents/templates/agent-protocol.md +72 -0
  774. package/.agents/templates/docs/architecture.md +30 -0
  775. package/.agents/templates/docs/decisions.md +24 -0
  776. package/.agents/templates/epic-from-idea.md +21 -0
  777. package/.agents/templates/single-story-body.md +17 -0
  778. package/.agents/workflows/agents-update.md +415 -0
  779. package/.agents/workflows/audit-architecture.md +312 -0
  780. package/.agents/workflows/audit-clean-code.md +179 -0
  781. package/.agents/workflows/audit-dependencies.md +91 -0
  782. package/.agents/workflows/audit-devops.md +110 -0
  783. package/.agents/workflows/audit-lighthouse.md +260 -0
  784. package/.agents/workflows/audit-performance.md +161 -0
  785. package/.agents/workflows/audit-privacy.md +104 -0
  786. package/.agents/workflows/audit-quality.md +191 -0
  787. package/.agents/workflows/audit-security.md +156 -0
  788. package/.agents/workflows/audit-seo.md +118 -0
  789. package/.agents/workflows/audit-sre.md +139 -0
  790. package/.agents/workflows/audit-to-stories.md +257 -0
  791. package/.agents/workflows/audit-ux-ui.md +102 -0
  792. package/.agents/workflows/epic-deliver.md +864 -0
  793. package/.agents/workflows/epic-plan.md +998 -0
  794. package/.agents/workflows/explain.md +118 -0
  795. package/.agents/workflows/git-cleanup.md +250 -0
  796. package/.agents/workflows/git-commit-all.md +15 -0
  797. package/.agents/workflows/git-merge-pr.md +377 -0
  798. package/.agents/workflows/git-pr-all.md +278 -0
  799. package/.agents/workflows/git-push.md +60 -0
  800. package/.agents/workflows/helpers/_merge-conflict-template.md +54 -0
  801. package/.agents/workflows/helpers/acceptance-self-eval.md +74 -0
  802. package/.agents/workflows/helpers/agents-sync-config.md +129 -0
  803. package/.agents/workflows/helpers/code-quality-guardrails.md +101 -0
  804. package/.agents/workflows/helpers/code-review.md +370 -0
  805. package/.agents/workflows/helpers/diagnose.md +117 -0
  806. package/.agents/workflows/helpers/epic-audit.md +295 -0
  807. package/.agents/workflows/helpers/epic-deliver-story.md +370 -0
  808. package/.agents/workflows/helpers/epic-plan-decompose.md +199 -0
  809. package/.agents/workflows/helpers/epic-plan-spec.md +184 -0
  810. package/.agents/workflows/helpers/epic-testing.md +125 -0
  811. package/.agents/workflows/helpers/parallel-tooling.md +88 -0
  812. package/.agents/workflows/helpers/signals.md +112 -0
  813. package/.agents/workflows/helpers/single-story-deliver.md +636 -0
  814. package/.agents/workflows/helpers/worktree-lifecycle.md +317 -0
  815. package/.agents/workflows/onboard.md +207 -0
  816. package/.agents/workflows/qa-assist.md +293 -0
  817. package/.agents/workflows/qa-explore.md +350 -0
  818. package/.agents/workflows/qa-run-harness.md +288 -0
  819. package/.agents/workflows/story-deliver.md +327 -0
  820. package/.agents/workflows/story-plan.md +233 -0
  821. package/LICENSE +21 -0
  822. package/README.md +193 -0
  823. package/bin/mandrel.js +56 -0
  824. package/bin/postinstall.js +195 -0
  825. package/lib/cli/__tests__/migrate.test.js +268 -0
  826. package/lib/cli/__tests__/sync-local-zone.test.js +247 -0
  827. package/lib/cli/__tests__/sync.test.js +372 -0
  828. package/lib/cli/__tests__/update-major.test.js +217 -0
  829. package/lib/cli/__tests__/update.test.js +696 -0
  830. package/lib/cli/__tests__/version-check.test.js +398 -0
  831. package/lib/cli/doctor.js +124 -0
  832. package/lib/cli/explain.js +107 -0
  833. package/lib/cli/migrate.js +260 -0
  834. package/lib/cli/registry.js +830 -0
  835. package/lib/cli/sync-commands.js +50 -0
  836. package/lib/cli/sync.js +200 -0
  837. package/lib/cli/uninstall.js +795 -0
  838. package/lib/cli/update.js +854 -0
  839. package/lib/cli/version-check.js +206 -0
  840. package/lib/migrations/README.md +69 -0
  841. package/lib/migrations/__tests__/index.test.js +216 -0
  842. package/lib/migrations/index.js +164 -0
  843. package/package.json +105 -0
@@ -0,0 +1,238 @@
1
+ # CHANGELOG Style Contract
2
+
3
+ This rule governs the shape of per-release entries in the project CHANGELOG
4
+ (typically `docs/CHANGELOG.md` or `CHANGELOG.md`). It applies whenever a
5
+ release entry is authored or edited — most commonly inside Story #N's
6
+ docs sweep before `/epic-deliver` opens the release PR.
7
+
8
+ The contract is **guidance-tier** in v1: no automated gate fails a close when
9
+ an entry drifts off-template. It still binds every author.
10
+
11
+ ## Goal
12
+
13
+ A reader scanning release notes should identify what ships in a release in
14
+ under 30 seconds. Breaking changes, config-shape changes, and CLI renames
15
+ must be impossible to miss. Internal refactor detail belongs in commit
16
+ messages and PR descriptions — not here.
17
+
18
+ ## Per-Release Entry Shape
19
+
20
+ Every entry starts with a version header line already produced by the
21
+ release tooling:
22
+
23
+ ```markdown
24
+ ## [X.Y.Z] - YYYY-MM-DD
25
+ ```
26
+
27
+ Immediately below, the entry MUST have:
28
+
29
+ 1. **A short section header** naming the theme of the release — one line,
30
+ Sentence case, no trailing punctuation.
31
+
32
+ ```markdown
33
+ ### Epic-runner throughput & caching pass
34
+ ```
35
+
36
+ 2. **A 1–3 sentence theme paragraph** that tells the reader, in plain
37
+ English, what the release is about and why it matters. No bullets, no
38
+ sub-headers, no code fences.
39
+
40
+ 3. **Bullets of user-visible changes**, grouped by natural topic if the
41
+ release spans more than one theme. Each bullet leads with a bold phrase
42
+ naming the change, followed by a one- or two-sentence explanation.
43
+
44
+ ```markdown
45
+ ## [5.21.0] - 2026-04-24
46
+
47
+ ### Epic-runner throughput & caching pass
48
+
49
+ Performance and observability pass across the epic-runner hot paths — wave
50
+ gating, commit assertion, progress reporting, and label polling. Caching
51
+ and bounded concurrency throughout; new per-phase timing surface.
52
+
53
+ - **Bounded-concurrency parallelism.** Wave gating, commit assertion, and
54
+ progress reporting now fan out in parallel with a configurable cap.
55
+ - **Per-phase timing surface.** Story close posts a structured comment
56
+ with per-phase timings; the Epic progress comment aggregates median
57
+ and p95 across closed stories.
58
+ ```
59
+
60
+ ## Bullets: What Counts as "User-Visible"
61
+
62
+ Include:
63
+
64
+ - New CLI commands, flags, or scripts the operator invokes.
65
+ - New or renamed labels, ticket shapes, or workflow phases the operator
66
+ touches.
67
+ - New or renamed configuration keys, with the old → new mapping if any.
68
+ - New behavioural guarantees (e.g., "retries on transient errors").
69
+ - Bug fixes the operator would otherwise trip over.
70
+ - Performance changes with a user-observable magnitude.
71
+
72
+ Exclude:
73
+
74
+ - Internal refactors with no behavioural delta.
75
+ - Test additions, coverage bumps, lint cleanups.
76
+ - Module renames or file moves invisible to operators.
77
+ - Per-phase implementation details ("now uses a BFS walker").
78
+
79
+ ## Banned Content
80
+
81
+ The following MUST NOT appear in a release entry:
82
+
83
+ - **Per-ticket citations.** No `(Epic #553)`, `(resolves #612)`,
84
+ `(Story #645)` in bullet text. The theme paragraph may reference the
85
+ Epic once when the release is scoped to one Epic — that is the only
86
+ allowed citation, and only there.
87
+ - **Internal file paths** (`lib/orchestration/epic-runner/commit-assertion.js`,
88
+ `.agents/scripts/story-init.js`). Callers care what changed, not
89
+ where it lives.
90
+ - **Internal function, class, or method names** (`finalizeMerge`,
91
+ `WorkspaceProvisioner.verify`, `cascadeCompletion`). Name the behaviour,
92
+ not the symbol — unless the symbol is part of the public API.
93
+ - **Test counts** (`47 new tests`, `95% coverage`). Tests are a means, not
94
+ a ship artefact.
95
+ - **Module-sizing stats** (`shrinks epic-runner from 840 to 420 LOC`).
96
+ - **Implementation mechanics** (`BFS walker`, `Promise.all over parents`,
97
+ `exponential backoff with 3 attempts, 500ms base`) unless the mechanism
98
+ is part of a new public contract.
99
+
100
+ ## Mandatory Prominence
101
+
102
+ The following categories MUST be called out visibly — typically in **bold**
103
+ at the start of a bullet, or in a short dedicated section above the
104
+ bullet list:
105
+
106
+ - **Breaking changes.** A bullet leading with `**Breaking:**` or a
107
+ `### Breaking Changes` sub-section. Include the migration path.
108
+ - **Config-shape changes.** Moved, removed, renamed, or newly-required
109
+ config keys. Old key → new key, or removal notice with remediation.
110
+ - **CLI renames.** Old command → new command, including whether the old
111
+ name remains as a deprecation alias and for how long.
112
+ - **Schema shape changes** on structured comments, manifest files, or
113
+ public API payloads. Readers parsing these surfaces must be told.
114
+
115
+ If a release ships any of the above, they belong at the top of the bullet
116
+ list (or in a dedicated sub-section), not buried mid-list.
117
+
118
+ ## Line-Count Guidance
119
+
120
+ Soft ceilings, not hard fails:
121
+
122
+ - **Non-major release** (patch or minor): **≤60 lines**, including
123
+ header, theme paragraph, blank lines, and bullets.
124
+ - **Major release**: **≤150 lines**. Major releases span larger surface
125
+ and warrant more prominence.
126
+
127
+ If an entry exceeds the ceiling, prefer splitting a genuinely multi-theme
128
+ release into grouped sub-sections over padding the bullet list. Before
129
+ accepting a long entry, ask: which bullets are user-visible, and which
130
+ are internal detail that migrated in from the Epic body?
131
+
132
+ ## Worked Example — Before/After
133
+
134
+ The "before" reflects the style that drove the Epic #553 retro action item:
135
+ multi-section entries where each bullet leaked internal function names,
136
+ file paths, and implementation mechanics. The "after" applies the contract
137
+ above.
138
+
139
+ ### Before (off-contract, ~48 lines)
140
+
141
+ ```markdown
142
+ ## [5.8.7] - 2026-04-15
143
+
144
+ ### Robust story→epic merge at story close
145
+
146
+ Parallel wave execution kept producing conflicts — Stories branched
147
+ early in a wave landed after peers had merged. `finalizeMerge` now:
148
+
149
+ 1. **Pre-merge rebase in the story worktree** onto
150
+ `origin/<epicBranch>`, shrinking the conflict surface to the
151
+ Story's real delta. Failed rebase is aborted and merge still
152
+ proceeds.
153
+ 2. **Conflict triage via `mergeFeatureBranch`** — same threshold-based
154
+ triage used at integration time (major ≥3 files or ≥20 markers =
155
+ abort; minor = auto-resolve by accepting Story's version with audit
156
+ log).
157
+
158
+ ### Per-worktree node_modules collapsed into shared store
159
+
160
+ Per-worktree `npm install` duplicated dependencies across every story
161
+ tree and blew out disk on parallel waves. `ensure()` now links each
162
+ worktree's `node_modules` to a primed donor tree (junction on Windows)
163
+ and `reap()` removes the link before `git worktree remove`.
164
+ Auto-detected: if the configured strategy is `symlink`, the link
165
+ applies.
166
+
167
+ ### Deliver tail auto-invokes pre-merge gates
168
+
169
+ `/epic-deliver` auto-invokes the code-review module (Phase 4) and
170
+ the retro runner (Phase 5) inline instead of halting to ask the
171
+ operator to run them separately. `--skip-code-review` available as
172
+ an override.
173
+
174
+ ### Epic Health ticket closed alongside PRD/Tech Spec
175
+
176
+ Step 8's closure sweep now matches any ticket carrying `type::health`
177
+ or a title starting with `📉 Epic Health:`, in addition to
178
+ `context::prd` / `context::tech-spec`.
179
+
180
+ ### Stale-lock sweep for shared `.git/` dir
181
+
182
+ `WorktreeManager.sweepStaleLocks({ maxAgeMs = 30_000 })` removes
183
+ well-known lock files (`index.lock`, `HEAD.lock`, `packed-refs.lock`,
184
+ `config.lock`, `shallow.lock`) whose mtime exceeds the threshold.
185
+ Fresh locks belonging to in-flight ops are skipped. Runs at
186
+ `/epic-deliver` start, before worktree GC.
187
+ ```
188
+
189
+ Contract violations: five separate `###` sub-sections where one theme
190
+ would do; internal function names (`finalizeMerge`, `mergeFeatureBranch`,
191
+ `ensure()`, `reap()`, `WorktreeManager.sweepStaleLocks`); implementation
192
+ mechanics (`BFS walker` equivalent, exact argument shapes, internal step
193
+ numbering like "Step 1.4", "Step 8"); lock-file name list leaks
194
+ implementation detail that operators cannot act on.
195
+
196
+ ### After (on-contract, ~18 lines)
197
+
198
+ ```markdown
199
+ ## [5.8.7] - 2026-04-15
200
+
201
+ ### Parallel-wave merge robustness
202
+
203
+ Parallel story waves kept tripping over each other at integration time.
204
+ This release reduces the conflict surface at story close and stabilises
205
+ worktree cleanup.
206
+
207
+ - **Pre-merge rebase at story close** shrinks the conflict window to
208
+ each story's real delta; conflicts above the triage threshold abort
209
+ and surface to the operator.
210
+ - **Shared-store worktrees.** Per-story worktrees link a shared
211
+ `node_modules` store, so parallel waves no longer duplicate installs
212
+ or leave residue that blocks reap.
213
+ - **`/epic-deliver` auto-invokes pre-merge gates** (code review, retro)
214
+ inline. `--skip-code-review` is available as an override.
215
+ - **Closure sweep covers Epic Health tickets** in addition to PRD and
216
+ Tech Spec tickets.
217
+ - **Stale-lock sweep** on the shared `.git/` directory runs at
218
+ `/epic-deliver` start, clearing lock files left behind by interrupted
219
+ operations.
220
+ ```
221
+
222
+ What changed: one theme section instead of five; the paragraph gives the
223
+ "why" in two sentences; each bullet leads with the user-visible behaviour
224
+ and drops internal symbols, file paths, and step numbers; the override
225
+ flag (`--skip-code-review`) is kept because it is part of the public CLI
226
+ surface; the lock-file list is dropped because operators do not act on
227
+ individual lock names.
228
+
229
+ ## When to Deviate
230
+
231
+ - **Major releases** may warrant multiple `###` sub-sections under a
232
+ single version header when the release genuinely spans multiple themes.
233
+ Keep each sub-section on-contract individually.
234
+ - **Security fixes** may include CVE-style detail and remediation steps
235
+ beyond normal bullet shape — those callouts are always on-contract.
236
+ - **When in doubt**, cut more aggressively. A reader can always follow
237
+ the Epic link for detail; they cannot un-read bullets that told them
238
+ nothing.
@@ -0,0 +1,146 @@
1
+ # Gherkin Authoring Standards
2
+
3
+ Rules for authoring `.feature` files so scenarios remain business-readable,
4
+ reusable across projects, and free of implementation leakage. Applies to every
5
+ Gherkin file (`*.feature`) in any project that consumes this framework. The
6
+ companion stack skill is
7
+ [`stack/qa/gherkin-authoring`](../skills/stack/qa/gherkin-authoring/SKILL.md);
8
+ test-layer responsibilities live in
9
+ [`testing-standards.md`](./testing-standards.md).
10
+
11
+ ## Tag Taxonomy
12
+
13
+ Tags are the only supported mechanism for selecting, filtering, and routing
14
+ scenarios. Use the canonical set below; do not invent ad-hoc tags.
15
+
16
+ - `@smoke` — minimal critical-path scenarios that MUST pass on every PR.
17
+ - `@risk-high` — scenarios covering flows flagged `risk::high` on their
18
+ originating ticket. Run on every release candidate.
19
+ - `@platform-web` — scenarios that only make sense on the web client.
20
+ - `@platform-mobile` — scenarios that only make sense on the mobile client.
21
+ - `@domain-<slug>` — domain scope (e.g. `@domain-billing`, `@domain-auth`).
22
+ The slug is project-defined; one tag per scenario.
23
+ - `@flaky` — operational quarantine tag. Scenarios carrying this tag are
24
+ excluded from the gating suite and run in a dedicated non-blocking job
25
+ until stabilized. Treat `@flaky` as a debt marker, not a permanent label.
26
+
27
+ Rules:
28
+
29
+ - Every `Scenario` or `Scenario Outline` MUST carry exactly one `@domain-*`
30
+ tag.
31
+ - Platform tags are mutually exclusive. A scenario that applies to both
32
+ platforms carries neither.
33
+ - `@smoke` and `@risk-high` are orthogonal to domain/platform and may be
34
+ combined freely.
35
+ - Tag at the `Feature:` level when every scenario shares the tag; tag at the
36
+ scenario level otherwise. Do not duplicate feature-level tags onto
37
+ scenarios.
38
+ - Tags not in this taxonomy MUST be proposed in a PR that updates this rule
39
+ before use.
40
+
41
+ ## Forbidden Patterns
42
+
43
+ `.feature` files describe business intent. The following MUST NOT appear in
44
+ any `Feature`, `Background`, `Scenario`, `Scenario Outline`, or `Examples`
45
+ block. They belong in step definitions or contract-layer tests instead.
46
+
47
+ - **Raw SQL or ORM calls.** `SELECT ... FROM ...`, `INSERT INTO ...`,
48
+ `prisma.user.findMany(...)`, Knex builders, etc. Database access is a step
49
+ definition concern.
50
+ - **HTTP status codes.** `200`, `401`, `expect status 404`. Status-code
51
+ assertions are contract-layer tests; scenarios assert user-visible
52
+ outcomes.
53
+ - **DOM selectors.** CSS selectors, XPath, `#id`, `.class`, `[data-testid=...]`,
54
+ element tag names. Selectors live inside step definitions.
55
+ - **Raw URLs or route paths.** `/api/v1/users/123`, `https://...`. Reference
56
+ the business resource (e.g. "the user's profile"), not the transport path.
57
+ - **JSON/request/response payloads.** Shape and field assertions belong in
58
+ contract-layer tests.
59
+ - **Framework or tooling names.** No `Playwright`, `Cucumber`, `Jest`,
60
+ `Prisma`, `React` in scenario text.
61
+ - **Timings or waits.** `wait 2 seconds`, `sleep`, `retry 3 times`. Use
62
+ business-level readiness ("until the invoice is issued"); step definitions
63
+ own timing.
64
+
65
+ ## Scenario Outline Conventions
66
+
67
+ Use `Scenario Outline` only when the same behavior is exercised across a
68
+ bounded matrix (roles, permissions, plan tiers, locales). For divergent
69
+ behavior, write separate `Scenario` blocks.
70
+
71
+ - Placeholders use `<angle-bracket-names>` that match `Examples` column
72
+ headers exactly.
73
+ - Each `Examples` block MUST include a header row whose names are kebab-case
74
+ and self-describing (`<user-role>`, not `<x>`).
75
+ - For role/permission matrices, dedicate one column to the role and one
76
+ column per observable outcome. Do not encode multiple outcomes in a single
77
+ free-text column.
78
+ - Split `Examples` tables by tag when rows need different tags (e.g.
79
+ `@risk-high` for admin rows). Each `Examples` block may carry its own
80
+ tags.
81
+ - Keep `Examples` tables under ~12 rows. Larger matrices indicate the
82
+ scenario is really several scenarios and should be split.
83
+
84
+ Example skeleton:
85
+
86
+ ```gherkin
87
+ @domain-billing
88
+ Scenario Outline: <user-role> access to invoice exports
89
+ Given a signed-in <user-role>
90
+ When they request an invoice export
91
+ Then the export is <export-outcome>
92
+
93
+ Examples:
94
+ | user-role | export-outcome |
95
+ | account-owner | delivered |
96
+ | billing-admin | delivered |
97
+ | viewer | denied |
98
+ ```
99
+
100
+ ## Selector & `data-testid` Discipline
101
+
102
+ Steps reference **business intent**; selectors are a step-definition
103
+ implementation detail.
104
+
105
+ - Scenario text names the user-visible concept: "the submit button", "the
106
+ invoices table", "the error banner".
107
+ - Step definitions resolve concepts to selectors. Prefer `data-testid`
108
+ attributes (e.g. `data-testid="submit-invoice"`); fall back to role-based
109
+ queries (`getByRole`) only when `data-testid` is unavailable.
110
+ - `data-testid` values MUST NOT appear in `.feature` files. If a step needs
111
+ to distinguish between two similar elements, encode the distinction in
112
+ business language ("the primary submit button"), then let the step
113
+ definition map that to the `data-testid`.
114
+ - When a new UI element needs a stable hook, add the `data-testid` in the
115
+ component and reference the business concept in the scenario in the same
116
+ PR.
117
+
118
+ ## Step Reuse — Grep Before You Write
119
+
120
+ Before authoring a new step, search the existing step-definition library for
121
+ an equivalent phrase. New steps are a cost: they fragment the vocabulary and
122
+ multiply step-definition maintenance.
123
+
124
+ Workflow:
125
+
126
+ 1. Identify the verb phrase you want to write (e.g. "the user signs in as").
127
+ 2. Grep the step-definition directory for the verb stem:
128
+
129
+ ```bash
130
+ rg -n "signs? in" tests/steps
131
+ ```
132
+
133
+ 3. If a matching step exists, reuse it verbatim — adjust your scenario
134
+ phrasing to fit the existing step, not the reverse.
135
+ 4. If a near-match exists, extend the existing step (add a parameter, widen
136
+ the regex) rather than forking a new one. Update every call site in the
137
+ same PR.
138
+ 5. Only when no reasonable match exists, add a new step definition.
139
+ Co-locate it with related steps and follow the library's naming
140
+ convention.
141
+ 6. Never copy-paste a step implementation to support a paraphrased scenario.
142
+ Rephrase the scenario instead.
143
+
144
+ Deprecations: when a step is superseded, mark the old definition deprecated
145
+ in code and migrate all call sites in the same PR. Do not leave two
146
+ near-identical steps live.
@@ -0,0 +1,146 @@
1
+ # Git & Version Control Conventions
2
+
3
+ This rule applies globally to all repository changes to maintain a clean git
4
+ history.
5
+
6
+ ## Canonical Branching (v5 Orchestration)
7
+
8
+ ### Epic Base Branch
9
+
10
+ Each Epic operates on a dedicated **Epic base branch** named `epic/[EPIC_ID]`
11
+ (e.g., `epic/98`). This branch is created from the project's base branch
12
+ (`main` by default) and serves as the integration target for all Stories
13
+ within that Epic.
14
+
15
+ ### Story-Level Branching
16
+
17
+ All tasks within a Story MUST be committed to a shared **Story branch**:
18
+ `story-<storyId>` (e.g., `story-104`). The runtime owns Story branch
19
+ creation via `story-init.js`; agents commit on the active Story branch only.
20
+
21
+ > **Commit subjects.** Under the 3-tier hierarchy
22
+ > (Epic → Feature → Story), Stories have no child tickets. Commits
23
+ > land on `story-<storyId>` directly from the agent and the
24
+ > Conventional Commit subject references the parent Story via
25
+ > `(refs #<storyId>)`. See
26
+ > [`.agents/instructions.md` § 5.D](../instructions.md) for the
27
+ > full hierarchy contract.
28
+
29
+ ## Conventional Commits
30
+
31
+ - MUST adhere to Conventional Commits format:
32
+ `<type>(<optional scope>): <description>`
33
+ - Types allowed: `feat:`, `fix:`, `perf:`, `refactor:`, `revert:`, `docs:`,
34
+ `style:`, `chore:`, `test:`, `build:`, `ci:`. This list mirrors the
35
+ `changelog-sections` in `release-please-config.json`; keep the two in
36
+ sync when adding a type.
37
+ - Description must be in the imperative mood (e.g., "add feature", not
38
+ "adds" or "added").
39
+ - **Local enforcement**: the `commit-msg` Husky hook runs `commitlint`
40
+ against every local commit (`.husky/commit-msg` →
41
+ `commitlint --edit "$1"`, config in `commitlint.config.js`). A
42
+ non-conventional subject fails the hook and no commit is created. Do not
43
+ bypass with `--no-verify`. The hook does **not** run on squash-merge
44
+ titles edited in the GitHub UI; author the PR title in conventional form
45
+ so the squash commit on `main` parses cleanly for release-please.
46
+
47
+ ## Contract Cutovers — No Shim Layer
48
+
49
+ Mandrel ships as the `mandrel` npm package, whose consumers pin an
50
+ exact lockfile version; they opt into breaks at upgrade time. Operator policy
51
+ for any contract change (config shape, baseline shape, schema, lifecycle
52
+ payload, ticket label, dispatch artifact, public API of a script) is
53
+ therefore:
54
+
55
+ 1. **Hard cutovers only.** Contract changes ship as a single in-tree
56
+ migration of every producer and consumer. There is no parallel
57
+ old-shape support code, no read-side tolerance branch, and no
58
+ feature flag that toggles between the two shapes.
59
+ 2. **The PR diff IS the migration.** A consumer upgrading to a release
60
+ with the change adopts the new shape by upgrading the
61
+ `mandrel` package (`mandrel update`). The PR that lands on
62
+ `main` already moved every internal call site; consumers move on the
63
+ same beat by upgrading.
64
+ 3. **No deprecation ledger, no version-windowed sunsets.** The framework
65
+ does not track "to be removed in vX.Y" entries or run two shapes side
66
+ by side for a release window. If a shape changes, the old shape is
67
+ deleted in the same PR.
68
+
69
+ The codifying decision is **Epic #2646** (the "Hard-Cutover Cleanup Epic"),
70
+ which deleted the existing compatibility shim layer across
71
+ `config-resolver.js`, `lib/config/*.js`, `lib/baselines/`,
72
+ `wave-session.js`, `IExecutionAdapter` / `ManualDispatchAdapter`, lifecycle
73
+ emit shims, and duplicate progress/comment writers in one pass. The
74
+ per-finding closing references (audit Findings #10, #11, #13, #17) live in
75
+ the merged PRs and the Epic #2646 history; the standing forward-looking
76
+ audit lives at [`docs/roadmap.md`](../../docs/roadmap.md) (Part 1 — Model-Evolution Audit).
77
+
78
+ Practical guidance when authoring a contract change:
79
+
80
+ - If you are tempted to add a "legacy shape" branch in a parser or
81
+ resolver, **don't** — update every call site instead, and delete the
82
+ old shape in the same PR.
83
+ - If you cannot land every call site in a single PR (e.g. a
84
+ cross-repository change), the contract change is too large for one
85
+ hard cutover. Split the contract itself, not the rollout.
86
+ - Schema versions remain useful as **identifiers** (so a future consumer
87
+ can detect "I cannot read this artifact"); they are **not** an
88
+ invitation to keep multiple readers alive in the same release.
89
+
90
+ ## Push Validation & Reliability
91
+
92
+ To prevent "silent" push failures (e.g., hidden by multi-command chains or
93
+ rejected by `pre-push` hooks):
94
+
95
+ 1. **Local Validation**: Run the project's configured validation commands
96
+ (`agentSettings.commands.validate` and `agentSettings.commands.test` in
97
+ `.agentrc.json`, or the equivalent format-check command) locally
98
+ _before_ attempting a `git push`.
99
+ 2. **Verify Push Output**: Do NOT assume a push succeeded unless the output
100
+ explicitly confirms the remote ref was updated (`[new branch]`,
101
+ `[up to date]`, or `... -> ...`).
102
+ 3. **Handle Rejections**: If a push is rejected by a `pre-push` hook, fix
103
+ the underlying issue (usually formatting or linting) and create a NEW
104
+ follow-up commit. Do **not** amend the rejected commit — amending makes
105
+ diffs harder to review and can lose work if the original commit
106
+ contained more than the linting fix.
107
+ 4. **Never bypass hooks**: Do not use `--no-verify`, `--no-gpg-sign`, or
108
+ other hook-skipping flags unless the operator explicitly authorizes it.
109
+ If a hook fails, investigate the underlying cause.
110
+
111
+ ## Meta Labels (Retrospective Signal Routing)
112
+
113
+ Two `meta::*` labels route retrospective signals into durable substrates so
114
+ the `/epic-plan` Phase 0 fetcher (see
115
+ [`prior-feedback-fetcher.js`](../scripts/lib/feedback-loop/prior-feedback-fetcher.js))
116
+ can surface open feedback issues to the planner. Both labels live in
117
+ [`label-constants.js`](../scripts/lib/label-constants.js) under the
118
+ `META_LABELS` export — reference them by symbol from scripts rather than
119
+ hard-coding the string.
120
+
121
+ ### `meta::framework-gap`
122
+
123
+ Apply this label to a GitHub issue that surfaces a defect, missing
124
+ capability, or weak ergonomic in the **framework itself** (anything under
125
+ `.agents/` or the dispatcher engine). Typical sources: a retrospective that
126
+ identifies a workflow that does not yet exist, a hook that should fire but
127
+ does not, or a script-level usability problem that should be solved
128
+ upstream rather than worked around in a consumer project.
129
+
130
+ ### `meta::consumer-improvement`
131
+
132
+ Apply this label to a GitHub issue that surfaces an improvement that lives
133
+ in a **consumer project** (workflow tweaks, ergonomic asks, doc polish, or
134
+ project-local automation). The work is scoped to the consumer's
135
+ `.agents/`-driven layer or the consumer's own codebase, not to upstream
136
+ framework changes. Issues that span both axes should carry both labels —
137
+ `fetchPriorFeedback` dedupes by issue number so a dual-labeled issue
138
+ appears exactly once in the planner context.
139
+
140
+ ## Pull Requests
141
+
142
+ - Never commit `.env` or hardcoded secrets.
143
+ - Always include a short description of _why_ the change was made in the PR
144
+ body.
145
+ - **Reference Issues**: Use "Resolves #109" or "Closes #114" to link
146
+ tickets.
@@ -0,0 +1,35 @@
1
+ # Orchestration Error Handling
2
+
3
+ This rule applies to contributors writing or modifying orchestration scripts
4
+ under `.agents/scripts/*.js` and the helper modules under
5
+ `.agents/scripts/lib/orchestration/**`. Most agent task work does not touch
6
+ these files; consult this rule only when implementing or refactoring
7
+ orchestrators themselves.
8
+
9
+ ## Throw, Never Fatal
10
+
11
+ Orchestration scripts MUST surface unrecoverable failures with
12
+ `throw new Error(<message>)` rather than `Logger.fatal(<message>)`.
13
+
14
+ ### Why
15
+
16
+ The `runAsCli` boundary catches the throw and maps it to `process.exit(1)`,
17
+ preserving the operator-visible message verbatim while staying robust under
18
+ a mocked `process.exit` (in tests or when the harness stubs it). By contrast,
19
+ `Logger.fatal` falls through silently when `process.exit` is stubbed, which
20
+ lets execution continue past the intended hard-stop and masks failures.
21
+
22
+ ### Precedent
23
+
24
+ Story #959 converted every `Logger.fatal` call inside the story-close
25
+ orchestrator surface to `throw` and established this rule for future
26
+ orchestration work.
27
+
28
+ ### Where it applies
29
+
30
+ - `.agents/scripts/<orchestrator>.js` (top-level CLI entry points)
31
+ - `.agents/scripts/lib/orchestration/**/*.js` (helper modules)
32
+
33
+ Non-orchestration scripts (one-shot utilities, audit reporters, doc
34
+ generators) may continue to use `Logger.fatal` where the lifetime guarantees
35
+ are simpler.
@@ -0,0 +1,92 @@
1
+ # Application Security Baseline
2
+
3
+ Non-negotiable security MUSTs that apply to every piece of code generated. This
4
+ rule is the SSOT for security taxonomy and constraints; the companion skill
5
+ [`core/security-and-hardening`](../skills/core/security-and-hardening/SKILL.md)
6
+ shows **how** to apply these MUSTs with code patterns, examples, and process
7
+ guidance. Conflicts resolve per the central ordering in
8
+ [`.agents/instructions.md` § 1.K](../instructions.md) — this rule sits above
9
+ the skill, and its security MUSTs are **inviolable**: no persona, skill, or
10
+ local override may relax them. The skill is updated to match.
11
+
12
+ ## Input Validation
13
+
14
+ - ALL input received from the client (body, query params, headers, path params)
15
+ MUST be validated at the edge using a strict schema (e.g., Zod). Validation
16
+ runs at the system boundary — never trust client-side validation as a
17
+ security control.
18
+ - Never trust client-provided IDs without verifying ownership recursively.
19
+ - File uploads MUST validate type (mimetype, optionally magic bytes) and size
20
+ before persisting or processing.
21
+
22
+ ## Authentication
23
+
24
+ - Passwords MUST be hashed with `bcrypt`, `scrypt`, or `argon2`. Salt rounds
25
+ for bcrypt MUST be ≥ 12. Plaintext password storage is forbidden.
26
+ - Session tokens MUST be stored in cookies that are `httpOnly`, `secure`, and
27
+ carry an explicit `sameSite` policy (`lax` or `strict`). Auth tokens MUST
28
+ NOT be placed in client-accessible storage (e.g., `localStorage`,
29
+ `sessionStorage`).
30
+ - Authentication endpoints MUST be rate-limited.
31
+
32
+ ## Authorization
33
+
34
+ - Every protected endpoint MUST check user permissions, not just authentication.
35
+ "Logged in" is not "allowed".
36
+ - Users MUST only be able to access or modify resources they own; ownership
37
+ checks MUST run server-side before any state change.
38
+ - Admin or elevated actions MUST verify the role server-side; never trust a
39
+ client-asserted role claim.
40
+
41
+ ## Output & Rendering
42
+
43
+ - Database queries MUST be parameterized. Never concatenate user input into
44
+ SQL, NoSQL filters, or shell commands.
45
+ - HTML output MUST be encoded via the framework's auto-escaping. If raw HTML
46
+ rendering is unavoidable, sanitize with a vetted library (e.g., DOMPurify)
47
+ first.
48
+ - `eval()`, `Function()`, and `innerHTML` (or framework equivalents like
49
+ `dangerouslySetInnerHTML`) MUST NOT receive user-provided data without
50
+ sanitization.
51
+ - API responses MUST exclude sensitive fields (password hashes, reset tokens,
52
+ internal IDs not intended for clients). Stack traces and internal error
53
+ details MUST NOT be exposed to users.
54
+
55
+ ## Data Leakage & Logging
56
+
57
+ - NEVER log Personal Identifiable Information (PII) such as emails, passwords,
58
+ full credit card numbers, session tokens, or phone numbers.
59
+ - Avoid logging complete objects directly; destructure out safe properties.
60
+
61
+ ## Transport & Headers
62
+
63
+ - All external communication MUST use HTTPS.
64
+ - Security headers MUST be configured: `Content-Security-Policy`,
65
+ `Strict-Transport-Security`, `X-Frame-Options`, `X-Content-Type-Options`.
66
+ - CORS MUST be restricted to a known origin allowlist. Wildcard (`*`) origins
67
+ are forbidden on endpoints that accept credentials.
68
+
69
+ ## Secrets Management
70
+
71
+ - Keys, passwords, and tokens MUST be pulled from environment variables.
72
+ Fallback or placeholder secrets MUST NOT be committed in code.
73
+ - `.env` files containing real secrets MUST be gitignored. Only `.env.example`
74
+ (placeholder values) is committed.
75
+
76
+ ## Dependency Hygiene
77
+
78
+ - `npm audit` (or the project equivalent) MUST run before every release.
79
+ Critical and high-severity vulnerabilities reachable in production code MUST
80
+ be remediated before shipping; deferred findings MUST be documented with a
81
+ review date.
82
+
83
+ ## Forbidden Practices
84
+
85
+ - Committing secrets to version control.
86
+ - Logging passwords, tokens, or full credit-card numbers.
87
+ - Trusting client-side validation as a security boundary.
88
+ - Disabling security headers for convenience.
89
+ - Using `eval()` or `innerHTML` with user-provided data.
90
+ - Storing auth tokens in client-accessible storage.
91
+ - Exposing stack traces or internal error details to users.
92
+ - Hardcoding fallback secrets ("default" API keys, debug bypasses) in source.