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
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* decomposer-context.js — system-prompt builder for the `/plan` authoring
|
|
3
|
+
* pass (Story #2466; v2 keeps the prompt helper, drops the Epic-fetch
|
|
4
|
+
* decomposition envelope).
|
|
5
|
+
*
|
|
6
|
+
* `buildDecomposerSystemPrompt` is the live surface consumed by
|
|
7
|
+
* `plan-context.js#buildSystemPrompts`. The retired
|
|
8
|
+
* `buildDecompositionContext` Epic-fetch path lived here until the
|
|
9
|
+
* Story-only cutover removed every caller.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { renderDecomposerSystemPrompt } from '../../templates/decomposer-prompts.js';
|
|
13
|
+
|
|
14
|
+
export function buildDecomposerSystemPrompt(
|
|
15
|
+
heuristics = [],
|
|
16
|
+
{ maxTickets, epicId } = {},
|
|
17
|
+
) {
|
|
18
|
+
const base = renderDecomposerSystemPrompt({
|
|
19
|
+
maxTickets,
|
|
20
|
+
epicId,
|
|
21
|
+
});
|
|
22
|
+
const heuristicsStr =
|
|
23
|
+
heuristics.length > 0
|
|
24
|
+
? `### RISK HEURISTICS (planning metadata if any apply):\n- ${heuristics.join('\n- ')}`
|
|
25
|
+
: '';
|
|
26
|
+
return `${base}${heuristicsStr ? `\n\n${heuristicsStr}` : ''}`;
|
|
27
|
+
}
|
package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/risk-verdict.js
RENAMED
|
@@ -24,7 +24,6 @@ export const RISK_VERDICT_SCHEMA_PATH = path.resolve(
|
|
|
24
24
|
'..',
|
|
25
25
|
'..',
|
|
26
26
|
'..',
|
|
27
|
-
'..',
|
|
28
27
|
'schemas',
|
|
29
28
|
'risk-verdict.schema.json',
|
|
30
29
|
);
|
|
@@ -57,7 +56,7 @@ function getRiskVerdictValidator(schemaPath, io) {
|
|
|
57
56
|
*
|
|
58
57
|
* @param {unknown} verdict
|
|
59
58
|
* @param {{ schemaPath?: string, io?: { readFileSync: typeof readFileSync } }} [opts]
|
|
60
|
-
* @returns {import('
|
|
59
|
+
* @returns {import('../planning-risk.js').RiskVerdict} The validated verdict (same reference).
|
|
61
60
|
*/
|
|
62
61
|
export function validateRiskVerdict(verdict, opts = {}) {
|
|
63
62
|
const validate = getRiskVerdictValidator(
|
|
@@ -72,7 +71,7 @@ export function validateRiskVerdict(verdict, opts = {}) {
|
|
|
72
71
|
`[epic-plan-spec] risk verdict failed schema validation: ${detail}`,
|
|
73
72
|
);
|
|
74
73
|
}
|
|
75
|
-
return /** @type {import('
|
|
74
|
+
return /** @type {import('../planning-risk.js').RiskVerdict} */ (verdict);
|
|
76
75
|
}
|
|
77
76
|
|
|
78
77
|
/**
|
|
@@ -81,7 +80,7 @@ export function validateRiskVerdict(verdict, opts = {}) {
|
|
|
81
80
|
*
|
|
82
81
|
* @param {string} verdictPath
|
|
83
82
|
* @param {{ schemaPath?: string, io?: { readFileSync: typeof readFileSync } }} [opts]
|
|
84
|
-
* @returns {import('
|
|
83
|
+
* @returns {import('../planning-risk.js').RiskVerdict}
|
|
85
84
|
*/
|
|
86
85
|
export function loadRiskVerdict(verdictPath, opts = {}) {
|
|
87
86
|
const io = opts.io ?? { readFileSync };
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* while a remote not-found is treated as a no-op.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import {
|
|
11
|
+
import { deleteBranchEverywhere } from '../../../git-branch-cleanup.js';
|
|
12
12
|
|
|
13
13
|
function reapPhaseLogger(progress) {
|
|
14
14
|
return progress ?? (() => {});
|
|
@@ -20,7 +20,7 @@ export async function branchCleanupPhase(ctx, state = {}) {
|
|
|
20
20
|
repoRoot,
|
|
21
21
|
progress,
|
|
22
22
|
logger,
|
|
23
|
-
branchCleanup =
|
|
23
|
+
branchCleanup = deleteBranchEverywhere,
|
|
24
24
|
} = ctx;
|
|
25
25
|
const log = reapPhaseLogger(progress);
|
|
26
26
|
log('CLEANUP', `Deleting story branch: ${storyBranch}`);
|
|
@@ -1,33 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* phases/dashboard-refresh.js —
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* phases/dashboard-refresh.js — retired dispatch-manifest refresh seam.
|
|
3
|
+
*
|
|
4
|
+
* The Stage 5 hard cutover deletes the dispatcher/manifest surface; keep this
|
|
5
|
+
* phase as a no-op so any still-wired post-merge pipeline can drain safely.
|
|
5
6
|
*/
|
|
6
7
|
|
|
7
|
-
import { generateAndSaveManifest } from '../../../../dispatcher.js';
|
|
8
|
-
|
|
9
8
|
function reapPhaseLogger(progress) {
|
|
10
9
|
return progress ?? (() => {});
|
|
11
10
|
}
|
|
12
11
|
|
|
13
12
|
export async function dashboardRefreshPhase(ctx) {
|
|
14
|
-
const {
|
|
15
|
-
epicId,
|
|
16
|
-
provider,
|
|
17
|
-
skipDashboard,
|
|
18
|
-
progress,
|
|
19
|
-
generateManifestFn = generateAndSaveManifest,
|
|
20
|
-
} = ctx;
|
|
13
|
+
const { skipDashboard, progress } = ctx;
|
|
21
14
|
const log = reapPhaseLogger(progress);
|
|
22
15
|
if (skipDashboard) {
|
|
23
|
-
log(
|
|
24
|
-
'DASHBOARD',
|
|
25
|
-
'⏭️ Skipping dashboard refresh (--skip-dashboard flag set)',
|
|
26
|
-
);
|
|
16
|
+
log('DASHBOARD', 'Skipping dashboard refresh (--skip-dashboard flag set)');
|
|
27
17
|
return false;
|
|
28
18
|
}
|
|
29
|
-
log('DASHBOARD', '
|
|
30
|
-
|
|
31
|
-
log('DASHBOARD', '✅ Dashboard manifest updated (temp/)');
|
|
32
|
-
return true;
|
|
19
|
+
log('DASHBOARD', 'Dispatch manifest refresh retired; no dashboard updated.');
|
|
20
|
+
return false;
|
|
33
21
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* phases/worktree-reap.js — post-merge worktree reap phase.
|
|
3
3
|
*
|
|
4
|
-
* After a Story branch is merged into the Epic branch
|
|
4
|
+
* After a Story branch is merged (pre-v2: into the Epic branch; v2:
|
|
5
|
+
* squash-merged to `main` via `single-story-close.js`), this phase removes
|
|
5
6
|
* the per-Story worktree at `.worktrees/story-<id>/`. The reap is split
|
|
6
7
|
* into three concerns:
|
|
7
8
|
*
|
|
@@ -376,7 +377,7 @@ function applyStillRegisteredState({
|
|
|
376
377
|
try {
|
|
377
378
|
manifestEntry = recordPendingCleanupFn(worktreeRoot, {
|
|
378
379
|
storyId: Number(storyId),
|
|
379
|
-
branch: getStoryBranch(
|
|
380
|
+
branch: getStoryBranch(storyId),
|
|
380
381
|
path: stillRegistered.path,
|
|
381
382
|
push: false,
|
|
382
383
|
});
|
|
@@ -1,47 +1,37 @@
|
|
|
1
1
|
// .agents/scripts/lib/orchestration/pr-base-guard.js
|
|
2
2
|
/**
|
|
3
|
-
* pr-base-guard.js — refuse to open a pull request
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* Background: Story #2960 — during Epic #2880 wave 5 a sub-agent fell
|
|
8
|
-
* back to `gh pr create --base main` after `story-close.js`
|
|
9
|
-
* short-circuited as a no-op. The orphaned PR forced a manual recovery
|
|
10
|
-
* (`git merge origin/main` back into `epic/2880`). This module is the
|
|
11
|
-
* defence-in-depth call any framework helper that triggers `gh pr create`
|
|
12
|
-
* MUST invoke before shelling out.
|
|
13
|
-
*
|
|
14
|
-
* Scope: the guard fires only when the Story body declares an
|
|
15
|
-
* `Epic: #N` (or `Parent: #N`) reference. Stand-alone Stories — the
|
|
16
|
-
* `/single-story-deliver` surface — are unaffected because they have no
|
|
17
|
-
* parent reference to detect.
|
|
3
|
+
* pr-base-guard.js — refuse to open a pull request for a Story that still
|
|
4
|
+
* carries an Epic/parent footer (pre-v2 hierarchy). v2 Stories are
|
|
5
|
+
* standalone; Epic-attached bodies are a forward-cutover refusal, not a
|
|
6
|
+
* redirect onto `epic/<N>`.
|
|
18
7
|
*/
|
|
19
8
|
|
|
20
9
|
import { resolveStoryHierarchy } from '../story-lifecycle.js';
|
|
21
10
|
|
|
22
11
|
/**
|
|
23
|
-
* Inspect a Story's body for an Epic
|
|
24
|
-
*
|
|
12
|
+
* Inspect a Story's body for an Epic/parent reference and refuse any PR
|
|
13
|
+
* when one is present. Callers must re-plan Epic-attached tickets as v2
|
|
14
|
+
* Stories before delivering.
|
|
25
15
|
*
|
|
26
16
|
* @param {object} args
|
|
27
17
|
* @param {number} args.storyId — Story ticket id (used in the error
|
|
28
18
|
* message so the operator can grep the failing surface).
|
|
29
19
|
* @param {string|null|undefined} args.storyBody — raw Story body markdown.
|
|
30
|
-
* When falsy, the guard short-circuits (no
|
|
31
|
-
* @param {string} args.baseBranch —
|
|
32
|
-
*
|
|
33
|
-
* @throws {Error} when the Story
|
|
34
|
-
* the parent Epic's branch. The message matches the AC verbatim so
|
|
35
|
-
* reviewers can grep it.
|
|
20
|
+
* When falsy, the guard short-circuits (no body → nothing to enforce).
|
|
21
|
+
* @param {string} args.baseBranch — retained for call-site compatibility;
|
|
22
|
+
* unused once an Epic/parent footer is detected (any base is refused).
|
|
23
|
+
* @throws {Error} when the Story body declares an Epic or Parent footer.
|
|
36
24
|
*/
|
|
37
|
-
export function assertStoryPrBaseAllowed({
|
|
25
|
+
export function assertStoryPrBaseAllowed({
|
|
26
|
+
storyId,
|
|
27
|
+
storyBody,
|
|
28
|
+
baseBranch: _baseBranch,
|
|
29
|
+
}) {
|
|
38
30
|
if (!storyBody) return;
|
|
39
31
|
const { epicId } = resolveStoryHierarchy(storyBody);
|
|
40
32
|
if (epicId == null) return;
|
|
41
|
-
const expected = `epic/${epicId}`;
|
|
42
|
-
if (baseBranch === expected) return;
|
|
43
33
|
throw new Error(
|
|
44
|
-
`Story #${storyId}
|
|
45
|
-
'
|
|
34
|
+
`Story #${storyId} still declares Epic/Parent #${epicId}. ` +
|
|
35
|
+
'v2 delivery is Story-only — re-plan as a standalone Story (no Epic footer) before opening a PR.',
|
|
46
36
|
);
|
|
47
37
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* preflight-cache.js — Epic #3019 / Story #3027.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* `epic-deliver-preflight.js`
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* Legacy cache adapter for the snapshot/DAG envelope the deleted
|
|
5
|
+
* `epic-deliver-preflight.js` / `epic-deliver-prepare.js` pair produced
|
|
6
|
+
* (pre-v2 Epic `/deliver`). Retained so fingerprint helpers and tests stay
|
|
7
|
+
* stable; no live v2 entry seam reads or writes this cache.
|
|
8
8
|
*
|
|
9
9
|
* Contract:
|
|
10
10
|
* - Cache file lives at `<cwd>/temp/epic-<epicId>/preflight-snapshot.json`.
|
|
@@ -107,7 +107,7 @@ export function computeBaseSha(epic, stories = []) {
|
|
|
107
107
|
* miss and fall back to a fresh snapshot/DAG pass.
|
|
108
108
|
*
|
|
109
109
|
* The function intentionally swallows `ENOENT` and JSON-parse errors so
|
|
110
|
-
* a stale or partially-written file does not poison
|
|
110
|
+
* a stale or partially-written file does not poison legacy Epic prepare callers.
|
|
111
111
|
*
|
|
112
112
|
* @param {{ epicId: number, cwd?: string }} args
|
|
113
113
|
* @returns {Promise<object | null>}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* the delivery inline and committing to local `main` without pushing —
|
|
8
8
|
* when the driving agent *perceived* the environment had no live GitHub
|
|
9
9
|
* remote. The judgment was vibes, not fact. This module gives the entry
|
|
10
|
-
* seams (`
|
|
10
|
+
* seams (`single-story-init.js` for v2 `/deliver`) a verified
|
|
11
11
|
* probe result to record in their envelopes so the workflow can branch on
|
|
12
12
|
* `remoteVerified: true|false` deterministically: use the remote, or
|
|
13
13
|
* transition to `agent::blocked` quoting the probe output — never a
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure helpers for resolve-plan-run.js — keep the CLI entry thin so new-file
|
|
3
|
+
* CRAP stays under the quality-preview ceiling.
|
|
4
|
+
*
|
|
5
|
+
* @module lib/orchestration/resolve-plan-run
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { TYPE_LABELS } from '../label-constants.js';
|
|
9
|
+
import { buildStoryAdjacency } from '../story-adjacency.js';
|
|
10
|
+
import {
|
|
11
|
+
normalizePlanRunId,
|
|
12
|
+
PLAN_RUN_LABEL_PREFIX,
|
|
13
|
+
} from './plan-persist/story-ops.js';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Normalize a plan-run id into the canonical label `plan-run::<token>`.
|
|
17
|
+
*
|
|
18
|
+
* @param {string} raw
|
|
19
|
+
* @returns {string}
|
|
20
|
+
*/
|
|
21
|
+
export function normalizePlanRunLabel(raw) {
|
|
22
|
+
const token = normalizePlanRunId(raw);
|
|
23
|
+
return `${PLAN_RUN_LABEL_PREFIX}${token}`;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Extract a bare plan-run id from a label or raw token.
|
|
28
|
+
*
|
|
29
|
+
* @param {string} label
|
|
30
|
+
* @returns {string}
|
|
31
|
+
*/
|
|
32
|
+
export function planRunIdFromLabel(label) {
|
|
33
|
+
return String(label ?? '')
|
|
34
|
+
.trim()
|
|
35
|
+
.replace(new RegExp(`^${PLAN_RUN_LABEL_PREFIX}`), '');
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* @param {object} issue
|
|
40
|
+
* @returns {string[]}
|
|
41
|
+
*/
|
|
42
|
+
export function normalizeIssueLabels(issue) {
|
|
43
|
+
const raw = issue?.labels;
|
|
44
|
+
if (!Array.isArray(raw)) return [];
|
|
45
|
+
return raw
|
|
46
|
+
.map((l) => (typeof l === 'string' ? l : l?.name))
|
|
47
|
+
.filter((n) => typeof n === 'string' && n.length > 0);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* @param {object} issue
|
|
52
|
+
* @returns {{ id: number, title: string, body: string, url: string|null, labels: string[], state: string }|null}
|
|
53
|
+
*/
|
|
54
|
+
export function toStoryRecord(issue) {
|
|
55
|
+
const id = Number(issue?.number ?? issue?.id);
|
|
56
|
+
if (!Number.isInteger(id) || id <= 0) return null;
|
|
57
|
+
const labels = normalizeIssueLabels(issue);
|
|
58
|
+
if (!labels.includes(TYPE_LABELS.STORY)) return null;
|
|
59
|
+
return {
|
|
60
|
+
id,
|
|
61
|
+
title: String(issue?.title ?? ''),
|
|
62
|
+
body: String(issue?.body ?? ''),
|
|
63
|
+
url: issue?.html_url ?? issue?.url ?? null,
|
|
64
|
+
labels,
|
|
65
|
+
state: String(issue?.state ?? 'open').toLowerCase(),
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* @param {object[]} stories
|
|
71
|
+
* @returns {{ id: number, dependsOn: number[] }[]}
|
|
72
|
+
*/
|
|
73
|
+
export function storiesToDag(stories) {
|
|
74
|
+
const adjacency = buildStoryAdjacency(stories, { dropForeign: false });
|
|
75
|
+
return stories.map((s) => ({
|
|
76
|
+
id: s.id,
|
|
77
|
+
dependsOn: adjacency.get(s.id) ?? [],
|
|
78
|
+
}));
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Map provider issues into the deliver-router story list + DAG nodes.
|
|
83
|
+
*
|
|
84
|
+
* @param {object[]} issues
|
|
85
|
+
* @param {{ planRunId: string, planRunLabel: string }} meta
|
|
86
|
+
* @returns {{ kind: string, planRunId: string, planRunLabel: string, stories: object[], dag: object[] }}
|
|
87
|
+
*/
|
|
88
|
+
export function buildPlanRunEnvelope(issues, { planRunId, planRunLabel }) {
|
|
89
|
+
const stories = (Array.isArray(issues) ? issues : [])
|
|
90
|
+
.map(toStoryRecord)
|
|
91
|
+
.filter(Boolean)
|
|
92
|
+
.sort((a, b) => a.id - b.id);
|
|
93
|
+
|
|
94
|
+
return {
|
|
95
|
+
kind: 'plan-run',
|
|
96
|
+
planRunId,
|
|
97
|
+
planRunLabel,
|
|
98
|
+
stories: stories.map(({ id, title, url, labels, state }) => ({
|
|
99
|
+
id,
|
|
100
|
+
title,
|
|
101
|
+
url,
|
|
102
|
+
labels,
|
|
103
|
+
state,
|
|
104
|
+
})),
|
|
105
|
+
dag: storiesToDag(stories),
|
|
106
|
+
done: stories
|
|
107
|
+
.filter(
|
|
108
|
+
(story) =>
|
|
109
|
+
story.state === 'closed' || story.labels.includes('agent::done'),
|
|
110
|
+
)
|
|
111
|
+
.map((story) => story.id),
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Pure core used by tests: given issues + meta, build the envelope.
|
|
117
|
+
*
|
|
118
|
+
* @param {{ run: string, issues: object[] }} args
|
|
119
|
+
* @returns {ReturnType<typeof buildPlanRunEnvelope>}
|
|
120
|
+
*/
|
|
121
|
+
export function resolvePlanRunFromIssues({ run, issues }) {
|
|
122
|
+
const planRunLabel = normalizePlanRunLabel(run);
|
|
123
|
+
const planRunId = planRunIdFromLabel(planRunLabel);
|
|
124
|
+
return buildPlanRunEnvelope(issues, { planRunId, planRunLabel });
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Fetch issues for a plan-run label via the ticketing provider.
|
|
129
|
+
*
|
|
130
|
+
* @param {object} provider
|
|
131
|
+
* @param {{ planRunLabel: string, state: string }} args
|
|
132
|
+
* @returns {Promise<object[]>}
|
|
133
|
+
*/
|
|
134
|
+
export async function fetchPlanRunIssues(provider, { planRunLabel, state }) {
|
|
135
|
+
if (typeof provider?.listIssuesByLabel !== 'function') {
|
|
136
|
+
throw new Error('resolve-plan-run: provider.listIssuesByLabel is required');
|
|
137
|
+
}
|
|
138
|
+
const labels = `${planRunLabel},${TYPE_LABELS.STORY}`;
|
|
139
|
+
const issues = await provider.listIssuesByLabel({ state, labels });
|
|
140
|
+
return Array.isArray(issues) ? issues : [];
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* @param {string|undefined} state
|
|
145
|
+
* @returns {string}
|
|
146
|
+
*/
|
|
147
|
+
export function assertIssueState(state) {
|
|
148
|
+
const value = state ?? 'open';
|
|
149
|
+
if (!['open', 'closed', 'all'].includes(value)) {
|
|
150
|
+
throw new Error(
|
|
151
|
+
`resolve-plan-run: --state must be open|closed|all (got ${value})`,
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
return value;
|
|
155
|
+
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* resolves-token.js — single source of truth for the `(resolves #N)`
|
|
3
3
|
* Story-merge integration marker.
|
|
4
4
|
*
|
|
5
|
-
* Background. `story-close.js`
|
|
5
|
+
* Background. The deleted `story-close.js` integrated each Story branch into its
|
|
6
6
|
* parent Epic branch with `git merge --no-ff` and a Conventional-Commit
|
|
7
7
|
* subject that carries a ` (resolves #<storyId>)` trailer. That trailer is
|
|
8
8
|
* the *durable* proof a Story landed on `epic/<id>`: the local/remote
|
|
@@ -26,23 +26,23 @@
|
|
|
26
26
|
* the renderer can attribute the run-length back to the deliver-runner
|
|
27
27
|
* concurrency cap.
|
|
28
28
|
*
|
|
29
|
-
* Threshold contract (
|
|
29
|
+
* Threshold contract (code constants only — not operator-tunable via
|
|
30
|
+
* `.agentrc.json`; the former `delivery.retro.perfThresholds` key was
|
|
31
|
+
* retired):
|
|
30
32
|
*
|
|
31
33
|
* - `utilisation`: number in [0, 1]. Default 0.6.
|
|
32
34
|
* - `bootstrapShare`: number in [0, 1]. Default 0.4.
|
|
33
35
|
* - `capBindingRunLength`: positive integer. Default 2.
|
|
34
36
|
*
|
|
35
37
|
* The function is total: it never throws on malformed input. A missing or
|
|
36
|
-
* malformed `report` returns `[]`. A missing `thresholds` falls back to
|
|
37
|
-
*
|
|
38
|
+
* malformed `report` returns `[]`. A missing `thresholds` falls back to
|
|
39
|
+
* `DEFAULT_RETRO_PERF_THRESHOLDS` below.
|
|
38
40
|
*/
|
|
39
41
|
|
|
40
42
|
/**
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
* `lib/config/runners.js` (or wherever the resolver default lives) and the
|
|
45
|
-
* `agentrc.schema.json` defaults stanza.
|
|
43
|
+
* Framework-fixed defaults for `classifyPerfSignals`. Callers (and tests)
|
|
44
|
+
* can omit `thresholds` and get these values. Not sourced from agentrc —
|
|
45
|
+
* edit this constant (and keep tests in lockstep) to change the gates.
|
|
46
46
|
*/
|
|
47
47
|
export const DEFAULT_RETRO_PERF_THRESHOLDS = Object.freeze({
|
|
48
48
|
utilisation: 0.6,
|