mandrel 2.59.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 +21 -19
- package/.agents/agents/acceptance-critic.md +24 -43
- package/.agents/agents/story-worker.md +20 -21
- package/.agents/docs/agentrc-reference.json +5 -84
- package/.agents/docs/configuration.md +48 -132
- package/.agents/docs/workflows.md +2 -2
- package/.agents/instructions.md +5 -8
- package/.agents/rules/ci-remediation.md +41 -8
- package/.agents/rules/gherkin-standards.md +4 -0
- package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
- package/.agents/schemas/agentrc.schema.json +16 -496
- package/.agents/schemas/story-deliver-terminal.schema.json +13 -3
- package/.agents/schemas/validation-evidence.schema.json +2 -1
- package/.agents/scripts/README.md +23 -13
- package/.agents/scripts/acceptance-eval.js +35 -169
- 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 +10 -41
- package/.agents/scripts/check-arch-cycles.js +14 -64
- package/.agents/scripts/check-baselines.js +8 -48
- package/.agents/scripts/check-context-budget.js +105 -311
- 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 +34 -98
- package/.agents/scripts/deliver-light.js +25 -171
- package/.agents/scripts/deliver-recover.js +6 -42
- package/.agents/scripts/deliver-run.js +534 -0
- 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 +57 -49
- 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 +7 -19
- 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 +39 -121
- 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 -34
- package/.agents/scripts/lib/config/explain.js +10 -83
- package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
- package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +3 -31
- 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 +11 -52
- package/.agents/scripts/lib/config-schema-shared.js +1 -4
- package/.agents/scripts/lib/config-settings-schema-delivery.js +16 -291
- 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 +18 -35
- package/.agents/scripts/lib/coverage-capture-incremental.js +15 -45
- package/.agents/scripts/lib/coverage-capture-usage.js +8 -25
- 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 -124
- 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 +94 -419
- package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
- package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -149
- 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 +123 -191
- 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 +22 -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 +28 -156
- 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 +121 -157
- 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 +118 -462
- 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 +37 -307
- 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 +55 -318
- 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 +16 -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 +71 -289
- package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
- package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +96 -362
- package/.agents/scripts/lib/orchestration/plan-persist/summary.js +9 -39
- package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +60 -186
- 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 -91
- 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 +245 -326
- package/.agents/scripts/lib/orchestration/run-scoped-config.js +55 -159
- 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 +20 -82
- 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 +96 -0
- 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 +180 -273
- 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 -200
- package/.agents/scripts/lib/orchestration/story-follow-ups.js +167 -252
- package/.agents/scripts/lib/orchestration/story-init-envelope.js +52 -0
- 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 -135
- 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 +63 -344
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -261
- 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 +51 -66
- package/.agents/scripts/lib/story-body/footer-block.js +11 -44
- package/.agents/scripts/lib/story-body/story-body.js +123 -344
- package/.agents/scripts/lib/temp-retention.js +42 -143
- package/.agents/scripts/lib/templates/decomposer-prompts.js +18 -80
- 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 +67 -209
- 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 -105
- package/.agents/scripts/nav-registry-diff.js +22 -108
- package/.agents/scripts/notify.js +12 -69
- package/.agents/scripts/plan-context.js +97 -92
- package/.agents/scripts/plan-critics.js +12 -66
- package/.agents/scripts/plan-persist.js +71 -137
- package/.agents/scripts/plan-run-epilogue.js +20 -43
- package/.agents/scripts/pr-watch-with-update.js +79 -263
- 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 -259
- package/.agents/scripts/stories-wave-tick.js +179 -415
- 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/skills/core/gates-and-baselines/reference.md +0 -1
- package/.agents/skills/skills.index.json +2 -2
- package/.agents/skills/stack/qa/playwright/SKILL.md +26 -0
- 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/acceptance-self-eval.md +84 -157
- package/.agents/workflows/helpers/audit-lens-core.md +1 -1
- package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
- package/.agents/workflows/helpers/code-review.md +4 -2
- package/.agents/workflows/helpers/deliver-digest.md +37 -28
- package/.agents/workflows/helpers/deliver-light.md +92 -101
- package/.agents/workflows/helpers/deliver-reference.md +162 -220
- package/.agents/workflows/helpers/deliver-story-reference.md +197 -607
- package/.agents/workflows/helpers/deliver-story.md +17 -18
- package/.agents/workflows/helpers/plan-reference.md +125 -167
- package/.agents/workflows/helpers/qa-core.md +12 -0
- package/.agents/workflows/mandrel-deliver.md +47 -31
- package/.agents/workflows/mandrel-plan.md +22 -21
- package/.agents/workflows/mandrel-update.md +36 -21
- 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 +60 -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 +326 -523
- 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 +17 -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 +21 -0
- package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
- package/package.json +17 -14
- package/.agents/docs/SDLC.md +0 -590
- package/.agents/docs/quality-gates.md +0 -1179
- package/.agents/rules/known-tooling-behavior.md +0 -150
- 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/schemas/model-attribution.schema.json +0 -53
- 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 -366
- package/.agents/scripts/check-test-portability.js +0 -512
- package/.agents/scripts/check-workflow-citations.js +0 -332
- 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/orchestration/model-attribution.js +0 -418
- package/.agents/scripts/lib/orchestration/story-plan-state.js +0 -33
- package/.agents/scripts/lib/orchestration/structured-comment-parser.js +0 -67
- 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 -118
- package/.agents/scripts/test-isolate.js +0 -55
- package/.agents/scripts/update-dead-exports-baseline.js +0 -321
|
@@ -1,37 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* else. Node's child-process runners default `maxBuffer` to 1 MB and
|
|
9
|
-
* *kill* the child on overflow — `status: null`, `signal: 'SIGTERM'`,
|
|
10
|
-
* `error.code: 'ENOBUFS'` — so the call fails for a reason that has
|
|
11
|
-
* nothing to do with the command. That failure class has shipped
|
|
12
|
-
* operator-visible breakage more than once (Story #4914's committed
|
|
13
|
-
* baseline read at 1,178,910 bytes; Story #4948's `git push` relaying a
|
|
14
|
-
* 2,166,643-byte `pre-push` envelope, which reddened `phase: push` on
|
|
15
|
-
* every Story close while the gates themselves were green). Both were
|
|
16
|
-
* fixed one call site at a time. This module is why there is no third.
|
|
17
|
-
* 2. **Shell-free argv.** `shell: false` on every invocation, so no argument
|
|
18
|
-
* is ever shell-interpolated (`rules/security-baseline.md` § Output &
|
|
19
|
-
* Rendering). Callers pass argv tokens; they cannot pass a command line.
|
|
20
|
-
* 3. **Result and error normalisation.** {@link spawnCapture} collapses the
|
|
21
|
-
* `spawnSync` return into `{ status, stdout, stderr }` with a non-null
|
|
22
|
-
* status and trimmed streams; {@link formatChildFailure} renders the one
|
|
23
|
-
* failure-message shape so a thrown child error reads the same wherever
|
|
24
|
-
* it came from.
|
|
25
|
-
*
|
|
26
|
-
* Every wrapper takes an optional `run` — the injected child-process runner —
|
|
27
|
-
* so a module keeps its own test seam (`git-base.js`'s `__setSpawnRunner`,
|
|
28
|
-
* `git-utils.js`'s `__setGitRunners`, the `run` / `spawn` parameters threaded
|
|
29
|
-
* through the audit-baselines engine) while still delegating buffer, shell and
|
|
30
|
-
* error policy here. Omit it and the real Node runner is used.
|
|
31
|
-
*
|
|
32
|
-
* **Do not re-import `node:child_process` in new modules.**
|
|
33
|
-
* `tests/enforcement/child-process-imports.test.js` captures the current set
|
|
34
|
-
* of direct importers and fails on any addition outside that allowlist.
|
|
2
|
+
* The one child-process execution surface. It owns three policies: the
|
|
3
|
+
* stdout ceiling (Node's 1 MB default kills the child with ENOBUFS for a
|
|
4
|
+
* reason unrelated to the command), shell-free argv, and result/error
|
|
5
|
+
* normalisation. Each wrapper takes an optional injected `run` so callers
|
|
6
|
+
* keep their own test seams. New modules must not import
|
|
7
|
+
* `node:child_process` directly (an enforcement test allowlists importers).
|
|
35
8
|
*
|
|
36
9
|
* @module lib/child-exec
|
|
37
10
|
*/
|
|
@@ -39,55 +12,31 @@
|
|
|
39
12
|
import { execFile, execFileSync, spawnSync } from 'node:child_process';
|
|
40
13
|
import { promisify } from 'node:util';
|
|
41
14
|
|
|
42
|
-
/** One mebibyte, so the ceilings below read as the units they are quoted in. */
|
|
43
15
|
const MIB = 1024 * 1024;
|
|
44
16
|
|
|
45
17
|
/**
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
* Deliberately **not** exported. Every wrapper below applies it as its
|
|
50
|
-
* default, so a call site gets the ceiling by importing the wrapper rather
|
|
51
|
-
* than by importing (and possibly forgetting) a number. The only bound a
|
|
52
|
-
* caller ever names explicitly is one that is deliberately *different* —
|
|
53
|
-
* today that is {@link INTERCEPTOR_MAX_BUFFER_BYTES} and nothing else.
|
|
54
|
-
*
|
|
55
|
-
* 64 MiB is not a fresh guess: it is the bound Stories #4914 and #4948 already
|
|
56
|
-
* settled on independently for the git read and git push paths, and the value
|
|
57
|
-
* `run-test-profile.js`, `audit-baselines/trend.js` and
|
|
58
|
-
* `audit-baselines/weights.js` had hand-copied. `maxBuffer` caps a buffer, it
|
|
59
|
-
* does not reserve one, so a generous ceiling costs nothing on the calls that
|
|
60
|
-
* print two lines.
|
|
18
|
+
* Not exported: callers get it by using a wrapper, never by remembering a
|
|
19
|
+
* number. `maxBuffer` caps rather than reserves, so generous is free.
|
|
61
20
|
*
|
|
62
21
|
* @type {number}
|
|
63
22
|
*/
|
|
64
23
|
const MAX_BUFFER_BYTES = 64 * MIB;
|
|
65
24
|
|
|
66
25
|
/**
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
* This one is a reported policy bound, not an overflow guard: when it fires,
|
|
71
|
-
* the interceptor records `executionMaxBuffer` on the friction row and tells
|
|
72
|
-
* the operator to quieten the command rather than split it (Story #4915).
|
|
73
|
-
* Raising it to {@link MAX_BUFFER_BYTES} would change that emitted row, so it
|
|
74
|
-
* stays where it was — but it is defined here, alongside the ceiling it is
|
|
75
|
-
* deliberately different from, rather than hand-copied into the interceptor.
|
|
26
|
+
* Deliberately lower bound for `diagnose-friction.js`: a reported policy
|
|
27
|
+
* limit (it records `executionMaxBuffer` on the friction row), not an
|
|
28
|
+
* overflow guard.
|
|
76
29
|
*
|
|
77
30
|
* @type {number}
|
|
78
31
|
*/
|
|
79
32
|
export const INTERCEPTOR_MAX_BUFFER_BYTES = 10 * MIB;
|
|
80
33
|
|
|
81
34
|
/**
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
* `maxBuffer` is applied **last** so a caller's spread cannot silently drop it
|
|
85
|
-
* back to Node's 1 MB default — the only way to change the ceiling is to pass
|
|
86
|
-
* `maxBuffer` explicitly, which the two named constants above exist for.
|
|
35
|
+
* `maxBuffer` goes last so a caller's spread cannot reset it to 1 MB.
|
|
87
36
|
*
|
|
88
|
-
* @param {{ encoding: string }} defaults
|
|
89
|
-
* @param {object} rest
|
|
90
|
-
* @param {number} maxBuffer
|
|
37
|
+
* @param {{ encoding: string }} defaults
|
|
38
|
+
* @param {object} rest
|
|
39
|
+
* @param {number} maxBuffer
|
|
91
40
|
* @returns {object}
|
|
92
41
|
*/
|
|
93
42
|
function childOptions(defaults, rest, maxBuffer) {
|
|
@@ -95,16 +44,13 @@ function childOptions(defaults, rest, maxBuffer) {
|
|
|
95
44
|
}
|
|
96
45
|
|
|
97
46
|
/**
|
|
98
|
-
*
|
|
99
|
-
* returns (a UTF-8 string under the default encoding). **Throws** on a
|
|
100
|
-
* non-zero exit, exactly like `execFileSync` — callers that treat failure as a
|
|
101
|
-
* recoverable state want {@link spawnCapture} instead.
|
|
47
|
+
* Throws on non-zero exit, like `execFileSync`.
|
|
102
48
|
*
|
|
103
|
-
* @param {string} file
|
|
104
|
-
* @param {string[]} args
|
|
105
|
-
* @param {object} [opts]
|
|
106
|
-
* @param {Function} [opts.run]
|
|
107
|
-
* @param {number} [opts.maxBuffer]
|
|
49
|
+
* @param {string} file
|
|
50
|
+
* @param {string[]} args
|
|
51
|
+
* @param {object} [opts]
|
|
52
|
+
* @param {Function} [opts.run]
|
|
53
|
+
* @param {number} [opts.maxBuffer]
|
|
108
54
|
* @returns {string}
|
|
109
55
|
*/
|
|
110
56
|
export function execFileCapture(file, args, opts = {}) {
|
|
@@ -112,17 +58,14 @@ export function execFileCapture(file, args, opts = {}) {
|
|
|
112
58
|
return run(file, args, childOptions({ encoding: 'utf8' }, rest, maxBuffer));
|
|
113
59
|
}
|
|
114
60
|
|
|
115
|
-
/** Promisified `execFile` — the default runner for {@link execFileCaptureAsync}. */
|
|
116
61
|
const execFileAsync = promisify(execFile);
|
|
117
62
|
|
|
118
63
|
/**
|
|
119
|
-
*
|
|
120
|
-
* `{ stdout, stderr }` and rejects on a non-zero exit.
|
|
64
|
+
* Rejects on non-zero exit.
|
|
121
65
|
*
|
|
122
|
-
* @param {string} file
|
|
123
|
-
* @param {string[]} args
|
|
124
|
-
* @param {object} [opts]
|
|
125
|
-
* promisified `execFile`.
|
|
66
|
+
* @param {string} file
|
|
67
|
+
* @param {string[]} args
|
|
68
|
+
* @param {object} [opts]
|
|
126
69
|
* @returns {Promise<{ stdout: string, stderr: string }>}
|
|
127
70
|
*/
|
|
128
71
|
export function execFileCaptureAsync(file, args, opts = {}) {
|
|
@@ -131,18 +74,12 @@ export function execFileCaptureAsync(file, args, opts = {}) {
|
|
|
131
74
|
}
|
|
132
75
|
|
|
133
76
|
/**
|
|
134
|
-
*
|
|
135
|
-
*
|
|
77
|
+
* Raw `spawnSync` result (untrimmed output, `null` status preserved); never
|
|
78
|
+
* throws on non-zero exit.
|
|
136
79
|
*
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
* want a normalised `{ status, stdout, stderr }` should use
|
|
141
|
-
* {@link spawnCapture}.
|
|
142
|
-
*
|
|
143
|
-
* @param {string} file - Executable name.
|
|
144
|
-
* @param {string[]} args - Argv tokens.
|
|
145
|
-
* @param {object} [opts] - As {@link execFileCapture}; `run` defaults to `spawnSync`.
|
|
80
|
+
* @param {string} file
|
|
81
|
+
* @param {string[]} args
|
|
82
|
+
* @param {object} [opts]
|
|
146
83
|
* @returns {import('node:child_process').SpawnSyncReturns<string>}
|
|
147
84
|
*/
|
|
148
85
|
export function spawnChild(file, args, opts = {}) {
|
|
@@ -155,14 +92,12 @@ export function spawnChild(file, args, opts = {}) {
|
|
|
155
92
|
}
|
|
156
93
|
|
|
157
94
|
/**
|
|
158
|
-
*
|
|
159
|
-
*
|
|
160
|
-
* as success — `process.exit(null)` exits 0), and both streams are coerced to
|
|
161
|
-
* trimmed strings.
|
|
95
|
+
* A `null` status becomes 1 (`process.exit(null)` would exit 0); streams are
|
|
96
|
+
* trimmed.
|
|
162
97
|
*
|
|
163
|
-
* @param {string} file
|
|
164
|
-
* @param {string[]} args
|
|
165
|
-
* @param {object} [opts]
|
|
98
|
+
* @param {string} file
|
|
99
|
+
* @param {string[]} args
|
|
100
|
+
* @param {object} [opts]
|
|
166
101
|
* @returns {{ status: number, stdout: string, stderr: string }}
|
|
167
102
|
*/
|
|
168
103
|
export function spawnCapture(file, args, opts = {}) {
|
|
@@ -175,16 +110,12 @@ export function spawnCapture(file, args, opts = {}) {
|
|
|
175
110
|
}
|
|
176
111
|
|
|
177
112
|
/**
|
|
178
|
-
*
|
|
179
|
-
*
|
|
180
|
-
* `status` is rendered verbatim — a `null` prints as `status=null`, which is
|
|
181
|
-
* the diagnostic: it means the child was killed (buffer overflow, timeout,
|
|
182
|
-
* signal) rather than having reported an exit code of its own.
|
|
113
|
+
* `status=null` is printed verbatim: it means the child was killed.
|
|
183
114
|
*
|
|
184
115
|
* @param {object} failure
|
|
185
|
-
* @param {string} failure.label
|
|
186
|
-
* @param {number|null} failure.status
|
|
187
|
-
* @param {unknown} [failure.stderr]
|
|
116
|
+
* @param {string} failure.label
|
|
117
|
+
* @param {number|null} failure.status
|
|
118
|
+
* @param {unknown} [failure.stderr]
|
|
188
119
|
* @returns {string}
|
|
189
120
|
*/
|
|
190
121
|
export function formatChildFailure({ label, status, stderr }) {
|
|
@@ -1,79 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* Shared CLI flag parser: one canonical spec for the standard dispatcher
|
|
3
|
+
* flags plus declarative per-script `extras`
|
|
4
|
+
* (`{ type, alias?, default?, required? }`, alias defaults to camelCase).
|
|
4
5
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* covers the flags every dispatcher CLI shares (`--epic`, `--story`,
|
|
9
|
-
* `--changed-since`, `--json`, `--full-scope`, `--dry-run`)
|
|
10
|
-
* and — via the `extras` schema entry — caller-defined extras (e.g.
|
|
11
|
-
* `--root`, `--scope`, `--check`) so a script can replace its local
|
|
12
|
-
* argv walker with a single declarative call.
|
|
13
|
-
*
|
|
14
|
-
* Contract
|
|
15
|
-
* --------
|
|
16
|
-
* parseStandardCliArgs({ argv, schema?, extras? }) → { values, positionals }
|
|
17
|
-
*
|
|
18
|
-
* - `argv` — `process.argv.slice(2)` shape; the helper does NOT strip
|
|
19
|
-
* the leading `node` + script-path entries on the caller's behalf.
|
|
20
|
-
* - `schema` — optional, declarative override of which standard flags
|
|
21
|
-
* are required. Shape: `{ [flagName]: { required?: boolean } }`.
|
|
22
|
-
* Unknown keys are rejected so a typo doesn't silently disable the
|
|
23
|
-
* required-field check.
|
|
24
|
-
* - `extras` — optional, declarative map of caller-defined flags.
|
|
25
|
-
* Shape: `{ [flagName]: { type, alias?, default?, required? } }`.
|
|
26
|
-
* `type` is one of `'string' | 'boolean' | 'ticket' | 'integer' |
|
|
27
|
-
* 'string-multi'`. `alias` defaults to the camelCased flag name.
|
|
28
|
-
* Extras flow through the same `defineFlags` machinery as the
|
|
29
|
-
* standard set and are emitted on `values` under their `alias`.
|
|
30
|
-
*
|
|
31
|
-
* `values` is always returned with every known flag present:
|
|
32
|
-
*
|
|
33
|
-
* { epicId, storyId, changedSince, json, fullScope, dryRun,
|
|
34
|
-
* ...extras }
|
|
35
|
-
*
|
|
36
|
-
* Ticket-shaped flags (`--epic`, `--story`) parse via
|
|
37
|
-
* `parseTicketId` (positive integer; leading `#` stripped; `null` on
|
|
38
|
-
* anything invalid). The string-shaped `--changed-since` keeps the raw
|
|
39
|
-
* string (or `null` when absent). Boolean flags coerce to `false` when
|
|
40
|
-
* absent and `true` when present (with or without a value).
|
|
41
|
-
*
|
|
42
|
-
* Failure modes
|
|
43
|
-
* -------------
|
|
44
|
-
* - **Unknown flag**: an argv token shaped like `--foo` whose name is
|
|
45
|
-
* not in the supported set (standard + extras) throws an `Error`
|
|
46
|
-
* with a stable `code: 'UNKNOWN_FLAG'` plus the offending flag name.
|
|
47
|
-
* - **Missing required flag**: when `schema[flag].required === true`
|
|
48
|
-
* (or `extras[flag].required === true`) and the resolved value is
|
|
49
|
-
* absent (ticket flags → `null`; string flags → `null`/empty;
|
|
50
|
-
* boolean flags → `false`), the parser throws with
|
|
51
|
-
* `code: 'MISSING_REQUIRED_FLAG'` and the flag name.
|
|
52
|
-
* - **Unsupported extras type**: a typo in `extras[flag].type` throws
|
|
53
|
-
* with `code: 'UNKNOWN_EXTRAS_TYPE'`.
|
|
54
|
-
*
|
|
55
|
-
* Why a thin shim and not a re-export of `defineFlags`
|
|
56
|
-
* ----------------------------------------------------
|
|
57
|
-
* `defineFlags` is a powerful declarative parser, but every dispatcher
|
|
58
|
-
* CLI hand-rolls its own option spec — duplicated `--epic` / `--story`
|
|
59
|
-
* blocks across four scripts, each subtly different. `parseStandardCliArgs`
|
|
60
|
-
* collapses that duplication into one canonical spec with a small
|
|
61
|
-
* `extras` surface for the per-script flags.
|
|
6
|
+
* `argv` is `process.argv.slice(2)`. `values` always carries every known
|
|
7
|
+
* flag. Throws with a stable `code`: `UNKNOWN_FLAG`, `MISSING_REQUIRED_FLAG`,
|
|
8
|
+
* `UNKNOWN_FLAG_IN_SCHEMA`, `UNKNOWN_EXTRAS_TYPE`, `EXTRAS_FLAG_COLLISION`.
|
|
62
9
|
*
|
|
63
10
|
* @module lib/cli/standard-args
|
|
64
11
|
*/
|
|
65
12
|
|
|
66
13
|
import { defineFlags, parseTicketId } from '../cli-args.js';
|
|
67
14
|
|
|
68
|
-
/**
|
|
69
|
-
* Canonical spec passed to `defineFlags`. Every key in `SUPPORTED_FLAGS`
|
|
70
|
-
* is what the parser will accept; anything else triggers `UNKNOWN_FLAG`
|
|
71
|
-
* unless it is declared via `extras`.
|
|
72
|
-
*
|
|
73
|
-
* Each entry below maps the kebab-cased CLI flag to:
|
|
74
|
-
* - `key`: the camelCased output key on `values`
|
|
75
|
-
* - `type`: 'ticket' | 'string' | 'boolean'
|
|
76
|
-
*/
|
|
15
|
+
/** Kebab-case flag → `{ key` on `values`, `type }`. */
|
|
77
16
|
const SUPPORTED_FLAGS = Object.freeze({
|
|
78
17
|
epic: { key: 'epicId', type: 'ticket' },
|
|
79
18
|
story: { key: 'storyId', type: 'ticket' },
|
|
@@ -98,9 +37,6 @@ function camelCase(name) {
|
|
|
98
37
|
}
|
|
99
38
|
|
|
100
39
|
/**
|
|
101
|
-
* Validate the call signature. Only the object form
|
|
102
|
-
* `({ argv, schema, extras })` is accepted.
|
|
103
|
-
*
|
|
104
40
|
* @param {unknown} opts
|
|
105
41
|
* @returns {{ argv: string[], schema: object | undefined, extras: object | undefined }}
|
|
106
42
|
*/
|
|
@@ -114,12 +50,6 @@ function normaliseCallSignature(opts) {
|
|
|
114
50
|
return { argv: argv ?? [], schema, extras };
|
|
115
51
|
}
|
|
116
52
|
|
|
117
|
-
/**
|
|
118
|
-
* Build the `defineFlags` spec from the canonical flag table plus any
|
|
119
|
-
* caller-supplied extras. Extras are merged after the standard set; a
|
|
120
|
-
* collision (e.g. extras declaring `--story`) is rejected up-front in
|
|
121
|
-
* `validateExtras`.
|
|
122
|
-
*/
|
|
123
53
|
function buildDefineFlagsSpec(extras) {
|
|
124
54
|
const spec = {};
|
|
125
55
|
for (const [flag, { key, type }] of Object.entries(SUPPORTED_FLAGS)) {
|
|
@@ -134,19 +64,11 @@ function buildDefineFlagsSpec(extras) {
|
|
|
134
64
|
return spec;
|
|
135
65
|
}
|
|
136
66
|
|
|
137
|
-
/**
|
|
138
|
-
* Collect every flag name the parser recognises (standard + extras).
|
|
139
|
-
* Used by the unknown-flag walker.
|
|
140
|
-
*/
|
|
141
67
|
function knownFlagNames(extras) {
|
|
142
68
|
if (!extras) return FLAG_NAMES;
|
|
143
69
|
return FLAG_NAMES.concat(Object.keys(extras));
|
|
144
70
|
}
|
|
145
71
|
|
|
146
|
-
/**
|
|
147
|
-
* Scan the raw argv for `--foo` tokens whose name is not in the known
|
|
148
|
-
* set. Returns the first offender or `null`.
|
|
149
|
-
*/
|
|
150
72
|
function findUnknownFlag(argv, known) {
|
|
151
73
|
for (const tok of argv) {
|
|
152
74
|
if (typeof tok !== 'string') continue;
|
|
@@ -160,10 +82,7 @@ function findUnknownFlag(argv, known) {
|
|
|
160
82
|
return null;
|
|
161
83
|
}
|
|
162
84
|
|
|
163
|
-
/**
|
|
164
|
-
* Validate the caller-supplied `schema`. Reject any key that is not a
|
|
165
|
-
* supported standard flag.
|
|
166
|
-
*/
|
|
85
|
+
/** Reject unknown keys so a typo cannot silently disable a required check. */
|
|
167
86
|
function validateSchema(schema) {
|
|
168
87
|
if (schema === undefined || schema === null) return;
|
|
169
88
|
if (typeof schema !== 'object') {
|
|
@@ -181,11 +100,6 @@ function validateSchema(schema) {
|
|
|
181
100
|
}
|
|
182
101
|
}
|
|
183
102
|
|
|
184
|
-
/**
|
|
185
|
-
* Validate the caller-supplied `extras`. Each entry must declare a
|
|
186
|
-
* supported type; declaring a flag name that collides with a standard
|
|
187
|
-
* flag is rejected (use the `schema` for required-marking instead).
|
|
188
|
-
*/
|
|
189
103
|
function validateExtras(extras) {
|
|
190
104
|
if (extras === undefined || extras === null) return;
|
|
191
105
|
if (typeof extras !== 'object') {
|
|
@@ -216,10 +130,6 @@ function validateExtras(extras) {
|
|
|
216
130
|
}
|
|
217
131
|
}
|
|
218
132
|
|
|
219
|
-
/**
|
|
220
|
-
* "Absent" test parameterised by flag type. Mirrored across the
|
|
221
|
-
* standard and extras enforcement passes.
|
|
222
|
-
*/
|
|
223
133
|
function isAbsent(type, cur) {
|
|
224
134
|
if (type === 'ticket') return cur === null || cur === undefined;
|
|
225
135
|
if (type === 'string') return cur === null || cur === undefined || cur === '';
|
|
@@ -238,10 +148,6 @@ function throwMissing(flag) {
|
|
|
238
148
|
throw err;
|
|
239
149
|
}
|
|
240
150
|
|
|
241
|
-
/**
|
|
242
|
-
* Apply the per-flag `required` constraints from `schema` against the
|
|
243
|
-
* resolved `values`.
|
|
244
|
-
*/
|
|
245
151
|
function enforceRequired(values, schema) {
|
|
246
152
|
if (!schema) return;
|
|
247
153
|
for (const [flag, rule] of Object.entries(schema)) {
|
|
@@ -251,9 +157,6 @@ function enforceRequired(values, schema) {
|
|
|
251
157
|
}
|
|
252
158
|
}
|
|
253
159
|
|
|
254
|
-
/**
|
|
255
|
-
* Apply the per-flag `required` constraints declared on `extras`.
|
|
256
|
-
*/
|
|
257
160
|
function enforceExtrasRequired(values, extras) {
|
|
258
161
|
if (!extras) return;
|
|
259
162
|
for (const [flag, def] of Object.entries(extras)) {
|
|
@@ -263,14 +166,7 @@ function enforceExtrasRequired(values, extras) {
|
|
|
263
166
|
}
|
|
264
167
|
}
|
|
265
168
|
|
|
266
|
-
/**
|
|
267
|
-
* Coerce the raw `defineFlags` output into the canonical shape the
|
|
268
|
-
* dispatcher CLIs consume. `defineFlags` already applies the alias
|
|
269
|
-
* (`epic` → `epicId`, …) and runs `parseTicketId` for the ticket-typed
|
|
270
|
-
* entries; we normalise absent strings / booleans into a stable
|
|
271
|
-
* JSON-friendly shape for the standard set and pass extras through
|
|
272
|
-
* with light coercion (string → null on empty, boolean → strict false).
|
|
273
|
-
*/
|
|
169
|
+
/** Absent strings become `null` and booleans strict `false`. */
|
|
274
170
|
function normaliseValues(raw, extras) {
|
|
275
171
|
const out = {};
|
|
276
172
|
for (const [, { key, type }] of Object.entries(SUPPORTED_FLAGS)) {
|
|
@@ -305,9 +201,6 @@ function normaliseValues(raw, extras) {
|
|
|
305
201
|
}
|
|
306
202
|
|
|
307
203
|
/**
|
|
308
|
-
* Parse the dispatcher's shared CLI flag surface. See module docstring
|
|
309
|
-
* for the full contract.
|
|
310
|
-
*
|
|
311
204
|
* @param {{ argv?: string[], schema?: object, extras?: object }} [opts]
|
|
312
205
|
* @returns {{ values: Record<string, unknown>, positionals: string[] }}
|
|
313
206
|
*/
|