mandrel 2.0.0 → 2.2.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 (323) hide show
  1. package/.agents/README.md +59 -28
  2. package/.agents/agents/acceptance-critic.md +20 -9
  3. package/.agents/agents/story-worker.md +45 -48
  4. package/.agents/audit-checklists/performance.md +1 -1
  5. package/.agents/docs/SDLC.md +60 -46
  6. package/.agents/docs/agentrc-reference.json +8 -13
  7. package/.agents/docs/configuration.md +33 -57
  8. package/.agents/docs/execution-reference.md +39 -10
  9. package/.agents/docs/quality-gates.md +17 -19
  10. package/.agents/docs/workflows.md +6 -6
  11. package/.agents/instructions.md +64 -79
  12. package/.agents/rules/ci-remediation.md +3 -3
  13. package/.agents/rules/gherkin-standards.md +10 -0
  14. package/.agents/rules/git-conventions-reference.md +42 -51
  15. package/.agents/schemas/acceptance-eval-verdict.schema.json +2 -2
  16. package/.agents/schemas/agentrc.schema.json +35 -46
  17. package/.agents/schemas/audit-rules.json +59 -1
  18. package/.agents/schemas/audit-rules.schema.json +33 -1
  19. package/.agents/schemas/lifecycle/README.md +1 -2
  20. package/.agents/schemas/lifecycle/ledger-record.schema.json +1 -1
  21. package/.agents/schemas/lifecycle/merge.flip-failed.schema.json +33 -0
  22. package/.agents/schemas/lifecycle/merge.unlanded.schema.json +1 -0
  23. package/.agents/schemas/lifecycle/story.merged.schema.json +1 -1
  24. package/.agents/schemas/signal-event.schema.json +3 -3
  25. package/.agents/schemas/story-deliver-terminal.schema.json +152 -0
  26. package/.agents/schemas/validation-evidence.schema.json +1 -1
  27. package/.agents/scripts/acceptance-eval.js +24 -68
  28. package/.agents/scripts/agents-bootstrap-github.js +1 -1
  29. package/.agents/scripts/bootstrap.js +3 -3
  30. package/.agents/scripts/check-dead-exports.js +43 -104
  31. package/.agents/scripts/check-doc-links.js +2 -2
  32. package/.agents/scripts/check-lifecycle-lint.js +1 -1
  33. package/.agents/scripts/check-workflow-cli-lint.js +91 -0
  34. package/.agents/scripts/deliver-recover.js +122 -0
  35. package/.agents/scripts/drain-pending-cleanup.js +1 -1
  36. package/.agents/scripts/evidence-gate.js +20 -50
  37. package/.agents/scripts/generate-skills-index.js +17 -1
  38. package/.agents/scripts/generate-workflows-doc.js +4 -4
  39. package/.agents/scripts/lib/ITicketingProvider.js +1 -19
  40. package/.agents/scripts/lib/audit-suite/selector.js +323 -23
  41. package/.agents/scripts/lib/baselines/kinds/maintainability.js +0 -11
  42. package/.agents/scripts/lib/bootstrap/ci-workflow-template.js +28 -33
  43. package/.agents/scripts/lib/bootstrap/manifest.js +8 -11
  44. package/.agents/scripts/lib/bootstrap/project-bootstrap.js +30 -53
  45. package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +0 -2
  46. package/.agents/scripts/lib/checks/core-bare-clean.js +4 -1
  47. package/.agents/scripts/lib/checks/index.js +1 -1
  48. package/.agents/scripts/lib/checks/loop-health.js +12 -11
  49. package/.agents/scripts/lib/checks/state.js +17 -248
  50. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +3 -3
  51. package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +3 -4
  52. package/.agents/scripts/lib/checks/worktree-bootstrap-env.js +2 -2
  53. package/.agents/scripts/lib/checks/worktree-residue-biome.js +3 -3
  54. package/.agents/scripts/lib/cli-args.js +23 -2
  55. package/.agents/scripts/lib/close-validation/gates.js +13 -13
  56. package/.agents/scripts/lib/close-validation/projections/inputs.js +7 -7
  57. package/.agents/scripts/lib/close-validation/projections/maintainability.js +12 -12
  58. package/.agents/scripts/lib/close-validation/runner.js +13 -21
  59. package/.agents/scripts/lib/close-validation/telemetry.js +17 -8
  60. package/.agents/scripts/lib/config/acceptance-eval.js +2 -2
  61. package/.agents/scripts/lib/config/delivery-routing.js +7 -6
  62. package/.agents/scripts/lib/config/explain.js +10 -16
  63. package/.agents/scripts/lib/config/github.js +7 -5
  64. package/.agents/scripts/lib/config/limits.js +15 -25
  65. package/.agents/scripts/lib/config/quality.js +11 -14
  66. package/.agents/scripts/lib/config/runners.js +8 -21
  67. package/.agents/scripts/lib/config/temp-paths.js +18 -56
  68. package/.agents/scripts/lib/config-settings-schema-delivery.js +34 -16
  69. package/.agents/scripts/lib/config-settings-schema-quality.js +9 -2
  70. package/.agents/scripts/lib/config-settings-schema.js +48 -22
  71. package/.agents/scripts/lib/dead-exports-knip.js +105 -0
  72. package/.agents/scripts/lib/dead-exports-mode.js +51 -0
  73. package/.agents/scripts/lib/duplicate-search.js +38 -7
  74. package/.agents/scripts/lib/findings/promote-finding.js +23 -14
  75. package/.agents/scripts/lib/format-generated-json.js +97 -0
  76. package/.agents/scripts/lib/framework-version.js +19 -189
  77. package/.agents/scripts/lib/gh-exec.js +8 -0
  78. package/.agents/scripts/lib/git-branch-lifecycle.js +0 -158
  79. package/.agents/scripts/lib/git-utils.js +0 -14
  80. package/.agents/scripts/lib/json-utils.js +1 -2
  81. package/.agents/scripts/lib/label-constants.js +0 -15
  82. package/.agents/scripts/lib/label-taxonomy.js +1 -12
  83. package/.agents/scripts/lib/observability/active-story-env.js +42 -163
  84. package/.agents/scripts/lib/observability/runtime-friction.js +243 -0
  85. package/.agents/scripts/lib/observability/signal-validator.js +4 -4
  86. package/.agents/scripts/lib/observability/signals-writer.js +6 -82
  87. package/.agents/scripts/lib/observability/source-classifier.js +2 -2
  88. package/.agents/scripts/lib/observability/tool-trace-hook.js +2 -12
  89. package/.agents/scripts/lib/orchestration/acceptance-clusters.js +1 -1
  90. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +2 -2
  91. package/.agents/scripts/lib/orchestration/ceremony-routing.js +43 -45
  92. package/.agents/scripts/lib/orchestration/change-set.js +103 -0
  93. package/.agents/scripts/lib/orchestration/code-review.js +70 -191
  94. package/.agents/scripts/lib/orchestration/consolidation-precondition.js +3 -3
  95. package/.agents/scripts/lib/orchestration/deliver-recover.js +328 -0
  96. package/.agents/scripts/lib/orchestration/detectors-phase.js +12 -6
  97. package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +34 -0
  98. package/.agents/scripts/lib/orchestration/lease-guard-shared.js +3 -2
  99. package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +142 -0
  100. package/.agents/scripts/lib/orchestration/lifecycle/emit-loop-tick.js +9 -11
  101. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +86 -0
  102. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +37 -103
  103. package/.agents/scripts/lib/orchestration/lifecycle/listeners/README.md +7 -3
  104. package/.agents/scripts/lib/orchestration/lifecycle/listeners/watcher.js +50 -85
  105. package/.agents/scripts/lib/orchestration/lifecycle/trace-logger.js +3 -14
  106. package/.agents/scripts/lib/orchestration/merge-block-class.js +76 -20
  107. package/.agents/scripts/lib/orchestration/merge-poll.js +104 -0
  108. package/.agents/scripts/lib/orchestration/plan-context.js +116 -33
  109. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +26 -36
  110. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +31 -22
  111. package/.agents/scripts/lib/orchestration/plan-metrics.js +38 -6
  112. package/.agents/scripts/lib/orchestration/plan-persist/fan-out-gate.js +16 -6
  113. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +173 -25
  114. package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +116 -0
  115. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +280 -100
  116. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +472 -55
  117. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +21 -16
  118. package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +509 -0
  119. package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +230 -0
  120. package/.agents/scripts/lib/orchestration/planning/authoring-context.js +41 -40
  121. package/.agents/scripts/lib/orchestration/planning/decomposer-context.js +1 -2
  122. package/.agents/scripts/lib/orchestration/planning/spec-authoring-grounding.js +1 -1
  123. package/.agents/scripts/lib/orchestration/resolve-stories.js +344 -0
  124. package/.agents/scripts/lib/orchestration/retro-proposals.js +7 -7
  125. package/.agents/scripts/lib/orchestration/review-depth.js +105 -40
  126. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +3 -13
  127. package/.agents/scripts/lib/orchestration/review-providers/native.js +1 -154
  128. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +3 -2
  129. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +1 -1
  130. package/.agents/scripts/lib/orchestration/review-providers/types.js +5 -4
  131. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +1 -1
  132. package/.agents/scripts/lib/orchestration/run-epilogue.js +374 -16
  133. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +24 -0
  134. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +11 -9
  135. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +4 -4
  136. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +4 -13
  137. package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +608 -152
  138. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +72 -30
  139. package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +305 -0
  140. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +1 -1
  141. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +12 -8
  142. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +37 -4
  143. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +2 -2
  144. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +264 -43
  145. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +1 -1
  146. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +10 -10
  147. package/.agents/scripts/lib/orchestration/story-close/phases/code-review.js +104 -279
  148. package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +191 -0
  149. package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +120 -0
  150. package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +360 -0
  151. package/.agents/scripts/lib/orchestration/story-follow-ups.js +75 -14
  152. package/.agents/scripts/lib/orchestration/story-init-remote.js +12 -8
  153. package/.agents/scripts/lib/orchestration/story-plan-state.js +14 -29
  154. package/.agents/scripts/lib/orchestration/task-body-validator.js +52 -7
  155. package/.agents/scripts/lib/orchestration/ticket-lease.js +27 -74
  156. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +119 -14
  157. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +3 -4
  158. package/.agents/scripts/lib/orchestration/ticket-validator.js +121 -18
  159. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +14 -47
  160. package/.agents/scripts/lib/orchestration/ticketing/reads.js +19 -32
  161. package/.agents/scripts/lib/orchestration/ticketing/transition.js +61 -1
  162. package/.agents/scripts/lib/orchestration/ticketing.js +0 -1
  163. package/.agents/scripts/lib/plan-phase-cleanup.js +12 -14
  164. package/.agents/scripts/lib/planning-corpus.js +12 -286
  165. package/.agents/scripts/lib/preflight-runner.js +2 -2
  166. package/.agents/scripts/lib/qa/qa-context-hydrator.js +5 -5
  167. package/.agents/scripts/lib/signals/index.js +4 -17
  168. package/.agents/scripts/lib/signals/read.js +35 -35
  169. package/.agents/scripts/lib/signals/schema.js +8 -11
  170. package/.agents/scripts/lib/signals/span-tree.js +7 -7
  171. package/.agents/scripts/lib/signals/write.js +0 -1
  172. package/.agents/scripts/lib/single-story/story-merged-notify.js +13 -2
  173. package/.agents/scripts/lib/skills/parse-skill.js +16 -3
  174. package/.agents/scripts/lib/story-adjacency.js +8 -7
  175. package/.agents/scripts/lib/story-body/story-body.js +81 -13
  176. package/.agents/scripts/lib/templates/decomposer-prompts.js +15 -16
  177. package/.agents/scripts/lib/test-env.js +14 -1
  178. package/.agents/scripts/lib/test-tiers.js +0 -3
  179. package/.agents/scripts/lib/ticket-body-sections.js +0 -14
  180. package/.agents/scripts/lib/validation-evidence.js +31 -59
  181. package/.agents/scripts/lib/wave-runner/live-probe.js +315 -0
  182. package/.agents/scripts/lib/wave-runner/ready-set.js +32 -6
  183. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +1 -1
  184. package/.agents/scripts/lib/worktree/lifecycle/reap.js +68 -19
  185. package/.agents/scripts/lib/worktree/lifecycle-manager.js +1 -2
  186. package/.agents/scripts/plan-context.js +38 -7
  187. package/.agents/scripts/plan-critics.js +203 -0
  188. package/.agents/scripts/plan-persist.js +145 -35
  189. package/.agents/scripts/plan-run-epilogue.js +83 -38
  190. package/.agents/scripts/post-structured-comment.js +0 -38
  191. package/.agents/scripts/pr-watch-with-update.js +43 -22
  192. package/.agents/scripts/providers/github/compose.js +0 -1
  193. package/.agents/scripts/providers/github/errors.js +0 -19
  194. package/.agents/scripts/providers/github/issues.js +1 -11
  195. package/.agents/scripts/providers/github/mappers.js +5 -0
  196. package/.agents/scripts/providers/github/sub-issues.js +0 -47
  197. package/.agents/scripts/providers/github/tickets.js +33 -153
  198. package/.agents/scripts/providers/github.js +17 -6
  199. package/.agents/scripts/quality-preview.js +13 -6
  200. package/.agents/scripts/resolve-stories.js +236 -0
  201. package/.agents/scripts/run-coverage.js +4 -1
  202. package/.agents/scripts/run-lint.js +2 -2
  203. package/.agents/scripts/run-verify.js +31 -2
  204. package/.agents/scripts/signals-view.js +9 -10
  205. package/.agents/scripts/single-story-close.js +173 -18
  206. package/.agents/scripts/single-story-confirm-merge.js +288 -15
  207. package/.agents/scripts/single-story-init.js +6 -10
  208. package/.agents/scripts/stories-wave-tick.js +380 -53
  209. package/.agents/scripts/story-plan.js +3 -3
  210. package/.agents/scripts/update-ticket-state.js +8 -50
  211. package/.agents/skills/core/code-review-and-quality/SKILL.md +28 -450
  212. package/.agents/skills/core/code-review-and-quality/reference.md +458 -0
  213. package/.agents/skills/core/debugging-and-error-recovery/SKILL.md +22 -315
  214. package/.agents/skills/core/debugging-and-error-recovery/reference.md +323 -0
  215. package/.agents/skills/core/diagnose-friction/SKILL.md +14 -18
  216. package/.agents/skills/core/documentation-and-adrs/SKILL.md +25 -397
  217. package/.agents/skills/core/documentation-and-adrs/reference.md +403 -0
  218. package/.agents/skills/core/gates-and-baselines/SKILL.md +12 -12
  219. package/.agents/skills/core/idea-refinement/SKILL.md +3 -3
  220. package/.agents/skills/core/scope-triage/SKILL.md +3 -0
  221. package/.agents/skills/core/security-and-hardening/SKILL.md +22 -367
  222. package/.agents/skills/core/security-and-hardening/reference.md +375 -0
  223. package/.agents/skills/skills.index.json +2 -12
  224. package/.agents/skills/stack/qa/playwright-bdd/SKILL.md +2 -4
  225. package/.agents/skills/stack/qa/qa-explore-driving/SKILL.md +1 -1
  226. package/.agents/skills/stack/qa/qa-harness/SKILL.md +1 -3
  227. package/.agents/workflows/audit-architecture.md +3 -4
  228. package/.agents/workflows/audit-clean-code.md +4 -4
  229. package/.agents/workflows/audit-documentation.md +4 -5
  230. package/.agents/workflows/audit-lighthouse.md +8 -0
  231. package/.agents/workflows/audit-navigability.md +10 -0
  232. package/.agents/workflows/audit-performance.md +2 -3
  233. package/.agents/workflows/audit-quality.md +8 -9
  234. package/.agents/workflows/audit-security.md +1 -2
  235. package/.agents/workflows/audit-seo.md +10 -0
  236. package/.agents/workflows/audit-ux-ui.md +7 -0
  237. package/.agents/workflows/deliver.md +133 -45
  238. package/.agents/workflows/git-cleanup.md +2 -2
  239. package/.agents/workflows/git-deliver.md +1 -1
  240. package/.agents/workflows/helpers/acceptance-self-eval.md +34 -17
  241. package/.agents/workflows/helpers/code-quality-guardrails.md +15 -12
  242. package/.agents/workflows/helpers/code-review.md +14 -12
  243. package/.agents/workflows/helpers/deliver-story-reference.md +73 -32
  244. package/.agents/workflows/helpers/deliver-story.md +209 -118
  245. package/.agents/workflows/helpers/parallel-tooling.md +2 -2
  246. package/.agents/workflows/helpers/worktree-lifecycle.md +28 -32
  247. package/.agents/workflows/plan.md +239 -19
  248. package/.agents/workflows/qa-assist.md +6 -6
  249. package/.agents/workflows/qa-explore.md +3 -3
  250. package/.agents/workflows/qa-run.md +1 -5
  251. package/bin/mandrel.js +12 -1
  252. package/docs/CHANGELOG.md +62 -0
  253. package/lib/cli/registry.js +262 -19
  254. package/lib/cli/sync-agents.js +157 -0
  255. package/lib/cli/sync-commands.js +115 -6
  256. package/lib/cli/sync.js +168 -6
  257. package/lib/cli/update.js +105 -8
  258. package/lib/cli/version-helpers.js +131 -0
  259. package/lib/migrations/README.md +7 -5
  260. package/lib/migrations/index.js +17 -9
  261. package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +100 -0
  262. package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +101 -0
  263. package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +154 -0
  264. package/package.json +2 -2
  265. package/.agents/schemas/epic-perf-report.schema.json +0 -89
  266. package/.agents/schemas/lifecycle/acceptance.reconcile.failed.schema.json +0 -13
  267. package/.agents/schemas/lifecycle/acceptance.reconcile.ok.schema.json +0 -13
  268. package/.agents/schemas/lifecycle/acceptance.reconcile.skipped.schema.json +0 -13
  269. package/.agents/schemas/lifecycle/acceptance.reconcile.start.schema.json +0 -12
  270. package/.agents/schemas/lifecycle/acceptance.reconcile.waived.schema.json +0 -13
  271. package/.agents/schemas/lifecycle/epic.automerge.end.schema.json +0 -15
  272. package/.agents/schemas/lifecycle/epic.automerge.start.schema.json +0 -13
  273. package/.agents/schemas/lifecycle/epic.blocked.schema.json +0 -13
  274. package/.agents/schemas/lifecycle/epic.cleanup.end.schema.json +0 -12
  275. package/.agents/schemas/lifecycle/epic.cleanup.start.schema.json +0 -12
  276. package/.agents/schemas/lifecycle/epic.close.end.schema.json +0 -12
  277. package/.agents/schemas/lifecycle/epic.complete.schema.json +0 -13
  278. package/.agents/schemas/lifecycle/epic.finalize.end.schema.json +0 -13
  279. package/.agents/schemas/lifecycle/epic.finalize.start.schema.json +0 -12
  280. package/.agents/schemas/lifecycle/epic.merge.armed.schema.json +0 -13
  281. package/.agents/schemas/lifecycle/epic.merge.blocked.schema.json +0 -14
  282. package/.agents/schemas/lifecycle/epic.merge.confirmed.schema.json +0 -17
  283. package/.agents/schemas/lifecycle/epic.merge.ready.schema.json +0 -15
  284. package/.agents/schemas/lifecycle/epic.plan.end.schema.json +0 -18
  285. package/.agents/schemas/lifecycle/epic.plan.start.schema.json +0 -12
  286. package/.agents/schemas/lifecycle/epic.snapshot.end.schema.json +0 -16
  287. package/.agents/schemas/lifecycle/epic.snapshot.start.schema.json +0 -12
  288. package/.agents/schemas/lifecycle/epic.watch.end.schema.json +0 -29
  289. package/.agents/schemas/lifecycle/epic.watch.start.schema.json +0 -16
  290. package/.agents/schemas/lifecycle/story.heartbeat.schema.json +0 -20
  291. package/.agents/schemas/risk-verdict.schema.json +0 -53
  292. package/.agents/schemas/story-perf-summary.schema.json +0 -73
  293. package/.agents/scripts/analyze-execution.js +0 -444
  294. package/.agents/scripts/check-prepush-recovery.js +0 -90
  295. package/.agents/scripts/lib/git-merge-orchestrator.js +0 -261
  296. package/.agents/scripts/lib/observability/baseline-refresh-rate.js +0 -221
  297. package/.agents/scripts/lib/observability/hook-heartbeat.js +0 -187
  298. package/.agents/scripts/lib/observability/perf-aggregator.js +0 -813
  299. package/.agents/scripts/lib/observability/perf-report-readers.js +0 -328
  300. package/.agents/scripts/lib/observability/perf-report-render.js +0 -182
  301. package/.agents/scripts/lib/orchestration/audit-lens-routing.js +0 -128
  302. package/.agents/scripts/lib/orchestration/bookkeeping-outbox.js +0 -273
  303. package/.agents/scripts/lib/orchestration/error-journal.js +0 -139
  304. package/.agents/scripts/lib/orchestration/lifecycle/emit-story-heartbeat.js +0 -155
  305. package/.agents/scripts/lib/orchestration/lifecycle/ledger-diff.js +0 -140
  306. package/.agents/scripts/lib/orchestration/lifecycle/listeners/merge-watcher.js +0 -665
  307. package/.agents/scripts/lib/orchestration/plan-review-routing.js +0 -63
  308. package/.agents/scripts/lib/orchestration/planning/risk-verdict.js +0 -104
  309. package/.agents/scripts/lib/orchestration/planning-context-budget.js +0 -213
  310. package/.agents/scripts/lib/orchestration/planning-risk.js +0 -194
  311. package/.agents/scripts/lib/orchestration/post-merge/phases/branch-cleanup.js +0 -56
  312. package/.agents/scripts/lib/orchestration/post-merge/phases/dashboard-refresh.js +0 -21
  313. package/.agents/scripts/lib/orchestration/post-merge/phases/notification.js +0 -78
  314. package/.agents/scripts/lib/orchestration/post-merge/phases/temp-cleanup.js +0 -68
  315. package/.agents/scripts/lib/orchestration/post-merge/phases/ticket-closure.js +0 -118
  316. package/.agents/scripts/lib/orchestration/post-merge/phases/worktree-reap.js +0 -397
  317. package/.agents/scripts/lib/orchestration/preflight-cache.js +0 -187
  318. package/.agents/scripts/lib/orchestration/resolve-plan-run.js +0 -155
  319. package/.agents/scripts/lib/orchestration/retro-perf-heuristics.js +0 -275
  320. package/.agents/scripts/lib/orchestration/story-progress/story-run-progress-writer.js +0 -400
  321. package/.agents/scripts/lib/single-story/confirm-merge-follow-ups.js +0 -36
  322. package/.agents/scripts/resolve-plan-run.js +0 -117
  323. package/.agents/skills/core/analyze-execution/SKILL.md +0 -101
@@ -14,21 +14,20 @@ allowed_tools:
14
14
 
15
15
  ## Policy Capsule
16
16
 
17
- - Invoke via the wrapping CLI `node .agents/scripts/diagnose-friction.js --task <id> --story <id> --epic <id> --cmd <command args...>`; this is the single supported entry point.
17
+ - Invoke via the wrapping CLI `node .agents/scripts/diagnose-friction.js --story <id> [--epic <id>] --cmd <command args...>`; this is the single supported entry point.
18
18
  - Pass the wrapped command's stdout and stderr through **unchanged** — never reformat, redact, or buffer in a way that loses the original failure shape.
19
19
  - Never mutate the wrapped command's exit code. The Skill observes; the caller decides whether the failure is fatal.
20
20
  - Operate as **best-effort observation**: a write failure on the signals stream MUST NOT halt the runner. A missing signal is preferable to a stalled wave.
21
21
  - On non-zero exit append a `friction` NDJSON record (`kind`, `ts`, `category`, `detail`, `exitCode`) only through the signals writer helper — never open `signals.ndjson` directly.
22
- - Resolve Story / Epic context from `--story` and `--epic` first; fall back to parsing `parent: #<storyId>` + `Epic: #<epicId>` from the Task body when only `--task` is supplied.
23
- - Do **not** post GitHub comments from this Skill. Friction is local NDJSON in v5; the structured-comment surface belongs to `analyze-execution`.
24
- - Categorize failures deterministically (rebase abort, test-suite name, lint category, etc.) so the downstream analyzer can attribute friction without re-running the command.
22
+ - Resolve Story context from `--story` (and `--epic` when a run id applies); there is no body-parsing fallback pass the flags explicitly.
23
+ - Do **not** post GitHub comments from this Skill. Friction is local NDJSON: the retro is what aggregates the stream and routes recurring friction into proposals (Story #4545 deleted `analyze-execution`, the perf-summary comment surface).
24
+ - Categorize failures deterministically (rebase abort, test-suite name, lint category, etc.) so the retro can attribute friction without re-running the command.
25
25
 
26
26
  ## Role
27
27
 
28
28
  Diagnostic interceptor. Captures the failure shape of a wrapped command
29
- and persists it as a structured signal so `analyze-execution` can
30
- attribute friction back to the Story / Epic without re-running the
31
- command.
29
+ and persists it as a structured signal so the retro can attribute friction
30
+ back to the Story without re-running the command.
32
31
 
33
32
  ## When to use
34
33
 
@@ -41,26 +40,24 @@ that want to dispatch via the Skill tool rather than spawn the CLI.
41
40
  ## Inputs
42
41
 
43
42
  - `--cmd <command args...>` — the command to invoke and observe.
44
- - `--story <id>` / `--epic <id>` (optional) — when both can be
45
- resolved, the Skill appends a `friction` signal to
46
- `<tempRoot>/epic-<eid>/story-<sid>/signals.ndjson` on non-zero exit.
47
- - `--task <id>` (optional) — used as a fallback so the body parser can
48
- recover `parent: #<storyId>` + `Epic: #<epicId>` when neither flag
49
- was supplied.
43
+ - `--story <id>` / `--epic <id>` (optional) — when resolved, the Skill
44
+ appends a `friction` signal to
45
+ `temp/run-<eid>/stories/story-<sid>/signals.ndjson` on non-zero exit
46
+ (standalone Stories: `temp/standalone/stories/story-<sid>/`).
50
47
 
51
48
  ## Outputs
52
49
 
53
50
  - The wrapped command's stdout / stderr is passed through unchanged.
54
51
  - On non-zero exit: a `friction` NDJSON record (kind, ts, category,
55
52
  detail, exitCode) is appended via the signals writer.
56
- - No GitHub comments are posted — friction is a local NDJSON signal in
57
- v5. The analyzer (`analyze-execution`) reads the stream out-of-band.
53
+ - No GitHub comments are posted — friction is a local NDJSON signal. The
54
+ retro reads the stream out-of-band.
58
55
 
59
56
  ## Procedure
60
57
 
61
58
  ```bash
62
59
  node .agents/scripts/diagnose-friction.js \
63
- --task <id> --story <id> --epic <id> \
60
+ --story <id> [--epic <id>] \
64
61
  --cmd <command args...>
65
62
  ```
66
63
 
@@ -71,8 +68,7 @@ signal is preferable to a halted runner.
71
68
  ## Constraints
72
69
 
73
70
  - Do **not** post GitHub comments from this Skill. Friction is local
74
- NDJSON in v5; the comment surface is reserved for
75
- `analyze-execution`'s structured rollups.
71
+ NDJSON; the retro owns the aggregate surface.
76
72
  - Do **not** mutate the wrapped command's exit code. The Skill's job
77
73
  is observation; the caller decides whether the failure is fatal.
78
74
  - Do **not** open `signals.ndjson` directly — use the signals writer
@@ -12,406 +12,34 @@ description:
12
12
 
13
13
  - Document the **why**, not the what. Capture context, constraints, alternatives considered, and trade-offs — code already shows what was built.
14
14
  - Write an ADR for any decision that would be expensive to reverse (framework choice, data model, auth strategy, API architecture, hosting platform).
15
- - Mandrel ships **two first-class decisions-log layouts** — pick one at onboarding (see [Decisions-log layouts](#decisions-log-layouts)): the **single-file dated-entry** `docs/decisions.md` (default; best for small projects) or the **index + `docs/decisions/` directory** (MADR-style, one file per ADR; best once the log outgrows a single file). Either way, the canonical ADR sections are **Status, Date, Deciders, Context, Decision, (Alternatives Considered), Consequences**.
15
+ - Mandrel ships **two first-class decisions-log layouts** — pick one at onboarding (see [Decisions-log layouts](reference.md#decisions-log-layouts)): the **single-file dated-entry** `docs/decisions.md` (default; best for small projects) or the **index + `docs/decisions/` directory** (MADR-style, one file per ADR; best once the log outgrows a single file). Either way, the canonical ADR sections are **Status, Date, Deciders, Context, Decision, (Alternatives Considered), Consequences**.
16
16
  - Mark an ADR's status as `Accepted`, `Superseded by ADR-XXX`, or `Deprecated`. Never silently delete an ADR — supersede it.
17
17
  - Do **not** document obvious code; do **not** restate what the code already says. Stale or redundant docs are worse than no docs.
18
18
  - Comments explain **non-obvious intent** (the why). If a comment describes what the code does, refactor the code instead.
19
19
  - Keep user-facing docs (README, API docs, changelog) updated as part of the change — out-of-date docs are bugs.
20
- - Pair every public API change with a changelog entry that links the relevant Story/Epic and any superseding ADR.
20
+ - Pair every public API change with a changelog entry that links the relevant Story and any superseding ADR.
21
21
  - When you find yourself explaining the same thing repeatedly in chat, write it down — the explanation belongs in the project docs or an ADR.
22
22
 
23
- ## Overview
24
-
25
- Document decisions, not just code. The most valuable documentation captures the
26
- _why_ the context, constraints, and trade-offs that led to a decision. Code
27
- shows _what_ was built; documentation explains _why it was built this way_ and
28
- _what alternatives were considered_. This context is essential for future humans
29
- and agents working in the codebase.
30
-
31
- ## When to Use
32
-
33
- - Making a significant architectural decision
34
- - Choosing between competing approaches
35
- - Adding or changing a public API
36
- - Shipping a feature that changes user-facing behavior
37
- - Onboarding new team members (or agents) to the project
38
- - When you find yourself explaining the same thing repeatedly
39
-
40
- **When NOT to use:** Don't document obvious code. Don't add comments that
41
- restate what the code already says. Don't write docs for throwaway prototypes.
42
-
43
- ## Architecture Decision Records (ADRs)
44
-
45
- ADRs capture the reasoning behind significant technical decisions. They're the
46
- highest-value documentation you can write.
47
-
48
- ### When to Write an ADR
49
-
50
- - Choosing a framework, library, or major dependency
51
- - Designing a data model or database schema
52
- - Selecting an authentication strategy
53
- - Deciding on an API architecture (REST vs. GraphQL vs. tRPC)
54
- - Choosing between build tools, hosting platforms, or infrastructure
55
- - Any decision that would be expensive to reverse
56
-
57
- ### Decisions-log layouts
58
-
59
- Mandrel ships **two supported layouts** for the decisions log. Both keep the
60
- mandatory-read file named `docs/decisions.md` (the `project.docsContextFiles`
61
- default), so `config-resolver.js` and every `.agents/` reference resolve the
62
- same regardless of which you pick — only the **shape** differs. Choose one at
63
- onboarding:
64
-
65
- | Layout | Shape | Template(s) | When to use |
66
- | ----------------------------------- | --------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
67
- | **Single-file dated entries** (default) | One `decisions.md` of append-only `## YYYY-MM-DD — title` entries | [`templates/docs/decisions.md`](../../../templates/docs/decisions.md) | Small projects; a handful of decisions; you want everything in one scannable file. |
68
- | **Index + `decisions/` directory** | `decisions.md` is a one-row-per-ADR **index**; each ADR is `decisions/NNNN-*.md` | [`templates/docs/decisions.index.md`](../../../templates/docs/decisions.index.md) + [`templates/docs/decisions/_template.md`](../../../templates/docs/decisions/_template.md) | The log has outgrown a single file (dozens of ADRs); you want per-decision history and `git blame` per ADR. |
69
-
70
- To adopt the directory layout, replace `decisions.md` with the index variant,
71
- create a `decisions/` directory beside it, and scaffold each ADR from
72
- `decisions/_template.md` using zero-padded sequential numbering
73
- (`0001-*.md`, `0002-*.md`, …).
74
-
75
- > **Loading model (resolved design question).** The decisions **index** is the
76
- > only artifact loaded into mandatory task context — individual ADR bodies
77
- > under `decisions/` are **lazy / link-followed**, not auto-loaded. This is
78
- > **index-only by default**: auto-loading every ADR body into each task's
79
- > context would reintroduce exactly the bloat the split exists to remove.
80
- > `project.docsContextFiles` entries are plain filenames resolved against the
81
- > docs root (no glob expansion in the loader), so the index ships as a normal
82
- > mandatory-read with no loader change. A project that genuinely wants the full
83
- > ADR set in mandatory context can add explicit per-file entries (or a
84
- > `decisions/*.md`-style entry if it maintains its own globbing) as a
85
- > deliberate opt-in, but that is the exception, not the default.
86
-
87
- ### ADR Template
88
-
89
- In the **single-file** layout, append a short dated entry per the
90
- `templates/docs/decisions.md` format. In the **directory** layout, store ADRs
91
- in `docs/decisions/` with sequential numbering:
92
-
93
- ```markdown
94
- # ADR-001: Use PostgreSQL for primary database
95
-
96
- ## Status
97
-
98
- Accepted | Superseded by ADR-XXX | Deprecated
99
-
100
- ## Date
101
-
102
- 2025-01-15
103
-
104
- ## Deciders
105
-
106
- The platform team (architect + two senior engineers).
107
-
108
- ## Context
109
-
110
- We need a primary database for the task management application. Key
111
- requirements:
112
-
113
- - Relational data model (users, tasks, teams with relationships)
114
- - ACID transactions for task state changes
115
- - Support for full-text search on task content
116
- - Managed hosting available (for small team, limited ops capacity)
117
-
118
- ## Decision
119
-
120
- Use PostgreSQL with Prisma ORM.
121
-
122
- ## Alternatives Considered
123
-
124
- ### MongoDB
125
-
126
- - Pros: Flexible schema, easy to start with
127
- - Cons: Our data is inherently relational; would need to manage relationships
128
- manually
129
- - Rejected: Relational data in a document store leads to complex joins or data
130
- duplication
131
-
132
- ### SQLite
133
-
134
- - Pros: Zero configuration, embedded, fast for reads
135
- - Cons: Limited concurrent write support, no managed hosting for production
136
- - Rejected: Not suitable for multi-user web application in production
137
-
138
- ### MySQL
139
-
140
- - Pros: Mature, widely supported
141
- - Cons: PostgreSQL has better JSON support, full-text search, and ecosystem
142
- tooling
143
- - Rejected: PostgreSQL is the better fit for our feature requirements
144
-
145
- ## Consequences
146
-
147
- - Prisma provides type-safe database access and migration management
148
- - We can use PostgreSQL's full-text search instead of adding Elasticsearch
149
- - Team needs PostgreSQL knowledge (standard skill, low risk)
150
- - Hosting on managed service (Supabase, Neon, or RDS)
151
- ```
152
-
153
- ### ADR Lifecycle
154
-
155
- ```text
156
- PROPOSED → ACCEPTED → (SUPERSEDED or DEPRECATED)
157
- ```
158
-
159
- - **Don't delete old ADRs.** They capture historical context.
160
- - When a decision changes, write a new ADR that references and supersedes the
161
- old one.
162
-
163
- ## Inline Documentation
164
-
165
- ### When to Comment
166
-
167
- Comment the _why_, not the _what_:
168
-
169
- ```typescript
170
- // BAD: Restates the code
171
- // Increment counter by 1
172
- counter += 1;
173
-
174
- // GOOD: Explains non-obvious intent
175
- // Rate limit uses a sliding window — reset counter at window boundary,
176
- // not on a fixed schedule, to prevent burst attacks at window edges
177
- if (now - windowStart > WINDOW_SIZE_MS) {
178
- counter = 0;
179
- windowStart = now;
180
- }
181
- ```
182
-
183
- ### When NOT to Comment
184
-
185
- ```typescript
186
- // Don't comment self-explanatory code
187
- function calculateTotal(items: CartItem[]): number {
188
- return items.reduce((sum, item) => sum + item.price * item.quantity, 0);
189
- }
190
-
191
- // Don't leave TODO comments for things you should just do now
192
- // TODO: add error handling ← Just add it
193
-
194
- // Don't leave commented-out code
195
- // const oldImplementation = () => { ... } ← Delete it, git has history
196
- ```
197
-
198
- ### Document Known Gotchas
199
-
200
- ```typescript
201
- /**
202
- * IMPORTANT: This function must be called before the first render.
203
- * If called after hydration, it causes a flash of unstyled content
204
- * because the theme context isn't available during SSR.
205
- *
206
- * See ADR-003 for the full design rationale.
207
- */
208
- export function initializeTheme(theme: Theme): void {
209
- // ...
210
- }
211
- ```
212
-
213
- ## API Documentation
214
-
215
- For public APIs (REST, GraphQL, library interfaces):
216
-
217
- ### Inline with Types (Preferred for TypeScript)
218
-
219
- ```typescript
220
- /**
221
- * Creates a new task.
222
- *
223
- * @param input - Task creation data (title required, description optional)
224
- * @returns The created task with server-generated ID and timestamps
225
- * @throws {ValidationError} If title is empty or exceeds 200 characters
226
- * @throws {AuthenticationError} If the user is not authenticated
227
- *
228
- * @example
229
- * const task = await createTask({ title: 'Buy groceries' });
230
- * console.log(task.id); // "task_abc123"
231
- */
232
- export async function createTask(input: CreateTaskInput): Promise<Task> {
233
- // ...
234
- }
235
- ```
236
-
237
- ### OpenAPI / Swagger for REST APIs
238
-
239
- ```yaml
240
- paths:
241
- /api/tasks:
242
- post:
243
- summary: Create a task
244
- requestBody:
245
- required: true
246
- content:
247
- application/json:
248
- schema:
249
- $ref: '#/components/schemas/CreateTaskInput'
250
- responses:
251
- '201':
252
- description: Task created
253
- content:
254
- application/json:
255
- schema:
256
- $ref: '#/components/schemas/Task'
257
- '422':
258
- description: Validation error
259
- ```
260
-
261
- ## README Structure
262
-
263
- Every project should have a README that covers:
264
-
265
- ```markdown
266
- # Project Name
267
-
268
- One-paragraph description of what this project does.
269
-
270
- ## Quick Start
271
-
272
- 1. Clone the repo
273
- 2. Install dependencies: `npm install`
274
- 3. Set up environment: `cp .env.example .env`
275
- 4. Run the dev server: `npm run dev`
276
-
277
- ## Commands
278
-
279
- | Command | Description |
280
- | --------------- | ------------------------ |
281
- | `npm run dev` | Start development server |
282
- | `npm test` | Run tests |
283
- | `npm run build` | Production build |
284
- | `npm run lint` | Run linter |
285
-
286
- ## Architecture
287
-
288
- Brief overview of the project structure and key design decisions. Link to ADRs
289
- for details.
290
-
291
- ## Contributing
292
-
293
- How to contribute, coding standards, PR process.
294
- ```
295
-
296
- ## Changelog Maintenance
297
-
298
- For shipped features:
299
-
300
- ```markdown
301
- # Changelog
302
-
303
- ## [1.2.0] - 2025-01-20
304
-
305
- ### Added
306
-
307
- - Task sharing: users can share tasks with team members (#123)
308
- - Email notifications for task assignments (#124)
309
-
310
- ### Fixed
311
-
312
- - Duplicate tasks appearing when rapidly clicking create button (#125)
313
-
314
- ### Changed
315
-
316
- - Task list now loads 50 items per page (was 20) for better UX (#126)
317
- ```
318
-
319
- ## Pruning & Archiving
320
-
321
- Living docs accrete history — dated changelog entries, closed decision-log
322
- rows, completed rollout checklists, resolved runbook incidents. Left
323
- unpruned, that verbatim history crowds out the live guidance a reader (human
324
- or agent) actually needs, and every task that loads the doc re-pays the cost.
325
- The fix is to **archive, don't delete**: relocate the cold history so the live
326
- doc stays lean while the record stays recoverable.
327
-
328
- ### The archive-don't-delete rule
329
-
330
- **History is preserved by _moving_ it, never by deleting it.** Pruning a doc
331
- never destroys its past — the verbatim content is relocated to a dated archive
332
- file under version control, so the full record remains diffable and
333
- recoverable. Deleting history outright (even with "git has it") is the
334
- anti-pattern this convention exists to prevent: the archive is discoverable
335
- from the live doc, a buried git revision is not.
336
-
337
- ### How to prune a doc
338
-
339
- 1. **Extract the still-live signal first — before you archive anything.**
340
- Gotchas, traps, and hard-won caveats buried in the history are the most
341
- valuable lines in the doc. Lift them into the live doc's standing guidance
342
- (a "Known gotchas" list, an inline warning, or an ADR) **before** the
343
- history moves. Archiving first risks stranding a live trap in a cold file
344
- nobody rereads.
345
- 2. **Move the verbatim history to a dated archive file.** Relocate the cold
346
- content — untouched, word-for-word — to
347
- `docs/archive/<name>-<YYYY-MM>.md`, where `<name>` is the source doc's base
348
- name and `<YYYY-MM>` is the archive date (e.g. `docs/archive/changelog-2025-01.md`,
349
- `docs/archive/decisions-2024-11.md`). The archive is an exact copy of what
350
- was live; do not summarize or rewrite it in the move.
351
- 3. **Collapse completed checklists to a one-line summary.** A finished
352
- checklist (a rollout runbook, a migration plan, a release gate) does not
353
- need to keep every ticked box in the live doc. Replace it with a single
354
- line recording the outcome and date — e.g.
355
- `Auth-migration rollout — completed 2025-01-18, all 12 steps green` — and
356
- let the archived copy carry the full detail.
357
- 4. **Leave a one-line pointer behind.** Every archived doc leaves exactly one
358
- line in the live doc pointing at where its history went, so the record is
359
- never orphaned — e.g.
360
- `Older entries archived to docs/archive/changelog-2024.md`. The pointer is
361
- what makes "moved, not deleted" true from the reader's vantage point.
362
-
363
- ### When to prune
364
-
365
- - A changelog, decision log, or runbook has grown long enough that the live
366
- entries are hard to find among the historical ones.
367
- - A checklist or rollout plan is fully complete and its step-by-step detail is
368
- now reference-only.
369
- - A doc reloaded into agent context on many tasks carries more cold history
370
- than live guidance.
371
-
372
- Do **not** prune ADRs by archiving — an ADR that no longer holds is
373
- **superseded** in place (see [ADR Lifecycle](#adr-lifecycle)), keeping the
374
- numbered chain intact. Archiving is for the accreted history of living docs,
375
- not for the immutable decision record.
376
-
377
- ## Documentation for Agents
378
-
379
- Special consideration for AI agent context:
380
-
381
- - **CLAUDE.md / rules files** — Document project conventions so agents follow
382
- them
383
- - **Spec files** — Keep specs updated so agents build the right thing
384
- - **ADRs** — Help agents understand why past decisions were made (prevents
385
- re-deciding)
386
- - **Inline gotchas** — Prevent agents from falling into known traps
387
-
388
- ## Common Rationalizations
389
-
390
- | Rationalization | Reality |
391
- | ------------------------------------------ | ----------------------------------------------------------------------------------------------------- |
392
- | "The code is self-documenting" | Code shows what. It doesn't show why, what alternatives were rejected, or what constraints apply. |
393
- | "We'll write docs when the API stabilizes" | APIs stabilize faster when you document them. The doc is the first test of the design. |
394
- | "Nobody reads docs" | Agents do. Future engineers do. Your 3-months-later self does. |
395
- | "ADRs are overhead" | A 10-minute ADR prevents a 2-hour debate about the same decision six months later. |
396
- | "Comments get outdated" | Comments on _why_ are stable. Comments on _what_ get outdated — that's why you only write the former. |
397
-
398
- ## Red Flags
399
-
400
- - Architectural decisions with no written rationale
401
- - Public APIs with no documentation or types
402
- - README that doesn't explain how to run the project
403
- - Commented-out code instead of deletion
404
- - TODO comments that have been there for weeks
405
- - No ADRs in a project with significant architectural choices
406
- - Documentation that restates the code instead of explaining intent
407
-
408
- ## Verification
409
-
410
- After documenting:
411
-
412
- - [ ] ADRs exist for all significant architectural decisions
413
- - [ ] README covers quick start, commands, and architecture overview
414
- - [ ] API functions have parameter and return type documentation
415
- - [ ] Known gotchas are documented inline where they matter
416
- - [ ] No commented-out code remains
417
- - [ ] Rules files (CLAUDE.md etc.) are current and accurate
23
+ ## Long-form reference — read on demand
24
+
25
+ The capsule above is the contract and the whole always-read surface of this
26
+ skill. The long-form material behind it patterns, worked examples,
27
+ checklists, and rationalizations lives in the on-demand sibling
28
+ [`reference.md`](reference.md), matching the split the always-on rules already
29
+ use ([`rules/git-conventions.md`](../../../rules/git-conventions.md)
30
+ [`git-conventions-reference.md`](../../../rules/git-conventions-reference.md)).
31
+ Activating this skill costs the capsule; open a section below only when the
32
+ task actually engages it.
33
+
34
+ - [Overview](reference.md#overview)
35
+ - [When to Use](reference.md#when-to-use)
36
+ - [Architecture Decision Records (ADRs)](reference.md#architecture-decision-records-adrs)
37
+ - [Inline Documentation](reference.md#inline-documentation)
38
+ - [API Documentation](reference.md#api-documentation)
39
+ - [README Structure](reference.md#readme-structure)
40
+ - [Changelog Maintenance](reference.md#changelog-maintenance)
41
+ - [Pruning & Archiving](reference.md#pruning-archiving)
42
+ - [Documentation for Agents](reference.md#documentation-for-agents)
43
+ - [Common Rationalizations](reference.md#common-rationalizations)
44
+ - [Red Flags](reference.md#red-flags)
45
+ - [Verification](reference.md#verification)