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
|
@@ -26,7 +26,7 @@ with the runtime validators.
|
|
|
26
26
|
"$schema": "./.agents/schemas/agentrc.schema.json",
|
|
27
27
|
"project": { /* paths, commands, baseBranch, docsContextFiles */ },
|
|
28
28
|
"github": { /* owner, repo, branchProtection, mergeMethods, notifications */ },
|
|
29
|
-
"planning": { /* riskHeuristics, codebaseSnapshot, context */ },
|
|
29
|
+
"planning": { /* riskHeuristics, conflict gates, codebaseSnapshot, context */ },
|
|
30
30
|
"delivery": { /* execution, quality, worktreeIsolation, deliverRunner, ... */ }
|
|
31
31
|
}
|
|
32
32
|
```
|
|
@@ -38,8 +38,8 @@ top-level keys are validation errors.
|
|
|
38
38
|
| ------------- | -------- | ---------------------------------------------------------------------------------- |
|
|
39
39
|
| `project` | **Yes** | Project-local paths, base branch, validation commands, and context-hydration files. |
|
|
40
40
|
| `github` | No | Ticketing provider config: owner/repo, branch protection, merge methods, notifications. |
|
|
41
|
-
| `planning` | No | `/plan` tuning:
|
|
42
|
-
| `delivery` | No | `/deliver`
|
|
41
|
+
| `planning` | No | `/plan` tuning: conflict advisories, codebase snapshot, context cap. (Story sizing ceilings are code-absolute — not agentrc.) |
|
|
42
|
+
| `delivery` | No | `/deliver` tuning: quality gates, worktree isolation, runners, CI watch, code-review providers. |
|
|
43
43
|
| `$schema` | No | JSON Schema pointer for editor tooling. |
|
|
44
44
|
|
|
45
45
|
---
|
|
@@ -105,20 +105,14 @@ top-level keys are validation errors.
|
|
|
105
105
|
| `codebaseSnapshot.include` | No | `array<string>` | — | — |
|
|
106
106
|
| `codebaseSnapshot.exclude` | No | `array<string>` | — | — |
|
|
107
107
|
| `codebaseSnapshot.recentCommitWindow` | No | `integer` | — | — |
|
|
108
|
-
| `
|
|
109
|
-
| `
|
|
110
|
-
| `
|
|
111
|
-
| `
|
|
112
|
-
| `
|
|
113
|
-
| `
|
|
114
|
-
| `
|
|
115
|
-
| `
|
|
116
|
-
| `failOnRegistryConflicts` | No | `boolean` | — | — |
|
|
117
|
-
| `failOnLargeFanOut` | No | `boolean` | — | — |
|
|
118
|
-
| `largeFanOutThreshold` | No | `integer` | — | — |
|
|
119
|
-
| `crossCuttingRegistries` | No | `string[]` or `{ append?, prepend? }` | — | — |
|
|
120
|
-
| `navigation` | No | `object` | — | Navigability-reachability config consumed by the plan-persist draft reachability gate (Epic #4474 PR6; also the manual epic-plan-healthcheck --paranoid re-check). Opt-in: absent or empty routeGlobs degrades to a silent no-op. |
|
|
121
|
-
| `navigation.routeGlobs` | No | `array<string>` | — | Glob patterns (pages/**, app/**/route.ts) marking paths that add a user-facing route. |
|
|
108
|
+
| `failOnSharedEditors` | No | `boolean` | — | When true, upgrade shared-editor conflict findings to hard errors (default false — advisory soft findings only). |
|
|
109
|
+
| `requireExplicitCrossStoryDeps` | No | `boolean` | — | When true, upgrade implicit cross-Story dependency findings to hard errors (default false — advisory soft findings only). |
|
|
110
|
+
| `failOnRegistryConflicts` | No | `boolean` | — | When true, upgrade cross-cutting registry conflict findings to hard errors (default false). |
|
|
111
|
+
| `failOnLargeFanOut` | No | `boolean` | — | When true, upgrade fan-out-warning findings (delete blast radius) to hard errors (default false — soft advisory). |
|
|
112
|
+
| `largeFanOutThreshold` | No | `integer` | — | Call-site count above which a Story that deletes a module emits a fan-out-warning. Counts base-branch references to the deleted path basename. Soft by default; does not size or reject Stories. Default 10. |
|
|
113
|
+
| `crossCuttingRegistries` | No | `string[]` or `{ append?, prepend? }` | — | Registry path patterns whose concurrent edits across Stories are flagged as conflicts. Defaults to the framework listener/handler index patterns when omitted. |
|
|
114
|
+
| `navigation` | No | `object` | — | Opt-in navigability reachability gate. Absent or empty routeGlobs is a silent no-op. |
|
|
115
|
+
| `navigation.routeGlobs` | No | `array<string>` | — | Glob patterns (e.g. pages/**, app/**/route.ts) marking paths that add a user-facing route. |
|
|
122
116
|
| `navigation.navRegistry` | No | `array<string>` | — | Tokens identifying the nav-registry SSOT a route-adding Story is expected to reference. |
|
|
123
117
|
|
|
124
118
|
### `delivery` (optional)
|
|
@@ -127,14 +121,12 @@ top-level keys are validation errors.
|
|
|
127
121
|
| --- | --- | --- | --- | --- |
|
|
128
122
|
| `execution` | No | `object` | — | Nested configuration block. |
|
|
129
123
|
| `execution.timeoutMs` | No | `integer` | — | — |
|
|
130
|
-
| `maxTokenBudget` | No | `integer` | — | — |
|
|
131
124
|
| `lease` | No | `object` | — | Story #3480 (Epic #3457). Assignee-as-lease primitive. ttlMs is the staleness window — a ticket claim whose owner has not emitted a story.heartbeat within this many milliseconds is reclaimable by another operator. Defaults to 900000 (15 min) in lib/config/limits.js. |
|
|
132
125
|
| `lease.ttlMs` | No | `integer` | — | — |
|
|
133
126
|
| `docsFreshness` | No | `object` | — | Nested configuration block. |
|
|
134
127
|
| `docsFreshness.paths` | No | `array` | — | — |
|
|
135
128
|
| `deliverRunner` | No | `object` | — | Nested configuration block. |
|
|
136
|
-
| `deliverRunner.concurrencyCap` | No | `integer` | — | Maximum Stories dispatched
|
|
137
|
-
| `deliverRunner.progressReportIntervalSec` | No | `integer` | — | — |
|
|
129
|
+
| `deliverRunner.concurrencyCap` | No | `integer` | — | Maximum ready Stories dispatched by /deliver at once. Default 3. Moderate by design — keeps host-quota consumption predictable while allowing a small ready-set fan-out. Set 1 for strictly sequential delivery; raise further on hosts with adequate parallel-agent quota. See deliver.md for the sequencing model and throughput tradeoff. |
|
|
138
130
|
| `deliverRunner.verifyConcurrencyCap` | No | `integer` | — | Bounded-concurrency cap for the per-wave verifyWaveResults loop (Epic #3019 Tech Spec §1.4). Separate from the wave-execution `concurrencyCap` so operators can tune ticket-verification parallelism independently of Story dispatch parallelism. Default 4. |
|
|
139
131
|
| `worktreeIsolation` | No | `object` | — | Nested configuration block. |
|
|
140
132
|
| `worktreeIsolation.enabled` | No | `boolean` | — | — |
|
|
@@ -143,11 +135,8 @@ top-level keys are validation errors.
|
|
|
143
135
|
| `worktreeIsolation.primeFromPath` | No | `string` \| `null` | — | — |
|
|
144
136
|
| `worktreeIsolation.allowSymlinkOnWindows` | No | `boolean` | — | — |
|
|
145
137
|
| `worktreeIsolation.reapOnSuccess` | No | `boolean` | — | — |
|
|
146
|
-
| `worktreeIsolation.
|
|
147
|
-
| `worktreeIsolation.bootstrapFiles` | No | `array<string>` | `[".env",".mcp.json"]` | — |
|
|
138
|
+
| `worktreeIsolation.bootstrapFiles` | No | `array<string>` | `[".env",".mcp.json",".agentrc.local.json",".agents/instructions.local.md"]` | — |
|
|
148
139
|
| `signals` | No | `object` | — | Nested configuration block. |
|
|
149
|
-
| `signals.hotspot` | No | `object` | — | Nested configuration block. |
|
|
150
|
-
| `signals.hotspot.p95Multiplier` | No | `number` | — | — |
|
|
151
140
|
| `signals.rework` | No | `object` | — | Nested configuration block. |
|
|
152
141
|
| `signals.rework.editsPerFile` | No | `integer` | — | — |
|
|
153
142
|
| `signals.retry` | No | `object` | — | Nested configuration block. |
|
|
@@ -262,58 +251,36 @@ top-level keys are validation errors.
|
|
|
262
251
|
| `quality.baselineEpsilon.lighthouse` | No | `number` | — | — |
|
|
263
252
|
| `quality.baselineEpsilon.bundle-size` | No | `number` | — | — |
|
|
264
253
|
| `quality.baselineEpsilon.duplication` | No | `number` | — | — |
|
|
265
|
-
| `quality.requireBaselines` | No | `boolean` | — | Story #4495. Fail-closed baseline-enforcement policy for the unified check-baselines close-validation gate. When false (default), a consumer that enables baseline gates (crap/maintainability/…) but has not committed the corresponding baseline artifacts under baselines/ gets a clean skip-with-reason instead of a deterministic first-try close failure. Set true to keep the gate registered so an absent baseline artifact fails close-validation with a preflight hint naming the fix (the fail-closed posture
|
|
266
|
-
| `quality.navigability` | No | `object` | — | Navigability lens +
|
|
254
|
+
| `quality.requireBaselines` | No | `boolean` | — | Story #4495. Fail-closed baseline-enforcement policy for the unified check-baselines close-validation gate. When false (default), a consumer that enables baseline gates (crap/maintainability/…) but has not committed the corresponding baseline artifacts under baselines/ gets a clean skip-with-reason instead of a deterministic first-try close failure. Set true to keep the gate registered so an absent baseline artifact fails close-validation with a preflight hint naming the fix (the fail-closed posture). |
|
|
255
|
+
| `quality.navigability` | No | `object` | — | Navigability lens + journey-suite config (Epic #4131, F2/F3/F1/F4). Read by audit-suite/selector.js (route globs) and /deliver's risk-routed ceremony (journey suite). Opt-in: absent or empty routeGlobs degrades to a silent no-op. |
|
|
267
256
|
| `quality.navigability.routeGlobs` | No | `array<string>` | — | Glob patterns (pages/**, app/**/route.ts) marking paths that add a user-facing route — the route-tree SSOT the navigability lens enumerates and the route-added routing predicate matches against. |
|
|
268
257
|
| `quality.navigability.navRegistry` | No | `array<string>` | — | Tokens identifying the nav-registry SSOT the navigability lens checks every route resolves a nav door against. |
|
|
269
|
-
| `quality.navigability.journeySuite` | No | `string` | — | Path or command for the per-persona journey suite
|
|
270
|
-
| `lifecycle` | No | `object` | — | Knobs consumed by the lifecycle event bus (Epic #2172). `timeouts` is a per-event budget map (eventName → seconds) used by `TimeoutWatchdog`; missing entries fall back to in-listener defaults. `heartbeatWarnSeconds` is the no-progress threshold consumed by `HeartbeatMonitor`. Story #2227 lays down the keys; consumers land in later stories. |
|
|
271
|
-
| `lifecycle.timeouts` | No | `object<map>` | — | — |
|
|
272
|
-
| `lifecycle.heartbeatWarnSeconds` | No | `integer` | — | — |
|
|
258
|
+
| `quality.navigability.journeySuite` | No | `string` | — | Path or command for the per-persona journey suite /deliver's risk-routed ceremony runs. |
|
|
273
259
|
| `mergeWatch` | No | `object` | — | Knobs consumed by the MergeWatcher lifecycle listener (Story #2896, Epic #2880). `intervalSeconds` is the poll cadence between `gh pr view --json mergeCommit,mergedAt` probes after epic.merge.armed; `maxBudgetSeconds` is the total wall-clock budget before the watcher surfaces `agent::blocked` with reason `budget-exceeded`. |
|
|
274
260
|
| `mergeWatch.intervalSeconds` | No | `integer` | `30` | Seconds between MergeWatcher polls. Default 30. |
|
|
275
261
|
| `mergeWatch.maxBudgetSeconds` | No | `integer` | `3600` | Total wall-clock budget (seconds) for the MergeWatcher poll loop. Default 3600 (60 minutes). |
|
|
276
|
-
| `epicAudit` | No | `object` | — | Nested configuration block. |
|
|
277
|
-
| `epicAudit.maxFixAttempts` | No | `integer` | — | Maximum auto-fix retry attempts per finding in /deliver Phase 4 (epic-audit). 0 disables auto-fix. Default 3. |
|
|
278
|
-
| `epicAudit.maxFixScopeFiles` | No | `integer` | — | Maximum file count a single auto-fix may modify before escalating to agent::blocked. Default 5. |
|
|
279
|
-
| `epicAudit.autoFixSeverity` | No | `"high"` \| `"medium"` | `"high"` | Severity threshold for on-branch remediation of the Epic-close lens findings walked inside the /deliver Phase 5 code-review pass (Story #4412 folded the former Phase 4 lens walk into that single cumulative-diff pass). `high` (default) routes only 🔴 Critical / 🟠 High lens findings into the host-LLM remediation loop while 🟡 Medium and 🟢 Suggestion findings graduate to follow-up issues (🟡 Medium concerns are already remediated shift-left at the write-time and Story-scope tiers); `medium` opts back into routing 🔴/🟠/🟡 (Mediums batched per lens). Hard cutover — no back-compat flag. |
|
|
280
262
|
| `codeReview` | No | `object` | — | Nested configuration block. |
|
|
281
|
-
| `codeReview.
|
|
282
|
-
| `codeReview.providers[]` | No | `array<object>` | — | Multi-provider chain (Story #2871). When set and non-empty, takes precedence over the legacy `provider` field. The orchestrator iterates inline entries in declaration order and merges their Finding[] before posting one structured comment; manual-prompt entries (e.g. ultrareview) contribute a trailing 'Manual review suggestions' section. Each item has: name, scopes, optional, manualPrompt, when. |
|
|
263
|
+
| `codeReview.providers[]` | No | `array<object>` | — | Review-provider chain (Story #2871). When unset or empty, defaults to [{ name: "native" }]. The orchestrator iterates inline entries in declaration order and merges their Finding[] before posting one structured comment; manual-prompt entries (e.g. ultrareview) contribute a trailing 'Manual review suggestions' section. Selecting an adapter whose probe fails hard-fails at factory construction unless declared `optional: true` in the chain. Each item has: name, scopes, optional, manualPrompt, when. |
|
|
283
264
|
| `codeReview.providerConfig` | No | `object` | — | Optional escape hatch for adapter-specific configuration. No documented keys in Epic #2815; reserved so future adapters can be configured without another schema migration. |
|
|
284
265
|
| `codeReview.maxFixAttempts` | No | `integer` | — | Maximum auto-fix retry attempts per finding in /deliver Phase 5 (code-review). 0 disables auto-fix. Default 3. |
|
|
285
266
|
| `codeReview.maxFixScopeFiles` | No | `integer` | — | Maximum file count a single auto-fix may modify before escalating to agent::blocked. Default 5. |
|
|
286
267
|
| `codeReview.autoFixSeverity` | No | `"high"` \| `"medium"` | `"medium"` | Severity threshold for on-branch remediation in /deliver Phase 5 (code-review). `medium` (default) routes 🔴/🟠/🟡 findings into the host-LLM focused-fix routing (Mediums batched per lens: one commit per lens, a single validation + rescan at the end) while 🟢 suggestions still graduate to follow-up issues; `high` reproduces the pre-4399 Critical/High-only routing. Hard cutover — no back-compat flag. |
|
|
287
|
-
| `retro` | No | `object` | — | Story #3042 (Epic #3019). Operator-tunable retro behaviour. Currently exposes `perfThresholds`, the gates the retro perf-signals classifier uses to decide which signals to surface in the `## Performance Signals` / `## Recommended Follow-Ons` retro sections. |
|
|
288
|
-
| `retro.perfThresholds` | No | `object` | — | Gates for `classifyPerfSignals` (lib/orchestration/retro-perf-heuristics.js). Defaults are 0.6 / 0.4 / 2. |
|
|
289
|
-
| `retro.perfThresholds.utilisation` | No | `number` | — | Per-wave utilisation threshold. Waves whose `utilisation` is strictly below this value emit a `low-utilisation` signal. Default 0.6. |
|
|
290
|
-
| `retro.perfThresholds.bootstrapShare` | No | `number` | — | Maximum acceptable share of cumulative Story execution time spent in the story-init phase. When exceeded the retro emits a `high-bootstrap-share` signal. Default 0.4. |
|
|
291
|
-
| `retro.perfThresholds.capBindingRunLength` | No | `integer` | — | Minimum run length of consecutive cap-binding waves before the retro emits a `cap-binding-run` signal. Default 2. |
|
|
292
268
|
| `refactorStage` | No | `object` | — | Opt-in, config-gated post-green refactor checkpoint wired into story-deliver (Story #3430, Epic #3418). Strictly additive and default-OFF: when disabled, story-deliver behaves exactly as before. Advisory only — never changes existing close-validation gate semantics. |
|
|
293
269
|
| `refactorStage.enabled` | No | `boolean` | `false` | When true, story-deliver runs an advisory post-green refactor stage (core/code-review-and-quality skill, Post-Green Refactor Pass) after the suite is green. Default false — when unset the stage is skipped and close-validation gate semantics are unchanged. |
|
|
294
270
|
| `acceptanceEval` | No | `object` | — | Story #3819. Bounded per-Story acceptance self-eval loop. After the implementation commits land and before the Story-implementation phase flips to `closing`, an independent (fresh-context) critic pass scores the working diff against each inline `acceptance[]` item, redrafts the unmet items, and re-evaluates — capped at `maxRounds` redraft rounds, then escalates to `agent::blocked` when criteria remain unmet. There is no `enabled` flag: the loop is a hard cutover (always on). |
|
|
295
271
|
| `acceptanceEval.maxRounds` | No | `integer` | — | Maximum number of redraft rounds before escalation. Default 2; clamped into [1, hard ceiling] by lib/config/acceptance-eval.js so the cap can never be disabled (maxRounds: 0 clamps up to 1). |
|
|
296
272
|
| `acceptanceEval.clusterCeiling` | No | `integer` | — | Epic #4475 (M4-B). Max acceptance criteria one single-delivery acceptance critic scores in a single fresh-context pass. Single delivery clusters the Epic ## Acceptance Table ACs into ceil(totalACs / clusterCeiling) groups and spawns one maker-blind critic per cluster, restoring the distributed acceptance coverage the per-Story critic fan-out gave for free. Default 4; clamped into [1, 8] by lib/config/acceptance-eval.js so a large value cannot collapse the fan-out to a single diluted critic. Ignored on the fan-out route. |
|
|
297
273
|
| `ci` | No | `object` | — | Nested configuration block. |
|
|
298
|
-
| `ci.skipForStoryPushes` | No | `boolean` | — | Story #2899 (Epic #2880, F13). When true (default), pre-push tooling appends a '[skip ci]' trailer to Story-branch commit subjects so intermediate pushes do not stampede the CI fleet. The Epic-branch merge commit produced by story-close.js never carries the marker, regardless of this flag. |
|
|
299
|
-
| `ci.earlyPr` | No | `boolean` | — | Story #4356 (Epic #4355). When true (default), /deliver opens the Epic PR early — before every Story merges — so CI starts warming while later waves run. Set false to defer PR creation until the Epic branch is complete. |
|
|
300
274
|
| `ci.watch` | No | `object` | — | Story #4356 (Epic #4355). Poll-loop tuning for the merge/CI watch. pollIntervalMs is the cadence between check probes; maxPolls caps total probes before the watcher gives up; maxResumes caps how many times the watcher may resume after a transient stall. |
|
|
301
275
|
| `ci.watch.pollIntervalMs` | No | `integer` | — | — |
|
|
302
276
|
| `ci.watch.maxPolls` | No | `integer` | — | — |
|
|
303
277
|
| `ci.watch.maxResumes` | No | `integer` | — | — |
|
|
304
278
|
| `ci.autoMerge` | No | `"trust-ci"` \| `"strict"` | — | Story #4356 (Epic #4355). Merge posture. 'trust-ci' (default) merges once required checks pass; 'strict' additionally requires a clean review gate. |
|
|
305
|
-
| `
|
|
306
|
-
| `routing` | No | `object` | — | Epic #4475 (M4-A). Delivery-route selection for epic-shaped work. |
|
|
307
|
-
| `routing.singleDelivery` | No | `boolean` | — | Epic #4475 (M4-A). Global kill-switch for the single-delivery route. When true (default), an Epic marked `delivery::single` at plan time routes to the single-delivery helper; when false, EVERY Epic — even a single-marked one — is forced down the fan-out path (the instant, code-rollback-free per-consumer revert). Shipped INERT in M4-A: the router's single verdict falls through to fan-out until M4-B wires the executor, so the knob has no observable effect yet. |
|
|
279
|
+
| `routing` | No | `object` | — | v2 delivery-spawn routing: role-scoped boot contexts and maker-checker sampling. The v1 singleDelivery epic-route kill-switch was removed in Stage 6. |
|
|
308
280
|
| `routing.roleScopedAgents` | No | `boolean` | — | Epic #4478 (M7-B). Kill-switch for the role-scoped boot contexts. When true (default), a converted delivery spawn (`story-worker`, `acceptance-critic`) boots on its own `.claude/agents/<role>.md` system prompt instead of re-paying the full CLAUDE.md @-import closure (≈50KB → ≈8KB per spawn — the payoff of the context diet). When false, every converted spawn falls back to `subagent_type: general-purpose` — the instant, code-rollback-free per-consumer revert, and the universal escape for hosts that ignore `.claude/agents/`. The fallback is the full-closure agent that ran before M7-B, so flipping it off never drops a gate. |
|
|
309
281
|
| `routing.freshCriticSampleRate` | No | `number` | — | Epic #4478 (M7-B, Part 2). Maker-checker sampling floor. Risk-routed ceremony sends a low-risk acceptance cluster down the contract-identical inline critic path, but this fraction of low-risk clusters is still forced through a fresh-context critic so low risk never means zero independent checking. Clamped to [0, 1]; 0 disables the floor, 1 forces every cluster fresh. Default 0.2. Consumed by resolveCeremonyForRisk (lib/orchestration/ceremony-routing.js). |
|
|
310
|
-
| `
|
|
311
|
-
| `
|
|
312
|
-
| `preflight.maxWaves` | No | `integer` | — | — |
|
|
313
|
-
| `preflight.maxInstallCostSeconds` | No | `integer` | — | — |
|
|
314
|
-
| `preflight.maxGithubApiRequests` | No | `integer` | — | — |
|
|
315
|
-
| `preflight.maxClaudeQuotaTokens` | No | `integer` | — | — |
|
|
316
|
-
| `failOnConcurrencyHazards` | No | `boolean` | — | — |
|
|
282
|
+
| `routing.ceremonyProfile` | No | `"minimal"` \| `"standard"` \| `"strict"` | — | Acceptance-ceremony depth. minimal = always inline critic; strict = always fresh-context critic; standard (default) = risk-routed with the maker-checker sampling floor. |
|
|
283
|
+
| `routing.closeAndLand` | No | `boolean` | — | When true (default), single-story-close lands through merge in one close. Opt out per-run with --no-wait-merge. |
|
|
317
284
|
| `feedbackLoop` | No | `object` | — | Nested configuration block. |
|
|
318
285
|
| `feedbackLoop.auditResultsAutoFile` | No | `boolean` | `true` | When true (default), the Epic finalize listener auto-files non-blocking audit-results findings as follow-up issues routed by source classification. Set to false to suppress auto-filing; findings remain accessible in the structured comments on the Epic. |
|
|
319
286
|
| `feedbackLoop.retroProposals` | No | `boolean` | `true` | When true (default), the retro auto-files its actionable routed proposals as meta::<framework-gap\|consumer-improvement> + friction::<category> issues via the graduator pre-parsed-findings seam, and the rendered retro sections list the filed issue numbers instead of paste-ready gh command stanzas. Set to false to fall back to the command stanzas. |
|
|
@@ -453,13 +420,41 @@ suppress a channel entirely, set its array to `[]`.
|
|
|
453
420
|
|
|
454
421
|
## `planning`
|
|
455
422
|
|
|
456
|
-
`/plan` tuning. All fields optional.
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
423
|
+
`/plan` tuning. All fields optional. **Defaults are advisory**, not Story-width
|
|
424
|
+
ceilings: the retired `taskSizing.softFiles` / `hardFiles` file-count gates,
|
|
425
|
+
`planning.modelCapacity` operator knobs, and `maxTokenBudget` envelope are
|
|
426
|
+
gone. Session-mass ceilings live as absolute authored-token constants on
|
|
427
|
+
`DEFAULT_MODEL_CAPACITY` in `ticket-validator-sizing.js` (soft 30k / hard 75k).
|
|
428
|
+
Soft findings are advisory; the hard ceiling rejects only Spec novels, and
|
|
429
|
+
`wide` lifts that rejection. Cohesion / split policy / conflict advisories
|
|
430
|
+
remain the primary sizing signal.
|
|
431
|
+
|
|
432
|
+
| Field | Required | Default | Purpose |
|
|
433
|
+
| --- | --- | --- | --- |
|
|
434
|
+
| `riskHeuristics` | No | (framework list) | Free-form rubric for `risk::high` decisions (informational — does not gate runtime). Accepts a plain array or `{ append/prepend }`. |
|
|
435
|
+
| `failOnSharedEditors` | No | `false` | When `true`, upgrade shared-editor findings to hard errors. Soft advisory otherwise. |
|
|
436
|
+
| `requireExplicitCrossStoryDeps` | No | `false` | When `true`, upgrade implicit cross-Story dep findings to hard errors. Soft advisory otherwise. |
|
|
437
|
+
| `failOnRegistryConflicts` | No | `false` | When `true`, upgrade concurrent registry-edit findings to hard errors. Soft advisory otherwise. |
|
|
438
|
+
| `failOnLargeFanOut` | No | `false` | When `true`, upgrade delete blast-radius (`fan-out-warning`) findings to hard errors. Soft advisory otherwise. |
|
|
439
|
+
| `largeFanOutThreshold` | No | `10` | Call-site count above which a Story that **deletes** a module warns. Not a Story-size limit — it only scores base-branch references to a path marked `assumption: "deletes"`. |
|
|
440
|
+
| `crossCuttingRegistries` | No | listener/handler index patterns | Registry path patterns flagged when two Stories edit them concurrently. |
|
|
441
|
+
| `navigation` | No | (empty → no-op) | Opt-in reachability gate for route-adding Stories. |
|
|
442
|
+
|
|
443
|
+
### Conflict advisories (`failOn*` / `largeFanOutThreshold`)
|
|
444
|
+
|
|
445
|
+
These knobs do **not** force thin Stories. By default every conflict finding
|
|
446
|
+
is `soft` (visible to the planner, does not trip re-decompose). Set a
|
|
447
|
+
`failOn*` flag only when you want that finding class to become a hard
|
|
448
|
+
`errors[]` refusal.
|
|
449
|
+
|
|
450
|
+
`largeFanOutThreshold` specifically:
|
|
451
|
+
|
|
452
|
+
1. Looks only at `body.changes[]` entries with `assumption: "deletes"`.
|
|
453
|
+
2. Counts distinct base-branch files that reference the deleted module basename.
|
|
454
|
+
3. Emits `fan-out-warning` when `callSiteCount > largeFanOutThreshold` (default 10).
|
|
455
|
+
4. Stays soft unless `failOnLargeFanOut: true`. Persist can still require an
|
|
456
|
+
explicit `--allow-large-fan-out` operator flag for very large delete blasts;
|
|
457
|
+
that is separate from Story sizing.
|
|
463
458
|
|
|
464
459
|
### `planning.context`
|
|
465
460
|
|
|
@@ -474,19 +469,20 @@ planning agent's context budget.
|
|
|
474
469
|
|
|
475
470
|
### `planning.codebaseSnapshot`
|
|
476
471
|
|
|
477
|
-
Controls the
|
|
472
|
+
Controls the codebase-snapshot fetcher that grounds Tech Spec / Story authoring.
|
|
478
473
|
|
|
479
474
|
| Field | Required | Default | Purpose |
|
|
480
475
|
| -------------------- | -------- | ----------- | ------------------------------------------------------------------------ |
|
|
481
476
|
| `tier` | No | `'skinny'` | One of `'skinny'` or `'medium'`. `medium` opts into a richer snapshot. |
|
|
482
477
|
| `include` | No | (see below) | Glob patterns whose matches are included in the snapshot. |
|
|
483
478
|
| `exclude` | No | (see below) | Glob patterns whose matches are excluded from the snapshot. |
|
|
484
|
-
| `recentCommitWindow` | No |
|
|
479
|
+
| `recentCommitWindow` | No | `30` | Number of recent commits to summarise in the snapshot header. |
|
|
485
480
|
|
|
486
481
|
The shipped `include` default scans `.agents/scripts/**`, `src/**`,
|
|
487
482
|
`lib/**`, `app/**`, and `packages/**`; the shipped `exclude` default drops
|
|
488
|
-
`node_modules`, `dist`, `build`,
|
|
489
|
-
project's source layout
|
|
483
|
+
`node_modules`, `dist`, `build`, `.next`, `.turbo`, `coverage`, and
|
|
484
|
+
`*.test.*` / `*.spec.*`. Override only when the project's source layout
|
|
485
|
+
differs.
|
|
490
486
|
|
|
491
487
|
The `skinny` tier caps its file list at 250 paths. When the include set
|
|
492
488
|
matches more than that, the cap is applied with **per-top-level-directory
|
|
@@ -496,10 +492,21 @@ rather than a flat lexicographic slice — so a large, dot-prefixed tree like
|
|
|
496
492
|
the consumer's own `src/` / `lib/` source. When `.agents/scripts/**` is the
|
|
497
493
|
only matching tree (the Mandrel-repo dogfood case), the round-robin
|
|
498
494
|
degenerates to taking the first 250 sorted paths, so that snapshot stays
|
|
499
|
-
useful. When truncation occurs, `/plan`
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
495
|
+
useful. When truncation occurs, `/plan` emits an operator-visible warning
|
|
496
|
+
naming the dropped file count and suggesting `tier: "medium"` and/or a
|
|
497
|
+
narrowed `include`. Opt into the richer `medium` tier or narrow `include`
|
|
498
|
+
if the partial skinny view is insufficient.
|
|
499
|
+
|
|
500
|
+
### `planning.navigation`
|
|
501
|
+
|
|
502
|
+
Opt-in. When `routeGlobs` is absent or empty the reachability gate is a
|
|
503
|
+
silent no-op. When configured, a Story that adds a matching route path is
|
|
504
|
+
expected to also touch a `navRegistry` token.
|
|
505
|
+
|
|
506
|
+
| Field | Required | Default | Purpose |
|
|
507
|
+
| ------------- | -------- | ------- | ------- |
|
|
508
|
+
| `routeGlobs` | No | `[]` | Globs marking user-facing route paths. |
|
|
509
|
+
| `navRegistry` | No | `[]` | Tokens identifying the nav-registry SSOT. |
|
|
503
510
|
|
|
504
511
|
---
|
|
505
512
|
|
|
@@ -510,15 +517,14 @@ fall back to documented defaults (or are no-ops when omitted).
|
|
|
510
517
|
|
|
511
518
|
### `delivery.execution`
|
|
512
519
|
|
|
513
|
-
| Field | Required | Default
|
|
514
|
-
| ----------- | -------- |
|
|
515
|
-
| `timeoutMs` | No |
|
|
516
|
-
|
|
517
|
-
### `delivery.maxTokenBudget`
|
|
520
|
+
| Field | Required | Default | Purpose |
|
|
521
|
+
| ----------- | -------- | ---------- | ------------------------------------------------------------------ |
|
|
522
|
+
| `timeoutMs` | No | `600000` | Per-spawn timeout (ms) for child processes the framework launches. |
|
|
518
523
|
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
524
|
+
> Session-mass ceilings live as absolute authored-token constants on
|
|
525
|
+
> `DEFAULT_MODEL_CAPACITY` in `ticket-validator-sizing.js` (soft 30k / hard
|
|
526
|
+
> 75k). There is no `maxTokenBudget` envelope — cohesion is the primary
|
|
527
|
+
> sizing signal; the numeric backstop only catches Spec novels.
|
|
522
528
|
|
|
523
529
|
### `delivery.docsFreshness`
|
|
524
530
|
|
|
@@ -531,7 +537,7 @@ fall back to documented defaults (or are no-ops when omitted).
|
|
|
531
537
|
| Field | Required | Default | Purpose |
|
|
532
538
|
| --------------------------- | -------- | ------- | ------------------------------------------------ |
|
|
533
539
|
| `concurrencyCap` | No | `3` | Max parallel Story sub-agents per wave. |
|
|
534
|
-
| `
|
|
540
|
+
| `verifyConcurrencyCap` | No | `4` | Max parallel verify steps per wave. |
|
|
535
541
|
|
|
536
542
|
### `delivery.worktreeIsolation`
|
|
537
543
|
|
|
@@ -541,14 +547,13 @@ checkout's HEAD.
|
|
|
541
547
|
|
|
542
548
|
| Field | Required | Default | Purpose |
|
|
543
549
|
| ----------------------- | --------------- | ---------------- | ----------------------------------------------------------- |
|
|
544
|
-
| `enabled` | No | `
|
|
550
|
+
| `enabled` | No | `true` | Master switch. |
|
|
545
551
|
| `root` | Conditional | `.worktrees` | Required when `enabled: true`. Worktree parent directory. |
|
|
546
552
|
| `nodeModulesStrategy` | No | `clone` (darwin/linux); `per-worktree` (Windows) | One of `per-worktree`, `clone`, `symlink`, `pnpm-store`. `clone` copy-on-write (reflink/clonefile) clones the donor's `node_modules` and skips the per-tree install on a byte-exact lockfile match, falling back to `per-worktree` on any failure. |
|
|
547
553
|
| `primeFromPath` | No | `null` | Optional source path used to prime `node_modules`. |
|
|
548
554
|
| `allowSymlinkOnWindows` | No | `false` | Permit symlink strategy on Windows (requires admin/dev mode). |
|
|
549
555
|
| `reapOnSuccess` | No | `true` | Reap the worktree after a successful Story close. |
|
|
550
|
-
| `
|
|
551
|
-
| `bootstrapFiles` | No | `[".env", ".mcp.json"]` | Untracked files copied into each new worktree. |
|
|
556
|
+
| `bootstrapFiles` | No | `[".env", ".mcp.json", ".agentrc.local.json", ".agents/instructions.local.md"]` | Untracked files copied into each new worktree (local overrides included). |
|
|
552
557
|
|
|
553
558
|
### `delivery.signals`
|
|
554
559
|
|
|
@@ -556,7 +561,6 @@ Friction-detector thresholds consumed by progress-signal listeners.
|
|
|
556
561
|
|
|
557
562
|
| Field | Required | Default | Purpose |
|
|
558
563
|
| ---------------------- | -------- | ------- | ------------------------------------------------------------------------ |
|
|
559
|
-
| `hotspot.p95Multiplier`| No | (none) | Hot-file threshold expressed as a multiplier of the p95 edit frequency. |
|
|
560
564
|
| `rework.editsPerFile` | No | (none) | Edits to the same file before a rework signal fires. |
|
|
561
565
|
| `retry.repeatCount` | No | (none) | Identical retried commands before a retry signal fires. |
|
|
562
566
|
|
|
@@ -692,74 +696,36 @@ baseline.
|
|
|
692
696
|
| `lighthouse` | No | (none) | Epsilon for Lighthouse rows. |
|
|
693
697
|
| `bundle-size` | No | (none) | Epsilon for bundle-size rows. |
|
|
694
698
|
|
|
695
|
-
### `delivery.
|
|
696
|
-
|
|
697
|
-
Knobs consumed by the lifecycle event bus (Epic #2172). `timeouts` is a
|
|
698
|
-
per-event budget map (eventName → seconds) used by `TimeoutWatchdog`;
|
|
699
|
-
missing entries fall back to in-listener defaults.
|
|
700
|
-
|
|
701
|
-
| Field | Required | Default | Purpose |
|
|
702
|
-
| ---------------------- | -------- | ------- | ------------------------------------------------------ |
|
|
703
|
-
| `timeouts` | No | `{}` | `{ <eventName>: <seconds> }` watchdog budgets. |
|
|
704
|
-
| `heartbeatWarnSeconds` | No | (none) | No-progress threshold consumed by `HeartbeatMonitor`. |
|
|
705
|
-
|
|
706
|
-
### `delivery.epicAudit`
|
|
699
|
+
### `delivery.codeReview`
|
|
707
700
|
|
|
708
|
-
|
|
701
|
+
Configuration block for the code-review pipeline that runs during Story
|
|
702
|
+
delivery (`helpers/deliver-story` / `runCodeReview()`). Select providers
|
|
703
|
+
via the `providers[]` chain (generated table above); when unset or empty,
|
|
704
|
+
the factory defaults to `[{ name: "native" }]`. See
|
|
705
|
+
[`.agents/README.md` § Code review providers](../README.md#code-review-providers-pluggable-chain)
|
|
706
|
+
for chain-entry fields (`name`, `scopes`, `optional`, `manualPrompt`, `when`).
|
|
709
707
|
|
|
710
708
|
| Field | Required | Default | Purpose |
|
|
711
709
|
| ------------------ | -------- | ------- | -------------------------------------------------------------------- |
|
|
712
|
-
| `
|
|
710
|
+
| `providers` | No | `[{ name: "native" }]` | Review-provider chain. Inline adapters merge `Finding[]`; manual-prompt entries append suggestions. |
|
|
711
|
+
| `providerConfig` | No | `{}` | Optional escape hatch for adapter-specific configuration. Reserved; no documented keys yet. |
|
|
712
|
+
| `maxFixAttempts` | No | `3` | Max auto-fix retry attempts per finding. `0` disables auto-fix. |
|
|
713
713
|
| `maxFixScopeFiles` | No | `5` | Max file count a single auto-fix may modify before escalating to `agent::blocked`. |
|
|
714
|
-
|
|
715
|
-
### `delivery.codeReview`
|
|
716
|
-
|
|
717
|
-
Configuration block for the code-review pipeline that runs at **both**
|
|
718
|
-
Story-close (`story-close.js`) and Epic-close (`/deliver` Phase 5).
|
|
719
|
-
Selects the review backend, exposes an escape-hatch for adapter-specific
|
|
720
|
-
configuration, and sets the auto-fix budget enforced at each close scope.
|
|
721
|
-
|
|
722
|
-
| Field | Required | Default | Purpose |
|
|
723
|
-
| ------------------ | -------- | ---------- | -------------------------------------------------------------------- |
|
|
724
|
-
| `provider` | No | `"native"` | ReviewProvider adapter that produces the `Finding[]` consumed by `runCodeReview()`. See enum values below. |
|
|
725
|
-
| `providerConfig` | No | `{}` | Optional escape hatch for adapter-specific configuration. Reserved so future adapters can be configured without another schema migration; no documented keys in Epic #2815. |
|
|
726
|
-
| `maxFixAttempts` | No | `3` | Max auto-fix retry attempts per finding. `0` disables auto-fix. Applied at **both** Story-close and Epic-close. |
|
|
727
|
-
| `maxFixScopeFiles` | No | `5` | Max file count a single auto-fix may modify before escalating to `agent::blocked`. Applied at **both** Story-close and Epic-close. |
|
|
728
|
-
|
|
729
|
-
#### `provider` enum
|
|
730
|
-
|
|
731
|
-
| Value | Behaviour |
|
|
732
|
-
| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
733
|
-
| `native` | Default. In-process maintainability/lint pass that runs without any external plugin. Always available. |
|
|
734
|
-
| `codex` | Invokes the `/codex:review` Claude Code plugin via the [`codex-plugin-cc`](https://github.com/openai/codex-plugin-cc) backend. Selecting `codex` when the plugin is not installed hard-fails at factory construction with remediation guidance — there is no silent fallback to `native`. |
|
|
714
|
+
| `autoFixSeverity` | No | `"medium"` | Severity threshold for on-branch remediation (`medium` or `high`). |
|
|
735
715
|
|
|
736
716
|
#### Dual-scope fix budget
|
|
737
717
|
|
|
738
|
-
`maxFixAttempts` and `maxFixScopeFiles` are enforced
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
-
|
|
742
|
-
Story branch's diff and applies the budget per finding before merging
|
|
743
|
-
into `epic/<epicId>`.
|
|
744
|
-
- **Epic-close** — `/deliver` Phase 5 runs `runCodeReview()` against
|
|
745
|
-
the integrated Epic branch and applies the same per-finding budget
|
|
746
|
-
before opening the PR to `main`.
|
|
747
|
-
|
|
748
|
-
Setting `maxFixAttempts: 0` disables auto-fix at both scopes; there is no
|
|
749
|
-
per-scope override.
|
|
750
|
-
|
|
751
|
-
### `delivery.failOnConcurrencyHazards`
|
|
752
|
-
|
|
753
|
-
| Field | Required | Default | Purpose |
|
|
754
|
-
| --------------------------- | -------- | ------- | ----------------------------------------------------------------------------------------------- |
|
|
755
|
-
| `failOnConcurrencyHazards` | No | (none) | When `true`, hard-fail the plan if Phase 7 detects shared-editor or unsequenced cross-Story deps. |
|
|
718
|
+
`maxFixAttempts` and `maxFixScopeFiles` are enforced during the risk-routed
|
|
719
|
+
Story review ceremony using the same configured values for every Story in
|
|
720
|
+
a `/deliver` run. Setting `maxFixAttempts: 0` disables auto-fix; there is
|
|
721
|
+
no per-Story override.
|
|
756
722
|
|
|
757
723
|
### `delivery.feedbackLoop`
|
|
758
724
|
|
|
759
725
|
| Field | Required | Default | Purpose |
|
|
760
726
|
| ----------------------- | -------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
|
|
761
|
-
| `auditResultsAutoFile` | No | `true` | When `true`, the
|
|
762
|
-
| `retroProposals` | No | `true` | When `true`,
|
|
727
|
+
| `auditResultsAutoFile` | No | `true` | When `true`, the deliver finalize path auto-files non-blocking findings from the unified `verification-results` comment as follow-up issues routed by source classification. (The former `codeReviewAutoFile` key was retired with its graduator when Story #4411 unified the pass; a config carrying it fails validation.) |
|
|
728
|
+
| `retroProposals` | No | `true` | When `true`, auto-file the retro's actionable routed proposals as GitHub follow-up issues (Story #4418). |
|
|
763
729
|
|
|
764
730
|
---
|
|
765
731
|
|
|
@@ -771,7 +737,7 @@ number of keys.
|
|
|
771
737
|
|
|
772
738
|
| File | Audience | Role |
|
|
773
739
|
| --------------------------------- | ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
|
|
774
|
-
| `.agentrc.json` (repo root) | The framework dogfooding itself | Live config used when running `/
|
|
740
|
+
| `.agentrc.json` (repo root) | The framework dogfooding itself | Live config used when running `/plan` and `/deliver` against this repo. Exercises the framework end-to-end on its own source tree. |
|
|
775
741
|
| `.agents/starter-agentrc.json` | Downstream consumer repos | Bootstrap delta-seed a consumer copies via `cp .agents/starter-agentrc.json .agentrc.json`. Minimum schema-required keys only. |
|
|
776
742
|
| `.agents/docs/agentrc-reference.json` | Operators and reviewers | Exhaustive editor reference enumerating every schema key with its framework default. Not a copy target. |
|
|
777
743
|
|
|
@@ -782,7 +748,7 @@ number of keys.
|
|
|
782
748
|
| `delivery.quality.gates.crap.targetDirs` | `[".agents/scripts"]` | `["src"]` | Same reason as maintainability above. |
|
|
783
749
|
| `github.owner` / `.repo` / `.projectNumber` | Populated for `dsj1984/mandrel` | `[OWNER]` / `[REPO]` / `null` | Shared repo identifiers; placeholders in the template are replaced by `node .agents/scripts/bootstrap.js` (or by hand). |
|
|
784
750
|
| `github.operatorHandle` | Committed as the `@[USERNAME]` placeholder; each contributor overrides it in gitignored `.agentrc.local.json` | `@[USERNAME]` | Schema-required, but per-contributor: the committed placeholder resolves to null and the lease guards fail closed until you set your own handle locally (see [Per-machine local overrides](#per-machine-local-overrides)). |
|
|
785
|
-
| `delivery.worktreeIsolation.nodeModulesStrategy` | `
|
|
751
|
+
| `delivery.worktreeIsolation.nodeModulesStrategy` | `clone` | `clone` | Platform default on darwin/linux (copy-on-write clone of donor `node_modules`); Windows dogfood/template use `per-worktree`. |
|
|
786
752
|
|
|
787
753
|
When a consumer runs `/mandrel-update`, the
|
|
788
754
|
[`mandrel-sync-config`](../workflows/helpers/mandrel-sync-config.md)
|
|
@@ -41,8 +41,11 @@ the `AGENT_LOG_LEVEL` environment variable:
|
|
|
41
41
|
- `silent` — only `fatal` emits; useful for script embedding where the caller
|
|
42
42
|
owns presentation.
|
|
43
43
|
- `info` — default. Emits `info` / `warn` / `error` / `fatal`.
|
|
44
|
-
- `verbose` — adds `debug` trace output on top of the `info`
|
|
45
|
-
|
|
44
|
+
- `verbose` — adds `debug` trace output (`Logger.debug`) on top of the `info`
|
|
45
|
+
set.
|
|
46
|
+
|
|
47
|
+
Unrecognized `AGENT_LOG_LEVEL` values fall back to `info`. There is no
|
|
48
|
+
`debug` level alias.
|
|
46
49
|
|
|
47
50
|
This is a diagnostic knob: set it when you need quieter script embedding
|
|
48
51
|
(`silent`) or a deeper trace (`verbose`). The friction-telemetry MUST it sits
|
|
@@ -55,23 +58,17 @@ schema mechanics are in [§ Friction telemetry](#friction-telemetry) above.
|
|
|
55
58
|
## FinOps & token budgeting (economic guardrails)
|
|
56
59
|
|
|
57
60
|
Mandrel does **not** enforce live LLM spend from response metadata. The
|
|
58
|
-
framework limits **hydrated prompt size**
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
sections before you receive the prompt.
|
|
71
|
-
- **`delivery.preflight.*`** (optional): before `/deliver` fan-out,
|
|
72
|
-
`epic-deliver-preflight.js` compares **estimated** story count, waves,
|
|
73
|
-
install time, GitHub API volume, and Claude quota tokens against configured
|
|
74
|
-
ceilings (`maxClaudeQuotaTokens`, etc.). A breach surfaces via
|
|
75
|
-
`agent::blocked`; there is no per-tool-call metering.
|
|
61
|
+
framework limits **hydrated prompt size** via section-aware elision
|
|
62
|
+
(`elideEnvelope`) and optional **pre-dispatch estimates**; your host
|
|
63
|
+
runtime (editor / CLI) owns session quota and hard stops. Consult this
|
|
64
|
+
section when reasoning about why a task prompt was elided or why `/deliver`
|
|
65
|
+
refused a fan-out on budget grounds.
|
|
66
|
+
|
|
67
|
+
### Session-mass capacity (plan-time sizing)
|
|
68
|
+
|
|
69
|
+
- **`DEFAULT_MODEL_CAPACITY`** (`lib/orchestration/ticket-validator-sizing.js`):
|
|
70
|
+
absolute authored-token ceilings for plan-time Story sizing (soft 30k /
|
|
71
|
+
hard 75k). Not operator-configurable via `.agentrc.json`; programmatic
|
|
72
|
+
override via `opts.modelCapacity` on validateTickets / runPlanPersist only.
|
|
76
73
|
- **Host runtime**: session billing, quota exhaustion, and operator overrides
|
|
77
74
|
are enforced by your provider (e.g. Claude Code), not by Mandrel scripts.
|
|
@@ -4,8 +4,8 @@ This is the consumer-facing reference for the quality gates the framework
|
|
|
4
4
|
runs against your repo: the lint baseline ratchet, the maintainability
|
|
5
5
|
ratchet, the CRAP per-method gate, the **absolute quality floors**
|
|
6
6
|
(90/85/90 coverage, MI ≥ 70, CRAP ≤ 20), the anti-thrashing protocol,
|
|
7
|
-
and the concurrent close-safety retry that protects
|
|
8
|
-
multiple Stories close in quick succession.
|
|
7
|
+
and the concurrent close-safety retry that protects Story-branch pushes
|
|
8
|
+
when multiple Stories close in quick succession.
|
|
9
9
|
|
|
10
10
|
The floor + ratchet duo is intentional: the ratchet protects against
|
|
11
11
|
regressions on touched files; the floor enforces an absolute threshold
|
|
@@ -36,10 +36,9 @@ it once and reuse the context as you read through any individual gate.
|
|
|
36
36
|
|
|
37
37
|
## Concurrent close safety
|
|
38
38
|
|
|
39
|
-
`/deliver`
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
the new remote tip, push again — bounded by
|
|
39
|
+
`/deliver` may close multiple Stories from separate Story branches in quick
|
|
40
|
+
succession. The push step inside `single-story-close.js` refreshes against the
|
|
41
|
+
latest `main` and retries a rejected Story-branch push — bounded by
|
|
43
42
|
`DEFAULT_STORY_MERGE_RETRY.maxAttempts` (3) and
|
|
44
43
|
`DEFAULT_STORY_MERGE_RETRY.backoffMs` (`[250, 500, 1000]`) from
|
|
45
44
|
`.agents/scripts/lib/config/runners.js`.
|
|
@@ -117,18 +116,14 @@ The same files-out-of-scope list as before, declared in `.c8rc.cjs`:
|
|
|
117
116
|
whose meaningful logic (label taxonomy + project field defs) lives
|
|
118
117
|
in `lib/label-taxonomy.js` and is unit-tested there. The CLI shell
|
|
119
118
|
itself is integration-only against a live GitHub repo.
|
|
120
|
-
-
|
|
121
|
-
unit-tested hydration engine; end-to-end coverage requires a real
|
|
122
|
-
provider tree and Story prompt context, which lives in integration
|
|
123
|
-
tests.
|
|
124
|
-
- `plan-context.js`, `plan-persist.js`, `epic-plan-healthcheck.js` —
|
|
119
|
+
- `plan-context.js`, `plan-persist.js` —
|
|
125
120
|
`/plan` CLI shells with no unit-test seam; the meaningful
|
|
126
121
|
orchestration logic lives in `lib/orchestration/plan-context.js`,
|
|
127
122
|
`lib/orchestration/plan-persist/*`, and the plan phase modules, and is
|
|
128
123
|
unit-tested there.
|
|
129
124
|
- A larger Story #1702 carve-out of top-level CLI gates, orchestration
|
|
130
125
|
CLIs, git-manipulation CLIs, and `lib/*` glue (e.g. `lint-baseline.js`,
|
|
131
|
-
`story-
|
|
126
|
+
`single-story-init.js`, `run-tests.js`,
|
|
132
127
|
`lib/config-schema.js`) — see the `.c8rc.cjs` header comment for the
|
|
133
128
|
per-category rationale and the authoritative entry list.
|
|
134
129
|
|
|
@@ -251,7 +246,7 @@ file. When any threshold under
|
|
|
251
246
|
the qualitative anti-thrashing cues in
|
|
252
247
|
[`.agents/instructions.md`](../instructions.md) are tripped, the
|
|
253
248
|
friction logger flips the Story to `agent::blocked` and
|
|
254
|
-
posts a structured `friction` comment on the
|
|
249
|
+
posts a structured `friction` comment on the Story so the operator has
|
|
255
250
|
the trace.
|
|
256
251
|
|
|
257
252
|
---
|
|
@@ -261,9 +256,8 @@ the trace.
|
|
|
261
256
|
After a Story's implementation commits land and **before** the Story
|
|
262
257
|
proceeds to close, delivery runs a bounded acceptance self-eval loop
|
|
263
258
|
(Step 1a of
|
|
264
|
-
[`helpers/
|
|
265
|
-
|
|
266
|
-
in
|
|
259
|
+
[`helpers/deliver-story`](../workflows/helpers/deliver-story.md); the shared
|
|
260
|
+
per-round mechanic lives in
|
|
267
261
|
[`helpers/acceptance-self-eval`](../workflows/helpers/acceptance-self-eval.md),
|
|
268
262
|
with the gate CLI at
|
|
269
263
|
[`.agents/scripts/acceptance-eval.js`](../scripts/acceptance-eval.js)).
|
|
@@ -293,8 +287,8 @@ the `delivery.acceptanceEval` field reference.
|
|
|
293
287
|
> Baseline envelope, axes, and component model: see the
|
|
294
288
|
> [Baseline reference](#baseline-reference) section below.
|
|
295
289
|
|
|
296
|
-
The lint baseline engine enforces zero-deterioration during
|
|
297
|
-
|
|
290
|
+
The lint baseline engine enforces zero-deterioration during Story
|
|
291
|
+
delivery. Integrations fail if new lint warnings are introduced, and the
|
|
298
292
|
baseline automatically tightens when the codebase improves.
|
|
299
293
|
|
|
300
294
|
The canonical baseline file lives at `baselines/lint.json` (override via
|
|
@@ -319,7 +313,7 @@ this was removed in a pre-npm-era release; the operator is now the gate.
|
|
|
319
313
|
A per-file maintainability scoring engine computes composite scores based
|
|
320
314
|
on cyclomatic complexity, file length, and dependency counts. The
|
|
321
315
|
`baselines/maintainability.json` baseline prevents score degradation
|
|
322
|
-
between
|
|
316
|
+
between Stories.
|
|
323
317
|
|
|
324
318
|
Refresh with `npm run maintainability:update`.
|
|
325
319
|
|