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
|
@@ -6,24 +6,18 @@
|
|
|
6
6
|
* `planning.*` and `delivery.*`:
|
|
7
7
|
*
|
|
8
8
|
* - `planning.context.{maxBytes, summaryMode}` (planning-context budget)
|
|
9
|
-
* - `delivery.maxTokenBudget` (task-prompt hydration cap)
|
|
10
9
|
* - `delivery.execution.timeoutMs` (per-process execution timeout)
|
|
11
10
|
* - `delivery.lease.ttlMs` (assignee-as-lease staleness window — Story #3480)
|
|
12
|
-
* - `delivery.signals.{
|
|
13
|
-
*
|
|
11
|
+
* - `delivery.signals.{rework, retry}` (performance-signal detector
|
|
12
|
+
* thresholds — `hotspot` retired with Epic #4406; `churn`/`idle` dropped)
|
|
14
13
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* `planning.maxTickets` operator knob to `LIMITS_DEFAULTS.maxTickets` and
|
|
18
|
-
* removed it from the AJV schema, the published mirror, and the explain
|
|
19
|
-
* map. The persist-time over-budget gate (ADR-20260610) still reads the
|
|
20
|
-
* constant via `getLimits(config).maxTickets`; `resolveLimits` no longer
|
|
21
|
-
* reads `planning.maxTickets`, so setting it in a config is inert.
|
|
14
|
+
* Framework constants (not operator-tunable via `.agentrc.json`):
|
|
15
|
+
* - `maxTickets` — decomposer reviewability budget (Story #4163)
|
|
22
16
|
*
|
|
23
|
-
* Dropped entirely: `maxInstructionSteps`, `friction
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
17
|
+
* Dropped entirely: `maxInstructionSteps`, `friction.*`, `executionMaxBuffer`,
|
|
18
|
+
* `signals.{churn, idle}`, `delivery.preflight`, `delivery.maxTokenBudget`
|
|
19
|
+
* (planning no longer sizes against a token-budget envelope; session-mass
|
|
20
|
+
* ceilings are absolute in `DEFAULT_MODEL_CAPACITY`).
|
|
27
21
|
*
|
|
28
22
|
* The historic combined accessor `getLimits(config)` is preserved as a
|
|
29
23
|
* compatibility surface: it returns a wrapper carrying the surviving
|
|
@@ -31,14 +25,12 @@
|
|
|
31
25
|
* working. New call sites should prefer the specific accessors below.
|
|
32
26
|
*/
|
|
33
27
|
|
|
34
|
-
import { getPreflight } from './preflight.js';
|
|
35
|
-
|
|
36
28
|
/**
|
|
37
|
-
* Framework defaults for the performance-signal detector thresholds.
|
|
38
|
-
*
|
|
29
|
+
* Framework defaults for the performance-signal detector thresholds.
|
|
30
|
+
* `hotspot` was retired with its detector (Epic #4406); `churn` and `idle`
|
|
31
|
+
* were dropped earlier.
|
|
39
32
|
*/
|
|
40
33
|
export const SIGNALS_DEFAULTS = Object.freeze({
|
|
41
|
-
hotspot: Object.freeze({ p95Multiplier: 1.25 }),
|
|
42
34
|
rework: Object.freeze({ editsPerFile: 5 }),
|
|
43
35
|
retry: Object.freeze({ repeatCount: 3 }),
|
|
44
36
|
});
|
|
@@ -53,17 +45,10 @@ export const SIGNALS_DEFAULTS = Object.freeze({
|
|
|
53
45
|
export const LEASE_TTL_MS_DEFAULT = 900000;
|
|
54
46
|
|
|
55
47
|
/**
|
|
56
|
-
* Framework defaults for the surviving limits surface.
|
|
57
|
-
* bumps from 5 min to 10 min per the Story 1 decisions log.
|
|
58
|
-
*
|
|
59
|
-
* `maxTokenBudget` is a **single global value** (Story #3875 — raised once
|
|
60
|
-
* from 200000 to 300000 so capability-sized Stories are not clipped by
|
|
61
|
-
* hydration elision). There is intentionally no per-profile or
|
|
62
|
-
* per-complexity budget branch anywhere in the resolver.
|
|
48
|
+
* Framework defaults for the surviving limits surface.
|
|
63
49
|
*/
|
|
64
50
|
export const LIMITS_DEFAULTS = Object.freeze({
|
|
65
51
|
maxTickets: 80,
|
|
66
|
-
maxTokenBudget: 300000,
|
|
67
52
|
executionTimeoutMs: 600000,
|
|
68
53
|
leaseTtlMs: LEASE_TTL_MS_DEFAULT,
|
|
69
54
|
planningContext: Object.freeze({
|
|
@@ -79,7 +64,7 @@ export const LIMITS_DEFAULTS = Object.freeze({
|
|
|
79
64
|
* operator can override a single threshold without re-listing the others.
|
|
80
65
|
*
|
|
81
66
|
* @param {object|undefined} userSignals
|
|
82
|
-
* @returns {{
|
|
67
|
+
* @returns {{ rework: {editsPerFile: number}, retry: {repeatCount: number} }}
|
|
83
68
|
*/
|
|
84
69
|
function mergeSignals(userSignals) {
|
|
85
70
|
const user =
|
|
@@ -97,16 +82,14 @@ function mergeSignals(userSignals) {
|
|
|
97
82
|
|
|
98
83
|
/**
|
|
99
84
|
* Resolve the surviving limits surface against a `.agentrc.json` shape
|
|
100
|
-
* (post-reshape).
|
|
101
|
-
* `
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
* `delivery.*`, pulls signals from `delivery.signals.*`.
|
|
85
|
+
* (post-reshape). `maxTickets` is a framework constant (never read from
|
|
86
|
+
* config); pulls `planningContext` from `planning.*`, pulls
|
|
87
|
+
* `executionTimeoutMs` from `delivery.*`, pulls signals from
|
|
88
|
+
* `delivery.signals.*`.
|
|
105
89
|
*
|
|
106
90
|
* @param {object|undefined} config
|
|
107
91
|
* @returns {{
|
|
108
92
|
* maxTickets: number,
|
|
109
|
-
* maxTokenBudget: number,
|
|
110
93
|
* executionTimeoutMs: number,
|
|
111
94
|
* leaseTtlMs: number,
|
|
112
95
|
* planningContext: { maxBytes: number, summaryMode: string },
|
|
@@ -133,11 +116,7 @@ export function resolveLimits(config) {
|
|
|
133
116
|
const lease =
|
|
134
117
|
delivery.lease && typeof delivery.lease === 'object' ? delivery.lease : {};
|
|
135
118
|
return {
|
|
136
|
-
// `maxTickets` is a framework constant (Story #4163) — never read from
|
|
137
|
-
// `planning.maxTickets`. The persist-time over-budget gate still reads
|
|
138
|
-
// this value via getLimits().maxTickets.
|
|
139
119
|
maxTickets: LIMITS_DEFAULTS.maxTickets,
|
|
140
|
-
maxTokenBudget: delivery.maxTokenBudget ?? LIMITS_DEFAULTS.maxTokenBudget,
|
|
141
120
|
executionTimeoutMs:
|
|
142
121
|
execution.timeoutMs ?? LIMITS_DEFAULTS.executionTimeoutMs,
|
|
143
122
|
leaseTtlMs: lease.ttlMs ?? LIMITS_DEFAULTS.leaseTtlMs,
|
|
@@ -173,26 +152,6 @@ export function getSignals(config) {
|
|
|
173
152
|
return getLimits(config).signals;
|
|
174
153
|
}
|
|
175
154
|
|
|
176
|
-
/**
|
|
177
|
-
* Resolve the configured `delivery.preflight.max*` ceilings as a plain
|
|
178
|
-
* object holding **only** the keys the operator actually configured
|
|
179
|
-
* (Story #3875 — plan-time/delivery-time reconciliation). Unconfigured
|
|
180
|
-
* ceilings (`null` floors, meaning "no cap") are omitted entirely so the
|
|
181
|
-
* decomposition context can thread a compact, non-null envelope to the
|
|
182
|
-
* planner. An Epic on a zero-config project yields `{}` — never `null`.
|
|
183
|
-
*
|
|
184
|
-
* @param {object | null | undefined} config
|
|
185
|
-
* @returns {Record<string, number>}
|
|
186
|
-
*/
|
|
187
|
-
export function resolvePreflightCeilings(config) {
|
|
188
|
-
const resolved = getPreflight(config);
|
|
189
|
-
const ceilings = {};
|
|
190
|
-
for (const [key, value] of Object.entries(resolved)) {
|
|
191
|
-
if (value !== null) ceilings[key] = value;
|
|
192
|
-
}
|
|
193
|
-
return ceilings;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
155
|
/**
|
|
197
156
|
* Resolve the assignee-as-lease TTL in milliseconds (Story #3480). Standalone
|
|
198
157
|
* accessor so the `ticket-lease` module can import it without dragging the
|
|
@@ -32,7 +32,6 @@ export const PATHS_DEFAULTS = Object.freeze({
|
|
|
32
32
|
* auditOutputDir: string,
|
|
33
33
|
* scriptsRoot: string,
|
|
34
34
|
* workflowsRoot: string,
|
|
35
|
-
* personasRoot: string,
|
|
36
35
|
* schemasRoot: string,
|
|
37
36
|
* skillsRoot: string,
|
|
38
37
|
* templatesRoot: string,
|
|
@@ -53,7 +52,6 @@ export function resolvePaths(userPaths) {
|
|
|
53
52
|
auditOutputDir: `${tempRoot}/audits`,
|
|
54
53
|
scriptsRoot: `${agentRoot}/scripts`,
|
|
55
54
|
workflowsRoot: `${agentRoot}/workflows`,
|
|
56
|
-
personasRoot: `${agentRoot}/personas`,
|
|
57
55
|
schemasRoot: `${agentRoot}/schemas`,
|
|
58
56
|
skillsRoot: `${agentRoot}/skills`,
|
|
59
57
|
templatesRoot: `${agentRoot}/templates`,
|
|
@@ -57,7 +57,7 @@ const DEFAULT_COVERAGE_FLOORS = Object.freeze({
|
|
|
57
57
|
'*': Object.freeze({ lines: 90, branches: 85, functions: 90 }),
|
|
58
58
|
});
|
|
59
59
|
const DEFAULT_CRAP_FLOORS = Object.freeze({
|
|
60
|
-
'*': Object.freeze({
|
|
60
|
+
'*': Object.freeze({ max: 30, p95: 20, methodsAbove20: 50 }),
|
|
61
61
|
});
|
|
62
62
|
/**
|
|
63
63
|
* Story #2193 — maintainability rollups expose the `min` / `p50` / `p95`
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Runner accessor (Epic #1720 Story #1739 — top-level reshape).
|
|
3
3
|
*
|
|
4
|
-
* Post-reshape, only `delivery.deliverRunner
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* `DEFAULT_DECOMPOSER`).
|
|
4
|
+
* Post-reshape, only `delivery.deliverRunner` and `delivery.codeReview` are
|
|
5
|
+
* configurable via this accessor; everything else lives in framework-internal
|
|
6
|
+
* constants exported alongside (`DEFAULT_STORY_MERGE_RETRY`,
|
|
7
|
+
* `DEFAULT_DECOMPOSER`). `delivery.epicAudit` was removed on v2 (Story-only
|
|
8
|
+
* delivery — no epic-audit runner; remediation policy lives on
|
|
9
|
+
* `delivery.codeReview`).
|
|
8
10
|
*/
|
|
9
11
|
|
|
10
12
|
/** Hardcoded story-merge retry policy (was `orchestration.runners.storyMergeRetry`). */
|
|
@@ -23,14 +25,13 @@ export const DEFAULT_DECOMPOSER = Object.freeze({
|
|
|
23
25
|
* `delivery.deliverRunner.*` in `.agentrc.json`.
|
|
24
26
|
*
|
|
25
27
|
* **Throughput tradeoff — `concurrencyCap`.**
|
|
26
|
-
* The default of 3 is intentionally
|
|
27
|
-
* consumption
|
|
28
|
-
* GitHub API with concurrent label writes
|
|
29
|
-
*
|
|
30
|
-
* `delivery.deliverRunner.concurrencyCap
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* `agentrc-reference.json` `delivery.deliverRunner.concurrencyCap` for details.
|
|
28
|
+
* The default of 3 is intentionally moderate: it keeps host-quota
|
|
29
|
+
* consumption predictable for multi-Story plan-runs and avoids saturating
|
|
30
|
+
* the GitHub API with concurrent label writes, while still allowing a
|
|
31
|
+
* small ready-set fan-out. Operators who want strictly sequential delivery
|
|
32
|
+
* should set `delivery.deliverRunner.concurrencyCap: 1`. Raising the cap
|
|
33
|
+
* reduces wall-clock time where dependencies allow. See `deliver.md` and
|
|
34
|
+
* `agentrc-reference.json` `delivery.deliverRunner.concurrencyCap`.
|
|
34
35
|
*
|
|
35
36
|
* **`verifyConcurrencyCap`** (Epic #3019 Tech Spec §1.4 / Story #3024) is a
|
|
36
37
|
* separate knob that bounds the `verifyWaveResults` loop independently of
|
|
@@ -39,35 +40,14 @@ export const DEFAULT_DECOMPOSER = Object.freeze({
|
|
|
39
40
|
*/
|
|
40
41
|
const DEFAULT_DELIVER_RUNNER = Object.freeze({
|
|
41
42
|
concurrencyCap: 3,
|
|
42
|
-
progressReportIntervalSec: 120,
|
|
43
43
|
verifyConcurrencyCap: 4,
|
|
44
44
|
});
|
|
45
45
|
|
|
46
46
|
/**
|
|
47
|
-
* Default auto-fix loop ceilings for /deliver
|
|
48
|
-
*
|
|
49
|
-
* `
|
|
50
|
-
* (Story #2611, Epic #2586).
|
|
51
|
-
*
|
|
52
|
-
* `autoFixSeverity` is **tier-aware** (Story #4412, Epic #4405). The
|
|
53
|
-
* Epic-close audit tier (`DEFAULT_EPIC_AUDIT`) defaults to `'high'` —
|
|
54
|
-
* remediating only 🔴 Critical + 🟠 High findings on-branch while 🟡 Medium
|
|
55
|
-
* and 🟢 Suggestion findings graduate to follow-up issues. This is the
|
|
56
|
-
* three-tier model's slim outermost tier: 🟡 Medium code-quality concerns are
|
|
57
|
-
* already routed into on-branch remediation shift-left (the write-time
|
|
58
|
-
* checklist threading of Story #4410 and the Story-scope local-lens pass of
|
|
59
|
-
* Story #4409), so the Epic-close tier stops paying to re-remediate them where
|
|
60
|
-
* a fix is most expensive. The code-review tier (`DEFAULT_CODE_REVIEW`) keeps
|
|
61
|
-
* the `'medium'` default introduced by Story #4399. Both are hard cutovers per
|
|
62
|
-
* `rules/git-conventions.md` — no back-compat flag; an operator opts back into
|
|
63
|
-
* the wider routing by setting `delivery.epicAudit.autoFixSeverity: 'medium'`.
|
|
47
|
+
* Default auto-fix loop ceilings for /deliver code-review. Operators
|
|
48
|
+
* override via `delivery.codeReview.*` in `.agentrc.json` (Story #2611,
|
|
49
|
+
* Epic #2586; `autoFixSeverity` default `'medium'` per Story #4399).
|
|
64
50
|
*/
|
|
65
|
-
export const DEFAULT_EPIC_AUDIT = Object.freeze({
|
|
66
|
-
maxFixAttempts: 3,
|
|
67
|
-
maxFixScopeFiles: 5,
|
|
68
|
-
autoFixSeverity: 'high',
|
|
69
|
-
});
|
|
70
|
-
|
|
71
51
|
export const DEFAULT_CODE_REVIEW = Object.freeze({
|
|
72
52
|
maxFixAttempts: 3,
|
|
73
53
|
maxFixScopeFiles: 5,
|
|
@@ -79,8 +59,7 @@ export const DEFAULT_CODE_REVIEW = Object.freeze({
|
|
|
79
59
|
*
|
|
80
60
|
* @param {object | null | undefined} config
|
|
81
61
|
* @returns {{
|
|
82
|
-
* deliverRunner: { concurrencyCap: number,
|
|
83
|
-
* epicAudit: { maxFixAttempts: number, maxFixScopeFiles: number, autoFixSeverity: 'high'|'medium' },
|
|
62
|
+
* deliverRunner: { concurrencyCap: number, verifyConcurrencyCap: number },
|
|
84
63
|
* codeReview: { maxFixAttempts: number, maxFixScopeFiles: number, autoFixSeverity: 'high'|'medium' },
|
|
85
64
|
* storyMergeRetry: { maxAttempts: number, backoffMs: readonly number[] },
|
|
86
65
|
* decomposer: { concurrencyCap: number },
|
|
@@ -88,28 +67,16 @@ export const DEFAULT_CODE_REVIEW = Object.freeze({
|
|
|
88
67
|
*/
|
|
89
68
|
export function getRunners(config) {
|
|
90
69
|
const deliverRunnerUser = config?.delivery?.deliverRunner ?? {};
|
|
91
|
-
const epicAuditUser = config?.delivery?.epicAudit ?? {};
|
|
92
70
|
const codeReviewUser = config?.delivery?.codeReview ?? {};
|
|
93
71
|
return {
|
|
94
72
|
deliverRunner: {
|
|
95
73
|
concurrencyCap:
|
|
96
74
|
deliverRunnerUser.concurrencyCap ??
|
|
97
75
|
DEFAULT_DELIVER_RUNNER.concurrencyCap,
|
|
98
|
-
progressReportIntervalSec:
|
|
99
|
-
deliverRunnerUser.progressReportIntervalSec ??
|
|
100
|
-
DEFAULT_DELIVER_RUNNER.progressReportIntervalSec,
|
|
101
76
|
verifyConcurrencyCap:
|
|
102
77
|
deliverRunnerUser.verifyConcurrencyCap ??
|
|
103
78
|
DEFAULT_DELIVER_RUNNER.verifyConcurrencyCap,
|
|
104
79
|
},
|
|
105
|
-
epicAudit: {
|
|
106
|
-
maxFixAttempts:
|
|
107
|
-
epicAuditUser.maxFixAttempts ?? DEFAULT_EPIC_AUDIT.maxFixAttempts,
|
|
108
|
-
maxFixScopeFiles:
|
|
109
|
-
epicAuditUser.maxFixScopeFiles ?? DEFAULT_EPIC_AUDIT.maxFixScopeFiles,
|
|
110
|
-
autoFixSeverity:
|
|
111
|
-
epicAuditUser.autoFixSeverity ?? DEFAULT_EPIC_AUDIT.autoFixSeverity,
|
|
112
|
-
},
|
|
113
80
|
codeReview: {
|
|
114
81
|
maxFixAttempts:
|
|
115
82
|
codeReviewUser.maxFixAttempts ?? DEFAULT_CODE_REVIEW.maxFixAttempts,
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `temp/
|
|
2
|
+
* `temp/run-<id>/` path-resolution helper (Epic #1030 Story #1039).
|
|
3
3
|
*
|
|
4
4
|
* Single source of truth for every artifact path that lives under
|
|
5
5
|
* `project.paths.tempRoot`. Every script that previously hand-rolled
|
|
6
|
-
* a flat `temp/<artifact>-
|
|
6
|
+
* a flat `temp/<artifact>-run-<id>.<ext>` path migrates to call one of
|
|
7
7
|
* these helpers. The Tech Spec (#1032) names this module as the cutover
|
|
8
8
|
* grep target — `temp/.*-epic-` should be empty across `.agents/scripts`
|
|
9
9
|
* once the migration Stories land.
|
|
10
10
|
*
|
|
11
11
|
* Layout:
|
|
12
|
-
* temp/
|
|
12
|
+
* temp/run-<eid>/
|
|
13
13
|
* ├─ techspec.md
|
|
14
14
|
* ├─ manifest.md (dispatch manifest)
|
|
15
15
|
* ├─ retro.md (mirror of GitHub retro at Epic close)
|
|
16
16
|
* ├─ perf-report.md (analyzer output, Epic-level)
|
|
17
17
|
* ├─ lifecycle.ndjson (lifecycle bus ledger)
|
|
18
|
-
* ├─ checkpoints/... (epic-runner state store)
|
|
18
|
+
* ├─ checkpoints/... (pre-v2 epic-runner state store; retained layout)
|
|
19
19
|
* ├─ <name> (epicArtifactPath escape hatch)
|
|
20
20
|
* └─ stories/
|
|
21
21
|
* └─ story-<sid>/
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
* parent of `git rev-parse --git-common-dir`) rather than `process.cwd()`.
|
|
44
44
|
* Without this, a story child that `cd`s into `.worktrees/story-<id>/` before
|
|
45
45
|
* calling `story-phase.js` would append `story.heartbeat` records to
|
|
46
|
-
* `<worktree>/temp/
|
|
46
|
+
* `<worktree>/temp/run-N/lifecycle.ndjson`, while the `/deliver` host
|
|
47
47
|
* (running from the main checkout) reads the main-checkout copy — so the
|
|
48
48
|
* idle-watchdog never sees heartbeats and the Epic-lease guard silently
|
|
49
49
|
* reclaims live foreign claims (the audit-#3513 bug class). Anchoring the
|
|
@@ -206,18 +206,23 @@ const artifactName = (name) => {
|
|
|
206
206
|
};
|
|
207
207
|
|
|
208
208
|
/**
|
|
209
|
-
* `temp/
|
|
209
|
+
* `temp/run-<eid>/` — every Epic-scoped artifact lives under here.
|
|
210
210
|
*
|
|
211
211
|
* @param {number} eid
|
|
212
212
|
* @param {object} [config]
|
|
213
213
|
* @returns {string}
|
|
214
214
|
*/
|
|
215
|
+
export function runTempDir(rid, config) {
|
|
216
|
+
return path.join(anchorTempRoot(tempRootFrom(config)), `run-${epicId(rid)}`);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/** @deprecated Use {@link runTempDir}. */
|
|
215
220
|
export function epicTempDir(eid, config) {
|
|
216
|
-
return
|
|
221
|
+
return runTempDir(eid, config);
|
|
217
222
|
}
|
|
218
223
|
|
|
219
224
|
/**
|
|
220
|
-
* `temp/
|
|
225
|
+
* `temp/run-<eid>/stories/story-<sid>/` — every Story-scoped artifact
|
|
221
226
|
* lives under here.
|
|
222
227
|
*
|
|
223
228
|
* Story #2874: accepts `eid === null` for standalone Stories (no
|
|
@@ -246,7 +251,7 @@ export function storyTempDir(eid, sid, config) {
|
|
|
246
251
|
}
|
|
247
252
|
|
|
248
253
|
/**
|
|
249
|
-
* `temp/
|
|
254
|
+
* `temp/run-<eid>/stories/story-<sid>/signals.ndjson` — append-only
|
|
250
255
|
* signal stream consumed by the analyzer (Epic #1030 AC1).
|
|
251
256
|
*
|
|
252
257
|
* @param {number} eid
|
|
@@ -259,18 +264,18 @@ export function signalsFile(eid, sid, config) {
|
|
|
259
264
|
}
|
|
260
265
|
|
|
261
266
|
/**
|
|
262
|
-
* `temp/
|
|
267
|
+
* `temp/run-<eid>/stories/story-<sid>/lifecycle.ndjson` — the story-scope
|
|
263
268
|
* ledger destination for lifecycle events emitted directly by a Story
|
|
264
269
|
* (rather than routed through the Epic-scoped bus ledger). Story #4426
|
|
265
270
|
* (Epic #4425) introduces the first consumer: a standalone
|
|
266
271
|
* `single-story-close` run (no parent Epic) emitting `merge.unlanded`
|
|
267
|
-
* needs an on-disk home even though there is no `
|
|
272
|
+
* needs an on-disk home even though there is no `run-<id>/` directory to
|
|
268
273
|
* anchor the event to.
|
|
269
274
|
*
|
|
270
275
|
* Mirrors `epicLedgerPath` exactly, one level down: `eid === null` routes
|
|
271
276
|
* through `storyTempDir`'s standalone branch to
|
|
272
277
|
* `<tempRoot>/standalone/stories/story-<sid>/lifecycle.ndjson`; a real
|
|
273
|
-
* `eid` routes to `<tempRoot>/
|
|
278
|
+
* `eid` routes to `<tempRoot>/run-<eid>/stories/story-<sid>/lifecycle.ndjson`,
|
|
274
279
|
* so an Epic-attached Story's story-scope ledger sits alongside its
|
|
275
280
|
* `signals.ndjson` sibling.
|
|
276
281
|
*
|
|
@@ -324,7 +329,7 @@ export const epicPerfReportPath = (eid, config) =>
|
|
|
324
329
|
epicArtifactPath(eid, 'perf-report.md', config);
|
|
325
330
|
|
|
326
331
|
/**
|
|
327
|
-
* `temp/
|
|
332
|
+
* `temp/run-<eid>/epic-perf-report.json` — canonical JSON snapshot of
|
|
328
333
|
* the `epic-perf-report` payload persisted at /deliver close
|
|
329
334
|
* (Epic #3019 / Story #3029 / Task #3040). When present alongside the
|
|
330
335
|
* `epic-perf-report` structured comment, the report is discoverable
|
|
@@ -340,7 +345,7 @@ export const epicPerfReportJsonPath = (eid, config) =>
|
|
|
340
345
|
epicArtifactPath(eid, 'epic-perf-report.json', config);
|
|
341
346
|
|
|
342
347
|
/**
|
|
343
|
-
* `temp/
|
|
348
|
+
* `temp/run-<eid>/lifecycle.ndjson` — append-only lifecycle bus ledger
|
|
344
349
|
* (Story #2510). The LedgerWriter persists every emitted/completed/failed
|
|
345
350
|
* record here; the TraceLogger renders the companion markdown from it.
|
|
346
351
|
*
|
|
@@ -33,7 +33,6 @@ export const WORKTREE_ISOLATION_DEFAULTS = Object.freeze({
|
|
|
33
33
|
primeFromPath: null,
|
|
34
34
|
allowSymlinkOnWindows: false,
|
|
35
35
|
reapOnSuccess: true,
|
|
36
|
-
reapOnCancel: true,
|
|
37
36
|
// Gitignored workspace files copied into each new worktree. Includes the
|
|
38
37
|
// operator's local-override files (`.agentrc.local.json`,
|
|
39
38
|
// `.agents/instructions.local.md`) so a worktree-isolated agent honors the
|
|
@@ -84,10 +83,6 @@ export function getWorktreeIsolation(config) {
|
|
|
84
83
|
typeof wi.reapOnSuccess === 'boolean'
|
|
85
84
|
? wi.reapOnSuccess
|
|
86
85
|
: WORKTREE_ISOLATION_DEFAULTS.reapOnSuccess,
|
|
87
|
-
reapOnCancel:
|
|
88
|
-
typeof wi.reapOnCancel === 'boolean'
|
|
89
|
-
? wi.reapOnCancel
|
|
90
|
-
: WORKTREE_ISOLATION_DEFAULTS.reapOnCancel,
|
|
91
86
|
bootstrapFiles: Array.isArray(wi.bootstrapFiles)
|
|
92
87
|
? wi.bootstrapFiles
|
|
93
88
|
: [...WORKTREE_ISOLATION_DEFAULTS.bootstrapFiles],
|
|
@@ -27,7 +27,6 @@ import path from 'node:path';
|
|
|
27
27
|
import { getCiDelivery } from './config/ci.js';
|
|
28
28
|
import { getCommands } from './config/commands.js';
|
|
29
29
|
import { getGitHub } from './config/github.js';
|
|
30
|
-
import { getLifecycle } from './config/lifecycle.js';
|
|
31
30
|
import { resolvePaths } from './config/paths.js';
|
|
32
31
|
import { validateOrchestrationConfig } from './config/validate-orchestration.js';
|
|
33
32
|
import { getWorktreeIsolation } from './config/worktree-isolation.js';
|
|
@@ -43,10 +42,8 @@ export { NOTIFICATIONS_DEFAULTS } from './config/github.js';
|
|
|
43
42
|
export {
|
|
44
43
|
getLimits,
|
|
45
44
|
LIMITS_DEFAULTS,
|
|
46
|
-
resolvePreflightCeilings,
|
|
47
45
|
} from './config/limits.js';
|
|
48
46
|
export { getPaths } from './config/paths.js';
|
|
49
|
-
export { getPreflight, PREFLIGHT_DEFAULTS } from './config/preflight.js';
|
|
50
47
|
export {
|
|
51
48
|
CODING_GUARDRAILS_DEFAULTS,
|
|
52
49
|
getQuality,
|
|
@@ -107,10 +104,8 @@ function applyDeliveryDefaults(rawDelivery) {
|
|
|
107
104
|
delivery.worktreeIsolation = getWorktreeIsolation({
|
|
108
105
|
worktreeIsolation: delivery.worktreeIsolation,
|
|
109
106
|
});
|
|
110
|
-
delivery.
|
|
111
|
-
//
|
|
112
|
-
// `skipForStoryPushes: true` by default so Story-branch commit
|
|
113
|
-
// tooling applies the `[skip ci]` trailer without operator opt-in.
|
|
107
|
+
// `delivery.ci` always carries autoMerge (and passes watch through) so
|
|
108
|
+
// CI-aware delivery knobs resolve without operator opt-in.
|
|
114
109
|
delivery.ci = getCiDelivery({ ci: delivery.ci });
|
|
115
110
|
return delivery;
|
|
116
111
|
}
|