mandrel 2.60.0 → 2.62.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/merge-queue.js +158 -0
- 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 +190 -280
- 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 +183 -485
- 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 +32 -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,18 +1,7 @@
|
|
|
1
1
|
/* node:coverage ignore file */
|
|
2
2
|
/**
|
|
3
|
-
* agents-bootstrap-github —
|
|
4
|
-
*
|
|
5
|
-
* Creates the required label taxonomy and project board custom fields
|
|
6
|
-
* for the v5 Story-centric flow on a target GitHub repo. Idempotent —
|
|
7
|
-
* skips resources that already exist.
|
|
8
|
-
*
|
|
9
|
-
* Usage:
|
|
10
|
-
* node .agents/scripts/agents-bootstrap-github.js
|
|
11
|
-
*
|
|
12
|
-
* Reads the canonical config from .agentrc.json via the config resolver,
|
|
13
|
-
* then uses the provider factory to instantiate the correct provider.
|
|
14
|
-
*
|
|
15
|
-
* @see docs/v5-implementation-plan.md Sprint 1C
|
|
3
|
+
* agents-bootstrap-github — idempotent GitHub-side setup: label taxonomy,
|
|
4
|
+
* optional project board, branch protection, merge methods.
|
|
16
5
|
*/
|
|
17
6
|
|
|
18
7
|
import { applyBranchProtection } from './lib/bootstrap/branch-protection.js';
|
|
@@ -51,14 +40,8 @@ const PROJECTS_DOC_POINTER =
|
|
|
51
40
|
'Configure the board views manually in the GitHub Projects UI.';
|
|
52
41
|
|
|
53
42
|
/**
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
* "could not resolve to a" / "HTTP 404" / "not found" stderr in a
|
|
57
|
-
* `GhNotFoundError` whose message is the literal string
|
|
58
|
-
* `gh-exec: resource not found` — the `'404'` substring is absent. The
|
|
59
|
-
* legacy bespoke-client path produced `failed (404):` messages. Match
|
|
60
|
-
* both so a legitimate fresh-repo run (issue #1 doesn't exist yet)
|
|
61
|
-
* doesn't fatal-fail the preflight.
|
|
43
|
+
* Not-found across both error shapes (`GhNotFoundError` carries no `404`
|
|
44
|
+
* substring), so a fresh repo with no issue 1 passes the preflight.
|
|
62
45
|
*/
|
|
63
46
|
function isApiAccessNotFoundError(err) {
|
|
64
47
|
if (!err) return false;
|
|
@@ -79,8 +62,7 @@ async function verifyApiAccess(provider) {
|
|
|
79
62
|
try {
|
|
80
63
|
await provider.getTicket(1);
|
|
81
64
|
} catch (err) {
|
|
82
|
-
// Not-found
|
|
83
|
-
// target repo. Anything else (auth, scope, transport) is fatal.
|
|
65
|
+
// Not-found means the API is reachable; anything else is fatal.
|
|
84
66
|
if (!isApiAccessNotFoundError(err)) {
|
|
85
67
|
throw new Error(
|
|
86
68
|
`[Bootstrap] API access verification failed: ${err.message}`,
|
|
@@ -154,15 +136,9 @@ async function ensureStatusField(provider, log) {
|
|
|
154
136
|
}
|
|
155
137
|
|
|
156
138
|
/**
|
|
157
|
-
* Audit the
|
|
158
|
-
*
|
|
159
|
-
* the
|
|
160
|
-
* advisory: warn loudly with the operator-driven remediation hint, do
|
|
161
|
-
* not mutate. Story #2845.
|
|
162
|
-
*
|
|
163
|
-
* Returns a structured envelope the bootstrap summary renders, even
|
|
164
|
-
* when the audit was skipped (no projectId) so callers don't need a
|
|
165
|
-
* separate "did this run" guard.
|
|
139
|
+
* Audit the board's built-in workflows that race `ColumnSync` (e.g. "Pull
|
|
140
|
+
* request merged" rewriting Status); warn by default, delete only under
|
|
141
|
+
* `reap` — the GraphQL delete is irreversible. Always returns an envelope.
|
|
166
142
|
*
|
|
167
143
|
* @param {object} provider
|
|
168
144
|
* @param {number} projectNumber
|
|
@@ -233,26 +209,10 @@ async function ensureProjectFields(provider, project, log) {
|
|
|
233
209
|
}
|
|
234
210
|
|
|
235
211
|
/**
|
|
236
|
-
* Run the idempotent bootstrap sequence.
|
|
237
|
-
*
|
|
238
|
-
*
|
|
239
|
-
*
|
|
240
|
-
* legacy shim parameters; see `.agents/rules/git-conventions-reference.md#contract-cutovers-—-no-shim-layer`.
|
|
241
|
-
*
|
|
242
|
-
* Consent-first install (Story #3526, Feature #3515, Epic #3438): every
|
|
243
|
-
* mutation this function performs — labels, Projects V2, branch protection,
|
|
244
|
-
* merge methods — is the irreversible `github-admin` phase group from the
|
|
245
|
-
* mutation manifest. The whole sequence is now **explicit opt-in**: unless
|
|
246
|
-
* `opts.githubAdminApproved === true`, `runBootstrap` short-circuits before
|
|
247
|
-
* touching the provider and issues **zero** GitHub mutations. This is the
|
|
248
|
-
* boundary-level enforcement of the consent signal the `bootstrap.js`
|
|
249
|
-
* orchestrator threads from `parseAndValidate` (interactive operator
|
|
250
|
-
* confirmation, `--assume-yes`, or `--approve-github-admin`) down through
|
|
251
|
-
* `executeGithubBootstrap`: a direct caller cannot silently reconfigure a
|
|
252
|
-
* repo by skipping that consent. Even additive branch-protection /
|
|
253
|
-
* merge-method changes that
|
|
254
|
-
* previously applied without a prompt are gated — they are enumerated in the
|
|
255
|
-
* manifest's `github-admin` group and only land once that group is approved.
|
|
212
|
+
* Run the idempotent bootstrap sequence. Every mutation here is the
|
|
213
|
+
* irreversible `github-admin` phase group, so this is the default-deny
|
|
214
|
+
* boundary: unless `opts.githubAdminApproved === true` it returns before
|
|
215
|
+
* constructing the provider — zero mutations, zero network I/O.
|
|
256
216
|
*
|
|
257
217
|
* @param {object} config - Resolved config wrapper with a `github` block.
|
|
258
218
|
* @param {{
|
|
@@ -265,19 +225,10 @@ async function ensureProjectFields(provider, project, log) {
|
|
|
265
225
|
* githubAdminApproved?: boolean,
|
|
266
226
|
* withProjectBoard?: boolean,
|
|
267
227
|
* isTTY?: boolean,
|
|
268
|
-
* }} [opts] - `
|
|
269
|
-
*
|
|
270
|
-
* and the run is a verified no-op.
|
|
271
|
-
* `withProjectBoard` (default `false`) — opt-in for Projects V2 board,
|
|
272
|
-
* Status field, custom fields, and workflow audit. When absent or `false`,
|
|
273
|
-
* the board decoration is skipped and only labels + branch protection +
|
|
274
|
-
* merge methods are provisioned.
|
|
228
|
+
* }} [opts] - `withProjectBoard` opts into the board, its fields and the
|
|
229
|
+
* workflow audit.
|
|
275
230
|
*/
|
|
276
231
|
export async function runBootstrap(config, opts = {}) {
|
|
277
|
-
// Explicit opt-in gate (Story #3526). Default-deny: absent or non-`true`
|
|
278
|
-
// approval issues zero GitHub mutations and returns a no-op envelope the
|
|
279
|
-
// CLI summary renders as a skip. The provider is never instantiated, so a
|
|
280
|
-
// non-approved run performs no network I/O at all.
|
|
281
232
|
if (opts.githubAdminApproved !== true) {
|
|
282
233
|
const skipLog = opts.quiet ? () => {} : Logger.info;
|
|
283
234
|
skipLog(
|
|
@@ -302,10 +253,7 @@ export async function runBootstrap(config, opts = {}) {
|
|
|
302
253
|
|
|
303
254
|
const labels = await ensureLabels(provider, log);
|
|
304
255
|
|
|
305
|
-
// Board decoration
|
|
306
|
-
// audit) is opt-in and defaults OFF. Minimal install = labels only. Gate is
|
|
307
|
-
// `opts.withProjectBoard === true`; absent or false skips all board work.
|
|
308
|
-
// ColumnSync already soft-noops when projectNumber is unset (column-sync.js:19-23).
|
|
256
|
+
// Board decoration defaults off; ColumnSync soft-noops without a projectNumber.
|
|
309
257
|
const projectBoard = opts.withProjectBoard === true;
|
|
310
258
|
let project = { projectNumber: null, created: false, skipped: true };
|
|
311
259
|
let statusField = { status: 'skipped', added: [] };
|
|
@@ -321,13 +269,6 @@ export async function runBootstrap(config, opts = {}) {
|
|
|
321
269
|
if (projectReady) {
|
|
322
270
|
statusField = await ensureStatusField(provider, log);
|
|
323
271
|
fields = await ensureProjectFields(provider, project, log);
|
|
324
|
-
// Story #2845 — audit project workflows for the ones that race against
|
|
325
|
-
// the orchestrator's ColumnSync writes (notably `Pull request merged`
|
|
326
|
-
// and `Pull request linked to issue`, which both rewrite Status as a
|
|
327
|
-
// side-effect of auto-merge). When `--reap-conflicting-workflows` is
|
|
328
|
-
// set, also delete the offenders via `deleteProjectV2Workflow` (the
|
|
329
|
-
// only programmatic action GraphQL exposes today — `enabled` is
|
|
330
|
-
// read-only).
|
|
331
272
|
workflowAudit = await auditAndOptionallyReapWorkflows(
|
|
332
273
|
provider,
|
|
333
274
|
project.projectNumber,
|
|
@@ -342,24 +283,15 @@ export async function runBootstrap(config, opts = {}) {
|
|
|
342
283
|
log('[Bootstrap] Project board decoration skipped (opt-in not set).');
|
|
343
284
|
}
|
|
344
285
|
|
|
345
|
-
//
|
|
346
|
-
//
|
|
347
|
-
// the
|
|
348
|
-
// branch protection routes through the HITL confirm gate — non-TTY runs
|
|
349
|
-
// abort with a clear stderr message rather than silently apply. The
|
|
350
|
-
// merge-method step differs by design (Story #4045 A4): non-TTY without an
|
|
351
|
-
// assume override default-applies the framework stance with an explicit
|
|
352
|
-
// log line (see mergeMethodsHitlConfirm below).
|
|
353
|
-
//
|
|
354
|
-
// Post-reshape: bootstrap reads from the new `project` + `github` blocks
|
|
355
|
-
// exclusively. The legacy "agent settings" opt was removed in Epic #2880.
|
|
286
|
+
// The CI-gates-only stance: branch protection (enforce_admins, 0 approvals)
|
|
287
|
+
// and squash-only merges. Behaviour-shifting branch-protection drift goes
|
|
288
|
+
// through the HITL gate, which aborts on non-TTY.
|
|
356
289
|
const projectCfg = opts.project ?? config.project ?? {};
|
|
357
290
|
const githubCfg = opts.github ?? {};
|
|
358
291
|
const settings = {
|
|
359
292
|
...projectCfg,
|
|
360
293
|
baseBranch: opts.baseBranch ?? projectCfg.baseBranch ?? 'main',
|
|
361
294
|
github: githubCfg,
|
|
362
|
-
// Preserve the legacy `quality` shape pointer when callers still pass it.
|
|
363
295
|
quality: projectCfg.quality,
|
|
364
296
|
};
|
|
365
297
|
const hitlConfirm =
|
|
@@ -376,13 +308,8 @@ export async function runBootstrap(config, opts = {}) {
|
|
|
376
308
|
log,
|
|
377
309
|
});
|
|
378
310
|
|
|
379
|
-
//
|
|
380
|
-
//
|
|
381
|
-
// gate declines every non-TTY prompt — which would make applyMergeMethods'
|
|
382
|
-
// documented non-TTY default-apply branch unreachable. Skip the gate in
|
|
383
|
-
// that case so the merge-method stance default-applies with its explicit
|
|
384
|
-
// log line. Interactive runs (and explicit --assume-yes/--assume-no, and
|
|
385
|
-
// injected gates) keep the loud confirm/decline behaviour.
|
|
311
|
+
// Non-TTY with no assume override: drop the gate (which would decline every
|
|
312
|
+
// prompt) so merge methods default-apply with a log line, by design.
|
|
386
313
|
const stdoutIsTTY = opts.isTTY ?? Boolean(process.stdout.isTTY);
|
|
387
314
|
const mergeMethodsHitlConfirm =
|
|
388
315
|
opts.hitlConfirm ??
|
|
@@ -406,16 +333,9 @@ export async function runBootstrap(config, opts = {}) {
|
|
|
406
333
|
};
|
|
407
334
|
}
|
|
408
335
|
|
|
409
|
-
// ---------------------------------------------------------------------------
|
|
410
|
-
// CLI entry point
|
|
411
|
-
// ---------------------------------------------------------------------------
|
|
412
|
-
|
|
413
336
|
async function main() {
|
|
414
|
-
//
|
|
415
|
-
//
|
|
416
|
-
// diagnostic instead of an ENOENT later in the provider stack.
|
|
417
|
-
// Tech Spec #1350 → "Bootstrap surface": gh auth status must exit 0
|
|
418
|
-
// before bootstrap proceeds.
|
|
337
|
+
// A missing/stale/unauthenticated `gh` is the first diagnostic, not an
|
|
338
|
+
// ENOENT deep in the provider stack.
|
|
419
339
|
try {
|
|
420
340
|
const { version } = await preflightGh();
|
|
421
341
|
Logger.info(`[Bootstrap] gh CLI ${version} ready (auth verified).`);
|
|
@@ -431,10 +351,7 @@ async function main() {
|
|
|
431
351
|
throw err;
|
|
432
352
|
}
|
|
433
353
|
|
|
434
|
-
//
|
|
435
|
-
// a consumer who hasn't installed framework runtime deps yet gets a
|
|
436
|
-
// clear hint (`run mandrel init` or `npm install mandrel`) instead of
|
|
437
|
-
// a raw `ERR_MODULE_NOT_FOUND`.
|
|
354
|
+
// Before the dynamic import, so missing deps get a hint, not ERR_MODULE_NOT_FOUND.
|
|
438
355
|
try {
|
|
439
356
|
await preflightRuntimeDeps();
|
|
440
357
|
} catch (err) {
|
|
@@ -445,7 +362,6 @@ async function main() {
|
|
|
445
362
|
throw err;
|
|
446
363
|
}
|
|
447
364
|
|
|
448
|
-
// Dynamic import to avoid circular dependency issues at module level.
|
|
449
365
|
const { resolveConfig, validateOrchestrationConfig } = await import(
|
|
450
366
|
'./lib/config-resolver.js'
|
|
451
367
|
);
|
|
@@ -463,30 +379,15 @@ async function main() {
|
|
|
463
379
|
process.exit(1);
|
|
464
380
|
}
|
|
465
381
|
|
|
466
|
-
//
|
|
467
|
-
// HITL gate's answer deterministically. The bootstrap is non-interactive
|
|
468
|
-
// by default in non-TTY contexts (the gate returns false and aborts);
|
|
469
|
-
// these flags are the documented escape hatches.
|
|
382
|
+
// --assume-yes/--assume-no pin the HITL gate's answer for non-TTY callers.
|
|
470
383
|
const assumeYes = process.argv.includes('--assume-yes');
|
|
471
384
|
const assumeNo = process.argv.includes('--assume-no');
|
|
472
|
-
// Story #2845 — opt-in destructive flag. When set, the workflow-audit
|
|
473
|
-
// step calls `deleteProjectV2Workflow` for every conflicting built-in
|
|
474
|
-
// (e.g. "Pull request merged", "Pull request linked to issue"). Default
|
|
475
|
-
// is warn-only because the GraphQL mutation is irreversible.
|
|
476
385
|
const reapConflictingWorkflows = process.argv.includes(
|
|
477
386
|
'--reap-conflicting-workflows',
|
|
478
387
|
);
|
|
479
|
-
//
|
|
480
|
-
// CLI must carry an unambiguous approval signal before any remote mutation
|
|
481
|
-
// lands: either `--approve-github-admin` (the dedicated consent flag) or
|
|
482
|
-
// `--assume-yes` (the existing "accept everything" escape hatch). Without
|
|
483
|
-
// one of these, `runBootstrap` short-circuits to a verified no-op so a bare
|
|
484
|
-
// invocation never silently reconfigures branch protection or merge methods.
|
|
388
|
+
// A bare invocation must never reconfigure the repo.
|
|
485
389
|
const githubAdminApproved =
|
|
486
390
|
assumeYes || process.argv.includes('--approve-github-admin');
|
|
487
|
-
// Story #4234 — Board decoration is opt-in (default off). Pass
|
|
488
|
-
// `--with-project-board` to also provision the Projects V2 board, Status
|
|
489
|
-
// field, and custom fields.
|
|
490
391
|
const withProjectBoard = process.argv.includes('--with-project-board');
|
|
491
392
|
|
|
492
393
|
try {
|
|
@@ -499,9 +400,7 @@ async function main() {
|
|
|
499
400
|
githubAdminApproved,
|
|
500
401
|
withProjectBoard,
|
|
501
402
|
});
|
|
502
|
-
// A
|
|
503
|
-
// the skip line is already logged inside runBootstrap, so render the
|
|
504
|
-
// detailed summary only when mutations were actually attempted.
|
|
403
|
+
// A skip envelope has no summary shape.
|
|
505
404
|
if (result.skipped) {
|
|
506
405
|
Logger.info(
|
|
507
406
|
`[Bootstrap] GitHub-admin step skipped (${result.reason}). Re-run with --approve-github-admin (or --assume-yes) to apply.`,
|
|
@@ -514,8 +413,7 @@ async function main() {
|
|
|
514
413
|
}
|
|
515
414
|
}
|
|
516
415
|
|
|
517
|
-
// Re-
|
|
518
|
-
// importing it from this module after the Story #3349 split.
|
|
416
|
+
// Re-exported: callers import the gh-preflight surface from here.
|
|
519
417
|
export {
|
|
520
418
|
compareSemver,
|
|
521
419
|
isApiAccessNotFoundError,
|
|
@@ -1,50 +1,16 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* apply-quality-bootstrap.js —
|
|
5
|
-
* (
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* Replaces the inline `node -e "Promise.all([...])"` heredoc that Step 3.5 of
|
|
9
|
-
* the `/mandrel-update` workflow used to carry. That shape was fragile in three
|
|
10
|
-
* ways: it broke across shells (PowerShell vs bash quoting / backticks), it
|
|
11
|
-
* had no test so it silently drifted when the two helper signatures moved, and
|
|
12
|
-
* it could not be invoked or dry-run independently.
|
|
13
|
-
*
|
|
14
|
-
* The script runs one install against the consumer repo root:
|
|
15
|
-
* `applyQualityBootstrap` — copies the code-quality-guardrails helper,
|
|
16
|
-
* installs the `.husky/pre-commit` quality:preview line, backfills the
|
|
17
|
-
* `quality:preview` / `quality:watch` npm scripts, seeds the
|
|
18
|
-
* `delivery.quality.{codingGuardrails,autoRefresh}` defaults, and prunes a
|
|
19
|
-
* committed pre-v2 `baselines/epic/` tree.
|
|
20
|
-
*
|
|
21
|
-
* Story #5007 retired the second step. `migrateBaselinesLayout` relocated
|
|
22
|
-
* per-Epic ratchet snapshots into `temp/epic/<id>/baselines/` on the contract
|
|
23
|
-
* that `/mandrel-deliver` reaps that namespace on merge — a mechanism the Story-only
|
|
24
|
-
* v2 model deleted, so the migration moved dead data into a namespace no code
|
|
25
|
-
* path writes, reads, or reaps. Its one residual hygiene value (getting the
|
|
26
|
-
* committed `baselines/epic/` tree out of version control) survives as
|
|
27
|
-
* `pruneLegacyEpicBaselines`, the quality install's fifth step.
|
|
28
|
-
*
|
|
29
|
-
* The helper is idempotent by contract — a second run reports `no-change` /
|
|
30
|
-
* `already-present` / `absent` on every install path — so this wrapper is safe
|
|
31
|
-
* to re-run. It prints `{ quality }` JSON to stdout.
|
|
32
|
-
*
|
|
33
|
-
* The effectful work is a thin pure function (`applyBootstrapAndMigration`)
|
|
34
|
-
* that takes the helper and the project root, so the test suite can drive it
|
|
35
|
-
* against a tmp directory without spawning a child process. The CLI wrapper
|
|
36
|
-
* wires the real helper and `process.cwd()`.
|
|
4
|
+
* apply-quality-bootstrap.js — run the idempotent quality-gate install
|
|
5
|
+
* (`applyQualityBootstrap`) against the consumer repo root and print
|
|
6
|
+
* `{ quality }` JSON. A script, not a shell heredoc, so it is testable and
|
|
7
|
+
* shell-agnostic.
|
|
37
8
|
*/
|
|
38
9
|
|
|
39
10
|
import { applyQualityBootstrap } from './lib/bootstrap/quality-bootstrap.js';
|
|
40
11
|
import { runAsCli } from './lib/cli-utils.js';
|
|
41
12
|
|
|
42
13
|
/**
|
|
43
|
-
* Run the quality-bootstrap install against `projectRoot`, returning the
|
|
44
|
-
* `{ quality }` envelope. Pure relative to its injected helper: the default
|
|
45
|
-
* helper touches the filesystem under `projectRoot`, but tests can pass a stub
|
|
46
|
-
* to exercise the composition in isolation.
|
|
47
|
-
*
|
|
48
14
|
* @param {object} options
|
|
49
15
|
* @param {string} options.projectRoot Absolute consumer repo root.
|
|
50
16
|
* @param {typeof applyQualityBootstrap} [options.applyQualityBootstrap]
|
|
@@ -60,8 +26,6 @@ export function applyBootstrapAndMigration({
|
|
|
60
26
|
async function main() {
|
|
61
27
|
const projectRoot = process.cwd();
|
|
62
28
|
const result = applyBootstrapAndMigration({ projectRoot });
|
|
63
|
-
// Use process.stdout.write (not console.log) per the no-console
|
|
64
|
-
// enforcement boundary.
|
|
65
29
|
process.stdout.write(`${JSON.stringify(result)}\n`);
|
|
66
30
|
return 0;
|
|
67
31
|
}
|
|
@@ -1,29 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* CLI:
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* the deterministic evidence half of a baseline review, so the lens spends
|
|
9
|
-
* its judgment on findings instead of re-deriving the numbers by hand.
|
|
10
|
-
*
|
|
11
|
-
* Read-only by contract: nothing under `baselines/` is written, and no test,
|
|
12
|
-
* coverage, or mutation suite is run. The only file this process creates is
|
|
13
|
-
* the envelope at `--out`.
|
|
14
|
-
*
|
|
15
|
-
* Exit 0 whenever evidence was assembled — findings are evidence, not a gate.
|
|
16
|
-
* A missing git history, absent friction ledger, or unresolvable import graph
|
|
17
|
-
* are reported as degradations and still exit 0. Only an unwritable `--out`
|
|
18
|
-
* (or a missing one) is a failure.
|
|
19
|
-
*
|
|
20
|
-
* Usage:
|
|
21
|
-
* node .agents/scripts/audit-baselines.js --out temp/audit-baselines/envelope.json
|
|
4
|
+
* CLI: the deterministic evidence half of `/audit-baselines` — ranked hotspot
|
|
5
|
+
* clusters, gate health, trends and floor headroom from `baselines/`.
|
|
6
|
+
* Read-only: writes only the `--out` envelope. Degraded inputs still exit 0;
|
|
7
|
+
* only a missing or unwritable `--out` fails.
|
|
22
8
|
*/
|
|
23
9
|
|
|
24
|
-
//
|
|
25
|
-
// first import so the check runs before any third-party-importing sibling
|
|
26
|
-
// module is evaluated (Story #3432).
|
|
10
|
+
// Must be the first import: fail fast before any third-party import evaluates.
|
|
27
11
|
import './lib/runtime-deps/ensure-installed.js';
|
|
28
12
|
import fs from 'node:fs';
|
|
29
13
|
import path from 'node:path';
|
|
@@ -49,9 +33,7 @@ const FLAG_SPEC = {
|
|
|
49
33
|
};
|
|
50
34
|
|
|
51
35
|
/**
|
|
52
|
-
*
|
|
53
|
-
* baseline schema registry. Throws with the AJV error list on mismatch —
|
|
54
|
-
* a malformed envelope is an engine bug, not evidence.
|
|
36
|
+
* Throws on a schema mismatch — a malformed envelope is an engine bug.
|
|
55
37
|
*
|
|
56
38
|
* @param {object} envelope
|
|
57
39
|
* @returns {void}
|
|
@@ -73,9 +55,6 @@ export function assertEnvelope(envelope) {
|
|
|
73
55
|
}
|
|
74
56
|
|
|
75
57
|
/**
|
|
76
|
-
* Assemble the envelope, validate it, write it, and return the stdout
|
|
77
|
-
* summary. Exported so tests drive the whole pipeline without spawning.
|
|
78
|
-
*
|
|
79
58
|
* @param {{ argv?: string[], cwd?: string, stdout?: { write: (s: string) => void } }} [opts]
|
|
80
59
|
* @returns {Promise<number>} exit code
|
|
81
60
|
*/
|
|
@@ -1,25 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* audit-labels-bootstrap.js —
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* Story. Re-runs are safe — existing labels are skipped, only missing
|
|
7
|
-
* ones are created. Story #2583 acceptance criterion #6.
|
|
8
|
-
*
|
|
9
|
-
* This CLI is a thin creator over
|
|
10
|
-
* [`lib/audit-to-stories/audit-label-taxonomy.js`](lib/audit-to-stories/audit-label-taxonomy.js),
|
|
11
|
-
* which is the SSOT for **every** label an audit sweep creates or generates:
|
|
12
|
-
* the `audit::<lens>` set (derived from the shared `AUDIT_LENSES` list, one per
|
|
13
|
-
* `/audit-<lens>` workflow) plus the story-axis labels the filer applies. The
|
|
14
|
-
* creator and the generator (`build-story-body.js`) read that one list, so the
|
|
15
|
-
* bootstrap cannot fall behind the filer — the drift that left `risk::high`
|
|
16
|
-
* generated but defined nowhere (Story #4877), and that made `audit::<dimension>`
|
|
17
|
-
* labels mint from free-form prose before Story #4195.
|
|
18
|
-
*
|
|
19
|
-
* Delegates to `gh label create` so the script works without any
|
|
20
|
-
* provider plumbing — `gh auth status` is the only prerequisite. Per
|
|
21
|
-
* .agents/rules/orchestration-error-handling.md, the CLI surface throws
|
|
22
|
-
* rather than calling Logger.fatal.
|
|
2
|
+
* audit-labels-bootstrap.js — idempotently create the audit label taxonomy via
|
|
3
|
+
* `gh label create` (only `gh auth` needed). The taxonomy is the SSOT that
|
|
4
|
+
* `build-story-body.js` also reads, so the bootstrap cannot fall behind the
|
|
5
|
+
* filer. Throws rather than calling Logger.fatal.
|
|
23
6
|
*/
|
|
24
7
|
|
|
25
8
|
import process from 'node:process';
|
|
@@ -115,10 +98,7 @@ export async function bootstrapAuditLabels({
|
|
|
115
98
|
}
|
|
116
99
|
|
|
117
100
|
/**
|
|
118
|
-
*
|
|
119
|
-
* `github.{owner,repo}` config keys. Throws when neither source supplies
|
|
120
|
-
* both values. Pulled out of `main` so the resolution + guard is a single
|
|
121
|
-
* testable unit.
|
|
101
|
+
* Flags, then `github.{owner,repo}`; throws unless both resolve.
|
|
122
102
|
*
|
|
123
103
|
* @param {{ owner?: string, repo?: string }} values
|
|
124
104
|
* @param {{ github?: { owner?: string, repo?: string } }} [config]
|
|
@@ -136,10 +116,6 @@ export function resolveOwnerRepo(values, config) {
|
|
|
136
116
|
}
|
|
137
117
|
|
|
138
118
|
/**
|
|
139
|
-
* Render the operator-facing summary lines for a bootstrap result. Pure:
|
|
140
|
-
* returns `{ stdout, stderr }` strings rather than writing, so `main` owns
|
|
141
|
-
* the single write site and the formatting stays unit-testable.
|
|
142
|
-
*
|
|
143
119
|
* @param {{ created: string[], skipped: string[], failed: Array<{label: string, reason: string}>, total: number }} result
|
|
144
120
|
* @returns {{ stdout: string, stderr: string }}
|
|
145
121
|
*/
|