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.
- package/.agents/README.md +59 -28
- package/.agents/agents/acceptance-critic.md +20 -9
- package/.agents/agents/story-worker.md +45 -48
- package/.agents/audit-checklists/performance.md +1 -1
- package/.agents/docs/SDLC.md +60 -46
- package/.agents/docs/agentrc-reference.json +8 -13
- package/.agents/docs/configuration.md +33 -57
- package/.agents/docs/execution-reference.md +39 -10
- package/.agents/docs/quality-gates.md +17 -19
- package/.agents/docs/workflows.md +6 -6
- package/.agents/instructions.md +64 -79
- package/.agents/rules/ci-remediation.md +3 -3
- package/.agents/rules/gherkin-standards.md +10 -0
- package/.agents/rules/git-conventions-reference.md +42 -51
- package/.agents/schemas/acceptance-eval-verdict.schema.json +2 -2
- package/.agents/schemas/agentrc.schema.json +35 -46
- package/.agents/schemas/audit-rules.json +59 -1
- package/.agents/schemas/audit-rules.schema.json +33 -1
- package/.agents/schemas/lifecycle/README.md +1 -2
- package/.agents/schemas/lifecycle/ledger-record.schema.json +1 -1
- package/.agents/schemas/lifecycle/merge.flip-failed.schema.json +33 -0
- package/.agents/schemas/lifecycle/merge.unlanded.schema.json +1 -0
- package/.agents/schemas/lifecycle/story.merged.schema.json +1 -1
- package/.agents/schemas/signal-event.schema.json +3 -3
- package/.agents/schemas/story-deliver-terminal.schema.json +152 -0
- package/.agents/schemas/validation-evidence.schema.json +1 -1
- package/.agents/scripts/acceptance-eval.js +24 -68
- package/.agents/scripts/agents-bootstrap-github.js +1 -1
- package/.agents/scripts/bootstrap.js +3 -3
- package/.agents/scripts/check-dead-exports.js +43 -104
- package/.agents/scripts/check-doc-links.js +2 -2
- package/.agents/scripts/check-lifecycle-lint.js +1 -1
- package/.agents/scripts/check-workflow-cli-lint.js +91 -0
- package/.agents/scripts/deliver-recover.js +122 -0
- package/.agents/scripts/drain-pending-cleanup.js +1 -1
- package/.agents/scripts/evidence-gate.js +20 -50
- package/.agents/scripts/generate-skills-index.js +17 -1
- package/.agents/scripts/generate-workflows-doc.js +4 -4
- package/.agents/scripts/lib/ITicketingProvider.js +1 -19
- package/.agents/scripts/lib/audit-suite/selector.js +323 -23
- package/.agents/scripts/lib/baselines/kinds/maintainability.js +0 -11
- package/.agents/scripts/lib/bootstrap/ci-workflow-template.js +28 -33
- package/.agents/scripts/lib/bootstrap/manifest.js +8 -11
- package/.agents/scripts/lib/bootstrap/project-bootstrap.js +30 -53
- package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +0 -2
- package/.agents/scripts/lib/checks/core-bare-clean.js +4 -1
- package/.agents/scripts/lib/checks/index.js +1 -1
- package/.agents/scripts/lib/checks/loop-health.js +12 -11
- package/.agents/scripts/lib/checks/state.js +17 -248
- package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +3 -3
- package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +3 -4
- package/.agents/scripts/lib/checks/worktree-bootstrap-env.js +2 -2
- package/.agents/scripts/lib/checks/worktree-residue-biome.js +3 -3
- package/.agents/scripts/lib/cli-args.js +23 -2
- package/.agents/scripts/lib/close-validation/gates.js +13 -13
- package/.agents/scripts/lib/close-validation/projections/inputs.js +7 -7
- package/.agents/scripts/lib/close-validation/projections/maintainability.js +12 -12
- package/.agents/scripts/lib/close-validation/runner.js +13 -21
- package/.agents/scripts/lib/close-validation/telemetry.js +17 -8
- package/.agents/scripts/lib/config/acceptance-eval.js +2 -2
- package/.agents/scripts/lib/config/delivery-routing.js +7 -6
- package/.agents/scripts/lib/config/explain.js +10 -16
- package/.agents/scripts/lib/config/github.js +7 -5
- package/.agents/scripts/lib/config/limits.js +15 -25
- package/.agents/scripts/lib/config/quality.js +11 -14
- package/.agents/scripts/lib/config/runners.js +8 -21
- package/.agents/scripts/lib/config/temp-paths.js +18 -56
- package/.agents/scripts/lib/config-settings-schema-delivery.js +34 -16
- package/.agents/scripts/lib/config-settings-schema-quality.js +9 -2
- package/.agents/scripts/lib/config-settings-schema.js +48 -22
- package/.agents/scripts/lib/dead-exports-knip.js +105 -0
- package/.agents/scripts/lib/dead-exports-mode.js +51 -0
- package/.agents/scripts/lib/duplicate-search.js +38 -7
- package/.agents/scripts/lib/findings/promote-finding.js +23 -14
- package/.agents/scripts/lib/format-generated-json.js +97 -0
- package/.agents/scripts/lib/framework-version.js +19 -189
- package/.agents/scripts/lib/gh-exec.js +8 -0
- package/.agents/scripts/lib/git-branch-lifecycle.js +0 -158
- package/.agents/scripts/lib/git-utils.js +0 -14
- package/.agents/scripts/lib/json-utils.js +1 -2
- package/.agents/scripts/lib/label-constants.js +0 -15
- package/.agents/scripts/lib/label-taxonomy.js +1 -12
- package/.agents/scripts/lib/observability/active-story-env.js +42 -163
- package/.agents/scripts/lib/observability/runtime-friction.js +243 -0
- package/.agents/scripts/lib/observability/signal-validator.js +4 -4
- package/.agents/scripts/lib/observability/signals-writer.js +6 -82
- package/.agents/scripts/lib/observability/source-classifier.js +2 -2
- package/.agents/scripts/lib/observability/tool-trace-hook.js +2 -12
- package/.agents/scripts/lib/orchestration/acceptance-clusters.js +1 -1
- package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +2 -2
- package/.agents/scripts/lib/orchestration/ceremony-routing.js +43 -45
- package/.agents/scripts/lib/orchestration/change-set.js +103 -0
- package/.agents/scripts/lib/orchestration/code-review.js +70 -191
- package/.agents/scripts/lib/orchestration/consolidation-precondition.js +3 -3
- package/.agents/scripts/lib/orchestration/deliver-recover.js +328 -0
- package/.agents/scripts/lib/orchestration/detectors-phase.js +12 -6
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +34 -0
- package/.agents/scripts/lib/orchestration/lease-guard-shared.js +3 -2
- package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +142 -0
- package/.agents/scripts/lib/orchestration/lifecycle/emit-loop-tick.js +9 -11
- package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +86 -0
- package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +37 -103
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/README.md +7 -3
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/watcher.js +50 -85
- package/.agents/scripts/lib/orchestration/lifecycle/trace-logger.js +3 -14
- package/.agents/scripts/lib/orchestration/merge-block-class.js +76 -20
- package/.agents/scripts/lib/orchestration/merge-poll.js +104 -0
- package/.agents/scripts/lib/orchestration/plan-context.js +116 -33
- package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +26 -36
- package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +31 -22
- package/.agents/scripts/lib/orchestration/plan-metrics.js +38 -6
- package/.agents/scripts/lib/orchestration/plan-persist/fan-out-gate.js +16 -6
- package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +173 -25
- package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +116 -0
- package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +280 -100
- package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +472 -55
- package/.agents/scripts/lib/orchestration/plan-persist/summary.js +21 -16
- package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +509 -0
- package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +230 -0
- package/.agents/scripts/lib/orchestration/planning/authoring-context.js +41 -40
- package/.agents/scripts/lib/orchestration/planning/decomposer-context.js +1 -2
- package/.agents/scripts/lib/orchestration/planning/spec-authoring-grounding.js +1 -1
- package/.agents/scripts/lib/orchestration/resolve-stories.js +344 -0
- package/.agents/scripts/lib/orchestration/retro-proposals.js +7 -7
- package/.agents/scripts/lib/orchestration/review-depth.js +105 -40
- package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +3 -13
- package/.agents/scripts/lib/orchestration/review-providers/native.js +1 -154
- package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +3 -2
- package/.agents/scripts/lib/orchestration/review-providers/security-review.js +1 -1
- package/.agents/scripts/lib/orchestration/review-providers/types.js +5 -4
- package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +1 -1
- package/.agents/scripts/lib/orchestration/run-epilogue.js +374 -16
- package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +24 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +11 -9
- package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +4 -4
- package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +4 -13
- package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +608 -152
- package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +72 -30
- package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +305 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +1 -1
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +12 -8
- package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +37 -4
- package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +2 -2
- package/.agents/scripts/lib/orchestration/single-story-close/runner.js +264 -43
- package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +1 -1
- package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +10 -10
- package/.agents/scripts/lib/orchestration/story-close/phases/code-review.js +104 -279
- package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +191 -0
- package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +120 -0
- package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +360 -0
- package/.agents/scripts/lib/orchestration/story-follow-ups.js +75 -14
- package/.agents/scripts/lib/orchestration/story-init-remote.js +12 -8
- package/.agents/scripts/lib/orchestration/story-plan-state.js +14 -29
- package/.agents/scripts/lib/orchestration/task-body-validator.js +52 -7
- package/.agents/scripts/lib/orchestration/ticket-lease.js +27 -74
- package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +119 -14
- package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +3 -4
- package/.agents/scripts/lib/orchestration/ticket-validator.js +121 -18
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +14 -47
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +19 -32
- package/.agents/scripts/lib/orchestration/ticketing/transition.js +61 -1
- package/.agents/scripts/lib/orchestration/ticketing.js +0 -1
- package/.agents/scripts/lib/plan-phase-cleanup.js +12 -14
- package/.agents/scripts/lib/planning-corpus.js +12 -286
- package/.agents/scripts/lib/preflight-runner.js +2 -2
- package/.agents/scripts/lib/qa/qa-context-hydrator.js +5 -5
- package/.agents/scripts/lib/signals/index.js +4 -17
- package/.agents/scripts/lib/signals/read.js +35 -35
- package/.agents/scripts/lib/signals/schema.js +8 -11
- package/.agents/scripts/lib/signals/span-tree.js +7 -7
- package/.agents/scripts/lib/signals/write.js +0 -1
- package/.agents/scripts/lib/single-story/story-merged-notify.js +13 -2
- package/.agents/scripts/lib/skills/parse-skill.js +16 -3
- package/.agents/scripts/lib/story-adjacency.js +8 -7
- package/.agents/scripts/lib/story-body/story-body.js +81 -13
- package/.agents/scripts/lib/templates/decomposer-prompts.js +15 -16
- package/.agents/scripts/lib/test-env.js +14 -1
- package/.agents/scripts/lib/test-tiers.js +0 -3
- package/.agents/scripts/lib/ticket-body-sections.js +0 -14
- package/.agents/scripts/lib/validation-evidence.js +31 -59
- package/.agents/scripts/lib/wave-runner/live-probe.js +315 -0
- package/.agents/scripts/lib/wave-runner/ready-set.js +32 -6
- package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +1 -1
- package/.agents/scripts/lib/worktree/lifecycle/reap.js +68 -19
- package/.agents/scripts/lib/worktree/lifecycle-manager.js +1 -2
- package/.agents/scripts/plan-context.js +38 -7
- package/.agents/scripts/plan-critics.js +203 -0
- package/.agents/scripts/plan-persist.js +145 -35
- package/.agents/scripts/plan-run-epilogue.js +83 -38
- package/.agents/scripts/post-structured-comment.js +0 -38
- package/.agents/scripts/pr-watch-with-update.js +43 -22
- package/.agents/scripts/providers/github/compose.js +0 -1
- package/.agents/scripts/providers/github/errors.js +0 -19
- package/.agents/scripts/providers/github/issues.js +1 -11
- package/.agents/scripts/providers/github/mappers.js +5 -0
- package/.agents/scripts/providers/github/sub-issues.js +0 -47
- package/.agents/scripts/providers/github/tickets.js +33 -153
- package/.agents/scripts/providers/github.js +17 -6
- package/.agents/scripts/quality-preview.js +13 -6
- package/.agents/scripts/resolve-stories.js +236 -0
- package/.agents/scripts/run-coverage.js +4 -1
- package/.agents/scripts/run-lint.js +2 -2
- package/.agents/scripts/run-verify.js +31 -2
- package/.agents/scripts/signals-view.js +9 -10
- package/.agents/scripts/single-story-close.js +173 -18
- package/.agents/scripts/single-story-confirm-merge.js +288 -15
- package/.agents/scripts/single-story-init.js +6 -10
- package/.agents/scripts/stories-wave-tick.js +380 -53
- package/.agents/scripts/story-plan.js +3 -3
- package/.agents/scripts/update-ticket-state.js +8 -50
- package/.agents/skills/core/code-review-and-quality/SKILL.md +28 -450
- package/.agents/skills/core/code-review-and-quality/reference.md +458 -0
- package/.agents/skills/core/debugging-and-error-recovery/SKILL.md +22 -315
- package/.agents/skills/core/debugging-and-error-recovery/reference.md +323 -0
- package/.agents/skills/core/diagnose-friction/SKILL.md +14 -18
- package/.agents/skills/core/documentation-and-adrs/SKILL.md +25 -397
- package/.agents/skills/core/documentation-and-adrs/reference.md +403 -0
- package/.agents/skills/core/gates-and-baselines/SKILL.md +12 -12
- package/.agents/skills/core/idea-refinement/SKILL.md +3 -3
- package/.agents/skills/core/scope-triage/SKILL.md +3 -0
- package/.agents/skills/core/security-and-hardening/SKILL.md +22 -367
- package/.agents/skills/core/security-and-hardening/reference.md +375 -0
- package/.agents/skills/skills.index.json +2 -12
- package/.agents/skills/stack/qa/playwright-bdd/SKILL.md +2 -4
- package/.agents/skills/stack/qa/qa-explore-driving/SKILL.md +1 -1
- package/.agents/skills/stack/qa/qa-harness/SKILL.md +1 -3
- package/.agents/workflows/audit-architecture.md +3 -4
- package/.agents/workflows/audit-clean-code.md +4 -4
- package/.agents/workflows/audit-documentation.md +4 -5
- package/.agents/workflows/audit-lighthouse.md +8 -0
- package/.agents/workflows/audit-navigability.md +10 -0
- package/.agents/workflows/audit-performance.md +2 -3
- package/.agents/workflows/audit-quality.md +8 -9
- package/.agents/workflows/audit-security.md +1 -2
- package/.agents/workflows/audit-seo.md +10 -0
- package/.agents/workflows/audit-ux-ui.md +7 -0
- package/.agents/workflows/deliver.md +133 -45
- package/.agents/workflows/git-cleanup.md +2 -2
- package/.agents/workflows/git-deliver.md +1 -1
- package/.agents/workflows/helpers/acceptance-self-eval.md +34 -17
- package/.agents/workflows/helpers/code-quality-guardrails.md +15 -12
- package/.agents/workflows/helpers/code-review.md +14 -12
- package/.agents/workflows/helpers/deliver-story-reference.md +73 -32
- package/.agents/workflows/helpers/deliver-story.md +209 -118
- package/.agents/workflows/helpers/parallel-tooling.md +2 -2
- package/.agents/workflows/helpers/worktree-lifecycle.md +28 -32
- package/.agents/workflows/plan.md +239 -19
- package/.agents/workflows/qa-assist.md +6 -6
- package/.agents/workflows/qa-explore.md +3 -3
- package/.agents/workflows/qa-run.md +1 -5
- package/bin/mandrel.js +12 -1
- package/docs/CHANGELOG.md +62 -0
- package/lib/cli/registry.js +262 -19
- package/lib/cli/sync-agents.js +157 -0
- package/lib/cli/sync-commands.js +115 -6
- package/lib/cli/sync.js +168 -6
- package/lib/cli/update.js +105 -8
- package/lib/cli/version-helpers.js +131 -0
- package/lib/migrations/README.md +7 -5
- package/lib/migrations/index.js +17 -9
- package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +100 -0
- package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +101 -0
- package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +154 -0
- package/package.json +2 -2
- package/.agents/schemas/epic-perf-report.schema.json +0 -89
- package/.agents/schemas/lifecycle/acceptance.reconcile.failed.schema.json +0 -13
- package/.agents/schemas/lifecycle/acceptance.reconcile.ok.schema.json +0 -13
- package/.agents/schemas/lifecycle/acceptance.reconcile.skipped.schema.json +0 -13
- package/.agents/schemas/lifecycle/acceptance.reconcile.start.schema.json +0 -12
- package/.agents/schemas/lifecycle/acceptance.reconcile.waived.schema.json +0 -13
- package/.agents/schemas/lifecycle/epic.automerge.end.schema.json +0 -15
- package/.agents/schemas/lifecycle/epic.automerge.start.schema.json +0 -13
- package/.agents/schemas/lifecycle/epic.blocked.schema.json +0 -13
- package/.agents/schemas/lifecycle/epic.cleanup.end.schema.json +0 -12
- package/.agents/schemas/lifecycle/epic.cleanup.start.schema.json +0 -12
- package/.agents/schemas/lifecycle/epic.close.end.schema.json +0 -12
- package/.agents/schemas/lifecycle/epic.complete.schema.json +0 -13
- package/.agents/schemas/lifecycle/epic.finalize.end.schema.json +0 -13
- package/.agents/schemas/lifecycle/epic.finalize.start.schema.json +0 -12
- package/.agents/schemas/lifecycle/epic.merge.armed.schema.json +0 -13
- package/.agents/schemas/lifecycle/epic.merge.blocked.schema.json +0 -14
- package/.agents/schemas/lifecycle/epic.merge.confirmed.schema.json +0 -17
- package/.agents/schemas/lifecycle/epic.merge.ready.schema.json +0 -15
- package/.agents/schemas/lifecycle/epic.plan.end.schema.json +0 -18
- package/.agents/schemas/lifecycle/epic.plan.start.schema.json +0 -12
- package/.agents/schemas/lifecycle/epic.snapshot.end.schema.json +0 -16
- package/.agents/schemas/lifecycle/epic.snapshot.start.schema.json +0 -12
- package/.agents/schemas/lifecycle/epic.watch.end.schema.json +0 -29
- package/.agents/schemas/lifecycle/epic.watch.start.schema.json +0 -16
- package/.agents/schemas/lifecycle/story.heartbeat.schema.json +0 -20
- package/.agents/schemas/risk-verdict.schema.json +0 -53
- package/.agents/schemas/story-perf-summary.schema.json +0 -73
- package/.agents/scripts/analyze-execution.js +0 -444
- package/.agents/scripts/check-prepush-recovery.js +0 -90
- package/.agents/scripts/lib/git-merge-orchestrator.js +0 -261
- package/.agents/scripts/lib/observability/baseline-refresh-rate.js +0 -221
- package/.agents/scripts/lib/observability/hook-heartbeat.js +0 -187
- package/.agents/scripts/lib/observability/perf-aggregator.js +0 -813
- package/.agents/scripts/lib/observability/perf-report-readers.js +0 -328
- package/.agents/scripts/lib/observability/perf-report-render.js +0 -182
- package/.agents/scripts/lib/orchestration/audit-lens-routing.js +0 -128
- package/.agents/scripts/lib/orchestration/bookkeeping-outbox.js +0 -273
- package/.agents/scripts/lib/orchestration/error-journal.js +0 -139
- package/.agents/scripts/lib/orchestration/lifecycle/emit-story-heartbeat.js +0 -155
- package/.agents/scripts/lib/orchestration/lifecycle/ledger-diff.js +0 -140
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/merge-watcher.js +0 -665
- package/.agents/scripts/lib/orchestration/plan-review-routing.js +0 -63
- package/.agents/scripts/lib/orchestration/planning/risk-verdict.js +0 -104
- package/.agents/scripts/lib/orchestration/planning-context-budget.js +0 -213
- package/.agents/scripts/lib/orchestration/planning-risk.js +0 -194
- package/.agents/scripts/lib/orchestration/post-merge/phases/branch-cleanup.js +0 -56
- package/.agents/scripts/lib/orchestration/post-merge/phases/dashboard-refresh.js +0 -21
- package/.agents/scripts/lib/orchestration/post-merge/phases/notification.js +0 -78
- package/.agents/scripts/lib/orchestration/post-merge/phases/temp-cleanup.js +0 -68
- package/.agents/scripts/lib/orchestration/post-merge/phases/ticket-closure.js +0 -118
- package/.agents/scripts/lib/orchestration/post-merge/phases/worktree-reap.js +0 -397
- package/.agents/scripts/lib/orchestration/preflight-cache.js +0 -187
- package/.agents/scripts/lib/orchestration/resolve-plan-run.js +0 -155
- package/.agents/scripts/lib/orchestration/retro-perf-heuristics.js +0 -275
- package/.agents/scripts/lib/orchestration/story-progress/story-run-progress-writer.js +0 -400
- package/.agents/scripts/lib/single-story/confirm-merge-follow-ups.js +0 -36
- package/.agents/scripts/resolve-plan-run.js +0 -117
- 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 --
|
|
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
|
|
23
|
-
- Do **not** post GitHub comments from this Skill. Friction is local NDJSON
|
|
24
|
-
- Categorize failures deterministically (rebase abort, test-suite name, lint category, etc.) so the
|
|
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
|
|
30
|
-
|
|
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
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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
|
|
57
|
-
|
|
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
|
-
--
|
|
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
|
|
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
|
|
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
|
-
##
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
-
|
|
37
|
-
-
|
|
38
|
-
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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)
|