mandrel 2.60.0 → 2.61.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/README.md +10 -10
- package/.agents/agents/story-worker.md +1 -1
- package/.agents/docs/agentrc-reference.json +4 -82
- package/.agents/docs/configuration.md +20 -87
- package/.agents/docs/workflows.md +1 -1
- package/.agents/instructions.md +1 -3
- package/.agents/rules/gherkin-standards.md +4 -0
- package/.agents/schemas/agentrc.schema.json +11 -486
- package/.agents/schemas/story-deliver-terminal.schema.json +10 -0
- package/.agents/schemas/validation-evidence.schema.json +2 -1
- package/.agents/scripts/README.md +14 -14
- package/.agents/scripts/acceptance-eval.js +32 -164
- package/.agents/scripts/agents-bootstrap-github.js +27 -129
- package/.agents/scripts/apply-quality-bootstrap.js +4 -40
- package/.agents/scripts/audit-baselines.js +6 -27
- package/.agents/scripts/audit-labels-bootstrap.js +5 -29
- package/.agents/scripts/audit-to-stories.js +91 -361
- package/.agents/scripts/boot-sweep.js +19 -72
- package/.agents/scripts/bootstrap.js +74 -395
- package/.agents/scripts/ceremony-derive.js +9 -45
- package/.agents/scripts/check-arch-cycles.js +14 -64
- package/.agents/scripts/check-baselines.js +8 -48
- package/.agents/scripts/check-context-budget.js +46 -172
- package/.agents/scripts/check-cyclomatic.js +12 -44
- package/.agents/scripts/check-dead-exports.js +13 -64
- package/.agents/scripts/check-doc-links.js +38 -186
- package/.agents/scripts/check-gherkin-corpus.js +24 -127
- package/.agents/scripts/check-test-temp-hygiene.js +28 -169
- package/.agents/scripts/coverage-capture.js +32 -99
- package/.agents/scripts/deliver-light.js +14 -101
- package/.agents/scripts/deliver-recover.js +6 -42
- package/.agents/scripts/deliver-run.js +36 -133
- package/.agents/scripts/diagnose-friction.js +24 -116
- package/.agents/scripts/drain-pending-cleanup.js +1 -1
- package/.agents/scripts/evidence-gate.js +23 -85
- package/.agents/scripts/file-ci-gap.js +10 -50
- package/.agents/scripts/generate-config-docs.js +30 -170
- package/.agents/scripts/generate-lens-checklists.js +8 -52
- package/.agents/scripts/generate-skills-index.js +14 -112
- package/.agents/scripts/generate-workflows-doc.js +10 -70
- package/.agents/scripts/git-cleanup.js +2 -34
- package/.agents/scripts/lib/Graph.js +24 -81
- package/.agents/scripts/lib/ITicketingProvider.js +47 -143
- package/.agents/scripts/lib/Logger.js +14 -76
- package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
- package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
- package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
- package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
- package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
- package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
- package/.agents/scripts/lib/audit-baselines/read.js +3 -16
- package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
- package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
- package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
- package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
- package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
- package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
- package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
- package/.agents/scripts/lib/audit-suite/findings.js +12 -52
- package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
- package/.agents/scripts/lib/audit-suite/index.js +1 -15
- package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
- package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
- package/.agents/scripts/lib/audit-suite/runner.js +13 -43
- package/.agents/scripts/lib/audit-suite/selector.js +49 -349
- package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
- package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
- package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
- package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
- package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
- package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
- package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
- package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
- package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
- package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
- package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
- package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
- package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
- package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
- package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
- package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
- package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
- package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
- package/.agents/scripts/lib/baseline-loader.js +12 -51
- package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
- package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
- package/.agents/scripts/lib/baselines/components.js +10 -61
- package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
- package/.agents/scripts/lib/baselines/crap-preview-incremental.js +5 -21
- package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
- package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
- package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
- package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
- package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
- package/.agents/scripts/lib/baselines/envelope.js +13 -129
- package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
- package/.agents/scripts/lib/baselines/git-base.js +23 -142
- package/.agents/scripts/lib/baselines/kernel.js +11 -111
- package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
- package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
- package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
- package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
- package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
- package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
- package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
- package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
- package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
- package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
- package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
- package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
- package/.agents/scripts/lib/baselines/path-canon.js +19 -128
- package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
- package/.agents/scripts/lib/baselines/reader.js +14 -107
- package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
- package/.agents/scripts/lib/baselines/scope.js +11 -135
- package/.agents/scripts/lib/baselines/writer.js +16 -149
- package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
- package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
- package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
- package/.agents/scripts/lib/bdd-step-index.js +26 -100
- package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
- package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
- package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
- package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
- package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
- package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
- package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
- package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
- package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
- package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
- package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
- package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
- package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
- package/.agents/scripts/lib/bootstrap/summary.js +1 -8
- package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
- package/.agents/scripts/lib/branch-name-guard.js +4 -23
- package/.agents/scripts/lib/changed-files.js +31 -143
- package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
- package/.agents/scripts/lib/checks/index.js +18 -101
- package/.agents/scripts/lib/checks/loop-health.js +11 -53
- package/.agents/scripts/lib/checks/state.js +16 -91
- package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
- package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
- package/.agents/scripts/lib/child-exec.js +39 -108
- package/.agents/scripts/lib/cli/standard-args.js +9 -116
- package/.agents/scripts/lib/cli-args.js +31 -146
- package/.agents/scripts/lib/cli-usage.js +5 -27
- package/.agents/scripts/lib/cli-utils.js +2 -12
- package/.agents/scripts/lib/close-validation/commands.js +13 -76
- package/.agents/scripts/lib/close-validation/gates.js +92 -331
- package/.agents/scripts/lib/close-validation/process.js +121 -151
- package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
- package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
- package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
- package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
- package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
- package/.agents/scripts/lib/close-validation/runner.js +53 -110
- package/.agents/scripts/lib/command-header.js +6 -28
- package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
- package/.agents/scripts/lib/config/baselines.js +3 -14
- package/.agents/scripts/lib/config/ci.js +8 -38
- package/.agents/scripts/lib/config/commands.js +1 -15
- package/.agents/scripts/lib/config/defaults.js +4 -33
- package/.agents/scripts/lib/config/delivery-routing.js +6 -35
- package/.agents/scripts/lib/config/explain.js +9 -80
- package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
- package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +2 -30
- package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
- package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
- package/.agents/scripts/lib/config/gates/index.js +2 -17
- package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
- package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
- package/.agents/scripts/lib/config/gates/shared.js +4 -64
- package/.agents/scripts/lib/config/github.js +4 -22
- package/.agents/scripts/lib/config/limits.js +4 -57
- package/.agents/scripts/lib/config/paths.js +2 -21
- package/.agents/scripts/lib/config/qa.js +4 -38
- package/.agents/scripts/lib/config/quality.js +76 -432
- package/.agents/scripts/lib/config/runners.js +12 -56
- package/.agents/scripts/lib/config/runtime.js +13 -57
- package/.agents/scripts/lib/config/shared.js +2 -16
- package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
- package/.agents/scripts/lib/config/temp-paths.js +40 -280
- package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
- package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
- package/.agents/scripts/lib/config-resolver.js +10 -52
- package/.agents/scripts/lib/config-schema-shared.js +1 -4
- package/.agents/scripts/lib/config-settings-schema-delivery.js +12 -294
- package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
- package/.agents/scripts/lib/config-settings-schema.js +37 -274
- package/.agents/scripts/lib/coverage-baseline.js +20 -110
- package/.agents/scripts/lib/coverage-capture-fullscope.js +12 -37
- package/.agents/scripts/lib/coverage-capture-incremental.js +12 -43
- package/.agents/scripts/lib/coverage-capture-usage.js +4 -24
- package/.agents/scripts/lib/coverage-capture.js +99 -224
- package/.agents/scripts/lib/coverage-utils.js +14 -79
- package/.agents/scripts/lib/cpu-pool.js +17 -123
- package/.agents/scripts/lib/crap-baseline-join.js +16 -88
- package/.agents/scripts/lib/crap-coordinates.js +6 -25
- package/.agents/scripts/lib/crap-engine.js +40 -153
- package/.agents/scripts/lib/crap-method-identity.js +16 -78
- package/.agents/scripts/lib/crap-utils.js +31 -155
- package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
- package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
- package/.agents/scripts/lib/dead-exports-knip.js +18 -56
- package/.agents/scripts/lib/dead-exports-mode.js +5 -24
- package/.agents/scripts/lib/degraded-mode.js +3 -26
- package/.agents/scripts/lib/dependency-parser.js +8 -40
- package/.agents/scripts/lib/dependency-version.js +13 -35
- package/.agents/scripts/lib/detect-package-manager.js +6 -36
- package/.agents/scripts/lib/doc-tiers.js +22 -126
- package/.agents/scripts/lib/duplicate-search.js +8 -72
- package/.agents/scripts/lib/env-loader.js +5 -27
- package/.agents/scripts/lib/error-redactor.js +6 -31
- package/.agents/scripts/lib/errors/index.js +2 -22
- package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
- package/.agents/scripts/lib/escomplex-kernel.js +21 -123
- package/.agents/scripts/lib/feedback-loop/graduator-core.js +93 -419
- package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
- package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -151
- package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
- package/.agents/scripts/lib/findings/classify-finding.js +14 -69
- package/.agents/scripts/lib/findings/promote-finding.js +14 -112
- package/.agents/scripts/lib/findings/provenance-field.js +11 -52
- package/.agents/scripts/lib/findings/route-finding.js +37 -255
- package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
- package/.agents/scripts/lib/findings/severity.js +18 -104
- package/.agents/scripts/lib/format-generated-json.js +12 -44
- package/.agents/scripts/lib/full-suite-lock.js +160 -429
- package/.agents/scripts/lib/full-suite-queue.js +213 -0
- package/.agents/scripts/lib/gates/baseline-store.js +5 -9
- package/.agents/scripts/lib/gates/friction.js +1 -3
- package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
- package/.agents/scripts/lib/gh-exec.js +31 -259
- package/.agents/scripts/lib/git/cached-fetch.js +9 -52
- package/.agents/scripts/lib/git/sync-from-base.js +15 -107
- package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
- package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
- package/.agents/scripts/lib/git-utils.js +37 -161
- package/.agents/scripts/lib/github/framework-repo.js +8 -71
- package/.agents/scripts/lib/github-url.js +2 -17
- package/.agents/scripts/lib/import-graph.js +11 -38
- package/.agents/scripts/lib/install-cmd-parser.js +4 -13
- package/.agents/scripts/lib/json-utils.js +3 -18
- package/.agents/scripts/lib/label-constants.js +16 -111
- package/.agents/scripts/lib/label-taxonomy.js +4 -30
- package/.agents/scripts/lib/maintainability-engine.js +12 -80
- package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
- package/.agents/scripts/lib/maintainability-utils.js +16 -92
- package/.agents/scripts/lib/mandrel-catalog.js +12 -70
- package/.agents/scripts/lib/notifications/notifier.js +13 -38
- package/.agents/scripts/lib/npm-scripts.js +4 -23
- package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
- package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
- package/.agents/scripts/lib/observability/signal-validator.js +5 -37
- package/.agents/scripts/lib/observability/signals-writer.js +11 -121
- package/.agents/scripts/lib/observability/source-classifier.js +21 -203
- package/.agents/scripts/lib/observability/terse-result.js +14 -47
- package/.agents/scripts/lib/onboard/init-tail.js +13 -74
- package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
- package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
- package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
- package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
- package/.agents/scripts/lib/orchestration/ceremony-routing.js +5 -75
- package/.agents/scripts/lib/orchestration/change-set.js +7 -36
- package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
- package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
- package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
- package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
- package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
- package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
- package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
- package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
- package/.agents/scripts/lib/orchestration/check-state.js +92 -0
- package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
- package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +42 -189
- package/.agents/scripts/lib/orchestration/code-review.js +24 -128
- package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
- package/.agents/scripts/lib/orchestration/complexity-gate.js +42 -214
- package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
- package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
- package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
- package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
- package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
- package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
- package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
- package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
- package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
- package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
- package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
- package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
- package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
- package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
- package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
- package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
- package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
- package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
- package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
- package/.agents/scripts/lib/orchestration/light-suitability.js +26 -231
- package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
- package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
- package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
- package/.agents/scripts/lib/orchestration/plan-context.js +52 -303
- package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
- package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
- package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
- package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
- package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
- package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
- package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +14 -78
- package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
- package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
- package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
- package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
- package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
- package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
- package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +49 -248
- package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
- package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +85 -368
- package/.agents/scripts/lib/orchestration/plan-persist/summary.js +8 -38
- package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +30 -190
- package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
- package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
- package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
- package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
- package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
- package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
- package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
- package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
- package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
- package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
- package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
- package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
- package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
- package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
- package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
- package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
- package/.agents/scripts/lib/orchestration/review-depth.js +12 -94
- package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
- package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
- package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
- package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
- package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
- package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
- package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
- package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
- package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
- package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
- package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
- package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
- package/.agents/scripts/lib/orchestration/run-epilogue.js +40 -199
- package/.agents/scripts/lib/orchestration/run-scoped-config.js +13 -81
- package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
- package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
- package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
- package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +83 -239
- package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +18 -80
- package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
- package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
- package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +136 -486
- package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
- package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +9 -50
- package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
- package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
- package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
- package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
- package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
- package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
- package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
- package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
- package/.agents/scripts/lib/orchestration/single-story-close/runner.js +110 -290
- package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
- package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
- package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
- package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
- package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
- package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
- package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
- package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
- package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -201
- package/.agents/scripts/lib/orchestration/story-follow-ups.js +43 -245
- package/.agents/scripts/lib/orchestration/story-init-envelope.js +4 -23
- package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
- package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
- package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -126
- package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
- package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
- package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
- package/.agents/scripts/lib/orchestration/ticket-validator.js +39 -181
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -250
- package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
- package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
- package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
- package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
- package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
- package/.agents/scripts/lib/path-security.js +3 -6
- package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
- package/.agents/scripts/lib/preflight-runner.js +13 -69
- package/.agents/scripts/lib/process-group.js +143 -0
- package/.agents/scripts/lib/project-root.js +2 -8
- package/.agents/scripts/lib/provider-factory.js +2 -25
- package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
- package/.agents/scripts/lib/qa/qa-session.js +15 -69
- package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
- package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
- package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
- package/.agents/scripts/lib/reserved-test-ids.js +9 -47
- package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
- package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
- package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
- package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
- package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
- package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
- package/.agents/scripts/lib/signals/detectors/common.js +12 -38
- package/.agents/scripts/lib/signals/index.js +2 -19
- package/.agents/scripts/lib/signals/schema.js +14 -109
- package/.agents/scripts/lib/signals/write.js +2 -11
- package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
- package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
- package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
- package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
- package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
- package/.agents/scripts/lib/single-story-sweep.js +14 -97
- package/.agents/scripts/lib/skills/parse-skill.js +13 -59
- package/.agents/scripts/lib/skills/skills-index.js +8 -29
- package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
- package/.agents/scripts/lib/source-extensions.js +11 -42
- package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
- package/.agents/scripts/lib/stdio-flush.js +9 -36
- package/.agents/scripts/lib/story-adjacency.js +8 -40
- package/.agents/scripts/lib/story-body/body-format-lints.js +22 -83
- package/.agents/scripts/lib/story-body/footer-block.js +11 -44
- package/.agents/scripts/lib/story-body/story-body.js +83 -358
- package/.agents/scripts/lib/temp-retention.js +42 -143
- package/.agents/scripts/lib/templates/decomposer-prompts.js +11 -65
- package/.agents/scripts/lib/test-env.js +12 -65
- package/.agents/scripts/lib/test-run-credit.js +10 -65
- package/.agents/scripts/lib/test-runner-contract.js +19 -74
- package/.agents/scripts/lib/test-temp.js +38 -184
- package/.agents/scripts/lib/test-tiers.js +12 -96
- package/.agents/scripts/lib/ticket-body-sections.js +21 -96
- package/.agents/scripts/lib/transpile.js +15 -74
- package/.agents/scripts/lib/util/concurrent-map.js +6 -25
- package/.agents/scripts/lib/util/parse-id-list.js +8 -34
- package/.agents/scripts/lib/util/poll-loop.js +8 -28
- package/.agents/scripts/lib/util/with-timeout.js +2 -11
- package/.agents/scripts/lib/validation-evidence.js +21 -96
- package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
- package/.agents/scripts/lib/wave-runner/live-probe.js +53 -221
- package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
- package/.agents/scripts/lib/workers/crap-worker.js +11 -64
- package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
- package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
- package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
- package/.agents/scripts/lib/workflow-closure.js +22 -105
- package/.agents/scripts/lib/workspace-provisioner.js +16 -54
- package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
- package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
- package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
- package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
- package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
- package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
- package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
- package/.agents/scripts/lib/worktree-manager.js +15 -40
- package/.agents/scripts/lint-issue-body.js +12 -68
- package/.agents/scripts/mandrel-update-preflight.js +10 -70
- package/.agents/scripts/merge-baseline.js +30 -104
- package/.agents/scripts/nav-registry-diff.js +22 -108
- package/.agents/scripts/notify.js +12 -69
- package/.agents/scripts/plan-context.js +27 -111
- package/.agents/scripts/plan-critics.js +12 -66
- package/.agents/scripts/plan-persist.js +31 -148
- package/.agents/scripts/plan-run-epilogue.js +11 -37
- package/.agents/scripts/pr-watch-with-update.js +76 -267
- package/.agents/scripts/providers/github/auth.js +3 -8
- package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
- package/.agents/scripts/providers/github/board-add.js +5 -21
- package/.agents/scripts/providers/github/branch-protection.js +11 -43
- package/.agents/scripts/providers/github/cache.js +2 -14
- package/.agents/scripts/providers/github/comments.js +7 -40
- package/.agents/scripts/providers/github/compose.js +3 -19
- package/.agents/scripts/providers/github/errors.js +22 -125
- package/.agents/scripts/providers/github/issues.js +31 -123
- package/.agents/scripts/providers/github/labels.js +24 -124
- package/.agents/scripts/providers/github/mappers.js +5 -27
- package/.agents/scripts/providers/github/merge-methods.js +3 -22
- package/.agents/scripts/providers/github/project-board.js +2 -17
- package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
- package/.agents/scripts/providers/github/request-helpers.js +5 -32
- package/.agents/scripts/providers/github/search-budget.js +9 -39
- package/.agents/scripts/providers/github/search-query.js +5 -26
- package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
- package/.agents/scripts/providers/github/sub-issues.js +7 -36
- package/.agents/scripts/providers/github/tickets.js +32 -134
- package/.agents/scripts/providers/github.js +18 -59
- package/.agents/scripts/prune-plan-run-labels.js +12 -46
- package/.agents/scripts/quality-preview.js +35 -220
- package/.agents/scripts/resolve-doc-tiers.js +3 -26
- package/.agents/scripts/resolve-stories.js +16 -67
- package/.agents/scripts/resync-status-column.js +6 -25
- package/.agents/scripts/run-tests.js +29 -104
- package/.agents/scripts/single-story-close.js +23 -135
- package/.agents/scripts/single-story-confirm-merge.js +32 -139
- package/.agents/scripts/single-story-init.js +47 -209
- package/.agents/scripts/stories-wave-tick.js +102 -472
- package/.agents/scripts/sync-agentrc.js +3 -21
- package/.agents/scripts/sync-claude-agents.js +9 -55
- package/.agents/scripts/sync-claude-commands.js +20 -110
- package/.agents/scripts/test-wrapper.js +6 -43
- package/.agents/scripts/update-coverage-baseline.js +5 -22
- package/.agents/scripts/update-crap-baseline.js +7 -30
- package/.agents/scripts/update-duplication-baseline.js +16 -92
- package/.agents/scripts/update-maintainability-baseline.js +8 -62
- package/.agents/scripts/update-ticket-state.js +1 -7
- package/.agents/scripts/validate-skills.js +6 -26
- package/.agents/templates/agent-protocol.md +2 -2
- package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
- package/.agents/workflows/audit-accessibility.md +4 -7
- package/.agents/workflows/audit-adrs.md +3 -6
- package/.agents/workflows/audit-architecture.md +3 -11
- package/.agents/workflows/audit-baselines.md +6 -9
- package/.agents/workflows/audit-clean-code.md +8 -12
- package/.agents/workflows/audit-data-model.md +3 -7
- package/.agents/workflows/audit-dependencies.md +4 -7
- package/.agents/workflows/audit-devops.md +4 -8
- package/.agents/workflows/audit-documentation.md +1 -4
- package/.agents/workflows/audit-mobile.md +4 -7
- package/.agents/workflows/audit-navigability.md +3 -6
- package/.agents/workflows/audit-performance.md +2 -4
- package/.agents/workflows/audit-privacy.md +4 -7
- package/.agents/workflows/audit-quality.md +4 -7
- package/.agents/workflows/audit-security.md +4 -7
- package/.agents/workflows/audit-seo.md +4 -7
- package/.agents/workflows/audit-sre.md +4 -7
- package/.agents/workflows/audit-to-stories.md +17 -30
- package/.agents/workflows/audit-ux-ui.md +4 -7
- package/.agents/workflows/helpers/audit-lens-core.md +1 -1
- package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
- package/.agents/workflows/helpers/deliver-digest.md +6 -4
- package/.agents/workflows/helpers/deliver-reference.md +114 -188
- package/.agents/workflows/helpers/deliver-story-reference.md +189 -533
- package/.agents/workflows/helpers/plan-reference.md +86 -139
- package/.agents/workflows/helpers/qa-core.md +12 -0
- package/.agents/workflows/memory-consolidate.md +1 -1
- package/.agents/workflows/qa-assist.md +27 -71
- package/.agents/workflows/qa-explore.md +19 -59
- package/.agents/workflows/qa-run.md +11 -33
- package/README.md +1 -1
- package/bin/mandrel.js +5 -46
- package/bin/postinstall.js +18 -107
- package/docs/CHANGELOG.md +25 -0
- package/lib/cli/doctor.js +11 -71
- package/lib/cli/init.js +26 -165
- package/lib/cli/migrate.js +5 -64
- package/lib/cli/registry.js +84 -467
- package/lib/cli/sync-agents.js +4 -64
- package/lib/cli/sync-commands.js +11 -64
- package/lib/cli/sync.js +34 -213
- package/lib/cli/uninstall.js +40 -219
- package/lib/cli/update.js +105 -661
- package/lib/cli/version-check.js +8 -72
- package/lib/cli/version-helpers.js +14 -87
- package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
- package/lib/migrations/index.js +15 -92
- package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
- package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
- package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
- package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
- package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
- package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
- package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
- package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
- package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +2 -21
- package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
- package/package.json +16 -14
- package/.agents/docs/SDLC.md +0 -590
- package/.agents/docs/quality-gates.md +0 -1183
- package/.agents/rules/known-tooling-behavior.md +0 -200
- package/.agents/rules/orchestration-error-handling.md +0 -61
- package/.agents/rules/test-seams.md +0 -59
- package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
- package/.agents/schemas/baselines/lint.schema.json +0 -47
- package/.agents/scripts/check-action-pinning.js +0 -260
- package/.agents/scripts/check-audit-attribution.js +0 -302
- package/.agents/scripts/check-baseline-drift.js +0 -211
- package/.agents/scripts/check-baseline-scope.js +0 -362
- package/.agents/scripts/check-generated-validator.js +0 -202
- package/.agents/scripts/check-knip-entries.js +0 -159
- package/.agents/scripts/check-lifecycle-lint.js +0 -294
- package/.agents/scripts/check-pinned-override-notes.js +0 -102
- package/.agents/scripts/check-schema-references.js +0 -368
- package/.agents/scripts/check-test-portability.js +0 -512
- package/.agents/scripts/check-workflow-citations.js +0 -218
- package/.agents/scripts/check-workflow-cli-lint.js +0 -299
- package/.agents/scripts/check-workflow-timeouts.js +0 -291
- package/.agents/scripts/install-matrix-assert.js +0 -326
- package/.agents/scripts/lib/audit-advisories.js +0 -195
- package/.agents/scripts/lib/audit-attribution.js +0 -134
- package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
- package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
- package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
- package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
- package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
- package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
- package/.agents/scripts/lib/c8-cli-path.js +0 -21
- package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
- package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
- package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
- package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
- package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
- package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
- package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
- package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
- package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
- package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
- package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
- package/.agents/scripts/lib/fs-walk.js +0 -52
- package/.agents/scripts/lib/knip-config-resolver.js +0 -181
- package/.agents/scripts/lib/knip-entry-sync.js +0 -452
- package/.agents/scripts/lib/pinned-override-notes.js +0 -88
- package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
- package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
- package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
- package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
- package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
- package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
- package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
- package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
- package/.agents/scripts/lib/test-isolate/runner.js +0 -483
- package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
- package/.agents/scripts/lib/test-profile/render-report.js +0 -45
- package/.agents/scripts/lint-label-vocabulary.js +0 -214
- package/.agents/scripts/post-structured-comment.js +0 -127
- package/.agents/scripts/provision-git-hooks.js +0 -85
- package/.agents/scripts/prune-baseline-orphans.js +0 -181
- package/.agents/scripts/run-coverage.js +0 -197
- package/.agents/scripts/run-lint.js +0 -133
- package/.agents/scripts/run-test-profile.js +0 -129
- package/.agents/scripts/run-verify.js +0 -125
- package/.agents/scripts/test-isolate.js +0 -55
- package/.agents/scripts/update-dead-exports-baseline.js +0 -321
|
@@ -1,13 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Graph.js
|
|
3
|
-
* Extracted mathematical DAG logic for topological sorting, cycle detection,
|
|
4
|
-
* transitive reduction, and auto-serialization of concurrent task overlaps.
|
|
5
|
-
*/
|
|
1
|
+
/** DAG utilities: cycle detection, layering, reduction, topological sort. */
|
|
6
2
|
|
|
7
|
-
/**
|
|
8
|
-
* Builds an adjacency list from the manifest tasks.
|
|
9
|
-
* Returns { adjacency: Map<id, id[]>, taskMap: Map<id, task> }
|
|
10
|
-
*/
|
|
3
|
+
/** Returns { adjacency: Map<id, id[]>, taskMap: Map<id, task> }. */
|
|
11
4
|
export function buildGraph(tasks) {
|
|
12
5
|
const adjacency = new Map();
|
|
13
6
|
const taskMap = new Map();
|
|
@@ -20,10 +13,7 @@ export function buildGraph(tasks) {
|
|
|
20
13
|
return { adjacency, taskMap };
|
|
21
14
|
}
|
|
22
15
|
|
|
23
|
-
/**
|
|
24
|
-
* Detects cycles using DFS. Returns the first cycle found as an array of ids,
|
|
25
|
-
* or null if the graph is acyclic.
|
|
26
|
-
*/
|
|
16
|
+
/** The first cycle found as an array of ids, or null. */
|
|
27
17
|
export function detectCycle(adjacency) {
|
|
28
18
|
const WHITE = 0,
|
|
29
19
|
_GRAY = 1,
|
|
@@ -50,7 +40,7 @@ function dfsVisit(u, adjacency, color, parent) {
|
|
|
50
40
|
|
|
51
41
|
for (const v of adjacency.get(u) || []) {
|
|
52
42
|
if (color.get(v) === 1) {
|
|
53
|
-
// Back edge
|
|
43
|
+
// Back edge: reconstruct the cycle.
|
|
54
44
|
const cycle = [v, u];
|
|
55
45
|
let cur = u;
|
|
56
46
|
while (parent.has(cur) && parent.get(cur) !== v) {
|
|
@@ -70,10 +60,7 @@ function dfsVisit(u, adjacency, color, parent) {
|
|
|
70
60
|
return null;
|
|
71
61
|
}
|
|
72
62
|
|
|
73
|
-
/**
|
|
74
|
-
* Assigns each task a layer (depth from root). Root tasks (no dependencies)
|
|
75
|
-
* are layer 0. Returns Map<id, layer>.
|
|
76
|
-
*/
|
|
63
|
+
/** Depth from root (roots are layer 0) as Map<id, layer>. */
|
|
77
64
|
export function assignLayers(adjacency) {
|
|
78
65
|
const layers = new Map();
|
|
79
66
|
const memo = new Map();
|
|
@@ -101,36 +88,18 @@ export function assignLayers(adjacency) {
|
|
|
101
88
|
}
|
|
102
89
|
|
|
103
90
|
/**
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
* Removes edge (u→v) iff some *other* direct dependency w of u satisfies
|
|
107
|
-
* v ∈ reach(w) — i.e. v is reachable from u via a path of length > 1 that
|
|
108
|
-
* does not use the edge (u→v) itself.
|
|
91
|
+
* Remove edge (u→v) iff another direct dependency of u already reaches v.
|
|
109
92
|
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
* check is then O(1) (`reach(w).has(v)`), making the overall reduction
|
|
115
|
-
* O(V+E) on top of the (amortized) cost of producing `reachable` once.
|
|
116
|
-
*
|
|
117
|
-
* Single-arg form (back-compat): when `reachable` is omitted we compute
|
|
118
|
-
* it locally via `computeReachability(adjacency)` so the function stays
|
|
119
|
-
* a drop-in replacement for the historical single-argument signature.
|
|
120
|
-
* Output is byte-identical between the two forms.
|
|
121
|
-
*
|
|
122
|
-
* @param {Map<*, *[]>} adjacency Dependency map (node → deps[]).
|
|
123
|
-
* @param {Map<*, Set<*>>} [reachable] Optional pre-computed reachability
|
|
124
|
-
* matrix matching `adjacency`. When supplied it MUST cover every node
|
|
125
|
-
* in `adjacency` — passing a partial map will silently corrupt output.
|
|
126
|
-
* @returns {Map<*, *[]>} Reduced adjacency map.
|
|
93
|
+
* @param {Map<*, *[]>} adjacency node → deps[].
|
|
94
|
+
* @param {Map<*, Set<*>>} [reachable] Precomputed reachability; when given it
|
|
95
|
+
* MUST cover every node, or output is silently corrupt.
|
|
96
|
+
* @returns {Map<*, *[]>}
|
|
127
97
|
*/
|
|
128
98
|
export function transitiveReduction(adjacency, reachable) {
|
|
129
99
|
const reach = reachable ?? computeReachability(adjacency);
|
|
130
100
|
const result = new Map();
|
|
131
101
|
|
|
132
102
|
for (const [node, deps] of adjacency.entries()) {
|
|
133
|
-
// Early-return: nodes with zero or one dependency cannot have redundant edges
|
|
134
103
|
if (deps.length <= 1) {
|
|
135
104
|
result.set(node, [...deps]);
|
|
136
105
|
continue;
|
|
@@ -138,8 +107,6 @@ export function transitiveReduction(adjacency, reachable) {
|
|
|
138
107
|
|
|
139
108
|
const kept = [];
|
|
140
109
|
for (const dep of deps) {
|
|
141
|
-
// Edge (node → dep) is redundant iff some other direct dep `other`
|
|
142
|
-
// of `node` already reaches `dep` transitively.
|
|
143
110
|
let isRedundant = false;
|
|
144
111
|
for (const other of deps) {
|
|
145
112
|
if (other === dep) continue;
|
|
@@ -156,12 +123,8 @@ export function transitiveReduction(adjacency, reachable) {
|
|
|
156
123
|
return result;
|
|
157
124
|
}
|
|
158
125
|
|
|
159
|
-
/**
|
|
160
|
-
* Computes which Chat Sessions each Chat Session depends on.
|
|
161
|
-
* Returns a Map<chatNumber, chatNumber[]>.
|
|
162
|
-
*/
|
|
126
|
+
/** Returns a transitively reduced Map<chatNumber, chatNumber[]>. */
|
|
163
127
|
export function computeChatDependencies(chatSessions, _adjacency) {
|
|
164
|
-
// Build a reverse lookup: taskId → chatNumber
|
|
165
128
|
const taskToChat = new Map();
|
|
166
129
|
for (const session of chatSessions) {
|
|
167
130
|
for (const task of session.tasks) {
|
|
@@ -186,22 +149,16 @@ export function computeChatDependencies(chatSessions, _adjacency) {
|
|
|
186
149
|
);
|
|
187
150
|
}
|
|
188
151
|
|
|
189
|
-
// Apply transitive reduction to chat-level dependencies
|
|
190
152
|
return transitiveReduction(chatDeps);
|
|
191
153
|
}
|
|
192
154
|
|
|
193
|
-
/**
|
|
194
|
-
* Computes the transitive closure (reachability matrix) for the DAG.
|
|
195
|
-
* Returns a Map<id, Set<id>> where each key maps to a set of all tasks it can reach.
|
|
196
|
-
*/
|
|
155
|
+
/** Transitive closure as Map<id, Set<id>>, by memoized DFS: O(V·(V+E)). */
|
|
197
156
|
export function computeReachability(adjacency) {
|
|
198
|
-
// Memoized DFS: each node's reachable set is computed once and cached.
|
|
199
|
-
// Complexity: O(V·(V+E)) — avoids the O(N³) Floyd-Warshall triple loop.
|
|
200
157
|
const memo = new Map();
|
|
201
158
|
|
|
202
159
|
function reach(id) {
|
|
203
160
|
if (memo.has(id)) return memo.get(id);
|
|
204
|
-
//
|
|
161
|
+
// Placeholder first, so a cycle cannot recurse forever.
|
|
205
162
|
const set = new Set();
|
|
206
163
|
memo.set(id, set);
|
|
207
164
|
for (const neighbour of adjacency.get(id) || []) {
|
|
@@ -221,17 +178,14 @@ export function computeReachability(adjacency) {
|
|
|
221
178
|
}
|
|
222
179
|
|
|
223
180
|
/**
|
|
224
|
-
*
|
|
225
|
-
* Returns tasks ordered such that all dependencies precede their dependents.
|
|
226
|
-
* Deterministic: ties are broken by task ID (ascending) for stable output.
|
|
181
|
+
* Kahn's algorithm; ties break by ascending id for stable output.
|
|
227
182
|
*
|
|
228
|
-
* @param {Map<number, number[]>} adjacency
|
|
229
|
-
* @param {Map<number, object>} taskMap
|
|
230
|
-
* @returns {object[]}
|
|
231
|
-
* @throws {Error}
|
|
183
|
+
* @param {Map<number, number[]>} adjacency id → blockedBy[].
|
|
184
|
+
* @param {Map<number, object>} taskMap
|
|
185
|
+
* @returns {object[]}
|
|
186
|
+
* @throws {Error} On a cycle (run `detectCycle` first).
|
|
232
187
|
*/
|
|
233
188
|
export function topologicalSort(adjacency, taskMap) {
|
|
234
|
-
// Pre-compute reverse adjacency and in-degree for O(V+E)
|
|
235
189
|
const inDegree = new Map();
|
|
236
190
|
const reverseAdj = new Map();
|
|
237
191
|
|
|
@@ -250,7 +204,6 @@ export function topologicalSort(adjacency, taskMap) {
|
|
|
250
204
|
inDegree.set(nodeId, activeDeps);
|
|
251
205
|
}
|
|
252
206
|
|
|
253
|
-
// Seed queue with zero-in-degree nodes (tasks with no active dependencies), sorted by id for determinism
|
|
254
207
|
const queue = [...inDegree.entries()]
|
|
255
208
|
.filter(([, deg]) => deg === 0)
|
|
256
209
|
.map(([id]) => id)
|
|
@@ -259,17 +212,15 @@ export function topologicalSort(adjacency, taskMap) {
|
|
|
259
212
|
const sorted = [];
|
|
260
213
|
|
|
261
214
|
while (queue.length > 0) {
|
|
262
|
-
//
|
|
215
|
+
// The queue is kept sorted, so this is the smallest id.
|
|
263
216
|
const id = queue.shift();
|
|
264
217
|
sorted.push(taskMap.get(id));
|
|
265
218
|
|
|
266
|
-
// Decrement in-degree for dependents using pre-computed reverse map
|
|
267
219
|
for (const dependent of reverseAdj.get(id) ?? []) {
|
|
268
220
|
const newDeg = (inDegree.get(dependent) ?? 0) - 1;
|
|
269
221
|
inDegree.set(dependent, newDeg);
|
|
270
222
|
if (newDeg === 0) {
|
|
271
|
-
// Binary insertion
|
|
272
|
-
// instead of re-sorting the entire queue each iteration.
|
|
223
|
+
// Binary insertion keeps the queue sorted without a re-sort.
|
|
273
224
|
let lo = 0,
|
|
274
225
|
hi = queue.length;
|
|
275
226
|
while (lo < hi) {
|
|
@@ -292,18 +243,11 @@ export function topologicalSort(adjacency, taskMap) {
|
|
|
292
243
|
}
|
|
293
244
|
|
|
294
245
|
/**
|
|
295
|
-
*
|
|
296
|
-
*
|
|
297
|
-
* A wave contains all tasks whose dependencies are fully satisfied by
|
|
298
|
-
* previously completed waves. Tasks within the same wave can run concurrently
|
|
299
|
-
* (subject to focus-area serialization in the Dispatcher).
|
|
300
|
-
*
|
|
301
|
-
* Uses `assignLayers` to compute depth, then groups by layer value.
|
|
302
|
-
* The returned array is sorted by wave index (wave 0 = roots).
|
|
246
|
+
* Group tasks by layer; each wave's dependencies are all in earlier waves.
|
|
303
247
|
*
|
|
304
|
-
* @param {Map<number, number[]>} adjacency
|
|
305
|
-
* @param {Map<number, object>} taskMap
|
|
306
|
-
* @returns {object[][]}
|
|
248
|
+
* @param {Map<number, number[]>} adjacency id → blockedBy[].
|
|
249
|
+
* @param {Map<number, object>} taskMap
|
|
250
|
+
* @returns {object[][]}
|
|
307
251
|
*/
|
|
308
252
|
export function computeWaves(adjacency, taskMap) {
|
|
309
253
|
const layers = assignLayers(adjacency);
|
|
@@ -314,7 +258,6 @@ export function computeWaves(adjacency, taskMap) {
|
|
|
314
258
|
waveMap.get(layer).push(taskMap.get(id));
|
|
315
259
|
}
|
|
316
260
|
|
|
317
|
-
// Sort waves by layer, sort tasks within each wave by id for determinism
|
|
318
261
|
const maxLayer = Math.max(...waveMap.keys());
|
|
319
262
|
const waves = [];
|
|
320
263
|
for (let i = 0; i <= maxLayer; i++) {
|
|
@@ -1,28 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* through this interface. Concrete implementations (e.g., `providers/github.js`)
|
|
6
|
-
* extend this class and override every method.
|
|
7
|
-
*
|
|
8
|
-
* Unoverridden methods throw `Error('Not implemented: <method>')` to enforce
|
|
9
|
-
* the contract at runtime rather than silently returning `undefined`.
|
|
10
|
-
*
|
|
11
|
-
* @see docs/architecture.md — Provider Abstraction Layer
|
|
12
|
-
* @see docs/v5-implementation-plan.md Sprint 1A
|
|
2
|
+
* Abstract ticketing provider. Implementations (e.g. `providers/github.js`)
|
|
3
|
+
* override every method; unoverridden ones throw rather than return
|
|
4
|
+
* `undefined`.
|
|
13
5
|
*/
|
|
14
6
|
|
|
15
7
|
export class ITicketingProvider {
|
|
16
|
-
//
|
|
17
|
-
// Read Operations
|
|
18
|
-
// ---------------------------------------------------------------------------
|
|
8
|
+
// Reads
|
|
19
9
|
|
|
20
10
|
/**
|
|
21
|
-
*
|
|
22
|
-
* (ideation sections plus the folded Tech Spec / Acceptance Table
|
|
23
|
-
* managed sections, Story #4324).
|
|
24
|
-
*
|
|
25
|
-
* @param {number} epicId - GitHub Issue number of the Epic.
|
|
11
|
+
* @param {number} epicId
|
|
26
12
|
* @returns {Promise<{
|
|
27
13
|
* id: number,
|
|
28
14
|
* title: string,
|
|
@@ -34,10 +20,8 @@ export class ITicketingProvider {
|
|
|
34
20
|
throw new Error('Not implemented: getEpic');
|
|
35
21
|
}
|
|
36
22
|
/**
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
* @param {number} epicId - GitHub Issue number of the Epic.
|
|
40
|
-
* @param {{ label?: string, state?: string }} [filters={}] - Filter criteria.
|
|
23
|
+
* @param {number} epicId
|
|
24
|
+
* @param {{ label?: string, state?: string }} [filters={}]
|
|
41
25
|
* @returns {Promise<Array<{
|
|
42
26
|
* id: number,
|
|
43
27
|
* title: string,
|
|
@@ -50,9 +34,7 @@ export class ITicketingProvider {
|
|
|
50
34
|
}
|
|
51
35
|
|
|
52
36
|
/**
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
* @param {number} parentId - GitHub Issue number of the parent.
|
|
37
|
+
* @param {number} parentId
|
|
56
38
|
* @returns {Promise<Array<{
|
|
57
39
|
* id: number,
|
|
58
40
|
* title: string,
|
|
@@ -65,9 +47,7 @@ export class ITicketingProvider {
|
|
|
65
47
|
}
|
|
66
48
|
|
|
67
49
|
/**
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
* @param {number} ticketId - GitHub Issue number.
|
|
50
|
+
* @param {number} ticketId
|
|
71
51
|
* @returns {Promise<{
|
|
72
52
|
* id: number,
|
|
73
53
|
* title: string,
|
|
@@ -82,41 +62,19 @@ export class ITicketingProvider {
|
|
|
82
62
|
}
|
|
83
63
|
|
|
84
64
|
/**
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
* served from cache instead of issuing a REST round-trip.
|
|
88
|
-
*
|
|
89
|
-
* Default no-op: providers without a cache (e.g. the manual adapter or
|
|
90
|
-
* test stubs) need not override. Call sites can therefore invoke
|
|
91
|
-
* `provider.primeTicketCache(tickets)` unconditionally without an
|
|
92
|
-
* `instanceof` / `typeof === 'function'` capability check.
|
|
65
|
+
* Seed the ticket cache so later `getTicket` calls skip a round-trip. A
|
|
66
|
+
* no-op by default, so callers need no capability check.
|
|
93
67
|
*
|
|
94
68
|
* @param {Array<{ id: number }>} _tickets
|
|
95
69
|
* @returns {void}
|
|
96
70
|
*/
|
|
97
|
-
primeTicketCache(_tickets) {
|
|
98
|
-
// Intentional no-op. Concrete providers that maintain a cache override.
|
|
99
|
-
}
|
|
71
|
+
primeTicketCache(_tickets) {}
|
|
100
72
|
|
|
101
73
|
/**
|
|
102
|
-
* List
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
* other read on this interface does — in particular `id` is the **issue
|
|
107
|
-
* number**, not the backend's internal database id.
|
|
108
|
-
*
|
|
109
|
-
* That single rule is the whole reason the method exists. The raw REST
|
|
110
|
-
* payload names the issue number `number` and the database id `id`, so a
|
|
111
|
-
* consumer handed either shape wrote `number ?? id` and appeared to cope —
|
|
112
|
-
* while silently addressing issues by database id on the mapped shape,
|
|
113
|
-
* because there `id` is already the number and the fallback never fires.
|
|
114
|
-
* A declared shape removes the choice rather than documenting it.
|
|
115
|
-
*
|
|
116
|
-
* `state` selects `open` (default), `closed` or `all`. Implementations MUST
|
|
117
|
-
* honour it: a caller asking for `all` is asking a question — "did this
|
|
118
|
-
* child reopen?" — that an open-only listing answers wrongly rather than
|
|
119
|
-
* partially.
|
|
74
|
+
* List tickets carrying `labels` in the mapped shape: `id` MUST be the issue
|
|
75
|
+
* number, never the backend database id (a raw-vs-mapped `number ?? id`
|
|
76
|
+
* fallback silently addresses the wrong issue). `state` (default `open`)
|
|
77
|
+
* MUST be honoured.
|
|
120
78
|
*
|
|
121
79
|
* @param {{ state?: 'open'|'closed'|'all', labels?: string }} [_opts]
|
|
122
80
|
* @returns {Promise<Array<{
|
|
@@ -134,19 +92,9 @@ export class ITicketingProvider {
|
|
|
134
92
|
}
|
|
135
93
|
|
|
136
94
|
/**
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
* backend's child edge is keyed by the parent's opaque node id, while
|
|
141
|
-
* `number` exists only so a degraded read can name the parent it failed on.
|
|
142
|
-
* Passing the number where the node id belongs is not a type error — it is
|
|
143
|
-
* a successful call about the wrong issue — which is why the parameter
|
|
144
|
-
* order is fixed here rather than left to each call site.
|
|
145
|
-
*
|
|
146
|
-
* Implementations MUST return `[]` rather than throw when the sub-issue
|
|
147
|
-
* feature is unavailable on the backend: absence of the feature is not a
|
|
148
|
-
* failed read, and callers union this with a body checklist that still
|
|
149
|
-
* answers the question.
|
|
95
|
+
* Native sub-issue children as issue numbers. The edge is keyed by node id;
|
|
96
|
+
* passing the number there succeeds about the wrong issue. MUST return `[]`
|
|
97
|
+
* when the backend lacks the feature (callers union a body checklist).
|
|
150
98
|
*
|
|
151
99
|
* @param {string} _nodeId Opaque node id of the parent.
|
|
152
100
|
* @param {number} _number Parent's issue number, for diagnostics only.
|
|
@@ -157,30 +105,19 @@ export class ITicketingProvider {
|
|
|
157
105
|
}
|
|
158
106
|
|
|
159
107
|
/**
|
|
160
|
-
* Resolve a
|
|
108
|
+
* Resolve a container parent in one call. Returns `null` (never throws) when
|
|
109
|
+
* there is no parent or the backend cannot answer, so a degraded lookup
|
|
110
|
+
* never fails a lifecycle edge.
|
|
161
111
|
*
|
|
162
|
-
*
|
|
163
|
-
*
|
|
164
|
-
* each one's children — O(containers) requests to answer what the backend
|
|
165
|
-
* knows directly.
|
|
166
|
-
*
|
|
167
|
-
* Returns `null` when the ticket has no parent, and `null` rather than
|
|
168
|
-
* throwing when the backend cannot answer. Callers treat a null as "no
|
|
169
|
-
* parent resolved *here*" and may fall back to a body-declared link; an
|
|
170
|
-
* exception would turn a degraded lookup into a failed lifecycle edge.
|
|
171
|
-
*
|
|
172
|
-
* @param {number} _number Issue number whose parent to resolve.
|
|
173
|
-
* @returns {Promise<object|null>} Mapped parent ticket, or null.
|
|
112
|
+
* @param {number} _number
|
|
113
|
+
* @returns {Promise<object|null>}
|
|
174
114
|
*/
|
|
175
115
|
async getParentIssue(_number) {
|
|
176
116
|
throw new Error('Not implemented: getParentIssue');
|
|
177
117
|
}
|
|
178
118
|
|
|
179
119
|
/**
|
|
180
|
-
*
|
|
181
|
-
* Parses `blocked by #NNN` patterns from the ticket body.
|
|
182
|
-
*
|
|
183
|
-
* @param {number} ticketId - GitHub Issue number.
|
|
120
|
+
* @param {number} ticketId
|
|
184
121
|
* @returns {Promise<{
|
|
185
122
|
* blocks: number[],
|
|
186
123
|
* blockedBy: number[]
|
|
@@ -191,28 +128,22 @@ export class ITicketingProvider {
|
|
|
191
128
|
}
|
|
192
129
|
|
|
193
130
|
/**
|
|
194
|
-
*
|
|
195
|
-
*
|
|
196
|
-
* @param {number} ticketId - GitHub Issue number.
|
|
197
|
-
* @returns {Promise<object[]>} Array of comment objects.
|
|
131
|
+
* @param {number} ticketId
|
|
132
|
+
* @returns {Promise<object[]>}
|
|
198
133
|
*/
|
|
199
134
|
async getTicketComments(_ticketId) {
|
|
200
135
|
throw new Error('Not implemented: getTicketComments');
|
|
201
136
|
}
|
|
202
137
|
|
|
203
|
-
//
|
|
204
|
-
// Write Operations
|
|
205
|
-
// ---------------------------------------------------------------------------
|
|
138
|
+
// Writes
|
|
206
139
|
|
|
207
140
|
/**
|
|
208
|
-
*
|
|
209
|
-
*
|
|
210
|
-
* @param {number} ticketId - GitHub Issue number.
|
|
141
|
+
* @param {number} ticketId
|
|
211
142
|
* @param {{
|
|
212
143
|
* labels?: { add?: string[], remove?: string[] },
|
|
213
144
|
* body?: string,
|
|
214
145
|
* assignees?: string[]
|
|
215
|
-
* }} mutations
|
|
146
|
+
* }} mutations
|
|
216
147
|
* @returns {Promise<void>}
|
|
217
148
|
*/
|
|
218
149
|
async updateTicket(_ticketId, _mutations) {
|
|
@@ -220,13 +151,11 @@ export class ITicketingProvider {
|
|
|
220
151
|
}
|
|
221
152
|
|
|
222
153
|
/**
|
|
223
|
-
*
|
|
224
|
-
*
|
|
225
|
-
* @param {number} ticketId - GitHub Issue number.
|
|
154
|
+
* @param {number} ticketId
|
|
226
155
|
* @param {{
|
|
227
156
|
* body: string,
|
|
228
157
|
* type: 'progress'|'friction'|'notification'
|
|
229
|
-
* }} payload
|
|
158
|
+
* }} payload
|
|
230
159
|
* @returns {Promise<{ commentId: number }>}
|
|
231
160
|
*/
|
|
232
161
|
async postComment(_ticketId, _payload) {
|
|
@@ -234,8 +163,7 @@ export class ITicketingProvider {
|
|
|
234
163
|
}
|
|
235
164
|
|
|
236
165
|
/**
|
|
237
|
-
*
|
|
238
|
-
* Implementations SHOULD treat "not found" as a no-op.
|
|
166
|
+
* SHOULD treat "not found" as a no-op.
|
|
239
167
|
*
|
|
240
168
|
* @param {number} _commentId
|
|
241
169
|
* @returns {Promise<void>}
|
|
@@ -244,13 +172,9 @@ export class ITicketingProvider {
|
|
|
244
172
|
throw new Error('Not implemented: deleteComment');
|
|
245
173
|
}
|
|
246
174
|
|
|
247
|
-
//
|
|
248
|
-
// Setup Operations (used by bootstrap)
|
|
249
|
-
// ---------------------------------------------------------------------------
|
|
175
|
+
// Setup (bootstrap)
|
|
250
176
|
|
|
251
177
|
/**
|
|
252
|
-
* Idempotent label creation. Skips labels that already exist.
|
|
253
|
-
*
|
|
254
178
|
* @param {Array<{ name: string, color: string, description: string }>} labelDefs
|
|
255
179
|
* @returns {Promise<{ created: string[], skipped: string[] }>}
|
|
256
180
|
*/
|
|
@@ -259,11 +183,8 @@ export class ITicketingProvider {
|
|
|
259
183
|
}
|
|
260
184
|
|
|
261
185
|
/**
|
|
262
|
-
*
|
|
263
|
-
*
|
|
264
|
-
* Implementations MUST paginate rather than take a fixed page cap: a cap is
|
|
265
|
-
* silent truncation, and a caller deciding what to delete from a truncated
|
|
266
|
-
* view is the exact failure Story #5189 exists to stop reproducing.
|
|
186
|
+
* MUST paginate: a page cap silently truncates, and callers decide
|
|
187
|
+
* deletions from this list.
|
|
267
188
|
*
|
|
268
189
|
* @returns {Promise<Array<{ name: string, color: string|null, description: string|null }>>}
|
|
269
190
|
*/
|
|
@@ -272,11 +193,8 @@ export class ITicketingProvider {
|
|
|
272
193
|
}
|
|
273
194
|
|
|
274
195
|
/**
|
|
275
|
-
*
|
|
276
|
-
*
|
|
277
|
-
* A label that is already gone MUST resolve as a successful no-op
|
|
278
|
-
* (`{ deleted: false, reason: 'not-found' }`) rather than throwing, so a
|
|
279
|
-
* re-run of any sweep built on this port is idempotent.
|
|
196
|
+
* An absent label MUST resolve `{ deleted: false, reason: 'not-found' }`,
|
|
197
|
+
* never throw, so sweeps are idempotent.
|
|
280
198
|
*
|
|
281
199
|
* @param {string} _name
|
|
282
200
|
* @returns {Promise<{ deleted: boolean, reason: string|null }>}
|
|
@@ -286,8 +204,7 @@ export class ITicketingProvider {
|
|
|
286
204
|
}
|
|
287
205
|
|
|
288
206
|
/**
|
|
289
|
-
* Idempotent
|
|
290
|
-
* Only applicable when `projectNumber` is configured.
|
|
207
|
+
* Idempotent; only applicable when `projectNumber` is configured.
|
|
291
208
|
*
|
|
292
209
|
* @param {Array<{
|
|
293
210
|
* name: string,
|
|
@@ -301,21 +218,17 @@ export class ITicketingProvider {
|
|
|
301
218
|
}
|
|
302
219
|
|
|
303
220
|
/**
|
|
304
|
-
*
|
|
305
|
-
* @param {string} _query - GraphQL query/mutation string.
|
|
221
|
+
* @param {string} _query
|
|
306
222
|
* @param {object} [_variables={}]
|
|
307
223
|
* @param {object} [_opts={}]
|
|
308
|
-
* @returns {Promise<object>} The `data
|
|
224
|
+
* @returns {Promise<object>} The response's `data`.
|
|
309
225
|
*/
|
|
310
226
|
async graphql(_query, _variables = {}, _opts = {}) {
|
|
311
227
|
throw new Error('Not implemented: graphql');
|
|
312
228
|
}
|
|
313
229
|
|
|
314
230
|
/**
|
|
315
|
-
*
|
|
316
|
-
* `{ enabled: false }` when no protection rule exists (HTTP 404), and
|
|
317
|
-
* `{ enabled: true, raw }` when one does. Implementations may return a
|
|
318
|
-
* richer shape; the only contract consumers rely on is the boolean.
|
|
231
|
+
* `{ enabled: false }` on 404; consumers rely only on the boolean.
|
|
319
232
|
*
|
|
320
233
|
* @param {string} _branch
|
|
321
234
|
* @returns {Promise<{ enabled: boolean, raw?: object }>}
|
|
@@ -325,15 +238,9 @@ export class ITicketingProvider {
|
|
|
325
238
|
}
|
|
326
239
|
|
|
327
240
|
/**
|
|
328
|
-
*
|
|
329
|
-
*
|
|
330
|
-
*
|
|
331
|
-
* created with sensible defaults and just the supplied contexts.
|
|
332
|
-
*
|
|
333
|
-
* Returns a summary `{ created, added, existing }` describing the diff
|
|
334
|
-
* the bootstrap orchestrator surfaces to the operator. Implementations
|
|
335
|
-
* MAY ignore other branch-protection knobs (PR review counts, signed
|
|
336
|
-
* commits, etc.) so operator-tuned settings survive re-runs.
|
|
241
|
+
* Additively merge required status-check `contexts` (creating the rule if
|
|
242
|
+
* absent). Other protection knobs are left alone so operator tuning
|
|
243
|
+
* survives re-runs.
|
|
337
244
|
*
|
|
338
245
|
* @param {string} _branch
|
|
339
246
|
* @param {{ contexts: string[], strict?: boolean }} _opts
|
|
@@ -344,9 +251,7 @@ export class ITicketingProvider {
|
|
|
344
251
|
}
|
|
345
252
|
|
|
346
253
|
/**
|
|
347
|
-
*
|
|
348
|
-
* flags. Returns a sparse object containing only the fields the upstream
|
|
349
|
-
* API exposes (consumers should treat missing keys as "unknown").
|
|
254
|
+
* Sparse: a missing key means "unknown".
|
|
350
255
|
*
|
|
351
256
|
* @returns {Promise<Partial<{
|
|
352
257
|
* allow_squash_merge: boolean,
|
|
@@ -361,8 +266,7 @@ export class ITicketingProvider {
|
|
|
361
266
|
}
|
|
362
267
|
|
|
363
268
|
/**
|
|
364
|
-
* PATCH
|
|
365
|
-
* only the supplied fields are sent / touched.
|
|
269
|
+
* Sparse PATCH: only supplied fields are touched.
|
|
366
270
|
*
|
|
367
271
|
* @param {Partial<{
|
|
368
272
|
* allow_squash_merge: boolean,
|