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
|
@@ -11,14 +11,9 @@ import {
|
|
|
11
11
|
} from './ticket-validator-conflicts.js';
|
|
12
12
|
import {
|
|
13
13
|
computeSizingFindings,
|
|
14
|
-
DEFAULT_TASK_SIZING,
|
|
15
14
|
renderHardFindingError,
|
|
16
15
|
} from './ticket-validator-sizing.js';
|
|
17
16
|
|
|
18
|
-
// Re-exported for callers that want the constants without reaching into the
|
|
19
|
-
// sizing helper module directly.
|
|
20
|
-
export { DEFAULT_TASK_SIZING };
|
|
21
|
-
|
|
22
17
|
/**
|
|
23
18
|
* Regex matching code-asset paths the freshness gate cares about. The three
|
|
24
19
|
* roots — `.agents/scripts`, `lib`, and `tests` — cover the executable surface
|
|
@@ -272,7 +267,7 @@ export function validateAcFreshness({
|
|
|
272
267
|
* Epic #2501 introduced this guard after the legacy `baseline-refresh`
|
|
273
268
|
* leading-token prescription created a wave of commit-msg hook failures
|
|
274
269
|
* across story-deliver sub-agents. See
|
|
275
|
-
* `.agents/skills/core/
|
|
270
|
+
* `.agents/skills/core/gates-and-baselines/SKILL.md` for the canonical refresh
|
|
276
271
|
* shape (Conventional-Commits subject + `baseline-refresh: true` body
|
|
277
272
|
* trailer).
|
|
278
273
|
*/
|
|
@@ -399,7 +394,7 @@ function renderMissLine({ slug, path }) {
|
|
|
399
394
|
* @param {string} [opts.baseBranchRef] - When set, runs `validateAcFreshness` against this ref.
|
|
400
395
|
* @param {Function} [opts.gitRunner] - Optional git probe override.
|
|
401
396
|
* @param {string} [opts.cwd] - Repo cwd (forwarded to the freshness gate).
|
|
402
|
-
* @param {object} [opts.
|
|
397
|
+
* @param {object} [opts.modelCapacity] - Programmatic override of `DEFAULT_MODEL_CAPACITY` (tests only — not read from `.agentrc.json`).
|
|
403
398
|
* @param {object} [opts.conflictPolicy] - Severity controls for cross-Story conflict findings.
|
|
404
399
|
* @param {boolean} [opts.conflictPolicy.failOnSharedEditors=false] - Upgrade `shared-editor` findings to `hard`.
|
|
405
400
|
* @param {boolean} [opts.conflictPolicy.requireExplicitCrossStoryDeps=false] - Upgrade `implicit-cross-story-dep` findings to `hard`.
|
|
@@ -614,7 +609,7 @@ export function validateAndNormalizeTickets(tickets, opts = {}) {
|
|
|
614
609
|
|
|
615
610
|
const sizingFindings = computeSizingFindings({
|
|
616
611
|
stories,
|
|
617
|
-
|
|
612
|
+
capacity: opts.modelCapacity,
|
|
618
613
|
});
|
|
619
614
|
// Cross-Story path-conflict pass observes the story-level depends_on
|
|
620
615
|
// graph. Findings are appended to the same `findings` array consumed by
|
|
@@ -20,7 +20,6 @@
|
|
|
20
20
|
*/
|
|
21
21
|
|
|
22
22
|
import { Logger } from '../../Logger.js';
|
|
23
|
-
import { TYPE_LABELS } from '../../label-constants.js';
|
|
24
23
|
import { ALL_STATES, STATE_LABELS } from './reads.js';
|
|
25
24
|
import {
|
|
26
25
|
postStructuredComment,
|
|
@@ -290,30 +289,6 @@ async function processCascadeParentLocked(
|
|
|
290
289
|
);
|
|
291
290
|
if (!allDone) return { cascadedTo, failed };
|
|
292
291
|
|
|
293
|
-
// EXCLUSION: Epics do not auto-close via cascade. Epics close via
|
|
294
|
-
// formal /deliver (its own machinery handles branch merges,
|
|
295
|
-
// PR-driven `Closes #N` auto-close, and a recovery transition in
|
|
296
|
-
// `epic-deliver-finalize.js`).
|
|
297
|
-
//
|
|
298
|
-
// Legacy planning tickets (pre-#4324 `context::*` artifacts on
|
|
299
|
-
// historical Epics) DO close via cascade (Story #1951): leaving
|
|
300
|
-
// them open as native sub-issues of the Epic blocks GitHub from
|
|
301
|
-
// honoring the Epic's `Closes #N` footer. New Epics carry their
|
|
302
|
-
// planning content on the Epic body itself, so this branch is
|
|
303
|
-
// purely a legacy-hygiene path.
|
|
304
|
-
//
|
|
305
|
-
// Reuse the parentSnapshot from the idempotency check above — it is
|
|
306
|
-
// a fresh read (cache was invalidated before the getTicket call) and
|
|
307
|
-
// the parent's type label is invariant within a single cascade lock
|
|
308
|
-
// hold, so a second getTicket is wasteful and redundant.
|
|
309
|
-
const isEpic = parentSnapshot.labels.includes(TYPE_LABELS.EPIC);
|
|
310
|
-
if (isEpic) {
|
|
311
|
-
logger.warn(
|
|
312
|
-
`[Ticketing] Cascade reached Epic #${parentId}. Skipping auto-close (Epics close via the operator's PR merge).`,
|
|
313
|
-
);
|
|
314
|
-
return { cascadedTo, failed };
|
|
315
|
-
}
|
|
316
|
-
|
|
317
292
|
// Retry the parent transition on transient `gh` failures (rate limit,
|
|
318
293
|
// 5xx, transport timeouts). Permanent failures fall through to the
|
|
319
294
|
// outer catch on the first attempt so the operator sees the real
|
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
14
|
import { AGENT_LABELS } from '../../label-constants.js';
|
|
15
|
-
|
|
15
|
+
|
|
16
|
+
const WAVE_MARKER_RE = /^wave-([0-9]{1,3})-(start|end)$/;
|
|
16
17
|
|
|
17
18
|
/**
|
|
18
19
|
* Canonical agent-state label triad used by every state mutator. Kept on
|
|
@@ -23,7 +24,7 @@ export const STATE_LABELS = {
|
|
|
23
24
|
READY: AGENT_LABELS.READY,
|
|
24
25
|
EXECUTING: AGENT_LABELS.EXECUTING,
|
|
25
26
|
// Story #2144 — intermediate state held by a Story between successful
|
|
26
|
-
// close-preflight and a confirmed merge into `
|
|
27
|
+
// close-preflight and a confirmed Story PR merge into `main`. Included in
|
|
27
28
|
// the state enum so `transitionTicketState` can apply the label via
|
|
28
29
|
// the canonical one-state-at-a-time path (which removes every other
|
|
29
30
|
// `agent::*` label in the same call) and so the read-side `ALL_STATES`
|
|
@@ -72,13 +73,17 @@ export const STRUCTURED_COMMENT_TYPES = Object.freeze([
|
|
|
72
73
|
'verification-results',
|
|
73
74
|
'retro',
|
|
74
75
|
'retro-partial',
|
|
76
|
+
// v2 Story closeout — actionable follow-ups from friction signals
|
|
77
|
+
'follow-ups',
|
|
78
|
+
// v2 plan-run epilogue artifacts (posted on the primary Story)
|
|
79
|
+
'plan-run-audit-roster',
|
|
80
|
+
'plan-run-sibling-coherence',
|
|
75
81
|
'epic-run-state',
|
|
76
82
|
'epic-run-progress',
|
|
77
83
|
'epic-plan-state',
|
|
78
84
|
'parked-follow-ons',
|
|
79
|
-
|
|
80
|
-
//
|
|
81
|
-
// and consumed by the epic-runner progress reporter to surface median /
|
|
85
|
+
// Story #566 — per-phase wall-clock summary posted by single-story-close.js
|
|
86
|
+
// and consumed by analyze-execution / perf tooling to surface median /
|
|
82
87
|
// p95 phase timings across completed stories.
|
|
83
88
|
'phase-timings',
|
|
84
89
|
// Story #831 — story-init upserts a `story-init` comment that
|
|
@@ -88,7 +93,7 @@ export const STRUCTURED_COMMENT_TYPES = Object.freeze([
|
|
|
88
93
|
'story-init',
|
|
89
94
|
// Story #908 — /deliver upserts a `story-run-progress` snapshot
|
|
90
95
|
// on each Story per Task transition. The /deliver aggregator and
|
|
91
|
-
//
|
|
96
|
+
// `analyze-execution.js` both read this comment to derive
|
|
92
97
|
// Story-level state without re-fetching ticket labels.
|
|
93
98
|
'story-run-progress',
|
|
94
99
|
// Story #1123 — analyze-execution.js upserts perf summaries at close
|
|
@@ -98,9 +103,8 @@ export const STRUCTURED_COMMENT_TYPES = Object.freeze([
|
|
|
98
103
|
// surface (Epic #1030).
|
|
99
104
|
'story-perf-summary',
|
|
100
105
|
'epic-perf-report',
|
|
101
|
-
// Story #2128 — Phase 6 Epic Clarity Gate
|
|
102
|
-
//
|
|
103
|
-
// a sharpened body rewrite, recording the persistence event for audit.
|
|
106
|
+
// Story #2128 — Phase 6 Epic Clarity Gate (CLI retired). Historical
|
|
107
|
+
// `clarity-gate-update` comments may still exist on older tickets.
|
|
104
108
|
'clarity-gate-update',
|
|
105
109
|
// Story #2635 — Tech Spec freshness check. `plan-persist.js`
|
|
106
110
|
// upserts a `spec-freshness` comment on the Epic listing any
|
|
@@ -126,24 +130,24 @@ export const STRUCTURED_COMMENT_TYPES = Object.freeze([
|
|
|
126
130
|
// ticket. Re-invocations upsert the same marker rather than appending
|
|
127
131
|
// duplicates.
|
|
128
132
|
'epic-handoff',
|
|
129
|
-
// Story #2899 (Epic #2880, F13) — `epic-deliver-preflight.js`
|
|
130
|
-
// `delivery-preflight` comment on the Epic at the start of
|
|
131
|
-
//
|
|
133
|
+
// Story #2899 (Epic #2880, F13) — the deleted `epic-deliver-preflight.js`
|
|
134
|
+
// upserted a `delivery-preflight` comment on the Epic at the start of
|
|
135
|
+
// pre-v2 Epic `/deliver` Phase 1, surfacing estimated story count, install cost,
|
|
132
136
|
// wave count, GitHub API request volume, Claude quota burn, and any
|
|
133
137
|
// threshold breaches against `delivery.preflight.max*`. One entry per
|
|
134
138
|
// Epic; re-runs replace prior content.
|
|
135
139
|
'delivery-preflight',
|
|
136
|
-
// Story #3062 (Epic #3051) — `wave-tick.js`
|
|
140
|
+
// Story #3062 (Epic #3051) — the deleted `wave-tick.js` upserted a
|
|
137
141
|
// `recurring-failure-class` comment on the Epic when the cross-Story
|
|
138
142
|
// detector finds two or more Stories that hit the same `failedGate` in
|
|
139
143
|
// `close-validate.end`. One entry per Epic; re-ticks with the same
|
|
140
144
|
// findings upsert in place (`upsertStructuredComment` diffs by body).
|
|
141
145
|
'recurring-failure-class',
|
|
142
|
-
// Story #3061 (Epic #3051) — the
|
|
143
|
-
//
|
|
144
|
-
//
|
|
145
|
-
//
|
|
146
|
-
//
|
|
146
|
+
// Story #3061 (Epic #3051) — the pre-v2 `/deliver` idle-watchdog prose
|
|
147
|
+
// instructed the parent host LLM to upsert a `wave-stall` comment on the
|
|
148
|
+
// Epic whenever an in-flight Story had been silent for longer than the
|
|
149
|
+
// configured cadence. The deleted `wave-tick.js --check-idle` CLI emitted
|
|
150
|
+
// the matching envelope; registering the kind here keeps historical
|
|
147
151
|
// the documented remediation actually executable
|
|
148
152
|
// (assertValidStructuredCommentType would otherwise throw).
|
|
149
153
|
'wave-stall',
|
|
@@ -171,15 +175,14 @@ export const STRUCTURED_COMMENT_TYPES = Object.freeze([
|
|
|
171
175
|
// `graduator="audit-results|code-review"` attr so the two graduators
|
|
172
176
|
// upsert independent comments; re-runs upsert in place.
|
|
173
177
|
'cross-repo-deferred',
|
|
174
|
-
// Epic #4474 (PR3) — `plan-persist.js` upserts a single
|
|
175
|
-
// comment on the
|
|
176
|
-
//
|
|
177
|
-
//
|
|
178
|
-
// comment (whose claimed consumer did not exist — the live manifest is
|
|
179
|
-
// written at deliver time by `wave-record-io.js`) and the Phase 12
|
|
180
|
-
// notify round-trip. One entry per Epic; a --force/--resume re-persist
|
|
181
|
-
// upserts in place.
|
|
178
|
+
// Epic #4474 (PR3) / v2 Stage 3 — `plan-persist.js` upserts a single
|
|
179
|
+
// `plan-summary` comment on the primary Story at terminal persist
|
|
180
|
+
// success, carrying risk / routing receipts and the depends_on order
|
|
181
|
+
// table. One entry per plan; a re-persist upserts in place.
|
|
182
182
|
'plan-summary',
|
|
183
|
+
// v2 Stage 3 — flat Story persist checkpoint on every created Story
|
|
184
|
+
// (replaces epic-plan-state for new plans). plan-summary stays primary-only.
|
|
185
|
+
'story-plan-state',
|
|
183
186
|
]);
|
|
184
187
|
|
|
185
188
|
export const WAVE_TYPE_PATTERN = WAVE_MARKER_RE;
|
|
@@ -145,11 +145,11 @@ async function loadTicketSnapshot(provider, opts, ticketId) {
|
|
|
145
145
|
/**
|
|
146
146
|
* Mirror the post-flip label set onto the GitHub Projects v2 Status
|
|
147
147
|
* column. Story #2548 — wiring this here makes every caller of
|
|
148
|
-
* `transitionTicketState` (story-init
|
|
149
|
-
* the LabelTransitioner lifecycle listener, the
|
|
150
|
-
* batch transitions) update the board automatically.
|
|
151
|
-
* sync was only wired from the epic-runner against
|
|
152
|
-
* Stories and Tasks never had their `agent::executing` /
|
|
148
|
+
* `transitionTicketState` (`single-story-init.js`, `single-story-close.js`,
|
|
149
|
+
* `story-phase.js`, the LabelTransitioner lifecycle listener, the
|
|
150
|
+
* update-ticket-state CLI, batch transitions) update the board automatically.
|
|
151
|
+
* Prior to #2548 the sync was only wired from the deleted epic-runner against
|
|
152
|
+
* the Epic ticket, so Stories and Tasks never had their `agent::executing` /
|
|
153
153
|
* `agent::blocked` flips reflected on the board.
|
|
154
154
|
*
|
|
155
155
|
* Best-effort: a project-board misconfig, missing scope, or transient
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* planning-corpus.js — corpus-aware context for the standalone-Story
|
|
3
3
|
* planning path (Story #4432).
|
|
4
4
|
*
|
|
5
|
-
* `/plan --
|
|
5
|
+
* `/plan --seed` previously drafted a standalone Story from a blank
|
|
6
6
|
* slate: the seed, the body template, and a title-only duplicate scan.
|
|
7
7
|
* For a change request that is really a small delta against an
|
|
8
8
|
* already-delivered surface, that blank slate throws away context the
|
|
@@ -22,11 +22,10 @@
|
|
|
22
22
|
* with the seed, so the draft can build on prior art instead of
|
|
23
23
|
* re-deriving it.
|
|
24
24
|
*
|
|
25
|
-
* The Epic list surface (`provider.getEpics`)
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* silent assumption that the list response carries prose to score
|
|
25
|
+
* The historical Epic list surface (`provider.getEpics`) returns a
|
|
26
|
+
* list-scale payload with no `body`. Body content therefore requires an
|
|
27
|
+
* **explicit**, bounded per-candidate fetch via `provider.getEpic(id)` —
|
|
28
|
+
* never a silent assumption that the list response carries prose to score
|
|
30
29
|
* against.
|
|
31
30
|
*
|
|
32
31
|
* Relevance scoring reuses the same `tokenize` / `overlapScore` Jaccard
|
|
@@ -36,9 +35,12 @@
|
|
|
36
35
|
*/
|
|
37
36
|
|
|
38
37
|
import { overlapScore, tokenize } from './duplicate-search.js';
|
|
39
|
-
import { extractEpicSection, hasEpicSection } from './epic-body-sections.js';
|
|
40
38
|
import { Logger } from './Logger.js';
|
|
41
39
|
import { buildDocsDigest } from './orchestration/docs-digest.js';
|
|
40
|
+
import {
|
|
41
|
+
extractTicketSection,
|
|
42
|
+
hasTicketSection,
|
|
43
|
+
} from './ticket-body-sections.js';
|
|
42
44
|
|
|
43
45
|
/** Top-K Epics kept after the cheap title-only ranking pass. */
|
|
44
46
|
const DEFAULT_CORPUS_MAX_CANDIDATES = 5;
|
|
@@ -71,8 +73,8 @@ const CORPUS_EPICS_PAGE_CAP = 5;
|
|
|
71
73
|
|
|
72
74
|
/**
|
|
73
75
|
* Rank open Epics by title-overlap with the seed. This is the cheap
|
|
74
|
-
* first pass over the list surface (title only — `
|
|
75
|
-
*
|
|
76
|
+
* first pass over the list surface (title only — no `body`), used solely
|
|
77
|
+
* to pick the bounded top-K candidates
|
|
76
78
|
* worth an explicit body fetch. It is not the final relevance signal;
|
|
77
79
|
* `extractRelevantSections` re-scores against actual section content.
|
|
78
80
|
*
|
|
@@ -179,8 +181,11 @@ export async function fetchCandidateBodies({
|
|
|
179
181
|
* @returns {{ kind:'techSpec'|'lede', content:string }}
|
|
180
182
|
*/
|
|
181
183
|
function extractScoreableExcerpt(body) {
|
|
182
|
-
if (
|
|
183
|
-
return {
|
|
184
|
+
if (hasTicketSection(body, 'techSpec')) {
|
|
185
|
+
return {
|
|
186
|
+
kind: 'techSpec',
|
|
187
|
+
content: extractTicketSection(body, 'techSpec'),
|
|
188
|
+
};
|
|
184
189
|
}
|
|
185
190
|
const lede = (body ?? '').split(/^##\s+/m)[0].trim();
|
|
186
191
|
return { kind: 'lede', content: lede };
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* This module is the single implementation of the "run the registry, fail
|
|
5
5
|
* fast on blockers, log auto-fixes" pattern. The consumer entry points
|
|
6
|
-
* (story-close.js
|
|
6
|
+
* (`single-story-close.js`, `mandrel-update-preflight.js`, the npm test wrapper, and
|
|
7
7
|
* the bootstrap scripts) call `runPreflight({ scope })` instead of
|
|
8
8
|
* re-implementing the same assemble+run+format+exit-2 dance.
|
|
9
9
|
*
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* auto-fixes. The wrapper prints a human-readable blocker table
|
|
14
14
|
* (`id · summary · fixCommand`) before returning. Code 2 is the
|
|
15
15
|
* project-wide "preflight refused" reservation — see
|
|
16
|
-
*
|
|
16
|
+
* `.agents/workflows/helpers/deliver-story.md` for the rationale.
|
|
17
17
|
*
|
|
18
18
|
* Auto-fixes are logged via `logFixes` before the blocker check so the
|
|
19
19
|
* operator sees the "we corrected X" line even when a separate blocker
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Accepts the canonical resolved config object (the wrapper returned by
|
|
5
5
|
* `resolveConfig()` with `config.github` populated). The legacy
|
|
6
6
|
* `orchestration`-shaped argument is no longer supported as part of the
|
|
7
|
-
* Epic #2880 hard cutover; see `.agents/rules/git-conventions.md#contract-cutovers-—-no-shim-layer`.
|
|
7
|
+
* Epic #2880 hard cutover; see `.agents/rules/git-conventions-reference.md#contract-cutovers-—-no-shim-layer`.
|
|
8
8
|
*
|
|
9
9
|
* @see docs/v5-implementation-plan.md Sprint 1B
|
|
10
10
|
*/
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
// `.agents/rules/testing-standards.md` (unit / contract / acceptance) are
|
|
10
10
|
// PRESENT, and which are ABSENT — and why.
|
|
11
11
|
//
|
|
12
|
-
// A scenario that is skipped does not exercise anything — a `@skip`
|
|
13
|
-
//
|
|
12
|
+
// A scenario that is skipped does not exercise anything — a `@skip`
|
|
13
|
+
// Gherkin tag (or a runner equivalent such as `it.skip` / `xit` /
|
|
14
14
|
// `describe.skip`, or a `skipped: true` descriptor field) means the test is
|
|
15
15
|
// inert at run time. This module therefore treats a skipped test as ABSENT
|
|
16
16
|
// for its tier: it never bumps a tier into `present`, because a tier whose
|
|
@@ -49,10 +49,10 @@ export const TIERS = Object.freeze(['unit', 'contract', 'acceptance']);
|
|
|
49
49
|
const PRESENT = 'present';
|
|
50
50
|
const ABSENT = 'absent';
|
|
51
51
|
|
|
52
|
-
/** True when `value` contains a `@skip`
|
|
52
|
+
/** True when `value` contains a `@skip` Gherkin-style tag. */
|
|
53
53
|
function hasSkipTag(value) {
|
|
54
54
|
if (typeof value !== 'string') return false;
|
|
55
|
-
return /(^|[\s,])@
|
|
55
|
+
return /(^|[\s,])@skip\b/i.test(value);
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
/** True when `value` contains a runner-level skip/pending marker. */
|
|
@@ -67,7 +67,7 @@ function hasRunnerSkipMarker(value) {
|
|
|
67
67
|
/**
|
|
68
68
|
* True when a test descriptor is marked skipped/pending and therefore must
|
|
69
69
|
* NOT count toward its tier. Recognizes:
|
|
70
|
-
* - a `@skip`
|
|
70
|
+
* - a `@skip` tag in a `tags` array or whitespace/comma string,
|
|
71
71
|
* - the same tags embedded in a path or descriptor `name`,
|
|
72
72
|
* - explicit boolean flags (`skipped`, `pending`),
|
|
73
73
|
* - runner skip markers in a path/name (`it.skip`, `xit`, `xdescribe`,
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* confirm-merge-follow-ups.js — post-land follow-up capture seam for
|
|
3
|
+
* `single-story-confirm-merge.js` (keeps the CLI entry under the MI ceiling).
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { captureFollowUpsAfterConfirm } from '../orchestration/story-follow-ups.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @param {object} args
|
|
10
|
+
* @param {object} args.confirmation
|
|
11
|
+
* @param {number} args.storyId
|
|
12
|
+
* @param {number|null} args.prNumber
|
|
13
|
+
* @param {object} args.provider
|
|
14
|
+
* @param {object} [args.config]
|
|
15
|
+
* @param {string} args.cwd
|
|
16
|
+
* @param {(tag: string, msg: string) => void} [args.progress]
|
|
17
|
+
* @returns {Promise<object>}
|
|
18
|
+
*/
|
|
19
|
+
export async function withConfirmFollowUps({
|
|
20
|
+
confirmation,
|
|
21
|
+
storyId,
|
|
22
|
+
prNumber,
|
|
23
|
+
provider,
|
|
24
|
+
config,
|
|
25
|
+
cwd,
|
|
26
|
+
progress,
|
|
27
|
+
}) {
|
|
28
|
+
const followUps = await captureFollowUpsAfterConfirm(confirmation, {
|
|
29
|
+
storyId,
|
|
30
|
+
provider,
|
|
31
|
+
config,
|
|
32
|
+
cwd,
|
|
33
|
+
progress,
|
|
34
|
+
});
|
|
35
|
+
return { standalone: true, prNumber, ...confirmation, followUps };
|
|
36
|
+
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Shared builder for the `evaluateProtection` context the boot-sweep
|
|
5
5
|
* engine ([`sweepMergedBranches`](../single-story-sweep.js)) threads into
|
|
6
6
|
* every candidate protection check. Single-homed here so the three boot
|
|
7
|
-
* callers — `single-story-init.js
|
|
7
|
+
* callers — `single-story-init.js` and the
|
|
8
8
|
* `boot-sweep.js` CLI — build an identical ctx instead of each re-wiring
|
|
9
9
|
* the git/gh/ticket ports.
|
|
10
10
|
*
|
|
@@ -1,27 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* lib/story-adjacency.js — the single story-level adjacency builder.
|
|
3
3
|
*
|
|
4
|
-
* Both
|
|
4
|
+
* Both pre-v2 Epic wave wrappers and the v2 `/deliver` ready-set path bottom out in the shared
|
|
5
5
|
* `lib/Graph.js` kernel (`detectCycle` / `assignLayers` / `computeWaves`),
|
|
6
6
|
* but each historically re-implemented the step that turns a list of Story
|
|
7
7
|
* records into the `Map<storyId, number[]>` adjacency the kernel consumes.
|
|
8
|
-
* This module is now the one home for that step; the
|
|
8
|
+
* This module is now the one home for that step; the live consumer is:
|
|
9
9
|
*
|
|
10
|
-
* - `lib/orchestration/epic-runner/phases/build-wave-dag.js`
|
|
11
|
-
* (`buildStoryDag` → `computeWaves`)
|
|
12
|
-
* - `lib/orchestration/dispatch-pipeline.js`
|
|
13
|
-
* (`buildStoryDispatchGraph` → `computeStoryWaves`)
|
|
14
10
|
* - `lib/wave-runner/ready-set.js` (`selectReadySet`, the path-agnostic
|
|
15
|
-
* continuous scheduler the
|
|
16
|
-
* and the Epic path both dispatch through)
|
|
11
|
+
* continuous scheduler the `stories-wave-tick.js` adapter dispatches through)
|
|
17
12
|
* - `stories-wave-tick.js` (for cycle detection, before delegating
|
|
18
13
|
* selection to `selectReadySet`)
|
|
19
14
|
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
15
|
+
* (Pre-v2: `epic-runner/phases/build-wave-dag.js` and `dispatch-pipeline.js`
|
|
16
|
+
* also called here; both entry seams were deleted.)
|
|
17
|
+
*
|
|
18
|
+
* Dependency source order (must stay aligned with `manifest-builder.js` and
|
|
19
|
+
* `helpers/deliver-story.md` so planning and runtime scheduling never disagree):
|
|
22
20
|
* 1. Canonical: `blocked by #NNN` / `depends on #NNN` parsed from the
|
|
23
|
-
* Story body via `parseBlockedBy` (the same parser
|
|
24
|
-
* uses).
|
|
21
|
+
* Story body via `parseBlockedBy` (the same parser planning uses).
|
|
25
22
|
* 2. Fallback: an explicit `dependencies` (ticket shape) or
|
|
26
23
|
* `dependsOn` (operator-DAG shape) array on the Story record.
|
|
27
24
|
*
|
|
@@ -46,9 +43,9 @@ import { parseBlockedBy } from './dependency-parser.js';
|
|
|
46
43
|
* DAG nodes).
|
|
47
44
|
* @param {object} [opts]
|
|
48
45
|
* @param {boolean} [opts.dropForeign=true] When true (the default,
|
|
49
|
-
* matching
|
|
46
|
+
* matching pre-v2 Epic-scoped wrappers), edges pointing at ids outside
|
|
50
47
|
* the supplied story set are dropped so the DAG stays closed over the
|
|
51
|
-
* scheduled set. The
|
|
48
|
+
* scheduled set. The v2 `/deliver` path (`stories-wave-tick.js` and the
|
|
52
49
|
* `selectReadySet` core) passes `false` to preserve the operator-DAG
|
|
53
50
|
* contract, where a dependency on an id absent from the input is treated
|
|
54
51
|
* as not-yet-done and withholds the dependent until it completes.
|