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
|
@@ -1,251 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description:
|
|
3
|
-
Author a standalone Story (no parent Epic) from a short prompt. Builds a
|
|
4
|
-
context envelope, lets the host LLM draft the body, and creates the
|
|
5
|
-
GitHub Issue with type::story and a persona label — ready to feed into
|
|
6
|
-
/single-story-deliver.
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# helpers/plan-story — standalone-Story planning path (invoked by /plan)
|
|
10
|
-
|
|
11
|
-
## Overview
|
|
12
|
-
|
|
13
|
-
`/plan` is the standalone counterpart to
|
|
14
|
-
[`/plan`](plan-epic.md) for Stories that are **not** attached to an
|
|
15
|
-
Epic. It closes the gap between "one-line idea" and "well-formed
|
|
16
|
-
standalone Story body ready for [`/single-story-deliver`](single-story-deliver.md)"
|
|
17
|
-
using the same `host LLM authors + Node wrapper persists` split as
|
|
18
|
-
`/plan`.
|
|
19
|
-
|
|
20
|
-
```text
|
|
21
|
-
/plan --idea "<seed>"
|
|
22
|
-
→ story-plan.js --emit-context (envelope: seed, template, dup candidates)
|
|
23
|
-
→ host LLM authors a draft Story body (in chat, using the envelope)
|
|
24
|
-
→ operator confirms (HITL)
|
|
25
|
-
→ story-plan.js --body <file> (validate, gh issue create)
|
|
26
|
-
→ "Next: /deliver <id>"
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
**The two paths of `/plan` — when each applies:**
|
|
30
|
-
|
|
31
|
-
| Trait | Standalone-Story path (this helper) | Epic decomposition path (`helpers/plan-epic.md`) |
|
|
32
|
-
| -------------------- | ------------------------------------------ | -------------------------------------------- |
|
|
33
|
-
| Output | One standalone Story Issue | Epic with child Stories |
|
|
34
|
-
| Parent Epic | None (no `Epic: #N` in body) | Required |
|
|
35
|
-
| Downstream workflow | `/deliver <storyId>` | `/deliver <epicId>` |
|
|
36
|
-
| Replan surface | Out of scope (recreate manually if needed) | `/plan <epicId> --force` regenerates the backlog |
|
|
37
|
-
| Inbound route | `--idea` with a `story` triage verdict, `--body`, **or** a scope-triage handoff from the Epic path | Direct (`<epicId>`, or `--idea` with an `epic` verdict) |
|
|
38
|
-
| Outbound route | Phase 2 may **escalate** an epic-sized draft to the Epic path (internal branch switch) | The story-sized advisory may **convert** a one-Story Epic to this path |
|
|
39
|
-
|
|
40
|
-
If a Story-under-Epic needs replanning, use `/plan <epicId> --force`. If you
|
|
41
|
-
have a refactor, framework-maintenance idea, or any standalone unit of
|
|
42
|
-
work, use this workflow.
|
|
43
|
-
|
|
44
|
-
**Inbound from `/plan` scope triage.** The Epic path's interrogate step runs
|
|
45
|
-
the [`core/scope-triage`](../../skills/core/scope-triage/SKILL.md) rubric over
|
|
46
|
-
the sharpened one-pager. On a `story` / `borderline` verdict the operator may route
|
|
47
|
-
the work here via `/plan --from-notes <path>`. That invocation is a
|
|
48
|
-
**scope-triage handoff** — the triage decision is already made, so `/plan`
|
|
49
|
-
MUST NOT re-triage it (the no-re-triage rule in the skill); it proceeds straight
|
|
50
|
-
to authoring the standalone Story body from the handed-off one-pager.
|
|
51
|
-
|
|
52
|
-
## Prerequisites
|
|
53
|
-
|
|
54
|
-
1. `GITHUB_TOKEN` or `gh auth status` clean — `gh issue create` runs at
|
|
55
|
-
persist time.
|
|
56
|
-
2. The `type::story` label and the chosen `persona::*` label exist in the
|
|
57
|
-
repo. Run [`agents-bootstrap-github.js`](../../scripts/agents-bootstrap-github.js)
|
|
58
|
-
once to provision them.
|
|
59
|
-
|
|
60
|
-
## Invocation shapes
|
|
61
|
-
|
|
62
|
-
```bash
|
|
63
|
-
# Seed from an inline string:
|
|
64
|
-
/plan --idea "rip out the unused TaskBodyMigrator export"
|
|
65
|
-
|
|
66
|
-
# Seed from a notes file:
|
|
67
|
-
/plan --from-notes temp/single-story-2293-notes.md
|
|
68
|
-
|
|
69
|
-
# Inspect the draft body without creating an Issue:
|
|
70
|
-
/plan --dry-run --body temp/single-story-draft.md
|
|
71
|
-
|
|
72
|
-
# Headless / non-interactive (auto-proceeds the draft-confirm gate):
|
|
73
|
-
/plan --idea "rip out the unused TaskBodyMigrator export" --yes
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
## Phase 1 — Emit Context
|
|
77
|
-
|
|
78
|
-
Run the emit-context phase. The CLI prints a JSON envelope on stdout and
|
|
79
|
-
routes all log lines to stderr so the captured file is unconditionally
|
|
80
|
-
parseable by `JSON.parse`.
|
|
81
|
-
|
|
82
|
-
```bash
|
|
83
|
-
node .agents/scripts/story-plan.js --emit-context \
|
|
84
|
-
--idea "<seed>" \
|
|
85
|
-
[--persona engineer] \
|
|
86
|
-
[--refine | --no-refine] \
|
|
87
|
-
[--pretty] > temp/single-story-context.json
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
Envelope fields (`kind: "story-plan-context"`, `version: 1`):
|
|
91
|
-
|
|
92
|
-
| Field | Purpose |
|
|
93
|
-
| ---------------------- | --------------------------------------------------------- |
|
|
94
|
-
| `seed` | The raw seed (verbatim from `--idea` / `--from-notes`). |
|
|
95
|
-
| `refine` | `{ refine, reason }` heuristic verdict. |
|
|
96
|
-
| `persona` | Persona label to apply (default `engineer`). |
|
|
97
|
-
| `bodyTemplate` | Contents of `.agents/templates/single-story-body.md`. |
|
|
98
|
-
| `requiredSections` | `["Context", "Acceptance Criteria", "Out of Scope", "Notes"]`. |
|
|
99
|
-
| `duplicateCandidates` | Ranked open Stories whose titles fuzzy-match the seed. |
|
|
100
|
-
| `techStack` | The project's Tech Stack inventory, resolved in order: `docs/tech-stack.md` (full body) when present, else the `## Tech Stack` section of `docs/architecture.md` (numbered/decorated and final-section headings tolerated). |
|
|
101
|
-
| `corpusContext` | Corpus-aware inherited context (Story #4432): `{ docsDigest, relevantSections }` — see below. |
|
|
102
|
-
| `deliverContract` | Workflow path + required/forbidden labels and references. |
|
|
103
|
-
|
|
104
|
-
`corpusContext.docsDigest` is the same per-project docs digest
|
|
105
|
-
`orchestration/docs-digest.js` builds for `/deliver` Story children (`null`
|
|
106
|
-
when `project.docsContextFiles` is not configured). `corpusContext.relevantSections`
|
|
107
|
-
is a ranked list of `{ epicId, epicTitle, section, score, excerpt }` —
|
|
108
|
-
existing-Epic Tech Spec (or ideation-lede) excerpts that overlap with the
|
|
109
|
-
seed, fetched via a bounded explicit per-candidate body fetch
|
|
110
|
-
(`planning-corpus.js`). Both fields degrade to `null` / `[]` respectively
|
|
111
|
-
when there is nothing to surface.
|
|
112
|
-
|
|
113
|
-
### Refine heuristic
|
|
114
|
-
|
|
115
|
-
`refine.refine` is `true` when the seed is shorter than 200 characters
|
|
116
|
-
(or empty). Pass `--refine` / `--no-refine` to override. When the
|
|
117
|
-
envelope advises refinement, activate the
|
|
118
|
-
[`core/idea-refinement`](../../skills/core/idea-refinement/SKILL.md) skill
|
|
119
|
-
before drafting the body — same skill the Epic path's interrogate step drives.
|
|
120
|
-
|
|
121
|
-
## Phase 2 — Host LLM Authors a Draft Body
|
|
122
|
-
|
|
123
|
-
Using the envelope above, draft a Story body that:
|
|
124
|
-
|
|
125
|
-
- Starts with `# <title>` (the H1 becomes the GitHub Issue title at
|
|
126
|
-
persist time).
|
|
127
|
-
- Includes every section in `requiredSections` (`## Context`,
|
|
128
|
-
`## Acceptance Criteria`, `## Out of Scope`, `## Notes`).
|
|
129
|
-
- Has at least one unchecked checklist item under `## Acceptance Criteria`
|
|
130
|
-
(`- [ ] …`).
|
|
131
|
-
- Does **NOT** contain any `Epic: #N` reference — that breaks the
|
|
132
|
-
standalone contract enforced by `single-story-init.js`.
|
|
133
|
-
|
|
134
|
-
### Drafting against `corpusContext`
|
|
135
|
-
|
|
136
|
-
Check `corpusContext` before authoring the `## Context` section:
|
|
137
|
-
|
|
138
|
-
- **When `corpusContext.relevantSections` is non-empty** (the seed is a
|
|
139
|
-
change-request-shaped delta against a surface an existing Epic already
|
|
140
|
-
covers — see the
|
|
141
|
-
[`core/scope-triage`](../../skills/core/scope-triage/SKILL.md) change-request
|
|
142
|
-
rubric), draft `## Context` **against that inherited context** rather than
|
|
143
|
-
re-deriving it from scratch: reference the matching Epic's Tech Spec
|
|
144
|
-
excerpt(s) by number (`Epic #<epicId>`) and build the acceptance criteria on
|
|
145
|
-
top of the architecture / conventions they already establish. Pull
|
|
146
|
-
`corpusContext.docsDigest` the same way the digest-first delivery path does
|
|
147
|
-
(§ 3 of [`.agents/instructions.md`](../../instructions.md)) — read the
|
|
148
|
-
relevant doc section on demand when the digest outline names one that bears
|
|
149
|
-
on the change.
|
|
150
|
-
- **When `corpusContext.relevantSections` is `[]` and `docsDigest` is
|
|
151
|
-
`null`** — no configured docs and no overlapping prior art — draft exactly
|
|
152
|
-
as today: from the seed, the body template, and the duplicate-candidates
|
|
153
|
-
scan alone. This is the common case for a genuinely new standalone Story
|
|
154
|
-
and is not a degraded path; it is simply that there is nothing to inherit.
|
|
155
|
-
|
|
156
|
-
Write the draft to `temp/single-story-draft.md`.
|
|
157
|
-
|
|
158
|
-
### Scope-triage escalation gate (symmetric counterpart to the Epic path's ideation triage)
|
|
159
|
-
|
|
160
|
-
This gate runs the shared scope-triage gate over the **drafted Story body** to
|
|
161
|
-
catch an Epic-sized scope before it is persisted as a standalone Story — the
|
|
162
|
-
outbound mirror of the Epic path's inbound downgrade gate. The gate
|
|
163
|
-
mechanics (verdict meanings, the three-way operator choice, the `--yes`
|
|
164
|
-
resolution, and the no-re-triage rule) live in the single-homed fragment
|
|
165
|
-
[`scope-triage-gate.md`](scope-triage-gate.md); read it and follow it. This
|
|
166
|
-
phase supplies only its path-specific firing conditions:
|
|
167
|
-
|
|
168
|
-
- **When it runs**: only **after the draft body exists** — the seed alone is
|
|
169
|
-
not an honest basis for a sizing judgment. The rubric is applied to the
|
|
170
|
-
**drafted Story body**, and the verdict folds into the **existing**
|
|
171
|
-
draft-confirmation HITL stop below (it does **not** add a second stop). (The
|
|
172
|
-
`refine` heuristic in `story-plan.js` is unchanged — it is a deterministic
|
|
173
|
-
seed-length proxy, not a scope-size judgment.)
|
|
174
|
-
- **When it is skipped**: entirely, when `/plan` was entered via a scope-triage
|
|
175
|
-
handoff — from the Epic path's ideation triage (the inbound route above) or
|
|
176
|
-
its existing-Epic story-sized conversion path (the no-re-triage rule in the
|
|
177
|
-
fragment).
|
|
178
|
-
- **Recommended branch on an `epic` verdict**: escalate to `/plan --idea` —
|
|
179
|
-
persist the notes/draft to a notes file and hand off to `/plan --idea` (or
|
|
180
|
-
`--from-notes <path>`), identifying the invocation as a scope-triage handoff
|
|
181
|
-
so `/plan` skips its own ideation triage gate, then **abandon the draft and exit
|
|
182
|
-
`/plan`** (no standalone Story is created). The alternative branches are
|
|
183
|
-
**persist as a standalone Story anyway** (proceed to Phase 3 with the draft
|
|
184
|
-
unchanged) and **abort**.
|
|
185
|
-
|
|
186
|
-
### HITL — operator confirms the draft (verdict folded in)
|
|
187
|
-
|
|
188
|
-
Display the draft to the operator and **STOP**. Do not call the persist phase
|
|
189
|
-
until the operator explicitly confirms the draft. This mirrors the Epic
|
|
190
|
-
path's gate #1 at the exit of its interrogate step. This is the
|
|
191
|
-
story-path face of `/plan`'s **gate #1** (the ideation one-pager /
|
|
192
|
-
scope-triage confirm). The scope-triage verdict folds into this same stop, per
|
|
193
|
-
the branch bindings above; on a **`story` verdict (or gate skipped via
|
|
194
|
-
handoff)** there is no extra prompt and the operator confirms the draft as
|
|
195
|
-
usual. The `--yes` headless resolution of this stop is the fragment's — see
|
|
196
|
-
[`scope-triage-gate.md` § `--yes` (headless) resolution](scope-triage-gate.md#--yes-headless-resolution)
|
|
197
|
-
and [`plan.md` § Headless / non-interactive mode](../plan.md#headless--non-interactive-mode---yes).
|
|
198
|
-
|
|
199
|
-
## Phase 3 — Persist (`gh issue create`)
|
|
200
|
-
|
|
201
|
-
```bash
|
|
202
|
-
node .agents/scripts/story-plan.js \
|
|
203
|
-
--body temp/single-story-draft.md \
|
|
204
|
-
[--persona engineer]
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
The script:
|
|
208
|
-
|
|
209
|
-
1. Reads the body file.
|
|
210
|
-
2. Runs `validateStoryBody` — required sections present, no `Epic:`
|
|
211
|
-
reference, AC checklist non-empty. Fails fast on any error.
|
|
212
|
-
3. Extracts the H1 title.
|
|
213
|
-
4. Calls `gh issue create` with `--title`, `--body-file`, and the
|
|
214
|
-
`type::story` + `persona::<name>` labels.
|
|
215
|
-
5. Prints a JSON line with `{ issueNumber, title, labels }` and a
|
|
216
|
-
trailing `Next: /single-story-deliver <id>` hint on stderr.
|
|
217
|
-
|
|
218
|
-
### `--dry-run`
|
|
219
|
-
|
|
220
|
-
```bash
|
|
221
|
-
node .agents/scripts/story-plan.js \
|
|
222
|
-
--body temp/single-story-draft.md --dry-run
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
Prints the resolved title, labels, and `gh` argv plus the full body, then
|
|
226
|
-
exits 0. No GitHub mutations. Use this to spot-check the draft and the
|
|
227
|
-
exact `gh issue create` shape that would run.
|
|
228
|
-
|
|
229
|
-
## Constraints
|
|
230
|
-
|
|
231
|
-
- **No `Epic: #N` references.** This is the standalone contract; persist
|
|
232
|
-
fails fast if one is present. To attach a Story to an Epic, plan it
|
|
233
|
-
through the Epic path (`/plan <epicId>`) instead.
|
|
234
|
-
- **No external LLM APIs.** Mirrors the v5.6 contract: the host LLM does
|
|
235
|
-
the authoring; the Node wrapper does the I/O.
|
|
236
|
-
- **Idempotent.** Re-running `--emit-context` is safe. Re-running
|
|
237
|
-
`--body` opens a new Issue (it is not aware of prior runs); use
|
|
238
|
-
`--dry-run` first when iterating on the draft.
|
|
239
|
-
- **Atomic by contract.** A Story is the leaf of the 2-tier hierarchy — it
|
|
240
|
-
has no child tickets. Its acceptance criteria and verification steps live
|
|
241
|
-
inline on the Story body
|
|
242
|
-
([`single-story-deliver.md`](single-story-deliver.md)).
|
|
243
|
-
|
|
244
|
-
## See also
|
|
245
|
-
|
|
246
|
-
- [`/single-story-deliver`](single-story-deliver.md) — the consumer
|
|
247
|
-
workflow that picks the Story up after this one creates it.
|
|
248
|
-
- [`/plan`](plan-epic.md) — the Epic-tier equivalent. Its ideation entry
|
|
249
|
-
inspired the seed-capture + envelope-emit pattern used here.
|
|
250
|
-
- [`core/idea-refinement`](../../skills/core/idea-refinement/SKILL.md) —
|
|
251
|
-
optional pre-authoring skill activated when the seed is short.
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: >-
|
|
3
|
-
Shared scope-triage gate fragment — the single home for the verdict
|
|
4
|
-
meanings, the three-way operator choice, the --yes headless resolution,
|
|
5
|
-
and the no-re-triage rule that both /plan paths reference instead of
|
|
6
|
-
restating.
|
|
7
|
-
caller: plan-epic.md, plan-story.md
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# helpers/scope-triage-gate — shared scope-triage gate semantics
|
|
11
|
-
|
|
12
|
-
> **Not a slash command.** This file lives in `helpers/` and is a
|
|
13
|
-
> path-included fragment (not projected into the plugin command tree). It is
|
|
14
|
-
> referenced by [`plan-epic.md`](plan-epic.md) (its interrogate step — the
|
|
15
|
-
> ideation triage and the existing-Epic story-sized advisory) and
|
|
16
|
-
> [`plan-story.md`](plan-story.md) (Phase 2), which supply only their
|
|
17
|
-
> path-specific firing conditions and defer the gate mechanics here.
|
|
18
|
-
|
|
19
|
-
## What the gate is
|
|
20
|
-
|
|
21
|
-
Both `/plan` paths run the
|
|
22
|
-
[`core/scope-triage`](../../skills/core/scope-triage/SKILL.md) rubric over the
|
|
23
|
-
path-appropriate artifact (an ideation one-pager, an existing Epic body, or a
|
|
24
|
-
drafted Story body) to catch a wrong-sized scope **before** it is committed to
|
|
25
|
-
the wrong pipeline. The rubric is host-LLM judgment anchored **by reference**
|
|
26
|
-
to `DELIVERABLE_GRANULARITY_GUIDANCE` / `DEFAULT_TASK_SIZING` in
|
|
27
|
-
[`ticket-validator-sizing.js`](../../scripts/lib/orchestration/ticket-validator-sizing.js).
|
|
28
|
-
There is **no `--flag`**, no scorer, no schema, and no label transition behind
|
|
29
|
-
the gate. Each referencing path activates the skill by reading its `SKILL.md`
|
|
30
|
-
via the `Read` tool and applying its rubric — do **not** restate the skill's
|
|
31
|
-
sizing thresholds or copy its verdict prose.
|
|
32
|
-
|
|
33
|
-
## Verdict meanings
|
|
34
|
-
|
|
35
|
-
The rubric emits exactly one verdict:
|
|
36
|
-
|
|
37
|
-
- **`epic`** — the scope is genuinely Epic-sized (multiple independent
|
|
38
|
-
capabilities, a plausible sizing-ceiling breach, or a real dependency
|
|
39
|
-
structure). Proceed on the Epic path; no downgrade offered.
|
|
40
|
-
- **`story`** — the scope is really a single capability-sized Story. The Epic
|
|
41
|
-
ceremony is not worth paying for; the gate offers a downgrade/handoff to the
|
|
42
|
-
standalone-Story path.
|
|
43
|
-
- **`borderline`** — the rubric cannot confidently place the scope on either
|
|
44
|
-
side. Treated the same as `story` at the gate: the three-way choice is
|
|
45
|
-
presented so the operator makes the call.
|
|
46
|
-
|
|
47
|
-
The verdict is **advisory**. Being wrong in the `epic` direction is cheap
|
|
48
|
-
(the consolidation critic and the sizing validator catch an over-planned Story
|
|
49
|
-
later), so the gate never costs the operator a stop on an `epic` verdict; the
|
|
50
|
-
gate exists to avoid the ceremony tax of pushing a story-sized scope through
|
|
51
|
-
the full Epic pipeline.
|
|
52
|
-
|
|
53
|
-
## The three-way operator choice
|
|
54
|
-
|
|
55
|
-
The referencing path folds the verdict into its **existing** HITL confirmation
|
|
56
|
-
stop — it never adds a second stop. On a `story` / `borderline` verdict, that
|
|
57
|
-
confirmation presents a **three-way operator choice**:
|
|
58
|
-
|
|
59
|
-
- **Recommended (the path-specific downgrade/handoff)** — with the triage
|
|
60
|
-
rationale. The referencing path defines the concrete action (persist a
|
|
61
|
-
notes/seed file and hand off to the sibling `/plan` path, identifying the
|
|
62
|
-
invocation as a **scope-triage handoff**), then **exits** the current path.
|
|
63
|
-
- **Proceed on the current path anyway** — ignore the recommendation and
|
|
64
|
-
continue with the artifact unchanged.
|
|
65
|
-
- **Abort** — stop planning entirely. Nothing is mutated.
|
|
66
|
-
|
|
67
|
-
**Never auto-route.** The verdict is advisory and the operator always decides;
|
|
68
|
-
no `agent::*` / label transition happens on either side of the choice. (The
|
|
69
|
-
one sanctioned exception is `--yes`, below.)
|
|
70
|
-
|
|
71
|
-
## `--yes` (headless) resolution
|
|
72
|
-
|
|
73
|
-
`"Never auto-route"` is the **interactive** contract. When `/plan` was invoked
|
|
74
|
-
with `--yes`, the operator has *pre-authorized* the recommendation and the gate
|
|
75
|
-
does **not** STOP:
|
|
76
|
-
|
|
77
|
-
- The three-way choice resolves to its **Recommended** branch
|
|
78
|
-
deterministically — the handoff carries `--yes` so the receiving `/plan`
|
|
79
|
-
path also auto-proceeds; an `epic` verdict simply continues on the current
|
|
80
|
-
path with no wait.
|
|
81
|
-
- Display the artifact and the verdict line for the record, then proceed
|
|
82
|
-
without waiting.
|
|
83
|
-
|
|
84
|
-
This is the **only** sanctioned auto-route, and it exists solely to make
|
|
85
|
-
`/plan` driveable headlessly. `--yes` does not alter the rubric or the verdict
|
|
86
|
-
meanings; it only forces the Recommended resolution where the gate would
|
|
87
|
-
otherwise STOP. See
|
|
88
|
-
[`plan.md` § Headless / non-interactive mode](../plan.md#headless--non-interactive-mode---yes).
|
|
89
|
-
|
|
90
|
-
**Headless seed entry — the verdict is already in the envelope (#4496).**
|
|
91
|
-
On the `--idea` `--yes` path the rubric is applied **CLI-side** by
|
|
92
|
-
`plan-context.js --seed` and shipped as the envelope's `scopeTriage` field
|
|
93
|
-
(`{ verdict, reasons, advisory: true, appliedBy: "cli" }`), anchored to the
|
|
94
|
-
same sizing SSOT this skill anchors to. Do **not** Read the
|
|
95
|
-
`core/scope-triage` skill headless — use the envelope verdict and resolve it
|
|
96
|
-
per this section. The attended paths keep the skill-based judgment
|
|
97
|
-
unchanged.
|
|
98
|
-
|
|
99
|
-
## No-re-triage rule
|
|
100
|
-
|
|
101
|
-
A **scope-triage handoff** is a triage decision *already made*. When `/plan` is
|
|
102
|
-
entered via a handoff (from the Epic path's ideation triage, its
|
|
103
|
-
existing-Epic story-sized conversion, or the standalone-Story Phase 2
|
|
104
|
-
escalation), the
|
|
105
|
-
receiving path **MUST NOT** re-run this gate. Re-triaging a settled call would
|
|
106
|
-
re-litigate it and risk a ping-pong between the two `/plan` paths. Each
|
|
107
|
-
referencing path states its own skip-on-handoff condition and defers the
|
|
108
|
-
rationale here.
|
|
File without changes
|