mandrel 1.58.0 → 1.60.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 +100 -98
- package/.agents/docs/SDLC.md +140 -141
- package/.agents/docs/configuration.md +16 -16
- package/.agents/docs/workflows.md +7 -8
- package/.agents/instructions.md +12 -11
- package/.agents/personas/architect.md +1 -1
- package/.agents/personas/product.md +1 -1
- package/.agents/personas/project-manager.md +14 -14
- package/.agents/personas/technical-writer.md +1 -1
- package/.agents/rules/changelog-style.md +5 -5
- package/.agents/rules/git-conventions.md +3 -3
- package/.agents/schemas/agentrc.schema.json +3 -3
- package/.agents/schemas/audit-rules.json +20 -0
- package/.agents/schemas/dispatch-manifest.json +4 -4
- package/.agents/schemas/epic-spec.schema.json +15 -45
- package/.agents/schemas/lifecycle/README.md +1 -1
- package/.agents/schemas/lifecycle/story.dispatch.end.schema.json +1 -1
- package/.agents/schemas/lifecycle/story.dispatch.start.schema.json +1 -1
- package/.agents/schemas/lifecycle/story.heartbeat.schema.json +1 -1
- package/.agents/schemas/validation-evidence.schema.json +1 -1
- package/.agents/scripts/README.md +1 -1
- package/.agents/scripts/acceptance-eval.js +21 -4
- package/.agents/scripts/acceptance-spec-reconciler.js +2 -2
- package/.agents/scripts/analyze-execution.js +2 -2
- package/.agents/scripts/assert-branch.js +1 -3
- package/.agents/scripts/audit-to-stories.js +1 -1
- package/.agents/scripts/bootstrap.js +1 -1
- package/.agents/scripts/check-arch-cycles.js +360 -0
- package/.agents/scripts/check-doc-links.js +2 -3
- package/.agents/scripts/coverage-capture.js +24 -3
- package/.agents/scripts/diagnose-friction.js +1 -1
- package/.agents/scripts/dispatcher.js +2 -2
- package/.agents/scripts/drain-pending-cleanup.js +1 -1
- package/.agents/scripts/epic-audit-prepare.js +3 -3
- package/.agents/scripts/epic-deliver-note-intervention.js +2 -2
- package/.agents/scripts/epic-deliver-preflight.js +11 -9
- package/.agents/scripts/epic-deliver-prepare.js +13 -5
- package/.agents/scripts/epic-execute-record-wave.js +5 -5
- package/.agents/scripts/epic-plan-healthcheck.js +6 -10
- package/.agents/scripts/epic-plan-spec-validate.js +1 -1
- package/.agents/scripts/epic-reconcile.js +11 -29
- package/.agents/scripts/evidence-gate.js +2 -2
- package/.agents/scripts/generate-workflows-doc.js +1 -1
- package/.agents/scripts/git-rebase-and-resolve.js +1 -1
- package/.agents/scripts/hierarchy-gate.js +40 -24
- package/.agents/scripts/lib/ITicketingProvider.js +1 -1
- package/.agents/scripts/lib/audit-suite/selector.js +1 -1
- package/.agents/scripts/lib/audit-to-stories/seed-epic-from-findings.js +2 -2
- package/.agents/scripts/lib/baseline-snapshot.js +7 -7
- package/.agents/scripts/lib/baselines/kinds/coverage.js +33 -149
- package/.agents/scripts/lib/baselines/kinds/duplication.js +27 -116
- package/.agents/scripts/lib/baselines/kinds/kind-factory.js +192 -0
- package/.agents/scripts/lib/baselines/kinds/lighthouse.js +34 -133
- package/.agents/scripts/lib/baselines/kinds/maintainability.js +31 -124
- package/.agents/scripts/lib/baselines/kinds/mutation.js +25 -111
- package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +59 -0
- package/.agents/scripts/lib/baselines/maintainability-baseline-save.js +37 -0
- package/.agents/scripts/lib/baselines/writer.js +1 -1
- package/.agents/scripts/lib/bdd-runner-detect.js +1 -1
- package/.agents/scripts/lib/bdd-scenario-scanner.js +3 -3
- package/.agents/scripts/lib/bootstrap/baselines-layout-migration.js +1 -1
- package/.agents/scripts/lib/bootstrap/branch-protection.js +1 -1
- package/.agents/scripts/lib/bootstrap/ci-workflow-template.js +1 -1
- package/.agents/scripts/lib/bootstrap/commit-push.js +2 -2
- package/.agents/scripts/lib/close-validation/commands.js +188 -0
- package/.agents/scripts/lib/close-validation/gates.js +235 -0
- package/.agents/scripts/lib/close-validation/process.js +101 -0
- package/.agents/scripts/lib/close-validation/projections/maintainability.js +1 -1
- package/.agents/scripts/lib/close-validation/runner.js +325 -0
- package/.agents/scripts/lib/close-validation/telemetry.js +70 -0
- package/.agents/scripts/lib/codebase-snapshot.js +1 -1
- package/.agents/scripts/lib/config/explain.js +1 -1
- package/.agents/scripts/lib/config/quality.js +6 -6
- package/.agents/scripts/lib/config/runners.js +2 -2
- package/.agents/scripts/lib/config/runtime.js +1 -1
- package/.agents/scripts/lib/config/temp-paths.js +2 -2
- package/.agents/scripts/lib/config-resolver.js +2 -5
- package/.agents/scripts/lib/config-settings-schema-delivery.js +2 -2
- package/.agents/scripts/lib/config-settings-schema-quality.js +1 -1
- package/.agents/scripts/lib/config-settings-schema.js +3 -3
- package/.agents/scripts/lib/coverage-capture.js +147 -4
- package/.agents/scripts/lib/cpu-pool.js +14 -0
- package/.agents/scripts/lib/crap-utils.js +6 -11
- package/.agents/scripts/lib/duplicate-search.js +1 -1
- package/.agents/scripts/lib/dynamic-workflow/capability.js +1 -1
- package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +87 -0
- package/.agents/scripts/lib/epic-plan-clarity.js +1 -1
- package/.agents/scripts/lib/epic-plan-ideation.js +1 -1
- package/.agents/scripts/lib/feedback-loop/memory-freshness.js +1 -1
- package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +1 -1
- package/.agents/scripts/lib/findings/classify-finding.js +1 -1
- package/.agents/scripts/lib/findings/promote-finding.js +10 -10
- package/.agents/scripts/lib/git-utils.js +24 -22
- package/.agents/scripts/lib/label-constants.js +3 -4
- package/.agents/scripts/lib/label-taxonomy.js +3 -8
- package/.agents/scripts/lib/maintainability-engine.js +1 -1
- package/.agents/scripts/lib/maintainability-utils.js +4 -187
- package/.agents/scripts/lib/observability/perf-report-readers.js +32 -23
- package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +81 -7
- package/.agents/scripts/lib/orchestration/code-review.js +95 -82
- package/.agents/scripts/lib/orchestration/context-hydration-engine.js +8 -9
- package/.agents/scripts/lib/orchestration/dependency-analyzer.js +3 -3
- package/.agents/scripts/lib/orchestration/detectors-phase.js +2 -2
- package/.agents/scripts/lib/orchestration/dispatch-engine.js +30 -38
- package/.agents/scripts/lib/orchestration/dispatch-pipeline.js +14 -37
- package/.agents/scripts/lib/orchestration/epic-cleanup.js +1 -1
- package/.agents/scripts/lib/orchestration/epic-deliver-lease-guard.js +22 -22
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/creation.js +1 -1
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/dag.js +7 -21
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/diagnostics.js +3 -3
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/planning-artifacts.js +2 -2
- package/.agents/scripts/lib/orchestration/epic-plan-lease-guard.js +206 -58
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/drain.js +1 -1
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/plan-epic.js +27 -3
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/prompts.js +1 -1
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/run-spec-phase.js +28 -8
- package/.agents/scripts/lib/orchestration/epic-plan-state-store.js +1 -1
- package/.agents/scripts/lib/orchestration/epic-run-state-store.js +3 -3
- package/.agents/scripts/lib/orchestration/epic-runner/concurrency-gate.js +4 -4
- package/.agents/scripts/lib/orchestration/epic-runner/deliver-phases.js +3 -3
- package/.agents/scripts/lib/orchestration/epic-runner/phases/build-wave-dag.js +13 -41
- package/.agents/scripts/lib/orchestration/epic-runner/phases/snapshot.js +7 -7
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/composition.js +2 -3
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/signals.js +2 -8
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/transport.js +4 -4
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/component-drift.js +103 -0
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/crap-drift.js +22 -64
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/maintainability-drift.js +38 -76
- package/.agents/scripts/lib/orchestration/epic-runner/story-launcher.js +4 -4
- package/.agents/scripts/lib/orchestration/epic-runner/story-run-progress-writer.js +10 -10
- package/.agents/scripts/lib/orchestration/epic-runner/sub-agent-return.js +8 -20
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-apply.js +7 -15
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-diff.js +72 -41
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-ops.js +2 -4
- package/.agents/scripts/lib/orchestration/file-assumptions.js +6 -5
- package/.agents/scripts/lib/orchestration/finalize/close-planning-tickets.js +1 -1
- package/.agents/scripts/lib/orchestration/finalize/open-or-locate-pr.js +2 -2
- package/.agents/scripts/lib/orchestration/finalize/sanitize-skip-ci.js +1 -1
- package/.agents/scripts/lib/orchestration/lease-guard-shared.js +144 -0
- package/.agents/scripts/lib/orchestration/lifecycle/emit-story-dispatch-end.js +1 -1
- package/.agents/scripts/lib/orchestration/lifecycle/emit-story-heartbeat.js +3 -3
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/README.md +1 -1
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-armer.js +1 -1
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-predicate.js +1 -1
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/branch-cleaner.js +1 -1
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/finalizer.js +1 -1
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/index.js +1 -1
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/merge-watcher.js +1 -1
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/notify-dispatcher.js +1 -1
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/watcher.js +8 -8
- package/.agents/scripts/lib/orchestration/manifest-builder.js +5 -5
- package/.agents/scripts/lib/orchestration/parked-follow-ons.js +2 -2
- package/.agents/scripts/lib/orchestration/plan-runner/plan-router.js +5 -5
- package/.agents/scripts/lib/orchestration/post-merge/phases/notification.js +3 -3
- package/.agents/scripts/lib/orchestration/post-merge/phases/ticket-closure.js +3 -3
- package/.agents/scripts/lib/orchestration/post-merge/phases/worktree-reap.js +7 -7
- package/.agents/scripts/lib/orchestration/preflight-cache.js +36 -13
- package/.agents/scripts/lib/orchestration/recurring-failure-detector.js +1 -1
- package/.agents/scripts/lib/orchestration/retro/phases/compose-body.js +1 -1
- package/.agents/scripts/lib/orchestration/retro/phases/gather-signals.js +2 -2
- package/.agents/scripts/lib/orchestration/retro-runner.js +3 -3
- package/.agents/scripts/lib/orchestration/review-depth.js +1 -1
- package/.agents/scripts/lib/orchestration/review-providers/codex.js +5 -60
- package/.agents/scripts/lib/orchestration/review-providers/native.js +7 -6
- package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +105 -0
- package/.agents/scripts/lib/orchestration/review-providers/security-review.js +7 -59
- package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +2 -4
- package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +1 -1
- package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +1 -1
- package/.agents/scripts/lib/orchestration/single-story-close/runner.js +2 -4
- package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +32 -35
- package/.agents/scripts/lib/orchestration/skill-capsule-loader.js +1 -2
- package/.agents/scripts/lib/orchestration/spec-freshness.js +1 -1
- package/.agents/scripts/lib/orchestration/spec-renderer.js +36 -73
- package/.agents/scripts/lib/orchestration/spec-section-validator.js +1 -1
- package/.agents/scripts/lib/orchestration/story-close/auto-refresh-runner.js +451 -503
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/pre-merge-attribution.js +8 -2
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/refresh-commit.js +47 -2
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/regression-projection.js +2 -2
- package/.agents/scripts/lib/orchestration/story-close/baseline-friction-body.js +1 -1
- package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +358 -54
- package/.agents/scripts/lib/orchestration/story-close/phases/close.js +1 -1
- package/.agents/scripts/lib/orchestration/story-close/phases/gates.js +3 -2
- package/.agents/scripts/lib/orchestration/story-close/phases/locked-pipeline.js +32 -5
- package/.agents/scripts/lib/orchestration/story-close/post-merge-close.js +5 -18
- package/.agents/scripts/lib/orchestration/story-close/pre-merge-validation.js +3 -3
- package/.agents/scripts/lib/orchestration/story-close-recovery.js +33 -16
- package/.agents/scripts/lib/orchestration/story-reachability.js +47 -0
- package/.agents/scripts/lib/orchestration/task-body-validator.js +6 -6
- package/.agents/scripts/lib/orchestration/ticket-lease.js +1 -1
- package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +4 -35
- package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +1 -10
- package/.agents/scripts/lib/orchestration/ticket-validator.js +25 -70
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +44 -73
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +16 -7
- package/.agents/scripts/lib/orchestration/ticketing/state.js +53 -439
- package/.agents/scripts/lib/orchestration/ticketing/transition.js +471 -0
- package/.agents/scripts/lib/orchestration/ticketing.js +0 -1
- package/.agents/scripts/lib/orchestration/wave-record-notifications.js +3 -3
- package/.agents/scripts/lib/orchestration/wave-record-projection.js +2 -8
- package/.agents/scripts/lib/plan-phase-cleanup.js +1 -1
- package/.agents/scripts/lib/preflight-runner.js +1 -1
- package/.agents/scripts/lib/presentation/dispatch-manifest-render.js +4 -5
- package/.agents/scripts/lib/presentation/manifest-builder.js +28 -34
- package/.agents/scripts/lib/presentation/manifest-formatter.js +3 -4
- package/.agents/scripts/lib/presentation/manifest-helpers.js +1 -1
- package/.agents/scripts/lib/presentation/manifest-procedures.js +4 -4
- package/.agents/scripts/lib/presentation/manifest-render-waves.js +4 -23
- package/.agents/scripts/lib/presentation/manifest-renderer.js +1 -1
- package/.agents/scripts/lib/presentation/manifest-story-views.js +2 -11
- package/.agents/scripts/lib/project-root.js +17 -0
- package/.agents/scripts/lib/signals/schema.js +1 -1
- package/.agents/scripts/lib/spec/index.js +1 -1
- package/.agents/scripts/lib/spec/loader.js +2 -2
- package/.agents/scripts/lib/spec/state.js +7 -16
- package/.agents/scripts/lib/story-adjacency.js +76 -0
- package/.agents/scripts/lib/story-init/context-resolver.js +3 -3
- package/.agents/scripts/lib/story-init/state-transitioner.js +2 -2
- package/.agents/scripts/lib/story-init/task-graph-builder.js +7 -7
- package/.agents/scripts/lib/story-lifecycle.js +9 -9
- package/.agents/scripts/lib/story-plan.js +1 -1
- package/.agents/scripts/lib/templates/decomposer-prompts.js +59 -52
- package/.agents/scripts/lib/transpile.js +93 -0
- package/.agents/scripts/lib/wave-runner/tick.js +4 -153
- package/.agents/scripts/lib/workers/crap-worker.js +1 -1
- package/.agents/scripts/lib/workers/maintainability-report-worker.js +1 -1
- package/.agents/scripts/lib/worktree/lifecycle/creation.js +20 -2
- package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +90 -0
- package/.agents/scripts/lib/worktree/lifecycle/reap.js +26 -8
- package/.agents/scripts/lib/worktree/node-modules-strategy.js +74 -0
- package/.agents/scripts/lifecycle-emit-story-dispatch.js +1 -1
- package/.agents/scripts/lifecycle-emit.js +1 -1
- package/.agents/scripts/providers/github/board-add.js +1 -1
- package/.agents/scripts/providers/github/errors.js +1 -1
- package/.agents/scripts/providers/github/mappers.js +2 -2
- package/.agents/scripts/providers/github/tickets.js +114 -10
- package/.agents/scripts/resync-status-column.js +1 -1
- package/.agents/scripts/retro-run.js +2 -2
- package/.agents/scripts/run-lint.js +10 -1
- package/.agents/scripts/run-tests.js +24 -4
- package/.agents/scripts/single-story-init.js +1 -1
- package/.agents/scripts/stories-wave-tick.js +13 -10
- package/.agents/scripts/story-close.js +1 -1
- package/.agents/scripts/story-init.js +162 -26
- package/.agents/scripts/story-phase.js +5 -5
- package/.agents/scripts/story-plan.js +3 -3
- package/.agents/scripts/sync-branch-from-base.js +2 -2
- package/.agents/scripts/validate-docs-freshness.js +1 -1
- package/.agents/scripts/wave-tick.js +1 -1
- package/.agents/skills/core/analyze-execution/SKILL.md +2 -2
- package/.agents/skills/core/epic-plan-consolidate/SKILL.md +21 -26
- package/.agents/skills/core/epic-plan-decompose-author/SKILL.md +23 -56
- package/.agents/skills/core/epic-plan-spec-author/SKILL.md +4 -4
- package/.agents/skills/core/hydrate-context/SKILL.md +2 -2
- package/.agents/skills/core/idea-refinement/SKILL.md +4 -4
- package/.agents/skills/core/knowledge-transfer/SKILL.md +2 -2
- package/.agents/skills/core/planning-and-task-breakdown/SKILL.md +1 -1
- package/.agents/skills/core/scope-triage/SKILL.md +9 -10
- package/.agents/skills/core/using-agent-skills/SKILL.md +1 -1
- package/.agents/skills/skills.index.json +7 -7
- package/.agents/skills/stack/qa/lighthouse-baseline/SKILL.md +1 -1
- package/.agents/templates/agent-protocol.md +2 -2
- package/.agents/workflows/agents-update.md +2 -2
- package/.agents/workflows/audit-architecture.md +2 -2
- package/.agents/workflows/audit-clean-code.md +2 -2
- package/.agents/workflows/audit-dependencies.md +1 -1
- package/.agents/workflows/audit-devops.md +1 -1
- package/.agents/workflows/audit-documentation.md +226 -0
- package/.agents/workflows/audit-lighthouse.md +1 -1
- package/.agents/workflows/audit-performance.md +2 -2
- package/.agents/workflows/audit-privacy.md +1 -1
- package/.agents/workflows/audit-quality.md +2 -2
- package/.agents/workflows/audit-security.md +2 -2
- package/.agents/workflows/audit-seo.md +1 -1
- package/.agents/workflows/audit-sre.md +1 -1
- package/.agents/workflows/audit-to-stories.md +10 -10
- package/.agents/workflows/audit-ux-ui.md +1 -1
- package/.agents/workflows/deliver.md +85 -0
- package/.agents/workflows/explain.md +3 -3
- package/.agents/workflows/git-merge-pr.md +1 -1
- package/.agents/workflows/git-pr-all.md +13 -10
- package/.agents/workflows/git-push.md +6 -3
- package/.agents/workflows/helpers/_merge-conflict-template.md +1 -1
- package/.agents/workflows/helpers/acceptance-self-eval.md +1 -1
- package/.agents/workflows/helpers/code-review.md +5 -5
- package/.agents/workflows/{epic-deliver.md → helpers/deliver-epic.md} +59 -66
- package/.agents/workflows/{story-deliver.md → helpers/deliver-stories.md} +25 -25
- package/.agents/workflows/helpers/diagnose.md +1 -1
- package/.agents/workflows/helpers/epic-audit.md +6 -6
- package/.agents/workflows/helpers/epic-deliver-story.md +28 -39
- package/.agents/workflows/helpers/epic-plan-decompose.md +23 -23
- package/.agents/workflows/helpers/epic-plan-spec.md +6 -6
- package/.agents/workflows/helpers/epic-testing.md +3 -3
- package/.agents/workflows/helpers/parallel-tooling.md +1 -1
- package/.agents/workflows/{epic-plan.md → helpers/plan-epic.md} +84 -84
- package/.agents/workflows/{story-plan.md → helpers/plan-story.md} +43 -43
- package/.agents/workflows/helpers/signals.md +1 -1
- package/.agents/workflows/helpers/single-story-deliver.md +12 -11
- package/.agents/workflows/helpers/worktree-lifecycle.md +18 -18
- package/.agents/workflows/onboard.md +21 -20
- package/.agents/workflows/plan.md +89 -0
- package/.agents/workflows/qa-explore.md +1 -1
- package/.agents/workflows/qa-run-harness.md +1 -1
- package/README.md +17 -20
- package/docs/CHANGELOG.md +1149 -0
- package/lib/cli/__tests__/update-changelog-surface.test.js +357 -0
- package/lib/cli/__tests__/update-reexec.test.js +513 -0
- package/lib/cli/init.js +338 -0
- package/lib/cli/update.js +413 -52
- package/package.json +3 -1
- package/.agents/scripts/lib/auto-refresh-baselines.js +0 -308
- package/.agents/scripts/lib/close-validation.js +0 -897
- package/.agents/scripts/lib/orchestration/cascade-grouping.js +0 -275
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter.js +0 -69
- package/.agents/scripts/lib/orchestration/reconciler.js +0 -137
- package/.agents/scripts/lib/orchestration/story-close/format-autofix-scoped.js +0 -221
- package/.agents/scripts/lib/orchestration/story-close/format-autofix-shared.js +0 -123
- package/.agents/scripts/lib/task-utils.js +0 -26
- package/.agents/scripts/story-deliver-prepare.js +0 -267
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Audit the repository's main documentation for staleness, semantic drift, and completeness; emit a structured High/Medium/Low findings report.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Documentation Staleness & Completeness Audit
|
|
6
|
+
|
|
7
|
+
## Role
|
|
8
|
+
|
|
9
|
+
Staff Engineer & Documentation Steward
|
|
10
|
+
|
|
11
|
+
## Context & Objective
|
|
12
|
+
|
|
13
|
+
You are auditing the repository's primary prose documentation to verify it
|
|
14
|
+
is **up to date and complete**. Prose docs rot silently: commands get
|
|
15
|
+
renamed, scripts move, described workflows change shape, and
|
|
16
|
+
version/topology claims go stale. The deterministic gates
|
|
17
|
+
(`check-doc-links.js`, `check-lifecycle-doc-drift.js`,
|
|
18
|
+
`validate-docs-freshness.js`) catch broken links, drift against generators,
|
|
19
|
+
and Epic-scoped freshness — they cannot tell whether the prose still
|
|
20
|
+
describes how the code actually behaves. That semantic verification is this
|
|
21
|
+
lens's job.
|
|
22
|
+
|
|
23
|
+
## Target set (config-driven union)
|
|
24
|
+
|
|
25
|
+
The audit target set is **not** "all markdown in the repo". Build it as the
|
|
26
|
+
union of:
|
|
27
|
+
|
|
28
|
+
1. **`project.docsContextFiles`** from `.agentrc.json` (each entry resolved
|
|
29
|
+
against `project.paths.docsRoot`, default `docs/`; skip absent files
|
|
30
|
+
silently).
|
|
31
|
+
2. **`delivery.docsFreshness.paths`** from `.agentrc.json`.
|
|
32
|
+
3. **Conventional anchors:** the root `README.md`, `AGENTS.md` /
|
|
33
|
+
`CLAUDE.md`, `CONTRIBUTING.md` (when present), and top-level `docs/*.md`
|
|
34
|
+
(non-recursive).
|
|
35
|
+
4. **An explicit `--paths` override** — when the operator invokes the lens
|
|
36
|
+
with `--paths <file ...>`, add those files to the union. This is the
|
|
37
|
+
escape hatch for everything outside 1–3; there is no dedicated config
|
|
38
|
+
key for it.
|
|
39
|
+
|
|
40
|
+
**Generated docs are excluded from per-doc semantic review.** The output of
|
|
41
|
+
`generate-config-docs.js`, `generate-lifecycle-docs.js`, and
|
|
42
|
+
`generate-workflows-doc.js`, and the synced `.claude/commands/` mirrors, are
|
|
43
|
+
generator-owned: hand-editing them is never the remediation. Instead, Step 1
|
|
44
|
+
runs the generators' `--check` mode and emits a **single** "generator output
|
|
45
|
+
dirty" finding when their output is stale — the remediation is "rerun the
|
|
46
|
+
generator", not "edit the doc". Auto-generated changelog files
|
|
47
|
+
(`docs/CHANGELOG.md`, release-please-owned) are likewise excluded from
|
|
48
|
+
semantic review beyond Step 1's deterministic checks.
|
|
49
|
+
|
|
50
|
+
## Scope (Epic mode)
|
|
51
|
+
|
|
52
|
+
When this lens is invoked from `/deliver` Phase 4 (epic-audit), the
|
|
53
|
+
following block is populated with the Epic's change-set file list.
|
|
54
|
+
Otherwise — for any manual `/audit-<dimension>` invocation — the block
|
|
55
|
+
renders the literal substitution token and you MUST treat it as **no
|
|
56
|
+
scope filter — run the lens codebase-wide** exactly as you would have
|
|
57
|
+
before this section existed.
|
|
58
|
+
|
|
59
|
+
```text
|
|
60
|
+
{{changedFiles}}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
- If the block above contains a newline-delimited list of file paths,
|
|
64
|
+
restrict your analysis to the intersection of the target-set union and
|
|
65
|
+
those files — plus any target-set doc whose claims describe code in the
|
|
66
|
+
change set (a renamed script invalidates every doc that references it).
|
|
67
|
+
- If the block above renders as the literal string `{{changedFiles}}`
|
|
68
|
+
(i.e. no substitution was supplied), ignore this section entirely and
|
|
69
|
+
proceed with the full target-set audit defined in the remaining steps.
|
|
70
|
+
|
|
71
|
+
## Execution strategy (dual-path)
|
|
72
|
+
|
|
73
|
+
This lens runs along one of two execution paths. Both emit the **identical**
|
|
74
|
+
report contract (Step 3); downstream consumers (`/deliver` Phase 4
|
|
75
|
+
epic-audit, `audit-to-stories`) are agnostic to which path produced it.
|
|
76
|
+
|
|
77
|
+
- **Orchestrated (dynamic-workflow) path.** When Claude Code's
|
|
78
|
+
[dynamic workflows](https://code.claude.com/docs/en/workflows) are
|
|
79
|
+
available, the saved project workflow
|
|
80
|
+
`.claude/workflows/audit-documentation.workflow.js` fans the semantic
|
|
81
|
+
dimensions below out as parallel read-only subagents — each agent walks
|
|
82
|
+
the full target set per doc for its dimension — runs an **adversarial
|
|
83
|
+
verify** stage (an independent agent re-checks every stale-claim finding
|
|
84
|
+
against the current code and drops claims it cannot reproduce — doc
|
|
85
|
+
staleness is notoriously false-positive-prone), then synthesises the
|
|
86
|
+
Step 3 report. The orchestrator derives its per-dimension prompts from
|
|
87
|
+
*this* markdown at run time — the lens stays the single source of truth;
|
|
88
|
+
the script does not fork a second copy of the spec. Step 1's
|
|
89
|
+
deterministic checkers still run in the calling session (the analysis
|
|
90
|
+
subagents are read-only and cannot execute them); their results are
|
|
91
|
+
passed to the workflow as the `deterministicFindings` input and folded
|
|
92
|
+
into the synthesis.
|
|
93
|
+
- **Sequential (single-pass) path.** When dynamic workflows are unavailable,
|
|
94
|
+
follow Steps 1–3 below turn-by-turn exactly as before. This is the default
|
|
95
|
+
fallback and changes nothing about the existing behaviour.
|
|
96
|
+
|
|
97
|
+
**Strategy selection** is computed by
|
|
98
|
+
[`lib/dynamic-workflow/capability.js`](../scripts/lib/dynamic-workflow/capability.js)
|
|
99
|
+
(`selectAuditStrategy`). The orchestrated path is chosen only when the runtime
|
|
100
|
+
is Claude Code, `disableWorkflows` is not set (settings.json **or**
|
|
101
|
+
`CLAUDE_CODE_DISABLE_WORKFLOWS`), and the Claude Code version meets the
|
|
102
|
+
research-preview floor (`>= 2.1.154`). Any other runtime, a disabled setting,
|
|
103
|
+
or an older version degrades gracefully to the sequential path.
|
|
104
|
+
|
|
105
|
+
> **Capability degradation, not a contract shim.** This dual path is **not**
|
|
106
|
+
> covered by the No-Shim / hard-cutover rule in
|
|
107
|
+
> [`git-conventions.md`](../rules/git-conventions.md). That rule forbids
|
|
108
|
+
> running two shapes of the *same contract* side by side. Here there is **one**
|
|
109
|
+
> report contract; only the *execution strategy* is selected from a runtime
|
|
110
|
+
> capability — the same pattern the protocol already endorses for live-docs
|
|
111
|
+
> fallback in [`instructions.md` §1.C/§1.D](../instructions.md). The full
|
|
112
|
+
> capability-degradation rationale lives in the
|
|
113
|
+
> [`capability.js`](../scripts/lib/dynamic-workflow/capability.js) module
|
|
114
|
+
> docstring; the orchestrated-run evidence and per-lens cost/precision gate
|
|
115
|
+
> verdicts live in [`docs/roadmap.md`](../../docs/roadmap.md) (Part 3 —
|
|
116
|
+
> Dynamic-Workflow Orchestration).
|
|
117
|
+
|
|
118
|
+
**Forcing a path (for testing).** Set `MANDREL_AUDIT_STRATEGY=sequential` to
|
|
119
|
+
verify the fallback path with the feature notionally disabled, or
|
|
120
|
+
`MANDREL_AUDIT_STRATEGY=orchestrated` to pin the dynamic path. To exercise the
|
|
121
|
+
real disable signals instead, set `CLAUDE_CODE_DISABLE_WORKFLOWS=1` (env) or
|
|
122
|
+
`disableWorkflows: true` in `.claude/settings.json` and re-run the lens — both
|
|
123
|
+
degrade to the sequential path.
|
|
124
|
+
|
|
125
|
+
## Step 1: Deterministic Signal First
|
|
126
|
+
|
|
127
|
+
> Apply [`helpers/parallel-tooling.md`](helpers/parallel-tooling.md) when batching the scan below — independent reads belong in one turn, long shells run via `run_in_background` + `Monitor`.
|
|
128
|
+
|
|
129
|
+
Run the existing deterministic checkers before any semantic reading — they
|
|
130
|
+
are cheap, exact, and de-duplicate the easy findings:
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
node .agents/scripts/check-doc-links.js
|
|
134
|
+
node .agents/scripts/check-lifecycle-doc-drift.js
|
|
135
|
+
node .agents/scripts/generate-config-docs.js --check
|
|
136
|
+
node .agents/scripts/generate-lifecycle-docs.js --check
|
|
137
|
+
node .agents/scripts/generate-workflows-doc.js --check
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Fold the results in as findings:
|
|
141
|
+
|
|
142
|
+
- **Checker failures** (broken links, lifecycle drift) become individual
|
|
143
|
+
findings with `Category: Link Integrity` (or `Generator Drift` for the
|
|
144
|
+
lifecycle gate), citing the checker output verbatim.
|
|
145
|
+
- **Generator dirtiness** (any `--check` reporting stale output, including
|
|
146
|
+
a stale `.claude/commands/` mirror) becomes **one single finding** with
|
|
147
|
+
`Category: Generator Drift` — never per-line findings — whose
|
|
148
|
+
remediation is "rerun `npm run docs:gen` / `npm run sync:commands` and
|
|
149
|
+
commit the regenerated output".
|
|
150
|
+
|
|
151
|
+
This lens orchestrates the existing checkers only; it does not add new
|
|
152
|
+
deterministic checker scripts.
|
|
153
|
+
|
|
154
|
+
## Step 2: Semantic Claim Verification & Completeness
|
|
155
|
+
|
|
156
|
+
For every doc in the target set (minus the generated exclusions), verify
|
|
157
|
+
its claims against the code — read the doc, extract its testable claims,
|
|
158
|
+
and check each one:
|
|
159
|
+
|
|
160
|
+
1. **Command & Script References:** Every referenced npm script exists in
|
|
161
|
+
`package.json`; every referenced CLI command and
|
|
162
|
+
`node .agents/scripts/<name>.js` invocation resolves to a real script
|
|
163
|
+
with the documented flags.
|
|
164
|
+
2. **Path & Module References:** Every referenced file path, directory, and
|
|
165
|
+
module name exists at the stated location (account for moves and
|
|
166
|
+
renames).
|
|
167
|
+
3. **Workflow & Contract Descriptions:** Described workflows, label
|
|
168
|
+
taxonomies (`agent::*`, `type::*`, `meta::*`), branch shapes
|
|
169
|
+
(`story-<id>`, `epic/<id>`), and artifact contracts match how the
|
|
170
|
+
current scripts actually behave — read the implementation when the
|
|
171
|
+
prose makes a behavioural claim.
|
|
172
|
+
4. **Version & Topology Claims:** Version numbers, package names, release
|
|
173
|
+
topology, CI gate names, and tool-matrix claims are current.
|
|
174
|
+
5. **Completeness:** Major surfaces with no documentation coverage in the
|
|
175
|
+
target set — workflows under `.agents/workflows/`, operator-facing
|
|
176
|
+
scripts under `.agents/scripts/`, and config keys in
|
|
177
|
+
`.agents/schemas/agentrc.schema.json` that no target-set doc mentions.
|
|
178
|
+
Report material gaps, not an exhaustive index.
|
|
179
|
+
|
|
180
|
+
Severity guidance: **High** = the doc instructs something that no longer
|
|
181
|
+
works (wrong command, deleted script, contract mismatch); **Medium** =
|
|
182
|
+
materially outdated description or missing coverage of a major surface;
|
|
183
|
+
**Low** = cosmetic drift, stale examples, tone/format inconsistencies.
|
|
184
|
+
|
|
185
|
+
## Step 3: Output Requirements
|
|
186
|
+
|
|
187
|
+
Generate and save a highly structured Markdown audit report to
|
|
188
|
+
`{{auditOutputDir}}/audit-documentation-results.md`, using the exact
|
|
189
|
+
template below.
|
|
190
|
+
|
|
191
|
+
```markdown
|
|
192
|
+
# Documentation Audit Report
|
|
193
|
+
|
|
194
|
+
## Executive Summary
|
|
195
|
+
|
|
196
|
+
[Overview of documentation health (High/Medium/Low confidence that the docs
|
|
197
|
+
match the code), the deterministic-gate verdicts, and primary drift themes.]
|
|
198
|
+
|
|
199
|
+
## Target Set Coverage
|
|
200
|
+
|
|
201
|
+
| Doc | Source | Verdict |
|
|
202
|
+
| ------ | --------------------------------------------------------------------- | ------------------------------- |
|
|
203
|
+
| [path] | [docsContextFiles · docsFreshness · anchor · --paths] | [Current · Drifted · Excluded (generated)] |
|
|
204
|
+
|
|
205
|
+
## Detailed Findings
|
|
206
|
+
|
|
207
|
+
[For every gap identified, use the following strict structure:]
|
|
208
|
+
|
|
209
|
+
### [Short Title of the Issue]
|
|
210
|
+
|
|
211
|
+
- **Category:** [Broken Instruction | Stale Description | Missing Coverage | Generator Drift | Link Integrity]
|
|
212
|
+
- **Impact:** [High | Medium | Low]
|
|
213
|
+
- **Current State:** [The doc, the exact claim, and what the code actually
|
|
214
|
+
does — cite file paths and lines on both sides]
|
|
215
|
+
- **Recommendation & Rationale:** [The specific doc edit (or generator
|
|
216
|
+
rerun) and why it restores accuracy]
|
|
217
|
+
- **Agent Prompt:**
|
|
218
|
+
`[A copy-pasteable, highly specific prompt to execute this doc fix independently]`
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
## Constraint
|
|
222
|
+
|
|
223
|
+
This workflow is **read-only** with respect to the repository: run the
|
|
224
|
+
deterministic checkers in `--check` mode only, and do not edit any
|
|
225
|
+
documentation or code. The single write is the report artifact. Provide the
|
|
226
|
+
analysis and remediation prompts; do not apply changes.
|
|
@@ -31,7 +31,7 @@ inflate Performance scores misleadingly.
|
|
|
31
31
|
|
|
32
32
|
## Scope (Epic mode)
|
|
33
33
|
|
|
34
|
-
When this lens is invoked from `/
|
|
34
|
+
When this lens is invoked from `/deliver` Phase 4 (epic-audit), the
|
|
35
35
|
following block is populated with the Epic's change-set file list.
|
|
36
36
|
Otherwise — for any manual `/audit-<dimension>` invocation — the block
|
|
37
37
|
renders the literal substitution token and you MUST treat it as **no
|
|
@@ -16,7 +16,7 @@ load.
|
|
|
16
16
|
|
|
17
17
|
## Scope (Epic mode)
|
|
18
18
|
|
|
19
|
-
When this lens is invoked from `/
|
|
19
|
+
When this lens is invoked from `/deliver` Phase 4 (epic-audit), the
|
|
20
20
|
following block is populated with the Epic's change-set file list.
|
|
21
21
|
Otherwise — for any manual `/audit-<dimension>` invocation — the block
|
|
22
22
|
renders the literal substitution token and you MUST treat it as **no
|
|
@@ -38,7 +38,7 @@ before this section existed.
|
|
|
38
38
|
## Execution strategy (dual-path)
|
|
39
39
|
|
|
40
40
|
This lens runs along one of two execution paths. Both emit the **identical**
|
|
41
|
-
report contract (Step 3); downstream consumers (`/
|
|
41
|
+
report contract (Step 3); downstream consumers (`/deliver` Phase 4
|
|
42
42
|
epic-audit, `audit-to-stories`) are agnostic to which path produced it.
|
|
43
43
|
|
|
44
44
|
- **Orchestrated (dynamic-workflow) path.** When Claude Code's
|
|
@@ -17,7 +17,7 @@ insecure storage, or unnecessary collection of sensitive data.
|
|
|
17
17
|
|
|
18
18
|
## Scope (Epic mode)
|
|
19
19
|
|
|
20
|
-
When this lens is invoked from `/
|
|
20
|
+
When this lens is invoked from `/deliver` Phase 4 (epic-audit), the
|
|
21
21
|
following block is populated with the Epic's change-set file list.
|
|
22
22
|
Otherwise — for any manual `/audit-<dimension>` invocation — the block
|
|
23
23
|
renders the literal substitution token and you MUST treat it as **no
|
|
@@ -26,7 +26,7 @@ integrations, and test environment stability.
|
|
|
26
26
|
|
|
27
27
|
## Scope (Epic mode)
|
|
28
28
|
|
|
29
|
-
When this lens is invoked from `/
|
|
29
|
+
When this lens is invoked from `/deliver` Phase 4 (epic-audit), the
|
|
30
30
|
following block is populated with the Epic's change-set file list.
|
|
31
31
|
Otherwise — for any manual `/audit-<dimension>` invocation — the block
|
|
32
32
|
renders the literal substitution token and you MUST treat it as **no
|
|
@@ -48,7 +48,7 @@ before this section existed.
|
|
|
48
48
|
## Execution strategy (dual-path)
|
|
49
49
|
|
|
50
50
|
This lens runs along one of two execution paths. Both emit the **identical**
|
|
51
|
-
report contract (Step 3); downstream consumers (`/
|
|
51
|
+
report contract (Step 3); downstream consumers (`/deliver` Phase 4
|
|
52
52
|
epic-audit, `audit-to-stories`) are agnostic to which path produced it.
|
|
53
53
|
|
|
54
54
|
- **Orchestrated (dynamic-workflow) path.** When Claude Code's
|
|
@@ -16,7 +16,7 @@ potential attack vectors.
|
|
|
16
16
|
|
|
17
17
|
## Scope (Epic mode)
|
|
18
18
|
|
|
19
|
-
When this lens is invoked from `/
|
|
19
|
+
When this lens is invoked from `/deliver` Phase 4 (epic-audit), the
|
|
20
20
|
following block is populated with the Epic's change-set file list.
|
|
21
21
|
Otherwise — for any manual `/audit-<dimension>` invocation — the block
|
|
22
22
|
renders the literal substitution token and you MUST treat it as **no
|
|
@@ -38,7 +38,7 @@ before this section existed.
|
|
|
38
38
|
## Execution strategy (dual-path)
|
|
39
39
|
|
|
40
40
|
This lens runs along one of two execution paths. Both emit the **identical**
|
|
41
|
-
report contract (Step 3); downstream consumers (`/
|
|
41
|
+
report contract (Step 3); downstream consumers (`/deliver` Phase 4
|
|
42
42
|
epic-audit, `audit-to-stories`) are agnostic to which path produced it.
|
|
43
43
|
|
|
44
44
|
- **Orchestrated (dynamic-workflow) path.** When Claude Code's
|
|
@@ -20,7 +20,7 @@ indexes and AI-powered answer engines — without making any immediate changes.
|
|
|
20
20
|
|
|
21
21
|
## Scope (Epic mode)
|
|
22
22
|
|
|
23
|
-
When this lens is invoked from `/
|
|
23
|
+
When this lens is invoked from `/deliver` Phase 4 (epic-audit), the
|
|
24
24
|
following block is populated with the Epic's change-set file list.
|
|
25
25
|
Otherwise — for any manual `/audit-<dimension>` invocation — the block
|
|
26
26
|
renders the literal substitution token and you MUST treat it as **no
|
|
@@ -17,7 +17,7 @@ actionable report that can be handed off for remediation before deployment.
|
|
|
17
17
|
|
|
18
18
|
## Scope (Epic mode)
|
|
19
19
|
|
|
20
|
-
When this lens is invoked from `/
|
|
20
|
+
When this lens is invoked from `/deliver` Phase 4 (epic-audit), the
|
|
21
21
|
following block is populated with the Epic's change-set file list.
|
|
22
22
|
Otherwise — for any manual `/audit-<dimension>` invocation — the block
|
|
23
23
|
renders the literal substitution token and you MUST treat it as **no
|
|
@@ -3,7 +3,7 @@ description:
|
|
|
3
3
|
Convert findings produced by the audit-* workflows into actionable
|
|
4
4
|
GitHub Stories. Reads temp/audits/audit-*-results.md, groups findings
|
|
5
5
|
cross-audit, deduplicates against existing Issues by fingerprint, and
|
|
6
|
-
either chains into /
|
|
6
|
+
either chains into /plan --idea or opens standalone Stories.
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
# /audit-to-stories [audit-file-or-glob]
|
|
@@ -22,7 +22,7 @@ Dimension / Category, Current State, Recommendation, Agent Prompt).
|
|
|
22
22
|
`/audit-to-stories` closes the loop: it parses those reports, groups
|
|
23
23
|
related findings (including across audit dimensions), classifies each
|
|
24
24
|
group as eligible-to-create or already-tracked, and — at the operator's
|
|
25
|
-
choice — either chains into `/
|
|
25
|
+
choice — either chains into `/plan --idea` for a single planned
|
|
26
26
|
Epic or opens standalone Stories directly.
|
|
27
27
|
|
|
28
28
|
The audit producers themselves are **not modified** by this workflow.
|
|
@@ -117,8 +117,8 @@ Ask:
|
|
|
117
117
|
|
|
118
118
|
> How would you like these `<M>` Stories created?
|
|
119
119
|
>
|
|
120
|
-
> - **Single Epic via `/
|
|
121
|
-
> then chains into `/
|
|
120
|
+
> - **Single Epic via `/plan`** **[Recommended]** — opens one Epic,
|
|
121
|
+
> then chains into `/plan --idea` so the standard PRD / Tech Spec
|
|
122
122
|
> / WBS authoring handles decomposition. Grouped Stories become the
|
|
123
123
|
> seed for Phase 7 decomposition.
|
|
124
124
|
> - **Individual standalone Stories** — opens one GitHub Issue per
|
|
@@ -128,7 +128,7 @@ Ask:
|
|
|
128
128
|
|
|
129
129
|
## Phase 5a — Single-Epic path
|
|
130
130
|
|
|
131
|
-
Build the `/
|
|
131
|
+
Build the `/plan` idea seed from the filtered plan envelope:
|
|
132
132
|
|
|
133
133
|
```bash
|
|
134
134
|
node .agents/scripts/audit-to-stories.js --emit-epic-seed \
|
|
@@ -138,16 +138,16 @@ node .agents/scripts/audit-to-stories.js --emit-epic-seed \
|
|
|
138
138
|
|
|
139
139
|
The seed renders the canonical one-pager sections — Problem Statement,
|
|
140
140
|
Recommended Direction, Key Assumptions (with links to every source
|
|
141
|
-
report), MVP Scope (the M proposed Stories), Key Files (so `/
|
|
141
|
+
report), MVP Scope (the M proposed Stories), Key Files (so `/plan`
|
|
142
142
|
Phase 7 decompose has concrete anchors), Not Doing.
|
|
143
143
|
|
|
144
144
|
Chain into the existing planning entrypoint:
|
|
145
145
|
|
|
146
146
|
```text
|
|
147
|
-
/
|
|
147
|
+
/plan --idea "<path-to-seed>"
|
|
148
148
|
```
|
|
149
149
|
|
|
150
|
-
`/
|
|
150
|
+
`/plan` then runs ideation → duplicate-search → render Epic body
|
|
151
151
|
→ open Epic → Phase 7 / 8 decompose, as documented in its workflow.
|
|
152
152
|
Each Story it spawns from the seed carries `context::audit:
|
|
153
153
|
<reportLink>` and `audit-fingerprint: <sha>` in its body so future
|
|
@@ -225,7 +225,7 @@ summarising the run:
|
|
|
225
225
|
- Final tally: `"<M> groups planned · <K> created · <J> skipped (open)
|
|
226
226
|
· <L> skipped (re-occurring)"`.
|
|
227
227
|
|
|
228
|
-
When the Single-Epic path ran, link the Epic the chained `/
|
|
228
|
+
When the Single-Epic path ran, link the Epic the chained `/plan`
|
|
229
229
|
opened. When the Standalone-Stories path ran, list every Issue URL.
|
|
230
230
|
|
|
231
231
|
## Constraints
|
|
@@ -250,7 +250,7 @@ opened. When the Standalone-Stories path ran, list every Issue URL.
|
|
|
250
250
|
|
|
251
251
|
## See also
|
|
252
252
|
|
|
253
|
-
- [`/
|
|
253
|
+
- [`/plan`](helpers/plan-epic.md) — the planning pipeline `/audit-to-stories`
|
|
254
254
|
chains into for the Single-Epic grouping mode.
|
|
255
255
|
- [`lib/findings/route-finding.js`](../scripts/lib/findings/route-finding.js) —
|
|
256
256
|
the shared fingerprint/dedup/route helper this workflow and `qa-explore`
|
|
@@ -16,7 +16,7 @@ and cohesive.
|
|
|
16
16
|
|
|
17
17
|
## Scope (Epic mode)
|
|
18
18
|
|
|
19
|
-
When this lens is invoked from `/
|
|
19
|
+
When this lens is invoked from `/deliver` Phase 4 (epic-audit), the
|
|
20
20
|
following block is populated with the Epic's change-set file list.
|
|
21
21
|
Otherwise — for any manual `/audit-<dimension>` invocation — the block
|
|
22
22
|
renders the literal substitution token and you MUST treat it as **no
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
description:
|
|
3
|
+
Unified delivery entry point. Inspects the ticket type(s) and
|
|
4
|
+
Epic-reference state of the supplied IDs, then routes to the Epic wave
|
|
5
|
+
loop or the standalone multi-Story fan-out — preserving every flag and
|
|
6
|
+
the parallel-delivery contract of the retired commands.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# /deliver [Epic ID] | [Story IDs...]
|
|
10
|
+
|
|
11
|
+
## Role
|
|
12
|
+
|
|
13
|
+
Router. `/deliver` owns input classification and path selection only — all
|
|
14
|
+
phase content lives in the two path helpers:
|
|
15
|
+
|
|
16
|
+
- [`helpers/deliver-epic.md`](helpers/deliver-epic.md) — the full Epic
|
|
17
|
+
delivery loop (preflight, wave loop fanning out
|
|
18
|
+
[`helpers/epic-deliver-story`](helpers/epic-deliver-story.md),
|
|
19
|
+
close-validation, epic-audit, code-review, retro, finalize, watch,
|
|
20
|
+
auto-merge gate, cleanup).
|
|
21
|
+
- [`helpers/deliver-stories.md`](helpers/deliver-stories.md) — the
|
|
22
|
+
standalone multi-Story path (`stories-wave-tick.js` wave plan, operator
|
|
23
|
+
confirmation, parallel fan-out to
|
|
24
|
+
[`helpers/single-story-deliver`](helpers/single-story-deliver.md)).
|
|
25
|
+
|
|
26
|
+
## Input matrix (authoritative)
|
|
27
|
+
|
|
28
|
+
Fetch each supplied ID's labels and body (`type::*` label, `Epic: #N`
|
|
29
|
+
reference) before routing:
|
|
30
|
+
|
|
31
|
+
| Input | Route |
|
|
32
|
+
| --- | --- |
|
|
33
|
+
| Exactly one `type::epic` ID | **Epic path** — run [`helpers/deliver-epic.md`](helpers/deliver-epic.md) Phases 1–9 unchanged. |
|
|
34
|
+
| One or more `type::story` IDs, none carrying an `Epic: #N` reference | **Standalone path** — run [`helpers/deliver-stories.md`](helpers/deliver-stories.md) Phases 0–3. |
|
|
35
|
+
| Any Story carrying an `Epic: #N` reference | **Error**, naming the fix: `Story #<id> belongs to Epic #<n> — run /deliver <n>`. |
|
|
36
|
+
| Mixed Epic + Story IDs, or more than one Epic | **Error**: separate invocations — one `/deliver <epicId>` per Epic, one `/deliver <id> [<id>...]` for the standalone set. |
|
|
37
|
+
|
|
38
|
+
## Flags (forwarded per path)
|
|
39
|
+
|
|
40
|
+
| Path | Flags |
|
|
41
|
+
| --- | --- |
|
|
42
|
+
| Epic | `--skip-epic-audit`, `--skip-code-review`, `--skip-retro`, `--full-retro`, `--steal`, `--as <handle>` |
|
|
43
|
+
| Story | `--dep <from>:<to>`, `--yes`, `--concurrency <n>` |
|
|
44
|
+
|
|
45
|
+
A flag passed to the wrong path is reported once as a no-op warning and
|
|
46
|
+
ignored — never an error.
|
|
47
|
+
|
|
48
|
+
**Multi-Story parallel contract (preserved verbatim).**
|
|
49
|
+
|
|
50
|
+
```text
|
|
51
|
+
/deliver <id> <id> … --dep <from>:<to> --concurrency <n> --yes
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
behaves exactly as the retired multi-Story command did: the same
|
|
55
|
+
`stories-wave-tick.js` wave plan, the same operator confirmation gate
|
|
56
|
+
(suppressed by `--yes`), and the same parallel fan-out — one Agent call per
|
|
57
|
+
Story per wave, capped by the resolved `concurrencyCap` — to
|
|
58
|
+
[`helpers/single-story-deliver`](helpers/single-story-deliver.md).
|
|
59
|
+
|
|
60
|
+
## Procedure
|
|
61
|
+
|
|
62
|
+
1. **Parse args.** At least one positive-integer ID is required.
|
|
63
|
+
2. **Classify.** Fetch each ticket's labels + body and apply the input
|
|
64
|
+
matrix above. Refuse ambiguous input with the matrix's error messages —
|
|
65
|
+
never guess a route.
|
|
66
|
+
3. **Delegate.** Read the selected path helper **in full** and execute it
|
|
67
|
+
from its entry phase, forwarding the absorbed flags. The helper's phase
|
|
68
|
+
numbering, watchdogs, gates, and scripts are unchanged — this router
|
|
69
|
+
adds no phase content.
|
|
70
|
+
|
|
71
|
+
## Constraints
|
|
72
|
+
|
|
73
|
+
- `/deliver` requires a planned ticket: an Epic at `agent::ready` (the
|
|
74
|
+
Epic helper's preflight enforces this) or well-formed standalone Stories.
|
|
75
|
+
Planning happens in [`/plan`](plan.md); the plan-review gate between the
|
|
76
|
+
two commands is a hard boundary.
|
|
77
|
+
- The router performs no git or label mutations itself; the path helpers
|
|
78
|
+
own every script invocation.
|
|
79
|
+
|
|
80
|
+
## See also
|
|
81
|
+
|
|
82
|
+
- [`/plan`](plan.md) — the unified planning entry point.
|
|
83
|
+
- [`helpers/deliver-epic.md`](helpers/deliver-epic.md) /
|
|
84
|
+
[`helpers/deliver-stories.md`](helpers/deliver-stories.md) — the path
|
|
85
|
+
helpers.
|
|
@@ -14,7 +14,7 @@ description:
|
|
|
14
14
|
landed (or is about to) and you want to be sure you actually understand it —
|
|
15
15
|
the problem it solves, why it was solved this way, the design decisions, the
|
|
16
16
|
edge cases, and the blast radius. It is the after-the-fact counterpart to
|
|
17
|
-
[`/
|
|
17
|
+
[`/plan`](helpers/plan-epic.md) Phase 11 (which walks the operator through a
|
|
18
18
|
*plan* before delivery); both drive the same engine.
|
|
19
19
|
|
|
20
20
|
```text
|
|
@@ -39,7 +39,7 @@ contract.
|
|
|
39
39
|
| Understand a change that already merged | `/explain <PR#>` |
|
|
40
40
|
| Understand a branch before merging it | `/explain <branch>` |
|
|
41
41
|
| Understand what you are about to commit | `/explain --staged` |
|
|
42
|
-
| Understand a freshly planned Epic backlog | `/
|
|
42
|
+
| Understand a freshly planned Epic backlog | `/plan` Phase 11 (automatic) |
|
|
43
43
|
|
|
44
44
|
## Step 1 — Resolve the subject
|
|
45
45
|
|
|
@@ -111,7 +111,7 @@ structured-question mechanism when it sharpens understanding.
|
|
|
111
111
|
|
|
112
112
|
- [`core/knowledge-transfer`](../skills/core/knowledge-transfer/SKILL.md) —
|
|
113
113
|
the comprehension engine this command drives.
|
|
114
|
-
- [`/
|
|
114
|
+
- [`/plan`](helpers/plan-epic.md) — Phase 11 runs the same engine over a plan
|
|
115
115
|
before delivery.
|
|
116
116
|
- `/code-review` (Claude Code built-in) — correctness review of a diff. A
|
|
117
117
|
different concern: `/explain` builds *operator* understanding, not a defect
|
|
@@ -235,7 +235,7 @@ Merge the PR as a squash commit and delete the head branch. Call
|
|
|
235
235
|
|
|
236
236
|
After the merge command returns, perform a conflict marker scan to confirm no
|
|
237
237
|
stray markers entered the base branch. Delegate to `detect-merges.js` — it
|
|
238
|
-
owns the scan logic and is the same script used by `/
|
|
238
|
+
owns the scan logic and is the same script used by `/deliver` Phase 5.3.
|
|
239
239
|
|
|
240
240
|
```powershell
|
|
241
241
|
git checkout [BASE_BRANCH]
|
|
@@ -7,7 +7,7 @@ description: >-
|
|
|
7
7
|
# /git-pr-all [Message] [--draft] [--no-auto-merge] [--branch <name>] [--base <branch>]
|
|
8
8
|
|
|
9
9
|
This workflow is the **ad-hoc PR ergonomics** counterpart to the heavyweight
|
|
10
|
-
`/
|
|
10
|
+
`/deliver` pipeline. Use it when you have outstanding changes that do not
|
|
11
11
|
belong to a planned Epic (typo fixes, file deletions, doc tweaks, dependency
|
|
12
12
|
bumps, operator housekeeping) and you want a single command to take them from
|
|
13
13
|
the working tree to a PR queued for auto-merge.
|
|
@@ -19,7 +19,7 @@ names. Quality gates remain enforced by the existing pre-push hook; this
|
|
|
19
19
|
workflow does not bypass them.
|
|
20
20
|
|
|
21
21
|
> **When to run**: After making changes on `main` (or any base branch) that
|
|
22
|
-
> are too small or too out-of-band for `/
|
|
22
|
+
> are too small or too out-of-band for `/plan` + `/deliver` but
|
|
23
23
|
> still need to land via the PR-required flow.
|
|
24
24
|
>
|
|
25
25
|
> **Persona**: `devops-engineer` · **Skills**:
|
|
@@ -123,7 +123,7 @@ git add -A
|
|
|
123
123
|
|
|
124
124
|
> **Why `-A` and not explicit paths?** `/git-pr-all` is operator-driven
|
|
125
125
|
> (not parallel-agent-driven), so the single-tree assumption that
|
|
126
|
-
> blocks `git add .` inside `/
|
|
126
|
+
> blocks `git add .` inside `/deliver` does not apply here. See
|
|
127
127
|
> the parallel-execution warning at the bottom of this file.
|
|
128
128
|
|
|
129
129
|
Commit:
|
|
@@ -210,7 +210,7 @@ Print a single block to the operator:
|
|
|
210
210
|
auto-merge: <enabled | draft | disabled>
|
|
211
211
|
```
|
|
212
212
|
|
|
213
|
-
Do **not** poll CI. That is the `/
|
|
213
|
+
Do **not** poll CI. That is the `/deliver` Phase 7 job and is
|
|
214
214
|
overkill for ad-hoc changes. The operator (or GitHub's email
|
|
215
215
|
notification) is the next watcher.
|
|
216
216
|
|
|
@@ -253,13 +253,13 @@ notification) is the next watcher.
|
|
|
253
253
|
- **Never** force-push from `/git-pr-all`. This workflow is for opening
|
|
254
254
|
new PRs, not for rewriting history. Force-pushes belong to
|
|
255
255
|
`/git-merge-pr` (with `--force-with-lease` after a rebase) and
|
|
256
|
-
`/
|
|
256
|
+
`/deliver` Phase 7 (with the operator's explicit context).
|
|
257
257
|
- **Always** delete the head branch on merge (Step 6's
|
|
258
258
|
`--delete-branch` flag handles this for `--auto` mode; for
|
|
259
259
|
`--no-auto-merge` PRs the operator is responsible for the cleanup).
|
|
260
260
|
- **Always** prefer `--auto --squash --delete-branch` unless the
|
|
261
261
|
operator explicitly opts out. The squash + auto-merge default gives
|
|
262
|
-
the same merge ergonomics `/
|
|
262
|
+
the same merge ergonomics `/deliver` produces, so main's commit
|
|
263
263
|
history stays uniform across both surfaces.
|
|
264
264
|
|
|
265
265
|
---
|
|
@@ -267,11 +267,14 @@ notification) is the next watcher.
|
|
|
267
267
|
## ⚠️ Parallel Story Execution
|
|
268
268
|
|
|
269
269
|
Do **not** use this workflow from inside a parallel story-execution
|
|
270
|
-
context (`/
|
|
270
|
+
context (`/deliver #<storyId>`, `/deliver` wave dispatch).
|
|
271
271
|
`git add -A` sweeps any untracked files in the working tree, which in
|
|
272
|
-
a shared working directory may belong to another agent.
|
|
273
|
-
explicit
|
|
274
|
-
`
|
|
272
|
+
a shared working directory may belong to another agent. In those
|
|
273
|
+
contexts stage explicit paths only and confirm
|
|
274
|
+
`git branch --show-current` reports the expected `story-<id>` branch
|
|
275
|
+
before committing — see
|
|
276
|
+
[`helpers/worktree-lifecycle.md`](helpers/worktree-lifecycle.md) for the
|
|
277
|
+
shared-tree hazard and the worktree-isolation model that contains it.
|
|
275
278
|
|
|
276
279
|
The same warning applies to any workflow that calls `git add .` or
|
|
277
280
|
`git add -A`; this is not unique to `/git-pr-all` (see
|
|
@@ -54,7 +54,10 @@ attempting to commit or push again.
|
|
|
54
54
|
## ⚠️ Parallel Story Execution
|
|
55
55
|
|
|
56
56
|
Do **not** use this workflow from inside a parallel story-execution context
|
|
57
|
-
(`/
|
|
57
|
+
(`/deliver #<storyId>`). `git add .` sweeps any untracked files in the
|
|
58
58
|
working tree, which in a shared working directory may belong to another agent.
|
|
59
|
-
In that context,
|
|
60
|
-
|
|
59
|
+
In that context, stage explicit paths only and confirm
|
|
60
|
+
`git branch --show-current` reports the expected `story-<id>` branch before
|
|
61
|
+
committing — see
|
|
62
|
+
[`helpers/worktree-lifecycle.md`](helpers/worktree-lifecycle.md) for the
|
|
63
|
+
shared-tree hazard and the worktree-isolation model that contains it.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Merge Conflict Resolution — Shared Procedure
|
|
2
2
|
|
|
3
3
|
Canonical, workflow-agnostic procedure for resolving merge / rebase conflicts.
|
|
4
|
-
Referenced by `git-merge-pr.md`, `
|
|
4
|
+
Referenced by `git-merge-pr.md`, `deliver-stories.md`, and `deliver-epic.md`.
|
|
5
5
|
|
|
6
6
|
## Procedure
|
|
7
7
|
|
|
@@ -26,7 +26,7 @@ The loop is **always on** (a hard cutover — there is no flag to disable it) an
|
|
|
26
26
|
**bounded** by `delivery.acceptanceEval.maxRounds` (default 2), which the
|
|
27
27
|
resolver clamps into `[1, hard ceiling]` so the cap can never be switched off or
|
|
28
28
|
run unbounded. It is **distinct from** the Epic-level acceptance-spec
|
|
29
|
-
reconciliation in `/
|
|
29
|
+
reconciliation in `/deliver` Phase 7.1 (which fires once at finalize and
|
|
30
30
|
only checks `@ac-*` Gherkin tag presence): this loop is per-Story,
|
|
31
31
|
per-criterion, mid-delivery, and evaluates the actual work product.
|
|
32
32
|
|