mandrel 1.94.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/README.md +59 -73
- package/.agents/agents/story-worker.md +12 -13
- package/.agents/docs/SDLC.md +489 -1285
- package/.agents/docs/agentrc-reference.json +177 -67
- package/.agents/docs/configuration.md +104 -138
- package/.agents/docs/execution-reference.md +17 -20
- package/.agents/docs/quality-gates.md +13 -19
- package/.agents/docs/workflows.md +3 -3
- package/.agents/instructions.md +70 -81
- package/.agents/rules/ci-remediation.md +8 -12
- package/.agents/rules/git-conventions-reference.md +6 -7
- package/.agents/rules/git-conventions.md +16 -22
- package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
- package/.agents/schemas/agentrc.schema.json +54 -214
- package/.agents/schemas/lifecycle/ledger-record.schema.json +1 -1
- package/.agents/schemas/lifecycle/retro.end.schema.json +1 -1
- package/.agents/schemas/risk-verdict.schema.json +0 -13
- package/.agents/scripts/analyze-execution.js +1 -1
- package/.agents/scripts/audit-to-stories.js +7 -7
- package/.agents/scripts/boot-sweep.js +1 -1
- package/.agents/scripts/check-lifecycle-lint.js +6 -9
- package/.agents/scripts/check-prepush-recovery.js +1 -1
- package/.agents/scripts/cleanup-repo-test-temp.js +6 -1
- package/.agents/scripts/lib/Logger.js +6 -10
- package/.agents/scripts/lib/audit-suite/runner.js +2 -2
- package/.agents/scripts/lib/audit-suite/selector.js +5 -5
- package/.agents/scripts/lib/audit-to-stories/{seed-epic-from-findings.js → seed-from-findings.js} +9 -9
- package/.agents/scripts/lib/baselines/kernel.js +206 -18
- package/.agents/scripts/lib/baselines/kinds/maintainability.js +0 -4
- package/.agents/scripts/lib/baselines/reader.js +1 -6
- package/.agents/scripts/lib/bdd-runner-detect.js +5 -9
- package/.agents/scripts/lib/bootstrap/issue-forms-template.js +32 -33
- package/.agents/scripts/lib/checks/core-bare-clean.js +2 -2
- package/.agents/scripts/lib/checks/index.js +2 -1
- package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +23 -21
- package/.agents/scripts/lib/cli/standard-args.js +13 -22
- package/.agents/scripts/lib/cli-args.js +16 -7
- package/.agents/scripts/lib/close-validation/gates.js +2 -2
- package/.agents/scripts/lib/config/ci.js +6 -31
- package/.agents/scripts/lib/config/delivery-routing.js +45 -29
- package/.agents/scripts/lib/config/explain.js +55 -36
- package/.agents/scripts/lib/config/limits.js +17 -58
- package/.agents/scripts/lib/config/paths.js +0 -2
- package/.agents/scripts/lib/config/quality.js +1 -1
- package/.agents/scripts/lib/config/runners.js +17 -50
- package/.agents/scripts/lib/config/temp-paths.js +19 -14
- package/.agents/scripts/lib/config/worktree-isolation.js +0 -5
- package/.agents/scripts/lib/config-resolver.js +2 -7
- package/.agents/scripts/lib/config-settings-schema-delivery.js +24 -148
- package/.agents/scripts/lib/config-settings-schema-quality.js +8 -14
- package/.agents/scripts/lib/config-settings-schema.js +52 -38
- package/.agents/scripts/lib/dependency-parser.js +3 -2
- package/.agents/scripts/lib/doc-tiers.js +2 -2
- package/.agents/scripts/lib/duplicate-search.js +211 -41
- package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +1 -1
- package/.agents/scripts/lib/findings/promote-finding.js +5 -5
- package/.agents/scripts/lib/framework-version.js +2 -3
- package/.agents/scripts/lib/git-branch-cleanup.js +1 -10
- package/.agents/scripts/lib/git-branch-lifecycle.js +17 -22
- package/.agents/scripts/lib/git-utils.js +32 -6
- package/.agents/scripts/lib/github/framework-repo.js +6 -0
- package/.agents/scripts/lib/label-constants.js +10 -23
- package/.agents/scripts/lib/label-taxonomy.js +9 -43
- package/.agents/scripts/lib/observability/active-story-env.js +1 -1
- package/.agents/scripts/lib/observability/hook-heartbeat.js +20 -52
- package/.agents/scripts/lib/observability/source-classifier.js +3 -3
- package/.agents/scripts/lib/onboard/init-tail.js +1 -3
- package/.agents/scripts/lib/orchestration/audit-lens-routing.js +128 -0
- package/.agents/scripts/lib/orchestration/bookkeeping-outbox.js +8 -5
- package/.agents/scripts/lib/orchestration/ceremony-routing.js +83 -20
- package/.agents/scripts/lib/orchestration/code-review.js +20 -268
- package/.agents/scripts/lib/orchestration/column-sync.js +1 -1
- package/.agents/scripts/lib/orchestration/consolidation-precondition.js +1 -1
- package/.agents/scripts/lib/orchestration/context-envelope.js +2 -5
- package/.agents/scripts/lib/orchestration/docs-digest.js +8 -8
- package/.agents/scripts/lib/orchestration/file-assumptions.js +7 -13
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +1 -1
- package/.agents/scripts/lib/orchestration/lifecycle/emit-loop-tick.js +8 -8
- package/.agents/scripts/lib/orchestration/lifecycle/emit-story-heartbeat.js +2 -2
- package/.agents/scripts/lib/orchestration/lifecycle/ledger-writer.js +6 -3
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/README.md +17 -43
- package/.agents/scripts/lib/orchestration/lint-baseline-service.js +4 -4
- package/.agents/scripts/lib/orchestration/merge-block-class.js +1 -1
- package/.agents/scripts/lib/orchestration/phase-runner.js +3 -2
- package/.agents/scripts/lib/orchestration/plan-context.js +248 -266
- package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +1 -1
- package/.agents/scripts/lib/orchestration/plan-navigation.js +92 -0
- package/.agents/scripts/lib/orchestration/plan-persist/fan-out-gate.js +61 -0
- package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +97 -0
- package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +223 -854
- package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +361 -0
- package/.agents/scripts/lib/orchestration/plan-persist/summary.js +35 -108
- package/.agents/scripts/lib/orchestration/plan-reachability.js +9 -14
- package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +1 -1
- package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/authoring-context.js +13 -13
- package/.agents/scripts/lib/orchestration/planning/decomposer-context.js +27 -0
- package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/risk-verdict.js +3 -4
- package/.agents/scripts/lib/orchestration/post-merge/phases/branch-cleanup.js +2 -2
- package/.agents/scripts/lib/orchestration/post-merge/phases/dashboard-refresh.js +8 -20
- package/.agents/scripts/lib/orchestration/post-merge/phases/worktree-reap.js +3 -2
- package/.agents/scripts/lib/orchestration/pr-base-guard.js +18 -28
- package/.agents/scripts/lib/orchestration/preflight-cache.js +5 -5
- package/.agents/scripts/lib/orchestration/remote-verifier.js +1 -1
- package/.agents/scripts/lib/orchestration/resolve-plan-run.js +155 -0
- package/.agents/scripts/lib/orchestration/resolves-token.js +1 -1
- package/.agents/scripts/lib/orchestration/retro-perf-heuristics.js +8 -8
- package/.agents/scripts/lib/orchestration/retro-proposals.js +140 -79
- package/.agents/scripts/lib/orchestration/review-depth.js +26 -12
- package/.agents/scripts/lib/orchestration/review-providers/codex.js +2 -2
- package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +21 -56
- package/.agents/scripts/lib/orchestration/run-epilogue.js +426 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +1 -1
- package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +95 -41
- package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +16 -13
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +40 -0
- package/.agents/scripts/lib/orchestration/single-story-close/runner.js +11 -3
- package/.agents/scripts/lib/orchestration/spec-freshness.js +14 -205
- package/.agents/scripts/lib/orchestration/spec-section-validator.js +4 -5
- package/.agents/scripts/lib/orchestration/spec-spill.js +60 -0
- package/.agents/scripts/lib/orchestration/split-policy-validator.js +188 -0
- package/.agents/scripts/lib/orchestration/story-close/emit-blocked.js +49 -0
- package/.agents/scripts/lib/orchestration/story-close/phases/code-review.js +15 -12
- package/.agents/scripts/lib/orchestration/story-follow-ups.js +237 -0
- package/.agents/scripts/lib/orchestration/story-init-remote.js +47 -0
- package/.agents/scripts/lib/orchestration/story-plan-state.js +48 -0
- package/.agents/scripts/lib/orchestration/{epic-runner → story-progress}/story-run-progress-writer.js +3 -3
- package/.agents/scripts/lib/orchestration/structured-comment-parser.js +1 -1
- package/.agents/scripts/lib/orchestration/task-body-validator.js +8 -18
- package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +11 -61
- package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +189 -373
- package/.agents/scripts/lib/orchestration/ticket-validator.js +2 -7
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +0 -25
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +29 -26
- package/.agents/scripts/lib/orchestration/ticketing/transition.js +5 -5
- package/.agents/scripts/lib/planning-corpus.js +16 -11
- package/.agents/scripts/lib/preflight-runner.js +2 -2
- package/.agents/scripts/lib/qa/coverage-verdict.js +5 -5
- package/.agents/scripts/lib/single-story/confirm-merge-follow-ups.js +36 -0
- package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +1 -1
- package/.agents/scripts/lib/story-adjacency.js +11 -14
- package/.agents/scripts/lib/story-body/story-body.js +124 -70
- package/.agents/scripts/lib/story-plan.js +2 -4
- package/.agents/scripts/lib/templates/decomposer-prompts.js +46 -45
- package/.agents/scripts/lib/templates/spec-author-prompts.js +47 -45
- package/.agents/scripts/lib/{epic-body-sections.js → ticket-body-sections.js} +26 -26
- package/.agents/scripts/lib/validation-evidence.js +1 -1
- package/.agents/scripts/lib/wave-runner/ready-set.js +6 -6
- package/.agents/scripts/lib/workspace-provisioner.js +1 -1
- package/.agents/scripts/lib/worktree/lifecycle/reap.js +5 -7
- package/.agents/scripts/lint-issue-body.js +71 -40
- package/.agents/scripts/mandrel-update-preflight.js +1 -1
- package/.agents/scripts/notify.js +4 -3
- package/.agents/scripts/plan-context.js +64 -74
- package/.agents/scripts/plan-persist.js +121 -280
- package/.agents/scripts/plan-run-epilogue.js +97 -0
- package/.agents/scripts/providers/github/issues.js +17 -33
- package/.agents/scripts/providers/github/mappers.js +0 -12
- package/.agents/scripts/providers/github/tickets.js +2 -5
- package/.agents/scripts/resolve-plan-run.js +117 -0
- package/.agents/scripts/signals-view.js +24 -19
- package/.agents/scripts/single-story-close.js +11 -14
- package/.agents/scripts/single-story-confirm-merge.js +39 -23
- package/.agents/scripts/single-story-init.js +29 -20
- package/.agents/scripts/stories-wave-tick.js +6 -6
- package/.agents/scripts/story-plan.js +26 -47
- package/.agents/scripts/update-ticket-state.js +6 -15
- package/.agents/skills/core/analyze-execution/SKILL.md +21 -18
- package/.agents/skills/core/idea-refinement/SKILL.md +6 -6
- package/.agents/skills/core/scope-triage/SKILL.md +28 -172
- package/.agents/skills/skills.index.json +3 -43
- package/.agents/starter-agentrc.json +0 -5
- package/.agents/templates/agent-protocol.md +9 -10
- package/.agents/workflows/audit-architecture.md +3 -3
- package/.agents/workflows/audit-clean-code.md +3 -3
- package/.agents/workflows/audit-dependencies.md +3 -3
- package/.agents/workflows/audit-devops.md +3 -3
- package/.agents/workflows/audit-documentation.md +5 -5
- package/.agents/workflows/audit-lighthouse.md +3 -3
- package/.agents/workflows/audit-navigability.md +3 -2
- package/.agents/workflows/audit-performance.md +3 -3
- package/.agents/workflows/audit-privacy.md +3 -3
- package/.agents/workflows/audit-quality.md +3 -3
- package/.agents/workflows/audit-security.md +3 -3
- package/.agents/workflows/audit-seo.md +3 -3
- package/.agents/workflows/audit-sre.md +3 -3
- package/.agents/workflows/audit-to-stories.md +20 -20
- package/.agents/workflows/audit-ux-ui.md +3 -3
- package/.agents/workflows/deliver.md +122 -174
- package/.agents/workflows/git-cleanup.md +3 -4
- package/.agents/workflows/helpers/_merge-conflict-template.md +1 -1
- package/.agents/workflows/helpers/acceptance-self-eval.md +16 -29
- package/.agents/workflows/helpers/code-review.md +70 -193
- package/.agents/workflows/helpers/{single-story-deliver-reference.md → deliver-story-reference.md} +12 -14
- package/.agents/workflows/helpers/{single-story-deliver.md → deliver-story.md} +113 -139
- package/.agents/workflows/helpers/diagnose.md +10 -10
- package/.agents/workflows/helpers/parallel-tooling.md +1 -1
- package/.agents/workflows/helpers/signals.md +16 -16
- package/.agents/workflows/helpers/worktree-lifecycle.md +48 -64
- package/.agents/workflows/mandrel-update.md +2 -1
- package/.agents/workflows/plan.md +112 -145
- package/.agents/workflows/qa-assist.md +24 -30
- package/.agents/workflows/qa-explore.md +29 -38
- package/.agents/workflows/qa-run.md +2 -2
- package/README.md +9 -8
- package/docs/CHANGELOG.md +30 -0
- package/lib/migrations/index.js +6 -5
- package/package.json +2 -2
- package/.agents/agents/retro.md +0 -42
- package/.agents/personas/architect.md +0 -113
- package/.agents/personas/devops-engineer.md +0 -38
- package/.agents/personas/engineer.md +0 -33
- package/.agents/personas/project-manager.md +0 -114
- package/.agents/personas/qa-engineer.md +0 -95
- package/.agents/personas/security-engineer.md +0 -111
- package/.agents/personas/technical-writer.md +0 -101
- package/.agents/schemas/dispatch-manifest.json +0 -232
- package/.agents/schemas/epic-spec.schema.json +0 -153
- package/.agents/schemas/lifecycle/slice.end.schema.json +0 -21
- package/.agents/schemas/lifecycle/slice.heartbeat.schema.json +0 -20
- package/.agents/schemas/lifecycle/slice.start.schema.json +0 -17
- package/.agents/scripts/acceptance-spec-reconciler.js +0 -642
- package/.agents/scripts/bookkeeping-reconcile.js +0 -117
- package/.agents/scripts/dispatcher.js +0 -295
- package/.agents/scripts/epic-audit-prepare.js +0 -497
- package/.agents/scripts/epic-audit-recheck.js +0 -274
- package/.agents/scripts/epic-deliver-note-intervention.js +0 -192
- package/.agents/scripts/epic-deliver-preflight.js +0 -462
- package/.agents/scripts/epic-deliver-prepare.js +0 -852
- package/.agents/scripts/epic-execute-record-wave.js +0 -449
- package/.agents/scripts/epic-plan-clarity.js +0 -211
- package/.agents/scripts/epic-plan-healthcheck.js +0 -581
- package/.agents/scripts/epic-reconcile.js +0 -625
- package/.agents/scripts/lib/baseline-snapshot.js +0 -979
- package/.agents/scripts/lib/checks/epic-merge-lock-stale.js +0 -54
- package/.agents/scripts/lib/checks/stale-origin-epic.js +0 -49
- package/.agents/scripts/lib/config/lifecycle.js +0 -40
- package/.agents/scripts/lib/config/preflight.js +0 -58
- package/.agents/scripts/lib/config/retro.js +0 -77
- package/.agents/scripts/lib/epic-merge-lock.js +0 -322
- package/.agents/scripts/lib/epic-plan-clarity.js +0 -181
- package/.agents/scripts/lib/epic-plan-ideation.js +0 -261
- package/.agents/scripts/lib/orchestration/context-hydration-engine.js +0 -539
- package/.agents/scripts/lib/orchestration/deliver-route.js +0 -173
- package/.agents/scripts/lib/orchestration/dispatch-engine.js +0 -134
- package/.agents/scripts/lib/orchestration/dispatch-pipeline.js +0 -183
- package/.agents/scripts/lib/orchestration/epic-cleanup.js +0 -801
- package/.agents/scripts/lib/orchestration/epic-deliver-lease-guard.js +0 -310
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/context.js +0 -163
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/creation.js +0 -140
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/dag.js +0 -64
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/diagnostics.js +0 -72
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist-helpers.js +0 -156
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist.js +0 -345
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/planning-artifacts.js +0 -41
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/reconcile-spawn.js +0 -86
- package/.agents/scripts/lib/orchestration/epic-plan-lease-guard.js +0 -391
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/drain.js +0 -94
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/plan-epic.js +0 -236
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/run-spec-phase.js +0 -307
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/spec-freshness.js +0 -117
- package/.agents/scripts/lib/orchestration/epic-plan-state-store.js +0 -117
- package/.agents/scripts/lib/orchestration/epic-run-state-store.js +0 -621
- package/.agents/scripts/lib/orchestration/epic-runner/concurrency-gate.js +0 -186
- package/.agents/scripts/lib/orchestration/epic-runner/deliver-phases.js +0 -50
- package/.agents/scripts/lib/orchestration/epic-runner/phases/build-wave-dag.js +0 -129
- package/.agents/scripts/lib/orchestration/epic-runner/phases/snapshot.js +0 -103
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/composition.js +0 -267
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/signals.js +0 -210
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/transport.js +0 -238
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/_bullet-format.js +0 -32
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/component-drift.js +0 -203
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/crap-drift.js +0 -227
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/maintainability-drift.js +0 -117
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/stalled-worktree.js +0 -37
- package/.agents/scripts/lib/orchestration/epic-runner/story-launcher.js +0 -127
- package/.agents/scripts/lib/orchestration/epic-runner/sub-agent-return.js +0 -276
- package/.agents/scripts/lib/orchestration/epic-runner/wave-scheduler.js +0 -66
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-apply.js +0 -789
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-diff.js +0 -676
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-discriminator.js +0 -389
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-format.js +0 -230
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-ops.js +0 -361
- package/.agents/scripts/lib/orchestration/finalize/open-or-locate-pr.js +0 -306
- package/.agents/scripts/lib/orchestration/finalize/post-handoff-comment.js +0 -489
- package/.agents/scripts/lib/orchestration/finalize/sanitize-skip-ci.js +0 -88
- package/.agents/scripts/lib/orchestration/lifecycle/emit-slice-lifecycle.js +0 -270
- package/.agents/scripts/lib/orchestration/lifecycle/emit-story-dispatch-end.js +0 -147
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/acceptance-reconciler.js +0 -465
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-armer.js +0 -501
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-predicate.js +0 -984
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/branch-cleaner.js +0 -264
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/checkpoint-pointer-writer.js +0 -284
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/cleaner.js +0 -355
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/finalizer.js +0 -673
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/index.js +0 -378
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/intervention-recorder.js +0 -140
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/label-transitioner.js +0 -144
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/notify-dispatcher.js +0 -174
- package/.agents/scripts/lib/orchestration/manifest-builder.js +0 -222
- package/.agents/scripts/lib/orchestration/plan-persist/amend.js +0 -359
- package/.agents/scripts/lib/orchestration/plan-persist/delivery-mode.js +0 -127
- package/.agents/scripts/lib/orchestration/post-merge-pipeline.js +0 -205
- package/.agents/scripts/lib/orchestration/recurring-failure-detector.js +0 -152
- package/.agents/scripts/lib/orchestration/retro/phases/checks.js +0 -94
- package/.agents/scripts/lib/orchestration/retro/phases/compose-body.js +0 -571
- package/.agents/scripts/lib/orchestration/retro/phases/gather-signals.js +0 -450
- package/.agents/scripts/lib/orchestration/retro/phases/post-and-mirror.js +0 -191
- package/.agents/scripts/lib/orchestration/retro-heuristics.js +0 -57
- package/.agents/scripts/lib/orchestration/retro-runner.js +0 -197
- package/.agents/scripts/lib/orchestration/spec-renderer.js +0 -447
- package/.agents/scripts/lib/orchestration/story-close/auto-refresh-runner.js +0 -747
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/gate-failure.js +0 -211
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/pre-merge-attribution.js +0 -158
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/refresh-commit.js +0 -446
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/regression-projection.js +0 -297
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/scope-discovery.js +0 -48
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution-wiring.js +0 -67
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution.js +0 -161
- package/.agents/scripts/lib/orchestration/story-close/baseline-friction-body.js +0 -117
- package/.agents/scripts/lib/orchestration/story-close/cd-out-guard.js +0 -86
- package/.agents/scripts/lib/orchestration/story-close/cleanup-reconciler.js +0 -147
- package/.agents/scripts/lib/orchestration/story-close/close-inputs.js +0 -142
- package/.agents/scripts/lib/orchestration/story-close/comment-bodies.js +0 -62
- package/.agents/scripts/lib/orchestration/story-close/merge-runner.js +0 -658
- package/.agents/scripts/lib/orchestration/story-close/merge-subject.js +0 -198
- package/.agents/scripts/lib/orchestration/story-close/phases/branch-restore.js +0 -105
- package/.agents/scripts/lib/orchestration/story-close/phases/close.js +0 -222
- package/.agents/scripts/lib/orchestration/story-close/phases/gates.js +0 -292
- package/.agents/scripts/lib/orchestration/story-close/phases/locked-pipeline.js +0 -270
- package/.agents/scripts/lib/orchestration/story-close/phases/preflight.js +0 -110
- package/.agents/scripts/lib/orchestration/story-close/phases/refresh.js +0 -86
- package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked-emitter.js +0 -112
- package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked.js +0 -157
- package/.agents/scripts/lib/orchestration/story-close/post-merge-close.js +0 -421
- package/.agents/scripts/lib/orchestration/story-close/pre-merge-validation.js +0 -302
- package/.agents/scripts/lib/orchestration/story-close/shared-checkout-guard.js +0 -163
- package/.agents/scripts/lib/orchestration/story-close-recovery.js +0 -690
- package/.agents/scripts/lib/orchestration/wave-marker.js +0 -28
- package/.agents/scripts/lib/orchestration/wave-record-io.js +0 -218
- package/.agents/scripts/lib/orchestration/wave-record-notifications.js +0 -145
- package/.agents/scripts/lib/orchestration/wave-record-projection.js +0 -212
- package/.agents/scripts/lib/presentation/dispatch-manifest-render.js +0 -111
- package/.agents/scripts/lib/presentation/manifest-builder.js +0 -239
- package/.agents/scripts/lib/presentation/manifest-formatter.js +0 -242
- package/.agents/scripts/lib/presentation/manifest-helpers.js +0 -213
- package/.agents/scripts/lib/presentation/manifest-persistence.js +0 -261
- package/.agents/scripts/lib/presentation/manifest-procedures.js +0 -55
- package/.agents/scripts/lib/presentation/manifest-render-waves.js +0 -306
- package/.agents/scripts/lib/presentation/manifest-renderer.js +0 -188
- package/.agents/scripts/lib/presentation/manifest-story-views.js +0 -110
- package/.agents/scripts/lib/push-epic-retry.js +0 -209
- package/.agents/scripts/lib/spec/index.js +0 -36
- package/.agents/scripts/lib/spec/loader.js +0 -425
- package/.agents/scripts/lib/spec/state.js +0 -208
- package/.agents/scripts/lib/story-init/blocker-validator.js +0 -68
- package/.agents/scripts/lib/story-init/branch-initializer.js +0 -408
- package/.agents/scripts/lib/story-init/context-resolver.js +0 -92
- package/.agents/scripts/lib/story-init/donor-precheck.js +0 -207
- package/.agents/scripts/lib/story-init/state-transitioner.js +0 -80
- package/.agents/scripts/lib/story-init/task-graph-builder.js +0 -124
- package/.agents/scripts/lib/story-init/transition-summary.js +0 -34
- package/.agents/scripts/lib/test-reserved-epic-temp-ids.js +0 -35
- package/.agents/scripts/lib/wave-runner/tick.js +0 -754
- package/.agents/scripts/lib/wave-runner/wave-runner-error.js +0 -20
- package/.agents/scripts/lifecycle-emit-story-dispatch.js +0 -194
- package/.agents/scripts/lifecycle-emit.js +0 -510
- package/.agents/scripts/retro-run.js +0 -218
- package/.agents/scripts/slice-phase.js +0 -361
- package/.agents/scripts/standalone-feedback-rollup.js +0 -188
- package/.agents/scripts/story-close.js +0 -294
- package/.agents/scripts/story-init.js +0 -599
- package/.agents/scripts/story-phase.js +0 -369
- package/.agents/scripts/wave-tick.js +0 -464
- package/.agents/skills/core/epic-plan-consolidate/SKILL.md +0 -172
- package/.agents/skills/core/epic-plan-consolidate/examples.md +0 -51
- package/.agents/skills/core/epic-plan-decompose-author/SKILL.md +0 -441
- package/.agents/skills/core/epic-plan-decompose-author/examples.md +0 -47
- package/.agents/skills/core/epic-plan-premortem/SKILL.md +0 -146
- package/.agents/skills/core/epic-plan-premortem/examples.md +0 -53
- package/.agents/skills/core/epic-plan-spec-author/SKILL.md +0 -383
- package/.agents/skills/core/epic-plan-spec-author/examples.md +0 -91
- package/.agents/workflows/helpers/deliver-epic-reference.md +0 -547
- package/.agents/workflows/helpers/deliver-epic-single.md +0 -331
- package/.agents/workflows/helpers/deliver-epic.md +0 -998
- package/.agents/workflows/helpers/deliver-stories.md +0 -450
- package/.agents/workflows/helpers/epic-audit.md +0 -189
- package/.agents/workflows/helpers/epic-deliver-story.md +0 -436
- package/.agents/workflows/helpers/epic-testing.md +0 -125
- package/.agents/workflows/helpers/plan-epic-reference.md +0 -160
- package/.agents/workflows/helpers/plan-epic.md +0 -353
- package/.agents/workflows/helpers/plan-story.md +0 -251
- package/.agents/workflows/helpers/scope-triage-gate.md +0 -108
- /package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/spec-authoring-grounding.js +0 -0
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* phases/refresh.js — bounded baseline auto-refresh phase (Story #2460,
|
|
3
|
-
* Epic #2453 — CLI thinning pilot).
|
|
4
|
-
*
|
|
5
|
-
* Pre-merge gates have passed; this phase regenerates baseline rows
|
|
6
|
-
* scoped to the Story diff and folds them into HEAD via one canonical
|
|
7
|
-
* `chore(baselines): refresh <kind> for story-<id>` commit per kind that
|
|
8
|
-
* actually drifted. Failure modes are advisory: a regen / amend /
|
|
9
|
-
* signal-write failure is logged but does not block the close.
|
|
10
|
-
*
|
|
11
|
-
* Public surface:
|
|
12
|
-
* - describeAutoRefreshOutcome(refreshResult) ← exported (story-close.js re-export)
|
|
13
|
-
* - reportAutoRefreshOutcome(refreshResult, deps?)
|
|
14
|
-
* - runAutoRefreshSafely(args, deps?)
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
import { Logger } from '../../../Logger.js';
|
|
18
|
-
import { runAutoRefresh } from '../auto-refresh-runner.js';
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Pure: render the AUTO-REFRESH status into a `{channel, message}` log
|
|
22
|
-
* envelope, or `null` for statuses we don't surface. Extracted so the
|
|
23
|
-
* branching lives behind a tested boundary.
|
|
24
|
-
*/
|
|
25
|
-
export function describeAutoRefreshOutcome(refreshResult) {
|
|
26
|
-
if (
|
|
27
|
-
refreshResult?.status === 'committed' ||
|
|
28
|
-
refreshResult?.status === 'amended'
|
|
29
|
-
) {
|
|
30
|
-
return {
|
|
31
|
-
channel: 'progress',
|
|
32
|
-
label: 'AUTO-REFRESH',
|
|
33
|
-
message: `Committed bounded baseline drift on Story branch (${refreshResult.sha}).`,
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
if (refreshResult?.status === 'refused') {
|
|
37
|
-
const sig = refreshResult.dedup
|
|
38
|
-
? 'already present'
|
|
39
|
-
: refreshResult.signalAppended
|
|
40
|
-
? 'appended'
|
|
41
|
-
: 'not written';
|
|
42
|
-
return {
|
|
43
|
-
channel: 'progress',
|
|
44
|
-
label: 'AUTO-REFRESH',
|
|
45
|
-
message: `Refused — ${refreshResult.refusalReasons.length} cap breach(es); friction signal ${sig}.`,
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
if (refreshResult?.status === 'failed') {
|
|
49
|
-
return {
|
|
50
|
-
channel: 'warn',
|
|
51
|
-
message: `[auto-refresh] ${refreshResult.reason}: ${refreshResult.detail ?? ''}`,
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
return null;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Translate the structured outcome into a single log line via the
|
|
59
|
-
* provided `progress` callback (so production wires `progressLog` and
|
|
60
|
-
* tests can pin the channel + label).
|
|
61
|
-
*/
|
|
62
|
-
export function reportAutoRefreshOutcome(refreshResult, deps = {}) {
|
|
63
|
-
const envelope = describeAutoRefreshOutcome(refreshResult);
|
|
64
|
-
if (!envelope) return;
|
|
65
|
-
const progress = deps.progress;
|
|
66
|
-
const logger = deps.logger ?? Logger;
|
|
67
|
-
if (envelope.channel === 'warn') logger.warn(envelope.message);
|
|
68
|
-
else if (progress) progress(envelope.label, envelope.message);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Story #1398 (Epic #1386) — bounded baseline auto-refresh. Pre-merge
|
|
73
|
-
* gates have passed; regenerate baseline rows scoped to the Story diff
|
|
74
|
-
* and amend them into HEAD if every row's delta is at or below the
|
|
75
|
-
* configured caps. Failure modes are advisory.
|
|
76
|
-
*/
|
|
77
|
-
export async function runAutoRefreshSafely(args, deps = {}) {
|
|
78
|
-
try {
|
|
79
|
-
const refreshResult = await runAutoRefresh(args);
|
|
80
|
-
reportAutoRefreshOutcome(refreshResult, deps);
|
|
81
|
-
} catch (err) {
|
|
82
|
-
Logger.warn(
|
|
83
|
-
`[auto-refresh] runner threw: ${err?.stack || err?.message || err}`,
|
|
84
|
-
);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* phases/timeout-blocked-emitter.js — side-effecting half of the timeout
|
|
3
|
-
* dispatch phase (Story #2460, Epic #2453 — CLI thinning pilot).
|
|
4
|
-
*
|
|
5
|
-
* Applies the `agent::blocked` transition + the friction comment + the
|
|
6
|
-
* lifecycle-bus emit when one of the close-time bounded-timeout spawns
|
|
7
|
-
* exits 124. All three side-effects are best-effort: a failure here
|
|
8
|
-
* logs and falls through so the close-result envelope reaches the
|
|
9
|
-
* operator regardless.
|
|
10
|
-
*
|
|
11
|
-
* Sibling: `timeout-blocked.js` (pure helpers — the descriptor table,
|
|
12
|
-
* reason-token map, and body renderer). Split out so the side-effects
|
|
13
|
-
* stay isolated and the pure half is trivially testable.
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
import { Logger } from '../../../Logger.js';
|
|
17
|
-
import {
|
|
18
|
-
STATE_LABELS,
|
|
19
|
-
transitionTicketState,
|
|
20
|
-
upsertStructuredComment,
|
|
21
|
-
} from '../../ticketing.js';
|
|
22
|
-
import { emitBlockedCloseResult } from '../merge-runner.js';
|
|
23
|
-
import {
|
|
24
|
-
renderSpawnTimeoutFrictionBody,
|
|
25
|
-
resolveSpawnTimeoutDescriptor,
|
|
26
|
-
resolveSpawnTimeoutMs,
|
|
27
|
-
} from './timeout-blocked.js';
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Apply the `agent::blocked` transition + friction comment when one of
|
|
31
|
-
* the close-time spawns exits 124.
|
|
32
|
-
*
|
|
33
|
-
* @param {{
|
|
34
|
-
* storyId: number|string,
|
|
35
|
-
* epicId?: number|string|null,
|
|
36
|
-
* spawnName: string,
|
|
37
|
-
* spawnCmd?: string|null,
|
|
38
|
-
* timeoutMs?: number|null,
|
|
39
|
-
* exitCode?: number|null,
|
|
40
|
-
* config?: object,
|
|
41
|
-
* provider: object,
|
|
42
|
-
* progress: (tag: string, msg: string) => void,
|
|
43
|
-
* reason?: string,
|
|
44
|
-
* bus?: object|null,
|
|
45
|
-
* }} input
|
|
46
|
-
*/
|
|
47
|
-
export async function emitSpawnTimeoutBlockedResult({
|
|
48
|
-
storyId,
|
|
49
|
-
epicId,
|
|
50
|
-
spawnName,
|
|
51
|
-
spawnCmd = null,
|
|
52
|
-
timeoutMs: providedTimeoutMs = null,
|
|
53
|
-
exitCode = 124,
|
|
54
|
-
config,
|
|
55
|
-
provider,
|
|
56
|
-
progress: log,
|
|
57
|
-
reason,
|
|
58
|
-
bus = null,
|
|
59
|
-
}) {
|
|
60
|
-
const timeoutMs =
|
|
61
|
-
providedTimeoutMs ?? resolveSpawnTimeoutMs(spawnName, config);
|
|
62
|
-
|
|
63
|
-
const body = renderSpawnTimeoutFrictionBody({
|
|
64
|
-
storyId,
|
|
65
|
-
epicId,
|
|
66
|
-
timeoutMs,
|
|
67
|
-
spawnName,
|
|
68
|
-
spawnCmd,
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
let commentId = null;
|
|
72
|
-
try {
|
|
73
|
-
const res = await upsertStructuredComment(
|
|
74
|
-
provider,
|
|
75
|
-
storyId,
|
|
76
|
-
'friction',
|
|
77
|
-
body,
|
|
78
|
-
);
|
|
79
|
-
commentId = res?.commentId ?? null;
|
|
80
|
-
} catch (err) {
|
|
81
|
-
Logger.warn?.(
|
|
82
|
-
`[story-close] failed to upsert ${spawnName}-timeout friction comment on #${storyId}: ${err?.message ?? err}`,
|
|
83
|
-
);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
try {
|
|
87
|
-
await transitionTicketState(provider, storyId, STATE_LABELS.BLOCKED, {
|
|
88
|
-
cascade: false,
|
|
89
|
-
});
|
|
90
|
-
} catch (err) {
|
|
91
|
-
Logger.warn?.(
|
|
92
|
-
`[story-close] failed to transition Story #${storyId} → ${STATE_LABELS.BLOCKED}: ${err?.message ?? err}`,
|
|
93
|
-
);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
const descriptor = resolveSpawnTimeoutDescriptor(spawnName);
|
|
97
|
-
return emitBlockedCloseResult({
|
|
98
|
-
storyId,
|
|
99
|
-
phase: 'closing',
|
|
100
|
-
reason: reason ?? `${spawnName}-timeout`,
|
|
101
|
-
extra: {
|
|
102
|
-
gateName: spawnName,
|
|
103
|
-
exitCode: exitCode ?? 124,
|
|
104
|
-
timeoutMs,
|
|
105
|
-
commentId,
|
|
106
|
-
},
|
|
107
|
-
bus,
|
|
108
|
-
progress: log,
|
|
109
|
-
blockedMessage: `Story #${storyId} blocked: \`${spawnCmd || descriptor.defaultCmd}\` exceeded ${timeoutMs ?? 'configured'}ms — flipped to ${STATE_LABELS.BLOCKED}.`,
|
|
110
|
-
logger: Logger,
|
|
111
|
-
});
|
|
112
|
-
}
|
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* phases/timeout-blocked.js — pure timeout-classification helpers for
|
|
3
|
-
* the story-close phase pipeline (Story #2460, Epic #2453).
|
|
4
|
-
*
|
|
5
|
-
* Holds the spawn-timeout descriptor table, the reason-token map, the
|
|
6
|
-
* config → timeout-ms resolver, and the friction-comment body renderers.
|
|
7
|
-
* The side-effecting emit (label transition + comment upsert + bus emit)
|
|
8
|
-
* lives in the sibling `timeout-blocked-emitter.js` so this file stays
|
|
9
|
-
* pure and easy to test.
|
|
10
|
-
*
|
|
11
|
-
* Public surface (all exported; re-exported by story-close.js for
|
|
12
|
-
* historical test imports):
|
|
13
|
-
* - SPAWN_TIMEOUT_DESCRIPTORS
|
|
14
|
-
* - resolveSpawnTimeoutDescriptor(name)
|
|
15
|
-
* - resolveSpawnTimeoutReason(name)
|
|
16
|
-
* - resolveSpawnTimeoutMs(name, config)
|
|
17
|
-
* - renderSpawnTimeoutFrictionBody(input)
|
|
18
|
-
* - renderCoverageTimeoutFrictionBody(input)
|
|
19
|
-
*/
|
|
20
|
-
|
|
21
|
-
import { getQuality } from '../../../config-resolver.js';
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Story #2165 — known spawn-timeout dispatch table. Each entry names the
|
|
25
|
-
* spawn whose bounded-timeout watchdog tripped and the `.agentrc.json`
|
|
26
|
-
* config key the operator tunes to raise the budget.
|
|
27
|
-
*/
|
|
28
|
-
export const SPAWN_TIMEOUT_DESCRIPTORS = Object.freeze({
|
|
29
|
-
'coverage-capture': Object.freeze({
|
|
30
|
-
displayName: 'Coverage capture',
|
|
31
|
-
defaultCmd: 'npm run test:coverage',
|
|
32
|
-
configKey: 'delivery.quality.gates.coverage.timeoutMs',
|
|
33
|
-
summary: 'The `coverage-capture` pre-merge gate',
|
|
34
|
-
}),
|
|
35
|
-
'check-maintainability': Object.freeze({
|
|
36
|
-
displayName: 'Maintainability baseline refresh',
|
|
37
|
-
defaultCmd: 'npm run maintainability:update',
|
|
38
|
-
configKey: 'delivery.quality.gates.maintainability.refreshTimeoutMs',
|
|
39
|
-
summary: 'The `check-maintainability` baseline-refresh path',
|
|
40
|
-
}),
|
|
41
|
-
'check-crap': Object.freeze({
|
|
42
|
-
displayName: 'CRAP baseline refresh',
|
|
43
|
-
defaultCmd: 'npm run crap:update',
|
|
44
|
-
configKey: 'delivery.quality.gates.crap.refreshTimeoutMs',
|
|
45
|
-
summary: 'The `check-crap` baseline-refresh path',
|
|
46
|
-
}),
|
|
47
|
-
'format-autofix': Object.freeze({
|
|
48
|
-
displayName: 'Format autofix',
|
|
49
|
-
defaultCmd: 'npx biome format --write .',
|
|
50
|
-
configKey: 'delivery.quality.formatAutofix.timeoutMs',
|
|
51
|
-
summary: 'The pre-gate `format-autofix` step',
|
|
52
|
-
}),
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
const DEFAULT_TIMEOUT_DESCRIPTOR = Object.freeze({
|
|
56
|
-
displayName: 'Close-time spawn',
|
|
57
|
-
defaultCmd: '<unknown>',
|
|
58
|
-
configKey: 'delivery.quality.<gate>.timeoutMs',
|
|
59
|
-
summary: 'A close-time spawn',
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
export function resolveSpawnTimeoutDescriptor(spawnName) {
|
|
63
|
-
return SPAWN_TIMEOUT_DESCRIPTORS[spawnName] ?? DEFAULT_TIMEOUT_DESCRIPTOR;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Story #2241 / Task #2247 — map a spawn-timeout name to the canonical
|
|
68
|
-
* `story.blocked.reason` token the lifecycle bus emits.
|
|
69
|
-
*/
|
|
70
|
-
const SPAWN_TIMEOUT_REASONS = Object.freeze({
|
|
71
|
-
'coverage-capture': 'timeout:coverage-capture',
|
|
72
|
-
'check-maintainability': 'timeout:baseline-refresh',
|
|
73
|
-
'check-crap': 'timeout:baseline-refresh',
|
|
74
|
-
'format-autofix': 'timeout:biome-format',
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
export function resolveSpawnTimeoutReason(spawnName) {
|
|
78
|
-
return (
|
|
79
|
-
SPAWN_TIMEOUT_REASONS[spawnName] ?? `timeout:${spawnName ?? 'unknown'}`
|
|
80
|
-
);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Story #2165 — resolve the timeout (ms) the upstream watchdog enforced
|
|
85
|
-
* for the named spawn. Best-effort: a missing/invalid resolver returns
|
|
86
|
-
* `null`.
|
|
87
|
-
*/
|
|
88
|
-
export function resolveSpawnTimeoutMs(spawnName, config) {
|
|
89
|
-
try {
|
|
90
|
-
const quality = getQuality(config);
|
|
91
|
-
switch (spawnName) {
|
|
92
|
-
case 'coverage-capture':
|
|
93
|
-
return quality?.coverage?.timeoutMs ?? null;
|
|
94
|
-
case 'check-maintainability':
|
|
95
|
-
return quality?.maintainability?.refreshTimeoutMs ?? null;
|
|
96
|
-
case 'check-crap':
|
|
97
|
-
return quality?.crap?.refreshTimeoutMs ?? null;
|
|
98
|
-
case 'format-autofix':
|
|
99
|
-
return quality?.formatAutofix?.timeoutMs ?? null;
|
|
100
|
-
default:
|
|
101
|
-
return null;
|
|
102
|
-
}
|
|
103
|
-
} catch {
|
|
104
|
-
return null;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Render the friction-comment body posted on the Story ticket when one of
|
|
110
|
-
* the close-time spawns trips the bounded-timeout watchdog (exit 124).
|
|
111
|
-
*/
|
|
112
|
-
export function renderSpawnTimeoutFrictionBody({
|
|
113
|
-
storyId,
|
|
114
|
-
epicId,
|
|
115
|
-
timeoutMs,
|
|
116
|
-
spawnName = 'coverage-capture',
|
|
117
|
-
spawnCmd,
|
|
118
|
-
}) {
|
|
119
|
-
const descriptor = resolveSpawnTimeoutDescriptor(spawnName);
|
|
120
|
-
const cmd = spawnCmd || descriptor.defaultCmd;
|
|
121
|
-
const seconds = Math.round((timeoutMs ?? 0) / 1000);
|
|
122
|
-
const minutes = Math.round((seconds / 60) * 10) / 10;
|
|
123
|
-
const budget = timeoutMs
|
|
124
|
-
? `${timeoutMs}ms (~${minutes} min)`
|
|
125
|
-
: 'configured budget';
|
|
126
|
-
return [
|
|
127
|
-
`### ${descriptor.displayName} timed out`,
|
|
128
|
-
'',
|
|
129
|
-
`${descriptor.summary} spawned \`${cmd}\` for Story #${storyId} (Epic #${epicId ?? 'unknown'}) and the bounded watchdog killed the child after ${budget}.`,
|
|
130
|
-
'',
|
|
131
|
-
`**Exit code:** 124 (GNU \`timeout(1)\` convention — surfaced when \`spawnSync\` returns with \`signal: 'SIGKILL'\`).`,
|
|
132
|
-
'',
|
|
133
|
-
`**Next actions:**`,
|
|
134
|
-
`- Re-run \`${cmd}\` locally inside the Story worktree to confirm the hang.`,
|
|
135
|
-
`- If the command is honestly slow, raise \`${descriptor.configKey}\` in \`.agentrc.json\` and re-close.`,
|
|
136
|
-
`- If a deadlock or runaway loop is the cause, isolate the offending input and fix the underlying hang.`,
|
|
137
|
-
'',
|
|
138
|
-
`Story label has been flipped to \`agent::blocked\`. Resume by transitioning back to \`agent::executing\` after the underlying issue is fixed.`,
|
|
139
|
-
].join('\n');
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
/**
|
|
143
|
-
* Backwards-compatible wrapper for the coverage-capture timeout body
|
|
144
|
-
* (Story #2136 / Task #2143).
|
|
145
|
-
*/
|
|
146
|
-
export function renderCoverageTimeoutFrictionBody({
|
|
147
|
-
storyId,
|
|
148
|
-
epicId,
|
|
149
|
-
timeoutMs,
|
|
150
|
-
}) {
|
|
151
|
-
return renderSpawnTimeoutFrictionBody({
|
|
152
|
-
storyId,
|
|
153
|
-
epicId,
|
|
154
|
-
timeoutMs,
|
|
155
|
-
spawnName: 'coverage-capture',
|
|
156
|
-
});
|
|
157
|
-
}
|