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,427 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: >-
|
|
3
|
-
Helper — not a slash command. Execute one Epic-attached Story end-to-end on
|
|
4
|
-
behalf of `/deliver`. Calls `story-init.js`, `cd`s into the worktree,
|
|
5
|
-
runs the Story-implementation phase against the inline acceptance[] /
|
|
6
|
-
verify[] arrays, writes a `story-run-progress` snapshot per transition, and
|
|
7
|
-
finally calls `story-close.js` to merge into the Epic branch and reap the
|
|
8
|
-
worktree.
|
|
9
|
-
caller: epic-deliver.md
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
# helpers/epic-deliver-story — Epic-attached Story worker
|
|
13
|
-
|
|
14
|
-
> **Not a slash command.** This file lives in `helpers/` and is not projected
|
|
15
|
-
> into the mandrel plugin command tree. It is invoked exclusively by the
|
|
16
|
-
> [`/deliver`](deliver-epic.md) per-wave fan-out via an `Agent` tool
|
|
17
|
-
> call (`subagent_type: general-purpose`). Run `/deliver <epicId>` from
|
|
18
|
-
> the operator surface, not this helper directly.
|
|
19
|
-
|
|
20
|
-
## Overview
|
|
21
|
-
|
|
22
|
-
`epic-deliver-story` is the **single-Story worker** for Epic-attached Stories.
|
|
23
|
-
It sits below [`/deliver`](deliver-epic.md) (which fans out one Story
|
|
24
|
-
sub-agent per slot, per wave) and runs one Story from init to close in one
|
|
25
|
-
invocation.
|
|
26
|
-
|
|
27
|
-
```text
|
|
28
|
-
/deliver <epicId>
|
|
29
|
-
→ for each wave N:
|
|
30
|
-
Agent tool × concurrencyCap parallel calls (one assistant turn):
|
|
31
|
-
helpers/epic-deliver-story <storyId>
|
|
32
|
-
→ story-init.js
|
|
33
|
-
→ single Story-implementation phase using inline
|
|
34
|
-
acceptance[] / verify[] from the Story body
|
|
35
|
-
→ story-close.js
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
The argument is always a **Story ID** (`type::story`). Epic IDs go through
|
|
39
|
-
[`/deliver`](deliver-epic.md).
|
|
40
|
-
|
|
41
|
-
**Standalone Stories** (no `Epic: #N` in body) use
|
|
42
|
-
[`/deliver`](deliver-stories.md) instead — that workflow's helper
|
|
43
|
-
branches from `main`, opens its PR directly to `main`, and skips the
|
|
44
|
-
Epic-scoped machinery (cascade, dispatch manifest, dashboard regen). This
|
|
45
|
-
helper requires a parent Epic and will refuse to initialize a Story that lacks
|
|
46
|
-
the `Epic: #N` reference.
|
|
47
|
-
|
|
48
|
-
> **Worktree isolation.** When `delivery.worktreeIsolation.enabled` is
|
|
49
|
-
> `true`, Step 0 creates a worktree at `.worktrees/story-<id>/` and prints
|
|
50
|
-
> its absolute path as `workCwd`. You **must** `cd` into that path before
|
|
51
|
-
> Step 1. The main checkout's HEAD is never moved. See
|
|
52
|
-
> [`worktree-lifecycle.md`](worktree-lifecycle.md) for node_modules
|
|
53
|
-
> strategies, Windows notes, and escape hatches.
|
|
54
|
-
|
|
55
|
-
---
|
|
56
|
-
|
|
57
|
-
## Non-interactive execution contract
|
|
58
|
-
|
|
59
|
-
`epic-deliver-story` runs as a sub-agent of `/deliver`'s per-wave fan-out
|
|
60
|
-
(common case) or interactively for a single Story. Sub-agent runs share
|
|
61
|
-
the parent's permissions but have **no input channel** mid-run.
|
|
62
|
-
|
|
63
|
-
- **Never** ask clarifying questions as a sub-agent. Pick the narrowest
|
|
64
|
-
reasonable interpretation that satisfies the Story's AC. If you cannot
|
|
65
|
-
proceed, transition to `agent::blocked`, post a `friction` comment with
|
|
66
|
-
the decision needed and the default assumption, and exit non-zero.
|
|
67
|
-
- **Never** assume tool-permission prompts will be auto-approved. Treat a
|
|
68
|
-
blocking prompt as a harness condition and transition to `agent::blocked`.
|
|
69
|
-
- **Always** write `story-run-progress` snapshots at every phase
|
|
70
|
-
transition so the parent aggregator never falls back to label
|
|
71
|
-
re-derivation.
|
|
72
|
-
|
|
73
|
-
---
|
|
74
|
-
|
|
75
|
-
## Step 0 — Initialize (`story-init.js`)
|
|
76
|
-
|
|
77
|
-
Run from the **main checkout** (the worktree does not exist yet):
|
|
78
|
-
|
|
79
|
-
```bash
|
|
80
|
-
node .agents/scripts/story-init.js --story <storyId>
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
**No spec-ticket threading (Story #4324).** The Tech Spec lives as managed
|
|
84
|
-
sections of the Epic body — there is no separate Tech-Spec issue, no
|
|
85
|
-
`--tech-spec` flag, and no per-Story hierarchy trace to a spec ticket.
|
|
86
|
-
Your hydrated prompt already embeds the Epic body (with the
|
|
87
|
-
`## Acceptance Table` section stripped), which carries the folded Tech
|
|
88
|
-
Spec sections; do not fetch a Tech Spec issue.
|
|
89
|
-
|
|
90
|
-
> **Execution mode (sub-agents must read).** This command typically takes
|
|
91
|
-
> 3–6 minutes when the worktree's per-tree install runs. Invoke it
|
|
92
|
-
> **synchronously** with the Bash tool's maximum timeout
|
|
93
|
-
> (`Bash(timeout: 600000)`). Do **not** use `run_in_background` + `Monitor`
|
|
94
|
-
> here: `Monitor`'s return is not equivalent to script exit, and a sub-agent
|
|
95
|
-
> that exits during a `Monitor` wait kills `story-init.js` mid-batch — the
|
|
96
|
-
> worktree is left half-initialized (no `story-init` comment, no Story-level
|
|
97
|
-
> `agent::*` label flip) and the parent
|
|
98
|
-
> wave aggregator records the Story as failed. The script is idempotent on
|
|
99
|
-
> partial state, so the recovery is to re-run it synchronously, but
|
|
100
|
-
> prevention is cheaper: just give Bash the 10-minute timeout and block.
|
|
101
|
-
|
|
102
|
-
The script validates `type::story`, checks blockers, resolves the parent
|
|
103
|
-
Epic id, seeds `story-<id>` from the
|
|
104
|
-
Epic branch, and (when worktree isolation is on) runs `git worktree add`
|
|
105
|
-
at `.worktrees/story-<id>/`. The Story flips to `agent::executing`. A
|
|
106
|
-
`story-init` structured comment is upserted with the Story's inline
|
|
107
|
-
`acceptance[]` and `verify[]` arrays from the body.
|
|
108
|
-
|
|
109
|
-
Capture `workCwd`, `dependenciesInstalled` (tri-state), and
|
|
110
|
-
`context.parentId`. Add `--dry-run` to check
|
|
111
|
-
status without git or ticket changes.
|
|
112
|
-
|
|
113
|
-
### Step 0.5 — `cd` into the workCwd
|
|
114
|
-
|
|
115
|
-
```bash
|
|
116
|
-
cd "<workCwd from Step 0 result>"
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
All subsequent commands run from this directory. The `dependenciesInstalled`
|
|
120
|
-
tri-state carries one of three values:
|
|
121
|
-
|
|
122
|
-
| Value | Meaning | Action |
|
|
123
|
-
| --------- | ---------------------------------------------------------------------------------- | --------------------------------------------------- |
|
|
124
|
-
| `true` | Per-worktree install ran and succeeded. | Proceed. |
|
|
125
|
-
| `false` | Install was attempted and failed. | The next CLI runs the install before proceeding. |
|
|
126
|
-
| `skipped` | No per-worktree install (single-tree, reused worktree, `symlink`, `pnpm-store`). | Trust the strategy. |
|
|
127
|
-
|
|
128
|
-
### Step 0.6 — Initial `story-run-progress` snapshot
|
|
129
|
-
|
|
130
|
-
Story #4017 inlined the former standalone prepare CLI into
|
|
131
|
-
`story-init.js`: Step 0's init run already applied the install tri-state
|
|
132
|
-
in-process (retrying the install command when
|
|
133
|
-
`dependenciesInstalled === 'false'`, default `npm ci`) and rendered the
|
|
134
|
-
initial snapshot (`phase: "init"`). There is no separate command to run.
|
|
135
|
-
|
|
136
|
-
Step 0's init run already upserted the initial `story-run-progress`
|
|
137
|
-
snapshot (`phase: "init"`) as a structured comment on the Story — that
|
|
138
|
-
comment, refreshed by `story-phase.js` at each transition, is the
|
|
139
|
-
authoritative Story-level rollup the parent `/deliver` aggregator reads.
|
|
140
|
-
You do **not** relay `prepare.renderedBody` verbatim to chat. Instead,
|
|
141
|
-
relay **one line per phase transition** (e.g. `Story #<id>: init →
|
|
142
|
-
implementing`), and do the same after every transition in Step 1 / Step 3.
|
|
143
|
-
The snapshot CLI carries the full body; the chat line is a terse progress
|
|
144
|
-
delta, not a body dump.
|
|
145
|
-
|
|
146
|
-
---
|
|
147
|
-
|
|
148
|
-
## Step 1 — Story implementation
|
|
149
|
-
|
|
150
|
-
Run a single Story-implementation phase against the inline `acceptance[]`
|
|
151
|
-
/ `verify[]` arrays on the Story body.
|
|
152
|
-
|
|
153
|
-
1. Flip the snapshot to the `implementing` phase. Pass `--epic <epicId>`
|
|
154
|
-
and `--branch story-<storyId>` from the Step 0 envelope so the render
|
|
155
|
-
skips the `readEpicIdFromStory` / `resolveStoryBranch` GitHub reads
|
|
156
|
-
(pass these same flags to **every** `story-phase.js` call below):
|
|
157
|
-
|
|
158
|
-
```bash
|
|
159
|
-
node .agents/scripts/story-phase.js \
|
|
160
|
-
--story <storyId> --epic <epicId> --branch story-<storyId> \
|
|
161
|
-
--phase implementing
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
2. Read the Story body's inline `acceptance[]` and `verify[]` arrays
|
|
165
|
-
from the `story-init` structured comment (`context.acceptance`,
|
|
166
|
-
`context.verify`). Treat the acceptance items as the contract and
|
|
167
|
-
the verify items as the canonical at-keyboard checks.
|
|
168
|
-
|
|
169
|
-
**Docs context — read the digest, not the full set.** Do **not**
|
|
170
|
-
re-read every file in `project.docsContextFiles`. The parent prompt
|
|
171
|
-
passes a `docsDigestPath` (the per-Epic docs digest at
|
|
172
|
-
`temp/epic-<epicId>/docs-digest.md`, written by
|
|
173
|
-
`epic-deliver-prepare.js`). Read that digest — a compact per-file
|
|
174
|
-
outline (path, size, heading outline with line numbers, first
|
|
175
|
-
paragraph under each `##`) — to decide which docs bear on this Story,
|
|
176
|
-
then **pull the full file on demand** (jump to the section at the line
|
|
177
|
-
number the digest names) only when relevant. When `docsDigestPath` is
|
|
178
|
-
null (the project configured no `docsContextFiles`), there is no
|
|
179
|
-
digest and no per-Story docs mandate — read a full doc only if the
|
|
180
|
-
Story's own context points you at one. See
|
|
181
|
-
[`.agents/instructions.md` § 3](../../instructions.md).
|
|
182
|
-
|
|
183
|
-
**Write-time audit checklists — read the threaded `checklistPath`.**
|
|
184
|
-
When the parent prompt passes a `checklistPath` (Story #4410 — the
|
|
185
|
-
repo-relative path to this Story's footprint-matched **local**-lens
|
|
186
|
-
authoring checklists at
|
|
187
|
-
`temp/epic-<epicId>/checklists/story-<storyId>.md`), read it before you
|
|
188
|
-
write and self-check your change against each listed concern as you
|
|
189
|
-
author it. These are the local audit lenses whose `filePatterns` matched
|
|
190
|
-
the Story's predicted footprint, distilled to a short checklist and
|
|
191
|
-
capped at a hard token budget by `epic-deliver-prepare.js` (matched via
|
|
192
|
-
`resolveLensTier(lens) === 'local'` + `matchesAnyFilePattern`, never
|
|
193
|
-
`selectAudits` — no provider or git diff runs on that path). When
|
|
194
|
-
`checklistPath` is null or absent, the Story's footprint matched no local
|
|
195
|
-
lens and there is nothing extra to read.
|
|
196
|
-
|
|
197
|
-
3. Implement the work as one or more commits on `story-<storyId>`.
|
|
198
|
-
Author commits directly with the project's editor / `git commit`,
|
|
199
|
-
following
|
|
200
|
-
[`.agents/rules/git-conventions.md`](../../rules/git-conventions.md):
|
|
201
|
-
- Conventional Commit subject (`feat:`, `fix:`, …).
|
|
202
|
-
- Reference the parent Story via `(refs #<storyId>)` in the subject
|
|
203
|
-
or body.
|
|
204
|
-
- The `commit-msg` Husky hook enforces commitlint locally.
|
|
205
|
-
|
|
206
|
-
4. After the final commit lands, run the **bounded acceptance self-eval
|
|
207
|
-
loop** (Step 1a below) **before** flipping to `closing`. The
|
|
208
|
-
`verify[]` commands are consumed inside that loop as **required
|
|
209
|
-
evidence** — they are no longer optional advisory pre-flight.
|
|
210
|
-
|
|
211
|
-
5. Once the eval loop returns `proceed`, flip the snapshot to `closing`
|
|
212
|
-
and proceed to Step 3 (Step 3 invokes close directly — it no longer
|
|
213
|
-
re-renders the `closing` snapshot, so this is the single `closing`
|
|
214
|
-
render):
|
|
215
|
-
|
|
216
|
-
```bash
|
|
217
|
-
node .agents/scripts/story-phase.js \
|
|
218
|
-
--story <storyId> --epic <epicId> --branch story-<storyId> \
|
|
219
|
-
--phase closing
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
6. If blocked (including by the eval loop reaching its round cap with
|
|
223
|
-
criteria still unmet — Step 1a), flip the snapshot to `blocked`,
|
|
224
|
-
transition the Story to `agent::blocked`, post a `friction` comment,
|
|
225
|
-
and exit non-zero:
|
|
226
|
-
|
|
227
|
-
```bash
|
|
228
|
-
node .agents/scripts/story-phase.js \
|
|
229
|
-
--story <storyId> --epic <epicId> --branch story-<storyId> \
|
|
230
|
-
--phase blocked
|
|
231
|
-
```
|
|
232
|
-
|
|
233
|
-
### Step 1a — Bounded acceptance self-eval loop (**required, not optional**)
|
|
234
|
-
|
|
235
|
-
After the implementation commits land and **before** the snapshot flips to
|
|
236
|
-
`closing`, run the bounded acceptance self-eval loop. The per-round critic
|
|
237
|
-
mechanic (fresh-context critic, `verify[]`-as-evidence, the verdict schema, and
|
|
238
|
-
the proceed / redraft / block decision) is the single-homed include
|
|
239
|
-
[`acceptance-self-eval.md`](acceptance-self-eval.md) — read it and follow it.
|
|
240
|
-
The critic reads the Story's inline `acceptance[]` / `verify[]` arrays from the
|
|
241
|
-
`story-init` comment (`context.acceptance` / `context.verify`).
|
|
242
|
-
|
|
243
|
-
Epic-attached specifics for this path:
|
|
244
|
-
|
|
245
|
-
- **Critic evidence-share** (Story #4250). When the critic runs a `verify[]`
|
|
246
|
-
command that is byte-identical to a close gate (`lint` / `typecheck`), it
|
|
247
|
-
records the pass into the Epic-keyed evidence keyspace via `--epic-id
|
|
248
|
-
<epicId>` so `story-close.js` short-circuits the gate at unchanged HEAD.
|
|
249
|
-
Run it in the **Story worktree** (`.worktrees/story-<storyId>`):
|
|
250
|
-
|
|
251
|
-
```bash
|
|
252
|
-
node .agents/scripts/evidence-gate.js \
|
|
253
|
-
--epic-id <epicId> --scope-id <storyId> --gate lint \
|
|
254
|
-
--worktree .worktrees/story-<storyId> -- npm run lint
|
|
255
|
-
```
|
|
256
|
-
|
|
257
|
-
- **Gate invocation** (pass `--epic <epicId>` so the per-criterion signal lands
|
|
258
|
-
on the Epic-scoped stream):
|
|
259
|
-
|
|
260
|
-
```bash
|
|
261
|
-
node .agents/scripts/acceptance-eval.js \
|
|
262
|
-
--story <storyId> --epic <epicId> --verdict <verdict-path>
|
|
263
|
-
```
|
|
264
|
-
|
|
265
|
-
- **On `decision: "proceed"`** → flip the snapshot to `closing` (item 5 above).
|
|
266
|
-
- **On `decision: "block"`** → take the blocked path (item 6 above): post a
|
|
267
|
-
`friction` comment naming the unmet criteria and their evidence, flip the
|
|
268
|
-
snapshot to `blocked`, and exit non-zero. Never silently proceed to close.
|
|
269
|
-
|
|
270
|
-
The resume guard is expressed at the Story level: re-entering a
|
|
271
|
-
partially-implemented Story picks up from whatever commits are already
|
|
272
|
-
on `story-<storyId>`; the agent inspects `git log` to decide what work
|
|
273
|
-
remains.
|
|
274
|
-
|
|
275
|
-
After each `story-phase.js` call, relay **one line naming the phase
|
|
276
|
-
transition** (e.g. `Story #<id>: implementing → closing`) as the Story's
|
|
277
|
-
progress update — not the envelope's `renderedBody` verbatim. The
|
|
278
|
-
`story-phase.js` CLI has already upserted the full body into the
|
|
279
|
-
`story-run-progress` snapshot; that comment is the authoritative rollup
|
|
280
|
-
the parent `/deliver` aggregator reads. Skip chat relay entirely when
|
|
281
|
-
running in a non-interactive sub-agent context where the parent will
|
|
282
|
-
aggregate.
|
|
283
|
-
|
|
284
|
-
> Rebase pauses on conflicts → follow
|
|
285
|
-
> [`_merge-conflict-template.md`](_merge-conflict-template.md).
|
|
286
|
-
|
|
287
|
-
---
|
|
288
|
-
|
|
289
|
-
## Step 2 — Validate (deferred to close)
|
|
290
|
-
|
|
291
|
-
`story-close.js` runs the canonical close-validation chain (typecheck,
|
|
292
|
-
lint, test, format, maintainability, coverage, crap) before it merges —
|
|
293
|
-
**do not** pre-run those gates here unless interactively iterating on a
|
|
294
|
-
fix. (Interactively, `npm run typecheck && npm run lint && npm test` is
|
|
295
|
-
fine as advisory pre-flight.)
|
|
296
|
-
|
|
297
|
-
---
|
|
298
|
-
|
|
299
|
-
## Step 3 — Close (`story-close.js`)
|
|
300
|
-
|
|
301
|
-
Step 1 item 5 already flipped the snapshot to the `closing` phase, so this
|
|
302
|
-
step does **not** re-render it (the duplicate render was removed). Invoke
|
|
303
|
-
close directly. Pass the parent Epic id via `--epic <epicId>` from the
|
|
304
|
-
Step 0 envelope so close skips re-parsing the Epic hierarchy off the
|
|
305
|
-
Story body (which also closes the malformed-`Epic:`-line failure mode).
|
|
306
|
-
Pass the main-checkout path via `--cwd` so the merge and branch deletion
|
|
307
|
-
run against the main repo (branches checked out in a worktree cannot be
|
|
308
|
-
deleted from themselves):
|
|
309
|
-
|
|
310
|
-
```bash
|
|
311
|
-
node <main-repo>/.agents/scripts/story-close.js \
|
|
312
|
-
--story <storyId> --epic <epicId> --cwd <main-repo>
|
|
313
|
-
```
|
|
314
|
-
|
|
315
|
-
In single-tree mode, `--cwd` defaults to `PROJECT_ROOT`. The script merges
|
|
316
|
-
into `epic/<epicId>` (`--no-ff`), pushes the Epic branch, deletes the
|
|
317
|
-
Story branch, reaps the worktree via `WorktreeManager.reap`, closes the
|
|
318
|
-
Story to `agent::done`, runs `cascadeCompletion()`, and regenerates the
|
|
319
|
-
Epic dispatch manifest (`--skip-dashboard` to suppress). Output is JSON
|
|
320
|
-
with `ticketsClosed[]`, `cascadedTo[]`, and reap status.
|
|
321
|
-
|
|
322
|
-
> **Why not GitHub auto-close?** `Closes #N` only fires on default-branch
|
|
323
|
-
> merges; close fires the state writer explicitly.
|
|
324
|
-
|
|
325
|
-
After close, upsert a terminal snapshot:
|
|
326
|
-
|
|
327
|
-
```bash
|
|
328
|
-
node .agents/scripts/story-phase.js \
|
|
329
|
-
--story <storyId> --epic <epicId> --branch story-<storyId> \
|
|
330
|
-
--phase done
|
|
331
|
-
```
|
|
332
|
-
|
|
333
|
-
---
|
|
334
|
-
|
|
335
|
-
## Step 4 — Return contract (sub-agent path)
|
|
336
|
-
|
|
337
|
-
When run as a sub-agent, return one JSON object:
|
|
338
|
-
|
|
339
|
-
```json
|
|
340
|
-
{
|
|
341
|
-
"storyId": <number>,
|
|
342
|
-
"status": "done" | "blocked" | "failed",
|
|
343
|
-
"phase": "init|implementing|closing|blocked|done",
|
|
344
|
-
"branchDeleted": <boolean>,
|
|
345
|
-
"blockerCommentId": <string|null>,
|
|
346
|
-
"detail": <string|undefined>,
|
|
347
|
-
"renderedBody": <string|undefined>
|
|
348
|
-
}
|
|
349
|
-
```
|
|
350
|
-
|
|
351
|
-
`status === 'done'` requires the Story closed and
|
|
352
|
-
`branchDeleted: true`.
|
|
353
|
-
|
|
354
|
-
> **Handoff discipline — report state, not process.** Populate the return
|
|
355
|
-
> object with essential terminal state only: the Story branch, the closing
|
|
356
|
-
> commit SHA, what changed, and what was verified (this maps onto the
|
|
357
|
-
> existing `storyId` / `branchDeleted` / `phase` / `detail` /
|
|
358
|
-
> `renderedBody` fields — do **not** add new envelope fields). Do not
|
|
359
|
-
> narrate the steps you took to get there, and do not prescribe how
|
|
360
|
-
> `/deliver`'s aggregator should do its job downstream. The parent
|
|
361
|
-
> reads structured state from this envelope and the `story-run-progress`
|
|
362
|
-
> snapshot; prose process commentary only bloats the hydrated prompt
|
|
363
|
-
> (`delivery.maxTokenBudget` elision).
|
|
364
|
-
|
|
365
|
-
`branchDeleted` is sourced from the `branchDeleted` field of the
|
|
366
|
-
`story-close.js` result envelope. It is **independent** of
|
|
367
|
-
`worktreeReap.status` — every reap outcome the close reports (including
|
|
368
|
-
the Windows-only `stale-registry-entry`, which queues a pending-cleanup
|
|
369
|
-
entry for the next drain) is operationally complete. `status: 'done'` is
|
|
370
|
-
appropriate when the Story is closed and `branchDeleted: true`,
|
|
371
|
-
regardless of the reap status.
|
|
372
|
-
|
|
373
|
-
`renderedBody` is the **most recent** `renderedBody` returned by
|
|
374
|
-
`story-phase.js` (typically the `phase: 'done'` snapshot at close,
|
|
375
|
-
or the `phase: 'blocked'` snapshot on a blocker). The parent
|
|
376
|
-
`/deliver` may inline a digest of this in its wave-level Notable
|
|
377
|
-
section. When run interactively (no parent), omit it — the authoritative
|
|
378
|
-
body lives in the `story-run-progress` snapshot the phase CLI upserted,
|
|
379
|
-
and the chat already carries the per-transition progress lines from
|
|
380
|
-
Step 1 / Step 3.
|
|
381
|
-
|
|
382
|
-
---
|
|
383
|
-
|
|
384
|
-
## Idempotence
|
|
385
|
-
|
|
386
|
-
`story-init.js` re-prints the same `workCwd` without recreating the
|
|
387
|
-
worktree. `story-run-progress` is upserted in place. `story-close.js`
|
|
388
|
-
short-circuits when the Story branch is already merged and deleted. Re-
|
|
389
|
-
running this helper against an already-closed Story is safe.
|
|
390
|
-
|
|
391
|
-
---
|
|
392
|
-
|
|
393
|
-
## Constraints
|
|
394
|
-
|
|
395
|
-
- **MUST merge into `epic/<epicId>`, never `main`.** The Story branch's
|
|
396
|
-
only integration target is the parent Epic's integration branch. If
|
|
397
|
-
`story-close.js` short-circuits, no-ops, or otherwise fails to merge,
|
|
398
|
-
**do NOT** fall back to `gh pr create --base main`, **do NOT** invoke
|
|
399
|
-
`/deliver` on the same Story, and **do NOT** open a PR by
|
|
400
|
-
hand against `main`. Such a PR orphans the change on `main` and forces
|
|
401
|
-
a manual `git merge origin/main` back into `epic/<id>` to recover (the
|
|
402
|
-
Epic #2880 wave-5 / Story #2960 friction note). The framework refuses
|
|
403
|
-
these PRs via the `pr-base-guard` helper wired into every
|
|
404
|
-
`createPullRequest` surface; a raw shell `gh pr create` is the only
|
|
405
|
-
way to bypass it, and you must not. Diagnose the no-op (was the
|
|
406
|
-
branch already merged? is the ticket already closed? is the worktree
|
|
407
|
-
on the wrong HEAD?) and re-run close, or transition the Story to
|
|
408
|
-
`agent::blocked` with a `friction` comment so the operator can
|
|
409
|
-
resolve it.
|
|
410
|
-
- **Never** push the Story branch directly to `main`. `story-close.js` is
|
|
411
|
-
the only writer that integrates upstream, and only into `epic/<epicId>`.
|
|
412
|
-
- **Never** merge across Story branches; cross-Story dependencies are
|
|
413
|
-
resolved by wave ordering via `blocked by`.
|
|
414
|
-
- **Always** `cd` into the `workCwd` returned by Step 0 before editing, and
|
|
415
|
-
prefix every path-based Edit/Write/Read with that absolute `workCwd` root —
|
|
416
|
-
the Edit tools ignore the shell cwd. The worktree pins the branch to
|
|
417
|
-
`story-<storyId>`, so there is no need to re-check `git branch` before each
|
|
418
|
-
commit.
|
|
419
|
-
- **Always** upsert a `story-run-progress` snapshot at every phase
|
|
420
|
-
transition. The wave aggregator depends on this comment, not labels.
|
|
421
|
-
- **Always** pass `--cwd <main-repo>` to `story-close.js` when invoking
|
|
422
|
-
from inside a worktree.
|
|
423
|
-
- **Label transitions**: drive every `agent::*` state change through
|
|
424
|
-
`node .agents/scripts/update-ticket-state.js --ticket <id> --state <state>`.
|
|
425
|
-
This CLI is the authoritative mechanism — there is no separate
|
|
426
|
-
state-mutation MCP server to degrade from (see
|
|
427
|
-
[`.agents/instructions.md` § 1.D](../../instructions.md)).
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: QA Epic-testing workflow — ingest the agent-driven QA harness sweep as Epic evidence
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Epic Testing (helper)
|
|
6
|
-
|
|
7
|
-
> **Helper module.** Not a slash command. Invoked from the QA gate during
|
|
8
|
-
> `/deliver` or directly by an operator when the Epic-testing ticket
|
|
9
|
-
> needs refreshed evidence. For ad-hoc acceptance runs use `/qa-run` —
|
|
10
|
-
> this helper owns the Epic-evidence ticket lifecycle on top of it.
|
|
11
|
-
|
|
12
|
-
Gather and attach the acceptance-suite evidence that gates Epic closure. The
|
|
13
|
-
evidence artifact is the **agent-driven QA harness sweep report** produced by
|
|
14
|
-
`/qa-run` (scenario pass/fail/blocked totals plus structured
|
|
15
|
-
findings), **not** a hand-ticked markdown checklist.
|
|
16
|
-
|
|
17
|
-
> **When to run**: During the QA phase of an Epic, after all Story merges
|
|
18
|
-
> have landed on the Epic branch and before `/deliver`. Also run ad-hoc
|
|
19
|
-
> when a regression is suspected mid-Epic.
|
|
20
|
-
>
|
|
21
|
-
> **Persona**: `qa-engineer` · **Skills**:
|
|
22
|
-
> `stack/qa/gherkin-authoring`, `stack/qa/playwright-bdd`
|
|
23
|
-
|
|
24
|
-
## Step 0 — Resolve Context
|
|
25
|
-
|
|
26
|
-
1. Identify the Epic-testing ticket for the current Epic (the QA evidence
|
|
27
|
-
ticket produced by Epic planning).
|
|
28
|
-
2. Confirm the Epic branch is green: all child Story branches merged, CI
|
|
29
|
-
passing.
|
|
30
|
-
3. Decide the tag slice to run:
|
|
31
|
-
- Epic-wide regression gate → `@smoke and @risk-high` (or the project's
|
|
32
|
-
equivalent release gate expression).
|
|
33
|
-
- Targeted domain pass → `@domain-<area>`.
|
|
34
|
-
- Full acceptance sweep → omit the tag expression.
|
|
35
|
-
|
|
36
|
-
The canonical taxonomy lives in `.agents/rules/gherkin-standards.md`. Do
|
|
37
|
-
not invent new tags here.
|
|
38
|
-
|
|
39
|
-
## Step 1 — Execute the QA Harness Sweep
|
|
40
|
-
|
|
41
|
-
Invoke `/qa-run` with the chosen selector:
|
|
42
|
-
|
|
43
|
-
```text
|
|
44
|
-
/qa-run "tag:@smoke and @risk-high"
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
The `/qa-run` workflow (`.agents/workflows/qa-run.md`) owns the
|
|
48
|
-
execution mechanics — `qa` contract resolution, scenario selection, browser
|
|
49
|
-
navigation, and finding capture. This workflow consumes its output.
|
|
50
|
-
|
|
51
|
-
If the consuming project runs the suite through its own CI invocation rather
|
|
52
|
-
than the slash command, treat the CI run as equivalent provided it produces
|
|
53
|
-
the same scenario totals and structured findings.
|
|
54
|
-
|
|
55
|
-
## Step 2 — Collect the Evidence Artifact
|
|
56
|
-
|
|
57
|
-
The evidence package for the Epic-testing ticket is:
|
|
58
|
-
|
|
59
|
-
- **Sweep summary** — selector applied, scenario totals (passed / failed /
|
|
60
|
-
blocked), and the commit SHA the sweep ran against. Required.
|
|
61
|
-
- **Structured findings** — the `F#` findings bundle the harness emits
|
|
62
|
-
(console / network / visual problems by surface). Required.
|
|
63
|
-
- **Accessibility snapshots / traces** — for every failed or blocked scenario.
|
|
64
|
-
Required on failure.
|
|
65
|
-
- **Drafted follow-up bundle** — the proposed follow-up tickets awaiting
|
|
66
|
-
operator sign-off, when the sweep surfaced findings.
|
|
67
|
-
|
|
68
|
-
Store the artifacts where your project's evidence convention dictates (CI
|
|
69
|
-
artifact store, object storage, or attached to the ticket directly). Link —
|
|
70
|
-
do not paste — large artifacts.
|
|
71
|
-
|
|
72
|
-
## Step 3 — Attach and Transition
|
|
73
|
-
|
|
74
|
-
1. Comment on the Epic-testing ticket with:
|
|
75
|
-
- The sweep summary from Step 2.
|
|
76
|
-
- Links (or attachments) to the structured findings, accessibility
|
|
77
|
-
snapshots, and any traces.
|
|
78
|
-
- The commit SHA the sweep executed against.
|
|
79
|
-
2. If every scenario passed (no `failed`, no `blocked`), transition the
|
|
80
|
-
Epic-testing ticket to `agent::done`.
|
|
81
|
-
3. If any scenario failed or is blocked, leave the ticket in its current
|
|
82
|
-
state and open a follow-up ticket per failure with:
|
|
83
|
-
- Scenario name and `.feature` file path.
|
|
84
|
-
- One-line symptom.
|
|
85
|
-
- Link to the failing scenario's snapshot or trace.
|
|
86
|
-
|
|
87
|
-
Do not close the Epic-testing ticket on a failed run. `/deliver`
|
|
88
|
-
depends on green evidence.
|
|
89
|
-
|
|
90
|
-
## Deprecated — Markdown Checklist Flow
|
|
91
|
-
|
|
92
|
-
Earlier revisions of this workflow asked the QA reviewer to tick items in a
|
|
93
|
-
hand-maintained markdown checklist (`epic-<id>/test-plan.md`) and attach
|
|
94
|
-
that file as evidence. **That flow is deprecated.** Reasons:
|
|
95
|
-
|
|
96
|
-
- Hand-ticked checklists drift from the code and cannot be re-executed.
|
|
97
|
-
- They do not capture scenario-level pass/fail state, traces, or the SHA the
|
|
98
|
-
run targeted.
|
|
99
|
-
- They are not machine-readable, so downstream aggregation and trend
|
|
100
|
-
reporting are impossible.
|
|
101
|
-
|
|
102
|
-
The QA harness sweep replaces the checklist as the single evidence artifact.
|
|
103
|
-
Projects still maintaining a checklist should migrate by authoring the
|
|
104
|
-
equivalent scenarios in Gherkin (see the `stack/qa/gherkin-authoring` skill)
|
|
105
|
-
and deleting the checklist in the same change.
|
|
106
|
-
|
|
107
|
-
## Constraints
|
|
108
|
-
|
|
109
|
-
- **Never** substitute a hand-authored checklist or prose summary for the
|
|
110
|
-
harness sweep. The evidence must be the output of an actual run.
|
|
111
|
-
- **Never** close the Epic-testing ticket while any scenario is `failed` or
|
|
112
|
-
`blocked`.
|
|
113
|
-
- **Always** record the commit SHA the sweep ran against, so the evidence is
|
|
114
|
-
pinned to a verifiable tree state.
|
|
115
|
-
- **Always** link a snapshot or trace for failed scenarios; a failure without
|
|
116
|
-
evidence is not actionable.
|
|
117
|
-
|
|
118
|
-
## Cross-References
|
|
119
|
-
|
|
120
|
-
- Execution mechanics: `.agents/workflows/qa-run.md`.
|
|
121
|
-
- Scenario authoring rules: `.agents/rules/gherkin-standards.md`.
|
|
122
|
-
- Runner / fixture / trace conventions:
|
|
123
|
-
`.agents/skills/stack/qa/playwright-bdd/SKILL.md`.
|
|
124
|
-
- Tier responsibilities (unit / contract / acceptance):
|
|
125
|
-
`.agents/rules/testing-standards.md`.
|