mandrel 1.57.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 +954 -0
- package/.agents/docs/SDLC.md +1420 -0
- package/.agents/docs/agentrc-reference.json +278 -0
- package/.agents/docs/configuration.md +1040 -0
- package/.agents/docs/workflows.md +59 -0
- package/.agents/instructions.md +384 -0
- package/.agents/personas/architect.md +107 -0
- package/.agents/personas/devops-engineer.md +36 -0
- package/.agents/personas/engineer-mobile.md +119 -0
- package/.agents/personas/engineer-web.md +110 -0
- package/.agents/personas/engineer.md +90 -0
- package/.agents/personas/product.md +88 -0
- package/.agents/personas/project-manager.md +110 -0
- package/.agents/personas/qa-engineer.md +91 -0
- package/.agents/personas/refactorer.md +110 -0
- package/.agents/personas/security-engineer.md +112 -0
- package/.agents/personas/sre.md +86 -0
- package/.agents/personas/technical-writer.md +100 -0
- package/.agents/personas/ux-designer.md +95 -0
- package/.agents/rules/api-conventions.md +75 -0
- package/.agents/rules/changelog-style.md +238 -0
- package/.agents/rules/gherkin-standards.md +146 -0
- package/.agents/rules/git-conventions.md +146 -0
- package/.agents/rules/orchestration-error-handling.md +35 -0
- package/.agents/rules/security-baseline.md +92 -0
- package/.agents/rules/shell-conventions.md +70 -0
- package/.agents/rules/test-seams.md +59 -0
- package/.agents/rules/testing-standards.md +177 -0
- package/.agents/runtime-deps.json +18 -0
- package/.agents/schemas/acceptance-eval-verdict.schema.json +93 -0
- package/.agents/schemas/agentrc.schema.json +1583 -0
- package/.agents/schemas/audit-results.schema.json +69 -0
- package/.agents/schemas/audit-rules.json +134 -0
- package/.agents/schemas/audit-rules.schema.json +69 -0
- package/.agents/schemas/baselines/baseline-envelope.schema.json +44 -0
- package/.agents/schemas/baselines/bundle-size.schema.json +47 -0
- package/.agents/schemas/baselines/coverage.schema.json +50 -0
- package/.agents/schemas/baselines/crap.schema.json +52 -0
- package/.agents/schemas/baselines/duplication.schema.json +62 -0
- package/.agents/schemas/baselines/lighthouse.schema.json +59 -0
- package/.agents/schemas/baselines/lint.schema.json +47 -0
- package/.agents/schemas/baselines/maintainability.schema.json +71 -0
- package/.agents/schemas/baselines/mutation.schema.json +52 -0
- package/.agents/schemas/crap-baseline.schema.json +57 -0
- package/.agents/schemas/crap-report.schema.json +102 -0
- package/.agents/schemas/dispatch-manifest.json +232 -0
- package/.agents/schemas/epic-perf-report.schema.json +89 -0
- package/.agents/schemas/epic-spec.schema.json +183 -0
- package/.agents/schemas/friction-event.schema.json +56 -0
- package/.agents/schemas/lifecycle/README.md +18 -0
- package/.agents/schemas/lifecycle/acceptance.reconcile.failed.schema.json +13 -0
- package/.agents/schemas/lifecycle/acceptance.reconcile.ok.schema.json +13 -0
- package/.agents/schemas/lifecycle/acceptance.reconcile.skipped.schema.json +13 -0
- package/.agents/schemas/lifecycle/acceptance.reconcile.start.schema.json +12 -0
- package/.agents/schemas/lifecycle/acceptance.reconcile.waived.schema.json +13 -0
- package/.agents/schemas/lifecycle/checkpoint.written.schema.json +13 -0
- package/.agents/schemas/lifecycle/close-validate.end.schema.json +18 -0
- package/.agents/schemas/lifecycle/close-validate.start.schema.json +13 -0
- package/.agents/schemas/lifecycle/code-review.end.schema.json +30 -0
- package/.agents/schemas/lifecycle/code-review.start.schema.json +12 -0
- package/.agents/schemas/lifecycle/epic.automerge.end.schema.json +14 -0
- package/.agents/schemas/lifecycle/epic.automerge.start.schema.json +13 -0
- package/.agents/schemas/lifecycle/epic.blocked.schema.json +13 -0
- package/.agents/schemas/lifecycle/epic.cleanup.end.schema.json +12 -0
- package/.agents/schemas/lifecycle/epic.cleanup.start.schema.json +12 -0
- package/.agents/schemas/lifecycle/epic.close.end.schema.json +12 -0
- package/.agents/schemas/lifecycle/epic.complete.schema.json +13 -0
- package/.agents/schemas/lifecycle/epic.finalize.end.schema.json +13 -0
- package/.agents/schemas/lifecycle/epic.finalize.start.schema.json +12 -0
- package/.agents/schemas/lifecycle/epic.merge.armed.schema.json +13 -0
- package/.agents/schemas/lifecycle/epic.merge.blocked.schema.json +14 -0
- package/.agents/schemas/lifecycle/epic.merge.confirmed.schema.json +17 -0
- package/.agents/schemas/lifecycle/epic.merge.ready.schema.json +15 -0
- package/.agents/schemas/lifecycle/epic.plan.end.schema.json +18 -0
- package/.agents/schemas/lifecycle/epic.plan.start.schema.json +12 -0
- package/.agents/schemas/lifecycle/epic.snapshot.end.schema.json +16 -0
- package/.agents/schemas/lifecycle/epic.snapshot.start.schema.json +12 -0
- package/.agents/schemas/lifecycle/epic.watch.end.schema.json +28 -0
- package/.agents/schemas/lifecycle/epic.watch.start.schema.json +16 -0
- package/.agents/schemas/lifecycle/intervention.recorded.schema.json +15 -0
- package/.agents/schemas/lifecycle/ledger-record.schema.json +59 -0
- package/.agents/schemas/lifecycle/notification.emitted.schema.json +18 -0
- package/.agents/schemas/lifecycle/pr.created.schema.json +14 -0
- package/.agents/schemas/lifecycle/retro.end.schema.json +16 -0
- package/.agents/schemas/lifecycle/retro.start.schema.json +12 -0
- package/.agents/schemas/lifecycle/story.blocked.schema.json +13 -0
- package/.agents/schemas/lifecycle/story.dispatch.end.schema.json +17 -0
- package/.agents/schemas/lifecycle/story.dispatch.start.schema.json +15 -0
- package/.agents/schemas/lifecycle/story.heartbeat.schema.json +20 -0
- package/.agents/schemas/lifecycle/story.merged.schema.json +13 -0
- package/.agents/schemas/mi-report.schema.json +58 -0
- package/.agents/schemas/model-attribution.schema.json +49 -0
- package/.agents/schemas/qa-finding.schema.json +133 -0
- package/.agents/schemas/qa-ledger.schema.json +89 -0
- package/.agents/schemas/risk-verdict.schema.json +53 -0
- package/.agents/schemas/signal-event.schema.json +58 -0
- package/.agents/schemas/skill.schema.json +31 -0
- package/.agents/schemas/skills-index.schema.json +81 -0
- package/.agents/schemas/story-perf-summary.schema.json +73 -0
- package/.agents/schemas/validation-evidence.schema.json +78 -0
- package/.agents/scripts/README.md +93 -0
- package/.agents/scripts/acceptance-eval.js +284 -0
- package/.agents/scripts/acceptance-spec-reconciler.js +556 -0
- package/.agents/scripts/agents-bootstrap-github.js +634 -0
- package/.agents/scripts/analyze-execution.js +369 -0
- package/.agents/scripts/assert-branch.js +83 -0
- package/.agents/scripts/audit-labels-bootstrap.js +253 -0
- package/.agents/scripts/audit-to-stories.js +257 -0
- package/.agents/scripts/bootstrap.js +1378 -0
- package/.agents/scripts/check-baselines.js +81 -0
- package/.agents/scripts/check-dead-exports.js +311 -0
- package/.agents/scripts/check-doc-links.js +401 -0
- package/.agents/scripts/check-gherkin-placeholders.js +663 -0
- package/.agents/scripts/check-lifecycle-doc-drift.js +402 -0
- package/.agents/scripts/check-lifecycle-lint.js +379 -0
- package/.agents/scripts/check-prepush-recovery.js +90 -0
- package/.agents/scripts/check-windows-git-perf.js +138 -0
- package/.agents/scripts/cleanup-repo-test-temp.js +67 -0
- package/.agents/scripts/coverage-capture.js +112 -0
- package/.agents/scripts/detect-merges.js +111 -0
- package/.agents/scripts/diagnose-friction.js +257 -0
- package/.agents/scripts/diagnose.js +240 -0
- package/.agents/scripts/dispatcher.js +295 -0
- package/.agents/scripts/drain-pending-cleanup.js +147 -0
- package/.agents/scripts/epic-audit-prepare.js +419 -0
- package/.agents/scripts/epic-audit-recheck.js +241 -0
- package/.agents/scripts/epic-deliver-note-intervention.js +192 -0
- package/.agents/scripts/epic-deliver-preflight.js +407 -0
- package/.agents/scripts/epic-deliver-prepare.js +383 -0
- package/.agents/scripts/epic-execute-record-wave.js +463 -0
- package/.agents/scripts/epic-plan-clarity.js +201 -0
- package/.agents/scripts/epic-plan-decompose.js +79 -0
- package/.agents/scripts/epic-plan-healthcheck.js +363 -0
- package/.agents/scripts/epic-plan-spec-validate.js +111 -0
- package/.agents/scripts/epic-plan-spec.js +198 -0
- package/.agents/scripts/epic-reconcile.js +637 -0
- package/.agents/scripts/evidence-gate.js +235 -0
- package/.agents/scripts/generate-config-docs.js +516 -0
- package/.agents/scripts/generate-lifecycle-docs.js +224 -0
- package/.agents/scripts/generate-skills-index.js +252 -0
- package/.agents/scripts/generate-workflows-doc.js +168 -0
- package/.agents/scripts/git-cleanup.js +124 -0
- package/.agents/scripts/git-pr-quality-gate.js +203 -0
- package/.agents/scripts/git-rebase-and-resolve.js +234 -0
- package/.agents/scripts/hierarchy-gate.js +176 -0
- package/.agents/scripts/hydrate-context.js +179 -0
- package/.agents/scripts/install-matrix-assert.js +282 -0
- package/.agents/scripts/lib/Graph.js +326 -0
- package/.agents/scripts/lib/ITicketingProvider.js +349 -0
- package/.agents/scripts/lib/Logger.js +194 -0
- package/.agents/scripts/lib/audit-suite/cli.js +64 -0
- package/.agents/scripts/lib/audit-suite/findings.js +164 -0
- package/.agents/scripts/lib/audit-suite/frontmatter-lint.js +32 -0
- package/.agents/scripts/lib/audit-suite/frontmatter.js +110 -0
- package/.agents/scripts/lib/audit-suite/index.js +22 -0
- package/.agents/scripts/lib/audit-suite/runner.js +233 -0
- package/.agents/scripts/lib/audit-suite/selector.js +235 -0
- package/.agents/scripts/lib/audit-suite/substitutions.js +124 -0
- package/.agents/scripts/lib/audit-suite/workflow-loader.js +49 -0
- package/.agents/scripts/lib/audit-to-stories/build-story-body.js +130 -0
- package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +114 -0
- package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +93 -0
- package/.agents/scripts/lib/audit-to-stories/group-findings.js +265 -0
- package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +246 -0
- package/.agents/scripts/lib/audit-to-stories/seed-epic-from-findings.js +160 -0
- package/.agents/scripts/lib/auto-refresh-baselines.js +308 -0
- package/.agents/scripts/lib/baseline-loader.js +0 -0
- package/.agents/scripts/lib/baseline-schema-registry.js +69 -0
- package/.agents/scripts/lib/baseline-snapshot.js +716 -0
- package/.agents/scripts/lib/baselines/component-matcher.js +21 -0
- package/.agents/scripts/lib/baselines/components.js +126 -0
- package/.agents/scripts/lib/baselines/diff-scope-cli.js +203 -0
- package/.agents/scripts/lib/baselines/duplication-scanner.js +220 -0
- package/.agents/scripts/lib/baselines/env-overrides.js +129 -0
- package/.agents/scripts/lib/baselines/envelope.js +368 -0
- package/.agents/scripts/lib/baselines/exit-codes.js +89 -0
- package/.agents/scripts/lib/baselines/git-base.js +0 -0
- package/.agents/scripts/lib/baselines/kernel.js +111 -0
- package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +220 -0
- package/.agents/scripts/lib/baselines/kinds/bundle-size.js +157 -0
- package/.agents/scripts/lib/baselines/kinds/coverage.js +194 -0
- package/.agents/scripts/lib/baselines/kinds/crap.js +555 -0
- package/.agents/scripts/lib/baselines/kinds/duplication.js +197 -0
- package/.agents/scripts/lib/baselines/kinds/lighthouse.js +185 -0
- package/.agents/scripts/lib/baselines/kinds/lint.js +172 -0
- package/.agents/scripts/lib/baselines/kinds/maintainability.js +340 -0
- package/.agents/scripts/lib/baselines/kinds/mutation.js +153 -0
- package/.agents/scripts/lib/baselines/path-canon.js +279 -0
- package/.agents/scripts/lib/baselines/preview-gates.js +298 -0
- package/.agents/scripts/lib/baselines/reader.js +321 -0
- package/.agents/scripts/lib/baselines/refresh-service.js +733 -0
- package/.agents/scripts/lib/baselines/scope.js +291 -0
- package/.agents/scripts/lib/baselines/writer.js +312 -0
- package/.agents/scripts/lib/bdd-runner-detect.js +417 -0
- package/.agents/scripts/lib/bdd-scenario-scanner.js +310 -0
- package/.agents/scripts/lib/bootstrap/baselines-layout-migration.js +202 -0
- package/.agents/scripts/lib/bootstrap/branch-protection.js +222 -0
- package/.agents/scripts/lib/bootstrap/ci-workflow-template.js +171 -0
- package/.agents/scripts/lib/bootstrap/commit-push.js +146 -0
- package/.agents/scripts/lib/bootstrap/gh-list.js +153 -0
- package/.agents/scripts/lib/bootstrap/gh-preflight.js +306 -0
- package/.agents/scripts/lib/bootstrap/hitl-confirm.js +89 -0
- package/.agents/scripts/lib/bootstrap/install-ledger.js +174 -0
- package/.agents/scripts/lib/bootstrap/manifest.js +272 -0
- package/.agents/scripts/lib/bootstrap/merge-methods.js +108 -0
- package/.agents/scripts/lib/bootstrap/preflight.js +195 -0
- package/.agents/scripts/lib/bootstrap/project-bootstrap.js +801 -0
- package/.agents/scripts/lib/bootstrap/prompt.js +480 -0
- package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +370 -0
- package/.agents/scripts/lib/bootstrap/summary.js +75 -0
- package/.agents/scripts/lib/bootstrap/workflow-audit.js +256 -0
- package/.agents/scripts/lib/branch-name-guard.js +98 -0
- package/.agents/scripts/lib/c8-cli-path.js +21 -0
- package/.agents/scripts/lib/changed-files.js +184 -0
- package/.agents/scripts/lib/checks/baseline-drift-main-checkout.js +104 -0
- package/.agents/scripts/lib/checks/core-bare-clean.js +48 -0
- package/.agents/scripts/lib/checks/epic-merge-lock-stale.js +54 -0
- package/.agents/scripts/lib/checks/index.js +288 -0
- package/.agents/scripts/lib/checks/push-hook-parity.js +106 -0
- package/.agents/scripts/lib/checks/stale-origin-epic.js +49 -0
- package/.agents/scripts/lib/checks/state.js +558 -0
- package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +186 -0
- package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +182 -0
- package/.agents/scripts/lib/checks/windows-coverage-noise-floor.js +92 -0
- package/.agents/scripts/lib/checks/worktree-bootstrap-env.js +81 -0
- package/.agents/scripts/lib/checks/worktree-residue-biome.js +55 -0
- package/.agents/scripts/lib/cli/parse-numeric.js +60 -0
- package/.agents/scripts/lib/cli/standard-args.js +351 -0
- package/.agents/scripts/lib/cli-args.js +286 -0
- package/.agents/scripts/lib/cli-utils.js +69 -0
- package/.agents/scripts/lib/close-validation/projections/head-sha.js +44 -0
- package/.agents/scripts/lib/close-validation/projections/inputs.js +86 -0
- package/.agents/scripts/lib/close-validation/projections/maintainability.js +286 -0
- package/.agents/scripts/lib/close-validation.js +897 -0
- package/.agents/scripts/lib/codebase-snapshot.js +513 -0
- package/.agents/scripts/lib/command-header.js +33 -0
- package/.agents/scripts/lib/config/acceptance-eval.js +95 -0
- package/.agents/scripts/lib/config/baselines.js +60 -0
- package/.agents/scripts/lib/config/ci.js +30 -0
- package/.agents/scripts/lib/config/commands.js +36 -0
- package/.agents/scripts/lib/config/defaults.js +119 -0
- package/.agents/scripts/lib/config/explain.js +348 -0
- package/.agents/scripts/lib/config/gates/bundle-size.schema.js +23 -0
- package/.agents/scripts/lib/config/gates/coverage.schema.js +18 -0
- package/.agents/scripts/lib/config/gates/crap.schema.js +33 -0
- package/.agents/scripts/lib/config/gates/duplication.schema.js +26 -0
- package/.agents/scripts/lib/config/gates/index.js +36 -0
- package/.agents/scripts/lib/config/gates/lighthouse.schema.js +23 -0
- package/.agents/scripts/lib/config/gates/lint.schema.js +9 -0
- package/.agents/scripts/lib/config/gates/maintainability.schema.js +20 -0
- package/.agents/scripts/lib/config/gates/mutation.schema.js +12 -0
- package/.agents/scripts/lib/config/gates/shared.js +117 -0
- package/.agents/scripts/lib/config/github.js +122 -0
- package/.agents/scripts/lib/config/lifecycle.js +40 -0
- package/.agents/scripts/lib/config/limits.js +211 -0
- package/.agents/scripts/lib/config/paths.js +73 -0
- package/.agents/scripts/lib/config/preflight.js +58 -0
- package/.agents/scripts/lib/config/quality.js +665 -0
- package/.agents/scripts/lib/config/retro.js +77 -0
- package/.agents/scripts/lib/config/runners.js +105 -0
- package/.agents/scripts/lib/config/runtime.js +167 -0
- package/.agents/scripts/lib/config/shared.js +46 -0
- package/.agents/scripts/lib/config/sync-agentrc.js +243 -0
- package/.agents/scripts/lib/config/temp-paths.js +373 -0
- package/.agents/scripts/lib/config/validate-orchestration.js +81 -0
- package/.agents/scripts/lib/config/worktree-isolation.js +80 -0
- package/.agents/scripts/lib/config-resolver.js +298 -0
- package/.agents/scripts/lib/config-schema-shared.js +32 -0
- package/.agents/scripts/lib/config-schema.js +20 -0
- package/.agents/scripts/lib/config-settings-schema-delivery.js +332 -0
- package/.agents/scripts/lib/config-settings-schema-quality.js +165 -0
- package/.agents/scripts/lib/config-settings-schema.js +420 -0
- package/.agents/scripts/lib/coverage-baseline.js +352 -0
- package/.agents/scripts/lib/coverage-capture.js +195 -0
- package/.agents/scripts/lib/coverage-utils.js +239 -0
- package/.agents/scripts/lib/cpu-pool.js +223 -0
- package/.agents/scripts/lib/crap-engine.js +119 -0
- package/.agents/scripts/lib/crap-utils.js +479 -0
- package/.agents/scripts/lib/degraded-mode.js +69 -0
- package/.agents/scripts/lib/dependency-parser.js +129 -0
- package/.agents/scripts/lib/duplicate-search.js +189 -0
- package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +70 -0
- package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +197 -0
- package/.agents/scripts/lib/dynamic-workflow/capability.js +396 -0
- package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +80 -0
- package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +72 -0
- package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +90 -0
- package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +43 -0
- package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +83 -0
- package/.agents/scripts/lib/env-loader.js +52 -0
- package/.agents/scripts/lib/epic-merge-lock.js +239 -0
- package/.agents/scripts/lib/epic-plan-clarity.js +142 -0
- package/.agents/scripts/lib/epic-plan-ideation.js +228 -0
- package/.agents/scripts/lib/error-redactor.js +125 -0
- package/.agents/scripts/lib/errors/index.js +67 -0
- package/.agents/scripts/lib/feedback-loop/audit-results-graduator.js +230 -0
- package/.agents/scripts/lib/feedback-loop/code-review-graduator.js +207 -0
- package/.agents/scripts/lib/feedback-loop/graduator-core.js +421 -0
- package/.agents/scripts/lib/feedback-loop/memory-freshness.js +480 -0
- package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +229 -0
- package/.agents/scripts/lib/findings/classify-finding.js +195 -0
- package/.agents/scripts/lib/findings/promote-finding.js +353 -0
- package/.agents/scripts/lib/findings/route-finding.js +283 -0
- package/.agents/scripts/lib/findings/semantic-issue-search.js +179 -0
- package/.agents/scripts/lib/findings/severity.js +102 -0
- package/.agents/scripts/lib/gates/baseline-store.js +106 -0
- package/.agents/scripts/lib/gates/friction.js +43 -0
- package/.agents/scripts/lib/gh-exec.js +553 -0
- package/.agents/scripts/lib/git/cached-fetch.js +0 -0
- package/.agents/scripts/lib/git/sync-from-base.js +162 -0
- package/.agents/scripts/lib/git-branch-cleanup.js +213 -0
- package/.agents/scripts/lib/git-branch-lifecycle.js +353 -0
- package/.agents/scripts/lib/git-merge-orchestrator.js +261 -0
- package/.agents/scripts/lib/git-utils.js +363 -0
- package/.agents/scripts/lib/github-url.js +29 -0
- package/.agents/scripts/lib/install-cmd-parser.js +51 -0
- package/.agents/scripts/lib/issue-link-parser.js +74 -0
- package/.agents/scripts/lib/json-utils.js +60 -0
- package/.agents/scripts/lib/label-constants.js +169 -0
- package/.agents/scripts/lib/label-taxonomy.js +200 -0
- package/.agents/scripts/lib/maintainability-engine.js +164 -0
- package/.agents/scripts/lib/maintainability-utils.js +343 -0
- package/.agents/scripts/lib/mandrel-catalog.js +170 -0
- package/.agents/scripts/lib/mutation/baseline-snapshot.js +238 -0
- package/.agents/scripts/lib/mutation/config-detector.js +119 -0
- package/.agents/scripts/lib/mutation/stryker-runner.js +306 -0
- package/.agents/scripts/lib/mutation/survivor-report.js +160 -0
- package/.agents/scripts/lib/notifications/notifier.js +75 -0
- package/.agents/scripts/lib/observability/active-story-env.js +182 -0
- package/.agents/scripts/lib/observability/baseline-refresh-rate.js +221 -0
- package/.agents/scripts/lib/observability/perf-aggregator.js +887 -0
- package/.agents/scripts/lib/observability/perf-report-readers.js +319 -0
- package/.agents/scripts/lib/observability/perf-report-render.js +182 -0
- package/.agents/scripts/lib/observability/signals-writer.js +296 -0
- package/.agents/scripts/lib/observability/source-classifier.js +103 -0
- package/.agents/scripts/lib/observability/tool-trace-hook.js +417 -0
- package/.agents/scripts/lib/onboard/detect-stack.js +300 -0
- package/.agents/scripts/lib/onboard/scaffold-docs.js +128 -0
- package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +173 -0
- package/.agents/scripts/lib/orchestration/cascade-grouping.js +275 -0
- package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +131 -0
- package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +80 -0
- package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +132 -0
- package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +142 -0
- package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +149 -0
- package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +158 -0
- package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +56 -0
- package/.agents/scripts/lib/orchestration/code-review.js +652 -0
- package/.agents/scripts/lib/orchestration/column-sync.js +286 -0
- package/.agents/scripts/lib/orchestration/context-envelope.js +280 -0
- package/.agents/scripts/lib/orchestration/context-hydration-engine.js +581 -0
- package/.agents/scripts/lib/orchestration/dependency-analyzer.js +88 -0
- package/.agents/scripts/lib/orchestration/detectors-phase.js +188 -0
- package/.agents/scripts/lib/orchestration/dispatch-engine.js +144 -0
- package/.agents/scripts/lib/orchestration/dispatch-pipeline.js +206 -0
- package/.agents/scripts/lib/orchestration/doc-reader.js +94 -0
- package/.agents/scripts/lib/orchestration/epic-cleanup.js +473 -0
- package/.agents/scripts/lib/orchestration/epic-deliver-lease-guard.js +310 -0
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/cli.js +167 -0
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/context.js +151 -0
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/creation.js +74 -0
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/dag.js +78 -0
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/diagnostics.js +72 -0
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist-helpers.js +155 -0
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist.js +321 -0
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/planning-artifacts.js +75 -0
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/reconcile-spawn.js +86 -0
- package/.agents/scripts/lib/orchestration/epic-plan-lease-guard.js +235 -0
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/authoring-context.js +197 -0
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/cli-args.js +48 -0
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/drain.js +94 -0
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/plan-epic.js +414 -0
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/prompts.js +55 -0
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/risk-verdict.js +105 -0
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/run-spec-phase.js +235 -0
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/spec-freshness.js +120 -0
- package/.agents/scripts/lib/orchestration/epic-plan-state-store.js +118 -0
- package/.agents/scripts/lib/orchestration/epic-run-state-store.js +295 -0
- package/.agents/scripts/lib/orchestration/epic-runner/concurrency-gate.js +186 -0
- package/.agents/scripts/lib/orchestration/epic-runner/deliver-phases.js +50 -0
- package/.agents/scripts/lib/orchestration/epic-runner/phases/build-wave-dag.js +146 -0
- package/.agents/scripts/lib/orchestration/epic-runner/phases/snapshot.js +110 -0
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/composition.js +392 -0
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/signals.js +217 -0
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/transport.js +235 -0
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter.js +69 -0
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/_bullet-format.js +32 -0
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/crap-drift.js +291 -0
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/maintainability-drift.js +175 -0
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/stalled-worktree.js +37 -0
- package/.agents/scripts/lib/orchestration/epic-runner/story-launcher.js +127 -0
- package/.agents/scripts/lib/orchestration/epic-runner/story-run-progress-writer.js +400 -0
- package/.agents/scripts/lib/orchestration/epic-runner/sub-agent-return.js +285 -0
- package/.agents/scripts/lib/orchestration/epic-runner/wave-scheduler.js +66 -0
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-apply.js +797 -0
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-diff.js +619 -0
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-discriminator.js +335 -0
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-format.js +230 -0
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-ops.js +363 -0
- package/.agents/scripts/lib/orchestration/error-journal.js +139 -0
- package/.agents/scripts/lib/orchestration/file-assumption-enum.js +31 -0
- package/.agents/scripts/lib/orchestration/file-assumptions.js +506 -0
- package/.agents/scripts/lib/orchestration/finalize/close-planning-tickets.js +116 -0
- package/.agents/scripts/lib/orchestration/finalize/open-or-locate-pr.js +241 -0
- package/.agents/scripts/lib/orchestration/finalize/post-handoff-comment.js +489 -0
- package/.agents/scripts/lib/orchestration/finalize/sanitize-skip-ci.js +88 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +219 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +309 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +99 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +123 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +57 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +114 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +426 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +84 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +365 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +72 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +69 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +214 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +137 -0
- package/.agents/scripts/lib/orchestration/label-transitions.js +43 -0
- package/.agents/scripts/lib/orchestration/lifecycle/bus.js +309 -0
- package/.agents/scripts/lib/orchestration/lifecycle/emit-story-dispatch-end.js +147 -0
- package/.agents/scripts/lib/orchestration/lifecycle/emit-story-heartbeat.js +155 -0
- package/.agents/scripts/lib/orchestration/lifecycle/ledger-writer.js +226 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/README.md +69 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/acceptance-reconciler.js +378 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-armer.js +248 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-predicate.js +527 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/branch-cleaner.js +259 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/checkpoint-pointer-writer.js +278 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/cleaner.js +355 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/finalizer.js +647 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/index.js +331 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/intervention-recorder.js +140 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/merge-watcher.js +421 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/notify-dispatcher.js +168 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/watcher.js +668 -0
- package/.agents/scripts/lib/orchestration/lifecycle/trace-logger.js +322 -0
- package/.agents/scripts/lib/orchestration/lint-baseline-service.js +114 -0
- package/.agents/scripts/lib/orchestration/manifest-builder.js +216 -0
- package/.agents/scripts/lib/orchestration/model-attribution.js +390 -0
- package/.agents/scripts/lib/orchestration/parked-follow-ons.js +147 -0
- package/.agents/scripts/lib/orchestration/phase-runner.js +87 -0
- package/.agents/scripts/lib/orchestration/plan-review-routing.js +63 -0
- package/.agents/scripts/lib/orchestration/plan-runner/plan-router.js +86 -0
- package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +212 -0
- package/.agents/scripts/lib/orchestration/planning-context-budget.js +213 -0
- package/.agents/scripts/lib/orchestration/planning-risk.js +155 -0
- package/.agents/scripts/lib/orchestration/planning-state-manager.js +318 -0
- package/.agents/scripts/lib/orchestration/post-merge/phases/branch-cleanup.js +56 -0
- package/.agents/scripts/lib/orchestration/post-merge/phases/dashboard-refresh.js +33 -0
- package/.agents/scripts/lib/orchestration/post-merge/phases/notification.js +78 -0
- package/.agents/scripts/lib/orchestration/post-merge/phases/temp-cleanup.js +68 -0
- package/.agents/scripts/lib/orchestration/post-merge/phases/ticket-closure.js +118 -0
- package/.agents/scripts/lib/orchestration/post-merge/phases/worktree-reap.js +396 -0
- package/.agents/scripts/lib/orchestration/post-merge-pipeline.js +205 -0
- package/.agents/scripts/lib/orchestration/pr-base-guard.js +47 -0
- package/.agents/scripts/lib/orchestration/preflight-cache.js +164 -0
- package/.agents/scripts/lib/orchestration/reassert-status-column.js +202 -0
- package/.agents/scripts/lib/orchestration/reconciler.js +137 -0
- package/.agents/scripts/lib/orchestration/recurring-failure-detector.js +152 -0
- package/.agents/scripts/lib/orchestration/recut.js +56 -0
- package/.agents/scripts/lib/orchestration/resolves-token.js +127 -0
- package/.agents/scripts/lib/orchestration/retro/phases/checks.js +94 -0
- package/.agents/scripts/lib/orchestration/retro/phases/compose-body.js +448 -0
- package/.agents/scripts/lib/orchestration/retro/phases/gather-signals.js +335 -0
- package/.agents/scripts/lib/orchestration/retro/phases/post-and-mirror.js +133 -0
- package/.agents/scripts/lib/orchestration/retro-heuristics.js +57 -0
- package/.agents/scripts/lib/orchestration/retro-perf-heuristics.js +275 -0
- package/.agents/scripts/lib/orchestration/retro-proposals.js +395 -0
- package/.agents/scripts/lib/orchestration/retro-runner.js +171 -0
- package/.agents/scripts/lib/orchestration/review-depth.js +93 -0
- package/.agents/scripts/lib/orchestration/review-providers/codex.js +363 -0
- package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +205 -0
- package/.agents/scripts/lib/orchestration/review-providers/native.js +805 -0
- package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +73 -0
- package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +396 -0
- package/.agents/scripts/lib/orchestration/review-providers/security-review.js +373 -0
- package/.agents/scripts/lib/orchestration/review-providers/types.js +89 -0
- package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +107 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +159 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +194 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +81 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +190 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +70 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +106 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +42 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +73 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +225 -0
- package/.agents/scripts/lib/orchestration/single-story-close/runner.js +315 -0
- package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +149 -0
- package/.agents/scripts/lib/orchestration/skill-capsule-loader.js +110 -0
- package/.agents/scripts/lib/orchestration/spec-freshness.js +320 -0
- package/.agents/scripts/lib/orchestration/spec-renderer.js +456 -0
- package/.agents/scripts/lib/orchestration/spec-section-validator.js +80 -0
- package/.agents/scripts/lib/orchestration/story-close/auto-refresh-runner.js +797 -0
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/gate-failure.js +163 -0
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/pre-merge-attribution.js +152 -0
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/refresh-commit.js +387 -0
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/regression-projection.js +266 -0
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/scope-discovery.js +48 -0
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution-wiring.js +67 -0
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution.js +161 -0
- package/.agents/scripts/lib/orchestration/story-close/baseline-friction-body.js +117 -0
- package/.agents/scripts/lib/orchestration/story-close/cd-out-guard.js +86 -0
- package/.agents/scripts/lib/orchestration/story-close/cleanup-reconciler.js +147 -0
- package/.agents/scripts/lib/orchestration/story-close/close-inputs.js +142 -0
- package/.agents/scripts/lib/orchestration/story-close/comment-bodies.js +62 -0
- package/.agents/scripts/lib/orchestration/story-close/format-autofix-scoped.js +221 -0
- package/.agents/scripts/lib/orchestration/story-close/format-autofix-shared.js +123 -0
- package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +216 -0
- package/.agents/scripts/lib/orchestration/story-close/merge-runner.js +636 -0
- package/.agents/scripts/lib/orchestration/story-close/merge-subject.js +198 -0
- package/.agents/scripts/lib/orchestration/story-close/phases/branch-restore.js +105 -0
- package/.agents/scripts/lib/orchestration/story-close/phases/close.js +222 -0
- package/.agents/scripts/lib/orchestration/story-close/phases/code-review.js +220 -0
- package/.agents/scripts/lib/orchestration/story-close/phases/gates.js +291 -0
- package/.agents/scripts/lib/orchestration/story-close/phases/locked-pipeline.js +234 -0
- package/.agents/scripts/lib/orchestration/story-close/phases/preflight.js +110 -0
- package/.agents/scripts/lib/orchestration/story-close/phases/refresh.js +86 -0
- package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked-emitter.js +112 -0
- package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked.js +157 -0
- package/.agents/scripts/lib/orchestration/story-close/post-merge-close.js +434 -0
- package/.agents/scripts/lib/orchestration/story-close/pre-merge-validation.js +290 -0
- package/.agents/scripts/lib/orchestration/story-close-recovery.js +643 -0
- package/.agents/scripts/lib/orchestration/structured-comment-parser.js +67 -0
- package/.agents/scripts/lib/orchestration/task-body-validator.js +391 -0
- package/.agents/scripts/lib/orchestration/ticket-lease.js +358 -0
- package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +783 -0
- package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +367 -0
- package/.agents/scripts/lib/orchestration/ticket-validator.js +691 -0
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +723 -0
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +474 -0
- package/.agents/scripts/lib/orchestration/ticketing/state.js +559 -0
- package/.agents/scripts/lib/orchestration/ticketing.js +55 -0
- package/.agents/scripts/lib/orchestration/wave-marker.js +28 -0
- package/.agents/scripts/lib/orchestration/wave-record-io.js +277 -0
- package/.agents/scripts/lib/orchestration/wave-record-notifications.js +189 -0
- package/.agents/scripts/lib/orchestration/wave-record-projection.js +423 -0
- package/.agents/scripts/lib/path-security.js +25 -0
- package/.agents/scripts/lib/plan-phase-cleanup.js +125 -0
- package/.agents/scripts/lib/preflight-runner.js +196 -0
- package/.agents/scripts/lib/presentation/dispatch-manifest-render.js +95 -0
- package/.agents/scripts/lib/presentation/manifest-builder.js +245 -0
- package/.agents/scripts/lib/presentation/manifest-formatter.js +243 -0
- package/.agents/scripts/lib/presentation/manifest-helpers.js +213 -0
- package/.agents/scripts/lib/presentation/manifest-persistence.js +262 -0
- package/.agents/scripts/lib/presentation/manifest-procedures.js +55 -0
- package/.agents/scripts/lib/presentation/manifest-render-waves.js +252 -0
- package/.agents/scripts/lib/presentation/manifest-renderer.js +188 -0
- package/.agents/scripts/lib/presentation/manifest-story-views.js +119 -0
- package/.agents/scripts/lib/provider-factory.js +80 -0
- package/.agents/scripts/lib/push-epic-retry.js +209 -0
- package/.agents/scripts/lib/qa/console-allowlist.js +151 -0
- package/.agents/scripts/lib/qa/coverage-report.js +181 -0
- package/.agents/scripts/lib/qa/coverage-verdict.js +296 -0
- package/.agents/scripts/lib/qa/propose-missing-test.js +95 -0
- package/.agents/scripts/lib/qa/qa-context-hydrator.js +296 -0
- package/.agents/scripts/lib/qa/qa-session.js +197 -0
- package/.agents/scripts/lib/qa/redact-evidence.js +245 -0
- package/.agents/scripts/lib/qa/resolve-qa-contract.js +190 -0
- package/.agents/scripts/lib/qa/resolve-selection.js +373 -0
- package/.agents/scripts/lib/runtime-deps/ensure-installed.js +100 -0
- package/.agents/scripts/lib/runtime-deps/manifest.js +96 -0
- package/.agents/scripts/lib/runtime-deps/preflight.js +78 -0
- package/.agents/scripts/lib/runtime-deps/scan-imports.js +202 -0
- package/.agents/scripts/lib/signals/detectors/common.js +36 -0
- package/.agents/scripts/lib/signals/detectors/hotspot.js +298 -0
- package/.agents/scripts/lib/signals/detectors/index.js +14 -0
- package/.agents/scripts/lib/signals/detectors/retry.js +289 -0
- package/.agents/scripts/lib/signals/detectors/rework.js +204 -0
- package/.agents/scripts/lib/signals/index.js +39 -0
- package/.agents/scripts/lib/signals/read.js +268 -0
- package/.agents/scripts/lib/signals/schema.js +225 -0
- package/.agents/scripts/lib/signals/span-tree.js +290 -0
- package/.agents/scripts/lib/signals/write.js +19 -0
- package/.agents/scripts/lib/single-story/confirm-merge.js +201 -0
- package/.agents/scripts/lib/single-story/story-merged-notify.js +126 -0
- package/.agents/scripts/lib/single-story-sweep/protection.js +274 -0
- package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +169 -0
- package/.agents/scripts/lib/single-story-sweep.js +329 -0
- package/.agents/scripts/lib/skills/parse-skill.js +202 -0
- package/.agents/scripts/lib/skills/walk-skill-files.js +56 -0
- package/.agents/scripts/lib/spec/index.js +36 -0
- package/.agents/scripts/lib/spec/loader.js +425 -0
- package/.agents/scripts/lib/spec/state.js +217 -0
- package/.agents/scripts/lib/story-body/story-body.js +743 -0
- package/.agents/scripts/lib/story-init/blocker-validator.js +68 -0
- package/.agents/scripts/lib/story-init/branch-initializer.js +422 -0
- package/.agents/scripts/lib/story-init/context-resolver.js +92 -0
- package/.agents/scripts/lib/story-init/donor-precheck.js +207 -0
- package/.agents/scripts/lib/story-init/hierarchy-tracer.js +36 -0
- package/.agents/scripts/lib/story-init/state-transitioner.js +80 -0
- package/.agents/scripts/lib/story-init/task-graph-builder.js +114 -0
- package/.agents/scripts/lib/story-init/transition-summary.js +34 -0
- package/.agents/scripts/lib/story-lifecycle.js +186 -0
- package/.agents/scripts/lib/story-plan.js +246 -0
- package/.agents/scripts/lib/task-utils.js +26 -0
- package/.agents/scripts/lib/templates/decomposer-prompts.js +168 -0
- package/.agents/scripts/lib/test-env.js +30 -0
- package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +52 -0
- package/.agents/scripts/lib/test-isolate/list-files.js +90 -0
- package/.agents/scripts/lib/test-isolate/parse-tap.js +75 -0
- package/.agents/scripts/lib/test-isolate/runner.js +483 -0
- package/.agents/scripts/lib/test-profile/parse-tap.js +136 -0
- package/.agents/scripts/lib/test-profile/render-report.js +45 -0
- package/.agents/scripts/lib/test-reserved-epic-temp-ids.js +35 -0
- package/.agents/scripts/lib/test-tiers.js +94 -0
- package/.agents/scripts/lib/util/concurrent-map.js +59 -0
- package/.agents/scripts/lib/util/phase-timer-state.js +72 -0
- package/.agents/scripts/lib/util/phase-timer.js +163 -0
- package/.agents/scripts/lib/util/poll-loop.js +86 -0
- package/.agents/scripts/lib/util/with-timeout.js +32 -0
- package/.agents/scripts/lib/validation-evidence.js +323 -0
- package/.agents/scripts/lib/wave-runner/tick.js +665 -0
- package/.agents/scripts/lib/wave-runner/wave-checkpoint.js +91 -0
- package/.agents/scripts/lib/wave-runner/wave-runner-error.js +19 -0
- package/.agents/scripts/lib/workers/crap-worker.js +197 -0
- package/.agents/scripts/lib/workers/maintainability-report-worker.js +137 -0
- package/.agents/scripts/lib/workers/maintainability-worker.js +79 -0
- package/.agents/scripts/lib/workspace-provisioner.js +189 -0
- package/.agents/scripts/lib/worktree/bootstrapper.js +48 -0
- package/.agents/scripts/lib/worktree/inspector.js +140 -0
- package/.agents/scripts/lib/worktree/lifecycle/creation.js +118 -0
- package/.agents/scripts/lib/worktree/lifecycle/drift-detection.js +62 -0
- package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +276 -0
- package/.agents/scripts/lib/worktree/lifecycle/gc.js +49 -0
- package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +178 -0
- package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +264 -0
- package/.agents/scripts/lib/worktree/lifecycle/precheck.js +100 -0
- package/.agents/scripts/lib/worktree/lifecycle/reap.js +588 -0
- package/.agents/scripts/lib/worktree/lifecycle/registry-sync.js +124 -0
- package/.agents/scripts/lib/worktree/lifecycle/shared.js +26 -0
- package/.agents/scripts/lib/worktree/lifecycle-manager.js +40 -0
- package/.agents/scripts/lib/worktree/node-modules-strategy.js +349 -0
- package/.agents/scripts/lib/worktree-manager.js +243 -0
- package/.agents/scripts/lifecycle-diff.js +206 -0
- package/.agents/scripts/lifecycle-emit-story-dispatch.js +194 -0
- package/.agents/scripts/lifecycle-emit.js +479 -0
- package/.agents/scripts/lint-baseline.js +507 -0
- package/.agents/scripts/lint-label-vocabulary.js +237 -0
- package/.agents/scripts/loc-delta.js +205 -0
- package/.agents/scripts/notify.js +307 -0
- package/.agents/scripts/package.json +3 -0
- package/.agents/scripts/post-structured-comment.js +127 -0
- package/.agents/scripts/pr-watch-with-update.js +152 -0
- package/.agents/scripts/providers/github/auth.js +65 -0
- package/.agents/scripts/providers/github/board-add.js +63 -0
- package/.agents/scripts/providers/github/branch-protection.js +186 -0
- package/.agents/scripts/providers/github/cache.js +72 -0
- package/.agents/scripts/providers/github/comments.js +131 -0
- package/.agents/scripts/providers/github/compose.js +111 -0
- package/.agents/scripts/providers/github/errors.js +242 -0
- package/.agents/scripts/providers/github/issues.js +242 -0
- package/.agents/scripts/providers/github/labels.js +179 -0
- package/.agents/scripts/providers/github/mappers.js +126 -0
- package/.agents/scripts/providers/github/merge-methods.js +82 -0
- package/.agents/scripts/providers/github/project-board.js +47 -0
- package/.agents/scripts/providers/github/projects-v2-graphql.js +472 -0
- package/.agents/scripts/providers/github/prs.js +103 -0
- package/.agents/scripts/providers/github/request-helpers.js +110 -0
- package/.agents/scripts/providers/github/sub-issues.js +369 -0
- package/.agents/scripts/providers/github/tickets.js +381 -0
- package/.agents/scripts/providers/github/transient-retry.js +62 -0
- package/.agents/scripts/providers/github.js +157 -0
- package/.agents/scripts/quality-preview.js +327 -0
- package/.agents/scripts/quality-watch.js +223 -0
- package/.agents/scripts/render-manifest.js +143 -0
- package/.agents/scripts/resync-status-column.js +176 -0
- package/.agents/scripts/retro-run.js +167 -0
- package/.agents/scripts/run-audit-suite.js +97 -0
- package/.agents/scripts/run-coverage.js +103 -0
- package/.agents/scripts/run-lint.js +94 -0
- package/.agents/scripts/run-test-profile.js +126 -0
- package/.agents/scripts/run-tests.js +185 -0
- package/.agents/scripts/run-verify.js +56 -0
- package/.agents/scripts/select-audits.js +155 -0
- package/.agents/scripts/signals-view.js +294 -0
- package/.agents/scripts/single-story-close.js +83 -0
- package/.agents/scripts/single-story-confirm-merge.js +183 -0
- package/.agents/scripts/single-story-init.js +692 -0
- package/.agents/scripts/stories-wave-tick.js +415 -0
- package/.agents/scripts/story-close.js +246 -0
- package/.agents/scripts/story-deliver-prepare.js +267 -0
- package/.agents/scripts/story-init.js +516 -0
- package/.agents/scripts/story-phase.js +327 -0
- package/.agents/scripts/story-plan.js +284 -0
- package/.agents/scripts/sync-agentrc.js +71 -0
- package/.agents/scripts/sync-branch-from-base.js +138 -0
- package/.agents/scripts/sync-claude-commands.js +151 -0
- package/.agents/scripts/test-isolate.js +222 -0
- package/.agents/scripts/test-wrapper.js +108 -0
- package/.agents/scripts/update-coverage-baseline.js +129 -0
- package/.agents/scripts/update-crap-baseline.js +177 -0
- package/.agents/scripts/update-duplication-baseline.js +134 -0
- package/.agents/scripts/update-maintainability-baseline.js +183 -0
- package/.agents/scripts/update-mutation-baseline.js +189 -0
- package/.agents/scripts/update-ticket-state.js +107 -0
- package/.agents/scripts/validate-docs-freshness.js +259 -0
- package/.agents/scripts/validate-skills.js +278 -0
- package/.agents/scripts/wave-tick.js +335 -0
- package/.agents/skills/core/analyze-execution/SKILL.md +98 -0
- package/.agents/skills/core/api-and-interface-design/SKILL.md +327 -0
- package/.agents/skills/core/baseline-refresh/SKILL.md +181 -0
- package/.agents/skills/core/browser-testing-with-devtools/SKILL.md +352 -0
- package/.agents/skills/core/ci-cd-and-automation/SKILL.md +274 -0
- package/.agents/skills/core/ci-cd-and-automation/examples.md +211 -0
- package/.agents/skills/core/code-review-and-quality/SKILL.md +421 -0
- package/.agents/skills/core/code-simplification/SKILL.md +389 -0
- package/.agents/skills/core/context-engineering/SKILL.md +309 -0
- package/.agents/skills/core/context-engineering/examples.md +58 -0
- package/.agents/skills/core/debugging-and-error-recovery/SKILL.md +338 -0
- package/.agents/skills/core/deprecation-and-migration/SKILL.md +250 -0
- package/.agents/skills/core/diagnose-friction/SKILL.md +79 -0
- package/.agents/skills/core/documentation-and-adrs/SKILL.md +323 -0
- package/.agents/skills/core/epic-plan-consolidate/SKILL.md +145 -0
- package/.agents/skills/core/epic-plan-decompose-author/SKILL.md +425 -0
- package/.agents/skills/core/epic-plan-spec-author/SKILL.md +393 -0
- package/.agents/skills/core/frontend-ui-engineering/SKILL.md +357 -0
- package/.agents/skills/core/git-workflow-and-versioning/SKILL.md +352 -0
- package/.agents/skills/core/hydrate-context/SKILL.md +118 -0
- package/.agents/skills/core/idea-refinement/SKILL.md +317 -0
- package/.agents/skills/core/idea-refinement/examples.md +437 -0
- package/.agents/skills/core/idea-refinement/frameworks.md +135 -0
- package/.agents/skills/core/idea-refinement/refinement-criteria.md +155 -0
- package/.agents/skills/core/idea-refinement/scripts/idea-refine.sh +15 -0
- package/.agents/skills/core/incremental-implementation/SKILL.md +271 -0
- package/.agents/skills/core/introducing-a-baseline-gate/SKILL.md +213 -0
- package/.agents/skills/core/knowledge-transfer/SKILL.md +175 -0
- package/.agents/skills/core/mutation-survivor-remediation/SKILL.md +117 -0
- package/.agents/skills/core/performance-optimization/SKILL.md +314 -0
- package/.agents/skills/core/planning-and-task-breakdown/SKILL.md +277 -0
- package/.agents/skills/core/property-based-testing/SKILL.md +148 -0
- package/.agents/skills/core/qa-coverage-mapping/SKILL.md +105 -0
- package/.agents/skills/core/refactoring-discipline/SKILL.md +111 -0
- package/.agents/skills/core/scope-triage/SKILL.md +127 -0
- package/.agents/skills/core/security-and-hardening/SKILL.md +400 -0
- package/.agents/skills/core/shipping-and-launch/SKILL.md +328 -0
- package/.agents/skills/core/spec-driven-development/SKILL.md +252 -0
- package/.agents/skills/core/test-driven-development/SKILL.md +475 -0
- package/.agents/skills/core/using-agent-skills/SKILL.md +232 -0
- package/.agents/skills/skills.index.json +596 -0
- package/.agents/skills/stack/architecture/monorepo-path-strategist/SKILL.md +31 -0
- package/.agents/skills/stack/architecture/structured-output-zod/SKILL.md +51 -0
- package/.agents/skills/stack/architecture/subagent-orchestration/SKILL.md +48 -0
- package/.agents/skills/stack/backend/cloudflare-hono-architect/SKILL.md +31 -0
- package/.agents/skills/stack/backend/cloudflare-hono-architect/examples/route-template.ts +33 -0
- package/.agents/skills/stack/backend/cloudflare-queue-manager/SKILL.md +31 -0
- package/.agents/skills/stack/backend/cloudflare-workers/SKILL.md +51 -0
- package/.agents/skills/stack/backend/highlevel-crm/SKILL.md +54 -0
- package/.agents/skills/stack/backend/sqlite-drizzle-expert/SKILL.md +29 -0
- package/.agents/skills/stack/backend/sqlite-drizzle-expert/examples/schema-template.ts +30 -0
- package/.agents/skills/stack/backend/stripe-integration/SKILL.md +57 -0
- package/.agents/skills/stack/backend/stripe-integration/scripts/listen-stripe.sh +9 -0
- package/.agents/skills/stack/backend/turso-sqlite/SKILL.md +48 -0
- package/.agents/skills/stack/frontend/astro/SKILL.md +62 -0
- package/.agents/skills/stack/frontend/astro-react-island-strategist/SKILL.md +30 -0
- package/.agents/skills/stack/frontend/expo-react-native-developer/SKILL.md +29 -0
- package/.agents/skills/stack/frontend/google-analytics-v4/SKILL.md +50 -0
- package/.agents/skills/stack/frontend/tailwind-v4/SKILL.md +58 -0
- package/.agents/skills/stack/frontend/ui-accessibility-engineer/SKILL.md +34 -0
- package/.agents/skills/stack/qa/audit-accessibility/SKILL.md +51 -0
- package/.agents/skills/stack/qa/gherkin-authoring/SKILL.md +257 -0
- package/.agents/skills/stack/qa/gherkin-authoring/examples/invoice-issue.feature +41 -0
- package/.agents/skills/stack/qa/lighthouse-baseline/SKILL.md +199 -0
- package/.agents/skills/stack/qa/playwright/SKILL.md +50 -0
- package/.agents/skills/stack/qa/playwright-bdd/SKILL.md +188 -0
- package/.agents/skills/stack/qa/qa-explore-driving/SKILL.md +142 -0
- package/.agents/skills/stack/qa/qa-harness/SKILL.md +220 -0
- package/.agents/skills/stack/qa/vitest/SKILL.md +51 -0
- package/.agents/skills/stack/security/backend-security-patterns/SKILL.md +68 -0
- package/.agents/starter-agentrc.json +22 -0
- package/.agents/templates/agent-protocol.md +72 -0
- package/.agents/templates/docs/architecture.md +30 -0
- package/.agents/templates/docs/decisions.md +24 -0
- package/.agents/templates/epic-from-idea.md +21 -0
- package/.agents/templates/single-story-body.md +17 -0
- package/.agents/workflows/agents-update.md +415 -0
- package/.agents/workflows/audit-architecture.md +312 -0
- package/.agents/workflows/audit-clean-code.md +179 -0
- package/.agents/workflows/audit-dependencies.md +91 -0
- package/.agents/workflows/audit-devops.md +110 -0
- package/.agents/workflows/audit-lighthouse.md +260 -0
- package/.agents/workflows/audit-performance.md +161 -0
- package/.agents/workflows/audit-privacy.md +104 -0
- package/.agents/workflows/audit-quality.md +191 -0
- package/.agents/workflows/audit-security.md +156 -0
- package/.agents/workflows/audit-seo.md +118 -0
- package/.agents/workflows/audit-sre.md +139 -0
- package/.agents/workflows/audit-to-stories.md +257 -0
- package/.agents/workflows/audit-ux-ui.md +102 -0
- package/.agents/workflows/epic-deliver.md +864 -0
- package/.agents/workflows/epic-plan.md +998 -0
- package/.agents/workflows/explain.md +118 -0
- package/.agents/workflows/git-cleanup.md +250 -0
- package/.agents/workflows/git-commit-all.md +15 -0
- package/.agents/workflows/git-merge-pr.md +377 -0
- package/.agents/workflows/git-pr-all.md +278 -0
- package/.agents/workflows/git-push.md +60 -0
- package/.agents/workflows/helpers/_merge-conflict-template.md +54 -0
- package/.agents/workflows/helpers/acceptance-self-eval.md +74 -0
- package/.agents/workflows/helpers/agents-sync-config.md +129 -0
- package/.agents/workflows/helpers/code-quality-guardrails.md +101 -0
- package/.agents/workflows/helpers/code-review.md +370 -0
- package/.agents/workflows/helpers/diagnose.md +117 -0
- package/.agents/workflows/helpers/epic-audit.md +295 -0
- package/.agents/workflows/helpers/epic-deliver-story.md +370 -0
- package/.agents/workflows/helpers/epic-plan-decompose.md +199 -0
- package/.agents/workflows/helpers/epic-plan-spec.md +184 -0
- package/.agents/workflows/helpers/epic-testing.md +125 -0
- package/.agents/workflows/helpers/parallel-tooling.md +88 -0
- package/.agents/workflows/helpers/signals.md +112 -0
- package/.agents/workflows/helpers/single-story-deliver.md +636 -0
- package/.agents/workflows/helpers/worktree-lifecycle.md +317 -0
- package/.agents/workflows/onboard.md +207 -0
- package/.agents/workflows/qa-assist.md +293 -0
- package/.agents/workflows/qa-explore.md +350 -0
- package/.agents/workflows/qa-run-harness.md +288 -0
- package/.agents/workflows/story-deliver.md +327 -0
- package/.agents/workflows/story-plan.md +233 -0
- package/LICENSE +21 -0
- package/README.md +193 -0
- package/bin/mandrel.js +56 -0
- package/bin/postinstall.js +195 -0
- package/lib/cli/__tests__/migrate.test.js +268 -0
- package/lib/cli/__tests__/sync-local-zone.test.js +247 -0
- package/lib/cli/__tests__/sync.test.js +372 -0
- package/lib/cli/__tests__/update-major.test.js +217 -0
- package/lib/cli/__tests__/update.test.js +696 -0
- package/lib/cli/__tests__/version-check.test.js +398 -0
- package/lib/cli/doctor.js +124 -0
- package/lib/cli/explain.js +107 -0
- package/lib/cli/migrate.js +260 -0
- package/lib/cli/registry.js +830 -0
- package/lib/cli/sync-commands.js +50 -0
- package/lib/cli/sync.js +200 -0
- package/lib/cli/uninstall.js +795 -0
- package/lib/cli/update.js +854 -0
- package/lib/cli/version-check.js +206 -0
- package/lib/migrations/README.md +69 -0
- package/lib/migrations/__tests__/index.test.js +216 -0
- package/lib/migrations/index.js +164 -0
- package/package.json +105 -0
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: >-
|
|
3
|
+
Phase 8 of sprint planning — decompose an Epic's PRD and Tech Spec into a
|
|
4
|
+
Feature/Story hierarchy, persist the backlog, and flip the Epic to
|
|
5
|
+
`agent::ready`. Host-LLM authored; no external API calls.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Sprint Plan — Decompose Phase (helper)
|
|
9
|
+
|
|
10
|
+
> **Helper module.** Not a slash command. Invoked by `/epic-plan` (Phase 8).
|
|
11
|
+
> To run the decompose phase interactively, use `/epic-plan [Epic_ID]` — it
|
|
12
|
+
> delegates here after the spec phase.
|
|
13
|
+
|
|
14
|
+
## Role
|
|
15
|
+
|
|
16
|
+
Director / Architect
|
|
17
|
+
|
|
18
|
+
## Context
|
|
19
|
+
|
|
20
|
+
This helper is the **decompose phase** of the split planning pipeline. It
|
|
21
|
+
reads the PRD and Tech Spec previously produced by the spec phase helper
|
|
22
|
+
([`epic-plan-spec.md`](epic-plan-spec.md)), generates the Feature /
|
|
23
|
+
Story ticket hierarchy, persists it to GitHub, and flips the Epic to
|
|
24
|
+
`agent::ready` (parking) so a human can run `/epic-deliver` when
|
|
25
|
+
execution should begin.
|
|
26
|
+
|
|
27
|
+
The ticket array is authored **directly by you, the host LLM**.
|
|
28
|
+
`epic-plan-decompose.js` is a deterministic wrapper that (a) emits the
|
|
29
|
+
authoring context you need and (b) validates, persists, and transitions the
|
|
30
|
+
Epic lifecycle state.
|
|
31
|
+
|
|
32
|
+
The ticket array contains `type::feature` and `type::story` tickets
|
|
33
|
+
only — no `type::task` children. Acceptance criteria and verification
|
|
34
|
+
steps are inlined on each Story body via the `acceptance[]` and
|
|
35
|
+
`verify[]` fields. The decomposer system prompt lives in the
|
|
36
|
+
[`epic-plan-decompose-author`](../../skills/core/epic-plan-decompose-author/SKILL.md)
|
|
37
|
+
skill.
|
|
38
|
+
|
|
39
|
+
## Constraint
|
|
40
|
+
|
|
41
|
+
- **Do not** run this skill until the spec phase is complete. The Epic must
|
|
42
|
+
have linked `context::prd` and `context::tech-spec` issues; the script will
|
|
43
|
+
refuse to proceed otherwise.
|
|
44
|
+
- **Do not** reassign Story parents across Features after the
|
|
45
|
+
decomposition writes — the `epic-plan-state` checkpoint records the
|
|
46
|
+
structure as committed. Use `--force` to rebuild from scratch.
|
|
47
|
+
- **Every** temp file must include the Epic ID in its name. Multiple Epics
|
|
48
|
+
may be decomposed concurrently; bare names will collide.
|
|
49
|
+
- **Do not** flip the Epic past `agent::ready` from this helper. Execution
|
|
50
|
+
begins when an operator runs `/epic-deliver [Epic_ID]`.
|
|
51
|
+
|
|
52
|
+
## Prerequisites
|
|
53
|
+
|
|
54
|
+
1. **Epic is on `agent::review-spec`** — i.e. the spec phase has already run
|
|
55
|
+
and the PRD / Tech Spec exist.
|
|
56
|
+
2. **API keys** — `GITHUB_TOKEN` set in `.env`.
|
|
57
|
+
|
|
58
|
+
## Step 1 — Gather decomposition context
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
node .agents/scripts/epic-plan-decompose.js --epic [Epic_ID] --emit-context \
|
|
62
|
+
> temp/epic-[Epic_ID]/decomposer-context.json
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
The emitted JSON contains the PRD body, Tech Spec body, risk heuristics, the
|
|
66
|
+
decomposer system prompt, and the `maxTickets` **reviewability budget**
|
|
67
|
+
(Story #2798 — not a hard cap; over-budget plans require an explicit
|
|
68
|
+
`--allow-over-budget` override at persist time).
|
|
69
|
+
|
|
70
|
+
## Step 2 — Author the ticket array
|
|
71
|
+
|
|
72
|
+
Read `temp/epic-[Epic_ID]/decomposer-context.json`. Produce a JSON array of
|
|
73
|
+
Feature / Story objects that conforms to the schema in the system prompt
|
|
74
|
+
and write it to `temp/epic-[Epic_ID]/tickets.json`.
|
|
75
|
+
|
|
76
|
+
When the Tech Spec carries a `## Delivery Slicing` section, author toward the
|
|
77
|
+
Architect's proposed shippable-Story clusters rather than mapping PRD
|
|
78
|
+
capabilities 1:1; degrade gracefully (current behaviour) when it is absent.
|
|
79
|
+
|
|
80
|
+
## Step 2.5 — Phase 8.3: Holistic Consolidation (HITL diff gate)
|
|
81
|
+
|
|
82
|
+
The decompose phase runs in the sequence **emit-context → author →
|
|
83
|
+
consolidate → validate+persist**. Step 2 is the *author* half; this step is
|
|
84
|
+
the *consolidate* half, a separate critic pass run **before** the
|
|
85
|
+
deterministic validator and **before** the GitHub write.
|
|
86
|
+
|
|
87
|
+
Activate the
|
|
88
|
+
[`epic-plan-consolidate`](../../skills/core/epic-plan-consolidate/SKILL.md)
|
|
89
|
+
skill with `[Epic_ID]` as input. It reads the draft
|
|
90
|
+
`temp/epic-[Epic_ID]/tickets.json` plus the PRD / Tech Spec from
|
|
91
|
+
`decomposer-context.json`, reconciles the draft against the Tech Spec
|
|
92
|
+
`## Delivery Slicing` target (degrading gracefully when absent), and emits:
|
|
93
|
+
|
|
94
|
+
- a **consolidated** `temp/epic-[Epic_ID]/tickets.json` (overwriting the draft),
|
|
95
|
+
- a human-readable `temp/epic-[Epic_ID]/consolidation-report.md` (rationale +
|
|
96
|
+
before/after diff).
|
|
97
|
+
|
|
98
|
+
The pass is constrained to scope-preserving operations only — **merge Stories,
|
|
99
|
+
collapse single-Story Features into siblings, re-parent, rewire `depends_on`**.
|
|
100
|
+
It MUST NOT add scope or invent tickets. It resolves single-Story Features by
|
|
101
|
+
**collapsing** them (rec #2), never by splitting a lone Story into two; the
|
|
102
|
+
`assertNoSingleStoryFeature` validator stays as the post-consolidation
|
|
103
|
+
backstop.
|
|
104
|
+
|
|
105
|
+
> **HITL diff gate.** Show the operator
|
|
106
|
+
> `temp/epic-[Epic_ID]/consolidation-report.md` (the before/after diff +
|
|
107
|
+
> rationale) **before** running the persist call in Step 3. Consolidation is
|
|
108
|
+
> never auto-applied without operator review — the operator approves the
|
|
109
|
+
> consolidated plan (or rejects it and the draft is persisted instead). Only
|
|
110
|
+
> after approval proceed to Step 3.
|
|
111
|
+
|
|
112
|
+
This sub-step does **not** renumber the top-level lifecycle phases (9–12); it
|
|
113
|
+
is a sub-step of Phase 8.
|
|
114
|
+
|
|
115
|
+
## Step 3 — Persist and transition
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# Normal decomposition
|
|
119
|
+
node .agents/scripts/epic-plan-decompose.js --epic [Epic_ID] \
|
|
120
|
+
--tickets temp/epic-[Epic_ID]/tickets.json
|
|
121
|
+
|
|
122
|
+
# Re-decompose (closes existing child Features/Stories first)
|
|
123
|
+
node .agents/scripts/epic-plan-decompose.js --epic [Epic_ID] \
|
|
124
|
+
--tickets temp/epic-[Epic_ID]/tickets.json --force
|
|
125
|
+
|
|
126
|
+
# Persist an over-budget plan (Story #2798 — only after the operator
|
|
127
|
+
# has confirmed the over_budget_rationale on the Epic)
|
|
128
|
+
node .agents/scripts/epic-plan-decompose.js --epic [Epic_ID] \
|
|
129
|
+
--tickets temp/epic-[Epic_ID]/tickets.json --allow-over-budget
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
On success the script:
|
|
133
|
+
|
|
134
|
+
- Creates the Feature / Story hierarchy under the Epic.
|
|
135
|
+
- Updates the `epic-plan-state` structured comment with the ticket count
|
|
136
|
+
and decompose timestamp.
|
|
137
|
+
- Flips the Epic to `agent::ready`.
|
|
138
|
+
|
|
139
|
+
## Step 4 — Cross-validation
|
|
140
|
+
|
|
141
|
+
Delegate the structural invariants (hierarchy completeness, dependency DAG
|
|
142
|
+
acyclicity, missing complexity labels) to `epic-plan-healthcheck.js`. It is
|
|
143
|
+
the single source of truth for post-decompose validation — the Phase 10 run
|
|
144
|
+
inside `/epic-plan` calls the same script, so local and remote flows agree.
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
node .agents/scripts/epic-plan-healthcheck.js --epic [Epic_ID] --paranoid
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
`--paranoid` is the flag that runs the richer hierarchy and dependency
|
|
151
|
+
checks; pair it with `--epic [Epic_ID]` so the script can fetch the
|
|
152
|
+
ticket tree. `--dry-run` exists as well but only emits the planned
|
|
153
|
+
checks without performing any I/O — it is not a substitute for
|
|
154
|
+
`--paranoid` when you need the hierarchy invariants validated.
|
|
155
|
+
|
|
156
|
+
The script exits 0 regardless of findings (non-blocking), but lists any
|
|
157
|
+
`ERR`-level findings that must be addressed before execution:
|
|
158
|
+
|
|
159
|
+
- Missing `type::feature` / `type::story` tickets.
|
|
160
|
+
- Stories without `complexity::` labels.
|
|
161
|
+
- Dependency cycles across Stories.
|
|
162
|
+
|
|
163
|
+
For the semantic checks the healthcheck cannot automate, do these by eye:
|
|
164
|
+
|
|
165
|
+
- **Scope-overlap check**: Stories whose scope is "docs / runbook / README"
|
|
166
|
+
downstream of a "config + runbook" Story in the same Epic should carry a
|
|
167
|
+
scope-verification note pointing at
|
|
168
|
+
`git diff main -- <path>` against the upstream Story branch.
|
|
169
|
+
- **Risk flagging**: Confirm `risk::high` Stories match the heuristics in
|
|
170
|
+
the decomposer context.
|
|
171
|
+
|
|
172
|
+
Fix any gaps by creating additional issues or updating existing ones.
|
|
173
|
+
|
|
174
|
+
## Step 5 — Cleanup
|
|
175
|
+
|
|
176
|
+
The wrapper script deletes the phase-scoped temp files automatically when
|
|
177
|
+
Step 3 succeeds — no operator action required. The cleanup contract lives in
|
|
178
|
+
[`lib/plan-phase-cleanup.js`](../../scripts/lib/plan-phase-cleanup.js), which
|
|
179
|
+
is the single source of truth for which temp paths this phase owns.
|
|
180
|
+
|
|
181
|
+
## Handoff
|
|
182
|
+
|
|
183
|
+
- Surface the backlog summary and the Wave 0 candidates to the operator:
|
|
184
|
+
|
|
185
|
+
> "Decomposition complete. Epic #[ID] is on `agent::ready` with NN ticket(s)
|
|
186
|
+
> across MM Stories. Run `/epic-deliver [Epic_ID]` to begin execution."
|
|
187
|
+
|
|
188
|
+
## Troubleshooting
|
|
189
|
+
|
|
190
|
+
- "Epic #N is missing a linked PRD or Tech Spec" — run `/epic-plan [Epic_ID]`
|
|
191
|
+
first (it will run the spec phase if the PRD / Tech Spec are missing).
|
|
192
|
+
- Validator rejects the tickets file — the most common causes are a
|
|
193
|
+
Story whose `parent_slug` does not point at a Feature, a missing
|
|
194
|
+
`acceptance[]` / `verify[]` array on a Story body, or a Story
|
|
195
|
+
`depends_on` slug that does not resolve to another Story in the same
|
|
196
|
+
Epic.
|
|
197
|
+
- If `--force` is required but the script refuses, confirm the Epic has the
|
|
198
|
+
linked artifacts first — `--force` only re-decomposes; it does not bypass
|
|
199
|
+
the spec-phase prerequisite.
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: >-
|
|
3
|
+
Phase 7 of sprint planning — generate the PRD and Tech Spec for an Epic,
|
|
4
|
+
persist them as linked GitHub issues, and flip the Epic to
|
|
5
|
+
`agent::review-spec`. Host-LLM authored; no external API calls.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Sprint Plan — Spec Phase (helper)
|
|
9
|
+
|
|
10
|
+
> **Helper module.** Not a slash command. Invoked by `/epic-plan` (Phase 7).
|
|
11
|
+
> To run the spec phase interactively, use `/epic-plan [Epic_ID]` — it
|
|
12
|
+
> delegates here.
|
|
13
|
+
|
|
14
|
+
## Role
|
|
15
|
+
|
|
16
|
+
Director / Architect
|
|
17
|
+
|
|
18
|
+
## Context
|
|
19
|
+
|
|
20
|
+
This helper is the **spec phase** of the split planning pipeline. It produces
|
|
21
|
+
**three** planning artifacts for an Epic — a Product Requirements Document, a
|
|
22
|
+
Technical Specification, and an Acceptance Spec — persists them as
|
|
23
|
+
`context::prd`, `context::tech-spec`, and `context::acceptance-spec` issues
|
|
24
|
+
under the Epic, and flips the Epic to `agent::review-spec` (parking) so a human
|
|
25
|
+
reviewer can read the artifacts on GitHub before decomposition.
|
|
26
|
+
|
|
27
|
+
> **Single prose home.** The canonical, full-detail spec-phase contract
|
|
28
|
+
> (idempotent context tickets, the three-ticket rationale, the
|
|
29
|
+
> `acceptance::n-a` waiver, the Epic-lease preflight) lives in
|
|
30
|
+
> [`epic-plan.md` § Phase 7](../epic-plan.md). This helper carries only the
|
|
31
|
+
> operational step list; when the two disagree, `epic-plan.md` wins.
|
|
32
|
+
|
|
33
|
+
The PRD and Tech Spec are authored **directly by you, the host LLM**.
|
|
34
|
+
`epic-plan-spec.js` is a deterministic wrapper that (a) emits the authoring
|
|
35
|
+
context you need and (b) persists the artifacts and transitions the Epic
|
|
36
|
+
lifecycle state.
|
|
37
|
+
|
|
38
|
+
The complementary Phase 8 helper is
|
|
39
|
+
[`epic-plan-decompose.md`](epic-plan-decompose.md). The `/epic-plan`
|
|
40
|
+
wrapper chains both helpers with a confirmation gate in between.
|
|
41
|
+
|
|
42
|
+
## Constraint
|
|
43
|
+
|
|
44
|
+
- **Do not** create or modify tickets outside the `context::prd` /
|
|
45
|
+
`context::tech-spec` / `context::acceptance-spec` contract —
|
|
46
|
+
decomposition belongs to
|
|
47
|
+
[`epic-plan-decompose.md`](epic-plan-decompose.md).
|
|
48
|
+
- **Do not** flip the Epic to `agent::ready` from this skill. The terminal
|
|
49
|
+
label for the spec phase is `agent::review-spec`.
|
|
50
|
+
- **Every** temp file must include the Epic ID in its name. Multiple Epics may
|
|
51
|
+
be planned concurrently; bare names like `temp/prd.md` will collide.
|
|
52
|
+
- **Stop and hand back to the operator** after Step 4 when
|
|
53
|
+
`planningRisk.requiresReview` is true or the operator passed
|
|
54
|
+
`--force-review` — do not chain into decomposition. Low-risk Epics
|
|
55
|
+
auto-proceed to Phase 8 after the persist stdout confirms
|
|
56
|
+
`reviewRouting.decision === 'auto-proceed'`.
|
|
57
|
+
|
|
58
|
+
## Prerequisites
|
|
59
|
+
|
|
60
|
+
1. **GitHub Epic** — an open issue with the `type::epic` label. The Epic's
|
|
61
|
+
body should contain enough narrative context to seed the PRD.
|
|
62
|
+
2. **API keys** — `GITHUB_TOKEN` set in `.env`.
|
|
63
|
+
|
|
64
|
+
## Step 1 — Gather authoring context
|
|
65
|
+
|
|
66
|
+
Run the spec-phase CLI in context-emission mode to collect the Epic body, the
|
|
67
|
+
scraped project docs, and the recommended system prompts.
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
node .agents/scripts/epic-plan-spec.js --epic [Epic_ID] --emit-context \
|
|
71
|
+
> temp/epic-[Epic_ID]/planner-context.json
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Step 2 — Author the PRD
|
|
75
|
+
|
|
76
|
+
Read `temp/epic-[Epic_ID]/planner-context.json`. Using `systemPrompts.prd`
|
|
77
|
+
combined with the Epic title/body, write the PRD markdown to
|
|
78
|
+
`temp/epic-[Epic_ID]/prd.md`. Use the four-section structure (Context & Goals,
|
|
79
|
+
User Stories, Acceptance Criteria, Out of Scope) and start the document with
|
|
80
|
+
`## Overview` (no `<h1>`).
|
|
81
|
+
|
|
82
|
+
## Step 3 — Author the Tech Spec
|
|
83
|
+
|
|
84
|
+
Using `systemPrompts.techSpec`, the PRD you just wrote, and `docsContext`,
|
|
85
|
+
write the Tech Spec to `temp/epic-[Epic_ID]/techspec.md`. Start with
|
|
86
|
+
`## Technical Overview` (no `<h1>`).
|
|
87
|
+
|
|
88
|
+
## Step 3.5 — Author the risk verdict
|
|
89
|
+
|
|
90
|
+
Judge the change described by the PRD and Tech Spec you just wrote and
|
|
91
|
+
write `temp/epic-[Epic_ID]/risk-verdict.json` conforming to
|
|
92
|
+
[`risk-verdict.schema.json`](../../schemas/risk-verdict.schema.json):
|
|
93
|
+
`{ axes: [{ axis, level, rationale }], summary }`. The authoritative
|
|
94
|
+
authoring rules (axis vocabulary, judgment-not-keywords, derivation
|
|
95
|
+
preview) live in the
|
|
96
|
+
[`epic-plan-spec-author` Skill, Step 4](../../skills/core/epic-plan-spec-author/SKILL.md).
|
|
97
|
+
|
|
98
|
+
## Step 3.6 — Author the Acceptance Spec
|
|
99
|
+
|
|
100
|
+
Using `systemPrompts.acceptanceSpec`, the PRD, and the Tech Spec, write the
|
|
101
|
+
Acceptance Spec to `temp/epic-[Epic_ID]/acceptance-spec.md`. It captures the
|
|
102
|
+
stable-ID acceptance criteria table
|
|
103
|
+
(`| AC ID | Outcome | Feature File | Scenario | Disposition |`) that drives
|
|
104
|
+
close-time reconciliation in `/epic-deliver` Phase 6.
|
|
105
|
+
|
|
106
|
+
**Skip this step only** when the Epic carries the `acceptance::n-a` waiver
|
|
107
|
+
label (refactor-only or docs-only Epics); in that case omit `--acceptance-spec`
|
|
108
|
+
from Step 4.
|
|
109
|
+
|
|
110
|
+
## Step 4 — Persist and transition
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
# Normal flow (three context tickets)
|
|
114
|
+
node .agents/scripts/epic-plan-spec.js --epic [Epic_ID] \
|
|
115
|
+
--prd temp/epic-[Epic_ID]/prd.md \
|
|
116
|
+
--techspec temp/epic-[Epic_ID]/techspec.md \
|
|
117
|
+
--risk-verdict temp/epic-[Epic_ID]/risk-verdict.json \
|
|
118
|
+
--acceptance-spec temp/epic-[Epic_ID]/acceptance-spec.md
|
|
119
|
+
|
|
120
|
+
# Re-plan (--force overwrites the three context tickets in place)
|
|
121
|
+
node .agents/scripts/epic-plan-spec.js --epic [Epic_ID] \
|
|
122
|
+
--prd temp/epic-[Epic_ID]/prd.md \
|
|
123
|
+
--techspec temp/epic-[Epic_ID]/techspec.md \
|
|
124
|
+
--risk-verdict temp/epic-[Epic_ID]/risk-verdict.json \
|
|
125
|
+
--acceptance-spec temp/epic-[Epic_ID]/acceptance-spec.md --force
|
|
126
|
+
|
|
127
|
+
# Waived (acceptance::n-a label on Epic — no Acceptance Spec authored)
|
|
128
|
+
node .agents/scripts/epic-plan-spec.js --epic [Epic_ID] \
|
|
129
|
+
--prd temp/epic-[Epic_ID]/prd.md \
|
|
130
|
+
--techspec temp/epic-[Epic_ID]/techspec.md \
|
|
131
|
+
--risk-verdict temp/epic-[Epic_ID]/risk-verdict.json
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
On success the script:
|
|
135
|
+
|
|
136
|
+
- Validates the risk verdict against `risk-verdict.schema.json` (a
|
|
137
|
+
malformed verdict fails closed before any GitHub mutation) and derives
|
|
138
|
+
the `planningRisk` envelope from it.
|
|
139
|
+
- Creates `[PRD]`, `[Tech Spec]`, and `[Acceptance Spec]` child issues
|
|
140
|
+
(`context::prd` / `context::tech-spec` / `context::acceptance-spec`
|
|
141
|
+
labels). The Acceptance Spec is skipped when `--acceptance-spec` is
|
|
142
|
+
omitted under the `acceptance::n-a` waiver.
|
|
143
|
+
- Appends a `## Planning Artifacts` section to the Epic body.
|
|
144
|
+
- Upserts the `risk-verdict` structured comment recording the verdict and
|
|
145
|
+
the derived envelope.
|
|
146
|
+
- Upserts the `epic-plan-state` structured comment with the current phase,
|
|
147
|
+
PRD / Tech Spec / Acceptance Spec IDs, the `riskVerdict` field, and
|
|
148
|
+
timestamps.
|
|
149
|
+
- Flips the Epic to `agent::review-spec`.
|
|
150
|
+
|
|
151
|
+
## Step 5 — Cleanup
|
|
152
|
+
|
|
153
|
+
The wrapper script deletes the phase-scoped temp files automatically when
|
|
154
|
+
Step 4 succeeds — no operator action required. The cleanup contract lives in
|
|
155
|
+
[`lib/plan-phase-cleanup.js`](../../scripts/lib/plan-phase-cleanup.js), which
|
|
156
|
+
is the single source of truth for which temp paths this phase owns. If you
|
|
157
|
+
need to inspect the temp artefacts after the fact, re-run
|
|
158
|
+
`epic-plan-spec.js --emit-context` to regenerate the planner context.
|
|
159
|
+
|
|
160
|
+
## Handoff
|
|
161
|
+
|
|
162
|
+
Branch on the shared planning risk decision surfaced in the persist stdout
|
|
163
|
+
JSON (`planningRisk`, `reviewRouting`):
|
|
164
|
+
|
|
165
|
+
- **High risk or `--force-review` — STOP.** Surface the PRD and Tech Spec
|
|
166
|
+
URLs to the operator:
|
|
167
|
+
|
|
168
|
+
> "Spec phase complete for Epic #[ID]. Review PRD (#XX) and Tech Spec (#YY)
|
|
169
|
+
> on GitHub. When you're ready, re-run `/epic-plan [Epic_ID]` — the wrapper
|
|
170
|
+
> will pick up where it left off and run the decompose phase."
|
|
171
|
+
|
|
172
|
+
- **Low risk — auto-proceed.** Relay `reviewRouting.operatorMessage` and
|
|
173
|
+
continue directly to Phase 8 decomposition without waiting for verbal
|
|
174
|
+
approval in this session.
|
|
175
|
+
|
|
176
|
+
## Troubleshooting
|
|
177
|
+
|
|
178
|
+
- If `--emit-context` fails with "Epic not found", confirm the ID matches the
|
|
179
|
+
GitHub issue number and the token has `issues:read`.
|
|
180
|
+
- If the persist call fails after creating the PRD but before the Tech Spec,
|
|
181
|
+
re-run with `--force` (the script reuses the existing PRD when appropriate).
|
|
182
|
+
- If the Epic does not flip to `agent::review-spec` after the script claims
|
|
183
|
+
success, the label write likely races with a concurrent mutation — re-run the
|
|
184
|
+
persist step; it's idempotent against the existing PRD/Tech Spec.
|
|
@@ -0,0 +1,125 @@
|
|
|
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
|
+
> `/epic-deliver` or directly by an operator when the Epic-testing ticket
|
|
9
|
+
> needs refreshed evidence. For ad-hoc acceptance runs use `/qa-run-harness` —
|
|
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-harness` (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 `/epic-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-harness` with the chosen selector:
|
|
42
|
+
|
|
43
|
+
```text
|
|
44
|
+
/qa-run-harness "tag:@smoke and @risk-high"
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
The `/qa-run-harness` workflow (`.agents/workflows/qa-run-harness.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. `/epic-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-harness.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`.
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Parallel Tooling — Inline Helper
|
|
2
|
+
|
|
3
|
+
Procedural module read **inline** by workflows that perform context-gathering,
|
|
4
|
+
long-running shell work, or independent unit fan-out. This is **not** a slash
|
|
5
|
+
command — it is not projected into the flat `.claude/commands/` tree, so there
|
|
6
|
+
is no `/parallel-tooling`. Callers reference this file at the top of their first
|
|
7
|
+
scan / read instruction so the parallelism conventions land before the work
|
|
8
|
+
does.
|
|
9
|
+
|
|
10
|
+
The three rules below are the canonical dispatch shape for this codebase.
|
|
11
|
+
Apply them in order: a workflow that observes Rule 1 but ignores Rule 3
|
|
12
|
+
serialises its fan-out unnecessarily; a workflow that reaches for Rule 3
|
|
13
|
+
before exhausting Rule 1 spawns sub-agents to do work the host could have
|
|
14
|
+
batched in a single turn.
|
|
15
|
+
|
|
16
|
+
## Rule 1 — Batch independent reads in a single turn
|
|
17
|
+
|
|
18
|
+
When the next N tool calls do **not** depend on each other's results, issue
|
|
19
|
+
them in one assistant turn rather than serially. The host runtime executes
|
|
20
|
+
the batch in parallel; serial calls cost N round-trips for no gain.
|
|
21
|
+
|
|
22
|
+
- **Tool primitives:** `Read`, `Grep`, `Glob`, MCP `list_*` / `get_*` calls.
|
|
23
|
+
- **When:** reading the PRD, Tech Spec, and Story body up front; grepping
|
|
24
|
+
for multiple unrelated patterns; globbing several directory trees;
|
|
25
|
+
fetching independent GitHub tickets.
|
|
26
|
+
- **Anti-pattern:** sequential `Read` → wait → `Read` → wait → `Grep` chains
|
|
27
|
+
when none of the later calls reference earlier output.
|
|
28
|
+
- **Bounded fan-out:** keep the batch ≤ 10 calls per turn. Larger batches
|
|
29
|
+
blow the context budget and obscure the failure surface if one call errors.
|
|
30
|
+
|
|
31
|
+
## Rule 2 — `run_in_background` + `Monitor` for long shells
|
|
32
|
+
|
|
33
|
+
Shell commands that exceed roughly 30 seconds (test suites, installs,
|
|
34
|
+
multi-file lints, `git fetch --all`, container builds) **must** use the
|
|
35
|
+
`Bash` tool's `run_in_background: true` flag and stream events via the
|
|
36
|
+
`Monitor` tool. A synchronous `Bash` call holds the assistant turn open for
|
|
37
|
+
the full duration and blocks every other parallel opportunity.
|
|
38
|
+
|
|
39
|
+
- **Tool primitives:** `Bash(run_in_background: true)` + `Monitor`.
|
|
40
|
+
- **When:** `npm test`, `npm ci`, full-repo `eslint`/`biome` runs, long
|
|
41
|
+
fetches, anything you would have prefixed with `nohup` in a terminal.
|
|
42
|
+
- **Anti-pattern:** synchronous `Bash` with a 600 000 ms timeout used as a
|
|
43
|
+
blocker — that pattern is reserved for scripts whose exit is the
|
|
44
|
+
signal-to-proceed (e.g., `story-init.js`'s per-tree install, which the
|
|
45
|
+
parent skill calls out explicitly).
|
|
46
|
+
- **Don't poll with `sleep`:** `Monitor` returns on each stdout line. Loop
|
|
47
|
+
on `until <condition>; do sleep 2; done` only when no event stream is
|
|
48
|
+
available — never as a substitute for the event channel.
|
|
49
|
+
|
|
50
|
+
## Rule 3 — N parallel `Agent` calls in one turn for N independent units
|
|
51
|
+
|
|
52
|
+
When a workflow fans out across N independent units of work — N Stories in
|
|
53
|
+
a wave, N audit dimensions, N decomposition slices — dispatch all N
|
|
54
|
+
sub-agents in a **single assistant turn** by issuing N `Agent` tool calls
|
|
55
|
+
together. The host executes the calls concurrently; one turn per unit is
|
|
56
|
+
the same shape as Rule 1 but at the sub-agent layer.
|
|
57
|
+
|
|
58
|
+
- **Tool primitives:** `Agent` (one call per independent unit, all in one
|
|
59
|
+
turn).
|
|
60
|
+
- **When:** wave-level Story fan-out from `/epic-deliver`, per-dimension
|
|
61
|
+
audit dispatch, any "for each X in Xs run /Y X" loop where the Xs do not
|
|
62
|
+
share write paths.
|
|
63
|
+
- **Anti-pattern:** serial `Agent` calls (`Agent` → wait → `Agent` → wait)
|
|
64
|
+
for units that have no dependency edge between them. The wave aggregator
|
|
65
|
+
is designed for the parallel shape — the serial shape is strictly slower
|
|
66
|
+
and offers no isolation benefit.
|
|
67
|
+
- **Concurrency cap:** respect `delivery.deliverRunner.concurrencyCap` (or the
|
|
68
|
+
caller's wave-slot budget) — beyond that cap you starve other waves, not
|
|
69
|
+
speed up your own. When N exceeds the cap, slice into batches of `cap`
|
|
70
|
+
and dispatch each batch in its own turn.
|
|
71
|
+
|
|
72
|
+
## When the rules conflict
|
|
73
|
+
|
|
74
|
+
If a unit of work is both long (Rule 2) and independent (Rule 1 or 3),
|
|
75
|
+
prefer the higher-numbered rule — the parallelism gain compounds the
|
|
76
|
+
background-shell gain. Concretely: dispatch the `Agent` calls in one turn
|
|
77
|
+
(Rule 3), and **inside** each sub-agent let it apply Rule 2 to its own
|
|
78
|
+
long-running shells. The host does not need to micromanage the child's
|
|
79
|
+
shell strategy.
|
|
80
|
+
|
|
81
|
+
## Constraints
|
|
82
|
+
|
|
83
|
+
- **Never** chain serial calls when the host can batch them — the rules
|
|
84
|
+
above are about correctness of dispatch shape, not optimisation.
|
|
85
|
+
- **Never** use `run_in_background` for short commands (< 5 s). The
|
|
86
|
+
notification overhead exceeds the wall-clock savings.
|
|
87
|
+
- **Always** keep dependent calls sequential — Rule 1 is "batch
|
|
88
|
+
independent reads," not "batch everything."
|