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,68 @@
1
+ ---
2
+ name: backend-security-patterns
3
+ description:
4
+ Combined backend protocols for authentication (Clerk JWT verification) and
5
+ PII-safe observability. Use when handling auth on the server, verifying
6
+ Clerk webhooks via `svix`, scoping metadata via `publicMetadata`/
7
+ `privateMetadata`, or sanitizing logs to keep emails, tokens, and request
8
+ bodies out of telemetry.
9
+ vendor: clerk
10
+ ---
11
+
12
+ # Skill: Backend Security Patterns
13
+
14
+ ## Policy Capsule
15
+
16
+ - Verify Clerk JWTs on the server or in middleware on every protected route; never trust client-asserted auth state.
17
+ - Protect sensitive routes with Clerk's middleware helper so unauthenticated requests are redirected before hitting application logic.
18
+ - Verify Clerk webhook signatures with the `svix` library before parsing payloads.
19
+ - Store user state in `publicMetadata` (client-readable) or `privateMetadata` (server-only); never invent a parallel user store.
20
+ - Never log raw request bodies, headers, or user objects that may contain PII (emails, DOB, IPs, Stripe tokens, passwords, JWTs).
21
+ - Log entities by opaque ID only — e.g. `{ event: 'user_created', userId: user.id }`.
22
+ - For Clerk-flow telemetry, log the Clerk user ID or session ID — never the email, name, or metadata payload.
23
+ - Sanitize user input before including it in error logs so payloads cannot smuggle PII through the error path.
24
+
25
+ Combined protocols for authentication (Clerk) and PII-safe observability in
26
+ backend services.
27
+
28
+ ## 1. Authentication (Clerk)
29
+
30
+ ### Core Principles
31
+
32
+ - **Security First:** Never trust the client. Always verify JWTs on the server
33
+ or in middleware.
34
+ - **Zero-Boilerplate Auth:** Use Clerk's built-in components (`<SignIn>`,
35
+ `<SignUp>`, `<UserButton>`) to maintain UI consistency and security standards.
36
+ - **Metadata Management:** Store application-specific user state in
37
+ `publicMetadata` (read-only by client) or `privateMetadata` (server-only).
38
+
39
+ ### Technical Standards
40
+
41
+ - **Middleware:** Protect sensitive routes using Clerk's middleware helper so
42
+ non-authenticated users are redirected before hitting application logic.
43
+ - **Webhooks:** Verify Clerk webhooks using the `svix` library to ensure
44
+ requests originate from Clerk.
45
+ - **Session Tokens:** Use short-lived sessions and handle expired tokens
46
+ gracefully.
47
+
48
+ ### Best Practices
49
+
50
+ - **OAuth Providers:** Prefer standard social logins (Google, GitHub) to reduce
51
+ user friction.
52
+ - **Customization:** Use Clerk's theme API to align auth components with the
53
+ project's styling system.
54
+ - **Multi-tenant:** Use Clerk Organizations for applications requiring teams or
55
+ workspaces.
56
+
57
+ ## 2. Telemetry & PII Logging
58
+
59
+ ### Rules
60
+
61
+ - NEVER log raw request bodies, headers, or user objects that might contain PII
62
+ (Emails, DOB, IP Addresses, Stripe Tokens, Passwords, JWTs).
63
+ - Log entities by opaque ID only (e.g.,
64
+ `logger.info({ event: 'user_created', userId: user.id })`).
65
+ - For errors, log `error.message` and a safe contextual stack trace, but
66
+ sanitize any user input that caused the error before logging.
67
+ - When instrumenting Clerk flows specifically, log the Clerk user ID or session
68
+ ID — never the email, name, or metadata payload.
@@ -0,0 +1,22 @@
1
+ {
2
+ "$schema": "./.agents/schemas/agentrc.schema.json",
3
+ "project": {
4
+ "baseBranch": "main",
5
+ "paths": {
6
+ "agentRoot": ".agents",
7
+ "docsRoot": "docs",
8
+ "tempRoot": "temp"
9
+ }
10
+ },
11
+ "github": {
12
+ "owner": "[OWNER]",
13
+ "repo": "[REPO]",
14
+ "operatorHandle": "@[USERNAME]",
15
+ "projectNumber": null
16
+ },
17
+ "delivery": {
18
+ "ci": {
19
+ "skipForStoryPushes": true
20
+ }
21
+ }
22
+ }
@@ -0,0 +1,72 @@
1
+ # Agent Execution Protocol
2
+
3
+ Version: {{PROTOCOL_VERSION}}
4
+
5
+ You are an AI coding assistant. This protocol governs your execution of the
6
+ current work unit. You must follow these rules strictly.
7
+
8
+ > **Hierarchy shape.** Mandrel uses a **3-tier hierarchy**
9
+ > (Epic → Feature → Story). The work unit is the `type::story` issue
10
+ > itself, with acceptance criteria and verification inlined on the
11
+ > Story body. There is no per-Task sub-loop; the agent authors commit
12
+ > subjects directly per `.agents/rules/git-conventions.md` and
13
+ > references the parent Story via `(refs #<storyId>)`. Branch naming
14
+ > (`{{BRANCH_NAME}}` from `{{EPIC_BRANCH}}`), the Epic-branch
15
+ > integration target, and the close protocol are as documented below.
16
+
17
+ ## 1. Pre-Flight Verification
18
+
19
+ Before writing any code, verify that all dependencies are resolved. If the
20
+ Story is blocked by other Stories, you must STOP and report that the Story is
21
+ blocked.
22
+
23
+ ## 2. Branching Convention
24
+
25
+ All implementation work must be committed to the following branch:
26
+ `{{BRANCH_NAME}}` (This branches from `{{EPIC_BRANCH}}`).
27
+
28
+ Do not push directly to any protected branch ({{PROTECTED_BRANCHES}}).
29
+
30
+ ## 3. Human-in-the-Loop (HITL) Pause
31
+
32
+ If you encounter ambiguity where you need human input before proceeding, or
33
+ hit an unrecoverable blocker, STOP execution, apply `agent::blocked` to this
34
+ Story, and post a friction comment naming the decision required. `risk::high`
35
+ is informational metadata only — it does not pause execution on its own.
36
+
37
+ ## 4. Error Recovery
38
+
39
+ If you hit an unrecoverable error during implementation:
40
+
41
+ 1. Apply the `agent::blocked` label to this Story (Issue #{{TASK_ID}}).
42
+ 2. Report the friction to the operator clearly.
43
+
44
+ ## 5. Close-Out Protocol
45
+
46
+ When your implementation is complete and verified:
47
+
48
+ 1. Stage and commit your changes to the Story branch (`{{BRANCH_NAME}}`).
49
+ 2. Do **not** pre-run validation commands (e.g. `{{VALIDATE_CMD}}` /
50
+ `{{TEST_CMD}}`) here. The close script's lint/test/format/maintainability
51
+ chain is the authoritative gate, run at Story closure (`story-close.js`).
52
+ Exception: you may run them interactively while iterating on a fix.
53
+ 3. The Story branch is auto-merged into the Epic branch by
54
+ `helpers/epic-deliver-story` (via `story-close.js`) — do **not** merge
55
+ manually.
56
+
57
+ ## 6. Definition of Done
58
+
59
+ ### Code Quality
60
+
61
+ Every Story that touches production source must satisfy the numeric
62
+ guardrails in
63
+ [`helpers/code-quality-guardrails.md`](../workflows/helpers/code-quality-guardrails.md):
64
+ cyclomatic complexity ceilings (flag > 8, must-fix > 12), the same-commit
65
+ sibling-test convention, the per-file Maintainability-Index drop ceiling
66
+ (refactor when > 1.5pt), and the rename = baseline-refresh rule. Verify
67
+ at-keyboard with `npm run quality:preview` (the same diff-scoped MI + CRAP
68
+ preview the `.husky/pre-commit` hook runs) **before** committing. The
69
+ thresholds are tunable via `agentSettings.quality.codingGuardrails` in
70
+ `.agentrc.json` — never fork the helper to change a number.
71
+
72
+ ---
@@ -0,0 +1,30 @@
1
+ # Architecture
2
+
3
+ > **Stub generated by guided onboarding.** Replace each placeholder section
4
+ > with the real contents for your project. This file is one of the
5
+ > `project.docsContextFiles` mandatory-reads — agents load it before every
6
+ > task, so keep it accurate.
7
+
8
+ ## Overview
9
+
10
+ One paragraph describing what this system does and who uses it.
11
+
12
+ ## Tech Stack
13
+
14
+ | Area | Choice |
15
+ | ---------- | ------------------------------- |
16
+ | Language | _e.g. TypeScript_ |
17
+ | Runtime | _e.g. Node.js 22_ |
18
+ | Framework | _e.g. Hono / Next.js_ |
19
+ | Database | _e.g. Postgres_ |
20
+ | ORM | _e.g. Drizzle / Prisma_ |
21
+ | Auth | _e.g. Clerk / Auth.js_ |
22
+ | Validation | _e.g. Zod_ |
23
+
24
+ ## Module Map
25
+
26
+ Describe the top-level directories and their responsibilities.
27
+
28
+ ## Key Decisions
29
+
30
+ Link to `decisions.md` for the architectural decision log.
@@ -0,0 +1,24 @@
1
+ # Architectural Decisions Log
2
+
3
+ > **Stub generated by guided onboarding.** Record significant, hard-to-reverse
4
+ > decisions here as dated entries. This file is one of the
5
+ > `project.docsContextFiles` mandatory-reads — agents consult it before every
6
+ > task to avoid re-litigating settled choices.
7
+
8
+ ## Format
9
+
10
+ Each decision is a short, append-only entry:
11
+
12
+ ```text
13
+ ## YYYY-MM-DD — <short title>
14
+
15
+ **Context.** What forced the decision (constraint, problem, trade-off).
16
+
17
+ **Decision.** What was chosen.
18
+
19
+ **Consequences.** What this enables and what it costs going forward.
20
+ ```
21
+
22
+ ## Decisions
23
+
24
+ _No decisions recorded yet. Add the first entry above this line._
@@ -0,0 +1,21 @@
1
+ # {{title}}
2
+
3
+ ## Context
4
+
5
+ {{context}}
6
+
7
+ ## Goal
8
+
9
+ {{goal}}
10
+
11
+ ## Non-Goals
12
+
13
+ {{nonGoals}}
14
+
15
+ ## Scope
16
+
17
+ {{scope}}
18
+
19
+ ## Acceptance Criteria
20
+
21
+ {{acceptanceCriteria}}
@@ -0,0 +1,17 @@
1
+ # {{title}}
2
+
3
+ ## Context
4
+
5
+ {{context}}
6
+
7
+ ## Acceptance Criteria
8
+
9
+ {{acceptanceCriteria}}
10
+
11
+ ## Out of Scope
12
+
13
+ {{outOfScope}}
14
+
15
+ ## Notes
16
+
17
+ {{notes}}
@@ -0,0 +1,415 @@
1
+ ---
2
+ description: >-
3
+ npm-era upgrade wraparound for a Mandrel consumer. Runs `mandrel update`
4
+ (resolve newest non-major version → install → re-materialize `.agents/` →
5
+ migrate → doctor → surface changelog) as the single mechanical step, then
6
+ walks the operator through the judgment wraparound the CLI deliberately
7
+ leaves unowned: reconcile `.agentrc.json`, install the Epic #1386
8
+ quality-gate surface, refresh the harness permission allowlist, reconcile
9
+ the consumer's `AGENTS.md` / runbooks against the surfaced changelog, and
10
+ stage + commit the staged lockfile bump.
11
+ ---
12
+
13
+ # /agents-update
14
+
15
+ > **Upgrade owner.** The mechanical upgrade is owned end to end by the
16
+ > [`mandrel update`](../../lib/cli/update.js) CLI under the npm distribution
17
+ > model (`mandrel`, #3436/#3437). This workflow wraps that CLI: it
18
+ > runs `mandrel update`, then walks the operator through the
19
+ > **distribution-agnostic judgment steps** the CLI deliberately does **not**
20
+ > perform — config reconciliation, the Epic #1386 quality-gate installs, the
21
+ > permission-allowlist refresh, the consumer-side changelog reconciliation,
22
+ > and the stage-and-commit of the staged lockfile bump.
23
+
24
+ ## Overview
25
+
26
+ `/agents-update` advances the consumer repo to the newest non-major
27
+ `mandrel` release, re-materializes `.agents/`, and regenerates the
28
+ flat `.claude/commands/` tree (invoked as `/<name>`) against the new workflow
29
+ set — then reconciles the consumer's own config, harness allowlist, and
30
+ instructions against the change set the upgrade surfaced.
31
+
32
+ The upgrade contract:
33
+
34
+ - **The version only moves on explicit invocation.** `mandrel update`
35
+ resolves the newest published version and bumps the dependency only when
36
+ you run it. There is no `postinstall` hook and no background drift;
37
+ teammates work against the exact `mandrel` version pinned in the
38
+ consumer's `package-lock.json` until someone runs this workflow and commits
39
+ the result.
40
+ - **CI honours the committed lockfile.** Consumer CI runs `npm ci` against
41
+ the committed `package-lock.json`, so it installs exactly the version the
42
+ lockfile pins — never "whatever the registry's newest is today."
43
+ - **The major axis is gated.** `mandrel update` refuses to cross a major
44
+ boundary (e.g. `1.x → 2.0`) without an explicit `--major`, printing a
45
+ pointer to `docs/upgrade-major.md` and exiting non-zero without touching
46
+ anything. Routine minor/patch bumps within the current major are never
47
+ gated.
48
+ - **The CLI never commits.** The npm bump rewrites `package.json` /
49
+ `package-lock.json` and leaves them **staged on disk** for operator review;
50
+ `mandrel update` performs no `git add` / `git commit`. Staging and
51
+ committing the bump (plus any consumer-side reconciliation) is Step 5 of
52
+ this workflow.
53
+ - **`.agents/workflows/` → `.claude/commands/` projection is delegated.**
54
+ `mandrel update`'s sync step re-materializes `.agents/`, and the only
55
+ authoritative writer of the generated flat command tree
56
+ (`.claude/commands/`) is
57
+ [`sync-claude-commands.js`](../scripts/sync-claude-commands.js), which
58
+ prepends the `<!-- AUTO-GENERATED -->` header that
59
+ `/agents-bootstrap-project` parity-checks. Nothing else copies workflow
60
+ files.
61
+
62
+ > **Persona**: `devops-engineer` · **Skills**:
63
+ > `core/ci-cd-and-automation`, `core/documentation-and-adrs`
64
+
65
+ ## Step 1 — Run the updater
66
+
67
+ Preview first, then apply. From the consumer repo root:
68
+
69
+ ```bash
70
+ mandrel update --dry-run
71
+ mandrel update
72
+ ```
73
+
74
+ `mandrel update --dry-run` resolves the newest non-major version and prints
75
+ the ordered step plan (`npm-update → runSync → runMigrations → doctor →
76
+ surface changelog`) without invoking any effectful seam — no dependency bump,
77
+ no sync, no migrations, no doctor, nothing written. Read the planned target
78
+ version before applying.
79
+
80
+ `mandrel update` (no flags) runs the live cycle:
81
+
82
+ 1. **Resolve target** — the newest published `mandrel` version (via
83
+ the daily freshness cache in `temp/version-check.json`) and the currently
84
+ installed version.
85
+ 2. **Major gate** — if the newest version crosses a major boundary, the run
86
+ declines, prints the `docs/upgrade-major.md` pointer, and exits non-zero
87
+ without touching anything. Re-run with `--major` only after reviewing that
88
+ runbook.
89
+ 3. **No-op short-circuit** — already on the newest version ⇒ prints
90
+ `Already up to date` and exits 0.
91
+ 4. **Install** — bumps the dependency (default
92
+ `npm install mandrel@<target>`; pass
93
+ `--install-cmd "<pm> <args>"` for a pnpm/yarn workspace). The lockfile
94
+ change is left **staged** for review; the CLI never commits.
95
+ 5. **runSync** — re-materializes `.agents/` from the freshly installed
96
+ payload, which also regenerates the flat `.claude/commands/` tree via
97
+ `sync-claude-commands.js`.
98
+ 6. **runMigrations** — applies any version-keyed migration steps for the
99
+ crossed range.
100
+ 7. **doctor** — runs the check registry to verify the resulting install.
101
+ 8. **Surface changelog** — prints the `docs/CHANGELOG.md` section(s) covering
102
+ the applied range `(current, target]`. Capture this output — Step 4
103
+ reconciles the consumer's own instructions against it.
104
+
105
+ ## Step 2 — Expected output
106
+
107
+ A successful bump ends with:
108
+
109
+ ```text
110
+ Updating v1.44.0 → v1.46.0…
111
+ ✅ Updated to v1.46.0. The lockfile bump is staged for review.
112
+
113
+ Changelog for v1.46.0:
114
+ ## [1.46.0](…)
115
+ ### Features
116
+ * new workflow X
117
+ ### Bug Fixes
118
+ * tighten Y validation
119
+ ```
120
+
121
+ A no-op run (already on the newest version) looks like:
122
+
123
+ ```text
124
+ ✅ Already up to date (v1.46.0 is the newest version).
125
+ ```
126
+
127
+ A `--dry-run` preview looks like:
128
+
129
+ ```text
130
+ mandrel update — planned upgrade v1.44.0 → v1.46.0
131
+ 1. npm-update
132
+ 2. runSync
133
+ 3. runMigrations
134
+ 4. doctor
135
+ 5. surface changelog
136
+ Dry run: no files written, no dependency bumped.
137
+ ```
138
+
139
+ ## Step 3 — Reconcile `.agentrc.json` against the new defaults
140
+
141
+ A framework bump can add or reshape fields in
142
+ `.agents/docs/agentrc-reference.json` (and the underlying schema). Run the
143
+ reconciliation helper to verify the consumer's `.agentrc.json` still
144
+ validates against the new schema, and to surface any project values that
145
+ already match framework defaults (and could therefore be safely deleted):
146
+
147
+ ```bash
148
+ node .agents/scripts/sync-agentrc.js
149
+ ```
150
+
151
+ The helper (Story #1995) is **default-aware** and **read-only**:
152
+
153
+ - The project config is **validated** against the framework schema. Any
154
+ failure aborts the run with a diagnostic so the operator can fix the
155
+ underlying typo / missing required key before proceeding.
156
+ - Optional keys missing from the project are **never auto-filled**. The
157
+ runtime layers framework defaults at read time, so writing them into
158
+ `.agentrc.json` only bloats the consumer's config diff without
159
+ changing behaviour.
160
+ - Project values that deep-equal the framework default are flagged as
161
+ `[REDUNDANT]` advisory rows — informational only; the file is never
162
+ modified.
163
+
164
+ Full procedure reference:
165
+ [`helpers/agents-sync-config.md`](helpers/agents-sync-config.md).
166
+
167
+ If the helper prints `No changes required` with no advisories, the config
168
+ is already in sync — carry on. If it lists `[REDUNDANT]` rows, you may
169
+ optionally delete those keys from `.agentrc.json` by hand (commit
170
+ alongside the bump in Step 5) for a leaner config. If it exits non-zero,
171
+ fix the validation error and re-run before proceeding.
172
+
173
+ ## Step 3.5 — Upgrade the stabilized-quality-gates surface (Epic #1386)
174
+
175
+ A framework bump that crosses the Epic #1386 boundary requires four
176
+ additive installs on the consumer project so the new gate behaviour is
177
+ actually wired into the consumer's commit / push / CI surfaces. The
178
+ installs share the same idempotent helpers the quality-gates phase of
179
+ [`bootstrap.js`](../scripts/bootstrap.js) uses,
180
+ so a project that already ran the bootstrap on a post-Epic #1386
181
+ framework version sees `no-change` everywhere here.
182
+
183
+ Run from the consumer repo root:
184
+
185
+ ```bash
186
+ node -e "
187
+ Promise.all([
188
+ import('./.agents/scripts/lib/bootstrap/quality-bootstrap.js'),
189
+ import('./.agents/scripts/lib/bootstrap/baselines-layout-migration.js'),
190
+ ]).then(([qb, bm]) => {
191
+ const root = process.cwd();
192
+ const quality = qb.applyQualityBootstrap({ projectRoot: root });
193
+ const baselines = bm.migrateBaselinesLayout({
194
+ baselinesDir: require('node:path').join(root, 'baselines'),
195
+ repoRoot: root,
196
+ });
197
+ console.log(JSON.stringify({ quality, baselines }, null, 2));
198
+ });
199
+ "
200
+ ```
201
+
202
+ The four `quality-bootstrap` outcomes:
203
+
204
+ 1. **`helper`** — copies
205
+ [`code-quality-guardrails.md`](helpers/code-quality-guardrails.md)
206
+ into the project's `.agents/workflows/helpers/`. On the npm
207
+ distribution the helper is materialized into `.agents/` by
208
+ `mandrel update`'s sync step, so this typically reports a `no-change`
209
+ present outcome.
210
+ 2. **`hook`** — installs `.husky/pre-commit` carrying the
211
+ diff-scoped `quality:preview` invocation. **Custom hooks are
212
+ preserved**: when a non-framework hook already exists the action is
213
+ `custom-hook-skip` and the helper returns the recommended snippet
214
+ the operator should append by hand. Print the notice and move on —
215
+ never overwrite a custom hook silently.
216
+ 3. **`scripts`** — backfills `quality:preview` and `quality:watch` in
217
+ `package.json` only when the keys are absent. Existing operator
218
+ values survive.
219
+ 4. **`config`** — seeds `delivery.quality.codingGuardrails` and
220
+ `delivery.quality.autoRefresh` defaults in `.agentrc.json`.
221
+ Only missing keys are written — operator overrides survive.
222
+
223
+ The `baselines-layout-migration` step relocates per-Epic snapshots
224
+ into the `temp/epic/<id>/baselines/` namespace (Story #1467: ephemeral
225
+ scratch state, not committed, reaped on `/epic-deliver` merge with the
226
+ rest of the per-Epic temp tree):
227
+
228
+ - Loose `baselines/epic-<id>-{maintainability,crap}.json` files →
229
+ moved under `temp/epic/<id>/baselines/`.
230
+ - Legacy `baselines/snapshots/<id>/{maintainability,crap}.json` trees →
231
+ re-keyed under `temp/epic/<id>/baselines/`.
232
+ - Committed `baselines/epic/<id>/{maintainability,crap}.json` snapshots
233
+ (the shape Story #1396 introduced) → moved out to
234
+ `temp/epic/<id>/baselines/` and the now-empty committed tree is staged
235
+ for removal via `git rm -r --quiet --ignore-unmatch baselines/epic/<id>`
236
+ so the next commit prunes the tracked tree.
237
+ - The main-tracked `baselines/{maintainability,crap}.json` files at
238
+ the root are **not** touched — they remain the `main`-baseline
239
+ contract for the framework.
240
+
241
+ A second run produces `no-change` on every install path, which is the
242
+ guarantee `agents-update`'s idempotence contract requires.
243
+
244
+ ## Step 3.6 — Refresh the harness permission allowlist (`/fewer-permission-prompts`)
245
+
246
+ A framework bump frequently introduces new helper scripts and `node
247
+ .agents/scripts/<name>.js` invocations the consumer's
248
+ `.claude/settings.json` allowlist has never seen. Left alone, the next
249
+ `/story-deliver` or `/epic-deliver` run trips a fresh wave of
250
+ permission prompts that operators answer by hand — and those hand-tuned
251
+ allowlists drift across projects.
252
+
253
+ Run the harness skill that scans recent transcripts and emits an
254
+ additive allowlist patch for `.claude/settings.json`:
255
+
256
+ ```text
257
+ /fewer-permission-prompts
258
+ ```
259
+
260
+ The skill is supplied by the Claude Code harness (it is not a workflow
261
+ in this repo); invoke it as a slash command from the same Claude Code
262
+ session that just ran `mandrel update`. It:
263
+
264
+ 1. Reads recent transcripts under `.claude/projects/.../`.
265
+ 2. Buckets repeated read-only Bash + MCP tool calls by frequency.
266
+ 3. Proposes a prioritized additive allowlist patch (project
267
+ `.claude/settings.json`) — never removes existing entries.
268
+
269
+ Treat the skill's output as a **PR-reviewable artifact**, not an
270
+ auto-applied change:
271
+
272
+ - Read every proposed entry. Reject anything that grants write
273
+ permissions, network egress, or shells out to a destructive
274
+ command (`rm`, `git push --force`, `gh release delete`, ...).
275
+ - Accept only narrowly-scoped read-only entries
276
+ (`Bash(node .agents/scripts/<name>.js *)`, `Bash(gh issue view *)`,
277
+ `mcp__github__get_*`, etc.).
278
+ - Apply the accepted subset by editing `.claude/settings.json` and
279
+ stage it alongside the version bump in Step 5.
280
+
281
+ The maintenance cadence is **once per `/agents-update` invocation** —
282
+ the same operator who just ran `mandrel update` is the one with the
283
+ freshest transcript context to review the proposed allowlist
284
+ diff. Skipping the step is fine when the bump introduces no new
285
+ scripts (the skill will report "no new high-frequency calls"), but the
286
+ step itself is non-optional: silence-by-omission is what produces the
287
+ hand-tuned drift this maintenance is meant to eliminate.
288
+
289
+ ## Step 4 — Review the surfaced changelog and update consumer-side guidance
290
+
291
+ Framework upgrades change behaviour the consumer project's own
292
+ `AGENTS.md` (or `CLAUDE.md`) and project runbooks often encode — e.g.,
293
+ new validators that change what a planner is allowed to emit, new
294
+ ticket-body schemas downstream agents must produce, retired flags or
295
+ defaults the consumer's instructions still reference. The version bump is
296
+ the right moment to reconcile those, while the diff is in front of the
297
+ operator.
298
+
299
+ `mandrel update` already **surfaced the changelog** for the applied range
300
+ `(current, target]` in Step 1 — its final step prints every
301
+ `docs/CHANGELOG.md` section newer than the installed version and no newer
302
+ than the target. That printed range is your source of truth; you do not
303
+ need to fetch a CHANGELOG from anywhere, since the CLI emitted it inline.
304
+ If the upgrade output scrolled past, re-read the prior run's transcript or
305
+ open the framework's GitHub Releases page for the version headers the
306
+ bump spanned.
307
+
308
+ For each changelog entry between the installed and target versions, check
309
+ the consumer repo for guidance that has gone stale or guidance that should
310
+ now exist:
311
+
312
+ 1. **Consumer `AGENTS.md` / `CLAUDE.md`.** If the changelog entry
313
+ introduces a new contract the consumer instructions must reflect
314
+ (e.g., "tasks must emit a structured 4-section body", "PRs must
315
+ include `audit-snapshot:`"), update the consumer instructions so a
316
+ fresh agent reading them in isolation produces output that passes
317
+ the framework's new validators. Conversely, remove or rewrite
318
+ instructions that contradict a tightened rule.
319
+ 2. **Project-specific runbooks.** If the consumer has its own runbooks
320
+ (e.g., `docs/RUNBOOK.md`, `docs/delivery-runner.md`) that paraphrase
321
+ framework workflows, sweep them for renamed flags / changed exit
322
+ codes / removed scripts.
323
+
324
+ Do not invent updates. If a changelog entry has no consumer-side
325
+ implication, note that explicitly in your scratch and move on — silence
326
+ is a valid review outcome. The goal is to leave the consumer
327
+ instructions and runbooks *consistent* with the new framework version,
328
+ not to manufacture churn.
329
+
330
+ Stage every consumer-side edit alongside the staged lockfile bump so the
331
+ upgrade and the reconciliation land in the same commit (Step 5). A
332
+ reviewer reading the bump should be able to see, in one diff, both
333
+ "the framework version moved" and "what we changed in our own files in
334
+ response."
335
+
336
+ ## Step 5 — Commit the bump
337
+
338
+ `mandrel update` leaves the dependency bump **staged on disk** but never
339
+ commits. After reviewing the surfaced changelog, any `.agentrc.json`
340
+ reconciliation diff from Step 3, the `.claude/settings.json` allowlist
341
+ patch from Step 3.6, and the consumer instruction / runbook updates from
342
+ Step 4, stage and commit the bump (plus the reconciliation and consumer
343
+ edits, if any) from the consumer repo root:
344
+
345
+ ```bash
346
+ git add package.json package-lock.json .agentrc.json .claude/settings.json AGENTS.md # plus any runbook files touched in Step 4
347
+ git commit -m "chore: update mandrel to v<NEW_VERSION>
348
+
349
+ Upgraded v<OLD_VERSION> → v<NEW_VERSION> via mandrel update.
350
+
351
+ - feat: new workflow X
352
+ - fix: tighten Y validation
353
+ - consumer: update AGENTS.md task-body schema reference"
354
+ ```
355
+
356
+ Include the version range and, optionally, the surfaced changelog
357
+ highlights so reviewers can see what moved without re-running the
358
+ updater. Omit `.agentrc.json` from the `git add` if Step 3 reported
359
+ `No changes required`; omit `.claude/settings.json` if Step 3.6 produced
360
+ no accepted entries; omit the consumer-instruction paths if Step 4 was a
361
+ no-op.
362
+
363
+ > **Note:** `mandrel update`'s sync step also re-materializes `.agents/`
364
+ > (and the flat command tree under `.claude/commands/`). On the npm
365
+ > distribution `.agents/` is a
366
+ > materialized directory rebuilt from the installed package — whether the
367
+ > consumer commits the regenerated `.agents/` tree, or treats it as a
368
+ > gitignored install artifact rebuilt by `mandrel sync`, depends on the
369
+ > consumer's own vendoring policy. Stage the `.agents/` / `.claude/`
370
+ > changes here only if the project commits its materialized tree.
371
+
372
+ ## Troubleshooting
373
+
374
+ - **`a newer MAJOR version (X.0.0) is available`** — `mandrel update`
375
+ hit the major gate and exited non-zero without touching anything. A
376
+ major crossing is a breaking upgrade. Read `docs/upgrade-major.md`,
377
+ then re-run `mandrel update --major` only after you have absorbed the
378
+ migration steps that runbook describes.
379
+
380
+ - **`doctor reported failures: …`** — the dependency bumped and `.agents/`
381
+ re-materialized, but a doctor check failed (and the run exited
382
+ non-zero). Run `mandrel doctor` for the per-check remedies. The lockfile
383
+ bump is already staged; fix the doctor finding (often a missing
384
+ bootstrap install — Step 3.5 — or a stale `.agentrc.json` — Step 3)
385
+ before committing in Step 5.
386
+
387
+ - **Install command failed / `npm install … exited <n>`** — the npm
388
+ install step could not bump the dependency (network hiccup, registry
389
+ auth gap, or a peer-dependency conflict). Resolve the underlying npm
390
+ error and re-run `mandrel update`; it is idempotent — a clean re-run
391
+ resumes from the resolve step and short-circuits if the install already
392
+ landed.
393
+
394
+ - **Wrong package manager** — the default install is `npm install`. For a
395
+ pnpm or yarn workspace, pass the package manager explicitly:
396
+ `mandrel update --install-cmd "pnpm add mandrel@<target>"`.
397
+ The registry probe always stays on `npm view` (a PM-agnostic query); only
398
+ the install seam honours the override.
399
+
400
+ ## Constraints
401
+
402
+ - **Idempotent.** A second `mandrel update` immediately after a successful
403
+ run resolves the same newest version, hits the no-op short-circuit, and
404
+ prints `Already up to date` — exit 0, nothing bumped.
405
+ - **Non-major only by default.** The major axis is gated behind an explicit
406
+ `--major`; routine minor/patch bumps within the current major apply
407
+ without a gate.
408
+ - **No auto-commit.** `mandrel update` leaves the lockfile bump staged on
409
+ disk and never runs git. The operator reviews the surfaced changelog and
410
+ writes the commit message (Step 5) — the CLI does not know whether the
411
+ bump is release-worthy for the consumer.
412
+ - **No framework-side version bump.** This workflow advances the
413
+ *consumer's* pinned `mandrel` version. It does not tag a release
414
+ on the framework itself — that remains the framework maintainer's call via
415
+ release-please.