mandrel 1.94.0 → 2.1.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 +116 -99
- package/.agents/agents/acceptance-critic.md +9 -7
- package/.agents/agents/story-worker.md +45 -51
- package/.agents/audit-checklists/performance.md +1 -1
- package/.agents/docs/SDLC.md +498 -1287
- package/.agents/docs/agentrc-reference.json +185 -80
- package/.agents/docs/configuration.md +132 -190
- package/.agents/docs/execution-reference.md +51 -25
- package/.agents/docs/quality-gates.md +25 -33
- package/.agents/docs/workflows.md +8 -8
- package/.agents/instructions.md +113 -139
- package/.agents/rules/ci-remediation.md +11 -15
- package/.agents/rules/git-conventions-reference.md +48 -58
- package/.agents/rules/git-conventions.md +16 -22
- package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
- package/.agents/schemas/agentrc.schema.json +83 -254
- 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/retro.end.schema.json +1 -1
- 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 +22 -66
- package/.agents/scripts/agents-bootstrap-github.js +1 -1
- package/.agents/scripts/audit-to-stories.js +7 -7
- package/.agents/scripts/boot-sweep.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 +7 -10
- package/.agents/scripts/check-workflow-cli-lint.js +91 -0
- package/.agents/scripts/cleanup-repo-test-temp.js +6 -1
- 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/Logger.js +6 -10
- package/.agents/scripts/lib/audit-suite/runner.js +2 -2
- package/.agents/scripts/lib/audit-suite/selector.js +328 -28
- package/.agents/scripts/lib/audit-to-stories/{seed-epic-from-findings.js → seed-from-findings.js} +9 -9
- package/.agents/scripts/lib/baselines/kernel.js +206 -18
- package/.agents/scripts/lib/baselines/kinds/maintainability.js +0 -15
- package/.agents/scripts/lib/baselines/reader.js +1 -6
- package/.agents/scripts/lib/bdd-runner-detect.js +5 -9
- package/.agents/scripts/lib/bootstrap/ci-workflow-template.js +28 -33
- package/.agents/scripts/lib/bootstrap/issue-forms-template.js +32 -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 +6 -3
- package/.agents/scripts/lib/checks/index.js +3 -2
- 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 +26 -24
- 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/standard-args.js +13 -22
- package/.agents/scripts/lib/cli-args.js +39 -9
- package/.agents/scripts/lib/close-validation/gates.js +15 -15
- 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/ci.js +6 -31
- package/.agents/scripts/lib/config/delivery-routing.js +52 -35
- package/.agents/scripts/lib/config/explain.js +61 -48
- package/.agents/scripts/lib/config/github.js +7 -5
- package/.agents/scripts/lib/config/limits.js +29 -80
- package/.agents/scripts/lib/config/paths.js +0 -2
- package/.agents/scripts/lib/config/quality.js +12 -15
- package/.agents/scripts/lib/config/runners.js +20 -66
- package/.agents/scripts/lib/config/temp-paths.js +30 -63
- package/.agents/scripts/lib/config/worktree-isolation.js +0 -5
- package/.agents/scripts/lib/config-resolver.js +2 -7
- package/.agents/scripts/lib/config-settings-schema-delivery.js +55 -161
- package/.agents/scripts/lib/config-settings-schema-quality.js +17 -16
- package/.agents/scripts/lib/config-settings-schema.js +100 -60
- package/.agents/scripts/lib/dead-exports-knip.js +105 -0
- package/.agents/scripts/lib/dead-exports-mode.js +51 -0
- package/.agents/scripts/lib/dependency-parser.js +3 -2
- package/.agents/scripts/lib/doc-tiers.js +2 -2
- package/.agents/scripts/lib/duplicate-search.js +242 -41
- package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +1 -1
- 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 -190
- package/.agents/scripts/lib/gh-exec.js +8 -0
- package/.agents/scripts/lib/git-branch-cleanup.js +1 -10
- package/.agents/scripts/lib/git-branch-lifecycle.js +17 -180
- package/.agents/scripts/lib/git-utils.js +32 -20
- package/.agents/scripts/lib/github/framework-repo.js +6 -0
- package/.agents/scripts/lib/json-utils.js +1 -2
- package/.agents/scripts/lib/label-constants.js +10 -38
- package/.agents/scripts/lib/label-taxonomy.js +10 -55
- package/.agents/scripts/lib/observability/active-story-env.js +44 -165
- 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 +5 -5
- package/.agents/scripts/lib/observability/tool-trace-hook.js +2 -12
- package/.agents/scripts/lib/onboard/init-tail.js +1 -3
- 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 +105 -44
- package/.agents/scripts/lib/orchestration/code-review.js +78 -436
- package/.agents/scripts/lib/orchestration/column-sync.js +1 -1
- package/.agents/scripts/lib/orchestration/consolidation-precondition.js +4 -4
- package/.agents/scripts/lib/orchestration/context-envelope.js +2 -5
- 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/docs-digest.js +8 -8
- package/.agents/scripts/lib/orchestration/file-assumptions.js +7 -13
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +1 -1
- 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 +17 -19
- 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/ledger-writer.js +6 -3
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/README.md +21 -43
- 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/lint-baseline-service.js +4 -4
- package/.agents/scripts/lib/orchestration/merge-block-class.js +77 -21
- package/.agents/scripts/lib/orchestration/merge-poll.js +104 -0
- package/.agents/scripts/lib/orchestration/phase-runner.js +3 -2
- package/.agents/scripts/lib/orchestration/plan-context.js +354 -282
- package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +11 -22
- package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +4 -8
- package/.agents/scripts/lib/orchestration/plan-metrics.js +38 -6
- package/.agents/scripts/lib/orchestration/plan-navigation.js +92 -0
- package/.agents/scripts/lib/orchestration/plan-persist/fan-out-gate.js +71 -0
- package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +245 -0
- package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +116 -0
- package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +432 -858
- package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +778 -0
- package/.agents/scripts/lib/orchestration/plan-persist/summary.js +47 -115
- package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +509 -0
- package/.agents/scripts/lib/orchestration/plan-reachability.js +9 -14
- package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +1 -1
- package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/authoring-context.js +52 -51
- package/.agents/scripts/lib/orchestration/planning/decomposer-context.js +27 -0
- package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/spec-authoring-grounding.js +1 -1
- package/.agents/scripts/lib/orchestration/pr-base-guard.js +18 -28
- package/.agents/scripts/lib/orchestration/remote-verifier.js +1 -1
- package/.agents/scripts/lib/orchestration/resolve-stories.js +344 -0
- package/.agents/scripts/lib/orchestration/resolves-token.js +1 -1
- package/.agents/scripts/lib/orchestration/retro-proposals.js +140 -79
- package/.agents/scripts/lib/orchestration/review-depth.js +126 -47
- package/.agents/scripts/lib/orchestration/review-providers/codex.js +2 -2
- 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/review-provider-factory.js +21 -56
- 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 +784 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +25 -1
- 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 +86 -41
- 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 +77 -32
- 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 +44 -0
- 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 +275 -46
- package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +1 -1
- package/.agents/scripts/lib/orchestration/spec-freshness.js +14 -205
- package/.agents/scripts/lib/orchestration/spec-section-validator.js +4 -5
- package/.agents/scripts/lib/orchestration/spec-spill.js +60 -0
- package/.agents/scripts/lib/orchestration/split-policy-validator.js +188 -0
- package/.agents/scripts/lib/orchestration/story-close/emit-blocked.js +49 -0
- package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +10 -10
- package/.agents/scripts/lib/orchestration/story-close/phases/code-review.js +28 -42
- package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +360 -0
- package/.agents/scripts/lib/orchestration/story-follow-ups.js +298 -0
- package/.agents/scripts/lib/orchestration/story-init-remote.js +51 -0
- package/.agents/scripts/lib/orchestration/story-plan-state.js +33 -0
- package/.agents/scripts/lib/orchestration/structured-comment-parser.js +1 -1
- package/.agents/scripts/lib/orchestration/task-body-validator.js +60 -25
- package/.agents/scripts/lib/orchestration/ticket-lease.js +27 -74
- package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +130 -75
- package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +192 -377
- package/.agents/scripts/lib/orchestration/ticket-validator.js +123 -25
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +14 -72
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +45 -55
- package/.agents/scripts/lib/orchestration/ticketing/transition.js +66 -6
- 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 -281
- package/.agents/scripts/lib/preflight-runner.js +4 -4
- package/.agents/scripts/lib/qa/coverage-verdict.js +5 -5
- 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/single-story-sweep/protection-ctx.js +1 -1
- package/.agents/scripts/lib/skills/parse-skill.js +16 -3
- package/.agents/scripts/lib/story-adjacency.js +17 -19
- package/.agents/scripts/lib/story-body/story-body.js +130 -75
- package/.agents/scripts/lib/story-plan.js +2 -4
- package/.agents/scripts/lib/templates/decomposer-prompts.js +51 -46
- package/.agents/scripts/lib/templates/spec-author-prompts.js +47 -45
- package/.agents/scripts/lib/test-env.js +14 -1
- package/.agents/scripts/lib/test-tiers.js +0 -3
- package/.agents/scripts/lib/{epic-body-sections.js → ticket-body-sections.js} +25 -39
- package/.agents/scripts/lib/validation-evidence.js +32 -60
- package/.agents/scripts/lib/wave-runner/ready-set.js +38 -12
- package/.agents/scripts/lib/workspace-provisioner.js +1 -1
- package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +1 -1
- package/.agents/scripts/lib/worktree/lifecycle/reap.js +72 -25
- package/.agents/scripts/lib/worktree/lifecycle-manager.js +1 -2
- package/.agents/scripts/lint-issue-body.js +71 -40
- package/.agents/scripts/mandrel-update-preflight.js +1 -1
- package/.agents/scripts/notify.js +4 -3
- package/.agents/scripts/plan-context.js +102 -80
- package/.agents/scripts/plan-persist.js +230 -279
- package/.agents/scripts/plan-run-epilogue.js +142 -0
- 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 +13 -39
- package/.agents/scripts/providers/github/mappers.js +5 -12
- package/.agents/scripts/providers/github/sub-issues.js +0 -47
- package/.agents/scripts/providers/github/tickets.js +33 -156
- package/.agents/scripts/providers/github.js +17 -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 +25 -21
- package/.agents/scripts/single-story-close.js +178 -26
- package/.agents/scripts/single-story-confirm-merge.js +313 -24
- package/.agents/scripts/single-story-init.js +35 -30
- package/.agents/scripts/stories-wave-tick.js +85 -10
- package/.agents/scripts/story-plan.js +28 -49
- package/.agents/scripts/update-ticket-state.js +14 -65
- 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 +9 -9
- package/.agents/skills/core/scope-triage/SKILL.md +31 -172
- 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 +3 -53
- 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/starter-agentrc.json +0 -5
- package/.agents/templates/agent-protocol.md +9 -10
- package/.agents/workflows/audit-architecture.md +6 -7
- package/.agents/workflows/audit-clean-code.md +7 -7
- package/.agents/workflows/audit-dependencies.md +3 -3
- package/.agents/workflows/audit-devops.md +3 -3
- package/.agents/workflows/audit-documentation.md +9 -10
- package/.agents/workflows/audit-lighthouse.md +11 -3
- package/.agents/workflows/audit-navigability.md +13 -2
- package/.agents/workflows/audit-performance.md +5 -6
- package/.agents/workflows/audit-privacy.md +3 -3
- package/.agents/workflows/audit-quality.md +11 -12
- package/.agents/workflows/audit-security.md +4 -5
- package/.agents/workflows/audit-seo.md +13 -3
- package/.agents/workflows/audit-sre.md +3 -3
- package/.agents/workflows/audit-to-stories.md +20 -20
- package/.agents/workflows/audit-ux-ui.md +10 -3
- package/.agents/workflows/deliver.md +177 -176
- package/.agents/workflows/git-cleanup.md +5 -6
- package/.agents/workflows/git-deliver.md +1 -1
- package/.agents/workflows/helpers/_merge-conflict-template.md +1 -1
- package/.agents/workflows/helpers/acceptance-self-eval.md +35 -40
- package/.agents/workflows/helpers/code-quality-guardrails.md +7 -7
- package/.agents/workflows/helpers/code-review.md +75 -196
- package/.agents/workflows/helpers/{single-story-deliver-reference.md → deliver-story-reference.md} +83 -44
- package/.agents/workflows/helpers/deliver-story.md +606 -0
- package/.agents/workflows/helpers/diagnose.md +10 -10
- package/.agents/workflows/helpers/parallel-tooling.md +3 -3
- package/.agents/workflows/helpers/signals.md +16 -16
- package/.agents/workflows/helpers/worktree-lifecycle.md +66 -86
- package/.agents/workflows/mandrel-update.md +2 -1
- package/.agents/workflows/plan.md +277 -145
- package/.agents/workflows/qa-assist.md +27 -33
- package/.agents/workflows/qa-explore.md +29 -38
- package/.agents/workflows/qa-run.md +2 -6
- package/README.md +9 -8
- package/bin/mandrel.js +12 -1
- package/docs/CHANGELOG.md +70 -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 +12 -8
- 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/package.json +2 -2
- package/.agents/agents/retro.md +0 -42
- package/.agents/personas/architect.md +0 -113
- package/.agents/personas/devops-engineer.md +0 -38
- package/.agents/personas/engineer.md +0 -33
- package/.agents/personas/project-manager.md +0 -114
- package/.agents/personas/qa-engineer.md +0 -95
- package/.agents/personas/security-engineer.md +0 -111
- package/.agents/personas/technical-writer.md +0 -101
- package/.agents/schemas/dispatch-manifest.json +0 -232
- package/.agents/schemas/epic-perf-report.schema.json +0 -89
- package/.agents/schemas/epic-spec.schema.json +0 -153
- 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/slice.end.schema.json +0 -21
- package/.agents/schemas/lifecycle/slice.heartbeat.schema.json +0 -20
- package/.agents/schemas/lifecycle/slice.start.schema.json +0 -17
- package/.agents/schemas/lifecycle/story.heartbeat.schema.json +0 -20
- package/.agents/schemas/risk-verdict.schema.json +0 -66
- package/.agents/schemas/story-perf-summary.schema.json +0 -73
- package/.agents/scripts/acceptance-spec-reconciler.js +0 -642
- package/.agents/scripts/analyze-execution.js +0 -444
- package/.agents/scripts/bookkeeping-reconcile.js +0 -117
- package/.agents/scripts/check-prepush-recovery.js +0 -90
- package/.agents/scripts/dispatcher.js +0 -295
- package/.agents/scripts/epic-audit-prepare.js +0 -497
- package/.agents/scripts/epic-audit-recheck.js +0 -274
- package/.agents/scripts/epic-deliver-note-intervention.js +0 -192
- package/.agents/scripts/epic-deliver-preflight.js +0 -462
- package/.agents/scripts/epic-deliver-prepare.js +0 -852
- package/.agents/scripts/epic-execute-record-wave.js +0 -449
- package/.agents/scripts/epic-plan-clarity.js +0 -211
- package/.agents/scripts/epic-plan-healthcheck.js +0 -581
- package/.agents/scripts/epic-reconcile.js +0 -625
- package/.agents/scripts/lib/baseline-snapshot.js +0 -979
- package/.agents/scripts/lib/checks/epic-merge-lock-stale.js +0 -54
- package/.agents/scripts/lib/checks/stale-origin-epic.js +0 -49
- package/.agents/scripts/lib/config/lifecycle.js +0 -40
- package/.agents/scripts/lib/config/preflight.js +0 -58
- package/.agents/scripts/lib/config/retro.js +0 -77
- package/.agents/scripts/lib/epic-merge-lock.js +0 -322
- package/.agents/scripts/lib/epic-plan-clarity.js +0 -181
- package/.agents/scripts/lib/epic-plan-ideation.js +0 -261
- 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 -219
- 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/bookkeeping-outbox.js +0 -270
- package/.agents/scripts/lib/orchestration/context-hydration-engine.js +0 -539
- package/.agents/scripts/lib/orchestration/deliver-route.js +0 -173
- package/.agents/scripts/lib/orchestration/dispatch-engine.js +0 -134
- package/.agents/scripts/lib/orchestration/dispatch-pipeline.js +0 -183
- package/.agents/scripts/lib/orchestration/epic-cleanup.js +0 -801
- package/.agents/scripts/lib/orchestration/epic-deliver-lease-guard.js +0 -310
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/context.js +0 -163
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/creation.js +0 -140
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/dag.js +0 -64
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/diagnostics.js +0 -72
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist-helpers.js +0 -156
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist.js +0 -345
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/planning-artifacts.js +0 -41
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/reconcile-spawn.js +0 -86
- package/.agents/scripts/lib/orchestration/epic-plan-lease-guard.js +0 -391
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/drain.js +0 -94
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/plan-epic.js +0 -236
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/risk-verdict.js +0 -105
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/run-spec-phase.js +0 -307
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/spec-freshness.js +0 -117
- package/.agents/scripts/lib/orchestration/epic-plan-state-store.js +0 -117
- package/.agents/scripts/lib/orchestration/epic-run-state-store.js +0 -621
- package/.agents/scripts/lib/orchestration/epic-runner/concurrency-gate.js +0 -186
- package/.agents/scripts/lib/orchestration/epic-runner/deliver-phases.js +0 -50
- package/.agents/scripts/lib/orchestration/epic-runner/phases/build-wave-dag.js +0 -129
- package/.agents/scripts/lib/orchestration/epic-runner/phases/snapshot.js +0 -103
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/composition.js +0 -267
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/signals.js +0 -210
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/transport.js +0 -238
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/_bullet-format.js +0 -32
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/component-drift.js +0 -203
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/crap-drift.js +0 -227
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/maintainability-drift.js +0 -117
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/stalled-worktree.js +0 -37
- package/.agents/scripts/lib/orchestration/epic-runner/story-launcher.js +0 -127
- package/.agents/scripts/lib/orchestration/epic-runner/story-run-progress-writer.js +0 -400
- package/.agents/scripts/lib/orchestration/epic-runner/sub-agent-return.js +0 -276
- package/.agents/scripts/lib/orchestration/epic-runner/wave-scheduler.js +0 -66
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-apply.js +0 -789
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-diff.js +0 -676
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-discriminator.js +0 -389
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-format.js +0 -230
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-ops.js +0 -361
- package/.agents/scripts/lib/orchestration/error-journal.js +0 -139
- package/.agents/scripts/lib/orchestration/finalize/open-or-locate-pr.js +0 -306
- package/.agents/scripts/lib/orchestration/finalize/post-handoff-comment.js +0 -489
- package/.agents/scripts/lib/orchestration/finalize/sanitize-skip-ci.js +0 -88
- package/.agents/scripts/lib/orchestration/lifecycle/emit-slice-lifecycle.js +0 -270
- package/.agents/scripts/lib/orchestration/lifecycle/emit-story-dispatch-end.js +0 -147
- 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/acceptance-reconciler.js +0 -465
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-armer.js +0 -501
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-predicate.js +0 -984
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/branch-cleaner.js +0 -264
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/checkpoint-pointer-writer.js +0 -284
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/cleaner.js +0 -355
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/finalizer.js +0 -673
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/index.js +0 -378
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/intervention-recorder.js +0 -140
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/label-transitioner.js +0 -144
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/merge-watcher.js +0 -665
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/notify-dispatcher.js +0 -174
- package/.agents/scripts/lib/orchestration/manifest-builder.js +0 -222
- package/.agents/scripts/lib/orchestration/plan-persist/amend.js +0 -359
- package/.agents/scripts/lib/orchestration/plan-persist/delivery-mode.js +0 -127
- package/.agents/scripts/lib/orchestration/plan-review-routing.js +0 -63
- 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 -33
- 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 -396
- package/.agents/scripts/lib/orchestration/post-merge-pipeline.js +0 -205
- package/.agents/scripts/lib/orchestration/preflight-cache.js +0 -187
- package/.agents/scripts/lib/orchestration/recurring-failure-detector.js +0 -152
- package/.agents/scripts/lib/orchestration/retro/phases/checks.js +0 -94
- package/.agents/scripts/lib/orchestration/retro/phases/compose-body.js +0 -571
- package/.agents/scripts/lib/orchestration/retro/phases/gather-signals.js +0 -450
- package/.agents/scripts/lib/orchestration/retro/phases/post-and-mirror.js +0 -191
- package/.agents/scripts/lib/orchestration/retro-heuristics.js +0 -57
- package/.agents/scripts/lib/orchestration/retro-perf-heuristics.js +0 -275
- package/.agents/scripts/lib/orchestration/retro-runner.js +0 -197
- package/.agents/scripts/lib/orchestration/spec-renderer.js +0 -447
- package/.agents/scripts/lib/orchestration/story-close/auto-refresh-runner.js +0 -747
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/gate-failure.js +0 -211
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/pre-merge-attribution.js +0 -158
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/refresh-commit.js +0 -446
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/regression-projection.js +0 -297
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/scope-discovery.js +0 -48
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution-wiring.js +0 -67
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution.js +0 -161
- package/.agents/scripts/lib/orchestration/story-close/baseline-friction-body.js +0 -117
- package/.agents/scripts/lib/orchestration/story-close/cd-out-guard.js +0 -86
- package/.agents/scripts/lib/orchestration/story-close/cleanup-reconciler.js +0 -147
- package/.agents/scripts/lib/orchestration/story-close/close-inputs.js +0 -142
- package/.agents/scripts/lib/orchestration/story-close/comment-bodies.js +0 -62
- package/.agents/scripts/lib/orchestration/story-close/merge-runner.js +0 -658
- package/.agents/scripts/lib/orchestration/story-close/merge-subject.js +0 -198
- package/.agents/scripts/lib/orchestration/story-close/phases/branch-restore.js +0 -105
- package/.agents/scripts/lib/orchestration/story-close/phases/close.js +0 -222
- package/.agents/scripts/lib/orchestration/story-close/phases/gates.js +0 -292
- package/.agents/scripts/lib/orchestration/story-close/phases/locked-pipeline.js +0 -270
- package/.agents/scripts/lib/orchestration/story-close/phases/preflight.js +0 -110
- package/.agents/scripts/lib/orchestration/story-close/phases/refresh.js +0 -86
- package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked-emitter.js +0 -112
- package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked.js +0 -157
- package/.agents/scripts/lib/orchestration/story-close/post-merge-close.js +0 -421
- package/.agents/scripts/lib/orchestration/story-close/pre-merge-validation.js +0 -302
- package/.agents/scripts/lib/orchestration/story-close/shared-checkout-guard.js +0 -163
- package/.agents/scripts/lib/orchestration/story-close-recovery.js +0 -690
- package/.agents/scripts/lib/orchestration/wave-marker.js +0 -28
- package/.agents/scripts/lib/orchestration/wave-record-io.js +0 -218
- package/.agents/scripts/lib/orchestration/wave-record-notifications.js +0 -145
- package/.agents/scripts/lib/orchestration/wave-record-projection.js +0 -212
- package/.agents/scripts/lib/presentation/dispatch-manifest-render.js +0 -111
- package/.agents/scripts/lib/presentation/manifest-builder.js +0 -239
- package/.agents/scripts/lib/presentation/manifest-formatter.js +0 -242
- package/.agents/scripts/lib/presentation/manifest-helpers.js +0 -213
- package/.agents/scripts/lib/presentation/manifest-persistence.js +0 -261
- package/.agents/scripts/lib/presentation/manifest-procedures.js +0 -55
- package/.agents/scripts/lib/presentation/manifest-render-waves.js +0 -306
- package/.agents/scripts/lib/presentation/manifest-renderer.js +0 -188
- package/.agents/scripts/lib/presentation/manifest-story-views.js +0 -110
- package/.agents/scripts/lib/push-epic-retry.js +0 -209
- package/.agents/scripts/lib/spec/index.js +0 -36
- package/.agents/scripts/lib/spec/loader.js +0 -425
- package/.agents/scripts/lib/spec/state.js +0 -208
- package/.agents/scripts/lib/story-init/blocker-validator.js +0 -68
- package/.agents/scripts/lib/story-init/branch-initializer.js +0 -408
- package/.agents/scripts/lib/story-init/context-resolver.js +0 -92
- package/.agents/scripts/lib/story-init/donor-precheck.js +0 -207
- package/.agents/scripts/lib/story-init/state-transitioner.js +0 -80
- package/.agents/scripts/lib/story-init/task-graph-builder.js +0 -124
- package/.agents/scripts/lib/story-init/transition-summary.js +0 -34
- package/.agents/scripts/lib/test-reserved-epic-temp-ids.js +0 -35
- package/.agents/scripts/lib/wave-runner/tick.js +0 -754
- package/.agents/scripts/lib/wave-runner/wave-runner-error.js +0 -20
- package/.agents/scripts/lifecycle-emit-story-dispatch.js +0 -194
- package/.agents/scripts/lifecycle-emit.js +0 -510
- package/.agents/scripts/retro-run.js +0 -218
- package/.agents/scripts/slice-phase.js +0 -361
- package/.agents/scripts/standalone-feedback-rollup.js +0 -188
- package/.agents/scripts/story-close.js +0 -294
- package/.agents/scripts/story-init.js +0 -599
- package/.agents/scripts/story-phase.js +0 -369
- package/.agents/scripts/wave-tick.js +0 -464
- package/.agents/skills/core/analyze-execution/SKILL.md +0 -98
- package/.agents/skills/core/epic-plan-consolidate/SKILL.md +0 -172
- package/.agents/skills/core/epic-plan-consolidate/examples.md +0 -51
- package/.agents/skills/core/epic-plan-decompose-author/SKILL.md +0 -441
- package/.agents/skills/core/epic-plan-decompose-author/examples.md +0 -47
- package/.agents/skills/core/epic-plan-premortem/SKILL.md +0 -146
- package/.agents/skills/core/epic-plan-premortem/examples.md +0 -53
- package/.agents/skills/core/epic-plan-spec-author/SKILL.md +0 -383
- package/.agents/skills/core/epic-plan-spec-author/examples.md +0 -91
- package/.agents/workflows/helpers/deliver-epic-reference.md +0 -547
- package/.agents/workflows/helpers/deliver-epic-single.md +0 -331
- package/.agents/workflows/helpers/deliver-epic.md +0 -998
- package/.agents/workflows/helpers/deliver-stories.md +0 -450
- package/.agents/workflows/helpers/epic-audit.md +0 -189
- package/.agents/workflows/helpers/epic-deliver-story.md +0 -436
- package/.agents/workflows/helpers/epic-testing.md +0 -125
- package/.agents/workflows/helpers/plan-epic-reference.md +0 -160
- package/.agents/workflows/helpers/plan-epic.md +0 -353
- package/.agents/workflows/helpers/plan-story.md +0 -251
- package/.agents/workflows/helpers/scope-triage-gate.md +0 -108
- package/.agents/workflows/helpers/single-story-deliver.md +0 -557
|
@@ -1,331 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: >-
|
|
3
|
-
Single-delivery Epic path (invoked by /deliver when the route resolves to
|
|
4
|
-
`single`). Collapses a spec-only Epic — one that authored NO Story tickets —
|
|
5
|
-
into ONE guarded in-session slice walk on `epic/<id>`: prepare `--single`,
|
|
6
|
-
walk the Epic body's `## Delivery Slicing` table in order (implement + commit
|
|
7
|
-
each slice, flip its checkpoint marker), run per-AC-cluster acceptance
|
|
8
|
-
critics, then hand off to `deliver-epic.md` Phase 3 for the merge tail
|
|
9
|
-
(Phases 3–9 reused byte-for-byte). Not a second engine — deliver-epic with
|
|
10
|
-
Phases 1–2 replaced by the slice walk.
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
# helpers/deliver-epic-single — single-delivery Epic path (invoked by /deliver)
|
|
14
|
-
|
|
15
|
-
> **Runtime core.** The single-delivery executor for Epic #4475. The
|
|
16
|
-
> [`/deliver`](../deliver.md) router dispatches here when
|
|
17
|
-
> [`resolveEpicDeliveryRoute`](../../scripts/lib/orchestration/deliver-route.js)
|
|
18
|
-
> returns `single` (the Epic carries `delivery::single` or its
|
|
19
|
-
> `epic-plan-state` checkpoint has `decompose.shape === "single"`), unless the
|
|
20
|
-
> `delivery.routing.singleDelivery=false` kill-switch forces fan-out.
|
|
21
|
-
|
|
22
|
-
## Overview
|
|
23
|
-
|
|
24
|
-
A spec-only plan (authored by `/plan`'s single-delivery variant) creates **no
|
|
25
|
-
Story tickets** — the Epic body's `## Delivery Slicing` table is the whole
|
|
26
|
-
work breakdown and the audit trail. There is nothing to fan out, so this path
|
|
27
|
-
does not run the [`deliver-epic.md`](deliver-epic.md) Phase 1–2 wave loop.
|
|
28
|
-
Instead it walks the slicing table **in order** inside one guarded session on
|
|
29
|
-
`epic/<id>`.
|
|
30
|
-
|
|
31
|
-
The **least-surface insight** (adopted design): in `deliver-epic.md` only
|
|
32
|
-
**Phases 1–2 are Story-tier-specific**. **Phases 3–9 are Epic-scope** — they
|
|
33
|
-
operate on `epic/<id>` + the Epic body's `## Acceptance Table` and dereference
|
|
34
|
-
**no** Story ticket (close-validation, epic-audit lens roster, code-review over
|
|
35
|
-
the cumulative `main..epic/<id>` diff, retro, integration gate, finalize →
|
|
36
|
-
reconcile → the merge machine). So:
|
|
37
|
-
|
|
38
|
-
```text
|
|
39
|
-
single-delivery = deliver-epic with Phases 1–2 replaced by an in-session
|
|
40
|
-
slice walk (S1/S2/S2a below), and Phases 3–9 reused
|
|
41
|
-
byte-for-byte (S2b handoff).
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
```text
|
|
45
|
-
/deliver <epicId> (route: single)
|
|
46
|
-
→ S1 Prepare (epic-deliver-prepare.js --single — slice map, ONE worktree)
|
|
47
|
-
→ S2 Slice walk (walk ## Delivery Slicing in order; commit + flip each slice on epic/<id>)
|
|
48
|
-
→ S2a Acceptance (per-AC-cluster fresh-context critics over the cumulative diff)
|
|
49
|
-
→ S2b Handoff → deliver-epic.md Phase 3 … Phase 9 (merge tail, unchanged)
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
---
|
|
53
|
-
|
|
54
|
-
## Contract
|
|
55
|
-
|
|
56
|
-
- **One long guarded session.** No Story fan-out, no `Agent` dispatch for
|
|
57
|
-
implementation — you (the LLM running this helper) implement each slice
|
|
58
|
-
in-session on `epic/<id>`. The per-AC-cluster acceptance critics (S2a) are
|
|
59
|
-
the **only** `Agent` spawns, and they are read-only maker-blind critics.
|
|
60
|
-
- **Idempotent by checkpoint.** The `epic-run-state` slice map
|
|
61
|
-
(`slices[id].status ∈ {pending, done, blocked, failed}`) is the resume
|
|
62
|
-
target: a re-run **skips `done` slices** — the work already sits on
|
|
63
|
-
`epic/<id>`, so it is never re-paid.
|
|
64
|
-
- **Single pause point.** Only `agent::blocked` halts. If a slice or an
|
|
65
|
-
acceptance cluster cannot be satisfied, flip the Epic to `agent::blocked`,
|
|
66
|
-
post a friction comment, and park — never fall silent, never proceed to
|
|
67
|
-
close with an unmet AC.
|
|
68
|
-
- **No Story-ticket dereference (audit receipt).** Nothing in this path reads,
|
|
69
|
-
enumerates, or transitions a `type::story` ticket. The leaf unit is a
|
|
70
|
-
`## Delivery Slicing` slice; the acceptance unit is an `## Acceptance Table`
|
|
71
|
-
AC cluster; the merge tail is Epic-scope. This is the load-bearing property
|
|
72
|
-
that lets Phases 3–9 be reused unchanged.
|
|
73
|
-
- **Land or block (issue #4483).** The worktree / `epic/<id>` branch / PR path
|
|
74
|
-
is the ONLY sanctioned delivery mechanism. Executing slices inline in the
|
|
75
|
-
main checkout or committing to local `main` is forbidden regardless of how
|
|
76
|
-
the environment looks. Prepare surfaces `remoteVerified`; on `false` flip to
|
|
77
|
-
`agent::blocked` quoting `remoteProbe.detail` and halt.
|
|
78
|
-
|
|
79
|
-
---
|
|
80
|
-
|
|
81
|
-
## S1 — Prepare the single run
|
|
82
|
-
|
|
83
|
-
```bash
|
|
84
|
-
node .agents/scripts/epic-deliver-prepare.js --epic <epicId> --single [--steal] [--as <handle>]
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
`--single` short-circuits Story enumeration
|
|
88
|
-
([`runEpicDeliverPrepareSingle`](../../scripts/epic-deliver-prepare.js)). It:
|
|
89
|
-
|
|
90
|
-
1. **Refuses `acceptance::n-a`** (fail-closed front gate). Under single
|
|
91
|
-
delivery the non-waivable epic-level acceptance reconcile is the ONLY
|
|
92
|
-
acceptance gate, so an Epic declaring "no acceptance criteria" is
|
|
93
|
-
structurally incoherent — prepare throws. (The back gate is S2b's
|
|
94
|
-
reconcile; see [Non-waivable reconcile](#non-waivable-acceptance-reconcile).)
|
|
95
|
-
2. Runs the same fail-closed preflight guards as the fan-out prepare
|
|
96
|
-
(checkout-safety + Epic lease).
|
|
97
|
-
3. Seeds `epic/<id>` and materializes **ONE** worktree at
|
|
98
|
-
`.worktrees/epic-<epicId>/` on it.
|
|
99
|
-
4. Parses the Epic body's `## Delivery Slicing` table and writes the
|
|
100
|
-
`epic-run-state` **slice map** (`deliveryShape: "single"`, `storyCount: 0`,
|
|
101
|
-
`concurrencyCap: 1`) — idempotent + resume-preserving (a re-run keeps every
|
|
102
|
-
already-`done` slice).
|
|
103
|
-
5. Writes the per-Epic docs digest.
|
|
104
|
-
|
|
105
|
-
Treat the printed JSON as `state`:
|
|
106
|
-
`{ epicId, deliveryShape, storyCount: 0, sliceCount, slices, epicBranch, workCwd, worktreeCreated, checkpointInitializedAt, docsDigestPath }`.
|
|
107
|
-
Flip the Epic to `agent::executing` (idempotent) after the CLI returns.
|
|
108
|
-
|
|
109
|
-
> **`sliceCount === 0`.** A missing / unparseable `## Delivery Slicing` table
|
|
110
|
-
> yields an empty slice map — there is nothing to walk. That is a plan-quality
|
|
111
|
-
> defect: post a friction comment, flip to `agent::blocked`, and halt (do NOT
|
|
112
|
-
> proceed to an empty close).
|
|
113
|
-
|
|
114
|
-
### S2 — `cd` into the worktree (absolute-path discipline)
|
|
115
|
-
|
|
116
|
-
```bash
|
|
117
|
-
cd "<workCwd from S1>"
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
All subsequent commands run from this directory.
|
|
121
|
-
|
|
122
|
-
> **Worktree scope is not just the Bash cwd.** `cd <workCwd>` steers the Bash
|
|
123
|
-
> tool's cwd but does **not** scope the path-based Edit/Write/Read tools — you
|
|
124
|
-
> MUST prefix every such path with the absolute `workCwd` root or risk
|
|
125
|
-
> silently editing the main checkout (same discipline as
|
|
126
|
-
> [`single-story-deliver.md`](single-story-deliver.md) Step 0.5).
|
|
127
|
-
|
|
128
|
-
---
|
|
129
|
-
|
|
130
|
-
## S2 — Walk the Delivery Slicing table in order
|
|
131
|
-
|
|
132
|
-
Read the Epic body's `## Delivery Slicing` table. Walk it **strictly in
|
|
133
|
-
order** as an in-session checklist. The ordered slicing **is** the audit trail
|
|
134
|
-
(the plan authored no tickets), and the ordering encodes the dependency chain
|
|
135
|
-
— never reorder or parallelize.
|
|
136
|
-
|
|
137
|
-
For each slice `slice-<n>` (1-based, matching the checkpoint's slice-map keys),
|
|
138
|
-
**skip it when `slices[slice-<n>].status === "done"`** (resume: the work is
|
|
139
|
-
already on `epic/<id>`). Otherwise:
|
|
140
|
-
|
|
141
|
-
1. **Announce the slice.** Emit `slice.start` on the ledger. This same
|
|
142
|
-
boundary call also exports the active-slice env
|
|
143
|
-
(`CC_EPIC_ID` / `CC_SLICE_ID`) into the worktree's `.env.local`, which
|
|
144
|
-
arms the PostToolUse hook to emit `slice.heartbeat` for the rest of this
|
|
145
|
-
slice (below):
|
|
146
|
-
|
|
147
|
-
```bash
|
|
148
|
-
node <main-repo>/.agents/scripts/slice-phase.js \
|
|
149
|
-
--epic <epicId> --slice slice-<n> --event start --slice-index <n-1> --title "<slice label>"
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
2. **Implement the slice** on `epic/<id>` in the worktree. Apply the relevant
|
|
153
|
-
[skills](../../instructions.md) and local-lens concerns for the slice's
|
|
154
|
-
footprint. You do **NOT** run a per-step `slice.heartbeat` CLI (Epic
|
|
155
|
-
#4476): once `--event start` armed the active-slice env, the PostToolUse
|
|
156
|
-
hook emits a throttled `slice.heartbeat` off the token stream as a free
|
|
157
|
-
byproduct of every tool call, so the `/deliver` §2e Idle Watchdog can tell
|
|
158
|
-
this one long session from a dead one without a dedicated bookkeeping turn.
|
|
159
|
-
(The `slice-phase.js --event heartbeat` CLI remains available for an
|
|
160
|
-
explicit beat if you deliberately want one, e.g. a long non-tool wait.)
|
|
161
|
-
|
|
162
|
-
3. **Commit** the slice to `epic/<id>` before the next slice
|
|
163
|
-
(conventional subject, `(refs #<epicId>)`). Run the advisory quick gates
|
|
164
|
-
(`lint`, `typecheck`) while iterating so drift surfaces early.
|
|
165
|
-
|
|
166
|
-
4. **Flip the marker + close the slice.** After the commit lands, flip the
|
|
167
|
-
checkpoint marker `pending → done` and emit `slice.end`:
|
|
168
|
-
|
|
169
|
-
```bash
|
|
170
|
-
node <main-repo>/.agents/scripts/slice-phase.js \
|
|
171
|
-
--epic <epicId> --slice slice-<n> --event end --outcome done --record done
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
(`--record done` splices `slices[slice-<n>].status = "done"` via
|
|
175
|
-
[`recordSliceStatus`](../../scripts/lib/orchestration/epic-run-state-store.js)
|
|
176
|
-
so a resumed run skips this slice.)
|
|
177
|
-
|
|
178
|
-
If a slice cannot be completed, emit `slice.end --outcome blocked
|
|
179
|
-
--record blocked`, post a friction comment, flip the Epic to `agent::blocked`,
|
|
180
|
-
and park.
|
|
181
|
-
|
|
182
|
-
When every slice is `done`, proceed to S2a.
|
|
183
|
-
|
|
184
|
-
---
|
|
185
|
-
|
|
186
|
-
## S2a — Per-AC-cluster acceptance critics (the acceptance-dilution guard)
|
|
187
|
-
|
|
188
|
-
**This is the load-bearing risk mitigation.** In the fan-out shape each Story
|
|
189
|
-
ran its own fresh-context acceptance self-eval critic, so acceptance coverage
|
|
190
|
-
was distributed across the Story tree for free. Collapsing to one session would
|
|
191
|
-
degrade that to two redraft rounds scoring every AC at once — the "acceptance
|
|
192
|
-
dilution" risk the design calls out as blocking. The fix restores the
|
|
193
|
-
distributed critic count.
|
|
194
|
-
|
|
195
|
-
1. **Cluster the ACs.** Parse the Epic body's `## Acceptance Table` AC ids
|
|
196
|
-
(`AC-<n>`), ordered by their associated Delivery-Slicing slice, then split
|
|
197
|
-
into clusters of at most `delivery.acceptanceEval.clusterCeiling` (default
|
|
198
|
-
**4**, hard-clamped to `[1, 8]`) via
|
|
199
|
-
[`clusterAcceptanceCriteria`](../../scripts/lib/orchestration/acceptance-clusters.js).
|
|
200
|
-
The result is **exactly `ceil(totalACs / clusterCeiling)`** clusters — the
|
|
201
|
-
fan-out width.
|
|
202
|
-
|
|
203
|
-
2. **One maker-blind critic per cluster.** For **each** cluster author **one**
|
|
204
|
-
maker-blind verdict — NOT a continuation of your implementing turn, so the
|
|
205
|
-
critic does not grade its own homework. There MUST be
|
|
206
|
-
**exactly `ceil(totalACs / clusterCeiling)`** critic passes — **one per
|
|
207
|
-
cluster** — never a single critic over all ACs (that is the collapse this
|
|
208
|
-
guard forecloses). Each critic runs the shared
|
|
209
|
-
[`acceptance-self-eval.md`](acceptance-self-eval.md) mechanic scoped to its
|
|
210
|
-
cluster: it scores **that cluster's ACs** against the cumulative
|
|
211
|
-
`git diff main...epic/<epicId>` diff (plus any `verify[]` evidence the ACs
|
|
212
|
-
reference) and writes a verdict file under `temp/` conforming to
|
|
213
|
-
[`acceptance-eval-verdict.schema.json`](../../schemas/acceptance-eval-verdict.schema.json).
|
|
214
|
-
|
|
215
|
-
> **Fresh-vs-inline is risk-routed PER CLUSTER — the count is fixed
|
|
216
|
-
> (Epic #4478, M7-B).** Whether a given cluster's critic runs as a
|
|
217
|
-
> fresh-context spawn or inline is resolved per cluster by
|
|
218
|
-
> `resolveCeremonyForRisk`
|
|
219
|
-
> ([`ceremony-routing.js`](../../scripts/lib/orchestration/ceremony-routing.js))
|
|
220
|
-
> from the Epic's `planningRisk.overallLevel` and
|
|
221
|
-
> `delivery.routing.freshCriticSampleRate`: **`high`/`medium` → fresh spawn**,
|
|
222
|
-
> **`low` → inline** (except the sampling-floor fraction forced fresh),
|
|
223
|
-
> **missing/unknown → fresh + full ceremony**. This is **strictly** a
|
|
224
|
-
> fresh-vs-inline choice **per cluster**: the number of clusters — hence the
|
|
225
|
-
> number of critic passes and verdicts — stays **exactly**
|
|
226
|
-
> `ceil(totalACs / clusterCeiling)` under **every** risk level. Risk routing
|
|
227
|
-
> NEVER re-slices, merges, or drops a cluster.
|
|
228
|
-
>
|
|
229
|
-
> - **Fresh** → emit a **separate** `Agent` tool call
|
|
230
|
-
> (`subagent_type: acceptance-critic` when
|
|
231
|
-
> `delivery.routing.roleScopedAgents` is on — the default — else
|
|
232
|
-
> `general-purpose`), maker-blind, scoped to that cluster's ACs.
|
|
233
|
-
> - **Inline** → author that cluster's verdict inline in a deliberately
|
|
234
|
-
> scoped self-critical pass (re-read only the diff + that cluster's ACs,
|
|
235
|
-
> treat the implementation reasoning as untrusted). The gate, schema, and
|
|
236
|
-
> proceed/redraft/block decision are identical.
|
|
237
|
-
> - **Nesting-absent fallback.** If the host cannot spawn a nested `Agent` at
|
|
238
|
-
> this depth at all, author **every** cluster's verdict inline regardless of
|
|
239
|
-
> the risk verdict. Note the fallback in any block/friction comment.
|
|
240
|
-
|
|
241
|
-
3. **Gate each cluster (Epic-scoped).** Run the gate per cluster:
|
|
242
|
-
|
|
243
|
-
```bash
|
|
244
|
-
node <main-repo>/.agents/scripts/acceptance-eval.js \
|
|
245
|
-
--epic <epicId> --cluster <clusterId> --verdict <verdict-path>
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
The Epic-scoped invocation (no `--story`) scopes the redraft-round count
|
|
249
|
-
**per cluster** off the Epic's `signals.ndjson`. It exits:
|
|
250
|
-
- **`proceed`** (every AC in the cluster `met`) → this cluster is clear.
|
|
251
|
-
- **`redraft`** (some `partial`/`unmet`, rounds remain) → redraft the
|
|
252
|
-
flagged ACs on `epic/<id>`, commit, and re-run this cluster's critic.
|
|
253
|
-
- **`block`** (round cap reached, ACs still unmet) → exit non-zero. **STOP
|
|
254
|
-
the whole run.** Flip the Epic to `agent::blocked` and post a friction
|
|
255
|
-
comment naming the unmet ACs (with their cluster) and their evidence.
|
|
256
|
-
**Never proceed to close (S2b) with any cluster blocked.**
|
|
257
|
-
|
|
258
|
-
4. Only when **every** cluster returns `proceed` do you proceed to S2b.
|
|
259
|
-
|
|
260
|
-
---
|
|
261
|
-
|
|
262
|
-
## S2b — Hand off to deliver-epic.md Phase 3 (merge tail, reused unchanged)
|
|
263
|
-
|
|
264
|
-
Everything downstream of the acceptance gate is Epic-scope and reused
|
|
265
|
-
**byte-for-byte** — there is exactly one home for the merge machinery. Continue
|
|
266
|
-
at [`deliver-epic.md`](deliver-epic.md) **Phase 3** and run **Phases 3–9
|
|
267
|
-
verbatim**:
|
|
268
|
-
|
|
269
|
-
- Phase 3 — close-validation (lint + test + ratchets on `epic/<id>`)
|
|
270
|
-
- Phase 4 — epic-close lens roster
|
|
271
|
-
- Phase 5 — code-review (the ONE maker-blind cumulative-diff review — the
|
|
272
|
-
north-star's "review is a fresh-context critic")
|
|
273
|
-
- Phase 6 — retro
|
|
274
|
-
- Phase 6.5 — integration gate
|
|
275
|
-
- Phase 7 — finalize (branch-sync → `epic.close.end` → reconcile → open PR)
|
|
276
|
-
- Phase 8 — watch-and-iterate to green CI
|
|
277
|
-
- Phase 8.5 — auto-merge gate
|
|
278
|
-
- Phase 9 — cleanup
|
|
279
|
-
|
|
280
|
-
Do **not** copy those phases here. Read `deliver-epic.md` from Phase 3 and run
|
|
281
|
-
them exactly as the fan-out route does — they never touch a Story ticket, so
|
|
282
|
-
they compose unchanged over the slice-walked `epic/<id>` branch.
|
|
283
|
-
|
|
284
|
-
### Non-waivable acceptance reconcile
|
|
285
|
-
|
|
286
|
-
Phase 7's `epic.close.end` fires the bus-owned `AcceptanceReconciler`. Under
|
|
287
|
-
single delivery this listener is **non-waivable** (design §2c, the back gate):
|
|
288
|
-
[`acceptance-reconciler.js`](../../scripts/lib/orchestration/lifecycle/listeners/acceptance-reconciler.js)
|
|
289
|
-
resolves the delivery shape (off `epic-run-state.deliveryShape` or the
|
|
290
|
-
`delivery::single` label) and treats a `status: "waived"` reconcile as
|
|
291
|
-
**`failed`** (`acceptance.reconcile.failed` → `epic.blocked`) instead of
|
|
292
|
-
passing it through. Combined with the S1 front gate (prepare refusing
|
|
293
|
-
`acceptance::n-a`), this structurally forecloses shipping a single Epic with
|
|
294
|
-
its sole acceptance gate waived.
|
|
295
|
-
|
|
296
|
-
---
|
|
297
|
-
|
|
298
|
-
## Idempotence and resume
|
|
299
|
-
|
|
300
|
-
Re-runs resume from the slice map: `done` slices are skipped, `pending` slices
|
|
301
|
-
resume in order. The per-cluster acceptance signals on the Epic stream let a
|
|
302
|
-
resumed run pick up the correct redraft round per cluster. The PR from Phase 7
|
|
303
|
-
is updated in place. `slice.start` / `slice.end` / `slice.heartbeat` on the
|
|
304
|
-
ledger give the resume path and the idle watchdog an inspectable forward-
|
|
305
|
-
progress signal for the single long session.
|
|
306
|
-
|
|
307
|
-
---
|
|
308
|
-
|
|
309
|
-
## Constraints
|
|
310
|
-
|
|
311
|
-
- **Never** fan out `Agent` calls for slice implementation — the slice walk is
|
|
312
|
-
in-session. The only `Agent` spawns are the S2a maker-blind acceptance
|
|
313
|
-
critics (read-only), and only for clusters the risk router sends `fresh`.
|
|
314
|
-
- **Never** dereference, enumerate, or transition a `type::story` ticket —
|
|
315
|
-
this path has none.
|
|
316
|
-
- **Never** collapse the S2a critics to fewer than
|
|
317
|
-
`ceil(totalACs / clusterCeiling)` **critic passes** — one maker-blind verdict
|
|
318
|
-
per cluster (fresh spawn or inline; the risk router chooses the mode, never
|
|
319
|
-
the count) — and **never** proceed to S2b with a blocked cluster.
|
|
320
|
-
- **Never** merge `epic/<epicId>` to `main` outside Phase 8.5 — the merge tail
|
|
321
|
-
is `deliver-epic.md`'s, unchanged.
|
|
322
|
-
- **Always** flip the slice marker `→ done` after each slice commits, and
|
|
323
|
-
**always** post a friction comment before any non-`complete` outcome.
|
|
324
|
-
|
|
325
|
-
## See also
|
|
326
|
-
|
|
327
|
-
- [`deliver.md`](../deliver.md) — the router that dispatches here.
|
|
328
|
-
- [`deliver-epic.md`](deliver-epic.md) — the fan-out path; its Phases 3–9 are
|
|
329
|
-
this helper's merge tail.
|
|
330
|
-
- [`acceptance-self-eval.md`](acceptance-self-eval.md) — the per-cluster critic
|
|
331
|
-
mechanic.
|