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,27 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* GitHub Provider — TicketGateway
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* per-instance ticket cache that the dispatcher / reconciler / cascade
|
|
6
|
-
* share. Extracted from `../github.js` in Story #2462 / Task #2482 as the
|
|
7
|
-
* first slice of the seven-gateway split.
|
|
8
|
-
*
|
|
9
|
-
* The gateway is constructed with a `{ gh, owner, repo, hooks }` object so
|
|
10
|
-
* cross-gateway concerns can be threaded in without bloating the constructor
|
|
11
|
-
* signature. The `addItemToProject` hook (from the projects-v2 shim) adds a
|
|
12
|
-
* newly-created issue to the configured Project V2.
|
|
13
|
-
*
|
|
14
|
-
* Story #4545 deleted `createTicket` and its `composeStoryBody` helper — the
|
|
15
|
-
* Epic-hierarchy write surface. It composed the exact `Epic: #N` footer that
|
|
16
|
-
* `pr-base-guard.js` hard-refuses at delivery, so the framework retained the
|
|
17
|
-
* ability to generate work it would then reject; it had no production caller
|
|
18
|
-
* (`/mandrel-plan` persists through the bare `createIssue` below).
|
|
19
|
-
*
|
|
20
|
-
* Public surface: `GitHubProvider.createIssue / getTicket /
|
|
21
|
-
* getTickets / updateTicket / getTicketDependencies / primeTicketCache /
|
|
22
|
-
* invalidateTicket` all delegate to the same-named methods on this class.
|
|
23
|
-
*
|
|
24
|
-
* @see Story #2462 — Split GitHubProvider god class into seven composed gateways.
|
|
2
|
+
* GitHub Provider — TicketGateway: issue CRUD plus the per-instance ticket
|
|
3
|
+
* cache shared across gateways. `hooks` carries cross-gateway concerns
|
|
4
|
+
* (Project V2 board add).
|
|
25
5
|
*/
|
|
26
6
|
|
|
27
7
|
import { parseBlockedBy, parseBlocks } from '../../lib/dependency-parser.js';
|
|
@@ -37,10 +17,8 @@ import {
|
|
|
37
17
|
} from './request-helpers.js';
|
|
38
18
|
|
|
39
19
|
/**
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
* children, so hitting this cap means the query is degenerate — we stop
|
|
43
|
-
* rather than throw (the regex post-filter keeps results correct).
|
|
20
|
+
* Search API ceiling: 1000 results = 10 pages of 100. Hitting it means a
|
|
21
|
+
* degenerate query, so stop rather than throw.
|
|
44
22
|
*/
|
|
45
23
|
const SEARCH_PAGE_CAP = 10;
|
|
46
24
|
|
|
@@ -64,28 +42,17 @@ export class TicketGateway {
|
|
|
64
42
|
this._hooks = hooks;
|
|
65
43
|
this._cache = cache ?? createInlineTicketCache();
|
|
66
44
|
/**
|
|
67
|
-
*
|
|
68
|
-
* #3988). Planning-era healing fetched the same child list twice
|
|
69
|
-
* per planning pass; without this memo each fetch re-pays the full
|
|
70
|
-
* search/list round-trip. Invalidated on every write surface.
|
|
45
|
+
* Memo of `getTickets(epicId, filters)`; cleared on every write.
|
|
71
46
|
* @type {Map<string, object[]>}
|
|
72
47
|
*/
|
|
73
48
|
this._listCache = new Map();
|
|
74
49
|
}
|
|
75
50
|
|
|
76
|
-
/**
|
|
77
|
-
* Expose the cache so the parent provider's other surfaces (sub-issues,
|
|
78
|
-
* comments) can keep invalidating on mutations. The parent passes the
|
|
79
|
-
* same cache instance into every gateway constructor.
|
|
80
|
-
*/
|
|
51
|
+
/** Shared with sibling gateways so their mutations can invalidate it. */
|
|
81
52
|
get cache() {
|
|
82
53
|
return this._cache;
|
|
83
54
|
}
|
|
84
55
|
|
|
85
|
-
// ---------------------------------------------------------------------------
|
|
86
|
-
// Read surface
|
|
87
|
-
// ---------------------------------------------------------------------------
|
|
88
|
-
|
|
89
56
|
/**
|
|
90
57
|
* @field-manifest /repos/{owner}/{repo}/issues/{n}: number, id, node_id,
|
|
91
58
|
* title, body, labels, assignees, state
|
|
@@ -113,10 +80,8 @@ export class TicketGateway {
|
|
|
113
80
|
}
|
|
114
81
|
|
|
115
82
|
/**
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
* envelopes rather than bare arrays, so this paginates manually instead
|
|
119
|
-
* of going through `paginateRest`.
|
|
83
|
+
* Paginated manually: search responses are `{ total_count, items }`
|
|
84
|
+
* envelopes, not the bare arrays `paginateRest` expects.
|
|
120
85
|
*/
|
|
121
86
|
async _searchIssues(query) {
|
|
122
87
|
const items = [];
|
|
@@ -143,13 +108,9 @@ export class TicketGateway {
|
|
|
143
108
|
}
|
|
144
109
|
|
|
145
110
|
/**
|
|
146
|
-
*
|
|
147
|
-
*
|
|
148
|
-
*
|
|
149
|
-
* cost ~1 spawn per 100 repo issues and hard-failed past the
|
|
150
|
-
* `paginateRest` page cap. Search tokenization can over-match (e.g.
|
|
151
|
-
* `#10` vs `#100`), so callers MUST keep the word-boundary regex
|
|
152
|
-
* post-filter.
|
|
111
|
+
* Two body searches (the `Epic:` and `parent:` footers) deduped by number.
|
|
112
|
+
* Search tokenization over-matches (issue 10 hits issue 100), so callers
|
|
113
|
+
* MUST keep the word-boundary regex post-filter.
|
|
153
114
|
*/
|
|
154
115
|
async _searchEpicChildren(epicId, filters) {
|
|
155
116
|
const qualifiers = [`repo:${this.owner}/${this.repo}`, 'is:issue'];
|
|
@@ -172,10 +133,7 @@ export class TicketGateway {
|
|
|
172
133
|
return Array.from(byNumber.values());
|
|
173
134
|
}
|
|
174
135
|
|
|
175
|
-
/**
|
|
176
|
-
* Repo-wide listing fallback — the pre-#3988 shape. Only used when the
|
|
177
|
-
* Search API path fails (search outage, search-specific rate limit).
|
|
178
|
-
*/
|
|
136
|
+
/** Repo-wide fallback for when the Search API fails. */
|
|
179
137
|
/* node:coverage ignore next */
|
|
180
138
|
async _listAllIssues(filters) {
|
|
181
139
|
const params = new URLSearchParams({ state: filters.state ?? 'all' });
|
|
@@ -206,7 +164,7 @@ export class TicketGateway {
|
|
|
206
164
|
issues = await this._listAllIssues(filters);
|
|
207
165
|
}
|
|
208
166
|
|
|
209
|
-
// Word
|
|
167
|
+
// Word boundary: epic 1 must not match 10 or 100.
|
|
210
168
|
const epicRefRe = new RegExp(
|
|
211
169
|
`(?:Epic:\\s*#${epicId}|parent:\\s*#${epicId})(?:\\s|$|[,.)\\]])`,
|
|
212
170
|
);
|
|
@@ -231,11 +189,6 @@ export class TicketGateway {
|
|
|
231
189
|
};
|
|
232
190
|
}
|
|
233
191
|
|
|
234
|
-
// ---------------------------------------------------------------------------
|
|
235
|
-
// Cache primers — exposed so the parent provider keeps a stable surface for
|
|
236
|
-
// `primeTicketCache` / `invalidateTicket` callers.
|
|
237
|
-
// ---------------------------------------------------------------------------
|
|
238
|
-
|
|
239
192
|
primeTicketCache(tickets) {
|
|
240
193
|
this._cache.primeMany(tickets);
|
|
241
194
|
}
|
|
@@ -245,35 +198,12 @@ export class TicketGateway {
|
|
|
245
198
|
this._listCache.clear();
|
|
246
199
|
}
|
|
247
200
|
|
|
248
|
-
// ---------------------------------------------------------------------------
|
|
249
|
-
// Write surface
|
|
250
|
-
// ---------------------------------------------------------------------------
|
|
251
|
-
|
|
252
201
|
/**
|
|
253
|
-
* Create a
|
|
254
|
-
*
|
|
255
|
-
*
|
|
256
|
-
*
|
|
257
|
-
*
|
|
258
|
-
* After the POST, the new issue is added to the configured Project V2
|
|
259
|
-
* board via the shared `addIssueToBoard` helper (Story #3822) —
|
|
260
|
-
* idempotent, non-fatal, and a no-op when no project number resolves —
|
|
261
|
-
* so board membership never depends on GitHub's "Auto-add to project"
|
|
262
|
-
* built-in workflow.
|
|
263
|
-
*
|
|
264
|
-
* The POST is wrapped in `withTransientRetry` (Story #4541) so it absorbs
|
|
265
|
-
* the same 502/429/ECONNRESET blips the read surfaces already do. It used
|
|
266
|
-
* to post bare, which made a single transient failure at story *k* of *N*
|
|
267
|
-
* abort `/mandrel-plan` persist with `1..k-1` already live on the tracker.
|
|
268
|
-
*
|
|
269
|
-
* Retry alone is not sufficient for that failure mode — a POST whose
|
|
270
|
-
* response is lost would double-create on the retry. Story #5112 closed
|
|
271
|
-
* that: `findExisting` is consulted **before every retry POST**, and a hit
|
|
272
|
-
* is adopted instead of re-created, so a response-lost first attempt files
|
|
273
|
-
* exactly one issue. `/mandrel-plan` persist supplies the plan-fingerprint lookup
|
|
274
|
-
* its resume path already uses (`plan-persist`'s `createStoryIssues`);
|
|
275
|
-
* callers with no content identity omit it and keep the pre-#5112
|
|
276
|
-
* retry-only behaviour.
|
|
202
|
+
* Create a bare issue (the only create path) and add it to the Project V2
|
|
203
|
+
* board (non-fatal, no-op without a project). The POST retries transient
|
|
204
|
+
* failures; because a lost response would double-create, `findExisting` is
|
|
205
|
+
* consulted before every retry POST and a hit is adopted. Callers with no
|
|
206
|
+
* content identity omit it and get retry-only behaviour.
|
|
277
207
|
*
|
|
278
208
|
* @field-manifest POST /repos/{owner}/{repo}/issues: number, id, node_id,
|
|
279
209
|
* html_url
|
|
@@ -322,8 +252,6 @@ export class TicketGateway {
|
|
|
322
252
|
}
|
|
323
253
|
|
|
324
254
|
/**
|
|
325
|
-
* POST one issue and parse the created resource out of the response.
|
|
326
|
-
*
|
|
327
255
|
* @param {{ title: string, body: string, labels: string[] }} payload
|
|
328
256
|
* @returns {Promise<object>}
|
|
329
257
|
*/
|
|
@@ -338,9 +266,8 @@ export class TicketGateway {
|
|
|
338
266
|
}
|
|
339
267
|
|
|
340
268
|
/**
|
|
341
|
-
*
|
|
342
|
-
*
|
|
343
|
-
* `ECONNRESET` before it, so the only authority is the server's own state.
|
|
269
|
+
* Did a prior attempt land? `ECONNRESET` looks the same before and after
|
|
270
|
+
* the server commits, so only the server's state can say.
|
|
344
271
|
*
|
|
345
272
|
* @param {(() => Promise<object|null>)|null} findExisting
|
|
346
273
|
* @returns {Promise<object|null>} the already-created issue, or `null`.
|
|
@@ -350,10 +277,6 @@ export class TicketGateway {
|
|
|
350
277
|
}
|
|
351
278
|
|
|
352
279
|
/**
|
|
353
|
-
* The idempotent half of {@link TicketGateway#createIssue}: POST once, and
|
|
354
|
-
* on every subsequent attempt look for an already-created issue *before*
|
|
355
|
-
* posting again, so a retry adopts rather than duplicates.
|
|
356
|
-
*
|
|
357
280
|
* @param {{ title: string, body: string, labels: string[], findExisting: (() => Promise<object|null>)|null }} args
|
|
358
281
|
* @returns {Promise<{ issue: object, adopted: boolean }>}
|
|
359
282
|
*/
|
|
@@ -374,10 +297,8 @@ export class TicketGateway {
|
|
|
374
297
|
}
|
|
375
298
|
|
|
376
299
|
/**
|
|
377
|
-
*
|
|
378
|
-
*
|
|
379
|
-
* evict an assignee another run added between our read and our write. A
|
|
380
|
-
* non-array or empty list is a no-op.
|
|
300
|
+
* Additive assignee write: cannot evict an assignee another run added
|
|
301
|
+
* concurrently. Empty/absent list is a no-op.
|
|
381
302
|
*
|
|
382
303
|
* @param {number} ticketId
|
|
383
304
|
* @param {string[]|undefined} logins
|
|
@@ -397,21 +318,10 @@ export class TicketGateway {
|
|
|
397
318
|
}
|
|
398
319
|
|
|
399
320
|
/**
|
|
400
|
-
* Add
|
|
401
|
-
*
|
|
402
|
-
*
|
|
403
|
-
*
|
|
404
|
-
* caller for inclusion in the PATCH.
|
|
405
|
-
*
|
|
406
|
-
* The additive POST goes through `withTransientRetry` (Story #4961) on the
|
|
407
|
-
* same policy as every other call in this file. Story #4952 raised the
|
|
408
|
-
* `/mandrel-plan` write loops that reach this endpoint — the `agent::ready` flips
|
|
409
|
-
* and the checkpoint fan-out — off serial, which is precisely what makes
|
|
410
|
-
* GitHub's secondary rate limit likelier; `gh-exec` already classifies that
|
|
411
|
-
* as transient, so the only thing missing was a backoff behind it.
|
|
412
|
-
* Retry does not change what the caller observes on a genuine failure: an
|
|
413
|
-
* exhausted or non-transient error still throws, so `markStoriesReady`
|
|
414
|
-
* still collects it into the complete failure set.
|
|
321
|
+
* Add-only with no other PATCH fields uses the atomic additive labels POST
|
|
322
|
+
* (no read-before-write); otherwise returns the merged label set for the
|
|
323
|
+
* caller's PATCH. Retried because parallel write fan-outs hit the secondary
|
|
324
|
+
* rate limit; a genuine failure still throws.
|
|
415
325
|
*/
|
|
416
326
|
async _applyLabelMutations(
|
|
417
327
|
ticketId,
|
|
@@ -434,9 +344,7 @@ export class TicketGateway {
|
|
|
434
344
|
return { skipPatch: true };
|
|
435
345
|
}
|
|
436
346
|
|
|
437
|
-
//
|
|
438
|
-
// snapshot via `_ticketSnapshot` we reuse its labels rather than
|
|
439
|
-
// issuing another `getTicket` for the merge.
|
|
347
|
+
// Reuse a caller-supplied snapshot rather than re-fetching.
|
|
440
348
|
const ticket = ticketSnapshot ?? (await this.getTicket(ticketId));
|
|
441
349
|
const currentLabels = new Set(ticket.labels ?? []);
|
|
442
350
|
for (const l of remove) currentLabels.delete(l);
|
|
@@ -446,20 +354,10 @@ export class TicketGateway {
|
|
|
446
354
|
}
|
|
447
355
|
|
|
448
356
|
/**
|
|
449
|
-
*
|
|
450
|
-
*
|
|
451
|
-
*
|
|
452
|
-
*
|
|
453
|
-
*
|
|
454
|
-
* `mutations.addAssignees` (Story #5112) is the **additive** assignee
|
|
455
|
-
* write, on the same shape as the additive label POST above: it appends to
|
|
456
|
-
* the assignee set instead of replacing it. The lease claim
|
|
457
|
-
* (`lib/orchestration/ticket-lease.js`) needs that — a replacing PATCH
|
|
458
|
-
* evicts a simultaneous claimer silently, so both runs read a clean
|
|
459
|
-
* `[self]` on verify and both believe they hold the lease. Appending makes
|
|
460
|
-
* the collision *observable* as a co-assignment, which is exactly what the
|
|
461
|
-
* lease's `lost-race` back-out keys on. `mutations.assignees` (replace) is
|
|
462
|
-
* unchanged and still used by the steal and release paths.
|
|
357
|
+
* `mutations.addAssignees` appends rather than replaces: the lease claim
|
|
358
|
+
* needs a simultaneous claimer to show up as a co-assignment (what its
|
|
359
|
+
* `lost-race` back-out keys on) instead of being silently evicted.
|
|
360
|
+
* `mutations.assignees` replaces (steal/release paths).
|
|
463
361
|
*
|
|
464
362
|
* @field-manifest POST /repos/{owner}/{repo}/issues/{n}/assignees: assignees
|
|
465
363
|
* @field-manifest PATCH /repos/{owner}/{repo}/issues/{n}:
|
|
@@ -1,31 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* GitHub Provider — composition root
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* 1. **Holds the constructor** that captures config + opts + the gh-exec
|
|
8
|
-
* facade, then delegates gateway wiring to `composeGateways()` in
|
|
9
|
-
* `./github/compose.js`.
|
|
10
|
-
* 2. **Installs the ITicketingProvider surface** as one-line delegating
|
|
11
|
-
* methods sourced from the `DELEGATIONS` table below — every public
|
|
12
|
-
* method forwards verbatim to a concrete gateway.
|
|
13
|
-
*
|
|
14
|
-
* Re-exports: only the five error-classification helpers still used by tests
|
|
15
|
-
* that import through this barrel (classifyGithubError et al.). All other
|
|
16
|
-
* symbols (mappers, auth helpers, sub-issue constants) are dead exports per
|
|
17
|
-
* baselines/dead-exports.json and were removed in Story #3650 (Epic #3599).
|
|
18
|
-
* Callers should import those symbols directly from their ./github/<sub>.js
|
|
19
|
-
* module.
|
|
20
|
-
*
|
|
21
|
-
* Gateway map: tickets, sub-issues, comments, labels, branch-protection,
|
|
22
|
-
* merge-methods, project-board, issues (epics + sub-tickets + branch probe
|
|
23
|
-
* + raw GraphQL). Story #5008 retired the `prs` gateway — `single-story-close`
|
|
24
|
-
* drives `gh pr create` directly — along with the sub-issue write surface and
|
|
25
|
-
* the repo-wide recent-comments feed.
|
|
2
|
+
* GitHub Provider — composition root. The constructor wires gateways via
|
|
3
|
+
* `composeGateways()`; the `DELEGATIONS` table installs the
|
|
4
|
+
* ITicketingProvider surface as one-line forwards to them. Only the error
|
|
5
|
+
* classifiers are re-exported; import anything else from `./github/<sub>.js`.
|
|
26
6
|
*/
|
|
27
7
|
|
|
28
|
-
import { createGh
|
|
8
|
+
import { createGh } from '../lib/gh-exec.js';
|
|
29
9
|
import { ITicketingProvider } from '../lib/ITicketingProvider.js';
|
|
30
10
|
import { resolveToken } from './github/auth.js';
|
|
31
11
|
import { createInlineTicketCache } from './github/cache.js';
|
|
@@ -47,6 +27,12 @@ export {
|
|
|
47
27
|
isTransientStatus,
|
|
48
28
|
};
|
|
49
29
|
|
|
30
|
+
/**
|
|
31
|
+
* Per-`gh`-subprocess ceiling so a stalled socket can't hang orchestration;
|
|
32
|
+
* the resulting `GhExecTimeoutError` classifies as transient and is retried.
|
|
33
|
+
*/
|
|
34
|
+
const GH_DEFAULT_TIMEOUT_MS = 60_000;
|
|
35
|
+
|
|
50
36
|
export class GitHubProvider extends ITicketingProvider {
|
|
51
37
|
constructor(config, opts = {}) {
|
|
52
38
|
super();
|
|
@@ -58,20 +44,9 @@ export class GitHubProvider extends ITicketingProvider {
|
|
|
58
44
|
this.operatorHandle = config.operatorHandle ?? null;
|
|
59
45
|
this._explicitToken = opts.token ?? null;
|
|
60
46
|
this._memoizedToken = opts.token ?? null;
|
|
61
|
-
//
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
// injected `opts.gh` is honored as-is so tests can drive the facade
|
|
65
|
-
// without going through this fallback. Unset → 60_000 ms in code.
|
|
66
|
-
if (opts.gh) {
|
|
67
|
-
this._gh = opts.gh;
|
|
68
|
-
} else {
|
|
69
|
-
const defaultTimeoutMs = config.defaultTimeoutMs ?? 60_000;
|
|
70
|
-
this._gh =
|
|
71
|
-
defaultTimeoutMs > 0
|
|
72
|
-
? createGh(undefined, { timeoutMs: defaultTimeoutMs })
|
|
73
|
-
: defaultGh;
|
|
74
|
-
}
|
|
47
|
+
// An injected `opts.gh` is honored as-is (test seam).
|
|
48
|
+
this._gh =
|
|
49
|
+
opts.gh ?? createGh(undefined, { timeoutMs: GH_DEFAULT_TIMEOUT_MS });
|
|
75
50
|
this._cache = createInlineTicketCache();
|
|
76
51
|
composeGateways(this);
|
|
77
52
|
}
|
|
@@ -83,17 +58,8 @@ export class GitHubProvider extends ITicketingProvider {
|
|
|
83
58
|
}
|
|
84
59
|
|
|
85
60
|
/**
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
* `providers/github/blocked-by-add.js` talks to the dependencies REST API
|
|
90
|
-
* directly, so it needs the `gh` facade plus `owner`/`repo` — none of which
|
|
91
|
-
* the `ITicketingProvider` surface exposes. Its caller lives in the
|
|
92
|
-
* orchestration layer (`plan-persist/story-ops.js`), and the alternative was
|
|
93
|
-
* for that caller to reach through `provider._gh` — a private-by-convention
|
|
94
|
-
* field — from outside this module. Naming the hand-off here keeps the
|
|
95
|
-
* coupling declared and greppable instead of incidental: the provider
|
|
96
|
-
* decides what it lends out, and the field stays private.
|
|
61
|
+
* What `blocked-by-add.js` needs for the dependencies REST API, lent
|
|
62
|
+
* explicitly so orchestration callers never reach into `provider._gh`.
|
|
97
63
|
*
|
|
98
64
|
* @returns {{ gh: object, owner: string, repo: string }}
|
|
99
65
|
*/
|
|
@@ -106,12 +72,7 @@ export class GitHubProvider extends ITicketingProvider {
|
|
|
106
72
|
}
|
|
107
73
|
}
|
|
108
74
|
|
|
109
|
-
/**
|
|
110
|
-
* Delegation table. Each `[publicMethod, 'gatewayName.gatewayMethod']` pair
|
|
111
|
-
* installs an async wrapper on `GitHubProvider.prototype` that forwards
|
|
112
|
-
* every argument to the matching gateway method. This keeps the parity
|
|
113
|
-
* surface explicit and the file under the thin-composer LOC ceiling.
|
|
114
|
-
*/
|
|
75
|
+
/** `[publicMethod, 'gateway.method']` → async prototype forwarder. */
|
|
115
76
|
const DELEGATIONS = [
|
|
116
77
|
['graphql', 'issues.ghGraphql'],
|
|
117
78
|
['searchIssues', 'issues.searchIssues'],
|
|
@@ -129,9 +90,7 @@ const DELEGATIONS = [
|
|
|
129
90
|
['updateTicket', 'tickets.updateTicket'],
|
|
130
91
|
['_applyLabelMutations', 'tickets._applyLabelMutations'],
|
|
131
92
|
['getNativeSubIssues', 'subIssues.getNativeSubIssues'],
|
|
132
|
-
//
|
|
133
|
-
// and still has call sites; both forward to the same gateway method, so the
|
|
134
|
-
// two can never answer differently while the older name is retired.
|
|
93
|
+
// Legacy private alias with live call sites; same target, so both agree.
|
|
135
94
|
['_getNativeSubIssues', 'subIssues.getNativeSubIssues'],
|
|
136
95
|
['getTicketComments', 'comments.getTicketComments'],
|
|
137
96
|
['deleteComment', 'comments.deleteComment'],
|
|
@@ -1,35 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
//
|
|
3
|
+
// prune-plan-run-labels.js — delete spent `plan-run::<id>` cohort labels
|
|
4
|
+
// across the whole repository (the close tail only reaps one Story's labels
|
|
5
|
+
// as it lands). The spent-ness decision lives in `plan-run-labels/reap.js` so
|
|
6
|
+
// this sweep and the close-path reap cannot disagree. A zero-issue label is
|
|
7
|
+
// kept by default: it looks exactly like one an in-flight persist just minted.
|
|
4
8
|
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
// The close tail reaps incrementally — one Story's own labels, as it lands —
|
|
9
|
-
// which keeps a healthy repository flat but does nothing about a pile that
|
|
10
|
-
// already exists, and nothing about a cohort whose last Story was closed by
|
|
11
|
-
// hand rather than by a close. This is the surface that burns an accumulated
|
|
12
|
-
// pile down: it reads the whole label vocabulary through the paginating
|
|
13
|
-
// listing port, so what it can see is bounded by the repository rather than by
|
|
14
|
-
// an API page.
|
|
15
|
-
//
|
|
16
|
-
// The decision is not made here — `lib/orchestration/plan-run-labels/reap.js`
|
|
17
|
-
// owns it, so this sweep and the close-path reap cannot come to different
|
|
18
|
-
// conclusions about when a label is spent. In short: reapable means the label
|
|
19
|
-
// carries at least one issue and every one of them is closed. A label carrying
|
|
20
|
-
// zero issues is NOT reapable by default, because that shape is exactly what
|
|
21
|
-
// an in-flight `plan-persist` looks like between minting its label and
|
|
22
|
-
// creating its Stories; `--include-unreferenced` is the explicit opt-in for an
|
|
23
|
-
// operator who knows no persist is running.
|
|
24
|
-
//
|
|
25
|
-
// Exit codes:
|
|
26
|
-
// 0 nothing reapable (or, without `--check`, the reap was performed)
|
|
27
|
-
// 1 `--check` found at least one label that would be reaped
|
|
28
|
-
// 2 the sweep could not run
|
|
9
|
+
// Exit codes: 0 clean or reaped; 1 `--check` found reapable labels; 2 the
|
|
10
|
+
// sweep could not run.
|
|
29
11
|
|
|
30
|
-
//
|
|
31
|
-
// first import so the check runs before any third-party-importing sibling
|
|
32
|
-
// module is evaluated (Story #3432).
|
|
12
|
+
// Must be the first import: fail fast before any third-party import runs.
|
|
33
13
|
import './lib/runtime-deps/ensure-installed.js';
|
|
34
14
|
import { runAsCli } from './lib/cli-utils.js';
|
|
35
15
|
import { resolveConfig } from './lib/config-resolver.js';
|
|
@@ -65,8 +45,7 @@ const HELP = {
|
|
|
65
45
|
};
|
|
66
46
|
|
|
67
47
|
/**
|
|
68
|
-
*
|
|
69
|
-
* no-op — a typo'd `--dry-run` must not read as "delete the labels".
|
|
48
|
+
* An unknown flag throws: a typo'd `--dry-run` must not read as "delete".
|
|
70
49
|
*
|
|
71
50
|
* @param {string[]} argv
|
|
72
51
|
* @returns {{ check: boolean, json: boolean, includeUnreferenced: boolean, cwd: string }}
|
|
@@ -99,9 +78,7 @@ export function parseArgs(argv = []) {
|
|
|
99
78
|
}
|
|
100
79
|
|
|
101
80
|
/**
|
|
102
|
-
*
|
|
103
|
-
* reaped. The reason is printed for every label, not only the reapable ones —
|
|
104
|
-
* an operator auditing a pile of 235 needs to see why the other 234 stayed.
|
|
81
|
+
* Every label gets a reason line, kept ones included, so an audit can see why.
|
|
105
82
|
*
|
|
106
83
|
* @param {object} decision
|
|
107
84
|
* @param {boolean} check
|
|
@@ -120,8 +97,6 @@ function renderDecision(decision, check) {
|
|
|
120
97
|
}
|
|
121
98
|
|
|
122
99
|
/**
|
|
123
|
-
* Render the whole report as text.
|
|
124
|
-
*
|
|
125
100
|
* @param {object} report
|
|
126
101
|
* @returns {string}
|
|
127
102
|
*/
|
|
@@ -147,14 +122,6 @@ export function formatReport(report) {
|
|
|
147
122
|
}
|
|
148
123
|
|
|
149
124
|
/**
|
|
150
|
-
* The whole sweep — argv in, exit code out, report written through `writeFn`.
|
|
151
|
-
*
|
|
152
|
-
* Exported with its provider/config/output surfaces as default-parameter
|
|
153
|
-
* seams (`rules/test-seams.md`) so a test drives the *real* argv parsing,
|
|
154
|
-
* report rendering and exit-code decision against a stub provider. Without
|
|
155
|
-
* that, the only testable thing here would be a re-implementation of the
|
|
156
|
-
* decision, which is precisely the copy that drifts.
|
|
157
|
-
*
|
|
158
125
|
* @param {string[]} argv
|
|
159
126
|
* @param {{
|
|
160
127
|
* createProviderFn?: Function,
|
|
@@ -201,9 +168,8 @@ export async function runSweep(
|
|
|
201
168
|
}
|
|
202
169
|
|
|
203
170
|
/**
|
|
204
|
-
*
|
|
205
|
-
*
|
|
206
|
-
* an unbounded report is not truncated at a pipe boundary (Story #4783).
|
|
171
|
+
* Returns the exit code instead of `process.exit()` so a long report is not
|
|
172
|
+
* truncated at a pipe boundary.
|
|
207
173
|
*
|
|
208
174
|
* @returns {Promise<number>}
|
|
209
175
|
*/
|