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,317 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: >-
|
|
3
|
+
Per-story git worktree isolation model — configuration, lifecycle,
|
|
4
|
+
node_modules strategies, Windows notes, fallback mode, and human-reviewer
|
|
5
|
+
guidance.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Worktree-per-Story Lifecycle
|
|
9
|
+
|
|
10
|
+
Parallel epic execution can race when multiple story agents share one working
|
|
11
|
+
tree: rapid `git checkout` swaps cause `git add` to sweep another agent's WIP
|
|
12
|
+
into the wrong commit. Epic #229 moves each dispatched story into its own
|
|
13
|
+
`git worktree` at `.worktrees/story-<id>/` so branch swaps, staging, and reflog
|
|
14
|
+
activity are isolated per-story. The main checkout stays quiet.
|
|
15
|
+
|
|
16
|
+
This document is the operator and reviewer reference. See
|
|
17
|
+
[`epic-deliver`](../epic-deliver.md) and [`story-deliver`](../story-deliver.md)
|
|
18
|
+
for the broader execution flow and the Epic-229 Tech Spec for
|
|
19
|
+
architectural rationale.
|
|
20
|
+
|
|
21
|
+
## Configuration
|
|
22
|
+
|
|
23
|
+
All knobs live under `delivery.worktreeIsolation` in `.agentrc.json`:
|
|
24
|
+
|
|
25
|
+
```jsonc
|
|
26
|
+
{
|
|
27
|
+
"orchestration": {
|
|
28
|
+
"worktreeIsolation": {
|
|
29
|
+
"enabled": true, // master switch; false = single-tree (v5.5.1)
|
|
30
|
+
"root": ".worktrees", // relative to repo root; must stay inside it
|
|
31
|
+
"nodeModulesStrategy": "per-worktree", // per-worktree | symlink | pnpm-store
|
|
32
|
+
"primeFromPath": null, // required when strategy = "symlink"
|
|
33
|
+
"allowSymlinkOnWindows": false, // explicit opt-in for symlink on win32
|
|
34
|
+
"reapOnSuccess": true, // remove worktree after successful story merge
|
|
35
|
+
"reapOnCancel": true, // remove worktree when story is cancelled
|
|
36
|
+
"windowsPathLengthWarnThreshold": 240, // pre-flight warning threshold (MAX_PATH=260)
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
The schema is validated by `config-resolver.js`. Unknown strategies, `root`
|
|
43
|
+
values that escape the repo root, and shell-metacharacter injection in `root`
|
|
44
|
+
are all rejected at config-load time.
|
|
45
|
+
|
|
46
|
+
## Lifecycle
|
|
47
|
+
|
|
48
|
+
| Phase | When | What happens |
|
|
49
|
+
| --------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
50
|
+
| **Sweep** | Dispatch-manifest build (`/epic-plan`) and `/epic-deliver` | Stale `*.lock` files under `.git/` (older than 5 min) are removed before GC. |
|
|
51
|
+
| **GC** | Dispatch-manifest build (`/epic-plan`) and `/epic-deliver` | Orphan `.worktrees/story-*` whose stories are closed are reaped if clean. |
|
|
52
|
+
| **Force-drain** | `/epic-plan` boot (`worktree-sweep.js` via `drainPendingCleanupAtBoot`), `story-close` post-merge (`forceDrainPendingCleanup`), `/epic-deliver` Phase 7 | Retries `.worktrees/.pending-cleanup.json` (`git worktree remove` then `fs.rm`); Windows-only escalation enumerates user-mode handle holders and `taskkill`s them before re-trying. |
|
|
53
|
+
| **Ensure** | `story-init` (entry for `/story-deliver`) | `git worktree add .worktrees/story-<id>/` on the `story-<id>` branch. |
|
|
54
|
+
| **Run** | During story execution | Agent runs inside the worktree; HEAD/reflog activity is isolated. |
|
|
55
|
+
| **Reap** | After successful story merge (in `story-close`) | `git worktree remove` — refuses to delete dirty trees or unmerged branches. |
|
|
56
|
+
|
|
57
|
+
The `WorktreeManager` (`.agents/scripts/lib/worktree-manager.js`) is the single
|
|
58
|
+
authority for `ensure`, `reap`, `list`, `isSafeToRemove`, `gc`, `prune`, and
|
|
59
|
+
`sweepStaleLocks`. No other script may call `git worktree` directly.
|
|
60
|
+
|
|
61
|
+
Managed story worktrees are only eligible for `reap`/`gc` when the caller
|
|
62
|
+
provides the expected Epic branch, so cleanup cannot silently skip the merge
|
|
63
|
+
verification step.
|
|
64
|
+
|
|
65
|
+
### Stale-lock sweep
|
|
66
|
+
|
|
67
|
+
Even with per-story worktree isolation, the main repo's `.git/` dir is shared
|
|
68
|
+
state — `git worktree add/remove/prune`, `fetch`, auto-gc, and VSCode's git
|
|
69
|
+
extension all touch it. A crashed orchestrator can leave an orphaned
|
|
70
|
+
`.git/index.lock` (or `HEAD.lock`, `packed-refs.lock`, per-worktree
|
|
71
|
+
`index.lock`, etc.) that blocks the next run with a "another git process seems
|
|
72
|
+
to be running" error.
|
|
73
|
+
|
|
74
|
+
`sweepStaleLocks({ maxAgeMs = 300_000 })` removes well-known lock files whose
|
|
75
|
+
mtime exceeds the age threshold. Fresh locks (belonging to a legitimate
|
|
76
|
+
in-flight op) are skipped. It always runs immediately before `gc`, in the same
|
|
77
|
+
entry points (see table below).
|
|
78
|
+
|
|
79
|
+
### Sweep & GC entry points
|
|
80
|
+
|
|
81
|
+
Sweep and GC do **not** run at every Epic entry point — in particular,
|
|
82
|
+
`story-init` (the entry for `/story-deliver`) does not invoke them. The full
|
|
83
|
+
set of callers is:
|
|
84
|
+
|
|
85
|
+
| Entry point | Script / caller | Runs sweep? | Runs GC? | Force-drain? | Notes |
|
|
86
|
+
| --------------------------------------------------------------------- | --------------------------------------------------------- | ----------- | -------- | ------------ | --------------------------------------------------------------------------------------------------- |
|
|
87
|
+
| Dispatch manifest build (`/epic-plan` Phase 9) | `lib/orchestration/dispatch-pipeline.js::runWorktreeGc` | ✅ Yes | ✅ Yes | ✅ Yes | Called from `dispatch-engine.js::dispatch()`. Scoped to the epic being dispatched. |
|
|
88
|
+
| Spec / decompose CLI boot (`/epic-plan` helpers) | `drainPendingCleanupAtBoot` → `worktree-sweep.js` | ✅ Yes* | ❌ No | ✅ Yes | \*Drains the pending ledger then reaps `git worktree list` entries for done/closed Stories (`--force`). |
|
|
89
|
+
| Story merge (`/story-deliver` close) | `story-close.js` (`drainPendingCleanupAfterClose`) | ❌ No | ❌ No | ✅ Yes | Runs after the post-merge pipeline when worktree isolation is enabled. |
|
|
90
|
+
| Story close | `epic-deliver runner` (invoked by `story-close.js`) | ✅ Yes | ✅ Yes | ✅ Yes | Runs before branch deletion so reaping cannot collide with `git branch -D`. |
|
|
91
|
+
| Story init (`/story-deliver <storyId>`) | `story-init.js` | ❌ No | ❌ No | ❌ No | Story execution relies on the dispatch/close pair to clean up; it only creates its own worktree. |
|
|
92
|
+
| Epic deliver wave loop (`/epic-deliver`) | `/epic-deliver` slash command + `lib/orchestration/epic-runner/*` | ❌ No | ❌ No | ❌ No | Does not call `sweepStaleLocks` or `gc` directly; cleanup still flows through dispatch + close. |
|
|
93
|
+
| Drain pending-cleanup (operator-driven) | `drain-pending-cleanup.js` (run directly — see below) | n/a | n/a | ✅ Yes | Manual escape hatch; same drain + Windows escalation as the `/epic-plan` and `/epic-deliver` paths. |
|
|
94
|
+
|
|
95
|
+
Operator takeaway: if you need to force a sweep/GC without closing a story,
|
|
96
|
+
the most direct path is re-running `/epic-plan` (or rebuilding the dispatch
|
|
97
|
+
manifest via `dispatcher.js`) against the active epic. Running
|
|
98
|
+
`/story-deliver <storyId>` on its own does **not** clean up orphan worktrees
|
|
99
|
+
or stale locks.
|
|
100
|
+
|
|
101
|
+
## Draining the pending-cleanup ledger
|
|
102
|
+
|
|
103
|
+
`.worktrees/.pending-cleanup.json` accumulates entries when
|
|
104
|
+
`story-close.js` cannot remove a worktree on Windows because of an
|
|
105
|
+
EBUSY-class lock. Plan boot ([`drainPendingCleanupAtBoot`](../../scripts/epic-plan-spec.js) → [`worktree-sweep.js`](../../scripts/lib/orchestration/plan-runner/worktree-sweep.js))
|
|
106
|
+
retries the entries — but if the holder
|
|
107
|
+
is a long-lived user-mode process (a stranded test runner, a lingering
|
|
108
|
+
biome/tsc, a node REPL), the lock never clears and the entry pins.
|
|
109
|
+
|
|
110
|
+
[`drain-pending-cleanup.js`](../../scripts/drain-pending-cleanup.js)
|
|
111
|
+
runs the standard drain *and* enumerates handle holders via
|
|
112
|
+
PowerShell `Get-CimInstance Win32_Process`, terminating them with
|
|
113
|
+
`taskkill /T /F` before re-trying.
|
|
114
|
+
|
|
115
|
+
> **Not a slash command (decision overturned).** The drain is **not** a
|
|
116
|
+
> `/drain-pending-cleanup` slash command — it was demoted to a
|
|
117
|
+
> directly-runnable script (Story #3706, overturning the
|
|
118
|
+
> `docs/decisions.md` matrix row that originally kept it as a command).
|
|
119
|
+
> The three automatic callers — `/epic-deliver` runner Phase 7,
|
|
120
|
+
> `story-close.js`, and `worktree-sweep.js` — invoke
|
|
121
|
+
> `drain-pending-cleanup.js` **directly**, so the demotion does not touch
|
|
122
|
+
> them. The manual path survives unchanged as
|
|
123
|
+
> `node .agents/scripts/drain-pending-cleanup.js`.
|
|
124
|
+
|
|
125
|
+
### When it runs automatically
|
|
126
|
+
|
|
127
|
+
| Trigger | Caller |
|
|
128
|
+
| ---------------- | ---------------------------------------------------------------------------- |
|
|
129
|
+
| `/epic-deliver` | [`Cleaner` lifecycle listener](../../scripts/lib/orchestration/lifecycle/listeners/cleaner.js) at the close-tail cleanup phase (before `wm.gc()`) |
|
|
130
|
+
| `/epic-plan` | [`drainPendingCleanupAtBoot`](../../scripts/epic-plan-spec.js) → [`worktree-sweep.js`](../../scripts/lib/orchestration/plan-runner/worktree-sweep.js) |
|
|
131
|
+
| Story merge close | [`story-close.js`](../../scripts/story-close.js) (`drainPendingCleanupAfterClose`) |
|
|
132
|
+
|
|
133
|
+
All automatic paths call `forceDrainPendingCleanup()` (or are folded into
|
|
134
|
+
`sweepStaleStoryWorktrees`, which calls it first).
|
|
135
|
+
|
|
136
|
+
### When to run it manually
|
|
137
|
+
|
|
138
|
+
- The end-of-epic banner reports `pending-cleanup persistent-lock: story-N, ...`.
|
|
139
|
+
- `git worktree list` shows `.worktrees/story-N/` for a closed Story.
|
|
140
|
+
- `npm run lint` fails because of a nested `biome.json` in a half-reaped
|
|
141
|
+
worktree. The `worktree-residue-biome` self-healing check detects this
|
|
142
|
+
failure mode.
|
|
143
|
+
|
|
144
|
+
### Manual usage
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
# Default: drain + escalate (kill holders on Windows)
|
|
148
|
+
node .agents/scripts/drain-pending-cleanup.js
|
|
149
|
+
|
|
150
|
+
# Passive drain only — retry Stage 1 without killing anything
|
|
151
|
+
node .agents/scripts/drain-pending-cleanup.js --no-escalate
|
|
152
|
+
|
|
153
|
+
# Inspect what would be killed without acting
|
|
154
|
+
node .agents/scripts/drain-pending-cleanup.js --dry-run
|
|
155
|
+
|
|
156
|
+
# Override the worktree root (rare)
|
|
157
|
+
node .agents/scripts/drain-pending-cleanup.js --worktree-root /tmp/wt
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
The script always exits 0 unless the config or runtime is broken; remaining
|
|
161
|
+
entries are reported on stderr and re-enter the next sweep.
|
|
162
|
+
|
|
163
|
+
### Escalation limitations
|
|
164
|
+
|
|
165
|
+
Escalation matches process `ExecutablePath` and `CommandLine`. **Kernel-held
|
|
166
|
+
handles are invisible to user-mode enumeration**:
|
|
167
|
+
|
|
168
|
+
- **Windows Search indexer** (`searchindexer.exe`) — does not record the
|
|
169
|
+
worktree path in command line. Workaround: exclude `.worktrees/` in
|
|
170
|
+
Search Options, or wait for the indexer to release after ~5 min idle.
|
|
171
|
+
- **Antivirus** (`MsMpEng.exe`, third-party AV) — same story. Add
|
|
172
|
+
`.worktrees/` to scan exclusions if this recurs.
|
|
173
|
+
- **VSCode extension host** — files indexed by an open VSCode workspace.
|
|
174
|
+
Closing the workspace tab releases handles.
|
|
175
|
+
|
|
176
|
+
When `findHoldersInPath()` returns `[]` for a stuck entry, the script
|
|
177
|
+
emits a `no user-mode holders` warning and leaves the entry for the next
|
|
178
|
+
sweep — by which time the indexer/AV has usually moved on.
|
|
179
|
+
|
|
180
|
+
### Drain constraints
|
|
181
|
+
|
|
182
|
+
- **Never** call `git worktree` directly from inside the drain helper —
|
|
183
|
+
always go through `pending-cleanup.js` / `force-drain.js`. They
|
|
184
|
+
enforce manifest atomicity and Stage-1/Stage-2/Stage-3 ordering.
|
|
185
|
+
- **Never** widen `findHoldersInPath()` to kill processes outside the
|
|
186
|
+
worktree path. Match must be rooted at the worktree directory; a
|
|
187
|
+
loose match risks terminating unrelated user processes.
|
|
188
|
+
- **Always** treat escalation as best-effort: PowerShell or `taskkill`
|
|
189
|
+
failures must degrade to "leave the entry in the manifest" rather
|
|
190
|
+
than throw — the next sweep retries.
|
|
191
|
+
- **Always** preserve the `escalate: false` opt-out path so the
|
|
192
|
+
legacy `drainPendingCleanup` behaviour is reachable when an operator
|
|
193
|
+
needs to inspect without acting.
|
|
194
|
+
|
|
195
|
+
### Last-resort manual recipe
|
|
196
|
+
|
|
197
|
+
When even escalation can't clear an entry, the pre-`ff34fa9` recipe still
|
|
198
|
+
works:
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
cd <main-checkout>
|
|
202
|
+
node -e "require('fs').rmSync('.worktrees/story-<id>', {recursive:true,force:true})"
|
|
203
|
+
git worktree prune
|
|
204
|
+
git branch -D story-<id>
|
|
205
|
+
git push origin --delete story-<id>
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
(Direct `rm -rf .worktrees/story-<id>` may be blocked by the global
|
|
209
|
+
`Bash(rm -rf *)` deny hook. The Node `fs.rmSync` fallback above avoids
|
|
210
|
+
that shell-pattern denial.)
|
|
211
|
+
|
|
212
|
+
## `.agents` materialization
|
|
213
|
+
|
|
214
|
+
`.agents/` is a regular tracked directory in every checkout — the framework
|
|
215
|
+
repo tracks it directly, and npm-installed consumers materialize it via
|
|
216
|
+
`mandrel sync`. Because it is not a git submodule, a per-story worktree
|
|
217
|
+
carries no `.agents` gitlink, so `git worktree add` and `git worktree remove`
|
|
218
|
+
need no special handling for it: the directory is created and reaped like any
|
|
219
|
+
other tracked path.
|
|
220
|
+
|
|
221
|
+
## node_modules strategies
|
|
222
|
+
|
|
223
|
+
| Strategy | Behavior | When to pick it |
|
|
224
|
+
| -------------- | --------------------------------------------------------------------- | ---------------------------------------------------------------------- |
|
|
225
|
+
| `per-worktree` | Each worktree runs its own `npm/pnpm install`. Default. | Correct everywhere. Choose for small repos or when disk is cheap. |
|
|
226
|
+
| `symlink` | Symlinks `<wt>/node_modules` → `<primeFromPath>/node_modules`. | Large monorepos where install time dominates. Requires a primed donor. |
|
|
227
|
+
| `pnpm-store` | Each worktree still runs `pnpm install --frozen-lockfile`; savings come from the shared content-addressable store, not from skipping install. | Repos already on pnpm. Gets most of symlink's speed without fragility. |
|
|
228
|
+
|
|
229
|
+
Symlink strategy:
|
|
230
|
+
|
|
231
|
+
- `primeFromPath` (relative to repo root) must exist and contain `node_modules`.
|
|
232
|
+
- On Windows, `allowSymlinkOnWindows: true` is required — symlink semantics vary
|
|
233
|
+
by Windows version and may demand admin rights.
|
|
234
|
+
- `nodeModulesStrategy: "symlink"` without `primeFromPath` is a config error.
|
|
235
|
+
|
|
236
|
+
`pnpm-store` strategy — install is **not** eliminated:
|
|
237
|
+
|
|
238
|
+
- `installDependencies` in `lib/worktree/node-modules-strategy.js` runs
|
|
239
|
+
`pnpm install --frozen-lockfile` in every new worktree regardless of
|
|
240
|
+
strategy (symlink is the only strategy that truly skips install).
|
|
241
|
+
- The speed-up vs. `per-worktree` comes from pnpm's global
|
|
242
|
+
content-addressable store at `~/.local/share/pnpm/store` (or the platform
|
|
243
|
+
equivalent) — reused packages are hard-linked into the worktree instead of
|
|
244
|
+
re-downloaded and re-extracted. First-run on a cold store is no faster than
|
|
245
|
+
`per-worktree`, and `epic-plan-healthcheck.js` primes the store in the
|
|
246
|
+
main checkout to avoid paying that cost in parallel story windows.
|
|
247
|
+
|
|
248
|
+
## Windows notes
|
|
249
|
+
|
|
250
|
+
- **`core.longpaths=true`** is set on each new worktree to lift the 260-char
|
|
251
|
+
MAX_PATH ceiling. Some older build tools still truncate even with this flag;
|
|
252
|
+
the pre-flight warning below catches those cases before a build breaks.
|
|
253
|
+
- **Long-path warning**: when `worktreePath.length + 80` exceeds
|
|
254
|
+
`windowsPathLengthWarnThreshold` (default 240), `WorktreeManager` emits a
|
|
255
|
+
warning locally and the dispatcher posts an `⚠️` comment on the Epic issue.
|
|
256
|
+
Relocate `delivery.worktreeIsolation.root` to a shorter prefix (e.g.
|
|
257
|
+
`C:\w`) if you see this.
|
|
258
|
+
- **`packed-refs` contention**: two worktrees fetching concurrently can collide
|
|
259
|
+
on `.git/packed-refs.lock`. `gitFetchWithRetry` (`git-utils.js`) retries that
|
|
260
|
+
specific failure up to 3 times with 250/500/1000 ms backoff. Unrelated fetch
|
|
261
|
+
failures surface immediately — no retry.
|
|
262
|
+
|
|
263
|
+
## Fallback: single-tree mode
|
|
264
|
+
|
|
265
|
+
Set `delivery.worktreeIsolation.enabled: false` (or omit the block) to
|
|
266
|
+
restore v5.5.1 single-tree behavior:
|
|
267
|
+
|
|
268
|
+
- No `git worktree add` / `remove` calls.
|
|
269
|
+
- `assert-branch.js` and `computeStoryWaves` focus-area serialization remain in
|
|
270
|
+
place as the primary race guards.
|
|
271
|
+
- All existing v5.5.1 tests pass in this mode.
|
|
272
|
+
|
|
273
|
+
Pick single-tree mode when:
|
|
274
|
+
|
|
275
|
+
- The runner lacks disk/space for parallel `node_modules` trees and pnpm is
|
|
276
|
+
unavailable.
|
|
277
|
+
- Windows path limits are unsolvable via the long-path guard.
|
|
278
|
+
- You need a minimal-risk environment to debug an unrelated dispatcher issue.
|
|
279
|
+
|
|
280
|
+
## Reviewer guidance
|
|
281
|
+
|
|
282
|
+
Human reviewers should **keep using the main checkout** — not a worktree:
|
|
283
|
+
|
|
284
|
+
- The Epic branch accumulates the cumulative diff for code review; that lives on
|
|
285
|
+
the main checkout, not in any per-story worktree.
|
|
286
|
+
- Opening a worktree in an IDE can mislead: the working directory looks like the
|
|
287
|
+
main repo but carries a different HEAD. The main checkout is the canonical
|
|
288
|
+
place to read PRDs, Tech Specs, and run the `helpers/code-review.md`
|
|
289
|
+
procedure.
|
|
290
|
+
- `git worktree list --porcelain` on the main checkout enumerates any still
|
|
291
|
+
in-flight story worktrees if you need to inspect one — prefer read-only
|
|
292
|
+
operations (`git log`, `git show`) when you do.
|
|
293
|
+
|
|
294
|
+
## Constraint
|
|
295
|
+
|
|
296
|
+
- **Never** call `git worktree` directly — always go through `WorktreeManager`.
|
|
297
|
+
It enforces `storyId`/`branch` validation and path-traversal checks.
|
|
298
|
+
- **Only** let `WorktreeManager` pass `--force` after its safety checks have
|
|
299
|
+
established the Story worktree is removable and the plain Windows lock/cwd
|
|
300
|
+
retry has exhausted. Dirty unmerged work must still refuse deletion.
|
|
301
|
+
- **Never** commit the `.worktrees/` directory. It must be gitignored.
|
|
302
|
+
- **Always** use the main checkout for code review — not a per-story worktree.
|
|
303
|
+
- **Always** respect `delivery.worktreeIsolation.enabled: false` as a
|
|
304
|
+
first-class fallback mode, not a degraded one. v5.5.1 single-tree guards
|
|
305
|
+
(`assert-branch.js`, focus-area serialization) remain the primary defense in
|
|
306
|
+
that mode.
|
|
307
|
+
|
|
308
|
+
## Operator escape hatches
|
|
309
|
+
|
|
310
|
+
- **Force-remove a worktree**: if a worktree is wedged beyond the framework's
|
|
311
|
+
bounded retry path (e.g. from a crashed agent), operators can manually run
|
|
312
|
+
`git worktree remove --force <path>`. Confirm there is no uncommitted work
|
|
313
|
+
first.
|
|
314
|
+
- **Disable temporarily**: flip `enabled: false` in `.agentrc.json`. The next
|
|
315
|
+
`/story-deliver` skips worktree creation entirely.
|
|
316
|
+
- **Inspect live worktrees**: `git worktree list --porcelain` on the main
|
|
317
|
+
checkout. Each block shows `worktree <path>` / `branch refs/heads/story-<id>`.
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: >-
|
|
3
|
+
Guided first-run onboarding for a freshly installed Mandrel. Detects the
|
|
4
|
+
consumer stack, offers to scaffold any missing docsContextFiles, runs
|
|
5
|
+
`mandrel doctor` as a readiness gate, and hands off to a started /epic-plan.
|
|
6
|
+
The whole path is designed to take about 15 minutes from a clean checkout to
|
|
7
|
+
a planned Epic.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# /onboard
|
|
11
|
+
|
|
12
|
+
## Role
|
|
13
|
+
|
|
14
|
+
Onboarding guide. You walk a first-time operator from a freshly installed
|
|
15
|
+
Mandrel to their first planned Epic, composing the building blocks shipped by
|
|
16
|
+
the guided-onboard Feature (#3514): stack detection, docs scaffolding, the
|
|
17
|
+
`mandrel doctor` readiness check, and a started `/epic-plan` handoff.
|
|
18
|
+
|
|
19
|
+
## Overview
|
|
20
|
+
|
|
21
|
+
`/onboard` is the **guided first-successful-run path**. It sequences four
|
|
22
|
+
phases that each lean on an already-shipped, independently tested building
|
|
23
|
+
block, then hands the operator off to planning:
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
/onboard
|
|
27
|
+
→ Phase 1 — Detect stack (lib/onboard/detect-stack.js#detectStack)
|
|
28
|
+
→ Phase 2 — Offer docs scaffolding (lib/onboard/scaffold-docs.js#scaffoldDocs)
|
|
29
|
+
→ Phase 3 — Readiness gate (mandrel doctor → lib/cli/doctor.js)
|
|
30
|
+
→ Phase 4 — Handoff to /epic-plan (started, not auto-run)
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Each phase is **advisory and resumable**: re-running `/onboard` on an
|
|
34
|
+
already-onboarded project re-detects, re-checks, and offers the same handoff
|
|
35
|
+
without duplicating any scaffolding (the scaffolder only writes files that are
|
|
36
|
+
genuinely missing, and `mandrel doctor` is read-only).
|
|
37
|
+
|
|
38
|
+
### When to use `/onboard`
|
|
39
|
+
|
|
40
|
+
| Scenario | Command |
|
|
41
|
+
| --- | --- |
|
|
42
|
+
| First run after installing Mandrel into a project | `/onboard` |
|
|
43
|
+
| Plan a new Epic once onboarded | `/epic-plan <epicId>` or `/epic-plan --idea "<seed>"` |
|
|
44
|
+
| Deliver Epic-attached Stories | `/epic-deliver <epicId>` |
|
|
45
|
+
|
|
46
|
+
## Prerequisites
|
|
47
|
+
|
|
48
|
+
1. Mandrel installed and bootstrapped into the project. The zero-to-installed
|
|
49
|
+
path is `npx create-mandrel`, which installs the `mandrel`
|
|
50
|
+
package, runs `mandrel sync` to materialize the `.agents/` bundle, and then
|
|
51
|
+
execs `.agents/scripts/bootstrap.js` to provision the project (labels,
|
|
52
|
+
board, `.agentrc.json` seed). `/onboard` runs **after** that bootstrap
|
|
53
|
+
completes — it does not invoke `bootstrap.js` itself, so the coupling is
|
|
54
|
+
indirect: bootstrap owns first-time provisioning, `/onboard` owns the
|
|
55
|
+
guided first-successful-run. By the time you reach `/onboard`, the
|
|
56
|
+
`.agents/` bundle is present and `mandrel` resolves on the `PATH`.
|
|
57
|
+
2. `GITHUB_TOKEN` available in the project's `.env` (Phase 3 checks this; the
|
|
58
|
+
token value is never echoed).
|
|
59
|
+
|
|
60
|
+
## The ~15-minute first-successful-run path
|
|
61
|
+
|
|
62
|
+
`/onboard` is tuned so a brand-new operator can go from a clean checkout to a
|
|
63
|
+
planned Epic in roughly **15 minutes**. The budget breaks down as:
|
|
64
|
+
|
|
65
|
+
| Step | Phase | Rough budget |
|
|
66
|
+
| --- | --- | --- |
|
|
67
|
+
| Detect the stack and confirm the report | Phase 1 | ~1 min |
|
|
68
|
+
| Review the missing-docs offer and accept the scaffold | Phase 2 | ~3 min |
|
|
69
|
+
| Run `mandrel doctor` and clear any ✘ checks | Phase 3 | ~5 min |
|
|
70
|
+
| Start `/epic-plan` and describe the first Epic idea | Phase 4 | ~6 min |
|
|
71
|
+
|
|
72
|
+
If any single phase blows its budget — most often a Phase 3 remedy such as
|
|
73
|
+
authenticating `gh` or installing runtime deps — clear that one check and
|
|
74
|
+
re-run `/onboard`; the earlier phases are cheap and idempotent, so re-running
|
|
75
|
+
costs seconds.
|
|
76
|
+
|
|
77
|
+
### Sample-repo pointer
|
|
78
|
+
|
|
79
|
+
If you do not have a project to onboard yet and just want to see the path
|
|
80
|
+
end-to-end, point `/onboard` at the **stack-detection sample-repo fixture**
|
|
81
|
+
that ships with the framework. `detectStack` is fixture-driven by design (its
|
|
82
|
+
filesystem facade reads a real directory), and the unit suite exercises it
|
|
83
|
+
against an on-disk sample repo — see
|
|
84
|
+
[`tests/onboard/detect-stack.test.js`](../../tests/onboard/detect-stack.test.js),
|
|
85
|
+
which builds a sample repo with a lockfile, a `package.json`, and source files
|
|
86
|
+
and asserts the detected package manager, test runner, and primary language.
|
|
87
|
+
Use that fixture (or any small throwaway repo with a `package.json` and a few
|
|
88
|
+
source files) as the target for a dry first run before onboarding a real
|
|
89
|
+
project.
|
|
90
|
+
|
|
91
|
+
## Phase 1 — Detect the stack
|
|
92
|
+
|
|
93
|
+
Inspect the consumer repository root and report what Mandrel inferred before
|
|
94
|
+
touching anything. Use the detection helper shipped by Story #3520:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
node -e "import('./.agents/scripts/lib/onboard/detect-stack.js').then(m => console.log(JSON.stringify(m.detectStack(process.cwd()), null, 2)))"
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
`detectStack(root)` returns `{ packageManager, testRunner, primaryLanguage }`,
|
|
101
|
+
each inferred from on-disk signals (lockfiles, `package.json`, source-file
|
|
102
|
+
extensions) and `null` when no signal is found. Relay the report to the
|
|
103
|
+
operator so they can confirm Mandrel understood the project. Detection is
|
|
104
|
+
**read-only** — it never writes to disk — so a wrong guess is harmless and the
|
|
105
|
+
operator can simply correct course in their `.agentrc.json` later.
|
|
106
|
+
|
|
107
|
+
## Phase 2 — Offer to scaffold missing `docsContextFiles`
|
|
108
|
+
|
|
109
|
+
Mandrel agents perform a **mandatory read** of every file listed in
|
|
110
|
+
`project.docsContextFiles` before each task; a missing entry degrades every
|
|
111
|
+
downstream run. Detect which are absent and offer to scaffold stubs, using the
|
|
112
|
+
helper shipped by Story #3519:
|
|
113
|
+
|
|
114
|
+
1. **Preview (no writes).** Detect the missing set first:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
node -e "import('./.agents/scripts/lib/onboard/scaffold-docs.js').then(m => console.log(JSON.stringify(m.scaffoldDocs({ write: false }), null, 2)))"
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
`scaffoldDocs({ write: false })` returns `{ docsRoot, docsContextFiles,
|
|
121
|
+
missing, present, created }` without creating any files.
|
|
122
|
+
|
|
123
|
+
2. **Offer.** Show the operator the `missing` list and ask whether to scaffold
|
|
124
|
+
stubs. If the list is empty, report "all docsContextFiles present" and skip
|
|
125
|
+
to Phase 3.
|
|
126
|
+
|
|
127
|
+
3. **Scaffold (on acceptance).** When the operator accepts, write the stubs:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
node -e "import('./.agents/scripts/lib/onboard/scaffold-docs.js').then(m => console.log(JSON.stringify(m.scaffoldDocs({ write: true }), null, 2)))"
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Each missing file is seeded from a dedicated template under
|
|
134
|
+
`.agents/templates/docs/<name>` when one ships, otherwise from a generic
|
|
135
|
+
placeholder stub. The operator replaces the stub content with real docs
|
|
136
|
+
later; the point of the scaffold is that the mandatory-read never resolves
|
|
137
|
+
to a missing file.
|
|
138
|
+
|
|
139
|
+
This phase is **idempotent**: the scaffolder only writes files that are
|
|
140
|
+
actually absent, so re-running `/onboard` after a partial scaffold creates
|
|
141
|
+
only the still-missing stubs.
|
|
142
|
+
|
|
143
|
+
## Phase 3 — Readiness gate (`mandrel doctor`)
|
|
144
|
+
|
|
145
|
+
Run the doctor as a **readiness gate** before handing off to planning:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
mandrel doctor
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
`mandrel doctor` (see [`lib/cli/doctor.js`](../../lib/cli/doctor.js)) runs
|
|
152
|
+
every check in the registry in order — `node-version`, `git-available`,
|
|
153
|
+
`gh-available`, `github-token`, `gh-auth`, `commands-in-sync`, `runtime-deps`,
|
|
154
|
+
`agents-materialized`, `agents-drift`, `version-current` — and prints a
|
|
155
|
+
`✔`/`✘` line per check. Every failing check prints a `→ <remedy>` line, and
|
|
156
|
+
the command exits:
|
|
157
|
+
|
|
158
|
+
- **0** with `✅ Ready (N/N checks passed)` — proceed to Phase 4.
|
|
159
|
+
- **non-zero** with `❌ Not ready (M/N checks failed)` — **stop**. Work
|
|
160
|
+
through the `→` remedies (e.g. authenticate `gh`, set `GITHUB_TOKEN`,
|
|
161
|
+
install runtime deps), then re-run `mandrel doctor` until it is green.
|
|
162
|
+
|
|
163
|
+
Do **not** hand off to `/epic-plan` while the doctor is red — planning needs a
|
|
164
|
+
working `gh` / `GITHUB_TOKEN` and a materialized `.agents/` bundle, exactly
|
|
165
|
+
what the gate verifies. The `github-token` check never echoes the token value
|
|
166
|
+
(security baseline § Secrets Management).
|
|
167
|
+
|
|
168
|
+
## Phase 4 — Handoff to a started `/epic-plan`
|
|
169
|
+
|
|
170
|
+
With a green readiness gate, hand the operator off to planning. `/onboard`
|
|
171
|
+
**starts** the handoff — it surfaces the entry point and the idea-refinement
|
|
172
|
+
path — but does **not** auto-run `/epic-plan`, because Epic planning authors
|
|
173
|
+
GitHub artifacts and must stay under explicit operator control.
|
|
174
|
+
|
|
175
|
+
Present the operator with the two `/epic-plan` entry shapes:
|
|
176
|
+
|
|
177
|
+
- **From an idea** (no Epic exists yet):
|
|
178
|
+
|
|
179
|
+
```text
|
|
180
|
+
/epic-plan --idea "<one-line description of the first thing to build>"
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
This enters [`/epic-plan`](epic-plan.md) at Phase 1 (Idea Refinement),
|
|
184
|
+
which refines the seed into a PRD, Tech Spec, and a decomposed
|
|
185
|
+
Epic → Feature → Story backlog.
|
|
186
|
+
|
|
187
|
+
- **From an existing Epic** (a `type::epic` issue already exists):
|
|
188
|
+
|
|
189
|
+
```text
|
|
190
|
+
/epic-plan <epicId>
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Stop here and let the operator invoke `/epic-plan` themselves. Once they have
|
|
194
|
+
a planned Epic, the natural next step is `/epic-deliver <epicId>` to execute
|
|
195
|
+
it — but that is beyond the onboarding path.
|
|
196
|
+
|
|
197
|
+
## Constraints
|
|
198
|
+
|
|
199
|
+
- **Read-before-write.** Phases 1 and 3 are read-only; Phase 2 writes only
|
|
200
|
+
files that are genuinely missing and only on explicit operator acceptance.
|
|
201
|
+
- **Do not auto-run `/epic-plan`.** Phase 4 starts the handoff; the operator
|
|
202
|
+
invokes planning. Planning authors GitHub artifacts and stays under human
|
|
203
|
+
control.
|
|
204
|
+
- **Never echo secrets.** The `github-token` check and any token-related
|
|
205
|
+
remedy must not print the token value.
|
|
206
|
+
- **Stop on a red doctor.** A non-zero `mandrel doctor` exit blocks the
|
|
207
|
+
handoff until the operator clears the failing checks.
|