mandrel 2.60.0 → 2.62.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/README.md +10 -10
- package/.agents/agents/story-worker.md +1 -1
- package/.agents/docs/agentrc-reference.json +4 -82
- package/.agents/docs/configuration.md +20 -87
- package/.agents/docs/workflows.md +1 -1
- package/.agents/instructions.md +1 -3
- package/.agents/rules/gherkin-standards.md +4 -0
- package/.agents/schemas/agentrc.schema.json +11 -486
- package/.agents/schemas/story-deliver-terminal.schema.json +10 -0
- package/.agents/schemas/validation-evidence.schema.json +2 -1
- package/.agents/scripts/README.md +14 -14
- package/.agents/scripts/acceptance-eval.js +32 -164
- package/.agents/scripts/agents-bootstrap-github.js +27 -129
- package/.agents/scripts/apply-quality-bootstrap.js +4 -40
- package/.agents/scripts/audit-baselines.js +6 -27
- package/.agents/scripts/audit-labels-bootstrap.js +5 -29
- package/.agents/scripts/audit-to-stories.js +91 -361
- package/.agents/scripts/boot-sweep.js +19 -72
- package/.agents/scripts/bootstrap.js +74 -395
- package/.agents/scripts/ceremony-derive.js +9 -45
- package/.agents/scripts/check-arch-cycles.js +14 -64
- package/.agents/scripts/check-baselines.js +8 -48
- package/.agents/scripts/check-context-budget.js +46 -172
- package/.agents/scripts/check-cyclomatic.js +12 -44
- package/.agents/scripts/check-dead-exports.js +13 -64
- package/.agents/scripts/check-doc-links.js +38 -186
- package/.agents/scripts/check-gherkin-corpus.js +24 -127
- package/.agents/scripts/check-test-temp-hygiene.js +28 -169
- package/.agents/scripts/coverage-capture.js +32 -99
- package/.agents/scripts/deliver-light.js +14 -101
- package/.agents/scripts/deliver-recover.js +6 -42
- package/.agents/scripts/deliver-run.js +36 -133
- package/.agents/scripts/diagnose-friction.js +24 -116
- package/.agents/scripts/drain-pending-cleanup.js +1 -1
- package/.agents/scripts/evidence-gate.js +23 -85
- package/.agents/scripts/file-ci-gap.js +10 -50
- package/.agents/scripts/generate-config-docs.js +30 -170
- package/.agents/scripts/generate-lens-checklists.js +8 -52
- package/.agents/scripts/generate-skills-index.js +14 -112
- package/.agents/scripts/generate-workflows-doc.js +10 -70
- package/.agents/scripts/git-cleanup.js +2 -34
- package/.agents/scripts/lib/Graph.js +24 -81
- package/.agents/scripts/lib/ITicketingProvider.js +47 -143
- package/.agents/scripts/lib/Logger.js +14 -76
- package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
- package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
- package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
- package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
- package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
- package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
- package/.agents/scripts/lib/audit-baselines/read.js +3 -16
- package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
- package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
- package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
- package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
- package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
- package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
- package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
- package/.agents/scripts/lib/audit-suite/findings.js +12 -52
- package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
- package/.agents/scripts/lib/audit-suite/index.js +1 -15
- package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
- package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
- package/.agents/scripts/lib/audit-suite/runner.js +13 -43
- package/.agents/scripts/lib/audit-suite/selector.js +49 -349
- package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
- package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
- package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
- package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
- package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
- package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
- package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
- package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
- package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
- package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
- package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
- package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
- package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
- package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
- package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
- package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
- package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
- package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
- package/.agents/scripts/lib/baseline-loader.js +12 -51
- package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
- package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
- package/.agents/scripts/lib/baselines/components.js +10 -61
- package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
- package/.agents/scripts/lib/baselines/crap-preview-incremental.js +5 -21
- package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
- package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
- package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
- package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
- package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
- package/.agents/scripts/lib/baselines/envelope.js +13 -129
- package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
- package/.agents/scripts/lib/baselines/git-base.js +23 -142
- package/.agents/scripts/lib/baselines/kernel.js +11 -111
- package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
- package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
- package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
- package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
- package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
- package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
- package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
- package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
- package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
- package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
- package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
- package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
- package/.agents/scripts/lib/baselines/path-canon.js +19 -128
- package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
- package/.agents/scripts/lib/baselines/reader.js +14 -107
- package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
- package/.agents/scripts/lib/baselines/scope.js +11 -135
- package/.agents/scripts/lib/baselines/writer.js +16 -149
- package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
- package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
- package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
- package/.agents/scripts/lib/bdd-step-index.js +26 -100
- package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
- package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
- package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
- package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
- package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
- package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
- package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
- package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
- package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
- package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
- package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
- package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
- package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
- package/.agents/scripts/lib/bootstrap/summary.js +1 -8
- package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
- package/.agents/scripts/lib/branch-name-guard.js +4 -23
- package/.agents/scripts/lib/changed-files.js +31 -143
- package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
- package/.agents/scripts/lib/checks/index.js +18 -101
- package/.agents/scripts/lib/checks/loop-health.js +11 -53
- package/.agents/scripts/lib/checks/state.js +16 -91
- package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
- package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
- package/.agents/scripts/lib/child-exec.js +39 -108
- package/.agents/scripts/lib/cli/standard-args.js +9 -116
- package/.agents/scripts/lib/cli-args.js +31 -146
- package/.agents/scripts/lib/cli-usage.js +5 -27
- package/.agents/scripts/lib/cli-utils.js +2 -12
- package/.agents/scripts/lib/close-validation/commands.js +13 -76
- package/.agents/scripts/lib/close-validation/gates.js +92 -331
- package/.agents/scripts/lib/close-validation/process.js +121 -151
- package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
- package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
- package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
- package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
- package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
- package/.agents/scripts/lib/close-validation/runner.js +53 -110
- package/.agents/scripts/lib/command-header.js +6 -28
- package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
- package/.agents/scripts/lib/config/baselines.js +3 -14
- package/.agents/scripts/lib/config/ci.js +8 -38
- package/.agents/scripts/lib/config/commands.js +1 -15
- package/.agents/scripts/lib/config/defaults.js +4 -33
- package/.agents/scripts/lib/config/delivery-routing.js +6 -35
- package/.agents/scripts/lib/config/explain.js +9 -80
- package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
- package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +2 -30
- package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
- package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
- package/.agents/scripts/lib/config/gates/index.js +2 -17
- package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
- package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
- package/.agents/scripts/lib/config/gates/shared.js +4 -64
- package/.agents/scripts/lib/config/github.js +4 -22
- package/.agents/scripts/lib/config/limits.js +4 -57
- package/.agents/scripts/lib/config/paths.js +2 -21
- package/.agents/scripts/lib/config/qa.js +4 -38
- package/.agents/scripts/lib/config/quality.js +76 -432
- package/.agents/scripts/lib/config/runners.js +12 -56
- package/.agents/scripts/lib/config/runtime.js +13 -57
- package/.agents/scripts/lib/config/shared.js +2 -16
- package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
- package/.agents/scripts/lib/config/temp-paths.js +40 -280
- package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
- package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
- package/.agents/scripts/lib/config-resolver.js +10 -52
- package/.agents/scripts/lib/config-schema-shared.js +1 -4
- package/.agents/scripts/lib/config-settings-schema-delivery.js +12 -294
- package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
- package/.agents/scripts/lib/config-settings-schema.js +37 -274
- package/.agents/scripts/lib/coverage-baseline.js +20 -110
- package/.agents/scripts/lib/coverage-capture-fullscope.js +12 -37
- package/.agents/scripts/lib/coverage-capture-incremental.js +12 -43
- package/.agents/scripts/lib/coverage-capture-usage.js +4 -24
- package/.agents/scripts/lib/coverage-capture.js +99 -224
- package/.agents/scripts/lib/coverage-utils.js +14 -79
- package/.agents/scripts/lib/cpu-pool.js +17 -123
- package/.agents/scripts/lib/crap-baseline-join.js +16 -88
- package/.agents/scripts/lib/crap-coordinates.js +6 -25
- package/.agents/scripts/lib/crap-engine.js +40 -153
- package/.agents/scripts/lib/crap-method-identity.js +16 -78
- package/.agents/scripts/lib/crap-utils.js +31 -155
- package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
- package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
- package/.agents/scripts/lib/dead-exports-knip.js +18 -56
- package/.agents/scripts/lib/dead-exports-mode.js +5 -24
- package/.agents/scripts/lib/degraded-mode.js +3 -26
- package/.agents/scripts/lib/dependency-parser.js +8 -40
- package/.agents/scripts/lib/dependency-version.js +13 -35
- package/.agents/scripts/lib/detect-package-manager.js +6 -36
- package/.agents/scripts/lib/doc-tiers.js +22 -126
- package/.agents/scripts/lib/duplicate-search.js +8 -72
- package/.agents/scripts/lib/env-loader.js +5 -27
- package/.agents/scripts/lib/error-redactor.js +6 -31
- package/.agents/scripts/lib/errors/index.js +2 -22
- package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
- package/.agents/scripts/lib/escomplex-kernel.js +21 -123
- package/.agents/scripts/lib/feedback-loop/graduator-core.js +93 -419
- package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
- package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -151
- package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
- package/.agents/scripts/lib/findings/classify-finding.js +14 -69
- package/.agents/scripts/lib/findings/promote-finding.js +14 -112
- package/.agents/scripts/lib/findings/provenance-field.js +11 -52
- package/.agents/scripts/lib/findings/route-finding.js +37 -255
- package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
- package/.agents/scripts/lib/findings/severity.js +18 -104
- package/.agents/scripts/lib/format-generated-json.js +12 -44
- package/.agents/scripts/lib/full-suite-lock.js +160 -429
- package/.agents/scripts/lib/full-suite-queue.js +213 -0
- package/.agents/scripts/lib/gates/baseline-store.js +5 -9
- package/.agents/scripts/lib/gates/friction.js +1 -3
- package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
- package/.agents/scripts/lib/gh-exec.js +31 -259
- package/.agents/scripts/lib/git/cached-fetch.js +9 -52
- package/.agents/scripts/lib/git/sync-from-base.js +15 -107
- package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
- package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
- package/.agents/scripts/lib/git-utils.js +37 -161
- package/.agents/scripts/lib/github/framework-repo.js +8 -71
- package/.agents/scripts/lib/github-url.js +2 -17
- package/.agents/scripts/lib/import-graph.js +11 -38
- package/.agents/scripts/lib/install-cmd-parser.js +4 -13
- package/.agents/scripts/lib/json-utils.js +3 -18
- package/.agents/scripts/lib/label-constants.js +16 -111
- package/.agents/scripts/lib/label-taxonomy.js +4 -30
- package/.agents/scripts/lib/maintainability-engine.js +12 -80
- package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
- package/.agents/scripts/lib/maintainability-utils.js +16 -92
- package/.agents/scripts/lib/mandrel-catalog.js +12 -70
- package/.agents/scripts/lib/notifications/notifier.js +13 -38
- package/.agents/scripts/lib/npm-scripts.js +4 -23
- package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
- package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
- package/.agents/scripts/lib/observability/signal-validator.js +5 -37
- package/.agents/scripts/lib/observability/signals-writer.js +11 -121
- package/.agents/scripts/lib/observability/source-classifier.js +21 -203
- package/.agents/scripts/lib/observability/terse-result.js +14 -47
- package/.agents/scripts/lib/onboard/init-tail.js +13 -74
- package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
- package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
- package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
- package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
- package/.agents/scripts/lib/orchestration/ceremony-routing.js +5 -75
- package/.agents/scripts/lib/orchestration/change-set.js +7 -36
- package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
- package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
- package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
- package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
- package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
- package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
- package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
- package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
- package/.agents/scripts/lib/orchestration/check-state.js +92 -0
- package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
- package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +42 -189
- package/.agents/scripts/lib/orchestration/code-review.js +24 -128
- package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
- package/.agents/scripts/lib/orchestration/complexity-gate.js +42 -214
- package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
- package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
- package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
- package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
- package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
- package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
- package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
- package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
- package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
- package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
- package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
- package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
- package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
- package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
- package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
- package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
- package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
- package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
- package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
- package/.agents/scripts/lib/orchestration/light-suitability.js +26 -231
- package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
- package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
- package/.agents/scripts/lib/orchestration/merge-queue.js +158 -0
- package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
- package/.agents/scripts/lib/orchestration/plan-context.js +52 -303
- package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
- package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
- package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
- package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
- package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
- package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
- package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +14 -78
- package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
- package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
- package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
- package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
- package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
- package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
- package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +49 -248
- package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
- package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +85 -368
- package/.agents/scripts/lib/orchestration/plan-persist/summary.js +8 -38
- package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +30 -190
- package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
- package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
- package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
- package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
- package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
- package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
- package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
- package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
- package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
- package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
- package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
- package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
- package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
- package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
- package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
- package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
- package/.agents/scripts/lib/orchestration/review-depth.js +12 -94
- package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
- package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
- package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
- package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
- package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
- package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
- package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
- package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
- package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
- package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
- package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
- package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
- package/.agents/scripts/lib/orchestration/run-epilogue.js +40 -199
- package/.agents/scripts/lib/orchestration/run-scoped-config.js +13 -81
- package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
- package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
- package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
- package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +190 -280
- package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +18 -80
- package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
- package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
- package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +183 -485
- package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
- package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +9 -50
- package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
- package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
- package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
- package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
- package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
- package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
- package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
- package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
- package/.agents/scripts/lib/orchestration/single-story-close/runner.js +110 -290
- package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
- package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
- package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
- package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
- package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
- package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
- package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
- package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
- package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -201
- package/.agents/scripts/lib/orchestration/story-follow-ups.js +43 -245
- package/.agents/scripts/lib/orchestration/story-init-envelope.js +4 -23
- package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
- package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
- package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -126
- package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
- package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
- package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
- package/.agents/scripts/lib/orchestration/ticket-validator.js +39 -181
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -250
- package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
- package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
- package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
- package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
- package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
- package/.agents/scripts/lib/path-security.js +3 -6
- package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
- package/.agents/scripts/lib/preflight-runner.js +13 -69
- package/.agents/scripts/lib/process-group.js +143 -0
- package/.agents/scripts/lib/project-root.js +2 -8
- package/.agents/scripts/lib/provider-factory.js +2 -25
- package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
- package/.agents/scripts/lib/qa/qa-session.js +15 -69
- package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
- package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
- package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
- package/.agents/scripts/lib/reserved-test-ids.js +9 -47
- package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
- package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
- package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
- package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
- package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
- package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
- package/.agents/scripts/lib/signals/detectors/common.js +12 -38
- package/.agents/scripts/lib/signals/index.js +2 -19
- package/.agents/scripts/lib/signals/schema.js +14 -109
- package/.agents/scripts/lib/signals/write.js +2 -11
- package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
- package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
- package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
- package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
- package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
- package/.agents/scripts/lib/single-story-sweep.js +14 -97
- package/.agents/scripts/lib/skills/parse-skill.js +13 -59
- package/.agents/scripts/lib/skills/skills-index.js +8 -29
- package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
- package/.agents/scripts/lib/source-extensions.js +11 -42
- package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
- package/.agents/scripts/lib/stdio-flush.js +9 -36
- package/.agents/scripts/lib/story-adjacency.js +8 -40
- package/.agents/scripts/lib/story-body/body-format-lints.js +22 -83
- package/.agents/scripts/lib/story-body/footer-block.js +11 -44
- package/.agents/scripts/lib/story-body/story-body.js +83 -358
- package/.agents/scripts/lib/temp-retention.js +42 -143
- package/.agents/scripts/lib/templates/decomposer-prompts.js +11 -65
- package/.agents/scripts/lib/test-env.js +12 -65
- package/.agents/scripts/lib/test-run-credit.js +10 -65
- package/.agents/scripts/lib/test-runner-contract.js +19 -74
- package/.agents/scripts/lib/test-temp.js +38 -184
- package/.agents/scripts/lib/test-tiers.js +12 -96
- package/.agents/scripts/lib/ticket-body-sections.js +21 -96
- package/.agents/scripts/lib/transpile.js +15 -74
- package/.agents/scripts/lib/util/concurrent-map.js +6 -25
- package/.agents/scripts/lib/util/parse-id-list.js +8 -34
- package/.agents/scripts/lib/util/poll-loop.js +8 -28
- package/.agents/scripts/lib/util/with-timeout.js +2 -11
- package/.agents/scripts/lib/validation-evidence.js +21 -96
- package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
- package/.agents/scripts/lib/wave-runner/live-probe.js +53 -221
- package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
- package/.agents/scripts/lib/workers/crap-worker.js +11 -64
- package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
- package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
- package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
- package/.agents/scripts/lib/workflow-closure.js +22 -105
- package/.agents/scripts/lib/workspace-provisioner.js +16 -54
- package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
- package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
- package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
- package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
- package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
- package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
- package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
- package/.agents/scripts/lib/worktree-manager.js +15 -40
- package/.agents/scripts/lint-issue-body.js +12 -68
- package/.agents/scripts/mandrel-update-preflight.js +10 -70
- package/.agents/scripts/merge-baseline.js +30 -104
- package/.agents/scripts/nav-registry-diff.js +22 -108
- package/.agents/scripts/notify.js +12 -69
- package/.agents/scripts/plan-context.js +27 -111
- package/.agents/scripts/plan-critics.js +12 -66
- package/.agents/scripts/plan-persist.js +31 -148
- package/.agents/scripts/plan-run-epilogue.js +11 -37
- package/.agents/scripts/pr-watch-with-update.js +76 -267
- package/.agents/scripts/providers/github/auth.js +3 -8
- package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
- package/.agents/scripts/providers/github/board-add.js +5 -21
- package/.agents/scripts/providers/github/branch-protection.js +11 -43
- package/.agents/scripts/providers/github/cache.js +2 -14
- package/.agents/scripts/providers/github/comments.js +7 -40
- package/.agents/scripts/providers/github/compose.js +3 -19
- package/.agents/scripts/providers/github/errors.js +22 -125
- package/.agents/scripts/providers/github/issues.js +31 -123
- package/.agents/scripts/providers/github/labels.js +24 -124
- package/.agents/scripts/providers/github/mappers.js +5 -27
- package/.agents/scripts/providers/github/merge-methods.js +3 -22
- package/.agents/scripts/providers/github/project-board.js +2 -17
- package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
- package/.agents/scripts/providers/github/request-helpers.js +5 -32
- package/.agents/scripts/providers/github/search-budget.js +9 -39
- package/.agents/scripts/providers/github/search-query.js +5 -26
- package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
- package/.agents/scripts/providers/github/sub-issues.js +7 -36
- package/.agents/scripts/providers/github/tickets.js +32 -134
- package/.agents/scripts/providers/github.js +18 -59
- package/.agents/scripts/prune-plan-run-labels.js +12 -46
- package/.agents/scripts/quality-preview.js +35 -220
- package/.agents/scripts/resolve-doc-tiers.js +3 -26
- package/.agents/scripts/resolve-stories.js +16 -67
- package/.agents/scripts/resync-status-column.js +6 -25
- package/.agents/scripts/run-tests.js +29 -104
- package/.agents/scripts/single-story-close.js +23 -135
- package/.agents/scripts/single-story-confirm-merge.js +32 -139
- package/.agents/scripts/single-story-init.js +47 -209
- package/.agents/scripts/stories-wave-tick.js +102 -472
- package/.agents/scripts/sync-agentrc.js +3 -21
- package/.agents/scripts/sync-claude-agents.js +9 -55
- package/.agents/scripts/sync-claude-commands.js +20 -110
- package/.agents/scripts/test-wrapper.js +6 -43
- package/.agents/scripts/update-coverage-baseline.js +5 -22
- package/.agents/scripts/update-crap-baseline.js +7 -30
- package/.agents/scripts/update-duplication-baseline.js +16 -92
- package/.agents/scripts/update-maintainability-baseline.js +8 -62
- package/.agents/scripts/update-ticket-state.js +1 -7
- package/.agents/scripts/validate-skills.js +6 -26
- package/.agents/templates/agent-protocol.md +2 -2
- package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
- package/.agents/workflows/audit-accessibility.md +4 -7
- package/.agents/workflows/audit-adrs.md +3 -6
- package/.agents/workflows/audit-architecture.md +3 -11
- package/.agents/workflows/audit-baselines.md +6 -9
- package/.agents/workflows/audit-clean-code.md +8 -12
- package/.agents/workflows/audit-data-model.md +3 -7
- package/.agents/workflows/audit-dependencies.md +4 -7
- package/.agents/workflows/audit-devops.md +4 -8
- package/.agents/workflows/audit-documentation.md +1 -4
- package/.agents/workflows/audit-mobile.md +4 -7
- package/.agents/workflows/audit-navigability.md +3 -6
- package/.agents/workflows/audit-performance.md +2 -4
- package/.agents/workflows/audit-privacy.md +4 -7
- package/.agents/workflows/audit-quality.md +4 -7
- package/.agents/workflows/audit-security.md +4 -7
- package/.agents/workflows/audit-seo.md +4 -7
- package/.agents/workflows/audit-sre.md +4 -7
- package/.agents/workflows/audit-to-stories.md +17 -30
- package/.agents/workflows/audit-ux-ui.md +4 -7
- package/.agents/workflows/helpers/audit-lens-core.md +1 -1
- package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
- package/.agents/workflows/helpers/deliver-digest.md +6 -4
- package/.agents/workflows/helpers/deliver-reference.md +114 -188
- package/.agents/workflows/helpers/deliver-story-reference.md +189 -533
- package/.agents/workflows/helpers/plan-reference.md +86 -139
- package/.agents/workflows/helpers/qa-core.md +12 -0
- package/.agents/workflows/memory-consolidate.md +1 -1
- package/.agents/workflows/qa-assist.md +27 -71
- package/.agents/workflows/qa-explore.md +19 -59
- package/.agents/workflows/qa-run.md +11 -33
- package/README.md +1 -1
- package/bin/mandrel.js +5 -46
- package/bin/postinstall.js +18 -107
- package/docs/CHANGELOG.md +32 -0
- package/lib/cli/doctor.js +11 -71
- package/lib/cli/init.js +26 -165
- package/lib/cli/migrate.js +5 -64
- package/lib/cli/registry.js +84 -467
- package/lib/cli/sync-agents.js +4 -64
- package/lib/cli/sync-commands.js +11 -64
- package/lib/cli/sync.js +34 -213
- package/lib/cli/uninstall.js +40 -219
- package/lib/cli/update.js +105 -661
- package/lib/cli/version-check.js +8 -72
- package/lib/cli/version-helpers.js +14 -87
- package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
- package/lib/migrations/index.js +15 -92
- package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
- package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
- package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
- package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
- package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
- package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
- package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
- package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
- package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +2 -21
- package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
- package/package.json +16 -14
- package/.agents/docs/SDLC.md +0 -590
- package/.agents/docs/quality-gates.md +0 -1183
- package/.agents/rules/known-tooling-behavior.md +0 -200
- package/.agents/rules/orchestration-error-handling.md +0 -61
- package/.agents/rules/test-seams.md +0 -59
- package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
- package/.agents/schemas/baselines/lint.schema.json +0 -47
- package/.agents/scripts/check-action-pinning.js +0 -260
- package/.agents/scripts/check-audit-attribution.js +0 -302
- package/.agents/scripts/check-baseline-drift.js +0 -211
- package/.agents/scripts/check-baseline-scope.js +0 -362
- package/.agents/scripts/check-generated-validator.js +0 -202
- package/.agents/scripts/check-knip-entries.js +0 -159
- package/.agents/scripts/check-lifecycle-lint.js +0 -294
- package/.agents/scripts/check-pinned-override-notes.js +0 -102
- package/.agents/scripts/check-schema-references.js +0 -368
- package/.agents/scripts/check-test-portability.js +0 -512
- package/.agents/scripts/check-workflow-citations.js +0 -218
- package/.agents/scripts/check-workflow-cli-lint.js +0 -299
- package/.agents/scripts/check-workflow-timeouts.js +0 -291
- package/.agents/scripts/install-matrix-assert.js +0 -326
- package/.agents/scripts/lib/audit-advisories.js +0 -195
- package/.agents/scripts/lib/audit-attribution.js +0 -134
- package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
- package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
- package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
- package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
- package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
- package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
- package/.agents/scripts/lib/c8-cli-path.js +0 -21
- package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
- package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
- package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
- package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
- package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
- package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
- package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
- package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
- package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
- package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
- package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
- package/.agents/scripts/lib/fs-walk.js +0 -52
- package/.agents/scripts/lib/knip-config-resolver.js +0 -181
- package/.agents/scripts/lib/knip-entry-sync.js +0 -452
- package/.agents/scripts/lib/pinned-override-notes.js +0 -88
- package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
- package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
- package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
- package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
- package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
- package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
- package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
- package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
- package/.agents/scripts/lib/test-isolate/runner.js +0 -483
- package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
- package/.agents/scripts/lib/test-profile/render-report.js +0 -45
- package/.agents/scripts/lint-label-vocabulary.js +0 -214
- package/.agents/scripts/post-structured-comment.js +0 -127
- package/.agents/scripts/provision-git-hooks.js +0 -85
- package/.agents/scripts/prune-baseline-orphans.js +0 -181
- package/.agents/scripts/run-coverage.js +0 -197
- package/.agents/scripts/run-lint.js +0 -133
- package/.agents/scripts/run-test-profile.js +0 -129
- package/.agents/scripts/run-verify.js +0 -125
- package/.agents/scripts/test-isolate.js +0 -55
- package/.agents/scripts/update-dead-exports-baseline.js +0 -321
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Projects V2 GraphQL shim
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* `gh auth token` → GITHUB_TOKEN/GH_TOKEN env. Soft-fails on
|
|
6
|
-
* INSUFFICIENT_SCOPES via `{scopesMissing:true}` / `status:'scopes-missing'` /
|
|
7
|
-
* `unavailable:true` envelopes. Wave 3 deletes the old submodules.
|
|
2
|
+
* Projects V2 GraphQL shim. Token: `gh auth token` → GITHUB_TOKEN/GH_TOKEN.
|
|
3
|
+
* Soft-fails on INSUFFICIENT_SCOPES via `{scopesMissing:true}` /
|
|
4
|
+
* `status:'scopes-missing'` / `unavailable:true` envelopes.
|
|
8
5
|
*/
|
|
9
6
|
import { execSync } from 'node:child_process';
|
|
10
7
|
import { withTransientRetry } from './errors.js';
|
|
@@ -1,23 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* GitHub Provider — shared REST request helpers.
|
|
3
|
-
*
|
|
4
|
-
* Story #2852: dedupes the `parseApiJson` + `paginateRest` copies that
|
|
5
|
-
* previously lived inline in `tickets.js`, `issues.js`, `comments.js`,
|
|
6
|
-
* `branch-protection.js`, and `merge-methods.js`, and folds in two
|
|
7
|
-
* resilience guards:
|
|
8
|
-
*
|
|
9
|
-
* 1. **Transient retry** — each underlying `gh.api({...})` call inside
|
|
10
|
-
* `paginateRest` is wrapped in `withTransientRetry` (from `./errors.js`),
|
|
11
|
-
* so a single 502 / 429 / ECONNRESET on page N of M does not lose
|
|
12
|
-
* pages 1..N-1 of work.
|
|
13
|
-
* 2. **Page cap** — `paginateRest` enforces a hard ceiling (default
|
|
14
|
-
* `DEFAULT_PAGE_CAP = 50` → 5000 items at `per_page=100`). Exceeding
|
|
15
|
-
* the cap throws a clear error naming the endpoint, cap, and items
|
|
16
|
-
* collected so far, so a runaway loop fails fast and visibly instead
|
|
17
|
-
* of hanging. Pass `pageCap` in the options bag to opt into a larger
|
|
18
|
-
* ceiling when the call site has a legitimate reason.
|
|
19
|
-
*
|
|
20
|
-
* @see Story #2852 — Harden provider REST read path.
|
|
21
3
|
*/
|
|
22
4
|
|
|
23
5
|
import { Logger } from '../../lib/Logger.js';
|
|
@@ -26,20 +8,14 @@ import { withTransientRetry } from './errors.js';
|
|
|
26
8
|
export const DEFAULT_PAGE_CAP = 50;
|
|
27
9
|
export const DEFAULT_PER_PAGE = 100;
|
|
28
10
|
|
|
29
|
-
/**
|
|
30
|
-
* Parse a `gh api ...` stdout payload into JSON. Returns `null` for empty
|
|
31
|
-
* bodies (HTTP 204 DELETE responses).
|
|
32
|
-
*/
|
|
11
|
+
/** `null` for an empty body (e.g. a 204 DELETE). */
|
|
33
12
|
export function parseApiJson(result) {
|
|
34
13
|
const stdout = result?.stdout ?? '';
|
|
35
14
|
if (!stdout.trim()) return null;
|
|
36
15
|
return JSON.parse(stdout);
|
|
37
16
|
}
|
|
38
17
|
|
|
39
|
-
/**
|
|
40
|
-
* Default retry-warn logger — shared so every retro-relevant call site
|
|
41
|
-
* emits in the same shape and operators can grep for `[gh-api retry]`.
|
|
42
|
-
*/
|
|
18
|
+
/** One greppable `[gh-api retry]` shape for every call site. */
|
|
43
19
|
export function defaultRetryWarn({ attempt, maxAttempts, delay, err, label }) {
|
|
44
20
|
const msg =
|
|
45
21
|
typeof err === 'object' && err && typeof err.message === 'string'
|
|
@@ -52,10 +28,9 @@ export function defaultRetryWarn({ attempt, maxAttempts, delay, err, label }) {
|
|
|
52
28
|
}
|
|
53
29
|
|
|
54
30
|
/**
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
* the Story #2852 transient-retry + page-cap guards.
|
|
31
|
+
* Concatenate pages until a short page lands. Each page retries transient
|
|
32
|
+
* errors on its own, so a blip on page N keeps pages 1..N-1. Hitting the page
|
|
33
|
+
* cap throws (naming endpoint and count) rather than truncating silently.
|
|
59
34
|
*
|
|
60
35
|
* @param {object} ghFacade bound gh facade (provider._gh)
|
|
61
36
|
* @param {string} endpoint REST endpoint without `page=` set
|
|
@@ -103,7 +78,5 @@ export async function paginateRest(ghFacade, endpoint, opts = {}) {
|
|
|
103
78
|
);
|
|
104
79
|
}
|
|
105
80
|
}
|
|
106
|
-
// Unreachable: the loop returns or throws on the last iteration. Kept
|
|
107
|
-
// for type-narrowing / future-proofing.
|
|
108
81
|
return items;
|
|
109
82
|
}
|
|
@@ -1,26 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* GitHub Provider — `/search/issues
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* endpoint, not of any one caller. A single audit-to-stories scan issues ~2
|
|
6
|
-
* search calls per finding; a 22-group scan therefore blows well past the cap
|
|
7
|
-
* with no throttle of any kind, and every exhausted call then spends its whole
|
|
8
|
-
* transient-retry budget re-issuing a request against an already-empty window.
|
|
9
|
-
*
|
|
10
|
-
* This module owns the throttle at the endpoint seam: a pure, injectable token
|
|
11
|
-
* bucket that `IssuesGateway#searchIssues` awaits before every call, so every
|
|
12
|
-
* caller (audit-to-stories dedup, `lib/duplicate-search.js`, the tickets
|
|
13
|
-
* gateway's `_searchIssues`) inherits one shared budget for free.
|
|
14
|
-
*
|
|
15
|
-
* `now` and `sleep` are injected so unit tests drive the bucket deterministically
|
|
16
|
-
* without wall-clock time.
|
|
2
|
+
* GitHub Provider — token-bucket throttle for `/search/issues`, whose
|
|
3
|
+
* 30/min cap belongs to the endpoint, not any caller. `searchIssues` awaits
|
|
4
|
+
* it before every call so all callers share one budget.
|
|
17
5
|
*/
|
|
18
6
|
|
|
19
|
-
/**
|
|
20
|
-
* Default budget: 30 tokens per 60s window, matching GitHub's authenticated
|
|
21
|
-
* Search API cap. When a rate limit is reported with no readable reset, the
|
|
22
|
-
* bucket pauses for one full window before the next `take()` resolves.
|
|
23
|
-
*/
|
|
7
|
+
/** GitHub's authenticated Search cap; cooldown applies when no reset is readable. */
|
|
24
8
|
const SEARCH_BUDGET_DEFAULTS = Object.freeze({
|
|
25
9
|
capacity: 30,
|
|
26
10
|
windowMs: 60_000,
|
|
@@ -28,14 +12,9 @@ const SEARCH_BUDGET_DEFAULTS = Object.freeze({
|
|
|
28
12
|
});
|
|
29
13
|
|
|
30
14
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
* accruing token (and any active rate-limit cooldown) rather than failing.
|
|
35
|
-
* `noteRateLimited(resetAtMs)` drains the bucket and blocks every subsequent
|
|
36
|
-
* `take()` until the reported reset (or a fixed cooldown when no reset is
|
|
37
|
-
* readable), so the whole batch pauses **once** instead of each call retrying
|
|
38
|
-
* independently into the empty window.
|
|
15
|
+
* `take()` waits for (never fails on) a token. `noteRateLimited` drains the
|
|
16
|
+
* bucket and blocks every `take()` until the reset, so the batch pauses once
|
|
17
|
+
* instead of each call retrying into the empty window.
|
|
39
18
|
*
|
|
40
19
|
* @param {object} [opts]
|
|
41
20
|
* @param {number} [opts.capacity] — max tokens (and burst size).
|
|
@@ -79,7 +58,6 @@ export function createSearchBudget({
|
|
|
79
58
|
tokens -= 1;
|
|
80
59
|
return;
|
|
81
60
|
}
|
|
82
|
-
// Sleep just long enough for one token to accrue, then re-check.
|
|
83
61
|
const waitMs = Math.max(1, Math.ceil((1 - tokens) / refillPerMs));
|
|
84
62
|
await sleep(waitMs);
|
|
85
63
|
}
|
|
@@ -99,19 +77,11 @@ export function createSearchBudget({
|
|
|
99
77
|
return { take, noteRateLimited };
|
|
100
78
|
}
|
|
101
79
|
|
|
102
|
-
/**
|
|
103
|
-
* Process-wide singleton shared by every `searchIssues` caller. Per-process,
|
|
104
|
-
* matching the one-scan-per-checkout model — there is deliberately no
|
|
105
|
-
* cross-process budget.
|
|
106
|
-
*/
|
|
80
|
+
/** Per-process by design (one scan per checkout); no cross-process budget. */
|
|
107
81
|
export const searchBudget = createSearchBudget();
|
|
108
82
|
|
|
109
83
|
/**
|
|
110
|
-
*
|
|
111
|
-
* error's stderr. GitHub surfaces the reset as an `x-ratelimit-reset` epoch
|
|
112
|
-
* (seconds) header; `gh` echoes response headers onto stderr on failure.
|
|
113
|
-
* Returns `undefined` when no reset is readable so the bucket falls back to a
|
|
114
|
-
* fixed cooldown. Pure — no I/O.
|
|
84
|
+
* The `x-ratelimit-reset` header (epoch seconds) `gh` echoes onto stderr.
|
|
115
85
|
*
|
|
116
86
|
* @param {unknown} err
|
|
117
87
|
* @returns {number|undefined} reset time in epoch milliseconds, or undefined.
|
|
@@ -1,29 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* GitHub Provider — composed `/search/issues` query
|
|
3
|
-
*
|
|
4
|
-
* `IssuesGateway#searchIssues` is the only place that knows the *composed* `q`
|
|
5
|
-
* — the caller's free text plus the `repo:<owner>/<repo> type:issue` qualifiers
|
|
6
|
-
* it appends. GitHub Search rejects a query over 256 characters with HTTP 422,
|
|
7
|
-
* which is neither transient nor caught, so an over-long title over a deep path
|
|
8
|
-
* would abort the whole scan. This module owns the defensive guard: it truncates
|
|
9
|
-
* the free-text portion on a whole-token boundary until the composed `q` fits.
|
|
10
|
-
*
|
|
11
|
-
* Pure and unit-testable — no I/O.
|
|
2
|
+
* GitHub Provider — bounds a composed `/search/issues` query. Search answers
|
|
3
|
+
* a `q` over 256 chars with a non-transient 422 that would abort a scan.
|
|
12
4
|
*/
|
|
13
5
|
|
|
14
|
-
/**
|
|
15
|
-
* GitHub Search's documented maximum query length, in characters. Module-private
|
|
16
|
-
* — `composeBoundedQuery` is the only supported way to apply it, so the bound
|
|
17
|
-
* cannot drift between call sites.
|
|
18
|
-
*/
|
|
19
6
|
const GITHUB_SEARCH_MAX_QUERY = 256;
|
|
20
7
|
|
|
21
8
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* composed string is at most `max` characters. Qualifiers are never dropped —
|
|
25
|
-
* they are the load-bearing scope (`repo:` / `type:`) — so when even the
|
|
26
|
-
* qualifiers alone exceed the budget the qualifier string is returned as-is.
|
|
9
|
+
* Truncate the free text on a whole-token boundary to fit `max`. Qualifiers
|
|
10
|
+
* are the scope and are never dropped, even if they alone exceed `max`.
|
|
27
11
|
*
|
|
28
12
|
* @param {string} freeText — the caller's free-text search term(s).
|
|
29
13
|
* @param {string[]} qualifiers — fixed qualifier tokens (e.g. `repo:o/r`).
|
|
@@ -40,8 +24,6 @@ export function composeBoundedQuery(
|
|
|
40
24
|
const full = `${free} ${quals}`.trim();
|
|
41
25
|
if (full.length <= max) return full;
|
|
42
26
|
|
|
43
|
-
// Reserve space for the qualifiers (and the joining space) and fit as many
|
|
44
|
-
// leading free-text tokens as the remaining budget allows.
|
|
45
27
|
const reserve = quals.length + (quals.length > 0 ? 1 : 0);
|
|
46
28
|
const budget = max - reserve;
|
|
47
29
|
const bounded = fitTokens(free.split(/\s+/).filter(Boolean), budget);
|
|
@@ -49,10 +31,7 @@ export function composeBoundedQuery(
|
|
|
49
31
|
}
|
|
50
32
|
|
|
51
33
|
/**
|
|
52
|
-
*
|
|
53
|
-
* whole-token boundary (space-separated). Returns '' when the budget cannot fit
|
|
54
|
-
* even the first token. Module-private — exercised through
|
|
55
|
-
* {@link composeBoundedQuery}, the only caller.
|
|
34
|
+
* Leading tokens that fit `budget`; '' when even the first doesn't.
|
|
56
35
|
*
|
|
57
36
|
* @param {string[]} tokens
|
|
58
37
|
* @param {number} budget
|
|
@@ -1,54 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* GitHub Provider —
|
|
2
|
+
* GitHub Provider — link child issues under a parent as native sub-issues
|
|
3
|
+
* (`POST /repos/{owner}/{repo}/issues/{n}/sub_issues`).
|
|
3
4
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* (`sub-issues.js` → `getNativeSubIssues`, and the three-strategy
|
|
7
|
-
* aggregator in `issues.js` → `getSubTickets`); this is the missing write.
|
|
5
|
+
* `sub_issue_id` is the child's database id, not its issue number; both are
|
|
6
|
+
* plausible integers, so a mix-up silently links the wrong issue.
|
|
8
7
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* body: { "sub_issue_id": <integer db id of the CHILD issue> }
|
|
13
|
-
*
|
|
14
|
-
* **`sub_issue_id` is the child's database id, not its issue number.** They
|
|
15
|
-
* are different integers and both are plausible, so a mix-up does not throw
|
|
16
|
-
* — it silently links the wrong issue, or a nonexistent one. This mirrors
|
|
17
|
-
* `blocked-by-add.js`, whose `issue_id` carries the same trap.
|
|
18
|
-
*
|
|
19
|
-
* Contract (deliberately identical to `blocked-by-add.js`):
|
|
20
|
-
* - **Idempotent** — reads existing edges first; only POSTs missing ones.
|
|
21
|
-
* - **Non-fatal** — catches all errors per edge, warns, and continues.
|
|
22
|
-
* The function never throws; failures are returned in the summary.
|
|
23
|
-
* The Epic body's checklist is the durable mirror, so a lost edge
|
|
24
|
-
* degrades discoverability rather than losing the child.
|
|
25
|
-
* - **No-op on empty input.**
|
|
8
|
+
* Idempotent (reads existing edges first) and non-fatal (per-edge failures
|
|
9
|
+
* are warned and counted, never thrown) — the Epic body's checklist is the
|
|
10
|
+
* durable mirror. Same contract as `blocked-by-add.js`.
|
|
26
11
|
*/
|
|
27
12
|
|
|
28
13
|
import { Logger } from '../../lib/Logger.js';
|
|
29
14
|
import { concurrentMap } from '../../lib/util/concurrent-map.js';
|
|
30
15
|
import { paginateRest } from './request-helpers.js';
|
|
31
16
|
|
|
32
|
-
/**
|
|
33
|
-
* Bounded concurrency for the sub-issue round-trips. Matches the
|
|
34
|
-
* dependency-edge writer's cap: modest enough for GitHub's secondary rate
|
|
35
|
-
* limits while collapsing wall-clock from `sum(round-trips)` toward
|
|
36
|
-
* `sum(round-trips) / concurrency`.
|
|
37
|
-
*/
|
|
17
|
+
/** Kept modest for GitHub's secondary rate limits. */
|
|
38
18
|
const EDGE_CONCURRENCY = 5;
|
|
39
19
|
|
|
40
20
|
/**
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
* This read is the idempotency check: an edge it fails to see is re-POSTed.
|
|
45
|
-
* Reading only the first page would therefore make the writer non-idempotent
|
|
46
|
-
* past the page boundary — the same defect Story #5046 fixed in
|
|
47
|
-
* `blocked-by-add.js`.
|
|
48
|
-
*
|
|
49
|
-
* Returns `[]` on any error so the caller falls back to posting the full
|
|
50
|
-
* set. Worst case is a duplicate POST, which GitHub rejects harmlessly and
|
|
51
|
-
* the per-edge catch absorbs.
|
|
21
|
+
* Paginated to exhaustion: this is the idempotency check, and an unseen edge
|
|
22
|
+
* is re-POSTed. `[]` on error — a duplicate POST is rejected harmlessly.
|
|
52
23
|
*
|
|
53
24
|
* @param {{ gh: object, owner: string, repo: string, issueNumber: number, paginate?: Function }} opts
|
|
54
25
|
* @returns {Promise<number[]>} Database ids of the parent's current children.
|
|
@@ -77,12 +48,6 @@ async function fetchExistingSubIssueIds({
|
|
|
77
48
|
}
|
|
78
49
|
|
|
79
50
|
/**
|
|
80
|
-
* Link a set of child issues to one parent as native sub-issues.
|
|
81
|
-
*
|
|
82
|
-
* For each entry in `childInternalIds`, checks whether the edge already
|
|
83
|
-
* exists and POSTs only the missing ones. Every individual POST failure is
|
|
84
|
-
* caught, logged and counted — the function never throws.
|
|
85
|
-
*
|
|
86
51
|
* @param {{
|
|
87
52
|
* gh: object,
|
|
88
53
|
* owner: string,
|
|
@@ -113,8 +78,7 @@ export async function addSubIssueEdges({
|
|
|
113
78
|
});
|
|
114
79
|
const existingSet = new Set(existing);
|
|
115
80
|
|
|
116
|
-
// Partition up front so
|
|
117
|
-
// concurrent POST dispatch order.
|
|
81
|
+
// Partition up front so `skipped` is independent of dispatch order.
|
|
118
82
|
const missing = ids.filter((id) => !existingSet.has(id));
|
|
119
83
|
const skipped = ids.length - missing.length;
|
|
120
84
|
|
|
@@ -149,24 +113,10 @@ export async function addSubIssueEdges({
|
|
|
149
113
|
}
|
|
150
114
|
|
|
151
115
|
/**
|
|
152
|
-
* Link
|
|
153
|
-
*
|
|
154
|
-
*
|
|
155
|
-
*
|
|
156
|
-
* an operator types); the API wants database ids. Doing the translation here
|
|
157
|
-
* keeps that trap in one place instead of at every call site.
|
|
158
|
-
*
|
|
159
|
-
* `knownInternalIds` short-circuits the translation for children whose
|
|
160
|
-
* database id the caller already has. `createIssue` returns `internalId` in
|
|
161
|
-
* its response, so a cohort this run just created needs no lookup at all —
|
|
162
|
-
* the `getTicket` fan-out that used to run over every child was re-reading
|
|
163
|
-
* issues the same process had created seconds earlier, one round-trip per
|
|
164
|
-
* Story, to recover a field it had already been handed and thrown away.
|
|
165
|
-
* `getTicket` stays for the children a *resumed* run adopted, whose ids came
|
|
166
|
-
* from a listing rather than a create.
|
|
167
|
-
*
|
|
168
|
-
* Never throws: a child whose id cannot be resolved is counted as failed and
|
|
169
|
-
* the remaining edges still go out.
|
|
116
|
+
* Link Stories to a container Epic, translating issue numbers to database ids
|
|
117
|
+
* here so the trap lives in one place. `knownInternalIds` (from
|
|
118
|
+
* `createIssue`) skips the lookup; `getTicket` covers children a resumed run
|
|
119
|
+
* adopted. An unresolvable child counts as failed; the rest still go out.
|
|
170
120
|
*
|
|
171
121
|
* @param {{
|
|
172
122
|
* epicNumber: number,
|
|
@@ -1,26 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* GitHub Provider — SubIssueGateway
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* GraphQL `subIssues` field on an Issue, paginated into a child-number
|
|
6
|
-
* list. Story #5008 removed the write side (`addSubIssue`,
|
|
7
|
-
* `removeSubIssue`) and the `reconcileSubIssueLinks` walker along with the
|
|
8
|
-
* rest of the Epic-hierarchy provider surface — v2 delivery is Story-only,
|
|
9
|
-
* so nothing establishes or repairs parent/child links any more.
|
|
10
|
-
*
|
|
11
|
-
* Extracted from `../github.js` in Story #2462 / Task #2480. The read path
|
|
12
|
-
* still reaches `GitHubProvider` as `_getNativeSubIssues`, and
|
|
13
|
-
* `IssuesGateway` calls it directly through its `getNativeSubIssues` hook.
|
|
14
|
-
*
|
|
15
|
-
* Constructed with `{ ghGraphql, cache, classifyGithubError }`:
|
|
16
|
-
* - `ghGraphql(query, variables, opts)` — bound `_ghGraphql` from the parent.
|
|
17
|
-
* - `cache.primeIfAbsent(ticket)` — bound to the shared cache (native-walk priming).
|
|
18
|
-
*
|
|
19
|
-
* The gateway holds **no** transport state of its own — every call goes
|
|
20
|
-
* through the supplied `ghGraphql` hook, which is the parent provider's
|
|
21
|
-
* `gh api graphql` shim.
|
|
22
|
-
*
|
|
23
|
-
* @see Story #2462 — Split GitHubProvider god class into seven composed gateways.
|
|
2
|
+
* GitHub Provider — SubIssueGateway: the read side of native Sub-Issues (the
|
|
3
|
+
* GraphQL `subIssues` field, paginated into child numbers). Holds no
|
|
4
|
+
* transport state; every call goes through the parent's `ghGraphql` hook.
|
|
24
5
|
*/
|
|
25
6
|
|
|
26
7
|
import { describeGhFailure } from '../../lib/gh-exec.js';
|
|
@@ -33,10 +14,7 @@ import {
|
|
|
33
14
|
import { subIssueNodeToTicket } from './mappers.js';
|
|
34
15
|
import { defaultRetryWarn } from './request-helpers.js';
|
|
35
16
|
|
|
36
|
-
//
|
|
37
|
-
// (e.g. an upstream API regression that never sets `hasNextPage = false`)
|
|
38
|
-
// fails fast instead of looping forever. 50 cursor pages × 100 nodes per
|
|
39
|
-
// page = 5000 sub-issues, well above any realistic Epic.
|
|
17
|
+
// Fail fast if `hasNextPage` never clears; 50 × 100 = 5000 sub-issues.
|
|
40
18
|
const NATIVE_SUB_ISSUE_PAGE_CAP = 50;
|
|
41
19
|
|
|
42
20
|
export class SubIssueGateway {
|
|
@@ -57,11 +35,7 @@ export class SubIssueGateway {
|
|
|
57
35
|
this._classify = classifyGithubError;
|
|
58
36
|
}
|
|
59
37
|
|
|
60
|
-
/**
|
|
61
|
-
* Strategy 1 — native GitHub Sub-Issues via GraphQL. Paginates and seeds
|
|
62
|
-
* the ticket cache via the supplied `cache.primeIfAbsent` hook. Returns
|
|
63
|
-
* `[]` (not throw) when the feature is disabled on this repo.
|
|
64
|
-
*/
|
|
38
|
+
/** Primes the ticket cache; `[]` when the feature is disabled. */
|
|
65
39
|
async getNativeSubIssues(parentNodeId, parentId) {
|
|
66
40
|
const childIds = [];
|
|
67
41
|
let cursor = null;
|
|
@@ -105,11 +79,8 @@ export class SubIssueGateway {
|
|
|
105
79
|
);
|
|
106
80
|
return [];
|
|
107
81
|
}
|
|
108
|
-
//
|
|
109
|
-
//
|
|
110
|
-
// the actionable sentence — the HTTP status, the rate-limit notice — is
|
|
111
|
-
// on stderr. Three identical opaque lines are what made the Epic-rollup
|
|
112
|
-
// incident unreadable until the API was queried by hand (Story #5210).
|
|
82
|
+
// Not `err.message`: on the gh transport that is only `gh exited with
|
|
83
|
+
// code 1`; the HTTP status and rate-limit notice are on stderr.
|
|
113
84
|
Logger.error(
|
|
114
85
|
`[GitHubProvider] sub-issues GraphQL failed (parent #${parentId}, ` +
|
|
115
86
|
`category=${category}): ${describeGhFailure(err)}`,
|