mandrel 2.60.0 → 2.61.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 +10 -10
- package/.agents/agents/story-worker.md +1 -1
- package/.agents/docs/agentrc-reference.json +4 -82
- package/.agents/docs/configuration.md +20 -87
- package/.agents/docs/workflows.md +1 -1
- package/.agents/instructions.md +1 -3
- package/.agents/rules/gherkin-standards.md +4 -0
- package/.agents/schemas/agentrc.schema.json +11 -486
- package/.agents/schemas/story-deliver-terminal.schema.json +10 -0
- package/.agents/schemas/validation-evidence.schema.json +2 -1
- package/.agents/scripts/README.md +14 -14
- package/.agents/scripts/acceptance-eval.js +32 -164
- package/.agents/scripts/agents-bootstrap-github.js +27 -129
- package/.agents/scripts/apply-quality-bootstrap.js +4 -40
- package/.agents/scripts/audit-baselines.js +6 -27
- package/.agents/scripts/audit-labels-bootstrap.js +5 -29
- package/.agents/scripts/audit-to-stories.js +91 -361
- package/.agents/scripts/boot-sweep.js +19 -72
- package/.agents/scripts/bootstrap.js +74 -395
- package/.agents/scripts/ceremony-derive.js +9 -45
- package/.agents/scripts/check-arch-cycles.js +14 -64
- package/.agents/scripts/check-baselines.js +8 -48
- package/.agents/scripts/check-context-budget.js +46 -172
- package/.agents/scripts/check-cyclomatic.js +12 -44
- package/.agents/scripts/check-dead-exports.js +13 -64
- package/.agents/scripts/check-doc-links.js +38 -186
- package/.agents/scripts/check-gherkin-corpus.js +24 -127
- package/.agents/scripts/check-test-temp-hygiene.js +28 -169
- package/.agents/scripts/coverage-capture.js +32 -99
- package/.agents/scripts/deliver-light.js +14 -101
- package/.agents/scripts/deliver-recover.js +6 -42
- package/.agents/scripts/deliver-run.js +36 -133
- package/.agents/scripts/diagnose-friction.js +24 -116
- package/.agents/scripts/drain-pending-cleanup.js +1 -1
- package/.agents/scripts/evidence-gate.js +23 -85
- package/.agents/scripts/file-ci-gap.js +10 -50
- package/.agents/scripts/generate-config-docs.js +30 -170
- package/.agents/scripts/generate-lens-checklists.js +8 -52
- package/.agents/scripts/generate-skills-index.js +14 -112
- package/.agents/scripts/generate-workflows-doc.js +10 -70
- package/.agents/scripts/git-cleanup.js +2 -34
- package/.agents/scripts/lib/Graph.js +24 -81
- package/.agents/scripts/lib/ITicketingProvider.js +47 -143
- package/.agents/scripts/lib/Logger.js +14 -76
- package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
- package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
- package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
- package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
- package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
- package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
- package/.agents/scripts/lib/audit-baselines/read.js +3 -16
- package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
- package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
- package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
- package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
- package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
- package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
- package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
- package/.agents/scripts/lib/audit-suite/findings.js +12 -52
- package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
- package/.agents/scripts/lib/audit-suite/index.js +1 -15
- package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
- package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
- package/.agents/scripts/lib/audit-suite/runner.js +13 -43
- package/.agents/scripts/lib/audit-suite/selector.js +49 -349
- package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
- package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
- package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
- package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
- package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
- package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
- package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
- package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
- package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
- package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
- package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
- package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
- package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
- package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
- package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
- package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
- package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
- package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
- package/.agents/scripts/lib/baseline-loader.js +12 -51
- package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
- package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
- package/.agents/scripts/lib/baselines/components.js +10 -61
- package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
- package/.agents/scripts/lib/baselines/crap-preview-incremental.js +5 -21
- package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
- package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
- package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
- package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
- package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
- package/.agents/scripts/lib/baselines/envelope.js +13 -129
- package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
- package/.agents/scripts/lib/baselines/git-base.js +23 -142
- package/.agents/scripts/lib/baselines/kernel.js +11 -111
- package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
- package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
- package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
- package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
- package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
- package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
- package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
- package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
- package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
- package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
- package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
- package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
- package/.agents/scripts/lib/baselines/path-canon.js +19 -128
- package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
- package/.agents/scripts/lib/baselines/reader.js +14 -107
- package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
- package/.agents/scripts/lib/baselines/scope.js +11 -135
- package/.agents/scripts/lib/baselines/writer.js +16 -149
- package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
- package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
- package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
- package/.agents/scripts/lib/bdd-step-index.js +26 -100
- package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
- package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
- package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
- package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
- package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
- package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
- package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
- package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
- package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
- package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
- package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
- package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
- package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
- package/.agents/scripts/lib/bootstrap/summary.js +1 -8
- package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
- package/.agents/scripts/lib/branch-name-guard.js +4 -23
- package/.agents/scripts/lib/changed-files.js +31 -143
- package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
- package/.agents/scripts/lib/checks/index.js +18 -101
- package/.agents/scripts/lib/checks/loop-health.js +11 -53
- package/.agents/scripts/lib/checks/state.js +16 -91
- package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
- package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
- package/.agents/scripts/lib/child-exec.js +39 -108
- package/.agents/scripts/lib/cli/standard-args.js +9 -116
- package/.agents/scripts/lib/cli-args.js +31 -146
- package/.agents/scripts/lib/cli-usage.js +5 -27
- package/.agents/scripts/lib/cli-utils.js +2 -12
- package/.agents/scripts/lib/close-validation/commands.js +13 -76
- package/.agents/scripts/lib/close-validation/gates.js +92 -331
- package/.agents/scripts/lib/close-validation/process.js +121 -151
- package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
- package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
- package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
- package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
- package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
- package/.agents/scripts/lib/close-validation/runner.js +53 -110
- package/.agents/scripts/lib/command-header.js +6 -28
- package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
- package/.agents/scripts/lib/config/baselines.js +3 -14
- package/.agents/scripts/lib/config/ci.js +8 -38
- package/.agents/scripts/lib/config/commands.js +1 -15
- package/.agents/scripts/lib/config/defaults.js +4 -33
- package/.agents/scripts/lib/config/delivery-routing.js +6 -35
- package/.agents/scripts/lib/config/explain.js +9 -80
- package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
- package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +2 -30
- package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
- package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
- package/.agents/scripts/lib/config/gates/index.js +2 -17
- package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
- package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
- package/.agents/scripts/lib/config/gates/shared.js +4 -64
- package/.agents/scripts/lib/config/github.js +4 -22
- package/.agents/scripts/lib/config/limits.js +4 -57
- package/.agents/scripts/lib/config/paths.js +2 -21
- package/.agents/scripts/lib/config/qa.js +4 -38
- package/.agents/scripts/lib/config/quality.js +76 -432
- package/.agents/scripts/lib/config/runners.js +12 -56
- package/.agents/scripts/lib/config/runtime.js +13 -57
- package/.agents/scripts/lib/config/shared.js +2 -16
- package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
- package/.agents/scripts/lib/config/temp-paths.js +40 -280
- package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
- package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
- package/.agents/scripts/lib/config-resolver.js +10 -52
- package/.agents/scripts/lib/config-schema-shared.js +1 -4
- package/.agents/scripts/lib/config-settings-schema-delivery.js +12 -294
- package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
- package/.agents/scripts/lib/config-settings-schema.js +37 -274
- package/.agents/scripts/lib/coverage-baseline.js +20 -110
- package/.agents/scripts/lib/coverage-capture-fullscope.js +12 -37
- package/.agents/scripts/lib/coverage-capture-incremental.js +12 -43
- package/.agents/scripts/lib/coverage-capture-usage.js +4 -24
- package/.agents/scripts/lib/coverage-capture.js +99 -224
- package/.agents/scripts/lib/coverage-utils.js +14 -79
- package/.agents/scripts/lib/cpu-pool.js +17 -123
- package/.agents/scripts/lib/crap-baseline-join.js +16 -88
- package/.agents/scripts/lib/crap-coordinates.js +6 -25
- package/.agents/scripts/lib/crap-engine.js +40 -153
- package/.agents/scripts/lib/crap-method-identity.js +16 -78
- package/.agents/scripts/lib/crap-utils.js +31 -155
- package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
- package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
- package/.agents/scripts/lib/dead-exports-knip.js +18 -56
- package/.agents/scripts/lib/dead-exports-mode.js +5 -24
- package/.agents/scripts/lib/degraded-mode.js +3 -26
- package/.agents/scripts/lib/dependency-parser.js +8 -40
- package/.agents/scripts/lib/dependency-version.js +13 -35
- package/.agents/scripts/lib/detect-package-manager.js +6 -36
- package/.agents/scripts/lib/doc-tiers.js +22 -126
- package/.agents/scripts/lib/duplicate-search.js +8 -72
- package/.agents/scripts/lib/env-loader.js +5 -27
- package/.agents/scripts/lib/error-redactor.js +6 -31
- package/.agents/scripts/lib/errors/index.js +2 -22
- package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
- package/.agents/scripts/lib/escomplex-kernel.js +21 -123
- package/.agents/scripts/lib/feedback-loop/graduator-core.js +93 -419
- package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
- package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -151
- package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
- package/.agents/scripts/lib/findings/classify-finding.js +14 -69
- package/.agents/scripts/lib/findings/promote-finding.js +14 -112
- package/.agents/scripts/lib/findings/provenance-field.js +11 -52
- package/.agents/scripts/lib/findings/route-finding.js +37 -255
- package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
- package/.agents/scripts/lib/findings/severity.js +18 -104
- package/.agents/scripts/lib/format-generated-json.js +12 -44
- package/.agents/scripts/lib/full-suite-lock.js +160 -429
- package/.agents/scripts/lib/full-suite-queue.js +213 -0
- package/.agents/scripts/lib/gates/baseline-store.js +5 -9
- package/.agents/scripts/lib/gates/friction.js +1 -3
- package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
- package/.agents/scripts/lib/gh-exec.js +31 -259
- package/.agents/scripts/lib/git/cached-fetch.js +9 -52
- package/.agents/scripts/lib/git/sync-from-base.js +15 -107
- package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
- package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
- package/.agents/scripts/lib/git-utils.js +37 -161
- package/.agents/scripts/lib/github/framework-repo.js +8 -71
- package/.agents/scripts/lib/github-url.js +2 -17
- package/.agents/scripts/lib/import-graph.js +11 -38
- package/.agents/scripts/lib/install-cmd-parser.js +4 -13
- package/.agents/scripts/lib/json-utils.js +3 -18
- package/.agents/scripts/lib/label-constants.js +16 -111
- package/.agents/scripts/lib/label-taxonomy.js +4 -30
- package/.agents/scripts/lib/maintainability-engine.js +12 -80
- package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
- package/.agents/scripts/lib/maintainability-utils.js +16 -92
- package/.agents/scripts/lib/mandrel-catalog.js +12 -70
- package/.agents/scripts/lib/notifications/notifier.js +13 -38
- package/.agents/scripts/lib/npm-scripts.js +4 -23
- package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
- package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
- package/.agents/scripts/lib/observability/signal-validator.js +5 -37
- package/.agents/scripts/lib/observability/signals-writer.js +11 -121
- package/.agents/scripts/lib/observability/source-classifier.js +21 -203
- package/.agents/scripts/lib/observability/terse-result.js +14 -47
- package/.agents/scripts/lib/onboard/init-tail.js +13 -74
- package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
- package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
- package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
- package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
- package/.agents/scripts/lib/orchestration/ceremony-routing.js +5 -75
- package/.agents/scripts/lib/orchestration/change-set.js +7 -36
- package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
- package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
- package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
- package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
- package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
- package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
- package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
- package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
- package/.agents/scripts/lib/orchestration/check-state.js +92 -0
- package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
- package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +42 -189
- package/.agents/scripts/lib/orchestration/code-review.js +24 -128
- package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
- package/.agents/scripts/lib/orchestration/complexity-gate.js +42 -214
- package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
- package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
- package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
- package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
- package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
- package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
- package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
- package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
- package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
- package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
- package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
- package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
- package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
- package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
- package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
- package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
- package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
- package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
- package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
- package/.agents/scripts/lib/orchestration/light-suitability.js +26 -231
- package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
- package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
- package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
- package/.agents/scripts/lib/orchestration/plan-context.js +52 -303
- package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
- package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
- package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
- package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
- package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
- package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
- package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +14 -78
- package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
- package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
- package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
- package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
- package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
- package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
- package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +49 -248
- package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
- package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +85 -368
- package/.agents/scripts/lib/orchestration/plan-persist/summary.js +8 -38
- package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +30 -190
- package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
- package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
- package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
- package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
- package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
- package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
- package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
- package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
- package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
- package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
- package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
- package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
- package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
- package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
- package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
- package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
- package/.agents/scripts/lib/orchestration/review-depth.js +12 -94
- package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
- package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
- package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
- package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
- package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
- package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
- package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
- package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
- package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
- package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
- package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
- package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
- package/.agents/scripts/lib/orchestration/run-epilogue.js +40 -199
- package/.agents/scripts/lib/orchestration/run-scoped-config.js +13 -81
- package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
- package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
- package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
- package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +83 -239
- package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +18 -80
- package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
- package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
- package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +136 -486
- package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
- package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +9 -50
- package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
- package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
- package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
- package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
- package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
- package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
- package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
- package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
- package/.agents/scripts/lib/orchestration/single-story-close/runner.js +110 -290
- package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
- package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
- package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
- package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
- package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
- package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
- package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
- package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
- package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -201
- package/.agents/scripts/lib/orchestration/story-follow-ups.js +43 -245
- package/.agents/scripts/lib/orchestration/story-init-envelope.js +4 -23
- package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
- package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
- package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -126
- package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
- package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
- package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
- package/.agents/scripts/lib/orchestration/ticket-validator.js +39 -181
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -250
- package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
- package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
- package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
- package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
- package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
- package/.agents/scripts/lib/path-security.js +3 -6
- package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
- package/.agents/scripts/lib/preflight-runner.js +13 -69
- package/.agents/scripts/lib/process-group.js +143 -0
- package/.agents/scripts/lib/project-root.js +2 -8
- package/.agents/scripts/lib/provider-factory.js +2 -25
- package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
- package/.agents/scripts/lib/qa/qa-session.js +15 -69
- package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
- package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
- package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
- package/.agents/scripts/lib/reserved-test-ids.js +9 -47
- package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
- package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
- package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
- package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
- package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
- package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
- package/.agents/scripts/lib/signals/detectors/common.js +12 -38
- package/.agents/scripts/lib/signals/index.js +2 -19
- package/.agents/scripts/lib/signals/schema.js +14 -109
- package/.agents/scripts/lib/signals/write.js +2 -11
- package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
- package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
- package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
- package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
- package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
- package/.agents/scripts/lib/single-story-sweep.js +14 -97
- package/.agents/scripts/lib/skills/parse-skill.js +13 -59
- package/.agents/scripts/lib/skills/skills-index.js +8 -29
- package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
- package/.agents/scripts/lib/source-extensions.js +11 -42
- package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
- package/.agents/scripts/lib/stdio-flush.js +9 -36
- package/.agents/scripts/lib/story-adjacency.js +8 -40
- package/.agents/scripts/lib/story-body/body-format-lints.js +22 -83
- package/.agents/scripts/lib/story-body/footer-block.js +11 -44
- package/.agents/scripts/lib/story-body/story-body.js +83 -358
- package/.agents/scripts/lib/temp-retention.js +42 -143
- package/.agents/scripts/lib/templates/decomposer-prompts.js +11 -65
- package/.agents/scripts/lib/test-env.js +12 -65
- package/.agents/scripts/lib/test-run-credit.js +10 -65
- package/.agents/scripts/lib/test-runner-contract.js +19 -74
- package/.agents/scripts/lib/test-temp.js +38 -184
- package/.agents/scripts/lib/test-tiers.js +12 -96
- package/.agents/scripts/lib/ticket-body-sections.js +21 -96
- package/.agents/scripts/lib/transpile.js +15 -74
- package/.agents/scripts/lib/util/concurrent-map.js +6 -25
- package/.agents/scripts/lib/util/parse-id-list.js +8 -34
- package/.agents/scripts/lib/util/poll-loop.js +8 -28
- package/.agents/scripts/lib/util/with-timeout.js +2 -11
- package/.agents/scripts/lib/validation-evidence.js +21 -96
- package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
- package/.agents/scripts/lib/wave-runner/live-probe.js +53 -221
- package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
- package/.agents/scripts/lib/workers/crap-worker.js +11 -64
- package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
- package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
- package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
- package/.agents/scripts/lib/workflow-closure.js +22 -105
- package/.agents/scripts/lib/workspace-provisioner.js +16 -54
- package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
- package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
- package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
- package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
- package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
- package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
- package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
- package/.agents/scripts/lib/worktree-manager.js +15 -40
- package/.agents/scripts/lint-issue-body.js +12 -68
- package/.agents/scripts/mandrel-update-preflight.js +10 -70
- package/.agents/scripts/merge-baseline.js +30 -104
- package/.agents/scripts/nav-registry-diff.js +22 -108
- package/.agents/scripts/notify.js +12 -69
- package/.agents/scripts/plan-context.js +27 -111
- package/.agents/scripts/plan-critics.js +12 -66
- package/.agents/scripts/plan-persist.js +31 -148
- package/.agents/scripts/plan-run-epilogue.js +11 -37
- package/.agents/scripts/pr-watch-with-update.js +76 -267
- package/.agents/scripts/providers/github/auth.js +3 -8
- package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
- package/.agents/scripts/providers/github/board-add.js +5 -21
- package/.agents/scripts/providers/github/branch-protection.js +11 -43
- package/.agents/scripts/providers/github/cache.js +2 -14
- package/.agents/scripts/providers/github/comments.js +7 -40
- package/.agents/scripts/providers/github/compose.js +3 -19
- package/.agents/scripts/providers/github/errors.js +22 -125
- package/.agents/scripts/providers/github/issues.js +31 -123
- package/.agents/scripts/providers/github/labels.js +24 -124
- package/.agents/scripts/providers/github/mappers.js +5 -27
- package/.agents/scripts/providers/github/merge-methods.js +3 -22
- package/.agents/scripts/providers/github/project-board.js +2 -17
- package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
- package/.agents/scripts/providers/github/request-helpers.js +5 -32
- package/.agents/scripts/providers/github/search-budget.js +9 -39
- package/.agents/scripts/providers/github/search-query.js +5 -26
- package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
- package/.agents/scripts/providers/github/sub-issues.js +7 -36
- package/.agents/scripts/providers/github/tickets.js +32 -134
- package/.agents/scripts/providers/github.js +18 -59
- package/.agents/scripts/prune-plan-run-labels.js +12 -46
- package/.agents/scripts/quality-preview.js +35 -220
- package/.agents/scripts/resolve-doc-tiers.js +3 -26
- package/.agents/scripts/resolve-stories.js +16 -67
- package/.agents/scripts/resync-status-column.js +6 -25
- package/.agents/scripts/run-tests.js +29 -104
- package/.agents/scripts/single-story-close.js +23 -135
- package/.agents/scripts/single-story-confirm-merge.js +32 -139
- package/.agents/scripts/single-story-init.js +47 -209
- package/.agents/scripts/stories-wave-tick.js +102 -472
- package/.agents/scripts/sync-agentrc.js +3 -21
- package/.agents/scripts/sync-claude-agents.js +9 -55
- package/.agents/scripts/sync-claude-commands.js +20 -110
- package/.agents/scripts/test-wrapper.js +6 -43
- package/.agents/scripts/update-coverage-baseline.js +5 -22
- package/.agents/scripts/update-crap-baseline.js +7 -30
- package/.agents/scripts/update-duplication-baseline.js +16 -92
- package/.agents/scripts/update-maintainability-baseline.js +8 -62
- package/.agents/scripts/update-ticket-state.js +1 -7
- package/.agents/scripts/validate-skills.js +6 -26
- package/.agents/templates/agent-protocol.md +2 -2
- package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
- package/.agents/workflows/audit-accessibility.md +4 -7
- package/.agents/workflows/audit-adrs.md +3 -6
- package/.agents/workflows/audit-architecture.md +3 -11
- package/.agents/workflows/audit-baselines.md +6 -9
- package/.agents/workflows/audit-clean-code.md +8 -12
- package/.agents/workflows/audit-data-model.md +3 -7
- package/.agents/workflows/audit-dependencies.md +4 -7
- package/.agents/workflows/audit-devops.md +4 -8
- package/.agents/workflows/audit-documentation.md +1 -4
- package/.agents/workflows/audit-mobile.md +4 -7
- package/.agents/workflows/audit-navigability.md +3 -6
- package/.agents/workflows/audit-performance.md +2 -4
- package/.agents/workflows/audit-privacy.md +4 -7
- package/.agents/workflows/audit-quality.md +4 -7
- package/.agents/workflows/audit-security.md +4 -7
- package/.agents/workflows/audit-seo.md +4 -7
- package/.agents/workflows/audit-sre.md +4 -7
- package/.agents/workflows/audit-to-stories.md +17 -30
- package/.agents/workflows/audit-ux-ui.md +4 -7
- package/.agents/workflows/helpers/audit-lens-core.md +1 -1
- package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
- package/.agents/workflows/helpers/deliver-digest.md +6 -4
- package/.agents/workflows/helpers/deliver-reference.md +114 -188
- package/.agents/workflows/helpers/deliver-story-reference.md +189 -533
- package/.agents/workflows/helpers/plan-reference.md +86 -139
- package/.agents/workflows/helpers/qa-core.md +12 -0
- package/.agents/workflows/memory-consolidate.md +1 -1
- package/.agents/workflows/qa-assist.md +27 -71
- package/.agents/workflows/qa-explore.md +19 -59
- package/.agents/workflows/qa-run.md +11 -33
- package/README.md +1 -1
- package/bin/mandrel.js +5 -46
- package/bin/postinstall.js +18 -107
- package/docs/CHANGELOG.md +25 -0
- package/lib/cli/doctor.js +11 -71
- package/lib/cli/init.js +26 -165
- package/lib/cli/migrate.js +5 -64
- package/lib/cli/registry.js +84 -467
- package/lib/cli/sync-agents.js +4 -64
- package/lib/cli/sync-commands.js +11 -64
- package/lib/cli/sync.js +34 -213
- package/lib/cli/uninstall.js +40 -219
- package/lib/cli/update.js +105 -661
- package/lib/cli/version-check.js +8 -72
- package/lib/cli/version-helpers.js +14 -87
- package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
- package/lib/migrations/index.js +15 -92
- package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
- package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
- package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
- package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
- package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
- package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
- package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
- package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
- package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +2 -21
- package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
- package/package.json +16 -14
- package/.agents/docs/SDLC.md +0 -590
- package/.agents/docs/quality-gates.md +0 -1183
- package/.agents/rules/known-tooling-behavior.md +0 -200
- package/.agents/rules/orchestration-error-handling.md +0 -61
- package/.agents/rules/test-seams.md +0 -59
- package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
- package/.agents/schemas/baselines/lint.schema.json +0 -47
- package/.agents/scripts/check-action-pinning.js +0 -260
- package/.agents/scripts/check-audit-attribution.js +0 -302
- package/.agents/scripts/check-baseline-drift.js +0 -211
- package/.agents/scripts/check-baseline-scope.js +0 -362
- package/.agents/scripts/check-generated-validator.js +0 -202
- package/.agents/scripts/check-knip-entries.js +0 -159
- package/.agents/scripts/check-lifecycle-lint.js +0 -294
- package/.agents/scripts/check-pinned-override-notes.js +0 -102
- package/.agents/scripts/check-schema-references.js +0 -368
- package/.agents/scripts/check-test-portability.js +0 -512
- package/.agents/scripts/check-workflow-citations.js +0 -218
- package/.agents/scripts/check-workflow-cli-lint.js +0 -299
- package/.agents/scripts/check-workflow-timeouts.js +0 -291
- package/.agents/scripts/install-matrix-assert.js +0 -326
- package/.agents/scripts/lib/audit-advisories.js +0 -195
- package/.agents/scripts/lib/audit-attribution.js +0 -134
- package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
- package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
- package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
- package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
- package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
- package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
- package/.agents/scripts/lib/c8-cli-path.js +0 -21
- package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
- package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
- package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
- package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
- package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
- package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
- package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
- package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
- package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
- package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
- package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
- package/.agents/scripts/lib/fs-walk.js +0 -52
- package/.agents/scripts/lib/knip-config-resolver.js +0 -181
- package/.agents/scripts/lib/knip-entry-sync.js +0 -452
- package/.agents/scripts/lib/pinned-override-notes.js +0 -88
- package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
- package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
- package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
- package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
- package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
- package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
- package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
- package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
- package/.agents/scripts/lib/test-isolate/runner.js +0 -483
- package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
- package/.agents/scripts/lib/test-profile/render-report.js +0 -45
- package/.agents/scripts/lint-label-vocabulary.js +0 -214
- package/.agents/scripts/post-structured-comment.js +0 -127
- package/.agents/scripts/provision-git-hooks.js +0 -85
- package/.agents/scripts/prune-baseline-orphans.js +0 -181
- package/.agents/scripts/run-coverage.js +0 -197
- package/.agents/scripts/run-lint.js +0 -133
- package/.agents/scripts/run-test-profile.js +0 -129
- package/.agents/scripts/run-verify.js +0 -125
- package/.agents/scripts/test-isolate.js +0 -55
- package/.agents/scripts/update-dead-exports-baseline.js +0 -321
|
@@ -1,14 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* is idempotent and additive — re-running on an already-bootstrapped clone
|
|
6
|
-
* produces zero file mutations and zero network I/O.
|
|
7
|
-
*
|
|
8
|
-
* Injectable seams: every function that performs filesystem I/O or spawns a
|
|
9
|
-
* child process accepts an optional `fsImpl` / `spawnImpl` default-param so
|
|
10
|
-
* unit tests can stub I/O without touching the real filesystem. The seam
|
|
11
|
-
* contract is defined in `.agents/rules/test-seams.md`.
|
|
2
|
+
* Deterministic project bootstrap steps. Every step is idempotent and
|
|
3
|
+
* additive: a re-run on a bootstrapped clone mutates nothing and does no
|
|
4
|
+
* network I/O.
|
|
12
5
|
*/
|
|
13
6
|
|
|
14
7
|
import { spawnSync as defaultSpawnSync } from 'node:child_process';
|
|
@@ -25,36 +18,19 @@ import { applyQualityBootstrap } from './quality-bootstrap.js';
|
|
|
25
18
|
|
|
26
19
|
export const SYNC_COMMAND = 'node .agents/scripts/sync-claude-commands.js';
|
|
27
20
|
|
|
28
|
-
//
|
|
29
|
-
// command projection does — `sync:agents` script, `prepare`, and the bootstrap
|
|
30
|
-
// `sync` phase (`runSyncCommands`) — so `.claude/agents/*.md` materializes for
|
|
31
|
-
// hosts that read it, exactly as `.claude/commands/*.md` does.
|
|
21
|
+
// The agent projection runs everywhere the command projection does.
|
|
32
22
|
export const SYNC_AGENTS_COMMAND = 'node .agents/scripts/sync-claude-agents.js';
|
|
33
23
|
|
|
34
24
|
export const BOOTSTRAP_COMMAND = 'node .agents/scripts/bootstrap.js';
|
|
35
25
|
|
|
36
|
-
/**
|
|
37
|
-
* Marker that identifies the framework's system-prompt import inside a
|
|
38
|
-
* consumer `CLAUDE.md`. The wiring step keys idempotence off this exact
|
|
39
|
-
* import path so a re-run never duplicates the import line.
|
|
40
|
-
*/
|
|
26
|
+
/** `CLAUDE.md` wiring keys idempotence off this exact import path. */
|
|
41
27
|
export const SYSTEM_PROMPT_IMPORT = '@.agents/instructions.md';
|
|
42
28
|
|
|
43
|
-
/**
|
|
44
|
-
* Import block appended to an existing `CLAUDE.md` that lacks the import.
|
|
45
|
-
* Mirrors the root `CLAUDE.md` shape (a `## System Prompt` heading above
|
|
46
|
-
* the import) so the consumer file reads the same as this repo's own.
|
|
47
|
-
*/
|
|
48
29
|
export const SYSTEM_PROMPT_BLOCK = `## System Prompt
|
|
49
30
|
|
|
50
31
|
${SYSTEM_PROMPT_IMPORT}
|
|
51
32
|
`;
|
|
52
33
|
|
|
53
|
-
/**
|
|
54
|
-
* Full `CLAUDE.md` body written when the consumer has no `CLAUDE.md` at
|
|
55
|
-
* all. A bare title plus the import block is enough for Claude Code to
|
|
56
|
-
* hydrate the framework system prompt on cold start.
|
|
57
|
-
*/
|
|
58
34
|
export const SYSTEM_PROMPT_CLAUDE_MD = `# Agent Protocols
|
|
59
35
|
|
|
60
36
|
${SYSTEM_PROMPT_BLOCK}`;
|
|
@@ -70,21 +46,12 @@ export const GITIGNORE_BLOCKS = Object.freeze({
|
|
|
70
46
|
block:
|
|
71
47
|
'\n# Project-scoped MCP config carries secrets — keep out of git.\n.mcp.json\n',
|
|
72
48
|
},
|
|
73
|
-
//
|
|
74
|
-
// to put `GITHUB_TOKEN` here). It MUST be ignored by default so a cold-start
|
|
75
|
-
// provision never stages/pushes it. The pattern matches a bare `.env` (with
|
|
76
|
-
// an optional trailing slash) but deliberately NOT `.env.example`, the
|
|
77
|
-
// committed placeholder that `security-baseline.md` § Secrets Management
|
|
78
|
-
// exempts.
|
|
49
|
+
// Matches bare `.env` but NOT the committed `.env.example` placeholder.
|
|
79
50
|
env: {
|
|
80
51
|
pattern: /^\s*\.env\/?\s*$/m,
|
|
81
52
|
block:
|
|
82
53
|
'\n# Secrets live in .env (e.g. GITHUB_TOKEN) — never commit it. Only .env.example (placeholders) is checked in.\n.env\n',
|
|
83
54
|
},
|
|
84
|
-
// Story #3894: the install ledger is a per-clone install record, not a
|
|
85
|
-
// checked-in source artifact. `install-ledger.js` documents that the
|
|
86
|
-
// bootstrap `.gitignore` step ignores it — key the entry off the exact
|
|
87
|
-
// `LEDGER_RELATIVE_PATH` constant so the doc and code never drift again.
|
|
88
55
|
installLedger: {
|
|
89
56
|
pattern: new RegExp(
|
|
90
57
|
`^\\s*${LEDGER_RELATIVE_PATH.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\s*$`,
|
|
@@ -95,9 +62,6 @@ export const GITIGNORE_BLOCKS = Object.freeze({
|
|
|
95
62
|
});
|
|
96
63
|
|
|
97
64
|
/**
|
|
98
|
-
* Read a JSON file if it exists; return null when missing. Accepts an
|
|
99
|
-
* injectable `fsImpl` so callers can stub filesystem access in tests.
|
|
100
|
-
*
|
|
101
65
|
* @param {string} p
|
|
102
66
|
* @param {typeof fs} [fsImpl]
|
|
103
67
|
* @returns {object|null}
|
|
@@ -108,10 +72,6 @@ function readJsonIfExists(p, fsImpl = fs) {
|
|
|
108
72
|
}
|
|
109
73
|
|
|
110
74
|
/**
|
|
111
|
-
* Write a pretty-printed JSON file, creating parent directories as needed.
|
|
112
|
-
* Accepts an injectable `fsImpl` so callers can stub filesystem access in
|
|
113
|
-
* tests.
|
|
114
|
-
*
|
|
115
75
|
* @param {string} p
|
|
116
76
|
* @param {object} obj
|
|
117
77
|
* @param {typeof fs} [fsImpl]
|
|
@@ -122,28 +82,13 @@ function writeJson(p, obj, fsImpl = fs) {
|
|
|
122
82
|
}
|
|
123
83
|
|
|
124
84
|
/**
|
|
125
|
-
*
|
|
126
|
-
*
|
|
127
|
-
* Rationale: `22.22.1` is the Node 22 LTS patch that ships with the
|
|
128
|
-
* `node:sqlite` built-in (`--experimental-sqlite` removed from flag
|
|
129
|
-
* requirement in 22.5.0, but the module stabilised at 22.22.1 per the
|
|
130
|
-
* Node 22 LTS changelog). Pinning to this patch prevents silent failures on
|
|
131
|
-
* older 22.x installs that lack the built-in. CI exercises `node-version: 22`
|
|
132
|
-
* which resolves to the latest 22.x (always ≥ 22.22.1 in the current GHA
|
|
133
|
-
* environment), so CI validates the contract without exercising the exact
|
|
134
|
-
* patch floor — the floor is enforced at install time, not in CI.
|
|
135
|
-
*
|
|
136
|
-
* Single source of truth: `registry.js` and any other consumer MUST import
|
|
137
|
-
* this constant rather than duplicating it.
|
|
138
|
-
*
|
|
139
|
-
* Matches `package.json` `engines.node` (`>=22.22.1 <25`).
|
|
85
|
+
* Node floor SSOT (`node:sqlite` stabilised at 22.22.1); import it, never
|
|
86
|
+
* duplicate. Matches `package.json` `engines.node` (`>=22.22.1 <25`).
|
|
140
87
|
*/
|
|
141
88
|
export const REQUIRED_NODE_FLOOR = '22.22.1';
|
|
142
89
|
export const REQUIRED_NODE_CEILING_MAJOR = 25;
|
|
143
90
|
|
|
144
91
|
/**
|
|
145
|
-
* Return true when `version` satisfies `>=22.22.1 <25` (same as `engines`).
|
|
146
|
-
*
|
|
147
92
|
* @param {string} version
|
|
148
93
|
* @returns {boolean}
|
|
149
94
|
*/
|
|
@@ -161,10 +106,6 @@ export function satisfiesNodeEngine(version) {
|
|
|
161
106
|
}
|
|
162
107
|
|
|
163
108
|
/**
|
|
164
|
-
* Step 1 — Verify Node satisfies `engines.node`. Returns `{ ok, version,
|
|
165
|
-
* required }` so the CLI can report the detected version regardless of
|
|
166
|
-
* whether the check passed.
|
|
167
|
-
*
|
|
168
109
|
* @param {string} [version=process.versions.node]
|
|
169
110
|
*/
|
|
170
111
|
export function checkNodeVersion(version = process.versions.node) {
|
|
@@ -176,12 +117,7 @@ export function checkNodeVersion(version = process.versions.node) {
|
|
|
176
117
|
}
|
|
177
118
|
|
|
178
119
|
/**
|
|
179
|
-
*
|
|
180
|
-
* `npm` when no lock is found (including the `null` case from the shared
|
|
181
|
-
* helper where no Node manifest exists at all).
|
|
182
|
-
*
|
|
183
|
-
* Delegates to the shared `detectPackageManager` helper
|
|
184
|
-
* (Story #4048 B3 — one implementation per concept).
|
|
120
|
+
* Lockfile-based; defaults to `npm`.
|
|
185
121
|
*
|
|
186
122
|
* @param {string} projectRoot
|
|
187
123
|
* @param {typeof fs} [fsImpl]
|
|
@@ -192,12 +128,8 @@ export function detectPackageManager(projectRoot, fsImpl = fs) {
|
|
|
192
128
|
}
|
|
193
129
|
|
|
194
130
|
/**
|
|
195
|
-
*
|
|
196
|
-
* `
|
|
197
|
-
* is never mutated with framework runtime dependencies: those arrive
|
|
198
|
-
* transitively via the `mandrel` package, so bootstrap leaves the
|
|
199
|
-
* `dependencies` block untouched (Story #3466). Returns the per-key outcome
|
|
200
|
-
* the caller can render.
|
|
131
|
+
* Ensure `package.json` carries the sync/prepare/bootstrap scripts. Never
|
|
132
|
+
* touches `dependencies` — framework deps arrive transitively via `mandrel`.
|
|
201
133
|
*
|
|
202
134
|
* @param {object} ctx
|
|
203
135
|
* @param {typeof fs} [ctx.fsImpl]
|
|
@@ -237,9 +169,7 @@ export function ensurePackageJson(ctx) {
|
|
|
237
169
|
pkg.scripts.prepare = `${SYNC_COMMAND} && ${SYNC_AGENTS_COMMAND}`;
|
|
238
170
|
outcomes.scriptsPrepare = 'added';
|
|
239
171
|
} else {
|
|
240
|
-
// Append each projection independently so
|
|
241
|
-
// carries the command sync still gains the agent sync on the next bootstrap
|
|
242
|
-
// (and both are idempotent — a prepare carrying both is left untouched).
|
|
172
|
+
// Append each projection independently so a partial prepare gains the other.
|
|
243
173
|
let next = prepare;
|
|
244
174
|
if (!next.includes('sync-claude-commands.js')) {
|
|
245
175
|
next = `${next} && ${SYNC_COMMAND}`;
|
|
@@ -252,9 +182,7 @@ export function ensurePackageJson(ctx) {
|
|
|
252
182
|
outcomes.scriptsPrepare = 'appended';
|
|
253
183
|
}
|
|
254
184
|
}
|
|
255
|
-
//
|
|
256
|
-
// setup command. An operator-defined `bootstrap` script always wins —
|
|
257
|
-
// we only seed the default when the key is absent.
|
|
185
|
+
// An operator-defined `bootstrap` script always wins.
|
|
258
186
|
if (!pkg.scripts.bootstrap) {
|
|
259
187
|
pkg.scripts.bootstrap = BOOTSTRAP_COMMAND;
|
|
260
188
|
outcomes.scriptsBootstrap = 'added';
|
|
@@ -270,11 +198,7 @@ export function ensurePackageJson(ctx) {
|
|
|
270
198
|
}
|
|
271
199
|
|
|
272
200
|
/**
|
|
273
|
-
*
|
|
274
|
-
* unresolvable. Bootstrap no longer seeds framework deps into the consumer
|
|
275
|
-
* manifest (Story #3466) — they arrive transitively via `mandrel`
|
|
276
|
-
* — so the install is triggered purely by an empty/stale `node_modules`.
|
|
277
|
-
* Returns `{ ran, manager, skipped, reason }`.
|
|
201
|
+
* Install dependencies when the sentinel module (`ajv`) is unresolvable.
|
|
278
202
|
*
|
|
279
203
|
* @param {object} ctx
|
|
280
204
|
* @param {typeof fs} [ctx.fsImpl]
|
|
@@ -310,15 +234,8 @@ export function ensureDependenciesInstalled(ctx) {
|
|
|
310
234
|
}
|
|
311
235
|
|
|
312
236
|
/**
|
|
313
|
-
*
|
|
314
|
-
*
|
|
315
|
-
* Seeds from the bundled `starter-agentrc.json` reference, applying the
|
|
316
|
-
* operator-identity placeholder substitution (`[OWNER]` / `[REPO]` /
|
|
317
|
-
* `[USERNAME]`) and the `baseBranch` override. (Story #3690 removed the
|
|
318
|
-
* named config-profile seeding path — the starter reference is the single
|
|
319
|
-
* seed source.)
|
|
320
|
-
*
|
|
321
|
-
* An existing `.agentrc.json` is never overwritten — operator wins.
|
|
237
|
+
* Seed a missing `.agentrc.json` from `starter-agentrc.json` with identity
|
|
238
|
+
* placeholders filled. Never overwrites an existing file.
|
|
322
239
|
*
|
|
323
240
|
* @param {object} ctx
|
|
324
241
|
* @param {typeof fs} [ctx.fsImpl]
|
|
@@ -342,9 +259,7 @@ export function ensureAgentrc(ctx) {
|
|
|
342
259
|
.replace(/\[OWNER\]/g, ctx.answers.owner)
|
|
343
260
|
.replace(/\[REPO\]/g, ctx.answers.repo)
|
|
344
261
|
.replace(/\[USERNAME\]/g, ctx.answers.operatorHandle ?? ctx.answers.owner);
|
|
345
|
-
// The starter pins baseBranch to "main"
|
|
346
|
-
// different default, update the seeded copy so the per-clone config
|
|
347
|
-
// matches the live remote HEAD.
|
|
262
|
+
// The starter pins baseBranch to "main".
|
|
348
263
|
if (ctx.answers.baseBranch && ctx.answers.baseBranch !== 'main') {
|
|
349
264
|
body = body.replace(
|
|
350
265
|
/"baseBranch":\s*"main"/,
|
|
@@ -356,8 +271,7 @@ export function ensureAgentrc(ctx) {
|
|
|
356
271
|
}
|
|
357
272
|
|
|
358
273
|
/**
|
|
359
|
-
*
|
|
360
|
-
* Returns `{ ok, errors }`. Caller decides whether to abort.
|
|
274
|
+
* Validate `.agentrc.json` against the AJV schema; the caller decides whether to abort.
|
|
361
275
|
*
|
|
362
276
|
* @param {object} ctx
|
|
363
277
|
* @param {typeof fs} [ctx.fsImpl]
|
|
@@ -373,8 +287,7 @@ export async function validateAgentrc(ctx) {
|
|
|
373
287
|
if (!fsImpl.existsSync(schemaModule)) {
|
|
374
288
|
return { ok: false, errors: ['config-settings-schema.js not found'] };
|
|
375
289
|
}
|
|
376
|
-
// pathToFileURL handles Windows drive letters and percent-encoding
|
|
377
|
-
// correctly (same fix as commit 2e3d210b in lib/transpile.js).
|
|
290
|
+
// pathToFileURL handles Windows drive letters and percent-encoding.
|
|
378
291
|
const mod = await import(pathToFileURL(schemaModule).href);
|
|
379
292
|
const validate = mod.getAgentrcValidator();
|
|
380
293
|
const data = readJsonIfExists(
|
|
@@ -386,24 +299,8 @@ export async function validateAgentrc(ctx) {
|
|
|
386
299
|
return { ok: !!ok, errors: ok ? [] : (validate.errors ?? []) };
|
|
387
300
|
}
|
|
388
301
|
|
|
389
|
-
// Story #4527/#4530: the UserPromptSubmit sync-hook wiring
|
|
390
|
-
// (ensureClaudeSettings, formerly Step 3) was removed. It spawned
|
|
391
|
-
// `mandrel sync-commands` on every prompt to keep `.claude/commands/` in
|
|
392
|
-
// sync with `.agents/workflows/` — a rewrite racing the harness's own read
|
|
393
|
-
// of that same directory while expanding a slash command, and a directory
|
|
394
|
-
// that cannot change mid-session in the first place, so the hook reported
|
|
395
|
-
// `0 file(s) synced` on effectively every invocation. The real sync points
|
|
396
|
-
// already cover every case: `prepare` on install, `mandrel sync` /
|
|
397
|
-
// `mandrel update` on upgrade, and doctor's `commands-in-sync` check for
|
|
398
|
-
// hand-edits. `lib/cli/uninstall.js#revertClaudeSettings` still removes the
|
|
399
|
-
// hook from a consumer who already has it installed from a prior version.
|
|
400
|
-
|
|
401
302
|
/**
|
|
402
|
-
*
|
|
403
|
-
* entry (`.claude/commands/`, `.mcp.json`, `.env`, and the per-clone install
|
|
404
|
-
* ledger). Each block is marker-keyed off a presence pattern, so a re-run is a
|
|
405
|
-
* zero-mutation no-op and never appends a duplicate block. Returns a per-block
|
|
406
|
-
* outcome (`added` | `already-present`).
|
|
303
|
+
* Append each missing {@link GITIGNORE_BLOCKS} entry, keyed off its presence pattern.
|
|
407
304
|
*
|
|
408
305
|
* @param {object} ctx
|
|
409
306
|
* @param {typeof fs} [ctx.fsImpl]
|
|
@@ -431,17 +328,7 @@ export function ensureGitignore(ctx) {
|
|
|
431
328
|
}
|
|
432
329
|
|
|
433
330
|
/**
|
|
434
|
-
* Materialize the generated
|
|
435
|
-
* (`.github/ISSUE_TEMPLATE/story.yml`) into the consumer
|
|
436
|
-
* project (Story #4227). Derived from the Story-body SSOT so a human-filed
|
|
437
|
-
* ticket round-trips through `story-body.parse()`. Idempotent and additive,
|
|
438
|
-
* mirroring `ensureGitignore`: byte-identical forms are `unchanged`,
|
|
439
|
-
* operator-edited forms are preserved (`custom-skip`).
|
|
440
|
-
*
|
|
441
|
-
* Returns the per-form action envelope keyed by ticket type.
|
|
442
|
-
*
|
|
443
|
-
* Internal — consumed only by the `issueForms` entry in
|
|
444
|
-
* {@link BOOTSTRAP_PHASES} below.
|
|
331
|
+
* Materialize the generated Issue Forms; returns per-form actions keyed by ticket type.
|
|
445
332
|
*
|
|
446
333
|
* @param {object} ctx
|
|
447
334
|
* @param {string} ctx.projectRoot
|
|
@@ -456,11 +343,7 @@ function ensureIssueFormsPhase(ctx) {
|
|
|
456
343
|
}
|
|
457
344
|
|
|
458
345
|
/**
|
|
459
|
-
*
|
|
460
|
-
* sync script itself (it removes stale entries and writes from the
|
|
461
|
-
* single source of truth), so a successful exit equals parity.
|
|
462
|
-
*
|
|
463
|
-
* Returns `{ ok, stdout }`.
|
|
346
|
+
* Run the command and agent projections; the sync itself enforces parity.
|
|
464
347
|
*
|
|
465
348
|
* @param {object} ctx
|
|
466
349
|
* @param {typeof defaultSpawnSync} [ctx.spawnImpl]
|
|
@@ -471,9 +354,6 @@ export function runSyncCommands(ctx) {
|
|
|
471
354
|
ctx.agentRoot ?? path.join(ctx.projectRoot, '.agents'),
|
|
472
355
|
'scripts',
|
|
473
356
|
);
|
|
474
|
-
// Both projections run here (Epic #4478, M7-B): the command tree AND the
|
|
475
|
-
// role-scoped agent tree, so `mandrel sync` / the postinstall path
|
|
476
|
-
// materializes `.claude/agents/*.md` alongside `.claude/commands/*.md`.
|
|
477
357
|
const projections = [
|
|
478
358
|
{ label: 'sync-claude-commands.js', script: 'sync-claude-commands.js' },
|
|
479
359
|
{ label: 'sync-claude-agents.js', script: 'sync-claude-agents.js' },
|
|
@@ -503,19 +383,8 @@ export function runSyncCommands(ctx) {
|
|
|
503
383
|
}
|
|
504
384
|
|
|
505
385
|
/**
|
|
506
|
-
*
|
|
507
|
-
*
|
|
508
|
-
* this; this is a belt-and-braces verification that the command projection
|
|
509
|
-
* covers every top-level workflow.
|
|
510
|
-
*
|
|
511
|
-
* A workflow whose frontmatter carries `command: false` is deliberately NOT
|
|
512
|
-
* projected to a command — `sync-claude-commands.js` skips it via the same
|
|
513
|
-
* `isCommandExcluded` predicate used here. Such a workflow must therefore be
|
|
514
|
-
* excluded from the expected-command set, or this check would demand a
|
|
515
|
-
* command the sync is contracted never to emit (e.g. the `audit-lighthouse` /
|
|
516
|
-
* `audit-security` lenses, which are run by the audit suite, not as slash
|
|
517
|
-
* commands). Keeping the two surfaces on one predicate is what stops them
|
|
518
|
-
* drifting.
|
|
386
|
+
* Verify `.claude/commands/*.md` matches the projectable workflows. Shares
|
|
387
|
+
* `isCommandExcluded` with the sync so `command: false` workflows never drift.
|
|
519
388
|
*
|
|
520
389
|
* @param {object} ctx
|
|
521
390
|
* @param {typeof fs} [ctx.fsImpl]
|
|
@@ -535,9 +404,6 @@ export function checkParity(ctx) {
|
|
|
535
404
|
.map((e) => e.name.replace(/\.md$/, ''))
|
|
536
405
|
.sort()
|
|
537
406
|
: [];
|
|
538
|
-
// Expected commands = projectable workflows only. A `command: false`
|
|
539
|
-
// workflow is contracted out of the command tree, so it is not "missing" a
|
|
540
|
-
// command — it declined one.
|
|
541
407
|
const projectable = (name) =>
|
|
542
408
|
!isCommandExcluded(
|
|
543
409
|
fsImpl.readFileSync(path.join(workflowsDir, `${name}.md`), 'utf8'),
|
|
@@ -554,22 +420,8 @@ export function checkParity(ctx) {
|
|
|
554
420
|
}
|
|
555
421
|
|
|
556
422
|
/**
|
|
557
|
-
*
|
|
558
|
-
*
|
|
559
|
-
* Claude Code hydrates its always-loaded context from a project-root
|
|
560
|
-
* `CLAUDE.md`; without the `@.agents/instructions.md` import the framework
|
|
561
|
-
* system prompt never loads on cold start. This step makes that wiring
|
|
562
|
-
* automatic and idempotent:
|
|
563
|
-
*
|
|
564
|
-
* - No `CLAUDE.md` at all → write a minimal one carrying the import.
|
|
565
|
-
* - `CLAUDE.md` exists but lacks the import → append the import block.
|
|
566
|
-
* - `CLAUDE.md` already imports it → no-op (no duplicate import line).
|
|
567
|
-
*
|
|
568
|
-
* Idempotence is keyed off the literal `SYSTEM_PROMPT_IMPORT` path, so a
|
|
569
|
-
* re-run on an already-wired file is a guaranteed zero-mutation no-op.
|
|
570
|
-
*
|
|
571
|
-
* Returns `{ action, path }` where `action` is one of `created`,
|
|
572
|
-
* `appended`, or `already-present`.
|
|
423
|
+
* Ensure `CLAUDE.md` imports the system prompt — without it the framework
|
|
424
|
+
* never loads on cold start. Creates, appends, or no-ops.
|
|
573
425
|
*
|
|
574
426
|
* @param {object} ctx
|
|
575
427
|
* @param {typeof fs} [ctx.fsImpl]
|
|
@@ -595,9 +447,7 @@ export function ensureSystemPromptWiring(ctx) {
|
|
|
595
447
|
}
|
|
596
448
|
|
|
597
449
|
/**
|
|
598
|
-
*
|
|
599
|
-
* silent no-op. On Windows the check probes three settings and reports
|
|
600
|
-
* which are missing; it never mutates global git config.
|
|
450
|
+
* Windows git-perf hints, warn-only; never mutates global git config.
|
|
601
451
|
*
|
|
602
452
|
* @param {object} ctx
|
|
603
453
|
* @param {typeof fs} [ctx.fsImpl]
|
|
@@ -628,34 +478,13 @@ export function checkWindowsGitPerf(ctx) {
|
|
|
628
478
|
};
|
|
629
479
|
}
|
|
630
480
|
|
|
631
|
-
// ---------------------------------------------------------------------------
|
|
632
|
-
// BOOTSTRAP_PHASES (Story #2459 / Task #2473)
|
|
633
|
-
//
|
|
634
|
-
// The previous `applyProjectBootstrap` was an 11-step inline pipeline with
|
|
635
|
-
// three fatal-abort branches (`nodeCheck`, `validation`, `parity`). Each
|
|
636
|
-
// phase is now a declarative `{ name, run, isFatal?, formatError? }`
|
|
637
|
-
// entry. The single-pass driver `runPhases` reads the array, calls each
|
|
638
|
-
// `run(ctx, report)`, accumulates the result onto `report[phase.name]`,
|
|
639
|
-
// and routes fatal phases through `throwIfFatal` so the abort message
|
|
640
|
-
// remains operator-visible.
|
|
641
|
-
//
|
|
642
|
-
// `applyProjectBootstrap` collapses to two lines: instantiate an empty
|
|
643
|
-
// report, hand it to `runPhases`, return it.
|
|
644
|
-
// ---------------------------------------------------------------------------
|
|
645
|
-
|
|
646
481
|
/**
|
|
647
482
|
* @typedef {object} BootstrapPhase
|
|
648
|
-
* @property {string} name — key
|
|
483
|
+
* @property {string} name — report key.
|
|
649
484
|
* @property {(ctx: object, report: object) => any|Promise<any>} run
|
|
650
|
-
* —
|
|
651
|
-
*
|
|
652
|
-
* @property {boolean} [isFatal] — when `true`, the driver passes the
|
|
653
|
-
* result through `formatError`; if the
|
|
654
|
-
* formatter returns a non-empty string,
|
|
655
|
-
* the driver throws with that message.
|
|
485
|
+
* — may read prior phases via `report.<name>`.
|
|
486
|
+
* @property {boolean} [isFatal] — throw when `formatError` returns a message.
|
|
656
487
|
* @property {(result: any) => string|null} [formatError]
|
|
657
|
-
* — produces the error message when the
|
|
658
|
-
* phase result indicates a fatal abort.
|
|
659
488
|
*/
|
|
660
489
|
|
|
661
490
|
const fatalNodeCheck = (result) =>
|
|
@@ -680,17 +509,8 @@ const fatalParity = (result) =>
|
|
|
680
509
|
}; orphan commands: ${result.orphanCommand.join(', ') || '(none)'}`;
|
|
681
510
|
|
|
682
511
|
/**
|
|
683
|
-
*
|
|
684
|
-
*
|
|
685
|
-
* and the report-shape parity guarantee without driving the whole
|
|
686
|
-
* bootstrap.
|
|
687
|
-
*
|
|
688
|
-
* Each project-side mutation phase carries a `phaseGroup` matching one of
|
|
689
|
-
* the {@link PHASE_GROUPS}. Since Story #5007 that string is pure
|
|
690
|
-
* ledger/uninstall metadata — every phase runs on every install, and the
|
|
691
|
-
* ledger decides after the fact which groups actually landed. Phases with no
|
|
692
|
-
* `phaseGroup` (the Node-version precondition and the dependency install)
|
|
693
|
-
* are always-run infrastructure.
|
|
512
|
+
* Ordered bootstrap pipeline. `phaseGroup` is ledger/uninstall metadata only
|
|
513
|
+
* — every phase runs on every install.
|
|
694
514
|
*/
|
|
695
515
|
export const BOOTSTRAP_PHASES = Object.freeze([
|
|
696
516
|
{
|
|
@@ -765,12 +585,6 @@ export const BOOTSTRAP_PHASES = Object.freeze([
|
|
|
765
585
|
]);
|
|
766
586
|
|
|
767
587
|
/**
|
|
768
|
-
* Throw with the formatted message when the phase is marked fatal and
|
|
769
|
-
* the result indicates an abort. Pure helper so the driver stays a
|
|
770
|
-
* single-branch loop.
|
|
771
|
-
*
|
|
772
|
-
* Exported for tests.
|
|
773
|
-
*
|
|
774
588
|
* @param {BootstrapPhase} phase
|
|
775
589
|
* @param {any} result
|
|
776
590
|
*/
|
|
@@ -781,13 +595,6 @@ export function throwIfFatal(phase, result) {
|
|
|
781
595
|
}
|
|
782
596
|
|
|
783
597
|
/**
|
|
784
|
-
* Iterate `phases` in order; await each phase's `run(ctx, report)`, land
|
|
785
|
-
* the result on `report[phase.name]`, then route fatal phases through
|
|
786
|
-
* `throwIfFatal`. Returns the accumulated report.
|
|
787
|
-
*
|
|
788
|
-
* Exported for tests so phase ordering and fatal behaviour can be
|
|
789
|
-
* asserted without spawning a full bootstrap.
|
|
790
|
-
*
|
|
791
598
|
* @param {ReadonlyArray<BootstrapPhase>} phases
|
|
792
599
|
* @param {object} ctx
|
|
793
600
|
* @returns {Promise<object>}
|
|
@@ -803,14 +610,6 @@ export async function runPhases(phases, ctx) {
|
|
|
803
610
|
}
|
|
804
611
|
|
|
805
612
|
/**
|
|
806
|
-
* Compose every step in order. Each returned key is the outcome of one
|
|
807
|
-
* step so the CLI can render a structured summary.
|
|
808
|
-
*
|
|
809
|
-
* Story #5007 removed the no-write `ctx.preview` branch: it had zero
|
|
810
|
-
* production callers (bootstrap's own `--dry-run` renders a hand-rolled text
|
|
811
|
-
* plan instead) and it survived only to serve the consent-first install
|
|
812
|
-
* screen Story #3690 replaced with a plain summary+confirm loop.
|
|
813
|
-
*
|
|
814
613
|
* @param {object} ctx
|
|
815
614
|
* @param {string} ctx.projectRoot
|
|
816
615
|
* @param {string} [ctx.agentRoot]
|
|
@@ -820,8 +619,8 @@ export async function runPhases(phases, ctx) {
|
|
|
820
619
|
* @param {boolean} [ctx.skipGithub]
|
|
821
620
|
* @param {boolean} [ctx.skipInstall]
|
|
822
621
|
* @param {boolean} [ctx.quiet]
|
|
823
|
-
* @param {typeof fs} [ctx.fsImpl]
|
|
824
|
-
* @param {typeof defaultSpawnSync} [ctx.spawnImpl]
|
|
622
|
+
* @param {typeof fs} [ctx.fsImpl]
|
|
623
|
+
* @param {typeof defaultSpawnSync} [ctx.spawnImpl]
|
|
825
624
|
* @returns {Promise<object>}
|
|
826
625
|
*/
|
|
827
626
|
export async function applyProjectBootstrap(ctx) {
|