mandrel 1.93.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/acceptance-critic.md +129 -0
- package/.agents/agents/story-worker.md +161 -0
- package/.agents/docs/SDLC.md +489 -1285
- package/.agents/docs/agentrc-reference.json +177 -67
- package/.agents/docs/configuration.md +108 -136
- package/.agents/docs/execution-reference.md +44 -22
- package/.agents/docs/quality-gates.md +13 -19
- package/.agents/docs/workflows.md +3 -3
- package/.agents/instructions.md +107 -108
- package/.agents/rules/ci-remediation.md +8 -12
- package/.agents/rules/git-conventions-reference.md +224 -0
- package/.agents/rules/git-conventions.md +42 -223
- package/.agents/rules/security-baseline.md +5 -0
- package/.agents/rules/testing-standards.md +106 -13
- package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
- package/.agents/schemas/agentrc.schema.json +71 -201
- 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/acceptance-eval.js +62 -18
- package/.agents/scripts/agents-bootstrap-github.js +1 -1
- 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-context-budget.js +62 -5
- 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/diagnose-friction.js +0 -6
- 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/bootstrap/project-bootstrap.js +56 -18
- 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 +160 -22
- package/.agents/scripts/lib/config/acceptance-eval.js +52 -5
- package/.agents/scripts/lib/config/ci.js +6 -31
- package/.agents/scripts/lib/config/delivery-routing.js +103 -0
- package/.agents/scripts/lib/config/explain.js +57 -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 +3 -8
- package/.agents/scripts/lib/config-settings-schema-delivery.js +46 -136
- package/.agents/scripts/lib/config-settings-schema-quality.js +17 -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 +39 -4
- 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 +112 -3
- package/.agents/scripts/lib/observability/hook-heartbeat.js +187 -0
- package/.agents/scripts/lib/observability/source-classifier.js +3 -3
- package/.agents/scripts/lib/observability/tool-trace-hook.js +15 -4
- package/.agents/scripts/lib/onboard/init-tail.js +1 -3
- package/.agents/scripts/lib/orchestration/acceptance-clusters.js +111 -0
- package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +32 -4
- package/.agents/scripts/lib/orchestration/audit-lens-routing.js +128 -0
- package/.agents/scripts/lib/orchestration/bookkeeping-outbox.js +273 -0
- package/.agents/scripts/lib/orchestration/ceremony-routing.js +204 -0
- 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-critic-conditions.js +3 -2
- 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 +14 -14
- 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/close-validation.js +1 -0
- 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 +3 -8
- 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/provider-factory.js +1 -1
- 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/post-structured-comment.js +38 -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/sync-claude-agents.js +165 -0
- package/.agents/scripts/update-ticket-state.js +37 -15
- package/.agents/skills/core/analyze-execution/SKILL.md +21 -18
- package/.agents/skills/core/api-and-interface-design/SKILL.md +5 -3
- package/.agents/skills/core/code-review-and-quality/SKILL.md +63 -7
- package/.agents/skills/core/debugging-and-error-recovery/SKILL.md +1 -1
- package/.agents/skills/core/gates-and-baselines/SKILL.md +149 -0
- package/.agents/skills/core/idea-refinement/SKILL.md +8 -14
- package/.agents/skills/core/qa-coverage-mapping/SKILL.md +7 -7
- package/.agents/skills/core/scope-triage/SKILL.md +28 -172
- package/.agents/skills/skills.index.json +8 -418
- 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 -131
- 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 +52 -40
- 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/mandrel-sync-config.md +1 -1
- 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 +3 -2
- 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 +46 -0
- package/lib/cli/registry.js +95 -0
- package/lib/migrations/index.js +6 -5
- package/package.json +5 -3
- package/.agents/personas/architect.md +0 -113
- package/.agents/personas/devops-engineer.md +0 -38
- package/.agents/personas/engineer-mobile.md +0 -120
- package/.agents/personas/engineer-web.md +0 -111
- package/.agents/personas/engineer.md +0 -119
- package/.agents/personas/product.md +0 -94
- package/.agents/personas/project-manager.md +0 -114
- package/.agents/personas/qa-engineer.md +0 -95
- package/.agents/personas/refactorer.md +0 -113
- package/.agents/personas/security-engineer.md +0 -112
- package/.agents/personas/sre.md +0 -86
- package/.agents/personas/technical-writer.md +0 -101
- package/.agents/personas/ux-designer.md +0 -95
- package/.agents/schemas/dispatch-manifest.json +0 -232
- package/.agents/schemas/epic-spec.schema.json +0 -153
- package/.agents/scripts/acceptance-spec-reconciler.js +0 -642
- 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 -590
- package/.agents/scripts/epic-execute-record-wave.js +0 -449
- package/.agents/scripts/epic-plan-clarity.js +0 -211
- package/.agents/scripts/epic-plan-decompose.js +0 -54
- package/.agents/scripts/epic-plan-healthcheck.js +0 -581
- package/.agents/scripts/epic-plan-spec.js +0 -64
- 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 -660
- 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 -388
- 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-story-dispatch-end.js +0 -147
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/acceptance-reconciler.js +0 -384
- 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 -278
- 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/skill-capsule-loader.js +0 -109
- 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 -301
- 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/plan-critics.js +0 -199
- package/.agents/scripts/retro-run.js +0 -218
- 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 -335
- package/.agents/skills/core/baseline-refresh/SKILL.md +0 -181
- package/.agents/skills/core/ci-cd-and-automation/SKILL.md +0 -274
- package/.agents/skills/core/ci-cd-and-automation/examples.md +0 -211
- package/.agents/skills/core/code-simplification/SKILL.md +0 -389
- package/.agents/skills/core/context-engineering/SKILL.md +0 -309
- package/.agents/skills/core/context-engineering/examples.md +0 -58
- package/.agents/skills/core/deprecation-and-migration/SKILL.md +0 -250
- 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 -413
- package/.agents/skills/core/epic-plan-spec-author/examples.md +0 -91
- package/.agents/skills/core/frontend-ui-engineering/SKILL.md +0 -357
- package/.agents/skills/core/hydrate-context/SKILL.md +0 -123
- package/.agents/skills/core/idea-refinement/examples.md +0 -437
- package/.agents/skills/core/idea-refinement/frameworks.md +0 -135
- package/.agents/skills/core/incremental-implementation/SKILL.md +0 -271
- package/.agents/skills/core/introducing-a-baseline-gate/SKILL.md +0 -213
- package/.agents/skills/core/knowledge-transfer/SKILL.md +0 -180
- package/.agents/skills/core/mutation-survivor-remediation/SKILL.md +0 -117
- package/.agents/skills/core/performance-optimization/SKILL.md +0 -314
- package/.agents/skills/core/planning-and-task-breakdown/SKILL.md +0 -277
- package/.agents/skills/core/property-based-testing/SKILL.md +0 -148
- package/.agents/skills/core/refactoring-discipline/SKILL.md +0 -111
- package/.agents/skills/core/shipping-and-launch/SKILL.md +0 -328
- package/.agents/skills/core/spec-driven-development/SKILL.md +0 -252
- package/.agents/skills/core/test-driven-development/SKILL.md +0 -475
- package/.agents/skills/core/using-agent-skills/SKILL.md +0 -232
- package/.agents/skills/stack/architecture/monorepo-path-strategist/SKILL.md +0 -31
- package/.agents/skills/stack/architecture/structured-output-zod/SKILL.md +0 -51
- package/.agents/skills/stack/architecture/subagent-orchestration/SKILL.md +0 -76
- package/.agents/skills/stack/backend/cloudflare-hono-architect/SKILL.md +0 -31
- package/.agents/skills/stack/backend/cloudflare-hono-architect/examples/route-template.ts +0 -33
- package/.agents/skills/stack/backend/cloudflare-queue-manager/SKILL.md +0 -31
- package/.agents/skills/stack/backend/cloudflare-workers/SKILL.md +0 -51
- package/.agents/skills/stack/backend/highlevel-crm/SKILL.md +0 -54
- package/.agents/skills/stack/backend/sqlite-drizzle-expert/SKILL.md +0 -29
- package/.agents/skills/stack/backend/sqlite-drizzle-expert/examples/schema-template.ts +0 -30
- package/.agents/skills/stack/backend/stripe-integration/SKILL.md +0 -57
- package/.agents/skills/stack/backend/stripe-integration/scripts/listen-stripe.sh +0 -9
- package/.agents/skills/stack/backend/turso-sqlite/SKILL.md +0 -48
- package/.agents/skills/stack/frontend/astro/SKILL.md +0 -62
- package/.agents/skills/stack/frontend/astro-react-island-strategist/SKILL.md +0 -30
- package/.agents/skills/stack/frontend/expo-react-native-developer/SKILL.md +0 -29
- package/.agents/skills/stack/frontend/google-analytics-v4/SKILL.md +0 -50
- package/.agents/skills/stack/frontend/tailwind-v4/SKILL.md +0 -58
- package/.agents/skills/stack/frontend/ui-accessibility-engineer/SKILL.md +0 -34
- package/.agents/skills/stack/qa/audit-accessibility/SKILL.md +0 -51
- package/.agents/skills/stack/qa/lighthouse-baseline/SKILL.md +0 -199
- package/.agents/skills/stack/security/backend-security-patterns/SKILL.md +0 -68
- package/.agents/workflows/helpers/deliver-epic-reference.md +0 -534
- package/.agents/workflows/helpers/deliver-epic.md +0 -955
- package/.agents/workflows/helpers/deliver-stories.md +0 -440
- package/.agents/workflows/helpers/epic-audit.md +0 -189
- package/.agents/workflows/helpers/epic-deliver-story.md +0 -427
- 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 -351
- 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,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,28 +22,52 @@ 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
|
|
|
35
31
|
1. **Eval pass (fresh context, independent of the author).** Run a **separate
|
|
36
|
-
critic pass** — a fresh-context sub-agent (`Agent` tool,
|
|
37
|
-
|
|
38
|
-
|
|
32
|
+
critic pass** — a fresh-context sub-agent (`Agent` tool), *not* a
|
|
33
|
+
continuation of your implementing turn — so the evaluator does not grade its
|
|
34
|
+
own homework.
|
|
39
35
|
|
|
40
|
-
> **
|
|
41
|
-
>
|
|
42
|
-
>
|
|
43
|
-
>
|
|
44
|
-
>
|
|
45
|
-
>
|
|
46
|
-
>
|
|
47
|
-
>
|
|
48
|
-
>
|
|
49
|
-
> to
|
|
36
|
+
> **Sub-agent type + risk-routed ceremony (Epic #4478, M7-B).** When
|
|
37
|
+
> `delivery.routing.roleScopedAgents` is enabled (the **default**), dispatch
|
|
38
|
+
> the critic with `subagent_type: acceptance-critic` — it boots on the
|
|
39
|
+
> role-scoped [`acceptance-critic`](../../agents/acceptance-critic.md) context
|
|
40
|
+
> (its own system prompt, no `CLAUDE.md` @-closure) that carries the
|
|
41
|
+
> maker-blind invariant and the verdict schema standalone. When the
|
|
42
|
+
> kill-switch is **off** (`roleScopedAgents: false`), fall back to
|
|
43
|
+
> `subagent_type: general-purpose`.
|
|
44
|
+
>
|
|
45
|
+
> **Whether to spawn fresh at all is risk-routed** (mirrors the risk →
|
|
46
|
+
> review-depth and risk → audit-lens routers). Resolve it per cluster with
|
|
47
|
+
> `resolveCeremonyForRisk` from
|
|
48
|
+
> [`ceremony-routing.js`](../../scripts/lib/orchestration/ceremony-routing.js)
|
|
49
|
+
> using the **Story's** `planningRisk.overallLevel` (or folded
|
|
50
|
+
> `risk-verdict`) and `delivery.routing.freshCriticSampleRate`:
|
|
51
|
+
> **`high`/`medium` risk → `fresh`** (spawn the critic); **`low` risk →
|
|
52
|
+
> `inline`** (the contract-identical inline fallback below), **except** the
|
|
53
|
+
> `freshCriticSampleRate` fraction of low-risk clusters the sampling floor
|
|
54
|
+
> forces `fresh` so low risk never means zero independent checking; **missing
|
|
55
|
+
> / unknown risk → `fresh` + full ceremony** (fail-safe). This chooses
|
|
56
|
+
> fresh-vs-inline **per cluster only — it never changes the cluster count**.
|
|
57
|
+
>
|
|
58
|
+
> **Inline-critic path (low-risk-routed OR nesting-absent harness).** The
|
|
59
|
+
> verdict is authored **inline** whenever the risk router above resolves to
|
|
60
|
+
> `inline` (a low-risk cluster not caught by the sampling floor), and also as
|
|
61
|
+
> a **fallback** on any harness that cannot spawn the fresh critic.
|
|
62
|
+
> Dispatching the critic as a nested `Agent` is the fresh-context shape and
|
|
63
|
+
> works on any harness that carries `Agent` into sub-agents (Claude Code ≥
|
|
64
|
+
> 2.1.202; see [#2870](https://github.com/dsj1984/mandrel/issues/2870)). This
|
|
65
|
+
> eval loop itself runs inside a Story delivery sub-agent, so the nested
|
|
66
|
+
> critic sits at nesting depth 2. If the host does **not** support nested
|
|
67
|
+
> `Agent` dispatch at that depth — the tool is absent, or a spawn attempt
|
|
68
|
+
> returns an unsupported-capability error — do **not** stall the Story
|
|
69
|
+
> regardless of the risk verdict. Author the verdict **inline**: in a
|
|
70
|
+
> deliberately scoped,
|
|
50
71
|
> self-critical pass (re-read only the diff, the `acceptance[]` /
|
|
51
72
|
> `verify[]` arrays, and the `verify[]` command output — treat the
|
|
52
73
|
> implementation reasoning as untrusted and score against the criteria
|
|
@@ -75,15 +96,9 @@ per-criterion, mid-delivery, and evaluates the actual work product.
|
|
|
75
96
|
HEAD-sha key enforces "unchanged HEAD") and pass the exact gate name:
|
|
76
97
|
|
|
77
98
|
```bash
|
|
78
|
-
# Epic-attached Story:
|
|
79
99
|
node <main-repo>/.agents/scripts/evidence-gate.js \
|
|
80
|
-
--
|
|
100
|
+
--standalone --scope-id <storyId> --gate lint \
|
|
81
101
|
--worktree <worktree> -- npm run lint
|
|
82
|
-
|
|
83
|
-
# Standalone Story (no parent Epic) — use --standalone, omit --epic-id:
|
|
84
|
-
node <main-repo>/.agents/scripts/evidence-gate.js \
|
|
85
|
-
--standalone --scope-id <storyId> --gate typecheck \
|
|
86
|
-
--worktree <worktree> -- <resolved typecheck command>
|
|
87
102
|
```
|
|
88
103
|
|
|
89
104
|
Close's `shouldSkip` then short-circuits that gate when HEAD is
|
|
@@ -97,13 +112,11 @@ per-criterion, mid-delivery, and evaluates the actual work product.
|
|
|
97
112
|
one `{ index, criterion, verdict: met|partial|unmet, evidence,
|
|
98
113
|
verifyEvidence[] }` record per acceptance item.
|
|
99
114
|
2. **Decide.** Run the gate against the verdict (the caller's Step 1a names the
|
|
100
|
-
exact invocation —
|
|
101
|
-
`--epic <epicId>` so the per-criterion signal lands on the Epic-scoped
|
|
102
|
-
stream):
|
|
115
|
+
exact invocation — omit `--epic`):
|
|
103
116
|
|
|
104
117
|
```bash
|
|
105
118
|
node <main-repo>/.agents/scripts/acceptance-eval.js \
|
|
106
|
-
--story <storyId>
|
|
119
|
+
--story <storyId> --verdict <verdict-path>
|
|
107
120
|
```
|
|
108
121
|
|
|
109
122
|
The gate validates the verdict against the schema, applies the round cap,
|
|
@@ -113,11 +126,10 @@ per-criterion, mid-delivery, and evaluates the actual work product.
|
|
|
113
126
|
close.
|
|
114
127
|
- **`decision: "redraft"`** (some `partial`/`unmet`, rounds remaining) →
|
|
115
128
|
exit 0. Redraft the flagged criteria (named in `unmetCriteria[]`), commit
|
|
116
|
-
the fix, and
|
|
129
|
+
the fix, and start another round.
|
|
117
130
|
- **`decision: "block"`** (round cap reached, criteria still unmet) → exit
|
|
118
131
|
non-zero. **Do not proceed to close.** Take the caller's blocked path
|
|
119
|
-
(transition to `agent::blocked`
|
|
120
|
-
|
|
121
|
-
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.
|
|
122
134
|
|
|
123
135
|
Write the verdict files under `temp/` only — they are scratch artifacts.
|
|
@@ -1,50 +1,54 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: >-
|
|
3
|
-
Perform a comprehensive code review of a change set
|
|
4
|
-
|
|
3
|
+
Perform a comprehensive code review of a Story change set against main
|
|
4
|
+
before `/deliver` opens or merges the Story PR
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Code Review (helper)
|
|
8
8
|
|
|
9
9
|
> **Helper module.** Not a slash command. Invoked automatically from
|
|
10
|
-
> `/deliver`
|
|
11
|
-
>
|
|
12
|
-
> call this helper by hand.
|
|
10
|
+
> `/deliver` via `single-story-close.js`. To run a review directly, invoke
|
|
11
|
+
> the parent workflow — operators do not call this helper by hand.
|
|
13
12
|
|
|
14
13
|
This helper performs a comprehensive code review of a change set before it
|
|
15
|
-
is merged
|
|
14
|
+
is merged to `main`. The live v2 path is **Story scope only**:
|
|
16
15
|
|
|
17
|
-
- **Story scope** — reviews
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
- **Story scope** — reviews `main...story-<storyId>` (or
|
|
17
|
+
`project.baseBranch...story-<storyId>`) inside `single-story-close.js`
|
|
18
|
+
after the PR opens and before auto-merge. Findings post to the PR;
|
|
19
|
+
critical findings block close (`agent::blocked`).
|
|
20
|
+
|
|
21
|
+
Legacy `scope: epic` / Epic-branch review procedure (including
|
|
22
|
+
`epic-audit-prepare.js` / `epic-audit-recheck.js`) was removed with the
|
|
23
|
+
v2 Story-only cutover.
|
|
21
24
|
|
|
22
25
|
**Invariant — Story-scope review runs outside the maker's LLM context.**
|
|
23
|
-
The Story-scope review executes inside the `story-close.js`
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
the
|
|
27
|
-
|
|
28
|
-
[
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
preserve this isolation: do not move Story-scope
|
|
32
|
-
context or run it as a step of the delivering
|
|
26
|
+
The Story-scope review executes inside the `single-story-close.js` close
|
|
27
|
+
subprocess, **not** in the delivering child's (maker agent's) LLM context.
|
|
28
|
+
The close pipeline invokes it after the delivering child has exited, so
|
|
29
|
+
the change set is reviewed by a process the maker cannot influence. The
|
|
30
|
+
enforcing code path is
|
|
31
|
+
[`runStoryScopeReview`](../../scripts/lib/orchestration/single-story-close/phases/code-review.js)
|
|
32
|
+
→ shared
|
|
33
|
+
[`runStoryReviewCore`](../../scripts/lib/orchestration/story-close/phases/code-review.js).
|
|
34
|
+
A future refactor MUST preserve this isolation: do not move Story-scope
|
|
35
|
+
review into the maker's context or run it as a step of the delivering
|
|
36
|
+
child.
|
|
33
37
|
|
|
34
38
|
> **Persona**: `architect` · **Skills**: `core/code-review-and-quality`,
|
|
35
39
|
> `core/security-and-hardening`
|
|
36
40
|
|
|
37
41
|
## Argument contract
|
|
38
42
|
|
|
39
|
-
The caller passes the following arguments (
|
|
40
|
-
`scope: story
|
|
43
|
+
The caller passes the following arguments (`/deliver` passes
|
|
44
|
+
`scope: story`):
|
|
41
45
|
|
|
42
46
|
| Argument | Type | Required | Meaning |
|
|
43
47
|
| ----------- | ------------------------------------- | -------- | ------------------------------------------------------------------------------------------------ |
|
|
44
|
-
| `scope` | `"story"` \| `"epic"` | yes |
|
|
45
|
-
| `ticketId` | integer | yes | GitHub issue number of the Story (when `scope === 'story'`) or
|
|
46
|
-
| `baseRef` | string (git ref) | yes | The diff base. Story scope: `
|
|
47
|
-
| `headRef` | string (git ref) | yes | The branch tip under review. Story scope: `story-<storyId>`.
|
|
48
|
+
| `scope` | `"story"` \| `"epic"` | yes | Live path is `"story"`. `"epic"` remains only for legacy cumulative adapters. |
|
|
49
|
+
| `ticketId` | integer | yes | GitHub issue number of the Story (when `scope === 'story'`) or cumulative ticket (legacy `scope === 'epic'`). |
|
|
50
|
+
| `baseRef` | string (git ref) | yes | The diff base. Story scope: `main` (or `project.baseBranch`). Legacy cumulative scope: caller-provided base. |
|
|
51
|
+
| `headRef` | string (git ref) | yes | The branch tip under review. Story scope: `story-<storyId>`. Legacy cumulative scope: caller-provided head. |
|
|
48
52
|
| `depth` | `"light"` \| `"standard"` \| `"deep"` | no | Risk-derived review thoroughness lever. Absent → `standard`. See **Review depth** below. |
|
|
49
53
|
|
|
50
54
|
All scope-dependent behavior in this helper branches off the first four
|
|
@@ -54,18 +58,18 @@ the argument envelope.
|
|
|
54
58
|
### Review depth (`depth`)
|
|
55
59
|
|
|
56
60
|
`depth` is the risk-derived thoroughness lever introduced by Story #3876 and
|
|
57
|
-
made a live consumed signal end to end by Story #3937. The
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
[`
|
|
61
|
-
|
|
62
|
-
|
|
61
|
+
made a live consumed signal end to end by Story #3937. The live `/deliver`
|
|
62
|
+
close path resolves it from the Story's judged `planningRisk` envelope
|
|
63
|
+
(read from the per-Story `story-plan-state` checkpoint via
|
|
64
|
+
[`resolveStoryPlanningRisk`](../../scripts/lib/orchestration/story-plan-state.js);
|
|
65
|
+
`high` → `deep`, `low` → `light`, everything else — including a missing
|
|
66
|
+
checkpoint — → `standard`) and passes it into `runCodeReview`.
|
|
63
67
|
`runCodeReview` forwards `depth` to every provider's `runReview` input.
|
|
64
68
|
|
|
65
69
|
It is an **input-only** signal: it changes *how thorough* the review is, never
|
|
66
70
|
the findings envelope (`{ status, severity, posted, report, halted,
|
|
67
71
|
blockerReason }`) nor the posted `verification-results` structured-comment body. An
|
|
68
|
-
absent or malformed `depth` is treated as `standard`, so
|
|
72
|
+
absent or malformed `depth` is treated as `standard`, so a Story that skipped
|
|
69
73
|
`/plan` still gets a passing review with no new failure mode.
|
|
70
74
|
|
|
71
75
|
How each tier changes the review protocol:
|
|
@@ -89,17 +93,13 @@ review yourself, honor the `depth` semantics above directly.
|
|
|
89
93
|
|
|
90
94
|
## Step 0 — Resolve Context
|
|
91
95
|
|
|
92
|
-
1. Resolve `[TICKET_ID]` from `ticketId` (Story
|
|
96
|
+
1. Resolve `[TICKET_ID]` from `ticketId` (the Story for live `scope: story`).
|
|
93
97
|
2. Resolve `[BASE_REF]` from `baseRef` and `[HEAD_REF]` from `headRef`.
|
|
94
|
-
3. Fetch the
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
carry the Tech Spec.
|
|
100
|
-
4. Read the Epic body fully (including its Tech Spec sections) to
|
|
101
|
-
understand the intended
|
|
102
|
-
scope, architectural decisions, and acceptance criteria.
|
|
98
|
+
3. Fetch the Story ticket and resolve the planning context from its own
|
|
99
|
+
body: folded `## Spec` / `## Slicing`, acceptance criteria, and the
|
|
100
|
+
`story-plan-state` / `risk-verdict` structured comments when present.
|
|
101
|
+
4. Read that Spec fully to understand the intended scope, architectural
|
|
102
|
+
decisions, and acceptance criteria. Do **not** look for a parent Epic.
|
|
103
103
|
|
|
104
104
|
## Step 1 — Automated Audit (Pre-Review)
|
|
105
105
|
|
|
@@ -142,57 +142,21 @@ A diff that matches no local lens adds **no** lens work (the roster is empty and
|
|
|
142
142
|
or materialization failure degrades to a skipped envelope and never blocks the
|
|
143
143
|
close.
|
|
144
144
|
|
|
145
|
-
|
|
146
|
-
[`runStoryCodeReview`](../../scripts/lib/orchestration/story-close/phases/code-review.js)
|
|
147
|
-
(Epic-attached) and
|
|
145
|
+
The live close entry point —
|
|
148
146
|
[`runStoryScopeReview`](../../scripts/lib/orchestration/single-story-close/phases/code-review.js)
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
review. This step does not apply to `scope: epic`, whose lens roster is the
|
|
154
|
-
cumulative + global + risk-routed set resolved at Epic close (Step 1b).
|
|
155
|
-
|
|
156
|
-
### Step 1b — Epic-close lens roster (`scope: epic` only, Epic #4405)
|
|
157
|
-
|
|
158
|
-
When `scope === 'epic'`, the cumulative Epic diff is walked **once** at close:
|
|
159
|
-
the Epic-close lens roster is executed as **dimensions of this same review
|
|
160
|
-
pass**, not as a separate Phase 4 walk (Story #4412 folded the standalone
|
|
161
|
-
epic-audit lens walk into this pass). Resolve and walk the roster inline:
|
|
162
|
-
|
|
163
|
-
1. Resolve the roster via [`helpers/epic-audit.md`](epic-audit.md) Step 1 —
|
|
164
|
-
run `epic-audit-prepare.js --gate gate3` and take its **`epicCloseLenses`**
|
|
165
|
-
field: the slim roster of cumulative + global + risk-routed lenses, with
|
|
166
|
-
every local-tier change-set lens excluded (routed off `resolveLensTier` in
|
|
167
|
-
[`selectEpicCloseLenses`](../../scripts/lib/orchestration/code-review.js)).
|
|
168
|
-
Local-tier concerns are already verified shift-left (write-time checklists +
|
|
169
|
-
the Story-scope local-lens pass), so they are **not** re-run here.
|
|
170
|
-
2. Materialize each rostered lens via
|
|
171
|
-
[`runAuditSuite`](../../scripts/lib/audit-suite/index.js) at the envelope's
|
|
172
|
-
`depth`, applying the `{{changedFiles}}` substitution, and walk each lens's
|
|
173
|
-
`.agents/workflows/audit-<lens>.md` procedure over the cumulative
|
|
174
|
-
`main..epic/<epicId>` diff. Global lenses (`globalLenses`, e.g.
|
|
175
|
-
`audit-navigability`) run against the WHOLE route tree, exempt from the
|
|
176
|
-
change-set narrowing.
|
|
177
|
-
3. Fold the lens findings into this pass's severity aggregate **alongside** the
|
|
178
|
-
Step 2 review pillars — one walk of the cumulative diff, one aggregate, one
|
|
179
|
-
`verification-results` comment (Step 4). An empty `epicCloseLenses` roster
|
|
180
|
-
(docs-only, or every selected lens already covered shift-left, and no
|
|
181
|
-
risk-routed lens) adds no lens dimension — the pillars still run.
|
|
182
|
-
|
|
183
|
-
This step does not apply to `scope: story` (its roster is the local-tier set of
|
|
184
|
-
Step 1a) and is skipped when `epic-audit-prepare.js` returns `degraded: true`
|
|
185
|
-
(propagate the reason and STOP, per `epic-audit.md`).
|
|
147
|
+
— reaches this pass through the shared `runStoryReviewCore` spine. Because
|
|
148
|
+
the pass lives inside the close subprocess (invoked after the delivering
|
|
149
|
+
child exits), it honors the maker-blind invariant above: a maker never runs
|
|
150
|
+
its own local-lens review.
|
|
186
151
|
|
|
187
152
|
## Step 2 — Review Pillars
|
|
188
153
|
|
|
189
154
|
For each changed file, execute a strict review against four pillars. The
|
|
190
155
|
second pillar (**Integration Review**) deliberately defers the security /
|
|
191
|
-
performance / quality / coverage sweeps to the change-set-scoped lenses —
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
duplication, not defense-in-depth.
|
|
156
|
+
performance / quality / coverage sweeps to the change-set-scoped lenses —
|
|
157
|
+
those ran shift-left in the Story-scope local-lens pass (Step 1a).
|
|
158
|
+
Re-walking those sweeps a second time in this pillar is duplication, not
|
|
159
|
+
defense-in-depth.
|
|
196
160
|
|
|
197
161
|
**Apply the `depth` lever** (see **Review depth** above) to how hard you walk
|
|
198
162
|
these pillars: at `light`, focus on Pillar 1 and reduce Pillars 2–3 to a quick
|
|
@@ -206,57 +170,27 @@ never reduced to a scan.
|
|
|
206
170
|
|
|
207
171
|
### Pillar 1: Spec Adherence
|
|
208
172
|
|
|
209
|
-
Does the implementation match the
|
|
173
|
+
Does the implementation match the Story's acceptance criteria and folded Spec?
|
|
210
174
|
|
|
211
|
-
- Compare
|
|
175
|
+
- Compare the completed Story against its stated acceptance criteria.
|
|
212
176
|
- Flag any undocumented deviations, missing features, or scope creep.
|
|
213
|
-
- Verify API contracts, data models, and interface boundaries match the
|
|
214
|
-
Spec.
|
|
177
|
+
- Verify API contracts, data models, and interface boundaries match the Spec.
|
|
215
178
|
|
|
216
179
|
### Pillar 2: Integration Review
|
|
217
180
|
|
|
218
|
-
The
|
|
219
|
-
`
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
merged into `epic/<epicId>`.
|
|
232
|
-
- Spec deviations that the per-Task commits papered over.
|
|
233
|
-
|
|
234
|
-
- **`scope: epic`** — the diff is `main..epic/<epicId>` (the cumulative
|
|
235
|
-
Epic change set). The Epic-close lens roster (`epicCloseLenses`) is walked
|
|
236
|
-
**inline as part of this pass** (Step 1b) — the cumulative diff is read once,
|
|
237
|
-
and the security, privacy, performance, code-quality, and test-coverage
|
|
238
|
-
findings the rostered lenses produce feed this pass's aggregate directly.
|
|
239
|
-
There is no separate `audit-results` comment to read (Story #4412 retired it);
|
|
240
|
-
the lens findings and the pillar findings share the single
|
|
241
|
-
`verification-results` comment this pass posts.
|
|
242
|
-
|
|
243
|
-
The integration view at epic scope is what the per-lens audits cannot
|
|
244
|
-
produce because each lens runs in isolation:
|
|
245
|
-
|
|
246
|
-
- Cross-reference 🔴 / 🟠 lens findings against the spec deviations
|
|
247
|
-
flagged in Pillar 1 — a finding that traces back to a deliberate
|
|
248
|
-
Tech-Spec decision is different from one that traces back to an
|
|
249
|
-
oversight.
|
|
250
|
-
- Look for cross-cutting concerns no single lens owns: contract drift
|
|
251
|
-
between Stories, shared-module ripple effects, boundary changes that
|
|
252
|
-
thread security and performance implications together.
|
|
253
|
-
- Note any lens finding that the operator's remediation flow should
|
|
254
|
-
bundle (e.g. one refactor closes findings from multiple lenses).
|
|
255
|
-
|
|
256
|
-
If the Epic-close roster is empty (docs-only Epic, every selected lens
|
|
257
|
-
already covered shift-left, or the pass was skipped via
|
|
258
|
-
`--skip-epic-audit` / `--skip-code-review`), record that explicitly in the
|
|
259
|
-
findings report and proceed — there is no lens dimension to integrate.
|
|
181
|
+
The diff under review is `baseRef..headRef`
|
|
182
|
+
(`main..story-<storyId>`, or the configured base branch to the Story
|
|
183
|
+
branch). The Story-scope local-lens pass (Step 1a) has already covered the
|
|
184
|
+
local-tier concerns. Lens findings and pillar findings share the single
|
|
185
|
+
`verification-results` comment this pass posts (Story #4411). The
|
|
186
|
+
integration view here focuses on cross-cutting ripple within the Story and
|
|
187
|
+
contract drift against the base branch. Look for:
|
|
188
|
+
|
|
189
|
+
- Contract drift inside the Story (one change's API edit vs. another caller
|
|
190
|
+
in the same branch).
|
|
191
|
+
- Shared-module ripple effects from this Story onto code already merged to
|
|
192
|
+
`main`.
|
|
193
|
+
- Spec deviations that individual commits papered over.
|
|
260
194
|
|
|
261
195
|
### Pillar 3: Documentation Integrity
|
|
262
196
|
|
|
@@ -333,7 +267,7 @@ prior baseline before merging.
|
|
|
333
267
|
|
|
334
268
|
Findings are **persisted as a `verification-results` structured comment on
|
|
335
269
|
the `[TICKET_ID]` issue** by `runCodeReview` (the unified findings contract of
|
|
336
|
-
Story #4411;
|
|
270
|
+
Story #4411; this single comment carries the
|
|
337
271
|
Epic-close lens findings). The target ticket is the Story when
|
|
338
272
|
`scope === 'story'` and the Epic when `scope === 'epic'`. The comment
|
|
339
273
|
is idempotent — re-runs replace the prior one — and its body includes
|
|
@@ -483,63 +417,6 @@ escalating to the operator. Escalated findings remain on the `code-review`
|
|
|
483
417
|
structured comment with their reason recorded, so Step 5 (and downstream
|
|
484
418
|
consumers) see exactly why each one was not auto-remediated.
|
|
485
419
|
|
|
486
|
-
## Step 4.6 — Cross-phase re-check trigger
|
|
487
|
-
|
|
488
|
-
After the focused-fix routing in Step 4.5 completes, any host-LLM-applied
|
|
489
|
-
fix commits have modified files on `[HEAD_REF]` that the Epic-close lens
|
|
490
|
-
roster already walked (Step 1b). Some of those edits may overlap the
|
|
491
|
-
`filePatterns` of one or more lenses (e.g. a fix landing in `**/auth/*.js`
|
|
492
|
-
overlaps the `audit-security` lens). When that happens, the lens findings in
|
|
493
|
-
the `verification-results` comment are **stale for the overlapping lenses
|
|
494
|
-
only** — the non-overlapping findings remain authoritative and MUST NOT be
|
|
495
|
-
re-derived.
|
|
496
|
-
|
|
497
|
-
> **Scope note.** This cross-phase re-check applies only when
|
|
498
|
-
> `scope === 'epic'`. Story-scope reviews carry no Epic-close lens roster,
|
|
499
|
-
> so there is nothing to invalidate; skip this step entirely for
|
|
500
|
-
> `scope === 'story'`.
|
|
501
|
-
|
|
502
|
-
Invoke the re-check selector with the cumulative set of paths touched by
|
|
503
|
-
the focused-fix commits:
|
|
504
|
-
|
|
505
|
-
```powershell
|
|
506
|
-
node .agents/scripts/epic-audit-recheck.js \
|
|
507
|
-
--epic [TICKET_ID] --files <comma-separated-touched-paths>
|
|
508
|
-
```
|
|
509
|
-
|
|
510
|
-
For large touched-file lists, pass `@<file>` (where `<file>` is a
|
|
511
|
-
newline-delimited list written to `temp/`) to avoid shell argument-length
|
|
512
|
-
limits. The CLI emits a JSON envelope of the shape
|
|
513
|
-
`{ selectedAudits: [...], context: { ... } }` restricted to lenses whose
|
|
514
|
-
`filePatterns` overlap the input file list. An empty `selectedAudits`
|
|
515
|
-
array means no overlap — there is nothing to re-run and this step is a
|
|
516
|
-
no-op.
|
|
517
|
-
|
|
518
|
-
When `selectedAudits` is non-empty:
|
|
519
|
-
|
|
520
|
-
1. Re-invoke each listed lens prompt under
|
|
521
|
-
[`../audit-*.md`](../) the same way the Step 1b Epic-close walk does —
|
|
522
|
-
one lens at a time, against the current `[HEAD_REF]` tip.
|
|
523
|
-
2. **Append** a `## Cross-phase re-check` section to the **existing**
|
|
524
|
-
`verification-results` structured comment on the Epic ticket. Do **not**
|
|
525
|
-
post a new comment; the comment is idempotent and downstream consumers
|
|
526
|
-
(the code-review trim, `/deliver` Pillar 2, the retro helper)
|
|
527
|
-
read it once. The append carries the re-checked lens names, the new
|
|
528
|
-
findings (if any), and the focused-fix commit SHAs that triggered the
|
|
529
|
-
re-run, so reviewers can trace each finding back to the change set
|
|
530
|
-
that produced it.
|
|
531
|
-
3. If the re-check surfaces fresh 🔴 / 🟠 findings, route them back
|
|
532
|
-
through Step 4.5's focused-fix routing. Findings that already
|
|
533
|
-
received a focused-fix attempt in the first pass do not get a fresh
|
|
534
|
-
attempt when the cross-phase re-check resurfaces an adjacent one —
|
|
535
|
-
leave them on the `verification-results` comment for the operator.
|
|
536
|
-
|
|
537
|
-
If `selectedAudits` is empty, skip silently and proceed to Step 5. The
|
|
538
|
-
re-check trigger is **read-only signal** — it never mutates the Epic
|
|
539
|
-
branch on its own; mutations only happen if the re-invoked lenses
|
|
540
|
-
surface findings that the host LLM then converts into commits through
|
|
541
|
-
the same focused-fix routing as Step 4.5.
|
|
542
|
-
|
|
543
420
|
## Step 5 — Remediation
|
|
544
421
|
|
|
545
422
|
If the operator instructs you to fix any findings:
|
|
@@ -576,7 +453,7 @@ to the next phase of the parent workflow.
|
|
|
576
453
|
the scope is set by the caller, and reviewing against the wrong base
|
|
577
454
|
produces either a hollow review (too small a diff) or noise (too large a
|
|
578
455
|
diff that includes unrelated history).
|
|
579
|
-
- **Always** read the
|
|
456
|
+
- **Always** read the Story body and folded Spec before reviewing code. Findings without
|
|
580
457
|
spec context are noise.
|
|
581
458
|
- **Never** implement fixes unless the operator explicitly requests it. The
|
|
582
459
|
default mode is read-only audit.
|
package/.agents/workflows/helpers/{single-story-deliver-reference.md → deliver-story-reference.md}
RENAMED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: >-
|
|
3
|
-
Reference companion to `helpers/
|
|
3
|
+
Reference companion to `helpers/deliver-story.md` — the lease and
|
|
4
4
|
sweep detail, worktree-scope warnings, CI-recovery procedures, and
|
|
5
5
|
Status-column reconciliation lifted out of the runtime core so the
|
|
6
6
|
always-ingested standalone-delivery prose stays lean. Not a slash command;
|
|
7
7
|
consulted on demand when the core file points here.
|
|
8
|
-
caller: helpers/
|
|
8
|
+
caller: helpers/deliver-story.md
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
# helpers/
|
|
11
|
+
# helpers/deliver-story — reference (lease, recovery, troubleshooting)
|
|
12
12
|
|
|
13
13
|
> **Not a slash command, not the runtime path.** This file is the
|
|
14
14
|
> reference companion to
|
|
15
|
-
> [`
|
|
15
|
+
> [`deliver-story.md`](deliver-story.md). The core file
|
|
16
16
|
> carries the step flow, commands, gate contracts, and the return contract a
|
|
17
17
|
> standalone-Story run needs; this file holds the lease/sweep mechanics, the
|
|
18
18
|
> worktree-scope safety warning, the CI-recovery procedures, and the
|
|
@@ -85,7 +85,7 @@ The sweep applies two hardening layers (Story #2011):
|
|
|
85
85
|
operator can see what was preserved.
|
|
86
86
|
- **Cross-session lock.** The sweep acquires a process-scoped lockfile
|
|
87
87
|
at `<tempRoot>/single-story-sweep.lock` before planning. On
|
|
88
|
-
contention (another `/
|
|
88
|
+
contention (another `/deliver-story` already in the sweep
|
|
89
89
|
step), this run's sweep is **skipped** with a warn log; init
|
|
90
90
|
continues normally. Stale lockfiles (mtime older than the timeout)
|
|
91
91
|
are treated as expired. The timeout defaults to 60 seconds and is
|
|
@@ -121,7 +121,7 @@ The `single-story-close.js` script, in order:
|
|
|
121
121
|
1a. **Syncs the Story branch from `origin/<baseBranch>`** before push
|
|
122
122
|
(Story #2580). Runs `git fetch origin <baseBranch>` followed by
|
|
123
123
|
`git merge --no-edit origin/<baseBranch>` inside the worktree. This
|
|
124
|
-
defends against the parallel-`/
|
|
124
|
+
defends against the parallel-`/deliver-story` race: when
|
|
125
125
|
multiple sessions run in parallel, the Story that auto-merges first
|
|
126
126
|
bumps `baseBranch`, and without this sync the lagging Stories open
|
|
127
127
|
PRs that are "behind base" and stall against branch-protection's
|
|
@@ -133,7 +133,7 @@ The `single-story-close.js` script, in order:
|
|
|
133
133
|
command set), the Story flips to `agent::blocked`, and close
|
|
134
134
|
throws. Resolve in the worktree (`git merge origin/<base>` + fix
|
|
135
135
|
conflicts + `git commit --no-edit`) and re-run
|
|
136
|
-
`/
|
|
136
|
+
`/deliver-story`.
|
|
137
137
|
- **Fetch failed** → close throws with the git stderr; no label
|
|
138
138
|
transition.
|
|
139
139
|
|
|
@@ -162,13 +162,12 @@ The `single-story-close.js` script, in order:
|
|
|
162
162
|
CI, went `BEHIND` base, or was closed without merging. The Story rests
|
|
163
163
|
at `agent::closing` while the PR is open with auto-merge armed; the
|
|
164
164
|
`agent::done` flip (which closes the issue) is deferred to Step 5.5's
|
|
165
|
-
`single-story-confirm-merge.js`.
|
|
166
|
-
|
|
167
|
-
`agent::done` once its merge into `epic/<id>` is confirmed.
|
|
165
|
+
`single-story-confirm-merge.js`. A Story only reaches `agent::done` once
|
|
166
|
+
its PR to `main` is confirmed merged.
|
|
168
167
|
5. Reaps the worktree when `delivery.worktreeIsolation.reapOnSuccess`
|
|
169
168
|
is enabled.
|
|
170
169
|
6. **Releases the Story lease** (Story #3483). Clears the Story assignment
|
|
171
|
-
that init claimed so the next `/
|
|
170
|
+
that init claimed so the next `/deliver-story` run sees an
|
|
172
171
|
unclaimed ticket. The release is a no-op when the operator no longer
|
|
173
172
|
holds the claim (a later run took over via reclaim/steal), so a late
|
|
174
173
|
close never yanks a live claim away from its current owner. Best-effort:
|
|
@@ -348,7 +347,7 @@ GitHub deletes the **remote** branch on auto-merge (via the
|
|
|
348
347
|
`--delete-branch` flag `single-story-close.js` passes to `gh pr merge`).
|
|
349
348
|
The **local** `story-<storyId>` ref, however, lingers in the main
|
|
350
349
|
checkout until something prunes it — `single-story-init.js` runs a
|
|
351
|
-
merged-sweep at the start of every *subsequent* `/
|
|
350
|
+
merged-sweep at the start of every *subsequent* `/deliver-story`
|
|
352
351
|
invocation, but that's next-run cleanup, not end-of-run cleanup. Stale
|
|
353
352
|
local refs accumulate between sessions, clutter `git branch`, and shadow
|
|
354
353
|
the lessons the sweep is meant to surface.
|
|
@@ -415,8 +414,7 @@ prose hand-off.
|
|
|
415
414
|
> with essential terminal state only (mirroring the fields
|
|
416
415
|
> `single-story-close.js` / `story-phase.js` already emit). Do not narrate the
|
|
417
416
|
> steps you took, and do not prescribe how the next stage should work. Prose
|
|
418
|
-
> process commentary only bloats the hydrated prompt
|
|
419
|
-
> (`delivery.maxTokenBudget` elision). When run **interactively** (no parent
|
|
417
|
+
> process commentary only bloats the hydrated prompt. When run **interactively** (no parent
|
|
420
418
|
> aggregator), this JSON envelope is optional — relay terminal state to the
|
|
421
419
|
> operator in prose instead — but the **no-park rule still holds**: never end
|
|
422
420
|
> an interactive turn with an unconfirmed merge either; block on the watch,
|