mandrel 1.94.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/README.md +116 -99
- package/.agents/agents/acceptance-critic.md +9 -7
- package/.agents/agents/story-worker.md +45 -51
- package/.agents/audit-checklists/performance.md +1 -1
- package/.agents/docs/SDLC.md +498 -1287
- package/.agents/docs/agentrc-reference.json +185 -80
- package/.agents/docs/configuration.md +132 -190
- package/.agents/docs/execution-reference.md +51 -25
- package/.agents/docs/quality-gates.md +25 -33
- package/.agents/docs/workflows.md +8 -8
- package/.agents/instructions.md +113 -139
- package/.agents/rules/ci-remediation.md +11 -15
- package/.agents/rules/git-conventions-reference.md +48 -58
- package/.agents/rules/git-conventions.md +16 -22
- package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
- package/.agents/schemas/agentrc.schema.json +83 -254
- package/.agents/schemas/audit-rules.json +59 -1
- package/.agents/schemas/audit-rules.schema.json +33 -1
- package/.agents/schemas/lifecycle/README.md +1 -2
- package/.agents/schemas/lifecycle/ledger-record.schema.json +1 -1
- package/.agents/schemas/lifecycle/merge.flip-failed.schema.json +33 -0
- package/.agents/schemas/lifecycle/merge.unlanded.schema.json +1 -0
- package/.agents/schemas/lifecycle/retro.end.schema.json +1 -1
- package/.agents/schemas/lifecycle/story.merged.schema.json +1 -1
- package/.agents/schemas/signal-event.schema.json +3 -3
- package/.agents/schemas/story-deliver-terminal.schema.json +152 -0
- package/.agents/schemas/validation-evidence.schema.json +1 -1
- package/.agents/scripts/acceptance-eval.js +22 -66
- package/.agents/scripts/agents-bootstrap-github.js +1 -1
- package/.agents/scripts/audit-to-stories.js +7 -7
- package/.agents/scripts/boot-sweep.js +1 -1
- package/.agents/scripts/bootstrap.js +3 -3
- package/.agents/scripts/check-dead-exports.js +43 -104
- package/.agents/scripts/check-doc-links.js +2 -2
- package/.agents/scripts/check-lifecycle-lint.js +7 -10
- package/.agents/scripts/check-workflow-cli-lint.js +91 -0
- package/.agents/scripts/cleanup-repo-test-temp.js +6 -1
- package/.agents/scripts/deliver-recover.js +122 -0
- package/.agents/scripts/drain-pending-cleanup.js +1 -1
- package/.agents/scripts/evidence-gate.js +20 -50
- package/.agents/scripts/generate-skills-index.js +17 -1
- package/.agents/scripts/generate-workflows-doc.js +4 -4
- package/.agents/scripts/lib/ITicketingProvider.js +1 -19
- package/.agents/scripts/lib/Logger.js +6 -10
- package/.agents/scripts/lib/audit-suite/runner.js +2 -2
- package/.agents/scripts/lib/audit-suite/selector.js +328 -28
- package/.agents/scripts/lib/audit-to-stories/{seed-epic-from-findings.js → seed-from-findings.js} +9 -9
- package/.agents/scripts/lib/baselines/kernel.js +206 -18
- package/.agents/scripts/lib/baselines/kinds/maintainability.js +0 -15
- package/.agents/scripts/lib/baselines/reader.js +1 -6
- package/.agents/scripts/lib/bdd-runner-detect.js +5 -9
- package/.agents/scripts/lib/bootstrap/ci-workflow-template.js +28 -33
- package/.agents/scripts/lib/bootstrap/issue-forms-template.js +32 -33
- package/.agents/scripts/lib/bootstrap/manifest.js +8 -11
- package/.agents/scripts/lib/bootstrap/project-bootstrap.js +30 -53
- package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +0 -2
- package/.agents/scripts/lib/checks/core-bare-clean.js +6 -3
- package/.agents/scripts/lib/checks/index.js +3 -2
- package/.agents/scripts/lib/checks/loop-health.js +12 -11
- package/.agents/scripts/lib/checks/state.js +17 -248
- package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +26 -24
- package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +3 -4
- package/.agents/scripts/lib/checks/worktree-bootstrap-env.js +2 -2
- package/.agents/scripts/lib/checks/worktree-residue-biome.js +3 -3
- package/.agents/scripts/lib/cli/standard-args.js +13 -22
- package/.agents/scripts/lib/cli-args.js +39 -9
- package/.agents/scripts/lib/close-validation/gates.js +15 -15
- package/.agents/scripts/lib/close-validation/projections/inputs.js +7 -7
- package/.agents/scripts/lib/close-validation/projections/maintainability.js +12 -12
- package/.agents/scripts/lib/close-validation/runner.js +13 -21
- package/.agents/scripts/lib/close-validation/telemetry.js +17 -8
- package/.agents/scripts/lib/config/ci.js +6 -31
- package/.agents/scripts/lib/config/delivery-routing.js +52 -35
- package/.agents/scripts/lib/config/explain.js +61 -48
- package/.agents/scripts/lib/config/github.js +7 -5
- package/.agents/scripts/lib/config/limits.js +29 -80
- package/.agents/scripts/lib/config/paths.js +0 -2
- package/.agents/scripts/lib/config/quality.js +12 -15
- package/.agents/scripts/lib/config/runners.js +20 -66
- package/.agents/scripts/lib/config/temp-paths.js +30 -63
- package/.agents/scripts/lib/config/worktree-isolation.js +0 -5
- package/.agents/scripts/lib/config-resolver.js +2 -7
- package/.agents/scripts/lib/config-settings-schema-delivery.js +55 -161
- package/.agents/scripts/lib/config-settings-schema-quality.js +17 -16
- package/.agents/scripts/lib/config-settings-schema.js +100 -60
- package/.agents/scripts/lib/dead-exports-knip.js +105 -0
- package/.agents/scripts/lib/dead-exports-mode.js +51 -0
- package/.agents/scripts/lib/dependency-parser.js +3 -2
- package/.agents/scripts/lib/doc-tiers.js +2 -2
- package/.agents/scripts/lib/duplicate-search.js +242 -41
- package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +1 -1
- package/.agents/scripts/lib/findings/promote-finding.js +23 -14
- package/.agents/scripts/lib/format-generated-json.js +97 -0
- package/.agents/scripts/lib/framework-version.js +19 -190
- package/.agents/scripts/lib/gh-exec.js +8 -0
- package/.agents/scripts/lib/git-branch-cleanup.js +1 -10
- package/.agents/scripts/lib/git-branch-lifecycle.js +17 -180
- package/.agents/scripts/lib/git-utils.js +32 -20
- package/.agents/scripts/lib/github/framework-repo.js +6 -0
- package/.agents/scripts/lib/json-utils.js +1 -2
- package/.agents/scripts/lib/label-constants.js +10 -38
- package/.agents/scripts/lib/label-taxonomy.js +10 -55
- package/.agents/scripts/lib/observability/active-story-env.js +44 -165
- package/.agents/scripts/lib/observability/runtime-friction.js +243 -0
- package/.agents/scripts/lib/observability/signal-validator.js +4 -4
- package/.agents/scripts/lib/observability/signals-writer.js +6 -82
- package/.agents/scripts/lib/observability/source-classifier.js +5 -5
- package/.agents/scripts/lib/observability/tool-trace-hook.js +2 -12
- package/.agents/scripts/lib/onboard/init-tail.js +1 -3
- package/.agents/scripts/lib/orchestration/acceptance-clusters.js +1 -1
- package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +2 -2
- package/.agents/scripts/lib/orchestration/ceremony-routing.js +105 -44
- package/.agents/scripts/lib/orchestration/code-review.js +78 -436
- package/.agents/scripts/lib/orchestration/column-sync.js +1 -1
- package/.agents/scripts/lib/orchestration/consolidation-precondition.js +4 -4
- package/.agents/scripts/lib/orchestration/context-envelope.js +2 -5
- package/.agents/scripts/lib/orchestration/deliver-recover.js +328 -0
- package/.agents/scripts/lib/orchestration/detectors-phase.js +12 -6
- package/.agents/scripts/lib/orchestration/docs-digest.js +8 -8
- package/.agents/scripts/lib/orchestration/file-assumptions.js +7 -13
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +1 -1
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +34 -0
- package/.agents/scripts/lib/orchestration/lease-guard-shared.js +3 -2
- package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +142 -0
- package/.agents/scripts/lib/orchestration/lifecycle/emit-loop-tick.js +17 -19
- package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +86 -0
- package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +37 -103
- package/.agents/scripts/lib/orchestration/lifecycle/ledger-writer.js +6 -3
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/README.md +21 -43
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/watcher.js +50 -85
- package/.agents/scripts/lib/orchestration/lifecycle/trace-logger.js +3 -14
- package/.agents/scripts/lib/orchestration/lint-baseline-service.js +4 -4
- package/.agents/scripts/lib/orchestration/merge-block-class.js +77 -21
- package/.agents/scripts/lib/orchestration/merge-poll.js +104 -0
- package/.agents/scripts/lib/orchestration/phase-runner.js +3 -2
- package/.agents/scripts/lib/orchestration/plan-context.js +354 -282
- package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +11 -22
- package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +4 -8
- package/.agents/scripts/lib/orchestration/plan-metrics.js +38 -6
- package/.agents/scripts/lib/orchestration/plan-navigation.js +92 -0
- package/.agents/scripts/lib/orchestration/plan-persist/fan-out-gate.js +71 -0
- package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +245 -0
- package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +116 -0
- package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +432 -858
- package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +778 -0
- package/.agents/scripts/lib/orchestration/plan-persist/summary.js +47 -115
- package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +509 -0
- package/.agents/scripts/lib/orchestration/plan-reachability.js +9 -14
- package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +1 -1
- package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/authoring-context.js +52 -51
- package/.agents/scripts/lib/orchestration/planning/decomposer-context.js +27 -0
- package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/spec-authoring-grounding.js +1 -1
- package/.agents/scripts/lib/orchestration/pr-base-guard.js +18 -28
- package/.agents/scripts/lib/orchestration/remote-verifier.js +1 -1
- package/.agents/scripts/lib/orchestration/resolve-stories.js +344 -0
- package/.agents/scripts/lib/orchestration/resolves-token.js +1 -1
- package/.agents/scripts/lib/orchestration/retro-proposals.js +140 -79
- package/.agents/scripts/lib/orchestration/review-depth.js +126 -47
- package/.agents/scripts/lib/orchestration/review-providers/codex.js +2 -2
- package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +3 -13
- package/.agents/scripts/lib/orchestration/review-providers/native.js +1 -154
- package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +3 -2
- package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +21 -56
- package/.agents/scripts/lib/orchestration/review-providers/security-review.js +1 -1
- package/.agents/scripts/lib/orchestration/review-providers/types.js +5 -4
- package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +1 -1
- package/.agents/scripts/lib/orchestration/run-epilogue.js +784 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +25 -1
- package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +11 -9
- package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +4 -4
- package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +86 -41
- package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +608 -152
- package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +77 -32
- package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +305 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +1 -1
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +44 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +37 -4
- package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +2 -2
- package/.agents/scripts/lib/orchestration/single-story-close/runner.js +275 -46
- package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +1 -1
- package/.agents/scripts/lib/orchestration/spec-freshness.js +14 -205
- package/.agents/scripts/lib/orchestration/spec-section-validator.js +4 -5
- package/.agents/scripts/lib/orchestration/spec-spill.js +60 -0
- package/.agents/scripts/lib/orchestration/split-policy-validator.js +188 -0
- package/.agents/scripts/lib/orchestration/story-close/emit-blocked.js +49 -0
- package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +10 -10
- package/.agents/scripts/lib/orchestration/story-close/phases/code-review.js +28 -42
- package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +360 -0
- package/.agents/scripts/lib/orchestration/story-follow-ups.js +298 -0
- package/.agents/scripts/lib/orchestration/story-init-remote.js +51 -0
- package/.agents/scripts/lib/orchestration/story-plan-state.js +33 -0
- package/.agents/scripts/lib/orchestration/structured-comment-parser.js +1 -1
- package/.agents/scripts/lib/orchestration/task-body-validator.js +60 -25
- package/.agents/scripts/lib/orchestration/ticket-lease.js +27 -74
- package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +130 -75
- package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +192 -377
- package/.agents/scripts/lib/orchestration/ticket-validator.js +123 -25
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +14 -72
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +45 -55
- package/.agents/scripts/lib/orchestration/ticketing/transition.js +66 -6
- package/.agents/scripts/lib/orchestration/ticketing.js +0 -1
- package/.agents/scripts/lib/plan-phase-cleanup.js +12 -14
- package/.agents/scripts/lib/planning-corpus.js +12 -281
- package/.agents/scripts/lib/preflight-runner.js +4 -4
- package/.agents/scripts/lib/qa/coverage-verdict.js +5 -5
- package/.agents/scripts/lib/qa/qa-context-hydrator.js +5 -5
- package/.agents/scripts/lib/signals/index.js +4 -17
- package/.agents/scripts/lib/signals/read.js +35 -35
- package/.agents/scripts/lib/signals/schema.js +8 -11
- package/.agents/scripts/lib/signals/span-tree.js +7 -7
- package/.agents/scripts/lib/signals/write.js +0 -1
- package/.agents/scripts/lib/single-story/story-merged-notify.js +13 -2
- package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +1 -1
- package/.agents/scripts/lib/skills/parse-skill.js +16 -3
- package/.agents/scripts/lib/story-adjacency.js +17 -19
- package/.agents/scripts/lib/story-body/story-body.js +130 -75
- package/.agents/scripts/lib/story-plan.js +2 -4
- package/.agents/scripts/lib/templates/decomposer-prompts.js +51 -46
- package/.agents/scripts/lib/templates/spec-author-prompts.js +47 -45
- package/.agents/scripts/lib/test-env.js +14 -1
- package/.agents/scripts/lib/test-tiers.js +0 -3
- package/.agents/scripts/lib/{epic-body-sections.js → ticket-body-sections.js} +25 -39
- package/.agents/scripts/lib/validation-evidence.js +32 -60
- package/.agents/scripts/lib/wave-runner/ready-set.js +38 -12
- package/.agents/scripts/lib/workspace-provisioner.js +1 -1
- package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +1 -1
- package/.agents/scripts/lib/worktree/lifecycle/reap.js +72 -25
- package/.agents/scripts/lib/worktree/lifecycle-manager.js +1 -2
- package/.agents/scripts/lint-issue-body.js +71 -40
- package/.agents/scripts/mandrel-update-preflight.js +1 -1
- package/.agents/scripts/notify.js +4 -3
- package/.agents/scripts/plan-context.js +102 -80
- package/.agents/scripts/plan-persist.js +230 -279
- package/.agents/scripts/plan-run-epilogue.js +142 -0
- package/.agents/scripts/post-structured-comment.js +0 -38
- package/.agents/scripts/pr-watch-with-update.js +43 -22
- package/.agents/scripts/providers/github/compose.js +0 -1
- package/.agents/scripts/providers/github/errors.js +0 -19
- package/.agents/scripts/providers/github/issues.js +13 -39
- package/.agents/scripts/providers/github/mappers.js +5 -12
- package/.agents/scripts/providers/github/sub-issues.js +0 -47
- package/.agents/scripts/providers/github/tickets.js +33 -156
- package/.agents/scripts/providers/github.js +17 -6
- package/.agents/scripts/resolve-stories.js +236 -0
- package/.agents/scripts/run-coverage.js +4 -1
- package/.agents/scripts/run-lint.js +2 -2
- package/.agents/scripts/run-verify.js +31 -2
- package/.agents/scripts/signals-view.js +25 -21
- package/.agents/scripts/single-story-close.js +178 -26
- package/.agents/scripts/single-story-confirm-merge.js +313 -24
- package/.agents/scripts/single-story-init.js +35 -30
- package/.agents/scripts/stories-wave-tick.js +85 -10
- package/.agents/scripts/story-plan.js +28 -49
- package/.agents/scripts/update-ticket-state.js +14 -65
- package/.agents/skills/core/code-review-and-quality/SKILL.md +28 -450
- package/.agents/skills/core/code-review-and-quality/reference.md +458 -0
- package/.agents/skills/core/debugging-and-error-recovery/SKILL.md +22 -315
- package/.agents/skills/core/debugging-and-error-recovery/reference.md +323 -0
- package/.agents/skills/core/diagnose-friction/SKILL.md +14 -18
- package/.agents/skills/core/documentation-and-adrs/SKILL.md +25 -397
- package/.agents/skills/core/documentation-and-adrs/reference.md +403 -0
- package/.agents/skills/core/gates-and-baselines/SKILL.md +12 -12
- package/.agents/skills/core/idea-refinement/SKILL.md +9 -9
- package/.agents/skills/core/scope-triage/SKILL.md +31 -172
- package/.agents/skills/core/security-and-hardening/SKILL.md +22 -367
- package/.agents/skills/core/security-and-hardening/reference.md +375 -0
- package/.agents/skills/skills.index.json +3 -53
- package/.agents/skills/stack/qa/playwright-bdd/SKILL.md +2 -4
- package/.agents/skills/stack/qa/qa-explore-driving/SKILL.md +1 -1
- package/.agents/skills/stack/qa/qa-harness/SKILL.md +1 -3
- package/.agents/starter-agentrc.json +0 -5
- package/.agents/templates/agent-protocol.md +9 -10
- package/.agents/workflows/audit-architecture.md +6 -7
- package/.agents/workflows/audit-clean-code.md +7 -7
- package/.agents/workflows/audit-dependencies.md +3 -3
- package/.agents/workflows/audit-devops.md +3 -3
- package/.agents/workflows/audit-documentation.md +9 -10
- package/.agents/workflows/audit-lighthouse.md +11 -3
- package/.agents/workflows/audit-navigability.md +13 -2
- package/.agents/workflows/audit-performance.md +5 -6
- package/.agents/workflows/audit-privacy.md +3 -3
- package/.agents/workflows/audit-quality.md +11 -12
- package/.agents/workflows/audit-security.md +4 -5
- package/.agents/workflows/audit-seo.md +13 -3
- package/.agents/workflows/audit-sre.md +3 -3
- package/.agents/workflows/audit-to-stories.md +20 -20
- package/.agents/workflows/audit-ux-ui.md +10 -3
- package/.agents/workflows/deliver.md +177 -176
- package/.agents/workflows/git-cleanup.md +5 -6
- package/.agents/workflows/git-deliver.md +1 -1
- package/.agents/workflows/helpers/_merge-conflict-template.md +1 -1
- package/.agents/workflows/helpers/acceptance-self-eval.md +35 -40
- package/.agents/workflows/helpers/code-quality-guardrails.md +7 -7
- package/.agents/workflows/helpers/code-review.md +75 -196
- package/.agents/workflows/helpers/{single-story-deliver-reference.md → deliver-story-reference.md} +83 -44
- package/.agents/workflows/helpers/deliver-story.md +606 -0
- package/.agents/workflows/helpers/diagnose.md +10 -10
- package/.agents/workflows/helpers/parallel-tooling.md +3 -3
- package/.agents/workflows/helpers/signals.md +16 -16
- package/.agents/workflows/helpers/worktree-lifecycle.md +66 -86
- package/.agents/workflows/mandrel-update.md +2 -1
- package/.agents/workflows/plan.md +277 -145
- package/.agents/workflows/qa-assist.md +27 -33
- package/.agents/workflows/qa-explore.md +29 -38
- package/.agents/workflows/qa-run.md +2 -6
- package/README.md +9 -8
- package/bin/mandrel.js +12 -1
- package/docs/CHANGELOG.md +70 -0
- package/lib/cli/registry.js +262 -19
- package/lib/cli/sync-agents.js +157 -0
- package/lib/cli/sync-commands.js +115 -6
- package/lib/cli/sync.js +168 -6
- package/lib/cli/update.js +105 -8
- package/lib/cli/version-helpers.js +131 -0
- package/lib/migrations/README.md +7 -5
- package/lib/migrations/index.js +12 -8
- package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +100 -0
- package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +101 -0
- package/package.json +2 -2
- package/.agents/agents/retro.md +0 -42
- package/.agents/personas/architect.md +0 -113
- package/.agents/personas/devops-engineer.md +0 -38
- package/.agents/personas/engineer.md +0 -33
- package/.agents/personas/project-manager.md +0 -114
- package/.agents/personas/qa-engineer.md +0 -95
- package/.agents/personas/security-engineer.md +0 -111
- package/.agents/personas/technical-writer.md +0 -101
- package/.agents/schemas/dispatch-manifest.json +0 -232
- package/.agents/schemas/epic-perf-report.schema.json +0 -89
- package/.agents/schemas/epic-spec.schema.json +0 -153
- package/.agents/schemas/lifecycle/acceptance.reconcile.failed.schema.json +0 -13
- package/.agents/schemas/lifecycle/acceptance.reconcile.ok.schema.json +0 -13
- package/.agents/schemas/lifecycle/acceptance.reconcile.skipped.schema.json +0 -13
- package/.agents/schemas/lifecycle/acceptance.reconcile.start.schema.json +0 -12
- package/.agents/schemas/lifecycle/acceptance.reconcile.waived.schema.json +0 -13
- package/.agents/schemas/lifecycle/epic.automerge.end.schema.json +0 -15
- package/.agents/schemas/lifecycle/epic.automerge.start.schema.json +0 -13
- package/.agents/schemas/lifecycle/epic.blocked.schema.json +0 -13
- package/.agents/schemas/lifecycle/epic.cleanup.end.schema.json +0 -12
- package/.agents/schemas/lifecycle/epic.cleanup.start.schema.json +0 -12
- package/.agents/schemas/lifecycle/epic.close.end.schema.json +0 -12
- package/.agents/schemas/lifecycle/epic.complete.schema.json +0 -13
- package/.agents/schemas/lifecycle/epic.finalize.end.schema.json +0 -13
- package/.agents/schemas/lifecycle/epic.finalize.start.schema.json +0 -12
- package/.agents/schemas/lifecycle/epic.merge.armed.schema.json +0 -13
- package/.agents/schemas/lifecycle/epic.merge.blocked.schema.json +0 -14
- package/.agents/schemas/lifecycle/epic.merge.confirmed.schema.json +0 -17
- package/.agents/schemas/lifecycle/epic.merge.ready.schema.json +0 -15
- package/.agents/schemas/lifecycle/epic.plan.end.schema.json +0 -18
- package/.agents/schemas/lifecycle/epic.plan.start.schema.json +0 -12
- package/.agents/schemas/lifecycle/epic.snapshot.end.schema.json +0 -16
- package/.agents/schemas/lifecycle/epic.snapshot.start.schema.json +0 -12
- package/.agents/schemas/lifecycle/epic.watch.end.schema.json +0 -29
- package/.agents/schemas/lifecycle/epic.watch.start.schema.json +0 -16
- package/.agents/schemas/lifecycle/slice.end.schema.json +0 -21
- package/.agents/schemas/lifecycle/slice.heartbeat.schema.json +0 -20
- package/.agents/schemas/lifecycle/slice.start.schema.json +0 -17
- package/.agents/schemas/lifecycle/story.heartbeat.schema.json +0 -20
- package/.agents/schemas/risk-verdict.schema.json +0 -66
- package/.agents/schemas/story-perf-summary.schema.json +0 -73
- package/.agents/scripts/acceptance-spec-reconciler.js +0 -642
- package/.agents/scripts/analyze-execution.js +0 -444
- package/.agents/scripts/bookkeeping-reconcile.js +0 -117
- package/.agents/scripts/check-prepush-recovery.js +0 -90
- package/.agents/scripts/dispatcher.js +0 -295
- package/.agents/scripts/epic-audit-prepare.js +0 -497
- package/.agents/scripts/epic-audit-recheck.js +0 -274
- package/.agents/scripts/epic-deliver-note-intervention.js +0 -192
- package/.agents/scripts/epic-deliver-preflight.js +0 -462
- package/.agents/scripts/epic-deliver-prepare.js +0 -852
- package/.agents/scripts/epic-execute-record-wave.js +0 -449
- package/.agents/scripts/epic-plan-clarity.js +0 -211
- package/.agents/scripts/epic-plan-healthcheck.js +0 -581
- package/.agents/scripts/epic-reconcile.js +0 -625
- package/.agents/scripts/lib/baseline-snapshot.js +0 -979
- package/.agents/scripts/lib/checks/epic-merge-lock-stale.js +0 -54
- package/.agents/scripts/lib/checks/stale-origin-epic.js +0 -49
- package/.agents/scripts/lib/config/lifecycle.js +0 -40
- package/.agents/scripts/lib/config/preflight.js +0 -58
- package/.agents/scripts/lib/config/retro.js +0 -77
- package/.agents/scripts/lib/epic-merge-lock.js +0 -322
- package/.agents/scripts/lib/epic-plan-clarity.js +0 -181
- package/.agents/scripts/lib/epic-plan-ideation.js +0 -261
- package/.agents/scripts/lib/git-merge-orchestrator.js +0 -261
- package/.agents/scripts/lib/observability/baseline-refresh-rate.js +0 -221
- package/.agents/scripts/lib/observability/hook-heartbeat.js +0 -219
- package/.agents/scripts/lib/observability/perf-aggregator.js +0 -813
- package/.agents/scripts/lib/observability/perf-report-readers.js +0 -328
- package/.agents/scripts/lib/observability/perf-report-render.js +0 -182
- package/.agents/scripts/lib/orchestration/bookkeeping-outbox.js +0 -270
- package/.agents/scripts/lib/orchestration/context-hydration-engine.js +0 -539
- package/.agents/scripts/lib/orchestration/deliver-route.js +0 -173
- package/.agents/scripts/lib/orchestration/dispatch-engine.js +0 -134
- package/.agents/scripts/lib/orchestration/dispatch-pipeline.js +0 -183
- package/.agents/scripts/lib/orchestration/epic-cleanup.js +0 -801
- package/.agents/scripts/lib/orchestration/epic-deliver-lease-guard.js +0 -310
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/context.js +0 -163
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/creation.js +0 -140
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/dag.js +0 -64
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/diagnostics.js +0 -72
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist-helpers.js +0 -156
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist.js +0 -345
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/planning-artifacts.js +0 -41
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/reconcile-spawn.js +0 -86
- package/.agents/scripts/lib/orchestration/epic-plan-lease-guard.js +0 -391
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/drain.js +0 -94
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/plan-epic.js +0 -236
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/risk-verdict.js +0 -105
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/run-spec-phase.js +0 -307
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/spec-freshness.js +0 -117
- package/.agents/scripts/lib/orchestration/epic-plan-state-store.js +0 -117
- package/.agents/scripts/lib/orchestration/epic-run-state-store.js +0 -621
- package/.agents/scripts/lib/orchestration/epic-runner/concurrency-gate.js +0 -186
- package/.agents/scripts/lib/orchestration/epic-runner/deliver-phases.js +0 -50
- package/.agents/scripts/lib/orchestration/epic-runner/phases/build-wave-dag.js +0 -129
- package/.agents/scripts/lib/orchestration/epic-runner/phases/snapshot.js +0 -103
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/composition.js +0 -267
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/signals.js +0 -210
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/transport.js +0 -238
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/_bullet-format.js +0 -32
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/component-drift.js +0 -203
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/crap-drift.js +0 -227
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/maintainability-drift.js +0 -117
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/stalled-worktree.js +0 -37
- package/.agents/scripts/lib/orchestration/epic-runner/story-launcher.js +0 -127
- package/.agents/scripts/lib/orchestration/epic-runner/story-run-progress-writer.js +0 -400
- package/.agents/scripts/lib/orchestration/epic-runner/sub-agent-return.js +0 -276
- package/.agents/scripts/lib/orchestration/epic-runner/wave-scheduler.js +0 -66
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-apply.js +0 -789
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-diff.js +0 -676
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-discriminator.js +0 -389
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-format.js +0 -230
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-ops.js +0 -361
- package/.agents/scripts/lib/orchestration/error-journal.js +0 -139
- package/.agents/scripts/lib/orchestration/finalize/open-or-locate-pr.js +0 -306
- package/.agents/scripts/lib/orchestration/finalize/post-handoff-comment.js +0 -489
- package/.agents/scripts/lib/orchestration/finalize/sanitize-skip-ci.js +0 -88
- package/.agents/scripts/lib/orchestration/lifecycle/emit-slice-lifecycle.js +0 -270
- package/.agents/scripts/lib/orchestration/lifecycle/emit-story-dispatch-end.js +0 -147
- package/.agents/scripts/lib/orchestration/lifecycle/emit-story-heartbeat.js +0 -155
- package/.agents/scripts/lib/orchestration/lifecycle/ledger-diff.js +0 -140
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/acceptance-reconciler.js +0 -465
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-armer.js +0 -501
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-predicate.js +0 -984
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/branch-cleaner.js +0 -264
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/checkpoint-pointer-writer.js +0 -284
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/cleaner.js +0 -355
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/finalizer.js +0 -673
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/index.js +0 -378
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/intervention-recorder.js +0 -140
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/label-transitioner.js +0 -144
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/merge-watcher.js +0 -665
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/notify-dispatcher.js +0 -174
- package/.agents/scripts/lib/orchestration/manifest-builder.js +0 -222
- package/.agents/scripts/lib/orchestration/plan-persist/amend.js +0 -359
- package/.agents/scripts/lib/orchestration/plan-persist/delivery-mode.js +0 -127
- package/.agents/scripts/lib/orchestration/plan-review-routing.js +0 -63
- package/.agents/scripts/lib/orchestration/planning-context-budget.js +0 -213
- package/.agents/scripts/lib/orchestration/planning-risk.js +0 -194
- package/.agents/scripts/lib/orchestration/post-merge/phases/branch-cleanup.js +0 -56
- package/.agents/scripts/lib/orchestration/post-merge/phases/dashboard-refresh.js +0 -33
- package/.agents/scripts/lib/orchestration/post-merge/phases/notification.js +0 -78
- package/.agents/scripts/lib/orchestration/post-merge/phases/temp-cleanup.js +0 -68
- package/.agents/scripts/lib/orchestration/post-merge/phases/ticket-closure.js +0 -118
- package/.agents/scripts/lib/orchestration/post-merge/phases/worktree-reap.js +0 -396
- package/.agents/scripts/lib/orchestration/post-merge-pipeline.js +0 -205
- package/.agents/scripts/lib/orchestration/preflight-cache.js +0 -187
- package/.agents/scripts/lib/orchestration/recurring-failure-detector.js +0 -152
- package/.agents/scripts/lib/orchestration/retro/phases/checks.js +0 -94
- package/.agents/scripts/lib/orchestration/retro/phases/compose-body.js +0 -571
- package/.agents/scripts/lib/orchestration/retro/phases/gather-signals.js +0 -450
- package/.agents/scripts/lib/orchestration/retro/phases/post-and-mirror.js +0 -191
- package/.agents/scripts/lib/orchestration/retro-heuristics.js +0 -57
- package/.agents/scripts/lib/orchestration/retro-perf-heuristics.js +0 -275
- package/.agents/scripts/lib/orchestration/retro-runner.js +0 -197
- package/.agents/scripts/lib/orchestration/spec-renderer.js +0 -447
- package/.agents/scripts/lib/orchestration/story-close/auto-refresh-runner.js +0 -747
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/gate-failure.js +0 -211
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/pre-merge-attribution.js +0 -158
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/refresh-commit.js +0 -446
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/regression-projection.js +0 -297
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/scope-discovery.js +0 -48
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution-wiring.js +0 -67
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution.js +0 -161
- package/.agents/scripts/lib/orchestration/story-close/baseline-friction-body.js +0 -117
- package/.agents/scripts/lib/orchestration/story-close/cd-out-guard.js +0 -86
- package/.agents/scripts/lib/orchestration/story-close/cleanup-reconciler.js +0 -147
- package/.agents/scripts/lib/orchestration/story-close/close-inputs.js +0 -142
- package/.agents/scripts/lib/orchestration/story-close/comment-bodies.js +0 -62
- package/.agents/scripts/lib/orchestration/story-close/merge-runner.js +0 -658
- package/.agents/scripts/lib/orchestration/story-close/merge-subject.js +0 -198
- package/.agents/scripts/lib/orchestration/story-close/phases/branch-restore.js +0 -105
- package/.agents/scripts/lib/orchestration/story-close/phases/close.js +0 -222
- package/.agents/scripts/lib/orchestration/story-close/phases/gates.js +0 -292
- package/.agents/scripts/lib/orchestration/story-close/phases/locked-pipeline.js +0 -270
- package/.agents/scripts/lib/orchestration/story-close/phases/preflight.js +0 -110
- package/.agents/scripts/lib/orchestration/story-close/phases/refresh.js +0 -86
- package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked-emitter.js +0 -112
- package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked.js +0 -157
- package/.agents/scripts/lib/orchestration/story-close/post-merge-close.js +0 -421
- package/.agents/scripts/lib/orchestration/story-close/pre-merge-validation.js +0 -302
- package/.agents/scripts/lib/orchestration/story-close/shared-checkout-guard.js +0 -163
- package/.agents/scripts/lib/orchestration/story-close-recovery.js +0 -690
- package/.agents/scripts/lib/orchestration/wave-marker.js +0 -28
- package/.agents/scripts/lib/orchestration/wave-record-io.js +0 -218
- package/.agents/scripts/lib/orchestration/wave-record-notifications.js +0 -145
- package/.agents/scripts/lib/orchestration/wave-record-projection.js +0 -212
- package/.agents/scripts/lib/presentation/dispatch-manifest-render.js +0 -111
- package/.agents/scripts/lib/presentation/manifest-builder.js +0 -239
- package/.agents/scripts/lib/presentation/manifest-formatter.js +0 -242
- package/.agents/scripts/lib/presentation/manifest-helpers.js +0 -213
- package/.agents/scripts/lib/presentation/manifest-persistence.js +0 -261
- package/.agents/scripts/lib/presentation/manifest-procedures.js +0 -55
- package/.agents/scripts/lib/presentation/manifest-render-waves.js +0 -306
- package/.agents/scripts/lib/presentation/manifest-renderer.js +0 -188
- package/.agents/scripts/lib/presentation/manifest-story-views.js +0 -110
- package/.agents/scripts/lib/push-epic-retry.js +0 -209
- package/.agents/scripts/lib/spec/index.js +0 -36
- package/.agents/scripts/lib/spec/loader.js +0 -425
- package/.agents/scripts/lib/spec/state.js +0 -208
- package/.agents/scripts/lib/story-init/blocker-validator.js +0 -68
- package/.agents/scripts/lib/story-init/branch-initializer.js +0 -408
- package/.agents/scripts/lib/story-init/context-resolver.js +0 -92
- package/.agents/scripts/lib/story-init/donor-precheck.js +0 -207
- package/.agents/scripts/lib/story-init/state-transitioner.js +0 -80
- package/.agents/scripts/lib/story-init/task-graph-builder.js +0 -124
- package/.agents/scripts/lib/story-init/transition-summary.js +0 -34
- package/.agents/scripts/lib/test-reserved-epic-temp-ids.js +0 -35
- package/.agents/scripts/lib/wave-runner/tick.js +0 -754
- package/.agents/scripts/lib/wave-runner/wave-runner-error.js +0 -20
- package/.agents/scripts/lifecycle-emit-story-dispatch.js +0 -194
- package/.agents/scripts/lifecycle-emit.js +0 -510
- package/.agents/scripts/retro-run.js +0 -218
- package/.agents/scripts/slice-phase.js +0 -361
- package/.agents/scripts/standalone-feedback-rollup.js +0 -188
- package/.agents/scripts/story-close.js +0 -294
- package/.agents/scripts/story-init.js +0 -599
- package/.agents/scripts/story-phase.js +0 -369
- package/.agents/scripts/wave-tick.js +0 -464
- package/.agents/skills/core/analyze-execution/SKILL.md +0 -98
- package/.agents/skills/core/epic-plan-consolidate/SKILL.md +0 -172
- package/.agents/skills/core/epic-plan-consolidate/examples.md +0 -51
- package/.agents/skills/core/epic-plan-decompose-author/SKILL.md +0 -441
- package/.agents/skills/core/epic-plan-decompose-author/examples.md +0 -47
- package/.agents/skills/core/epic-plan-premortem/SKILL.md +0 -146
- package/.agents/skills/core/epic-plan-premortem/examples.md +0 -53
- package/.agents/skills/core/epic-plan-spec-author/SKILL.md +0 -383
- package/.agents/skills/core/epic-plan-spec-author/examples.md +0 -91
- package/.agents/workflows/helpers/deliver-epic-reference.md +0 -547
- package/.agents/workflows/helpers/deliver-epic-single.md +0 -331
- package/.agents/workflows/helpers/deliver-epic.md +0 -998
- package/.agents/workflows/helpers/deliver-stories.md +0 -450
- package/.agents/workflows/helpers/epic-audit.md +0 -189
- package/.agents/workflows/helpers/epic-deliver-story.md +0 -436
- package/.agents/workflows/helpers/epic-testing.md +0 -125
- package/.agents/workflows/helpers/plan-epic-reference.md +0 -160
- package/.agents/workflows/helpers/plan-epic.md +0 -353
- package/.agents/workflows/helpers/plan-story.md +0 -251
- package/.agents/workflows/helpers/scope-triage-gate.md +0 -108
- package/.agents/workflows/helpers/single-story-deliver.md +0 -557
|
@@ -32,9 +32,11 @@ const EXECUTION_SCHEMA = {
|
|
|
32
32
|
|
|
33
33
|
/**
|
|
34
34
|
* `delivery.lease` — assignee-as-lease primitive (Story #3480). `ttlMs` is
|
|
35
|
-
* the staleness window: a ticket claim whose owner
|
|
36
|
-
*
|
|
37
|
-
*
|
|
35
|
+
* the staleness window: a ticket claim whose owner's last heartbeat is older
|
|
36
|
+
* than this many milliseconds is reclaimable by another operator. Defaults to
|
|
37
|
+
* 900000 (15 min) in `lib/config/limits.js`. Note the shipped guards fail
|
|
38
|
+
* closed (no live heartbeat source since A22 removed the inert emitter), so
|
|
39
|
+
* a stranded claim is cleared with `--steal` rather than by TTL expiry.
|
|
38
40
|
*/
|
|
39
41
|
const LEASE_SCHEMA = {
|
|
40
42
|
type: 'object',
|
|
@@ -64,40 +66,13 @@ const DELIVER_RUNNER_SCHEMA = {
|
|
|
64
66
|
type: 'object',
|
|
65
67
|
properties: {
|
|
66
68
|
concurrencyCap: { type: 'integer', minimum: 1 },
|
|
67
|
-
progressReportIntervalSec: { type: 'integer', minimum: 0 },
|
|
68
|
-
verifyConcurrencyCap: { type: 'integer', minimum: 1 },
|
|
69
69
|
},
|
|
70
70
|
additionalProperties: false,
|
|
71
71
|
};
|
|
72
72
|
|
|
73
73
|
/**
|
|
74
|
-
* `delivery.
|
|
75
|
-
* gates for the retro perf-signals classifier. Defaults are documented inline
|
|
76
|
-
* here and mirrored in `lib/orchestration/retro-perf-heuristics.js
|
|
77
|
-
* (DEFAULT_RETRO_PERF_THRESHOLDS)` and the static schema mirror.
|
|
78
|
-
*
|
|
79
|
-
* `utilisation` / `bootstrapShare` are unit-interval ratios; values outside
|
|
80
|
-
* [0, 1] fall back to defaults at the resolver. `capBindingRunLength` is a
|
|
81
|
-
* positive integer count of consecutive cap-binding waves.
|
|
74
|
+
* `delivery.worktreeIsolation` — per-Story git worktree provisioning.
|
|
82
75
|
*/
|
|
83
|
-
const RETRO_PERF_THRESHOLDS_SCHEMA = {
|
|
84
|
-
type: 'object',
|
|
85
|
-
properties: {
|
|
86
|
-
utilisation: { type: 'number', minimum: 0, maximum: 1 },
|
|
87
|
-
bootstrapShare: { type: 'number', minimum: 0, maximum: 1 },
|
|
88
|
-
capBindingRunLength: { type: 'integer', minimum: 1 },
|
|
89
|
-
},
|
|
90
|
-
additionalProperties: false,
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
const RETRO_SCHEMA = {
|
|
94
|
-
type: 'object',
|
|
95
|
-
properties: {
|
|
96
|
-
perfThresholds: RETRO_PERF_THRESHOLDS_SCHEMA,
|
|
97
|
-
},
|
|
98
|
-
additionalProperties: false,
|
|
99
|
-
};
|
|
100
|
-
|
|
101
76
|
const WORKTREE_ISOLATION_SCHEMA = {
|
|
102
77
|
type: 'object',
|
|
103
78
|
properties: {
|
|
@@ -110,11 +85,15 @@ const WORKTREE_ISOLATION_SCHEMA = {
|
|
|
110
85
|
primeFromPath: { type: ['string', 'null'], minLength: 1 },
|
|
111
86
|
allowSymlinkOnWindows: { type: 'boolean' },
|
|
112
87
|
reapOnSuccess: { type: 'boolean' },
|
|
113
|
-
reapOnCancel: { type: 'boolean' },
|
|
114
88
|
bootstrapFiles: {
|
|
115
89
|
type: 'array',
|
|
116
90
|
items: { type: 'string', minLength: 1 },
|
|
117
|
-
default: [
|
|
91
|
+
default: [
|
|
92
|
+
'.env',
|
|
93
|
+
'.mcp.json',
|
|
94
|
+
'.agentrc.local.json',
|
|
95
|
+
'.agents/instructions.local.md',
|
|
96
|
+
],
|
|
118
97
|
},
|
|
119
98
|
},
|
|
120
99
|
additionalProperties: false,
|
|
@@ -132,20 +111,14 @@ const WORKTREE_ISOLATION_SCHEMA = {
|
|
|
132
111
|
};
|
|
133
112
|
|
|
134
113
|
/**
|
|
135
|
-
* `delivery.signals` — detector thresholds for the
|
|
136
|
-
* performance-signal categories. `
|
|
137
|
-
*
|
|
114
|
+
* `delivery.signals` — detector thresholds for the surviving
|
|
115
|
+
* performance-signal categories. `hotspot` was retired with its detector
|
|
116
|
+
* (Epic #4406); `churn` and `idle` were dropped earlier (low signal-to-noise).
|
|
117
|
+
* Each block is shallow-merged by the resolver.
|
|
138
118
|
*/
|
|
139
119
|
const SIGNALS_SCHEMA = {
|
|
140
120
|
type: 'object',
|
|
141
121
|
properties: {
|
|
142
|
-
hotspot: {
|
|
143
|
-
type: 'object',
|
|
144
|
-
properties: {
|
|
145
|
-
p95Multiplier: { type: 'number', minimum: 0 },
|
|
146
|
-
},
|
|
147
|
-
additionalProperties: false,
|
|
148
|
-
},
|
|
149
122
|
rework: {
|
|
150
123
|
type: 'object',
|
|
151
124
|
properties: {
|
|
@@ -165,115 +138,73 @@ const SIGNALS_SCHEMA = {
|
|
|
165
138
|
};
|
|
166
139
|
|
|
167
140
|
/**
|
|
168
|
-
* `delivery.
|
|
169
|
-
* (Epic #
|
|
170
|
-
*
|
|
171
|
-
*
|
|
172
|
-
*
|
|
173
|
-
*
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
*
|
|
189
|
-
*
|
|
190
|
-
* cadence between `gh pr view --json mergeCommit,mergedAt` probes after
|
|
191
|
-
* `epic.merge.armed`; `maxBudgetSeconds` is the total wall-clock budget
|
|
192
|
-
* before the watcher surfaces `agent::blocked` with reason
|
|
193
|
-
* `budget-exceeded`. Both keys default in the listener when omitted
|
|
194
|
-
* (30s / 3600s).
|
|
141
|
+
* `delivery.mergeWatch` — knobs consumed by the close-and-land merge wait
|
|
142
|
+
* listener (Story #2896, Epic #2880) and by the close-and-land merge wait
|
|
143
|
+
* (`single-story-close/phases/confirm-merge.js`). `intervalSeconds` is the
|
|
144
|
+
* poll cadence between `gh pr view` probes after the arm.
|
|
145
|
+
*
|
|
146
|
+
* The two budgets are deliberately separate axes (Story #4543):
|
|
147
|
+
*
|
|
148
|
+
* - `maxWaitSeconds` bounds **one invocation** of the merge wait. Its
|
|
149
|
+
* default (300s) fits inside a single host tool invocation, whose
|
|
150
|
+
* ceiling is ~10 minutes; the gates that run before the wait already
|
|
151
|
+
* consume minutes of that. Expiry is NOT a block — the wait returns a
|
|
152
|
+
* resumable `pending` terminal with no label mutation. A headless caller
|
|
153
|
+
* with no such ceiling raises it to keep land-in-one-block semantics.
|
|
154
|
+
* - `maxBudgetSeconds` bounds the **cumulative** wait across resumes,
|
|
155
|
+
* anchored at the PR's `createdAt` so re-entering the wait does not
|
|
156
|
+
* restart the clock. Exhausting *this* is the genuine give-up condition
|
|
157
|
+
* that classifies and blocks.
|
|
158
|
+
*
|
|
159
|
+
* `updateAttempts` caps how many times the wait will bring a
|
|
160
|
+
* behind-the-base PR up to date before giving the branch up as unwinnable,
|
|
161
|
+
* rather than waiting out the budget behind a base it could have merged.
|
|
162
|
+
* All keys default in the consumer when omitted (30s / 300s / 3600s / 3).
|
|
195
163
|
*/
|
|
196
164
|
const MERGE_WATCH_SCHEMA = {
|
|
197
165
|
type: 'object',
|
|
198
166
|
properties: {
|
|
199
167
|
intervalSeconds: { type: 'integer', minimum: 1 },
|
|
168
|
+
maxWaitSeconds: { type: 'integer', minimum: 1 },
|
|
200
169
|
maxBudgetSeconds: { type: 'integer', minimum: 1 },
|
|
170
|
+
updateAttempts: { type: 'integer', minimum: 0 },
|
|
201
171
|
},
|
|
202
172
|
additionalProperties: false,
|
|
203
173
|
};
|
|
204
174
|
|
|
205
175
|
/**
|
|
206
|
-
* `delivery.epicAudit`
|
|
207
|
-
*
|
|
208
|
-
*
|
|
209
|
-
* caps how many files a single auto-fix may touch before escalating to
|
|
210
|
-
* `agent::blocked` (default 5) — a deliberately narrow bound for
|
|
211
|
-
* unattended auto-fixes, independent of the Story-sizing thresholds in
|
|
212
|
-
* `ticket-validator-sizing.js`.
|
|
213
|
-
*
|
|
214
|
-
* `autoFixSeverity` (Story #4399) is the threshold that governs which findings
|
|
215
|
-
* the Epic-close host-LLM remediation loop fixes on-branch. It is **tier-aware**
|
|
216
|
-
* (Story #4412, Epic #4405): the Epic-close audit tier defaults to `high`
|
|
217
|
-
* (route only 🔴 Critical + 🟠 High into remediation; 🟡 Medium + 🟢 Suggestion
|
|
218
|
-
* graduate to follow-up issues) because 🟡 Medium code-quality concerns are
|
|
219
|
-
* already remediated shift-left at the write-time and Story-scope tiers — the
|
|
220
|
-
* slim outermost tier stops re-paying to fix them where a fix is most
|
|
221
|
-
* expensive. Setting `medium` opts back into routing 🔴/🟠/🟡 on-branch. The
|
|
222
|
-
* enum is the single validation seam: a configured value round-trips through
|
|
223
|
-
* the resolver, and any value outside `['high', 'medium']` is rejected at load.
|
|
224
|
-
* Hard cutover per `rules/git-conventions.md` — there is no back-compat flag.
|
|
176
|
+
* `delivery.epicAudit` was removed on v2 (Story-only delivery — no
|
|
177
|
+
* epic-audit runner). Remediation policy lives on `delivery.codeReview`
|
|
178
|
+
* (`CODE_REVIEW_SCHEMA` imported from the quality schema module).
|
|
225
179
|
*/
|
|
226
|
-
const EPIC_AUDIT_SCHEMA = {
|
|
227
|
-
type: 'object',
|
|
228
|
-
properties: {
|
|
229
|
-
maxFixAttempts: { type: 'integer', minimum: 0 },
|
|
230
|
-
maxFixScopeFiles: { type: 'integer', minimum: 1 },
|
|
231
|
-
autoFixSeverity: { type: 'string', enum: ['high', 'medium'] },
|
|
232
|
-
},
|
|
233
|
-
additionalProperties: false,
|
|
234
|
-
};
|
|
235
180
|
|
|
236
|
-
// Epic #4475 (M4-A) — single-delivery routing kill-switch.
|
|
237
|
-
// `delivery.routing.singleDelivery` (default true via getDeliveryRouting) is
|
|
238
|
-
// the global kill-switch for the single-delivery route. When true (the
|
|
239
|
-
// default), an Epic marked `delivery::single` at plan time routes to the
|
|
240
|
-
// single-delivery helper; when false, EVERY Epic — even a single-marked one —
|
|
241
|
-
// is forced down the fan-out path (the instant, code-rollback-free per-consumer
|
|
242
|
-
// revert). Shipped INERT in M4-A: the router's single verdict falls through to
|
|
243
|
-
// fan-out until M4-B wires the executor, so the knob has no observable effect
|
|
244
|
-
// yet.
|
|
245
181
|
// Epic #4478 (M7-B) — role-scoped-agent kill-switch + maker-checker floor.
|
|
182
|
+
// Stage 6 dropped `delivery.routing.singleDelivery` (v1 epic route switch).
|
|
246
183
|
// `delivery.routing.roleScopedAgents` (default true via getDeliveryRouting)
|
|
247
184
|
// flips converted delivery spawns onto their `.claude/agents/<role>.md` boot
|
|
248
185
|
// context; false falls back to `subagent_type: general-purpose` (the instant
|
|
249
186
|
// per-consumer revert + the escape for hosts that ignore `.claude/agents/`).
|
|
250
187
|
// `delivery.routing.freshCriticSampleRate` (default 0.2, clamped [0, 1]) is the
|
|
251
|
-
// maker-checker sampling floor forcing a fraction of low-
|
|
252
|
-
// clusters through a fresh critic.
|
|
188
|
+
// maker-checker sampling floor forcing a fraction of low-derived-level
|
|
189
|
+
// acceptance clusters through a fresh critic.
|
|
253
190
|
const ROUTING_SCHEMA = {
|
|
254
191
|
type: 'object',
|
|
255
192
|
properties: {
|
|
256
|
-
singleDelivery: { type: 'boolean' },
|
|
257
193
|
roleScopedAgents: { type: 'boolean' },
|
|
258
194
|
freshCriticSampleRate: { type: 'number', minimum: 0, maximum: 1 },
|
|
195
|
+
ceremonyProfile: {
|
|
196
|
+
type: 'string',
|
|
197
|
+
enum: ['minimal', 'standard', 'strict'],
|
|
198
|
+
},
|
|
199
|
+
closeAndLand: { type: 'boolean' },
|
|
259
200
|
},
|
|
260
201
|
additionalProperties: false,
|
|
261
202
|
};
|
|
262
203
|
|
|
263
|
-
// Story #
|
|
264
|
-
// `
|
|
265
|
-
//
|
|
266
|
-
//
|
|
267
|
-
// The Epic-branch merge commit produced by story-close.js's merge
|
|
268
|
-
// runner never carries the marker, regardless of this flag.
|
|
269
|
-
//
|
|
270
|
-
// Story #4356 (Epic #4355) — CI-aware delivery namespace. `earlyPr` gates
|
|
271
|
-
// whether /deliver opens the Epic PR early (before every Story merges) so CI
|
|
272
|
-
// starts warming while later waves run; defaults to `true` via getCiDelivery.
|
|
273
|
-
// `watch.*` tunes the merge/CI watch poll loop (poll cadence, poll cap, and
|
|
274
|
-
// how many times the watcher may resume after a transient stall).
|
|
275
|
-
// `autoMerge` selects the merge posture: `"trust-ci"` (default) merges once
|
|
276
|
-
// required checks pass, `"strict"` additionally requires a clean review gate.
|
|
204
|
+
// Story #4356 (Epic #4355) — CI-aware delivery namespace. `watch.*` tunes
|
|
205
|
+
// the merge/CI watch poll loop; `autoMerge` selects the merge posture.
|
|
206
|
+
// Retired: `earlyPr` (Epic early-PR warmup) and `requireChecks` (no
|
|
207
|
+
// AutomergePredicate reader on v2).
|
|
277
208
|
const CI_WATCH_SCHEMA = {
|
|
278
209
|
type: 'object',
|
|
279
210
|
properties: {
|
|
@@ -287,33 +218,8 @@ const CI_WATCH_SCHEMA = {
|
|
|
287
218
|
const CI_DELIVERY_SCHEMA = {
|
|
288
219
|
type: 'object',
|
|
289
220
|
properties: {
|
|
290
|
-
skipForStoryPushes: { type: 'boolean' },
|
|
291
|
-
earlyPr: { type: 'boolean' },
|
|
292
221
|
watch: CI_WATCH_SCHEMA,
|
|
293
222
|
autoMerge: { type: 'string', enum: ['trust-ci', 'strict'] },
|
|
294
|
-
// Story #4472 — fail-closed-without-checks policy. When `true`, the
|
|
295
|
-
// AutomergePredicate refuses to arm merge in a repo that reports zero
|
|
296
|
-
// required checks ("no checks reported"), treating the absence of a CI
|
|
297
|
-
// gate as a hard block instead of green. Defaults to `false` so a
|
|
298
|
-
// checks-less repo with green close-validation gates lands headlessly
|
|
299
|
-
// rather than parking on the operator-merges path.
|
|
300
|
-
requireChecks: { type: 'boolean' },
|
|
301
|
-
},
|
|
302
|
-
additionalProperties: false,
|
|
303
|
-
};
|
|
304
|
-
|
|
305
|
-
// Story #2899 (Epic #2880) — `delivery.preflight.*` thresholds consumed
|
|
306
|
-
// by `epic-deliver-preflight.js`. When any value is exceeded the CLI
|
|
307
|
-
// surfaces a breach in its envelope and the workflow flips the Epic to
|
|
308
|
-
// `agent::blocked` (see /deliver Phase 1 prelude).
|
|
309
|
-
const PREFLIGHT_SCHEMA = {
|
|
310
|
-
type: 'object',
|
|
311
|
-
properties: {
|
|
312
|
-
maxStories: { type: 'integer', minimum: 1 },
|
|
313
|
-
maxWaves: { type: 'integer', minimum: 1 },
|
|
314
|
-
maxInstallCostSeconds: { type: 'integer', minimum: 1 },
|
|
315
|
-
maxGithubApiRequests: { type: 'integer', minimum: 1 },
|
|
316
|
-
maxClaudeQuotaTokens: { type: 'integer', minimum: 1 },
|
|
317
223
|
},
|
|
318
224
|
additionalProperties: false,
|
|
319
225
|
};
|
|
@@ -401,31 +307,19 @@ export const DELIVERY_SCHEMA = {
|
|
|
401
307
|
type: 'object',
|
|
402
308
|
properties: {
|
|
403
309
|
execution: EXECUTION_SCHEMA,
|
|
404
|
-
maxTokenBudget: { type: 'integer', minimum: 1 },
|
|
405
310
|
lease: LEASE_SCHEMA,
|
|
406
311
|
docsFreshness: DOCS_FRESHNESS_SCHEMA,
|
|
407
312
|
deliverRunner: DELIVER_RUNNER_SCHEMA,
|
|
408
313
|
worktreeIsolation: WORKTREE_ISOLATION_SCHEMA,
|
|
409
314
|
signals: SIGNALS_SCHEMA,
|
|
410
315
|
quality: QUALITY_SCHEMA,
|
|
411
|
-
lifecycle: LIFECYCLE_SCHEMA,
|
|
412
316
|
mergeWatch: MERGE_WATCH_SCHEMA,
|
|
413
|
-
epicAudit: EPIC_AUDIT_SCHEMA,
|
|
414
317
|
codeReview: CODE_REVIEW_SCHEMA,
|
|
415
|
-
retro: RETRO_SCHEMA,
|
|
416
318
|
refactorStage: REFACTOR_STAGE_SCHEMA,
|
|
417
319
|
acceptanceEval: ACCEPTANCE_EVAL_SCHEMA,
|
|
418
320
|
feedbackLoop: FEEDBACK_LOOP_SCHEMA,
|
|
419
321
|
ci: CI_DELIVERY_SCHEMA,
|
|
420
322
|
routing: ROUTING_SCHEMA,
|
|
421
|
-
preflight: PREFLIGHT_SCHEMA,
|
|
422
|
-
// Cross-Story concurrency-hazard gate (Story #2297). When true,
|
|
423
|
-
// `epic-deliver-prepare` refuses to flip the Epic to
|
|
424
|
-
// `agent::executing` if the upcoming waves still carry any conflict
|
|
425
|
-
// finding (Story #2296). Off by default; operators using the gate
|
|
426
|
-
// also need to wire findings into prepare via the runtime injection
|
|
427
|
-
// surface.
|
|
428
|
-
failOnConcurrencyHazards: { type: 'boolean' },
|
|
429
323
|
},
|
|
430
324
|
additionalProperties: false,
|
|
431
325
|
};
|
|
@@ -14,12 +14,20 @@
|
|
|
14
14
|
// aggregate into per-gate files under `config/gates/`.
|
|
15
15
|
import { GATES_SCHEMA } from './config/gates/index.js';
|
|
16
16
|
|
|
17
|
+
// Story #4531: miDropMustRefactor (here) and autoRefresh.miDropCap (below)
|
|
18
|
+
// were retired. Both were schema-validated, defaulted, and resolved, but
|
|
19
|
+
// never consumed by the gate they were named for — quality-preview.js's
|
|
20
|
+
// computeExitCode short-circuits on miExit (derived from the ALREADY-
|
|
21
|
+
// consumed delivery.quality.gates.maintainability.tolerance) before either
|
|
22
|
+
// knob is ever read. maintainability.tolerance is now the single documented
|
|
23
|
+
// MI-drop control. See lib/migrations/index.js for the consumer-config
|
|
24
|
+
// migration that strips these keys on upgrade (additionalProperties: false
|
|
25
|
+
// below means a leftover key is a hard AJV failure, not a silent no-op).
|
|
17
26
|
const CODING_GUARDRAILS_SCHEMA = {
|
|
18
27
|
type: 'object',
|
|
19
28
|
properties: {
|
|
20
29
|
cyclomaticFlag: { type: 'integer', minimum: 1 },
|
|
21
30
|
cyclomaticMustFix: { type: 'integer', minimum: 1 },
|
|
22
|
-
miDropMustRefactor: { type: 'number', minimum: 0 },
|
|
23
31
|
requireSiblingTest: { type: 'boolean' },
|
|
24
32
|
},
|
|
25
33
|
additionalProperties: false,
|
|
@@ -29,7 +37,6 @@ const AUTO_REFRESH_SCHEMA = {
|
|
|
29
37
|
type: 'object',
|
|
30
38
|
properties: {
|
|
31
39
|
enabled: { type: 'boolean' },
|
|
32
|
-
miDropCap: { type: 'number', minimum: 0 },
|
|
33
40
|
crapJumpCap: { type: 'number', minimum: 0 },
|
|
34
41
|
scope: { type: 'string', enum: ['diff', 'full'] },
|
|
35
42
|
},
|
|
@@ -123,12 +130,11 @@ export const QUALITY_SCHEMA = {
|
|
|
123
130
|
};
|
|
124
131
|
|
|
125
132
|
/**
|
|
126
|
-
* `delivery.codeReview` —
|
|
127
|
-
*
|
|
133
|
+
* `delivery.codeReview` — review-provider chain + bounded-retry knobs for
|
|
134
|
+
* the /deliver code-review ceremony (Story-close and plan-run close).
|
|
128
135
|
*
|
|
129
|
-
* `autoFixSeverity` (Story #4399) is the
|
|
130
|
-
*
|
|
131
|
-
* Phase 5 findings the host-LLM focused-fix routing remediates on-branch —
|
|
136
|
+
* `autoFixSeverity` (Story #4399) is the threshold that governs which
|
|
137
|
+
* findings the host-LLM focused-fix routing remediates on-branch —
|
|
132
138
|
* `medium` (default) routes 🔴/🟠/🟡 while 🟢 still graduates, `high`
|
|
133
139
|
* reproduces the pre-4399 Critical/High-only routing.
|
|
134
140
|
*/
|
|
@@ -144,15 +150,10 @@ export const CODE_REVIEW_SCHEMA = {
|
|
|
144
150
|
// hatch reserved for adapter-specific options.
|
|
145
151
|
//
|
|
146
152
|
// Story #2871 added `security-review` to the inline registry plus
|
|
147
|
-
//
|
|
148
|
-
//
|
|
149
|
-
// `
|
|
150
|
-
// `
|
|
151
|
-
provider: {
|
|
152
|
-
type: 'string',
|
|
153
|
-
enum: ['native', 'codex', 'security-review'],
|
|
154
|
-
default: 'native',
|
|
155
|
-
},
|
|
153
|
+
// the `providers: []` chain shape. Chain entries can also reference
|
|
154
|
+
// the `ultrareview` manual-prompt provider via `manualPrompt: true`.
|
|
155
|
+
// When `providers` is unset or empty, the factory defaults to
|
|
156
|
+
// `[{ name: 'native' }]`.
|
|
156
157
|
providers: {
|
|
157
158
|
type: 'array',
|
|
158
159
|
items: {
|
|
@@ -109,25 +109,57 @@ const PROJECT_SCHEMA = {
|
|
|
109
109
|
|
|
110
110
|
/**
|
|
111
111
|
* Curated webhook event vocabulary. The webhook channel is gated by an
|
|
112
|
-
* explicit allowlist of event names — the
|
|
113
|
-
*
|
|
114
|
-
*
|
|
112
|
+
* explicit allowlist of event names — the vocabulary mirrors the events the
|
|
113
|
+
* v2 runtime actually emits through `notify()` (Story transitions, merge
|
|
114
|
+
* outcomes, loop lifecycle beats).
|
|
115
|
+
*
|
|
116
|
+
* `story.heartbeat` was retired here (A22): the vocabulary's contract is
|
|
117
|
+
* "events the runtime actually emits", and nothing could emit this one. Its
|
|
118
|
+
* emitter (`emit-story-heartbeat.js`) demanded an `epicId >= 1` while the
|
|
119
|
+
* sole call path (`single-story-init.js` → `setActiveStoryEnv`) passed
|
|
120
|
+
* `epicId: null`, so `CC_EPIC_ID` was never set and the hook that would have
|
|
121
|
+
* fired the beat always short-circuited. Emitter, hook, and schema are all
|
|
122
|
+
* deleted; keeping the name allowlistable would let an operator subscribe to
|
|
123
|
+
* a channel that can never deliver. Removing it from the enum makes a
|
|
124
|
+
* resurrection fail loudly at config-validation time rather than silently
|
|
125
|
+
* never firing.
|
|
115
126
|
*/
|
|
116
127
|
export const WEBHOOK_EVENT_NAMES = Object.freeze([
|
|
117
|
-
'
|
|
118
|
-
'
|
|
119
|
-
'
|
|
120
|
-
'
|
|
121
|
-
'
|
|
128
|
+
'state-transition',
|
|
129
|
+
'story-merged',
|
|
130
|
+
'story-closing',
|
|
131
|
+
'operator-message',
|
|
132
|
+
'merge.unlanded',
|
|
133
|
+
'merge.flip-failed',
|
|
134
|
+
'loop.tick',
|
|
122
135
|
]);
|
|
123
136
|
|
|
124
137
|
/**
|
|
125
138
|
* Curated GitHub-comment event vocabulary. The comment channel is gated by
|
|
126
139
|
* an explicit allowlist of event names — same model as `webhookEvents`.
|
|
140
|
+
*
|
|
141
|
+
* **Deliberately narrower than {@link WEBHOOK_EVENT_NAMES}**, and the axis
|
|
142
|
+
* is ticket scope, not importance. A comment is written *onto a Story
|
|
143
|
+
* issue*, so only events that are about one Story, and whose message reads
|
|
144
|
+
* as narrative an operator wants durably on the ticket, belong here. The
|
|
145
|
+
* webhook-only remainder — `merge.unlanded`, `merge.flip-failed`,
|
|
146
|
+
* `loop.tick` — are run-scoped or firehose beats;
|
|
147
|
+
* mirroring them onto the ticket would bury the narrative under machine
|
|
148
|
+
* chatter, and `notify()` drops a comment for any dispatch without a
|
|
149
|
+
* resolvable ticket id regardless.
|
|
150
|
+
*
|
|
151
|
+
* `story-closing` IS in scope by that rule (Story-scoped, `level: 'story'`,
|
|
152
|
+
* human-readable — the same shape as `story-merged`) and its earlier
|
|
153
|
+
* absence was an oversight: the event was emittable to webhooks but could
|
|
154
|
+
* not be allowlisted for comments at all. It is in the vocabulary but NOT
|
|
155
|
+
* in the shipped default (`config/github.js` `NOTIFICATIONS_DEFAULTS`) —
|
|
156
|
+
* opting in is an operator choice, not a behaviour change forced on every
|
|
157
|
+
* consumer.
|
|
127
158
|
*/
|
|
128
159
|
export const COMMENT_EVENT_NAMES = Object.freeze([
|
|
129
160
|
'state-transition',
|
|
130
161
|
'story-merged',
|
|
162
|
+
'story-closing',
|
|
131
163
|
'operator-message',
|
|
132
164
|
]);
|
|
133
165
|
|
|
@@ -208,19 +240,14 @@ const GITHUB_SCHEMA = {
|
|
|
208
240
|
// planning.* — inputs to /plan
|
|
209
241
|
// ---------------------------------------------------------------------------
|
|
210
242
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
maxBytes: { type: 'integer', minimum: 1024 },
|
|
220
|
-
summaryMode: { type: 'string', enum: ['auto', 'always', 'never'] },
|
|
221
|
-
},
|
|
222
|
-
additionalProperties: false,
|
|
223
|
-
};
|
|
243
|
+
// Story #4541: `planning.context.{maxBytes, summaryMode}` was retired. The
|
|
244
|
+
// `applyBudget` pass it fed lost its last caller in the v2 cutover, and it
|
|
245
|
+
// bounded a field the envelope builders discarded before shipping the raw seed
|
|
246
|
+
// anyway — so the key resolved but capped nothing. The live bound on
|
|
247
|
+
// planner-context size is the fixed `PLAN_CONTEXT_ENVELOPE_BYTE_CEILING` in
|
|
248
|
+
// `lib/orchestration/plan-context.js`. Setting `planning.context` is now
|
|
249
|
+
// rejected as an additional property, so a resurrected key fails loudly rather
|
|
250
|
+
// than silently doing nothing.
|
|
224
251
|
|
|
225
252
|
/**
|
|
226
253
|
* Story #2634 — `planning.codebaseSnapshot` controls the structural
|
|
@@ -246,66 +273,79 @@ const CODEBASE_SNAPSHOT_SCHEMA = {
|
|
|
246
273
|
additionalProperties: false,
|
|
247
274
|
};
|
|
248
275
|
|
|
249
|
-
/**
|
|
250
|
-
* `planning.taskSizing` — Story-sizing thresholds consumed by
|
|
251
|
-
* `ticket-validator-sizing.js`. Operator overrides shallow-merge with
|
|
252
|
-
* `DEFAULT_TASK_SIZING` defaults (softFiles 15, hardFiles 30,
|
|
253
|
-
* softAcceptanceCount 10 — the uniform relaxed profile from Story #3874).
|
|
254
|
-
* Story #3760 collapsed the per-profile matrix and the parallel
|
|
255
|
-
* `testSurface` axis into a flat set of knobs; the `sizingProfile` enum was
|
|
256
|
-
* replaced by an optional body-level `wide` declaration that lifts the
|
|
257
|
-
* `hardFiles` rejection. The hard `maxAcceptance` ceiling was removed after
|
|
258
|
-
* the Epic #4355 decomposition experiment — acceptance mass is advisory-only.
|
|
259
|
-
*/
|
|
260
|
-
const TASK_SIZING_SCHEMA = {
|
|
261
|
-
type: 'object',
|
|
262
|
-
properties: {
|
|
263
|
-
softFiles: { type: 'integer', minimum: 1 },
|
|
264
|
-
hardFiles: { type: 'integer', minimum: 1 },
|
|
265
|
-
softAcceptanceCount: { type: 'integer', minimum: 1 },
|
|
266
|
-
// Under-size (merge-candidate) thresholds (Story #4312). A Story whose
|
|
267
|
-
// footprint is at or below BOTH ceilings and that carries a `depends_on`
|
|
268
|
-
// edge to a sibling trips the advisory `merge-candidate` soft finding.
|
|
269
|
-
mergeCandidateMaxFiles: { type: 'integer', minimum: 1 },
|
|
270
|
-
mergeCandidateMaxAcceptance: { type: 'integer', minimum: 1 },
|
|
271
|
-
},
|
|
272
|
-
additionalProperties: false,
|
|
273
|
-
};
|
|
274
|
-
|
|
275
276
|
const PLANNING_SCHEMA = {
|
|
276
277
|
type: 'object',
|
|
277
278
|
properties: {
|
|
278
279
|
riskHeuristics: LIST_OR_EXTENDER_OF_STRINGS,
|
|
279
|
-
context: PLANNING_CONTEXT_SCHEMA,
|
|
280
280
|
codebaseSnapshot: CODEBASE_SNAPSHOT_SCHEMA,
|
|
281
|
-
taskSizing: TASK_SIZING_SCHEMA,
|
|
282
281
|
// Cross-Story conflict-finding severity gates. Off by default so
|
|
283
282
|
// existing repos keep advisory-only behaviour; flipping either to
|
|
284
283
|
// `true` upgrades the matching finding class to `'hard'`, which routes
|
|
285
284
|
// it through the validator's `errors[]` channel and trips the bounded
|
|
286
285
|
// decompose loop's re-prompt gate.
|
|
287
|
-
|
|
288
|
-
|
|
286
|
+
// `planning.modelCapacity` was collapsed to the framework constant
|
|
287
|
+
// `DEFAULT_MODEL_CAPACITY` in ticket-validator-sizing.js (authored-
|
|
288
|
+
// tokens-only mass); setting it in a config is rejected as an
|
|
289
|
+
// additional property.
|
|
290
|
+
failOnSharedEditors: {
|
|
291
|
+
type: 'boolean',
|
|
292
|
+
description:
|
|
293
|
+
'When true, upgrade shared-editor conflict findings to hard errors (default false — advisory soft findings only).',
|
|
294
|
+
},
|
|
295
|
+
requireExplicitCrossStoryDeps: {
|
|
296
|
+
type: 'boolean',
|
|
297
|
+
description:
|
|
298
|
+
'When true, upgrade implicit cross-Story dependency findings to hard errors (default false — advisory soft findings only).',
|
|
299
|
+
},
|
|
289
300
|
// Cross-cutting registry conflict knobs consumed by
|
|
290
301
|
// `ticket-validator-conflicts.js` (wired through
|
|
291
302
|
// `epic-plan-decompose/phases/planning-artifacts.js`).
|
|
292
303
|
// `crossCuttingRegistries` names the registry paths whose concurrent
|
|
293
304
|
// edits are flagged; `failOnRegistryConflicts` upgrades that finding to
|
|
294
305
|
// `'hard'`. `failOnLargeFanOut` / `largeFanOutThreshold` gate the
|
|
295
|
-
//
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
306
|
+
// delete blast-radius finding (call sites of a module a Story marks
|
|
307
|
+
// `assumption: "deletes"`).
|
|
308
|
+
crossCuttingRegistries: {
|
|
309
|
+
...LIST_OR_EXTENDER_OF_STRINGS,
|
|
310
|
+
description:
|
|
311
|
+
'Registry path patterns whose concurrent edits across Stories are flagged as conflicts. Defaults to the framework listener/handler index patterns when omitted.',
|
|
312
|
+
},
|
|
313
|
+
failOnRegistryConflicts: {
|
|
314
|
+
type: 'boolean',
|
|
315
|
+
description:
|
|
316
|
+
'When true, upgrade cross-cutting registry conflict findings to hard errors (default false).',
|
|
317
|
+
},
|
|
318
|
+
failOnLargeFanOut: {
|
|
319
|
+
type: 'boolean',
|
|
320
|
+
description:
|
|
321
|
+
'When true, upgrade fan-out-warning findings (delete blast radius) to hard errors (default false — soft advisory).',
|
|
322
|
+
},
|
|
323
|
+
largeFanOutThreshold: {
|
|
324
|
+
type: 'integer',
|
|
325
|
+
minimum: 0,
|
|
326
|
+
description:
|
|
327
|
+
'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.',
|
|
328
|
+
},
|
|
300
329
|
// Navigability-reachability config consumed by the plan-persist draft
|
|
301
|
-
// reachability gate (Epic #4131 F7; demoted into persist by #4474 PR6
|
|
302
|
-
// the manual epic-plan-healthcheck --paranoid re-check reads it too).
|
|
330
|
+
// reachability gate (Epic #4131 F7; demoted into persist by #4474 PR6).
|
|
303
331
|
// Opt-in: absent or empty routeGlobs degrades to a silent no-op.
|
|
304
332
|
navigation: {
|
|
305
333
|
type: 'object',
|
|
334
|
+
description:
|
|
335
|
+
'Opt-in navigability reachability gate. Absent or empty routeGlobs is a silent no-op.',
|
|
306
336
|
properties: {
|
|
307
|
-
routeGlobs: {
|
|
308
|
-
|
|
337
|
+
routeGlobs: {
|
|
338
|
+
type: 'array',
|
|
339
|
+
items: { type: 'string' },
|
|
340
|
+
description:
|
|
341
|
+
'Glob patterns (e.g. pages/**, app/**/route.ts) marking paths that add a user-facing route.',
|
|
342
|
+
},
|
|
343
|
+
navRegistry: {
|
|
344
|
+
type: 'array',
|
|
345
|
+
items: { type: 'string' },
|
|
346
|
+
description:
|
|
347
|
+
'Tokens identifying the nav-registry SSOT a route-adding Story is expected to reference.',
|
|
348
|
+
},
|
|
309
349
|
},
|
|
310
350
|
additionalProperties: false,
|
|
311
351
|
},
|