mandrel 1.93.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/README.md +59 -73
- package/.agents/agents/acceptance-critic.md +129 -0
- package/.agents/agents/story-worker.md +161 -0
- package/.agents/docs/SDLC.md +489 -1285
- package/.agents/docs/agentrc-reference.json +177 -67
- package/.agents/docs/configuration.md +108 -136
- package/.agents/docs/execution-reference.md +44 -22
- package/.agents/docs/quality-gates.md +13 -19
- package/.agents/docs/workflows.md +3 -3
- package/.agents/instructions.md +107 -108
- package/.agents/rules/ci-remediation.md +8 -12
- package/.agents/rules/git-conventions-reference.md +224 -0
- package/.agents/rules/git-conventions.md +42 -223
- package/.agents/rules/security-baseline.md +5 -0
- package/.agents/rules/testing-standards.md +106 -13
- package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
- package/.agents/schemas/agentrc.schema.json +71 -201
- package/.agents/schemas/lifecycle/ledger-record.schema.json +1 -1
- package/.agents/schemas/lifecycle/retro.end.schema.json +1 -1
- package/.agents/schemas/risk-verdict.schema.json +0 -13
- package/.agents/scripts/acceptance-eval.js +62 -18
- package/.agents/scripts/agents-bootstrap-github.js +1 -1
- package/.agents/scripts/analyze-execution.js +1 -1
- package/.agents/scripts/audit-to-stories.js +7 -7
- package/.agents/scripts/boot-sweep.js +1 -1
- package/.agents/scripts/check-context-budget.js +62 -5
- package/.agents/scripts/check-lifecycle-lint.js +6 -9
- package/.agents/scripts/check-prepush-recovery.js +1 -1
- package/.agents/scripts/cleanup-repo-test-temp.js +6 -1
- package/.agents/scripts/diagnose-friction.js +0 -6
- package/.agents/scripts/lib/Logger.js +6 -10
- package/.agents/scripts/lib/audit-suite/runner.js +2 -2
- package/.agents/scripts/lib/audit-suite/selector.js +5 -5
- package/.agents/scripts/lib/audit-to-stories/{seed-epic-from-findings.js → seed-from-findings.js} +9 -9
- package/.agents/scripts/lib/baselines/kernel.js +206 -18
- package/.agents/scripts/lib/baselines/kinds/maintainability.js +0 -4
- package/.agents/scripts/lib/baselines/reader.js +1 -6
- package/.agents/scripts/lib/bdd-runner-detect.js +5 -9
- package/.agents/scripts/lib/bootstrap/issue-forms-template.js +32 -33
- package/.agents/scripts/lib/bootstrap/project-bootstrap.js +56 -18
- package/.agents/scripts/lib/checks/core-bare-clean.js +2 -2
- package/.agents/scripts/lib/checks/index.js +2 -1
- package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +23 -21
- package/.agents/scripts/lib/cli/standard-args.js +13 -22
- package/.agents/scripts/lib/cli-args.js +16 -7
- package/.agents/scripts/lib/close-validation/gates.js +160 -22
- package/.agents/scripts/lib/config/acceptance-eval.js +52 -5
- package/.agents/scripts/lib/config/ci.js +6 -31
- package/.agents/scripts/lib/config/delivery-routing.js +103 -0
- package/.agents/scripts/lib/config/explain.js +57 -36
- package/.agents/scripts/lib/config/limits.js +17 -58
- package/.agents/scripts/lib/config/paths.js +0 -2
- package/.agents/scripts/lib/config/quality.js +1 -1
- package/.agents/scripts/lib/config/runners.js +17 -50
- package/.agents/scripts/lib/config/temp-paths.js +19 -14
- package/.agents/scripts/lib/config/worktree-isolation.js +0 -5
- package/.agents/scripts/lib/config-resolver.js +3 -8
- package/.agents/scripts/lib/config-settings-schema-delivery.js +46 -136
- package/.agents/scripts/lib/config-settings-schema-quality.js +17 -14
- package/.agents/scripts/lib/config-settings-schema.js +52 -38
- package/.agents/scripts/lib/dependency-parser.js +3 -2
- package/.agents/scripts/lib/doc-tiers.js +39 -4
- package/.agents/scripts/lib/duplicate-search.js +211 -41
- package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +1 -1
- package/.agents/scripts/lib/findings/promote-finding.js +5 -5
- package/.agents/scripts/lib/framework-version.js +2 -3
- package/.agents/scripts/lib/git-branch-cleanup.js +1 -10
- package/.agents/scripts/lib/git-branch-lifecycle.js +17 -22
- package/.agents/scripts/lib/git-utils.js +32 -6
- package/.agents/scripts/lib/github/framework-repo.js +6 -0
- package/.agents/scripts/lib/label-constants.js +10 -23
- package/.agents/scripts/lib/label-taxonomy.js +9 -43
- package/.agents/scripts/lib/observability/active-story-env.js +112 -3
- package/.agents/scripts/lib/observability/hook-heartbeat.js +187 -0
- package/.agents/scripts/lib/observability/source-classifier.js +3 -3
- package/.agents/scripts/lib/observability/tool-trace-hook.js +15 -4
- package/.agents/scripts/lib/onboard/init-tail.js +1 -3
- package/.agents/scripts/lib/orchestration/acceptance-clusters.js +111 -0
- package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +32 -4
- package/.agents/scripts/lib/orchestration/audit-lens-routing.js +128 -0
- package/.agents/scripts/lib/orchestration/bookkeeping-outbox.js +273 -0
- package/.agents/scripts/lib/orchestration/ceremony-routing.js +204 -0
- package/.agents/scripts/lib/orchestration/code-review.js +20 -268
- package/.agents/scripts/lib/orchestration/column-sync.js +1 -1
- package/.agents/scripts/lib/orchestration/consolidation-precondition.js +1 -1
- package/.agents/scripts/lib/orchestration/context-envelope.js +2 -5
- package/.agents/scripts/lib/orchestration/docs-digest.js +8 -8
- package/.agents/scripts/lib/orchestration/file-assumptions.js +7 -13
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +1 -1
- package/.agents/scripts/lib/orchestration/lifecycle/emit-loop-tick.js +8 -8
- package/.agents/scripts/lib/orchestration/lifecycle/emit-story-heartbeat.js +2 -2
- package/.agents/scripts/lib/orchestration/lifecycle/ledger-writer.js +6 -3
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/README.md +17 -43
- package/.agents/scripts/lib/orchestration/lint-baseline-service.js +4 -4
- package/.agents/scripts/lib/orchestration/merge-block-class.js +1 -1
- package/.agents/scripts/lib/orchestration/phase-runner.js +3 -2
- package/.agents/scripts/lib/orchestration/plan-context.js +248 -266
- package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +3 -2
- package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +1 -1
- package/.agents/scripts/lib/orchestration/plan-navigation.js +92 -0
- package/.agents/scripts/lib/orchestration/plan-persist/fan-out-gate.js +61 -0
- package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +97 -0
- package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +223 -854
- package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +361 -0
- package/.agents/scripts/lib/orchestration/plan-persist/summary.js +35 -108
- package/.agents/scripts/lib/orchestration/plan-reachability.js +9 -14
- package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +1 -1
- package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/authoring-context.js +14 -14
- package/.agents/scripts/lib/orchestration/planning/decomposer-context.js +27 -0
- package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/risk-verdict.js +3 -4
- package/.agents/scripts/lib/orchestration/post-merge/phases/branch-cleanup.js +2 -2
- package/.agents/scripts/lib/orchestration/post-merge/phases/dashboard-refresh.js +8 -20
- package/.agents/scripts/lib/orchestration/post-merge/phases/worktree-reap.js +3 -2
- package/.agents/scripts/lib/orchestration/pr-base-guard.js +18 -28
- package/.agents/scripts/lib/orchestration/preflight-cache.js +5 -5
- package/.agents/scripts/lib/orchestration/remote-verifier.js +1 -1
- package/.agents/scripts/lib/orchestration/resolve-plan-run.js +155 -0
- package/.agents/scripts/lib/orchestration/resolves-token.js +1 -1
- package/.agents/scripts/lib/orchestration/retro-perf-heuristics.js +8 -8
- package/.agents/scripts/lib/orchestration/retro-proposals.js +140 -79
- package/.agents/scripts/lib/orchestration/review-depth.js +26 -12
- package/.agents/scripts/lib/orchestration/review-providers/codex.js +2 -2
- package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +21 -56
- package/.agents/scripts/lib/orchestration/run-epilogue.js +426 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +1 -1
- package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +1 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +95 -41
- package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +16 -13
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +40 -0
- package/.agents/scripts/lib/orchestration/single-story-close/runner.js +11 -3
- package/.agents/scripts/lib/orchestration/spec-freshness.js +14 -205
- package/.agents/scripts/lib/orchestration/spec-section-validator.js +4 -5
- package/.agents/scripts/lib/orchestration/spec-spill.js +60 -0
- package/.agents/scripts/lib/orchestration/split-policy-validator.js +188 -0
- package/.agents/scripts/lib/orchestration/story-close/emit-blocked.js +49 -0
- package/.agents/scripts/lib/orchestration/story-close/phases/code-review.js +15 -12
- package/.agents/scripts/lib/orchestration/story-follow-ups.js +237 -0
- package/.agents/scripts/lib/orchestration/story-init-remote.js +47 -0
- package/.agents/scripts/lib/orchestration/story-plan-state.js +48 -0
- package/.agents/scripts/lib/orchestration/{epic-runner → story-progress}/story-run-progress-writer.js +3 -3
- package/.agents/scripts/lib/orchestration/structured-comment-parser.js +1 -1
- package/.agents/scripts/lib/orchestration/task-body-validator.js +8 -18
- package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +11 -61
- package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +189 -373
- package/.agents/scripts/lib/orchestration/ticket-validator.js +3 -8
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +0 -25
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +29 -26
- package/.agents/scripts/lib/orchestration/ticketing/transition.js +5 -5
- package/.agents/scripts/lib/planning-corpus.js +16 -11
- package/.agents/scripts/lib/preflight-runner.js +2 -2
- package/.agents/scripts/lib/provider-factory.js +1 -1
- package/.agents/scripts/lib/qa/coverage-verdict.js +5 -5
- package/.agents/scripts/lib/single-story/confirm-merge-follow-ups.js +36 -0
- package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +1 -1
- package/.agents/scripts/lib/story-adjacency.js +11 -14
- package/.agents/scripts/lib/story-body/story-body.js +124 -70
- package/.agents/scripts/lib/story-plan.js +2 -4
- package/.agents/scripts/lib/templates/decomposer-prompts.js +46 -45
- package/.agents/scripts/lib/templates/spec-author-prompts.js +47 -45
- package/.agents/scripts/lib/{epic-body-sections.js → ticket-body-sections.js} +26 -26
- package/.agents/scripts/lib/validation-evidence.js +1 -1
- package/.agents/scripts/lib/wave-runner/ready-set.js +6 -6
- package/.agents/scripts/lib/workspace-provisioner.js +1 -1
- package/.agents/scripts/lib/worktree/lifecycle/reap.js +5 -7
- package/.agents/scripts/lint-issue-body.js +71 -40
- package/.agents/scripts/mandrel-update-preflight.js +1 -1
- package/.agents/scripts/notify.js +4 -3
- package/.agents/scripts/plan-context.js +64 -74
- package/.agents/scripts/plan-persist.js +121 -280
- package/.agents/scripts/plan-run-epilogue.js +97 -0
- package/.agents/scripts/post-structured-comment.js +38 -0
- package/.agents/scripts/providers/github/issues.js +17 -33
- package/.agents/scripts/providers/github/mappers.js +0 -12
- package/.agents/scripts/providers/github/tickets.js +2 -5
- package/.agents/scripts/resolve-plan-run.js +117 -0
- package/.agents/scripts/signals-view.js +24 -19
- package/.agents/scripts/single-story-close.js +11 -14
- package/.agents/scripts/single-story-confirm-merge.js +39 -23
- package/.agents/scripts/single-story-init.js +29 -20
- package/.agents/scripts/stories-wave-tick.js +6 -6
- package/.agents/scripts/story-plan.js +26 -47
- package/.agents/scripts/sync-claude-agents.js +165 -0
- package/.agents/scripts/update-ticket-state.js +37 -15
- package/.agents/skills/core/analyze-execution/SKILL.md +21 -18
- package/.agents/skills/core/api-and-interface-design/SKILL.md +5 -3
- package/.agents/skills/core/code-review-and-quality/SKILL.md +63 -7
- package/.agents/skills/core/debugging-and-error-recovery/SKILL.md +1 -1
- package/.agents/skills/core/gates-and-baselines/SKILL.md +149 -0
- package/.agents/skills/core/idea-refinement/SKILL.md +8 -14
- package/.agents/skills/core/qa-coverage-mapping/SKILL.md +7 -7
- package/.agents/skills/core/scope-triage/SKILL.md +28 -172
- package/.agents/skills/skills.index.json +8 -418
- package/.agents/starter-agentrc.json +0 -5
- package/.agents/templates/agent-protocol.md +9 -10
- package/.agents/workflows/audit-architecture.md +3 -3
- package/.agents/workflows/audit-clean-code.md +3 -3
- package/.agents/workflows/audit-dependencies.md +3 -3
- package/.agents/workflows/audit-devops.md +3 -3
- package/.agents/workflows/audit-documentation.md +5 -5
- package/.agents/workflows/audit-lighthouse.md +3 -3
- package/.agents/workflows/audit-navigability.md +3 -2
- package/.agents/workflows/audit-performance.md +3 -3
- package/.agents/workflows/audit-privacy.md +3 -3
- package/.agents/workflows/audit-quality.md +3 -3
- package/.agents/workflows/audit-security.md +3 -3
- package/.agents/workflows/audit-seo.md +3 -3
- package/.agents/workflows/audit-sre.md +3 -3
- package/.agents/workflows/audit-to-stories.md +20 -20
- package/.agents/workflows/audit-ux-ui.md +3 -3
- package/.agents/workflows/deliver.md +122 -131
- package/.agents/workflows/git-cleanup.md +3 -4
- package/.agents/workflows/helpers/_merge-conflict-template.md +1 -1
- package/.agents/workflows/helpers/acceptance-self-eval.md +52 -40
- package/.agents/workflows/helpers/code-review.md +70 -193
- package/.agents/workflows/helpers/{single-story-deliver-reference.md → deliver-story-reference.md} +12 -14
- package/.agents/workflows/helpers/{single-story-deliver.md → deliver-story.md} +113 -139
- package/.agents/workflows/helpers/diagnose.md +10 -10
- package/.agents/workflows/helpers/mandrel-sync-config.md +1 -1
- package/.agents/workflows/helpers/parallel-tooling.md +1 -1
- package/.agents/workflows/helpers/signals.md +16 -16
- package/.agents/workflows/helpers/worktree-lifecycle.md +48 -64
- package/.agents/workflows/mandrel-update.md +3 -2
- package/.agents/workflows/plan.md +112 -145
- package/.agents/workflows/qa-assist.md +24 -30
- package/.agents/workflows/qa-explore.md +29 -38
- package/.agents/workflows/qa-run.md +2 -2
- package/README.md +9 -8
- package/docs/CHANGELOG.md +46 -0
- package/lib/cli/registry.js +95 -0
- package/lib/migrations/index.js +6 -5
- package/package.json +5 -3
- package/.agents/personas/architect.md +0 -113
- package/.agents/personas/devops-engineer.md +0 -38
- package/.agents/personas/engineer-mobile.md +0 -120
- package/.agents/personas/engineer-web.md +0 -111
- package/.agents/personas/engineer.md +0 -119
- package/.agents/personas/product.md +0 -94
- package/.agents/personas/project-manager.md +0 -114
- package/.agents/personas/qa-engineer.md +0 -95
- package/.agents/personas/refactorer.md +0 -113
- package/.agents/personas/security-engineer.md +0 -112
- package/.agents/personas/sre.md +0 -86
- package/.agents/personas/technical-writer.md +0 -101
- package/.agents/personas/ux-designer.md +0 -95
- package/.agents/schemas/dispatch-manifest.json +0 -232
- package/.agents/schemas/epic-spec.schema.json +0 -153
- package/.agents/scripts/acceptance-spec-reconciler.js +0 -642
- package/.agents/scripts/dispatcher.js +0 -295
- package/.agents/scripts/epic-audit-prepare.js +0 -497
- package/.agents/scripts/epic-audit-recheck.js +0 -274
- package/.agents/scripts/epic-deliver-note-intervention.js +0 -192
- package/.agents/scripts/epic-deliver-preflight.js +0 -462
- package/.agents/scripts/epic-deliver-prepare.js +0 -590
- package/.agents/scripts/epic-execute-record-wave.js +0 -449
- package/.agents/scripts/epic-plan-clarity.js +0 -211
- package/.agents/scripts/epic-plan-decompose.js +0 -54
- package/.agents/scripts/epic-plan-healthcheck.js +0 -581
- package/.agents/scripts/epic-plan-spec.js +0 -64
- package/.agents/scripts/epic-reconcile.js +0 -625
- package/.agents/scripts/lib/baseline-snapshot.js +0 -979
- package/.agents/scripts/lib/checks/epic-merge-lock-stale.js +0 -54
- package/.agents/scripts/lib/checks/stale-origin-epic.js +0 -49
- package/.agents/scripts/lib/config/lifecycle.js +0 -40
- package/.agents/scripts/lib/config/preflight.js +0 -58
- package/.agents/scripts/lib/config/retro.js +0 -77
- package/.agents/scripts/lib/epic-merge-lock.js +0 -322
- package/.agents/scripts/lib/epic-plan-clarity.js +0 -181
- package/.agents/scripts/lib/epic-plan-ideation.js +0 -261
- package/.agents/scripts/lib/orchestration/context-hydration-engine.js +0 -660
- package/.agents/scripts/lib/orchestration/dispatch-engine.js +0 -134
- package/.agents/scripts/lib/orchestration/dispatch-pipeline.js +0 -183
- package/.agents/scripts/lib/orchestration/epic-cleanup.js +0 -801
- package/.agents/scripts/lib/orchestration/epic-deliver-lease-guard.js +0 -310
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/context.js +0 -163
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/creation.js +0 -140
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/dag.js +0 -64
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/diagnostics.js +0 -72
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist-helpers.js +0 -156
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist.js +0 -345
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/planning-artifacts.js +0 -41
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/reconcile-spawn.js +0 -86
- package/.agents/scripts/lib/orchestration/epic-plan-lease-guard.js +0 -391
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/drain.js +0 -94
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/plan-epic.js +0 -236
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/run-spec-phase.js +0 -307
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/spec-freshness.js +0 -117
- package/.agents/scripts/lib/orchestration/epic-plan-state-store.js +0 -117
- package/.agents/scripts/lib/orchestration/epic-run-state-store.js +0 -388
- package/.agents/scripts/lib/orchestration/epic-runner/concurrency-gate.js +0 -186
- package/.agents/scripts/lib/orchestration/epic-runner/deliver-phases.js +0 -50
- package/.agents/scripts/lib/orchestration/epic-runner/phases/build-wave-dag.js +0 -129
- package/.agents/scripts/lib/orchestration/epic-runner/phases/snapshot.js +0 -103
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/composition.js +0 -267
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/signals.js +0 -210
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/transport.js +0 -238
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/_bullet-format.js +0 -32
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/component-drift.js +0 -203
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/crap-drift.js +0 -227
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/maintainability-drift.js +0 -117
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/stalled-worktree.js +0 -37
- package/.agents/scripts/lib/orchestration/epic-runner/story-launcher.js +0 -127
- package/.agents/scripts/lib/orchestration/epic-runner/sub-agent-return.js +0 -276
- package/.agents/scripts/lib/orchestration/epic-runner/wave-scheduler.js +0 -66
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-apply.js +0 -789
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-diff.js +0 -676
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-discriminator.js +0 -389
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-format.js +0 -230
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-ops.js +0 -361
- package/.agents/scripts/lib/orchestration/finalize/open-or-locate-pr.js +0 -306
- package/.agents/scripts/lib/orchestration/finalize/post-handoff-comment.js +0 -489
- package/.agents/scripts/lib/orchestration/finalize/sanitize-skip-ci.js +0 -88
- package/.agents/scripts/lib/orchestration/lifecycle/emit-story-dispatch-end.js +0 -147
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/acceptance-reconciler.js +0 -384
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-armer.js +0 -501
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-predicate.js +0 -984
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/branch-cleaner.js +0 -264
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/checkpoint-pointer-writer.js +0 -278
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/cleaner.js +0 -355
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/finalizer.js +0 -673
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/index.js +0 -378
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/intervention-recorder.js +0 -140
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/label-transitioner.js +0 -144
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/notify-dispatcher.js +0 -174
- package/.agents/scripts/lib/orchestration/manifest-builder.js +0 -222
- package/.agents/scripts/lib/orchestration/plan-persist/amend.js +0 -359
- package/.agents/scripts/lib/orchestration/plan-persist/delivery-mode.js +0 -127
- package/.agents/scripts/lib/orchestration/post-merge-pipeline.js +0 -205
- package/.agents/scripts/lib/orchestration/recurring-failure-detector.js +0 -152
- package/.agents/scripts/lib/orchestration/retro/phases/checks.js +0 -94
- package/.agents/scripts/lib/orchestration/retro/phases/compose-body.js +0 -571
- package/.agents/scripts/lib/orchestration/retro/phases/gather-signals.js +0 -450
- package/.agents/scripts/lib/orchestration/retro/phases/post-and-mirror.js +0 -191
- package/.agents/scripts/lib/orchestration/retro-heuristics.js +0 -57
- package/.agents/scripts/lib/orchestration/retro-runner.js +0 -197
- package/.agents/scripts/lib/orchestration/skill-capsule-loader.js +0 -109
- package/.agents/scripts/lib/orchestration/spec-renderer.js +0 -447
- package/.agents/scripts/lib/orchestration/story-close/auto-refresh-runner.js +0 -747
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/gate-failure.js +0 -211
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/pre-merge-attribution.js +0 -158
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/refresh-commit.js +0 -446
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/regression-projection.js +0 -297
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/scope-discovery.js +0 -48
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution-wiring.js +0 -67
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution.js +0 -161
- package/.agents/scripts/lib/orchestration/story-close/baseline-friction-body.js +0 -117
- package/.agents/scripts/lib/orchestration/story-close/cd-out-guard.js +0 -86
- package/.agents/scripts/lib/orchestration/story-close/cleanup-reconciler.js +0 -147
- package/.agents/scripts/lib/orchestration/story-close/close-inputs.js +0 -142
- package/.agents/scripts/lib/orchestration/story-close/comment-bodies.js +0 -62
- package/.agents/scripts/lib/orchestration/story-close/merge-runner.js +0 -658
- package/.agents/scripts/lib/orchestration/story-close/merge-subject.js +0 -198
- package/.agents/scripts/lib/orchestration/story-close/phases/branch-restore.js +0 -105
- package/.agents/scripts/lib/orchestration/story-close/phases/close.js +0 -222
- package/.agents/scripts/lib/orchestration/story-close/phases/gates.js +0 -292
- package/.agents/scripts/lib/orchestration/story-close/phases/locked-pipeline.js +0 -270
- package/.agents/scripts/lib/orchestration/story-close/phases/preflight.js +0 -110
- package/.agents/scripts/lib/orchestration/story-close/phases/refresh.js +0 -86
- package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked-emitter.js +0 -112
- package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked.js +0 -157
- package/.agents/scripts/lib/orchestration/story-close/post-merge-close.js +0 -421
- package/.agents/scripts/lib/orchestration/story-close/pre-merge-validation.js +0 -301
- package/.agents/scripts/lib/orchestration/story-close/shared-checkout-guard.js +0 -163
- package/.agents/scripts/lib/orchestration/story-close-recovery.js +0 -690
- package/.agents/scripts/lib/orchestration/wave-marker.js +0 -28
- package/.agents/scripts/lib/orchestration/wave-record-io.js +0 -218
- package/.agents/scripts/lib/orchestration/wave-record-notifications.js +0 -145
- package/.agents/scripts/lib/orchestration/wave-record-projection.js +0 -212
- package/.agents/scripts/lib/presentation/dispatch-manifest-render.js +0 -111
- package/.agents/scripts/lib/presentation/manifest-builder.js +0 -239
- package/.agents/scripts/lib/presentation/manifest-formatter.js +0 -242
- package/.agents/scripts/lib/presentation/manifest-helpers.js +0 -213
- package/.agents/scripts/lib/presentation/manifest-persistence.js +0 -261
- package/.agents/scripts/lib/presentation/manifest-procedures.js +0 -55
- package/.agents/scripts/lib/presentation/manifest-render-waves.js +0 -306
- package/.agents/scripts/lib/presentation/manifest-renderer.js +0 -188
- package/.agents/scripts/lib/presentation/manifest-story-views.js +0 -110
- package/.agents/scripts/lib/push-epic-retry.js +0 -209
- package/.agents/scripts/lib/spec/index.js +0 -36
- package/.agents/scripts/lib/spec/loader.js +0 -425
- package/.agents/scripts/lib/spec/state.js +0 -208
- package/.agents/scripts/lib/story-init/blocker-validator.js +0 -68
- package/.agents/scripts/lib/story-init/branch-initializer.js +0 -408
- package/.agents/scripts/lib/story-init/context-resolver.js +0 -92
- package/.agents/scripts/lib/story-init/donor-precheck.js +0 -207
- package/.agents/scripts/lib/story-init/state-transitioner.js +0 -80
- package/.agents/scripts/lib/story-init/task-graph-builder.js +0 -124
- package/.agents/scripts/lib/story-init/transition-summary.js +0 -34
- package/.agents/scripts/lib/test-reserved-epic-temp-ids.js +0 -35
- package/.agents/scripts/lib/wave-runner/tick.js +0 -754
- package/.agents/scripts/lib/wave-runner/wave-runner-error.js +0 -20
- package/.agents/scripts/lifecycle-emit-story-dispatch.js +0 -194
- package/.agents/scripts/lifecycle-emit.js +0 -510
- package/.agents/scripts/plan-critics.js +0 -199
- package/.agents/scripts/retro-run.js +0 -218
- package/.agents/scripts/standalone-feedback-rollup.js +0 -188
- package/.agents/scripts/story-close.js +0 -294
- package/.agents/scripts/story-init.js +0 -599
- package/.agents/scripts/story-phase.js +0 -369
- package/.agents/scripts/wave-tick.js +0 -335
- package/.agents/skills/core/baseline-refresh/SKILL.md +0 -181
- package/.agents/skills/core/ci-cd-and-automation/SKILL.md +0 -274
- package/.agents/skills/core/ci-cd-and-automation/examples.md +0 -211
- package/.agents/skills/core/code-simplification/SKILL.md +0 -389
- package/.agents/skills/core/context-engineering/SKILL.md +0 -309
- package/.agents/skills/core/context-engineering/examples.md +0 -58
- package/.agents/skills/core/deprecation-and-migration/SKILL.md +0 -250
- package/.agents/skills/core/epic-plan-consolidate/SKILL.md +0 -172
- package/.agents/skills/core/epic-plan-consolidate/examples.md +0 -51
- package/.agents/skills/core/epic-plan-decompose-author/SKILL.md +0 -441
- package/.agents/skills/core/epic-plan-decompose-author/examples.md +0 -47
- package/.agents/skills/core/epic-plan-premortem/SKILL.md +0 -146
- package/.agents/skills/core/epic-plan-premortem/examples.md +0 -53
- package/.agents/skills/core/epic-plan-spec-author/SKILL.md +0 -413
- package/.agents/skills/core/epic-plan-spec-author/examples.md +0 -91
- package/.agents/skills/core/frontend-ui-engineering/SKILL.md +0 -357
- package/.agents/skills/core/hydrate-context/SKILL.md +0 -123
- package/.agents/skills/core/idea-refinement/examples.md +0 -437
- package/.agents/skills/core/idea-refinement/frameworks.md +0 -135
- package/.agents/skills/core/incremental-implementation/SKILL.md +0 -271
- package/.agents/skills/core/introducing-a-baseline-gate/SKILL.md +0 -213
- package/.agents/skills/core/knowledge-transfer/SKILL.md +0 -180
- package/.agents/skills/core/mutation-survivor-remediation/SKILL.md +0 -117
- package/.agents/skills/core/performance-optimization/SKILL.md +0 -314
- package/.agents/skills/core/planning-and-task-breakdown/SKILL.md +0 -277
- package/.agents/skills/core/property-based-testing/SKILL.md +0 -148
- package/.agents/skills/core/refactoring-discipline/SKILL.md +0 -111
- package/.agents/skills/core/shipping-and-launch/SKILL.md +0 -328
- package/.agents/skills/core/spec-driven-development/SKILL.md +0 -252
- package/.agents/skills/core/test-driven-development/SKILL.md +0 -475
- package/.agents/skills/core/using-agent-skills/SKILL.md +0 -232
- package/.agents/skills/stack/architecture/monorepo-path-strategist/SKILL.md +0 -31
- package/.agents/skills/stack/architecture/structured-output-zod/SKILL.md +0 -51
- package/.agents/skills/stack/architecture/subagent-orchestration/SKILL.md +0 -76
- package/.agents/skills/stack/backend/cloudflare-hono-architect/SKILL.md +0 -31
- package/.agents/skills/stack/backend/cloudflare-hono-architect/examples/route-template.ts +0 -33
- package/.agents/skills/stack/backend/cloudflare-queue-manager/SKILL.md +0 -31
- package/.agents/skills/stack/backend/cloudflare-workers/SKILL.md +0 -51
- package/.agents/skills/stack/backend/highlevel-crm/SKILL.md +0 -54
- package/.agents/skills/stack/backend/sqlite-drizzle-expert/SKILL.md +0 -29
- package/.agents/skills/stack/backend/sqlite-drizzle-expert/examples/schema-template.ts +0 -30
- package/.agents/skills/stack/backend/stripe-integration/SKILL.md +0 -57
- package/.agents/skills/stack/backend/stripe-integration/scripts/listen-stripe.sh +0 -9
- package/.agents/skills/stack/backend/turso-sqlite/SKILL.md +0 -48
- package/.agents/skills/stack/frontend/astro/SKILL.md +0 -62
- package/.agents/skills/stack/frontend/astro-react-island-strategist/SKILL.md +0 -30
- package/.agents/skills/stack/frontend/expo-react-native-developer/SKILL.md +0 -29
- package/.agents/skills/stack/frontend/google-analytics-v4/SKILL.md +0 -50
- package/.agents/skills/stack/frontend/tailwind-v4/SKILL.md +0 -58
- package/.agents/skills/stack/frontend/ui-accessibility-engineer/SKILL.md +0 -34
- package/.agents/skills/stack/qa/audit-accessibility/SKILL.md +0 -51
- package/.agents/skills/stack/qa/lighthouse-baseline/SKILL.md +0 -199
- package/.agents/skills/stack/security/backend-security-patterns/SKILL.md +0 -68
- package/.agents/workflows/helpers/deliver-epic-reference.md +0 -534
- package/.agents/workflows/helpers/deliver-epic.md +0 -955
- package/.agents/workflows/helpers/deliver-stories.md +0 -440
- package/.agents/workflows/helpers/epic-audit.md +0 -189
- package/.agents/workflows/helpers/epic-deliver-story.md +0 -427
- package/.agents/workflows/helpers/epic-testing.md +0 -125
- package/.agents/workflows/helpers/plan-epic-reference.md +0 -160
- package/.agents/workflows/helpers/plan-epic.md +0 -351
- package/.agents/workflows/helpers/plan-story.md +0 -251
- package/.agents/workflows/helpers/scope-triage-gate.md +0 -108
- /package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/spec-authoring-grounding.js +0 -0
|
@@ -33,7 +33,6 @@ export const WORKTREE_ISOLATION_DEFAULTS = Object.freeze({
|
|
|
33
33
|
primeFromPath: null,
|
|
34
34
|
allowSymlinkOnWindows: false,
|
|
35
35
|
reapOnSuccess: true,
|
|
36
|
-
reapOnCancel: true,
|
|
37
36
|
// Gitignored workspace files copied into each new worktree. Includes the
|
|
38
37
|
// operator's local-override files (`.agentrc.local.json`,
|
|
39
38
|
// `.agents/instructions.local.md`) so a worktree-isolated agent honors the
|
|
@@ -84,10 +83,6 @@ export function getWorktreeIsolation(config) {
|
|
|
84
83
|
typeof wi.reapOnSuccess === 'boolean'
|
|
85
84
|
? wi.reapOnSuccess
|
|
86
85
|
: WORKTREE_ISOLATION_DEFAULTS.reapOnSuccess,
|
|
87
|
-
reapOnCancel:
|
|
88
|
-
typeof wi.reapOnCancel === 'boolean'
|
|
89
|
-
? wi.reapOnCancel
|
|
90
|
-
: WORKTREE_ISOLATION_DEFAULTS.reapOnCancel,
|
|
91
86
|
bootstrapFiles: Array.isArray(wi.bootstrapFiles)
|
|
92
87
|
? wi.bootstrapFiles
|
|
93
88
|
: [...WORKTREE_ISOLATION_DEFAULTS.bootstrapFiles],
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* deleted from the resolver wrapper. Every internal call site reads the
|
|
20
20
|
* canonical `project` / `github` / `planning` / `delivery` blocks
|
|
21
21
|
* directly; consumers upgrade in lockstep with the framework bump
|
|
22
|
-
* (see `.agents/rules/git-conventions.md#contract-cutovers-—-no-shim-layer`).
|
|
22
|
+
* (see `.agents/rules/git-conventions-reference.md#contract-cutovers-—-no-shim-layer`).
|
|
23
23
|
*/
|
|
24
24
|
|
|
25
25
|
import fs from 'node:fs';
|
|
@@ -27,7 +27,6 @@ import path from 'node:path';
|
|
|
27
27
|
import { getCiDelivery } from './config/ci.js';
|
|
28
28
|
import { getCommands } from './config/commands.js';
|
|
29
29
|
import { getGitHub } from './config/github.js';
|
|
30
|
-
import { getLifecycle } from './config/lifecycle.js';
|
|
31
30
|
import { resolvePaths } from './config/paths.js';
|
|
32
31
|
import { validateOrchestrationConfig } from './config/validate-orchestration.js';
|
|
33
32
|
import { getWorktreeIsolation } from './config/worktree-isolation.js';
|
|
@@ -43,10 +42,8 @@ export { NOTIFICATIONS_DEFAULTS } from './config/github.js';
|
|
|
43
42
|
export {
|
|
44
43
|
getLimits,
|
|
45
44
|
LIMITS_DEFAULTS,
|
|
46
|
-
resolvePreflightCeilings,
|
|
47
45
|
} from './config/limits.js';
|
|
48
46
|
export { getPaths } from './config/paths.js';
|
|
49
|
-
export { getPreflight, PREFLIGHT_DEFAULTS } from './config/preflight.js';
|
|
50
47
|
export {
|
|
51
48
|
CODING_GUARDRAILS_DEFAULTS,
|
|
52
49
|
getQuality,
|
|
@@ -107,10 +104,8 @@ function applyDeliveryDefaults(rawDelivery) {
|
|
|
107
104
|
delivery.worktreeIsolation = getWorktreeIsolation({
|
|
108
105
|
worktreeIsolation: delivery.worktreeIsolation,
|
|
109
106
|
});
|
|
110
|
-
delivery.
|
|
111
|
-
//
|
|
112
|
-
// `skipForStoryPushes: true` by default so Story-branch commit
|
|
113
|
-
// tooling applies the `[skip ci]` trailer without operator opt-in.
|
|
107
|
+
// `delivery.ci` always carries autoMerge (and passes watch through) so
|
|
108
|
+
// CI-aware delivery knobs resolve without operator opt-in.
|
|
114
109
|
delivery.ci = getCiDelivery({ ci: delivery.ci });
|
|
115
110
|
return delivery;
|
|
116
111
|
}
|
|
@@ -64,40 +64,14 @@ const DELIVER_RUNNER_SCHEMA = {
|
|
|
64
64
|
type: 'object',
|
|
65
65
|
properties: {
|
|
66
66
|
concurrencyCap: { type: 'integer', minimum: 1 },
|
|
67
|
-
progressReportIntervalSec: { type: 'integer', minimum: 0 },
|
|
68
67
|
verifyConcurrencyCap: { type: 'integer', minimum: 1 },
|
|
69
68
|
},
|
|
70
69
|
additionalProperties: false,
|
|
71
70
|
};
|
|
72
71
|
|
|
73
72
|
/**
|
|
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.
|
|
73
|
+
* `delivery.worktreeIsolation` — per-Story git worktree provisioning.
|
|
82
74
|
*/
|
|
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
75
|
const WORKTREE_ISOLATION_SCHEMA = {
|
|
102
76
|
type: 'object',
|
|
103
77
|
properties: {
|
|
@@ -110,11 +84,15 @@ const WORKTREE_ISOLATION_SCHEMA = {
|
|
|
110
84
|
primeFromPath: { type: ['string', 'null'], minLength: 1 },
|
|
111
85
|
allowSymlinkOnWindows: { type: 'boolean' },
|
|
112
86
|
reapOnSuccess: { type: 'boolean' },
|
|
113
|
-
reapOnCancel: { type: 'boolean' },
|
|
114
87
|
bootstrapFiles: {
|
|
115
88
|
type: 'array',
|
|
116
89
|
items: { type: 'string', minLength: 1 },
|
|
117
|
-
default: [
|
|
90
|
+
default: [
|
|
91
|
+
'.env',
|
|
92
|
+
'.mcp.json',
|
|
93
|
+
'.agentrc.local.json',
|
|
94
|
+
'.agents/instructions.local.md',
|
|
95
|
+
],
|
|
118
96
|
},
|
|
119
97
|
},
|
|
120
98
|
additionalProperties: false,
|
|
@@ -132,20 +110,14 @@ const WORKTREE_ISOLATION_SCHEMA = {
|
|
|
132
110
|
};
|
|
133
111
|
|
|
134
112
|
/**
|
|
135
|
-
* `delivery.signals` — detector thresholds for the
|
|
136
|
-
* performance-signal categories. `
|
|
137
|
-
*
|
|
113
|
+
* `delivery.signals` — detector thresholds for the surviving
|
|
114
|
+
* performance-signal categories. `hotspot` was retired with its detector
|
|
115
|
+
* (Epic #4406); `churn` and `idle` were dropped earlier (low signal-to-noise).
|
|
116
|
+
* Each block is shallow-merged by the resolver.
|
|
138
117
|
*/
|
|
139
118
|
const SIGNALS_SCHEMA = {
|
|
140
119
|
type: 'object',
|
|
141
120
|
properties: {
|
|
142
|
-
hotspot: {
|
|
143
|
-
type: 'object',
|
|
144
|
-
properties: {
|
|
145
|
-
p95Multiplier: { type: 'number', minimum: 0 },
|
|
146
|
-
},
|
|
147
|
-
additionalProperties: false,
|
|
148
|
-
},
|
|
149
121
|
rework: {
|
|
150
122
|
type: 'object',
|
|
151
123
|
properties: {
|
|
@@ -164,26 +136,6 @@ const SIGNALS_SCHEMA = {
|
|
|
164
136
|
additionalProperties: false,
|
|
165
137
|
};
|
|
166
138
|
|
|
167
|
-
/**
|
|
168
|
-
* `delivery.lifecycle` — knobs consumed by the lifecycle event bus
|
|
169
|
-
* (Epic #2172). `timeouts` is a per-event budget map (eventName → seconds)
|
|
170
|
-
* used by Story 11's `TimeoutWatchdog` listener; missing entries fall back
|
|
171
|
-
* to in-listener defaults. `heartbeatWarnSeconds` is the no-progress
|
|
172
|
-
* threshold consumed by `HeartbeatMonitor`. Story #2227 lays down the
|
|
173
|
-
* keys; consumers land in later stories.
|
|
174
|
-
*/
|
|
175
|
-
const LIFECYCLE_SCHEMA = {
|
|
176
|
-
type: 'object',
|
|
177
|
-
properties: {
|
|
178
|
-
timeouts: {
|
|
179
|
-
type: 'object',
|
|
180
|
-
additionalProperties: { type: 'integer', minimum: 1 },
|
|
181
|
-
},
|
|
182
|
-
heartbeatWarnSeconds: { type: 'integer', minimum: 1 },
|
|
183
|
-
},
|
|
184
|
-
additionalProperties: false,
|
|
185
|
-
};
|
|
186
|
-
|
|
187
139
|
/**
|
|
188
140
|
* `delivery.mergeWatch` — knobs consumed by the MergeWatcher lifecycle
|
|
189
141
|
* listener (Story #2896, Epic #2880). `intervalSeconds` is the poll
|
|
@@ -203,50 +155,38 @@ const MERGE_WATCH_SCHEMA = {
|
|
|
203
155
|
};
|
|
204
156
|
|
|
205
157
|
/**
|
|
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.
|
|
158
|
+
* `delivery.epicAudit` was removed on v2 (Story-only delivery — no
|
|
159
|
+
* epic-audit runner). Remediation policy lives on `delivery.codeReview`
|
|
160
|
+
* (`CODE_REVIEW_SCHEMA` imported from the quality schema module).
|
|
225
161
|
*/
|
|
226
|
-
|
|
162
|
+
|
|
163
|
+
// Epic #4478 (M7-B) — role-scoped-agent kill-switch + maker-checker floor.
|
|
164
|
+
// Stage 6 dropped `delivery.routing.singleDelivery` (v1 epic route switch).
|
|
165
|
+
// `delivery.routing.roleScopedAgents` (default true via getDeliveryRouting)
|
|
166
|
+
// flips converted delivery spawns onto their `.claude/agents/<role>.md` boot
|
|
167
|
+
// context; false falls back to `subagent_type: general-purpose` (the instant
|
|
168
|
+
// per-consumer revert + the escape for hosts that ignore `.claude/agents/`).
|
|
169
|
+
// `delivery.routing.freshCriticSampleRate` (default 0.2, clamped [0, 1]) is the
|
|
170
|
+
// maker-checker sampling floor forcing a fraction of low-risk acceptance
|
|
171
|
+
// clusters through a fresh critic.
|
|
172
|
+
const ROUTING_SCHEMA = {
|
|
227
173
|
type: 'object',
|
|
228
174
|
properties: {
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
175
|
+
roleScopedAgents: { type: 'boolean' },
|
|
176
|
+
freshCriticSampleRate: { type: 'number', minimum: 0, maximum: 1 },
|
|
177
|
+
ceremonyProfile: {
|
|
178
|
+
type: 'string',
|
|
179
|
+
enum: ['minimal', 'standard', 'strict'],
|
|
180
|
+
},
|
|
181
|
+
closeAndLand: { type: 'boolean' },
|
|
232
182
|
},
|
|
233
183
|
additionalProperties: false,
|
|
234
184
|
};
|
|
235
185
|
|
|
236
|
-
// Story #
|
|
237
|
-
// `
|
|
238
|
-
//
|
|
239
|
-
//
|
|
240
|
-
// The Epic-branch merge commit produced by story-close.js's merge
|
|
241
|
-
// runner never carries the marker, regardless of this flag.
|
|
242
|
-
//
|
|
243
|
-
// Story #4356 (Epic #4355) — CI-aware delivery namespace. `earlyPr` gates
|
|
244
|
-
// whether /deliver opens the Epic PR early (before every Story merges) so CI
|
|
245
|
-
// starts warming while later waves run; defaults to `true` via getCiDelivery.
|
|
246
|
-
// `watch.*` tunes the merge/CI watch poll loop (poll cadence, poll cap, and
|
|
247
|
-
// how many times the watcher may resume after a transient stall).
|
|
248
|
-
// `autoMerge` selects the merge posture: `"trust-ci"` (default) merges once
|
|
249
|
-
// required checks pass, `"strict"` additionally requires a clean review gate.
|
|
186
|
+
// Story #4356 (Epic #4355) — CI-aware delivery namespace. `watch.*` tunes
|
|
187
|
+
// the merge/CI watch poll loop; `autoMerge` selects the merge posture.
|
|
188
|
+
// Retired: `earlyPr` (Epic early-PR warmup) and `requireChecks` (no
|
|
189
|
+
// AutomergePredicate reader on v2).
|
|
250
190
|
const CI_WATCH_SCHEMA = {
|
|
251
191
|
type: 'object',
|
|
252
192
|
properties: {
|
|
@@ -260,33 +200,8 @@ const CI_WATCH_SCHEMA = {
|
|
|
260
200
|
const CI_DELIVERY_SCHEMA = {
|
|
261
201
|
type: 'object',
|
|
262
202
|
properties: {
|
|
263
|
-
skipForStoryPushes: { type: 'boolean' },
|
|
264
|
-
earlyPr: { type: 'boolean' },
|
|
265
203
|
watch: CI_WATCH_SCHEMA,
|
|
266
204
|
autoMerge: { type: 'string', enum: ['trust-ci', 'strict'] },
|
|
267
|
-
// Story #4472 — fail-closed-without-checks policy. When `true`, the
|
|
268
|
-
// AutomergePredicate refuses to arm merge in a repo that reports zero
|
|
269
|
-
// required checks ("no checks reported"), treating the absence of a CI
|
|
270
|
-
// gate as a hard block instead of green. Defaults to `false` so a
|
|
271
|
-
// checks-less repo with green close-validation gates lands headlessly
|
|
272
|
-
// rather than parking on the operator-merges path.
|
|
273
|
-
requireChecks: { type: 'boolean' },
|
|
274
|
-
},
|
|
275
|
-
additionalProperties: false,
|
|
276
|
-
};
|
|
277
|
-
|
|
278
|
-
// Story #2899 (Epic #2880) — `delivery.preflight.*` thresholds consumed
|
|
279
|
-
// by `epic-deliver-preflight.js`. When any value is exceeded the CLI
|
|
280
|
-
// surfaces a breach in its envelope and the workflow flips the Epic to
|
|
281
|
-
// `agent::blocked` (see /deliver Phase 1 prelude).
|
|
282
|
-
const PREFLIGHT_SCHEMA = {
|
|
283
|
-
type: 'object',
|
|
284
|
-
properties: {
|
|
285
|
-
maxStories: { type: 'integer', minimum: 1 },
|
|
286
|
-
maxWaves: { type: 'integer', minimum: 1 },
|
|
287
|
-
maxInstallCostSeconds: { type: 'integer', minimum: 1 },
|
|
288
|
-
maxGithubApiRequests: { type: 'integer', minimum: 1 },
|
|
289
|
-
maxClaudeQuotaTokens: { type: 'integer', minimum: 1 },
|
|
290
205
|
},
|
|
291
206
|
additionalProperties: false,
|
|
292
207
|
};
|
|
@@ -296,8 +211,8 @@ const PREFLIGHT_SCHEMA = {
|
|
|
296
211
|
* checkpoint wired into story-deliver (Story #3430, Epic #3418). Strictly
|
|
297
212
|
* additive and default-OFF: when `enabled` is unset or `false`, story-deliver
|
|
298
213
|
* behaves exactly as before. When `true`, the worker runs an advisory
|
|
299
|
-
* post-green refactor pass (the `
|
|
300
|
-
*
|
|
214
|
+
* post-green refactor pass (the `core/code-review-and-quality` skill's
|
|
215
|
+
* Post-Green Refactor Pass) after the suite is green. The stage is
|
|
301
216
|
* advisory only — it never changes existing close-validation gate semantics.
|
|
302
217
|
*/
|
|
303
218
|
const REFACTOR_STAGE_SCHEMA = {
|
|
@@ -306,7 +221,7 @@ const REFACTOR_STAGE_SCHEMA = {
|
|
|
306
221
|
enabled: {
|
|
307
222
|
type: 'boolean',
|
|
308
223
|
description:
|
|
309
|
-
'When true, story-deliver runs an advisory post-green refactor stage (
|
|
224
|
+
'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.',
|
|
310
225
|
},
|
|
311
226
|
},
|
|
312
227
|
additionalProperties: false,
|
|
@@ -337,6 +252,12 @@ const ACCEPTANCE_EVAL_SCHEMA = {
|
|
|
337
252
|
description:
|
|
338
253
|
'Maximum number of redraft rounds the acceptance self-eval loop runs before escalating to agent::blocked when criteria remain unmet. Default 2; clamped into [1, hard ceiling] by the resolver so the cap can never be disabled.',
|
|
339
254
|
},
|
|
255
|
+
clusterCeiling: {
|
|
256
|
+
type: 'integer',
|
|
257
|
+
minimum: 1,
|
|
258
|
+
description:
|
|
259
|
+
'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 the resolver so a large value cannot collapse the fan-out to a single diluted critic. Ignored on the fan-out route.',
|
|
260
|
+
},
|
|
340
261
|
},
|
|
341
262
|
additionalProperties: false,
|
|
342
263
|
};
|
|
@@ -368,30 +289,19 @@ export const DELIVERY_SCHEMA = {
|
|
|
368
289
|
type: 'object',
|
|
369
290
|
properties: {
|
|
370
291
|
execution: EXECUTION_SCHEMA,
|
|
371
|
-
maxTokenBudget: { type: 'integer', minimum: 1 },
|
|
372
292
|
lease: LEASE_SCHEMA,
|
|
373
293
|
docsFreshness: DOCS_FRESHNESS_SCHEMA,
|
|
374
294
|
deliverRunner: DELIVER_RUNNER_SCHEMA,
|
|
375
295
|
worktreeIsolation: WORKTREE_ISOLATION_SCHEMA,
|
|
376
296
|
signals: SIGNALS_SCHEMA,
|
|
377
297
|
quality: QUALITY_SCHEMA,
|
|
378
|
-
lifecycle: LIFECYCLE_SCHEMA,
|
|
379
298
|
mergeWatch: MERGE_WATCH_SCHEMA,
|
|
380
|
-
epicAudit: EPIC_AUDIT_SCHEMA,
|
|
381
299
|
codeReview: CODE_REVIEW_SCHEMA,
|
|
382
|
-
retro: RETRO_SCHEMA,
|
|
383
300
|
refactorStage: REFACTOR_STAGE_SCHEMA,
|
|
384
301
|
acceptanceEval: ACCEPTANCE_EVAL_SCHEMA,
|
|
385
302
|
feedbackLoop: FEEDBACK_LOOP_SCHEMA,
|
|
386
303
|
ci: CI_DELIVERY_SCHEMA,
|
|
387
|
-
|
|
388
|
-
// Cross-Story concurrency-hazard gate (Story #2297). When true,
|
|
389
|
-
// `epic-deliver-prepare` refuses to flip the Epic to
|
|
390
|
-
// `agent::executing` if the upcoming waves still carry any conflict
|
|
391
|
-
// finding (Story #2296). Off by default; operators using the gate
|
|
392
|
-
// also need to wire findings into prepare via the runtime injection
|
|
393
|
-
// surface.
|
|
394
|
-
failOnConcurrencyHazards: { type: 'boolean' },
|
|
304
|
+
routing: ROUTING_SCHEMA,
|
|
395
305
|
},
|
|
396
306
|
additionalProperties: false,
|
|
397
307
|
};
|
|
@@ -96,6 +96,15 @@ export const QUALITY_SCHEMA = {
|
|
|
96
96
|
codingGuardrails: CODING_GUARDRAILS_SCHEMA,
|
|
97
97
|
autoRefresh: AUTO_REFRESH_SCHEMA,
|
|
98
98
|
baselineEpsilon: BASELINE_EPSILON_SCHEMA,
|
|
99
|
+
// Story #4495. Fail-closed baseline-enforcement policy for the unified
|
|
100
|
+
// check-baselines close-validation gate. Default false: a consumer that
|
|
101
|
+
// enables baseline gates but has not committed baseline artifacts under
|
|
102
|
+
// baselines/ gets a clean skip-with-reason from buildDefaultGates rather
|
|
103
|
+
// than a deterministic first-try close failure. Set true to keep the gate
|
|
104
|
+
// registered so an absent baseline artifact fails close-validation with a
|
|
105
|
+
// preflight hint (the fail-closed posture, analogous to
|
|
106
|
+
// delivery.ci.requireChecks).
|
|
107
|
+
requireBaselines: { type: 'boolean' },
|
|
99
108
|
// Navigability lens + post-wave integration gate config (Epic #4131,
|
|
100
109
|
// F2/F3/F1/F4). Read by audit-suite/selector.js (route globs) and the
|
|
101
110
|
// deliver-epic.md Phase 6.5 gate (journey suite). Opt-in: absent or empty
|
|
@@ -114,12 +123,11 @@ export const QUALITY_SCHEMA = {
|
|
|
114
123
|
};
|
|
115
124
|
|
|
116
125
|
/**
|
|
117
|
-
* `delivery.codeReview` —
|
|
118
|
-
*
|
|
126
|
+
* `delivery.codeReview` — review-provider chain + bounded-retry knobs for
|
|
127
|
+
* the /deliver code-review ceremony (Story-close and plan-run close).
|
|
119
128
|
*
|
|
120
|
-
* `autoFixSeverity` (Story #4399) is the
|
|
121
|
-
*
|
|
122
|
-
* Phase 5 findings the host-LLM focused-fix routing remediates on-branch —
|
|
129
|
+
* `autoFixSeverity` (Story #4399) is the threshold that governs which
|
|
130
|
+
* findings the host-LLM focused-fix routing remediates on-branch —
|
|
123
131
|
* `medium` (default) routes 🔴/🟠/🟡 while 🟢 still graduates, `high`
|
|
124
132
|
* reproduces the pre-4399 Critical/High-only routing.
|
|
125
133
|
*/
|
|
@@ -135,15 +143,10 @@ export const CODE_REVIEW_SCHEMA = {
|
|
|
135
143
|
// hatch reserved for adapter-specific options.
|
|
136
144
|
//
|
|
137
145
|
// Story #2871 added `security-review` to the inline registry plus
|
|
138
|
-
//
|
|
139
|
-
//
|
|
140
|
-
// `
|
|
141
|
-
// `
|
|
142
|
-
provider: {
|
|
143
|
-
type: 'string',
|
|
144
|
-
enum: ['native', 'codex', 'security-review'],
|
|
145
|
-
default: 'native',
|
|
146
|
-
},
|
|
146
|
+
// the `providers: []` chain shape. Chain entries can also reference
|
|
147
|
+
// the `ultrareview` manual-prompt provider via `manualPrompt: true`.
|
|
148
|
+
// When `providers` is unset or empty, the factory defaults to
|
|
149
|
+
// `[{ name: 'native' }]`.
|
|
147
150
|
providers: {
|
|
148
151
|
type: 'array',
|
|
149
152
|
items: {
|
|
@@ -246,66 +246,80 @@ const CODEBASE_SNAPSHOT_SCHEMA = {
|
|
|
246
246
|
additionalProperties: false,
|
|
247
247
|
};
|
|
248
248
|
|
|
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
249
|
const PLANNING_SCHEMA = {
|
|
276
250
|
type: 'object',
|
|
277
251
|
properties: {
|
|
278
252
|
riskHeuristics: LIST_OR_EXTENDER_OF_STRINGS,
|
|
279
253
|
context: PLANNING_CONTEXT_SCHEMA,
|
|
280
254
|
codebaseSnapshot: CODEBASE_SNAPSHOT_SCHEMA,
|
|
281
|
-
taskSizing: TASK_SIZING_SCHEMA,
|
|
282
255
|
// Cross-Story conflict-finding severity gates. Off by default so
|
|
283
256
|
// existing repos keep advisory-only behaviour; flipping either to
|
|
284
257
|
// `true` upgrades the matching finding class to `'hard'`, which routes
|
|
285
258
|
// it through the validator's `errors[]` channel and trips the bounded
|
|
286
259
|
// decompose loop's re-prompt gate.
|
|
287
|
-
|
|
288
|
-
|
|
260
|
+
// `planning.modelCapacity` was collapsed to the framework constant
|
|
261
|
+
// `DEFAULT_MODEL_CAPACITY` in ticket-validator-sizing.js (authored-
|
|
262
|
+
// tokens-only mass); setting it in a config is rejected as an
|
|
263
|
+
// additional property.
|
|
264
|
+
failOnSharedEditors: {
|
|
265
|
+
type: 'boolean',
|
|
266
|
+
description:
|
|
267
|
+
'When true, upgrade shared-editor conflict findings to hard errors (default false — advisory soft findings only).',
|
|
268
|
+
},
|
|
269
|
+
requireExplicitCrossStoryDeps: {
|
|
270
|
+
type: 'boolean',
|
|
271
|
+
description:
|
|
272
|
+
'When true, upgrade implicit cross-Story dependency findings to hard errors (default false — advisory soft findings only).',
|
|
273
|
+
},
|
|
289
274
|
// Cross-cutting registry conflict knobs consumed by
|
|
290
275
|
// `ticket-validator-conflicts.js` (wired through
|
|
291
276
|
// `epic-plan-decompose/phases/planning-artifacts.js`).
|
|
292
277
|
// `crossCuttingRegistries` names the registry paths whose concurrent
|
|
293
278
|
// edits are flagged; `failOnRegistryConflicts` upgrades that finding to
|
|
294
279
|
// `'hard'`. `failOnLargeFanOut` / `largeFanOutThreshold` gate the
|
|
295
|
-
//
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
280
|
+
// delete blast-radius finding (call sites of a module a Story marks
|
|
281
|
+
// `assumption: "deletes"`).
|
|
282
|
+
crossCuttingRegistries: {
|
|
283
|
+
...LIST_OR_EXTENDER_OF_STRINGS,
|
|
284
|
+
description:
|
|
285
|
+
'Registry path patterns whose concurrent edits across Stories are flagged as conflicts. Defaults to the framework listener/handler index patterns when omitted.',
|
|
286
|
+
},
|
|
287
|
+
failOnRegistryConflicts: {
|
|
288
|
+
type: 'boolean',
|
|
289
|
+
description:
|
|
290
|
+
'When true, upgrade cross-cutting registry conflict findings to hard errors (default false).',
|
|
291
|
+
},
|
|
292
|
+
failOnLargeFanOut: {
|
|
293
|
+
type: 'boolean',
|
|
294
|
+
description:
|
|
295
|
+
'When true, upgrade fan-out-warning findings (delete blast radius) to hard errors (default false — soft advisory).',
|
|
296
|
+
},
|
|
297
|
+
largeFanOutThreshold: {
|
|
298
|
+
type: 'integer',
|
|
299
|
+
minimum: 0,
|
|
300
|
+
description:
|
|
301
|
+
'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.',
|
|
302
|
+
},
|
|
300
303
|
// 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).
|
|
304
|
+
// reachability gate (Epic #4131 F7; demoted into persist by #4474 PR6).
|
|
303
305
|
// Opt-in: absent or empty routeGlobs degrades to a silent no-op.
|
|
304
306
|
navigation: {
|
|
305
307
|
type: 'object',
|
|
308
|
+
description:
|
|
309
|
+
'Opt-in navigability reachability gate. Absent or empty routeGlobs is a silent no-op.',
|
|
306
310
|
properties: {
|
|
307
|
-
routeGlobs: {
|
|
308
|
-
|
|
311
|
+
routeGlobs: {
|
|
312
|
+
type: 'array',
|
|
313
|
+
items: { type: 'string' },
|
|
314
|
+
description:
|
|
315
|
+
'Glob patterns (e.g. pages/**, app/**/route.ts) marking paths that add a user-facing route.',
|
|
316
|
+
},
|
|
317
|
+
navRegistry: {
|
|
318
|
+
type: 'array',
|
|
319
|
+
items: { type: 'string' },
|
|
320
|
+
description:
|
|
321
|
+
'Tokens identifying the nav-registry SSOT a route-adding Story is expected to reference.',
|
|
322
|
+
},
|
|
309
323
|
},
|
|
310
324
|
additionalProperties: false,
|
|
311
325
|
},
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
* dependency-parser.js — Shared Dependency & Metadata Parsing Utilities
|
|
3
3
|
*
|
|
4
4
|
* Canonical implementation of dependency-related regex parsing and
|
|
5
|
-
* ticket metadata extraction
|
|
6
|
-
*
|
|
5
|
+
* ticket metadata extraction, shared by the ticketing provider and the
|
|
6
|
+
* orchestration layer (e.g. providers/github/tickets.js,
|
|
7
|
+
* lib/story-adjacency.js, lib/branch-name-guard.js).
|
|
7
8
|
*/
|
|
8
9
|
|
|
9
10
|
/**
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
*
|
|
8
8
|
* - `alwaysLoaded` — `CLAUDE.md` plus the transitive closure of its
|
|
9
9
|
* `@`-import references (`@AGENTS.md`,
|
|
10
|
-
* `@.agents/instructions.md`, the
|
|
11
|
-
*
|
|
10
|
+
* `@.agents/instructions.md`, the always-on rules, …).
|
|
11
|
+
* This is the context every session re-pays
|
|
12
12
|
* on every subagent spawn (instructions.md § 4), so it is
|
|
13
13
|
* the primary budget the context-budget ratchet gates.
|
|
14
14
|
* - `mandatoryRead` — the resolved `project.docsContextFiles` set (prefixed
|
|
@@ -24,10 +24,16 @@
|
|
|
24
24
|
* - `onDemand` — the on-demand `.agents/rules/*.md` set (instructions.md
|
|
25
25
|
* § 1.F): every rule file that is **not** part of the
|
|
26
26
|
* always-on core already captured in `alwaysLoaded`.
|
|
27
|
+
* - `agentBoot` — the role-scoped boot contexts `.agents/agents/*.md`
|
|
28
|
+
* (issue #4478). Each is a standalone system prompt a
|
|
29
|
+
* converted spawn boots on **instead of** the always-loaded
|
|
30
|
+
* closure, so it is budgeted independently (per-file ≤8KB
|
|
31
|
+
* ceiling gated by `check-context-budget.js`).
|
|
27
32
|
*
|
|
28
33
|
* A file that could appear in more than one tier is kept in its **highest**
|
|
29
34
|
* tier only (alwaysLoaded > mandatoryRead > digestVisible > onDemand), so the
|
|
30
|
-
*
|
|
35
|
+
* arrays partition the doc set with no double-counting. `agentBoot` is disjoint
|
|
36
|
+
* from the read-tiers (it lives under `.agents/agents/`, not the doc/rules set).
|
|
31
37
|
*
|
|
32
38
|
* The closure is discovered by parsing `@`-import references and following
|
|
33
39
|
* them recursively (cycle-safe via a visited set). A candidate `@`-token only
|
|
@@ -216,6 +222,7 @@ export function docsContextPaths(config) {
|
|
|
216
222
|
* mandatoryRead: Array<{ path: string, bytes: number }>,
|
|
217
223
|
* digestVisible: Array<{ path: string, bytes: number }>,
|
|
218
224
|
* onDemand: Array<{ path: string, bytes: number }>,
|
|
225
|
+
* agentBoot: Array<{ path: string, bytes: number }>,
|
|
219
226
|
* } }}
|
|
220
227
|
*/
|
|
221
228
|
export function resolveDocTiers(
|
|
@@ -254,7 +261,35 @@ export function resolveDocTiers(
|
|
|
254
261
|
// (the always-on ones already live in the alwaysLoaded closure).
|
|
255
262
|
const onDemand = collect(listOnDemandRules(root, fs));
|
|
256
263
|
|
|
257
|
-
|
|
264
|
+
// 5. agent-boot: role-scoped boot contexts .agents/agents/*.md (#4478). These
|
|
265
|
+
// are standalone system prompts, disjoint from the doc read-tiers.
|
|
266
|
+
const agentBoot = collect(listAgentDefs(root, fs));
|
|
267
|
+
|
|
268
|
+
return {
|
|
269
|
+
tiers: { alwaysLoaded, mandatoryRead, digestVisible, onDemand, agentBoot },
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* List the role-scoped agent-boot defs (repo-relative posix): every
|
|
275
|
+
* `.agents/agents/*.md`. Returns [] when the directory is absent.
|
|
276
|
+
*
|
|
277
|
+
* @param {string} root absolute repo root
|
|
278
|
+
* @param {FsLike} fs
|
|
279
|
+
* @returns {string[]}
|
|
280
|
+
*/
|
|
281
|
+
function listAgentDefs(root, fs) {
|
|
282
|
+
const agentsDir = path.resolve(root, '.agents', 'agents');
|
|
283
|
+
let names;
|
|
284
|
+
try {
|
|
285
|
+
names = fs.readdirSync(agentsDir);
|
|
286
|
+
} catch {
|
|
287
|
+
return [];
|
|
288
|
+
}
|
|
289
|
+
return names
|
|
290
|
+
.filter((n) => n.endsWith('.md'))
|
|
291
|
+
.map((n) => path.posix.join('.agents', 'agents', n))
|
|
292
|
+
.sort();
|
|
258
293
|
}
|
|
259
294
|
|
|
260
295
|
/**
|