mandrel 1.94.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/README.md +59 -73
- package/.agents/agents/story-worker.md +12 -13
- package/.agents/docs/SDLC.md +489 -1285
- package/.agents/docs/agentrc-reference.json +177 -67
- package/.agents/docs/configuration.md +104 -138
- package/.agents/docs/execution-reference.md +17 -20
- package/.agents/docs/quality-gates.md +13 -19
- package/.agents/docs/workflows.md +3 -3
- package/.agents/instructions.md +70 -81
- package/.agents/rules/ci-remediation.md +8 -12
- package/.agents/rules/git-conventions-reference.md +6 -7
- package/.agents/rules/git-conventions.md +16 -22
- package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
- package/.agents/schemas/agentrc.schema.json +54 -214
- package/.agents/schemas/lifecycle/ledger-record.schema.json +1 -1
- package/.agents/schemas/lifecycle/retro.end.schema.json +1 -1
- package/.agents/schemas/risk-verdict.schema.json +0 -13
- package/.agents/scripts/analyze-execution.js +1 -1
- package/.agents/scripts/audit-to-stories.js +7 -7
- package/.agents/scripts/boot-sweep.js +1 -1
- package/.agents/scripts/check-lifecycle-lint.js +6 -9
- package/.agents/scripts/check-prepush-recovery.js +1 -1
- package/.agents/scripts/cleanup-repo-test-temp.js +6 -1
- 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 +5 -5
- 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 -4
- package/.agents/scripts/lib/baselines/reader.js +1 -6
- package/.agents/scripts/lib/bdd-runner-detect.js +5 -9
- package/.agents/scripts/lib/bootstrap/issue-forms-template.js +32 -33
- package/.agents/scripts/lib/checks/core-bare-clean.js +2 -2
- package/.agents/scripts/lib/checks/index.js +2 -1
- package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +23 -21
- package/.agents/scripts/lib/cli/standard-args.js +13 -22
- package/.agents/scripts/lib/cli-args.js +16 -7
- package/.agents/scripts/lib/close-validation/gates.js +2 -2
- package/.agents/scripts/lib/config/ci.js +6 -31
- package/.agents/scripts/lib/config/delivery-routing.js +45 -29
- package/.agents/scripts/lib/config/explain.js +55 -36
- package/.agents/scripts/lib/config/limits.js +17 -58
- package/.agents/scripts/lib/config/paths.js +0 -2
- package/.agents/scripts/lib/config/quality.js +1 -1
- package/.agents/scripts/lib/config/runners.js +17 -50
- package/.agents/scripts/lib/config/temp-paths.js +19 -14
- 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 +24 -148
- package/.agents/scripts/lib/config-settings-schema-quality.js +8 -14
- package/.agents/scripts/lib/config-settings-schema.js +52 -38
- 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 +211 -41
- package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +1 -1
- package/.agents/scripts/lib/findings/promote-finding.js +5 -5
- package/.agents/scripts/lib/framework-version.js +2 -3
- package/.agents/scripts/lib/git-branch-cleanup.js +1 -10
- package/.agents/scripts/lib/git-branch-lifecycle.js +17 -22
- package/.agents/scripts/lib/git-utils.js +32 -6
- package/.agents/scripts/lib/github/framework-repo.js +6 -0
- package/.agents/scripts/lib/label-constants.js +10 -23
- package/.agents/scripts/lib/label-taxonomy.js +9 -43
- package/.agents/scripts/lib/observability/active-story-env.js +1 -1
- package/.agents/scripts/lib/observability/hook-heartbeat.js +20 -52
- package/.agents/scripts/lib/observability/source-classifier.js +3 -3
- package/.agents/scripts/lib/onboard/init-tail.js +1 -3
- package/.agents/scripts/lib/orchestration/audit-lens-routing.js +128 -0
- package/.agents/scripts/lib/orchestration/bookkeeping-outbox.js +8 -5
- package/.agents/scripts/lib/orchestration/ceremony-routing.js +83 -20
- package/.agents/scripts/lib/orchestration/code-review.js +20 -268
- package/.agents/scripts/lib/orchestration/column-sync.js +1 -1
- package/.agents/scripts/lib/orchestration/consolidation-precondition.js +1 -1
- package/.agents/scripts/lib/orchestration/context-envelope.js +2 -5
- 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/lifecycle/emit-loop-tick.js +8 -8
- package/.agents/scripts/lib/orchestration/lifecycle/emit-story-heartbeat.js +2 -2
- package/.agents/scripts/lib/orchestration/lifecycle/ledger-writer.js +6 -3
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/README.md +17 -43
- package/.agents/scripts/lib/orchestration/lint-baseline-service.js +4 -4
- package/.agents/scripts/lib/orchestration/merge-block-class.js +1 -1
- package/.agents/scripts/lib/orchestration/phase-runner.js +3 -2
- package/.agents/scripts/lib/orchestration/plan-context.js +248 -266
- package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +1 -1
- package/.agents/scripts/lib/orchestration/plan-navigation.js +92 -0
- package/.agents/scripts/lib/orchestration/plan-persist/fan-out-gate.js +61 -0
- package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +97 -0
- package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +223 -854
- package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +361 -0
- package/.agents/scripts/lib/orchestration/plan-persist/summary.js +35 -108
- 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 +13 -13
- package/.agents/scripts/lib/orchestration/planning/decomposer-context.js +27 -0
- package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/risk-verdict.js +3 -4
- package/.agents/scripts/lib/orchestration/post-merge/phases/branch-cleanup.js +2 -2
- package/.agents/scripts/lib/orchestration/post-merge/phases/dashboard-refresh.js +8 -20
- package/.agents/scripts/lib/orchestration/post-merge/phases/worktree-reap.js +3 -2
- package/.agents/scripts/lib/orchestration/pr-base-guard.js +18 -28
- package/.agents/scripts/lib/orchestration/preflight-cache.js +5 -5
- package/.agents/scripts/lib/orchestration/remote-verifier.js +1 -1
- package/.agents/scripts/lib/orchestration/resolve-plan-run.js +155 -0
- package/.agents/scripts/lib/orchestration/resolves-token.js +1 -1
- package/.agents/scripts/lib/orchestration/retro-perf-heuristics.js +8 -8
- package/.agents/scripts/lib/orchestration/retro-proposals.js +140 -79
- package/.agents/scripts/lib/orchestration/review-depth.js +26 -12
- package/.agents/scripts/lib/orchestration/review-providers/codex.js +2 -2
- package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +21 -56
- package/.agents/scripts/lib/orchestration/run-epilogue.js +426 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +1 -1
- package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +95 -41
- package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +16 -13
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +40 -0
- package/.agents/scripts/lib/orchestration/single-story-close/runner.js +11 -3
- 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/phases/code-review.js +15 -12
- package/.agents/scripts/lib/orchestration/story-follow-ups.js +237 -0
- package/.agents/scripts/lib/orchestration/story-init-remote.js +47 -0
- package/.agents/scripts/lib/orchestration/story-plan-state.js +48 -0
- package/.agents/scripts/lib/orchestration/{epic-runner → story-progress}/story-run-progress-writer.js +3 -3
- package/.agents/scripts/lib/orchestration/structured-comment-parser.js +1 -1
- package/.agents/scripts/lib/orchestration/task-body-validator.js +8 -18
- package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +11 -61
- package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +189 -373
- package/.agents/scripts/lib/orchestration/ticket-validator.js +2 -7
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +0 -25
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +29 -26
- package/.agents/scripts/lib/orchestration/ticketing/transition.js +5 -5
- package/.agents/scripts/lib/planning-corpus.js +16 -11
- package/.agents/scripts/lib/preflight-runner.js +2 -2
- package/.agents/scripts/lib/qa/coverage-verdict.js +5 -5
- package/.agents/scripts/lib/single-story/confirm-merge-follow-ups.js +36 -0
- package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +1 -1
- package/.agents/scripts/lib/story-adjacency.js +11 -14
- package/.agents/scripts/lib/story-body/story-body.js +124 -70
- package/.agents/scripts/lib/story-plan.js +2 -4
- package/.agents/scripts/lib/templates/decomposer-prompts.js +46 -45
- package/.agents/scripts/lib/templates/spec-author-prompts.js +47 -45
- package/.agents/scripts/lib/{epic-body-sections.js → ticket-body-sections.js} +26 -26
- package/.agents/scripts/lib/validation-evidence.js +1 -1
- package/.agents/scripts/lib/wave-runner/ready-set.js +6 -6
- package/.agents/scripts/lib/workspace-provisioner.js +1 -1
- package/.agents/scripts/lib/worktree/lifecycle/reap.js +5 -7
- 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 +64 -74
- package/.agents/scripts/plan-persist.js +121 -280
- package/.agents/scripts/plan-run-epilogue.js +97 -0
- package/.agents/scripts/providers/github/issues.js +17 -33
- package/.agents/scripts/providers/github/mappers.js +0 -12
- package/.agents/scripts/providers/github/tickets.js +2 -5
- package/.agents/scripts/resolve-plan-run.js +117 -0
- package/.agents/scripts/signals-view.js +24 -19
- package/.agents/scripts/single-story-close.js +11 -14
- package/.agents/scripts/single-story-confirm-merge.js +39 -23
- package/.agents/scripts/single-story-init.js +29 -20
- package/.agents/scripts/stories-wave-tick.js +6 -6
- package/.agents/scripts/story-plan.js +26 -47
- package/.agents/scripts/update-ticket-state.js +6 -15
- package/.agents/skills/core/analyze-execution/SKILL.md +21 -18
- package/.agents/skills/core/idea-refinement/SKILL.md +6 -6
- package/.agents/skills/core/scope-triage/SKILL.md +28 -172
- package/.agents/skills/skills.index.json +3 -43
- package/.agents/starter-agentrc.json +0 -5
- package/.agents/templates/agent-protocol.md +9 -10
- package/.agents/workflows/audit-architecture.md +3 -3
- package/.agents/workflows/audit-clean-code.md +3 -3
- package/.agents/workflows/audit-dependencies.md +3 -3
- package/.agents/workflows/audit-devops.md +3 -3
- package/.agents/workflows/audit-documentation.md +5 -5
- package/.agents/workflows/audit-lighthouse.md +3 -3
- package/.agents/workflows/audit-navigability.md +3 -2
- package/.agents/workflows/audit-performance.md +3 -3
- package/.agents/workflows/audit-privacy.md +3 -3
- package/.agents/workflows/audit-quality.md +3 -3
- package/.agents/workflows/audit-security.md +3 -3
- package/.agents/workflows/audit-seo.md +3 -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 +3 -3
- package/.agents/workflows/deliver.md +122 -174
- package/.agents/workflows/git-cleanup.md +3 -4
- package/.agents/workflows/helpers/_merge-conflict-template.md +1 -1
- package/.agents/workflows/helpers/acceptance-self-eval.md +16 -29
- package/.agents/workflows/helpers/code-review.md +70 -193
- package/.agents/workflows/helpers/{single-story-deliver-reference.md → deliver-story-reference.md} +12 -14
- package/.agents/workflows/helpers/{single-story-deliver.md → deliver-story.md} +113 -139
- package/.agents/workflows/helpers/diagnose.md +10 -10
- package/.agents/workflows/helpers/parallel-tooling.md +1 -1
- package/.agents/workflows/helpers/signals.md +16 -16
- package/.agents/workflows/helpers/worktree-lifecycle.md +48 -64
- package/.agents/workflows/mandrel-update.md +2 -1
- package/.agents/workflows/plan.md +112 -145
- package/.agents/workflows/qa-assist.md +24 -30
- package/.agents/workflows/qa-explore.md +29 -38
- package/.agents/workflows/qa-run.md +2 -2
- package/README.md +9 -8
- package/docs/CHANGELOG.md +30 -0
- package/lib/migrations/index.js +6 -5
- 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-spec.schema.json +0 -153
- 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/scripts/acceptance-spec-reconciler.js +0 -642
- package/.agents/scripts/bookkeeping-reconcile.js +0 -117
- 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/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/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/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/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/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/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/post-merge-pipeline.js +0 -205
- 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-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/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/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/spec-authoring-grounding.js +0 -0
|
@@ -1,200 +1,148 @@
|
|
|
1
1
|
---
|
|
2
2
|
description:
|
|
3
|
-
Unified delivery entry point.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
segment to the Epic wave loop or the standalone multi-Story fan-out —
|
|
7
|
-
preserving every flag and the parallel-delivery contract of the retired
|
|
8
|
-
commands.
|
|
3
|
+
Unified delivery entry point. Delivers one or more Stories via the single
|
|
4
|
+
deliver-story engine — story-<id> → PR → main. Sequences N>1 by depends_on
|
|
5
|
+
and runs the per-run epilogue once at the end.
|
|
9
6
|
---
|
|
10
7
|
|
|
11
|
-
# /deliver
|
|
8
|
+
# /deliver <storyId...> | --run <planRunId>
|
|
12
9
|
|
|
13
10
|
## Role
|
|
14
11
|
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
Single delivery path. `/deliver` owns input resolution and sequencing only —
|
|
13
|
+
every Story runs through
|
|
14
|
+
[`helpers/deliver-story.md`](helpers/deliver-story.md) (the evolved
|
|
15
|
+
single-Story engine). There is no Epic wave loop, no `epic/<id>` integration
|
|
16
|
+
branch, and no `--no-ff` wave merges.
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
delivery loop (preflight, wave loop fanning out
|
|
20
|
-
[`helpers/epic-deliver-story`](helpers/epic-deliver-story.md),
|
|
21
|
-
close-validation, epic-audit, code-review, retro, finalize, watch,
|
|
22
|
-
auto-merge gate, cleanup).
|
|
23
|
-
- [`helpers/deliver-stories.md`](helpers/deliver-stories.md) — the
|
|
24
|
-
standalone multi-Story path (`stories-wave-tick.js` continuous ready-set
|
|
25
|
-
loop, operator confirmation, parallel fan-out to
|
|
26
|
-
[`helpers/single-story-deliver`](helpers/single-story-deliver.md)).
|
|
18
|
+
## Inputs
|
|
27
19
|
|
|
28
|
-
|
|
20
|
+
| Invocation | Behavior |
|
|
21
|
+
| --- | --- |
|
|
22
|
+
| `/deliver <storyId>` | Deliver one Story via `helpers/deliver-story.md`. |
|
|
23
|
+
| `/deliver <storyId> <storyId> ...` | Sequence Stories in `depends_on` order via `stories-wave-tick.js`; each ready Story runs `deliver-story`. Default concurrency is **3**. |
|
|
24
|
+
| `/deliver --run <planRunId>` | Resolve Stories labeled `plan-run::<planRunId>` (envelope includes `dag` + `done`); sequence as above; after the last Story lands, run the per-run epilogue. |
|
|
29
25
|
|
|
30
|
-
|
|
31
|
-
reference
|
|
26
|
+
Any ticket that is not `type::story`, or that still carries an `Epic: #N`
|
|
27
|
+
reference, is a hard error naming the ID and the fix (close or re-plan as a
|
|
28
|
+
v2 Story).
|
|
32
29
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
|
36
|
-
| 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 (single-segment plan; no confirmation prompt). |
|
|
37
|
-
| Any combination of ≥1 `type::epic` IDs and ≥0 standalone `type::story` IDs | **Segment plan** — compose and execute the sequential segment plan below. |
|
|
38
|
-
| Any Story carrying an `Epic: #N` reference (alone or mixed into an otherwise-valid set) | **Error**, naming every affected ID and the fix: `Story #<id> belongs to Epic #<n> — run /deliver <n>`. |
|
|
39
|
-
|
|
40
|
-
Per-ID classification is unchanged: fetch the `type::*` label and probe the
|
|
41
|
-
body for an `Epic: #N` reference before routing. Never guess a route.
|
|
42
|
-
|
|
43
|
-
## Epic delivery-route resolution
|
|
44
|
-
|
|
45
|
-
Every `type::epic` segment resolves to one of two delivery shapes before its
|
|
46
|
-
helper runs. The routing is a pure function of the Epic's labels, its
|
|
47
|
-
`epic-plan-state` checkpoint, and the config kill-switch — implemented in
|
|
48
|
-
[`lib/orchestration/deliver-route.js`](../scripts/lib/orchestration/deliver-route.js)
|
|
49
|
-
(`resolveEpicDeliveryRoute(epic, checkpoint, config)`), mirroring how the
|
|
50
|
-
code-review depth resolver reads `planningRisk`/`decompose` off the same
|
|
51
|
-
checkpoint. Fetch the Epic's labels and read its `epic-plan-state` structured
|
|
52
|
-
comment, then apply the precedence (highest wins):
|
|
53
|
-
|
|
54
|
-
1. **Kill-switch — overrides all.** `delivery.routing.singleDelivery === false`
|
|
55
|
-
(default `true`, read via `getDeliveryRouting`) forces **fan-out** for
|
|
56
|
-
*every* Epic, even a single-marked one. This is the instant, per-consumer
|
|
57
|
-
global revert that ships before the default flips — no code rollback, no
|
|
58
|
-
re-plan.
|
|
59
|
-
2. **Single marker → single route.** The `delivery::single` label (primary)
|
|
60
|
-
**or** `decompose.shape === "single"` on the checkpoint (secondary). A
|
|
61
|
-
spec-only plan authored no Story tree; its `## Delivery Slicing` table is
|
|
62
|
-
the audit trail.
|
|
63
|
-
3. **No marker → fan-out.** A legacy Epic (no marker, an authored Story tree)
|
|
64
|
-
or a genuinely-wide DAG. Deliver-time width only *advises* — it never
|
|
65
|
-
reroutes a single-marked Epic (that would orphan a tree that does not
|
|
66
|
-
exist; re-route = re-plan).
|
|
67
|
-
|
|
68
|
-
**Route dispatch.**
|
|
69
|
-
|
|
70
|
-
- **`fan-out`** → run [`helpers/deliver-epic.md`](helpers/deliver-epic.md)
|
|
71
|
-
Phases 1–9 unchanged (the wave loop fanning out per-Story sub-agents).
|
|
72
|
-
- **`single`** → run
|
|
73
|
-
[`helpers/deliver-epic-single.md`](helpers/deliver-epic-single.md) (the
|
|
74
|
-
live flip, M4-B): a one-worktree in-session slice walk (prepare `--single` →
|
|
75
|
-
ordered `## Delivery Slicing` walk on `epic/<id>` → per-AC-cluster
|
|
76
|
-
acceptance critics) that **reuses `helpers/deliver-epic.md` Phases 3–9
|
|
77
|
-
byte-for-byte** for the merge tail. This is now the **default** shape for a
|
|
78
|
-
single-marked Epic. The kill-switch (`delivery.routing.singleDelivery=false`)
|
|
79
|
-
still forces this verdict back to `fan-out` — an instant global revert with
|
|
80
|
-
no code rollback.
|
|
81
|
-
|
|
82
|
-
## Segment plan (mixed / multi-Epic input)
|
|
83
|
-
|
|
84
|
-
When the supplied IDs span more than one Epic, or mix Epics with standalone
|
|
85
|
-
Stories, the router composes a **segment plan** and executes the segments
|
|
86
|
-
**strictly sequentially**:
|
|
87
|
-
|
|
88
|
-
1. **Standalone segment first** (when any standalone Story IDs are
|
|
89
|
-
present): the full standalone-Story set forms **one** segment,
|
|
90
|
-
delivered via [`helpers/deliver-stories.md`](helpers/deliver-stories.md)
|
|
91
|
-
Phases 0–3 unchanged. It runs first because it is fast, each Story
|
|
92
|
-
merges to `main` independently, and each subsequent Epic segment's
|
|
93
|
-
Phase 7.0 base-sync then integrates those merges naturally instead of
|
|
94
|
-
the Epic PR opening behind base.
|
|
95
|
-
2. **Epic segments in input order**: each `type::epic` ID forms its own
|
|
96
|
-
segment. Resolve its delivery route (see [Epic delivery-route
|
|
97
|
-
resolution](#epic-delivery-route-resolution)) and run the selected helper
|
|
98
|
-
unchanged — the `fan-out` route dispatches
|
|
99
|
-
[`helpers/deliver-epic.md`](helpers/deliver-epic.md) Phases 1–9, the
|
|
100
|
-
`single` route dispatches
|
|
101
|
-
[`helpers/deliver-epic-single.md`](helpers/deliver-epic-single.md) (which
|
|
102
|
-
reuses that helper's Phases 3–9 for the merge tail).
|
|
103
|
-
|
|
104
|
-
Sequential execution is a deliberate design decision: the Epic path assumes
|
|
105
|
-
a single main checkout (prepare's checkout guard, Phase 7.0
|
|
106
|
-
`git checkout epic/<id>`), holds a per-Epic lease, serializes same-machine
|
|
107
|
-
sessions via `epic-merge-lock.js`, and constrains dispatch to one wave at a
|
|
108
|
-
time. Segments are never interleaved or parallelized; running them one at a
|
|
109
|
-
time keeps both helpers' machinery untouched.
|
|
110
|
-
|
|
111
|
-
**Confirmation gate.** When the composed plan has more than one segment,
|
|
112
|
-
present it to the operator before dispatching — the segments, the IDs in
|
|
113
|
-
each, and the execution order — and wait for confirmation. `--yes`
|
|
114
|
-
suppresses this prompt. Single-segment plans route directly with today's
|
|
115
|
-
behavior (no new prompt; the standalone path's own Phase 1 confirmation
|
|
116
|
-
still applies as before).
|
|
117
|
-
|
|
118
|
-
**Failure policy.** A segment that ends non-complete (blocked, failed, or
|
|
119
|
-
halted at a gate) **stops the run** — no subsequent segment dispatches.
|
|
120
|
-
Report the terminal state: which segments completed, which segment halted
|
|
121
|
-
(and why), and which segments never started. Name the resume command:
|
|
122
|
-
re-running `/deliver` with the same IDs — both path helpers short-circuit
|
|
123
|
-
already-done work (the Epic path resumes idempotently from its checkpoint;
|
|
124
|
-
merged standalone Stories no-op).
|
|
125
|
-
|
|
126
|
-
## Flags (scoped per segment)
|
|
127
|
-
|
|
128
|
-
| Path | Flags |
|
|
30
|
+
## Flags
|
|
31
|
+
|
|
32
|
+
| Flag | Meaning |
|
|
129
33
|
| --- | --- |
|
|
130
|
-
|
|
|
131
|
-
|
|
|
34
|
+
| `--run <planRunId>` | Deliver every Story in the plan-run (label `plan-run::<id>`). |
|
|
35
|
+
| `--dep <from>:<to>` | Extra operator dependency edge (Story id → Story id). |
|
|
36
|
+
| `--concurrency <n>` | Ready-set fan-out cap (default **3** from `delivery.deliverRunner.concurrencyCap`; set `1` for sequential). |
|
|
37
|
+
| `--yes` | Suppress the multi-Story confirmation gate. |
|
|
38
|
+
| `--steal` | Forwarded to `single-story-init.js` / lease steal. |
|
|
39
|
+
| `--wait-merge` | Force close-and-land (default when `delivery.routing.closeAndLand` is true). |
|
|
40
|
+
| `--no-wait-merge` | Opt out of close-and-land; stop at `agent::closing` for a human land. |
|
|
41
|
+
|
|
42
|
+
## Procedure
|
|
43
|
+
|
|
44
|
+
1. **Resolve the Story set.**
|
|
45
|
+
- Positional IDs → use them.
|
|
46
|
+
- `--run <planRunId>` →
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
node .agents/scripts/resolve-plan-run.js --run <planRunId>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Capture `stories[]`, `dag[]`, and `done[]` from the envelope. Prefer
|
|
53
|
+
the emitted `dag` — do **not** rebuild it by hand when `--run` was used.
|
|
54
|
+
|
|
55
|
+
2. **Build the DAG (positional only).** When delivering positional IDs
|
|
56
|
+
(no `--run`), read `depends_on` / `blocked by` from each body and merge
|
|
57
|
+
`--dep` edges into a JSON DAG for `stories-wave-tick.js`:
|
|
58
|
+
|
|
59
|
+
```json
|
|
60
|
+
[{ "id": 101, "dependsOn": [] }, { "id": 102, "dependsOn": [101] }]
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
3. **Confirm (N>1).** Present the order and wait unless `--yes`.
|
|
132
64
|
|
|
133
|
-
|
|
134
|
-
Story-path flags apply to the standalone segment. `--yes` additionally
|
|
135
|
-
suppresses the router's segment-plan confirmation gate above. A flag with
|
|
136
|
-
no applicable segment in the plan is reported once as a no-op warning and
|
|
137
|
-
ignored — never an error (the existing convention, restated for segment
|
|
138
|
-
plans).
|
|
65
|
+
4. **Sequence.** Loop until every Story is done:
|
|
139
66
|
|
|
140
|
-
|
|
67
|
+
```bash
|
|
68
|
+
node .agents/scripts/stories-wave-tick.js \
|
|
69
|
+
--dag '<json>' --done <csv> --in-flight <n> --concurrency <n>
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
For each `ready` Story id, read
|
|
73
|
+
[`helpers/deliver-story.md`](helpers/deliver-story.md) **in full** and
|
|
74
|
+
execute it (init → implement → ceremony → close-and-land). Under
|
|
75
|
+
`--yes` / injected helper content, execute directly without a re-read
|
|
76
|
+
turn.
|
|
77
|
+
|
|
78
|
+
5. **Per-run epilogue (N>1).** After the last Story lands:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
# Plan-run label path:
|
|
82
|
+
node .agents/scripts/plan-run-epilogue.js --run <planRunId>
|
|
83
|
+
|
|
84
|
+
# Positional multi-Story path (synthesizes an adhoc planRunId):
|
|
85
|
+
node .agents/scripts/plan-run-epilogue.js --stories 101,102
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
This executes, in order:
|
|
89
|
+
- `audit-roster` — selects cross-Story audit lenses over the combined
|
|
90
|
+
landed tip and posts `plan-run-audit-roster` on the primary Story;
|
|
91
|
+
the host MUST walk each listed lens against the combined diff
|
|
92
|
+
- `follow-up-rollup` — friction follow-ups across every Story in the
|
|
93
|
+
run (files issues when auto-file is on; posts `follow-ups`)
|
|
94
|
+
- `sibling-coherence` — Spec/Acceptance coherence check across sibling
|
|
95
|
+
bodies (`plan-run-sibling-coherence`)
|
|
96
|
+
|
|
97
|
+
A single-Story run skips the epilogue — follow-ups are captured on
|
|
98
|
+
merge confirm instead (`captureStoryFollowUps`).
|
|
99
|
+
|
|
100
|
+
## Branch model (authoritative)
|
|
101
|
+
|
|
102
|
+
Every Story:
|
|
141
103
|
|
|
142
104
|
```text
|
|
143
|
-
|
|
105
|
+
story-<id> → PR → main (squash + required checks)
|
|
144
106
|
```
|
|
145
107
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
[`helpers/single-story-deliver`](helpers/single-story-deliver.md) — but
|
|
150
|
-
schedules through `stories-wave-tick.js`'s **continuous ready-set loop**
|
|
151
|
-
(the shared `selectReadySet` core) rather than a static wave plan: each
|
|
152
|
-
Story dispatches the instant its own dependencies are done, capped by the
|
|
153
|
-
resolved global `concurrencyCap` and guarded against file-overlap
|
|
154
|
-
co-dispatch, exactly as the Epic path is. The parallelism lives **inside**
|
|
155
|
-
the standalone segment; segments themselves remain strictly sequential.
|
|
108
|
+
There is no `epic/<id>` integration branch and no `--no-ff` wave merge.
|
|
109
|
+
Dependent Stories land sequentially so each builds on the previous merge
|
|
110
|
+
to `main`.
|
|
156
111
|
|
|
157
|
-
##
|
|
112
|
+
## Ceremony (profiles + two scopes)
|
|
113
|
+
|
|
114
|
+
Ceremony depth is selected by `delivery.routing.ceremonyProfile`
|
|
115
|
+
(`minimal` | `standard` | `strict`, default `standard`) and the Story's
|
|
116
|
+
planning risk:
|
|
117
|
+
|
|
118
|
+
| Profile | Acceptance critic | When to use |
|
|
119
|
+
| --- | --- | --- |
|
|
120
|
+
| `minimal` | Always inline | Tiny trusted N=1 Stories |
|
|
121
|
+
| `standard` | Risk-routed (+ sampling floor) | Default |
|
|
122
|
+
| `strict` | Always fresh-context | High-assurance / regulated surfaces |
|
|
158
123
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
multi-segment plan, present it and wait for operator confirmation
|
|
166
|
-
(`--yes` suppresses).
|
|
167
|
-
4. **Execute segments sequentially.** For each segment in order, read the
|
|
168
|
-
selected path helper **in full** and execute it from its entry phase,
|
|
169
|
-
forwarding the segment's scoped flags. The helper's phase numbering,
|
|
170
|
-
watchdogs, gates, and scripts are unchanged — this router adds no phase
|
|
171
|
-
content. Stop on the first non-complete segment per the failure policy.
|
|
172
|
-
5. **Report.** On completion (or halt), summarize per-segment outcomes and,
|
|
173
|
-
when halted, the resume command.
|
|
124
|
+
| Scope | What runs | Mechanism |
|
|
125
|
+
| --- | --- | --- |
|
|
126
|
+
| **Per-Story (always)** | Gates, branch discipline, close-and-land | `deliver-story` / `single-story-close` |
|
|
127
|
+
| **Per-Story (profile + risk)** | Acceptance critic mode; review depth; audit lenses | `ceremony-routing.js` + `review-depth.js` + `code-review.js` |
|
|
128
|
+
| **Per-run (N>1)** | Audit roster · follow-up roll-up · sibling coherence | `plan-run-epilogue.js` once at run end |
|
|
129
|
+
| **Per-Story land** | Actionable follow-ups from friction | `captureStoryFollowUps` in confirm-merge |
|
|
174
130
|
|
|
175
131
|
## Constraints
|
|
176
132
|
|
|
177
|
-
- **Land or block — never a silent local build
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
- `/deliver` requires planned tickets: Epics at `agent::ready` (the
|
|
186
|
-
Epic helper's preflight enforces this, per segment) or well-formed
|
|
187
|
-
standalone Stories. Planning happens in [`/plan`](plan.md); the
|
|
188
|
-
plan-review gate between the two commands is a hard boundary.
|
|
189
|
-
- The router performs no git or label mutations itself; the path helpers
|
|
190
|
-
own every script invocation.
|
|
191
|
-
- Segments execute strictly sequentially — never interleave a standalone
|
|
192
|
-
Story fan-out with an Epic wave loop, and never run two Epic segments
|
|
193
|
-
concurrently.
|
|
133
|
+
- **Land or block — never a silent local build.** Worktrees, `story-<id>`
|
|
134
|
+
branches, close-validation, and PR-to-`main` are the only sanctioned
|
|
135
|
+
delivery mechanism. Attended delivers default to close-and-land
|
|
136
|
+
(`delivery.routing.closeAndLand: true`); use `--no-wait-merge` only when
|
|
137
|
+
a human will land the PR.
|
|
138
|
+
- `/deliver` never plans — tickets come from [`/plan`](plan.md).
|
|
139
|
+
- The router performs no git/label mutations; `deliver-story` owns every
|
|
140
|
+
script invocation per Story.
|
|
194
141
|
|
|
195
142
|
## See also
|
|
196
143
|
|
|
197
|
-
- [`/plan`](plan.md) —
|
|
198
|
-
- [`helpers/deliver-
|
|
199
|
-
|
|
200
|
-
|
|
144
|
+
- [`/plan`](plan.md) — unified planning entry point.
|
|
145
|
+
- [`helpers/deliver-story.md`](helpers/deliver-story.md) — the one Story
|
|
146
|
+
delivery engine.
|
|
147
|
+
- Placeholder design Story for a fully deterministic deliver-run
|
|
148
|
+
orchestrator: [#4521](https://github.com/dsj1984/mandrel/issues/4521).
|
|
@@ -226,10 +226,9 @@ The merged-branch sweep recognizes three detection signals, in order:
|
|
|
226
226
|
`git merge-tree --write-tree <base> <branch>` (git ≥ 2.38) produces a
|
|
227
227
|
tree identical to `<base>`'s own tree — i.e. applying the branch's
|
|
228
228
|
changes on top of `<base>` is a content no-op. This catches
|
|
229
|
-
`story-<id>` branches merged
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
other branch whose content landed via a different route (a renamed
|
|
229
|
+
`story-<id>` branches whose PR **squash-merged** to `main` (the story
|
|
230
|
+
commits are not ancestors of `main`), and any other branch whose content
|
|
231
|
+
landed via a different route (a renamed
|
|
233
232
|
head, a cherry-pick, a manual `merge --squash`). When git rejects
|
|
234
233
|
`--write-tree` (git < 2.38) or the simulated merge conflicts, the
|
|
235
234
|
probe is inconclusive and the branch keeps its existing `not-merged`
|
|
@@ -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 `deliver
|
|
4
|
+
Referenced by `deliver.md` and `helpers/deliver-story.md`.
|
|
5
5
|
|
|
6
6
|
## Procedure
|
|
7
7
|
|
|
@@ -1,19 +1,16 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: >-
|
|
3
3
|
Shared include for the bounded acceptance self-eval loop run during Story
|
|
4
|
-
delivery (
|
|
5
|
-
|
|
6
|
-
supplies its own gate-decision wrapper (snapshot vs. label transitions).
|
|
4
|
+
delivery (`helpers/deliver-story`). Defines the per-round critic mechanic;
|
|
5
|
+
the caller supplies its gate-decision wrapper (label transitions).
|
|
7
6
|
---
|
|
8
7
|
|
|
9
8
|
# Bounded acceptance self-eval loop (shared include)
|
|
10
9
|
|
|
11
10
|
> **Include module.** Not a slash command. Referenced from
|
|
12
|
-
> [`
|
|
13
|
-
>
|
|
14
|
-
>
|
|
15
|
-
> mechanic; each caller layers only its own wrapper (snapshot transitions vs.
|
|
16
|
-
> standalone label transitions, and whether to pass `--epic`).
|
|
11
|
+
> [`deliver-story.md`](deliver-story.md) at Step 1a. This file is the
|
|
12
|
+
> **single prose home** for the per-round critic mechanic; the caller layers
|
|
13
|
+
> only its wrapper (Story label transitions).
|
|
17
14
|
|
|
18
15
|
After the implementation commits land and **before** the Story proceeds to
|
|
19
16
|
close, run an explicit, **independent** eval pass that scores the working diff
|
|
@@ -25,10 +22,9 @@ satisfies *this Story's* acceptance criteria.
|
|
|
25
22
|
The loop is **always on** (a hard cutover — there is no flag to disable it) and
|
|
26
23
|
**bounded** by `delivery.acceptanceEval.maxRounds` (default 2), which the
|
|
27
24
|
resolver clamps into `[1, hard ceiling]` so the cap can never be switched off or
|
|
28
|
-
run unbounded. It is **distinct from** the
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
per-criterion, mid-delivery, and evaluates the actual work product.
|
|
25
|
+
run unbounded. It is **distinct from** the per-run `sibling-coherence` epilogue
|
|
26
|
+
step (`planRunEpilogue` for N>1): this loop is per-Story, per-criterion,
|
|
27
|
+
mid-delivery, and evaluates the actual work product.
|
|
32
28
|
|
|
33
29
|
## Per round
|
|
34
30
|
|
|
@@ -50,8 +46,8 @@ per-criterion, mid-delivery, and evaluates the actual work product.
|
|
|
50
46
|
> review-depth and risk → audit-lens routers). Resolve it per cluster with
|
|
51
47
|
> `resolveCeremonyForRisk` from
|
|
52
48
|
> [`ceremony-routing.js`](../../scripts/lib/orchestration/ceremony-routing.js)
|
|
53
|
-
> using the
|
|
54
|
-
> `delivery.routing.freshCriticSampleRate`:
|
|
49
|
+
> using the **Story's** `planningRisk.overallLevel` (or folded
|
|
50
|
+
> `risk-verdict`) and `delivery.routing.freshCriticSampleRate`:
|
|
55
51
|
> **`high`/`medium` risk → `fresh`** (spawn the critic); **`low` risk →
|
|
56
52
|
> `inline`** (the contract-identical inline fallback below), **except** the
|
|
57
53
|
> `freshCriticSampleRate` fraction of low-risk clusters the sampling floor
|
|
@@ -100,15 +96,9 @@ per-criterion, mid-delivery, and evaluates the actual work product.
|
|
|
100
96
|
HEAD-sha key enforces "unchanged HEAD") and pass the exact gate name:
|
|
101
97
|
|
|
102
98
|
```bash
|
|
103
|
-
# Epic-attached Story:
|
|
104
99
|
node <main-repo>/.agents/scripts/evidence-gate.js \
|
|
105
|
-
--
|
|
100
|
+
--standalone --scope-id <storyId> --gate lint \
|
|
106
101
|
--worktree <worktree> -- npm run lint
|
|
107
|
-
|
|
108
|
-
# Standalone Story (no parent Epic) — use --standalone, omit --epic-id:
|
|
109
|
-
node <main-repo>/.agents/scripts/evidence-gate.js \
|
|
110
|
-
--standalone --scope-id <storyId> --gate typecheck \
|
|
111
|
-
--worktree <worktree> -- <resolved typecheck command>
|
|
112
102
|
```
|
|
113
103
|
|
|
114
104
|
Close's `shouldSkip` then short-circuits that gate when HEAD is
|
|
@@ -122,13 +112,11 @@ per-criterion, mid-delivery, and evaluates the actual work product.
|
|
|
122
112
|
one `{ index, criterion, verdict: met|partial|unmet, evidence,
|
|
123
113
|
verifyEvidence[] }` record per acceptance item.
|
|
124
114
|
2. **Decide.** Run the gate against the verdict (the caller's Step 1a names the
|
|
125
|
-
exact invocation —
|
|
126
|
-
`--epic <epicId>` so the per-criterion signal lands on the Epic-scoped
|
|
127
|
-
stream):
|
|
115
|
+
exact invocation — omit `--epic`):
|
|
128
116
|
|
|
129
117
|
```bash
|
|
130
118
|
node <main-repo>/.agents/scripts/acceptance-eval.js \
|
|
131
|
-
--story <storyId>
|
|
119
|
+
--story <storyId> --verdict <verdict-path>
|
|
132
120
|
```
|
|
133
121
|
|
|
134
122
|
The gate validates the verdict against the schema, applies the round cap,
|
|
@@ -138,11 +126,10 @@ per-criterion, mid-delivery, and evaluates the actual work product.
|
|
|
138
126
|
close.
|
|
139
127
|
- **`decision: "redraft"`** (some `partial`/`unmet`, rounds remaining) →
|
|
140
128
|
exit 0. Redraft the flagged criteria (named in `unmetCriteria[]`), commit
|
|
141
|
-
the fix, and
|
|
129
|
+
the fix, and start another round.
|
|
142
130
|
- **`decision: "block"`** (round cap reached, criteria still unmet) → exit
|
|
143
131
|
non-zero. **Do not proceed to close.** Take the caller's blocked path
|
|
144
|
-
(transition to `agent::blocked`
|
|
145
|
-
|
|
146
|
-
silently proceed to close.
|
|
132
|
+
(transition to `agent::blocked`) and post a `friction` comment naming the
|
|
133
|
+
unmet criteria and their evidence. Never silently proceed to close.
|
|
147
134
|
|
|
148
135
|
Write the verdict files under `temp/` only — they are scratch artifacts.
|