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,54 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* kernel: callers hand it the live Story records, the done set, and the
|
|
7
|
-
* in-flight count, and it decides. Until now the only adapter was the
|
|
8
|
-
* flag-driven one (`stories-wave-tick.js --dag/--done/--in-flight`), which
|
|
9
|
-
* pushed the *gathering* of those inputs onto the caller — in practice onto
|
|
10
|
-
* the host LLM following `/mandrel-deliver`'s prose, re-seeding `--done` and counting
|
|
11
|
-
* `--in-flight` by hand every beat. That is hand-maintained accounting on the
|
|
12
|
-
* one correctness-critical path where a mistake silently wedges a run (a
|
|
13
|
-
* dropped foreign blocker) or double-dispatches a Story (a miscounted slot).
|
|
14
|
-
*
|
|
15
|
-
* This module closes that gap by **probing** the same facts the host was
|
|
16
|
-
* transcribing:
|
|
17
|
-
*
|
|
18
|
-
* - **done** — an `agent::done` label OR a closed issue, the same predicate
|
|
19
|
-
* `classifyStory` already applies, evaluated over live state rather than a
|
|
20
|
-
* `--done` CSV the caller maintained across beats. Foreign blockers
|
|
21
|
-
* (outside the delivered set) are resolved too, which is what makes
|
|
22
|
-
* cross-run delivery work: a blocker that merged weeks ago in another run
|
|
23
|
-
* is simply done.
|
|
24
|
-
* - **in-flight** — derived from live `agent::executing` / `agent::closing`
|
|
25
|
-
* labels, **unioned with the ids the host says it has dispatched**
|
|
26
|
-
* (`--dispatched`). The label alone is not sufficient: the kernel's
|
|
27
|
-
* contract counts "executing / closing / dispatched-not-yet-labelled" as
|
|
28
|
-
* in-flight, and there is still a window between the host spawning a
|
|
29
|
-
* sub-agent and that sub-agent's `single-story-init.js` publishing the
|
|
30
|
-
* `agent::executing` label. Story #4620 shrank that window sharply — the
|
|
31
|
-
* flip now lands before the multi-minute worktree install rather than
|
|
32
|
-
* after it — but it is not zero (init still runs the lease acquire and a
|
|
33
|
-
* branch fetch first), so a label-only derivation could still re-emit a
|
|
34
|
-
* just-dispatched Story in the next beat's `ready[]` and dispatch it a
|
|
35
|
-
* second time onto the same branch (Story #4601). `--dispatched` closes
|
|
36
|
-
* the residual window; foreign runs are covered by the assignee lease
|
|
37
|
-
* (see `deriveForeignHeld`).
|
|
38
|
-
* - **blocked** — the ids carrying `agent::blocked`. `classifyStory` has
|
|
39
|
-
* always returned this class; nothing consumed it, so a blocked Story was
|
|
40
|
-
* neither done, ready, nor in-flight and the beat reported a permanent
|
|
41
|
-
* "waiting" (Story #4601).
|
|
42
|
-
*
|
|
43
|
-
* It is an **adapter, not a kernel change**: it gathers inputs and hands them
|
|
44
|
-
* to `planReadySet` unchanged. The kernel stays pure and flag-driven, and
|
|
45
|
-
* the legacy flag mode stays byte-compatible.
|
|
46
|
-
*
|
|
47
|
-
* The graph resolution is **not** reimplemented here — it reuses
|
|
48
|
-
* `resolve-stories.js`'s machinery wholesale (body `depends_on` ∪ native
|
|
49
|
-
* `blocked_by` edges, foreign-blocker resolution, `files[]` footprints), so
|
|
50
|
-
* the probe and `/mandrel-deliver`'s step-1 resolution cannot disagree about what
|
|
51
|
-
* depends on what.
|
|
2
|
+
* Adapter that probes live GitHub state (done, in-flight, blocked, foreign
|
|
3
|
+
* leases) into `planReadySet`'s inputs, so no caller hand-maintains them. Graph
|
|
4
|
+
* resolution reuses `resolve-stories.js` so the probe cannot disagree with
|
|
5
|
+
* `/mandrel-deliver`'s resolution about dependencies.
|
|
52
6
|
*
|
|
53
7
|
* @module lib/wave-runner/live-probe
|
|
54
8
|
*/
|
|
@@ -68,57 +22,20 @@ import {
|
|
|
68
22
|
import { classifyStory, storyIdOf } from './ready-set.js';
|
|
69
23
|
|
|
70
24
|
/**
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
* neither may be re-dispatched.
|
|
79
|
-
* 2. **`dispatched`** — ids the host has spawned. This closes the residual
|
|
80
|
-
* init window: between the host spawning a sub-agent and that agent's
|
|
81
|
-
* `single-story-init.js` publishing `agent::executing`, a dispatched Story
|
|
82
|
-
* still reads `agent::ready` and a label-only derivation hands it back as
|
|
83
|
-
* ready. Story #4620 moved the flip ahead of the worktree install, so the
|
|
84
|
-
* window is now short rather than minutes-long, but `--dispatched` still
|
|
85
|
-
* covers it deterministically.
|
|
86
|
-
*
|
|
87
|
-
* `dispatched` is deliberately **not** the `--done`-style accounting probe
|
|
88
|
-
* mode retired. Three properties keep it from becoming one:
|
|
89
|
-
*
|
|
90
|
-
* - **It is a set union, not a counter.** Re-passing an id that has since
|
|
91
|
-
* picked up its `agent::executing` label cannot double-count a slot.
|
|
92
|
-
* - **Live state overrules the claim.** An id the host still lists but that
|
|
93
|
-
* now classifies `done` (or `blocked`) is dropped, so a stale entry can
|
|
94
|
-
* never occupy a slot forever and starve the run.
|
|
95
|
-
* - **Therefore the host's correct strategy is monotonic append**: pass
|
|
96
|
-
* every id you have dispatched this run and never reason about removing
|
|
97
|
-
* one. There is no drop-a-slot decision to get wrong — the probe subtracts
|
|
98
|
-
* reality from the claim. Forgetting an id degrades to the pre-#4601
|
|
99
|
-
* behaviour rather than to something worse.
|
|
100
|
-
*
|
|
101
|
-
* Ids outside the probed set are ignored: they are not part of this run and
|
|
102
|
-
* must not consume its cap.
|
|
103
|
-
*
|
|
104
|
-
* The second arm is also reported on its own, as `unlabelled`. A claimed id
|
|
105
|
-
* that still reads `agent::ready` is in flight either because its init is
|
|
106
|
-
* still running or because the spawn that claimed it never started one, and
|
|
107
|
-
* those two are indistinguishable here — but only the second pins the id in
|
|
108
|
-
* the caller's ledger forever. Live state cannot tell them apart; the operator
|
|
109
|
-
* can, so the fact is surfaced rather than acted on (Story #5363).
|
|
25
|
+
* In-flight ids: live executing/closing labels ∪ host-`dispatched` ids still
|
|
26
|
+
* reading `ready` (the window before init publishes `agent::executing`).
|
|
27
|
+
* `dispatched` is a set union overruled by live state (a done/blocked id is
|
|
28
|
+
* dropped), so the host should append monotonically and never remove. Ids
|
|
29
|
+
* outside the probed set are ignored. The claimed-but-`ready` subset is also
|
|
30
|
+
* returned as `unlabelled`: a slow init and a spawn that never started look
|
|
31
|
+
* identical here, so it is surfaced for the operator, not acted on.
|
|
110
32
|
*
|
|
111
33
|
* @param {Array<{id?: number, number?: number, labels?: string[], state?: string}>} storyRecords
|
|
112
|
-
* @param {Iterable<number>} [dispatched]
|
|
113
|
-
* @returns {{inFlight: Set<number>, unlabelled: Set<number>}}
|
|
114
|
-
* ids, and the subset of them claimed by the caller that live state still
|
|
115
|
-
* reports as `agent::ready`.
|
|
34
|
+
* @param {Iterable<number>} [dispatched]
|
|
35
|
+
* @returns {{inFlight: Set<number>, unlabelled: Set<number>}}
|
|
116
36
|
*/
|
|
117
37
|
function deriveInFlightIds(storyRecords, dispatched = []) {
|
|
118
38
|
const claimed = new Set(dispatched);
|
|
119
|
-
// Bucketed by live class rather than tested twice. The admission rule is
|
|
120
|
-
// unchanged; it is only that the `ready` bucket IS the claimed-but-unlabelled
|
|
121
|
-
// set, since `ready` is the one class the rule admits on the caller's claim.
|
|
122
39
|
const byClass = { executing: new Set(), ready: new Set() };
|
|
123
40
|
for (const rec of storyRecords) {
|
|
124
41
|
const id = storyIdOf(rec);
|
|
@@ -135,18 +52,12 @@ function deriveInFlightIds(storyRecords, dispatched = []) {
|
|
|
135
52
|
}
|
|
136
53
|
|
|
137
54
|
/**
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
*
|
|
141
|
-
* consumed it: a blocked Story was never done, never ready, and never counted
|
|
142
|
-
* in-flight, so `detectWedge` dropped it (its "undone work with no unmet
|
|
143
|
-
* blockers would have been dispatched" invariant is precisely what probe mode
|
|
144
|
-
* broke) and the beat reported exit 0 / `ready: []` / `wedged: null` forever.
|
|
145
|
-
* `/mandrel-deliver` reads that as "waiting", so the `agent::blocked` HITL pause — the
|
|
146
|
-
* one runtime gate in the protocol — was never surfaced to the operator.
|
|
55
|
+
* Ids carrying `agent::blocked`, ascending. Reported explicitly because a
|
|
56
|
+
* blocked Story is neither done, ready nor in-flight, and would otherwise
|
|
57
|
+
* read as an endless "waiting" that hides the HITL pause.
|
|
147
58
|
*
|
|
148
59
|
* @param {Array<{id?: number, number?: number, labels?: string[], state?: string}>} storyRecords
|
|
149
|
-
* @returns {number[]}
|
|
60
|
+
* @returns {number[]}
|
|
150
61
|
*/
|
|
151
62
|
function deriveBlockedIds(storyRecords) {
|
|
152
63
|
return storyRecords
|
|
@@ -157,31 +68,16 @@ function deriveBlockedIds(storyRecords) {
|
|
|
157
68
|
}
|
|
158
69
|
|
|
159
70
|
/**
|
|
160
|
-
*
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
*
|
|
164
|
-
*
|
|
165
|
-
* worktree install — so for that whole window a Story another operator is
|
|
166
|
-
* actively delivering still reads `agent::ready` with no in-flight label. A
|
|
167
|
-
* label-only probe classifies it `ready` and hands it to this run, which then
|
|
168
|
-
* dispatches into a guaranteed init failure (the fail-closed lease refuses a
|
|
169
|
-
* foreign assignee) mid-batch. Reading the assignee lets the probe withhold it
|
|
170
|
-
* up front and report who holds it instead.
|
|
171
|
-
*
|
|
172
|
-
* Only Stories that would otherwise be `ready` are considered — a `done`,
|
|
173
|
-
* `blocked`, or already-`executing` Story is handled by its own class, and a
|
|
174
|
-
* self-held assignee is this run's own claim and never withholds.
|
|
175
|
-
*
|
|
176
|
-
* When `self` is unresolved (no `github.operatorHandle`), foreign cannot be
|
|
177
|
-
* told from self, so this returns empty and warns once: the probe is a
|
|
178
|
-
* read-only path that must not fail closed, and init's lease acquire remains
|
|
179
|
-
* the backstop.
|
|
71
|
+
* `ready` Stories whose assignee lease belongs to another operator: they can
|
|
72
|
+
* read `ready` while that operator's init is still running, and dispatching
|
|
73
|
+
* them would hit init's fail-closed lease mid-batch. With `self` unresolved
|
|
74
|
+
* this warns and returns empty (a read-only probe must not fail closed; init
|
|
75
|
+
* remains the backstop).
|
|
180
76
|
*
|
|
181
77
|
* @param {Array<{id?: number, number?: number, labels?: string[], state?: string, assignees?: string[]}>} storyRecords
|
|
182
|
-
* @param {string|null|undefined} self
|
|
78
|
+
* @param {string|null|undefined} self Bare operator login for this run.
|
|
183
79
|
* @param {(msg: string) => void} [warn]
|
|
184
|
-
* @returns {Map<number, string>}
|
|
80
|
+
* @returns {Map<number, string>} Story id → holder login.
|
|
185
81
|
*/
|
|
186
82
|
function deriveForeignHeld(storyRecords, self, warn) {
|
|
187
83
|
const held = new Map();
|
|
@@ -205,14 +101,10 @@ function deriveForeignHeld(storyRecords, self, warn) {
|
|
|
205
101
|
}
|
|
206
102
|
|
|
207
103
|
/**
|
|
208
|
-
*
|
|
209
|
-
*
|
|
210
|
-
* Shares `resolve-stories.js`'s provider seam, so probe mode authenticates and
|
|
211
|
-
* targets exactly the same repo `/mandrel-deliver`'s resolution step does. Tests
|
|
212
|
-
* inject a stub provider instead of calling this.
|
|
104
|
+
* Provider + repo coordinates, via `resolve-stories.js`'s provider seam.
|
|
213
105
|
*
|
|
214
106
|
* @param {object} [deps]
|
|
215
|
-
* @param {Function} [deps.resolveProvider]
|
|
107
|
+
* @param {Function} [deps.resolveProvider]
|
|
216
108
|
* @returns {{ provider: object, owner: string|undefined, repo: string|undefined, self: string|null }}
|
|
217
109
|
*/
|
|
218
110
|
export function createProbeContext({
|
|
@@ -223,43 +115,27 @@ export function createProbeContext({
|
|
|
223
115
|
provider,
|
|
224
116
|
owner: config?.github?.owner,
|
|
225
117
|
repo: config?.github?.repo,
|
|
226
|
-
// Bare login
|
|
227
|
-
// `@[USERNAME]` placeholder → null) so it compares against the bare assignee
|
|
228
|
-
// logins GitHub returns; `null` disables assignee-based withholding.
|
|
118
|
+
// Bare login (placeholder → null, which disables lease withholding).
|
|
229
119
|
self: normalizeOperatorHandle(config?.github?.operatorHandle),
|
|
230
120
|
};
|
|
231
121
|
}
|
|
232
122
|
|
|
233
123
|
/**
|
|
234
|
-
* Probe live state
|
|
235
|
-
* `
|
|
236
|
-
*
|
|
237
|
-
*
|
|
238
|
-
*
|
|
239
|
-
* issue state, and the second pass folds those satisfied foreign blockers into
|
|
240
|
-
* `done[]`. Skipping that pass would withhold any Story whose blocker landed
|
|
241
|
-
* outside the delivered set — the cross-run wedge the resolver exists to fix.
|
|
124
|
+
* Probe live state into `planReadySet`'s inputs. Two-pass envelope build: the
|
|
125
|
+
* second pass folds foreign blockers that are done into `done[]`, or a Story
|
|
126
|
+
* blocked by work landed outside the set would wedge. Nodes carry live labels
|
|
127
|
+
* because the kernel classifies from them; without them an executing Story is
|
|
128
|
+
* re-dispatched.
|
|
242
129
|
*
|
|
243
130
|
* @param {object} args
|
|
244
|
-
* @param {number[]} args.ids
|
|
245
|
-
* @param {object} args.provider
|
|
131
|
+
* @param {number[]} args.ids
|
|
132
|
+
* @param {object} args.provider
|
|
246
133
|
* @param {string} [args.owner]
|
|
247
134
|
* @param {string} [args.repo]
|
|
248
135
|
* @param {boolean} [args.native=true] Read native `blocked_by` edges.
|
|
249
|
-
* @param {number[]} [args.dispatched=[]]
|
|
250
|
-
*
|
|
251
|
-
* @param {string|null} [args.self] Resolved bare operator login for this
|
|
252
|
-
* run, used to withhold Stories another operator's lease holds
|
|
253
|
-
* (`deriveForeignHeld`). Absent/unresolved → assignee-based withholding is
|
|
254
|
-
* skipped (the probe never fails closed).
|
|
136
|
+
* @param {number[]} [args.dispatched=[]]
|
|
137
|
+
* @param {string|null} [args.self]
|
|
255
138
|
* @param {(msg: string) => void} [args.warn]
|
|
256
|
-
* Each returned node carries its **live labels**. That is load-bearing, not
|
|
257
|
-
* decoration: `planReadySet` classifies from labels, so a node stripped of
|
|
258
|
-
* them reads as `ready` and an `agent::executing` Story gets re-dispatched
|
|
259
|
-
* onto a second branch while its first run is still going. The resolver's DAG
|
|
260
|
-
* projection (`{id, dependsOn, files}`) drops labels because flag mode's
|
|
261
|
-
* caller tracked in-flight itself; probe mode must put them back.
|
|
262
|
-
*
|
|
263
139
|
* @returns {Promise<{
|
|
264
140
|
* nodes: Array<{id: number, dependsOn: number[], files: string[], body: string, labels: string[]}>,
|
|
265
141
|
* inFlightRecords: Array<{id: number, dependsOn: number[], files: string[], body: string, labels: string[]}>,
|
|
@@ -280,12 +156,8 @@ export async function probeLiveState({
|
|
|
280
156
|
self,
|
|
281
157
|
warn,
|
|
282
158
|
}) {
|
|
283
|
-
//
|
|
284
|
-
//
|
|
285
|
-
// per-beat REPORT on work already admitted. A Story dispatched a moment ago
|
|
286
|
-
// is legitimately unlabelled until `single-story-init.js` flips it — the
|
|
287
|
-
// init window this probe models explicitly — and refusing it here would fail
|
|
288
|
-
// a healthy beat mid-run over a Story the run already accepted.
|
|
159
|
+
// The `agent::*` guard is an admission check; a just-dispatched Story is
|
|
160
|
+
// legitimately unlabelled until init flips it, so a per-beat probe allows it.
|
|
289
161
|
const stories = await fetchStories(provider, ids, { allowUnlabelled: true });
|
|
290
162
|
const nativeEdges = native
|
|
291
163
|
? await readNativeEdges({ provider, stories, owner, repo })
|
|
@@ -305,19 +177,13 @@ export async function probeLiveState({
|
|
|
305
177
|
});
|
|
306
178
|
|
|
307
179
|
const labelsById = new Map(stories.map((s) => [s.id, s.labels ?? []]));
|
|
308
|
-
// Bodies
|
|
309
|
-
// declared footprint from the paths a Story's own text names (Story #4875).
|
|
310
|
-
// They are consumed in-process by `planReadySet` and never serialized into
|
|
311
|
-
// the beat envelope, which stays a list of ids.
|
|
180
|
+
// Bodies are consumed in-process only; the beat envelope stays a list of ids.
|
|
312
181
|
const bodyById = new Map(stories.map((s) => [s.id, s.body ?? '']));
|
|
313
182
|
const { inFlight: inFlightIds, unlabelled } = deriveInFlightIds(
|
|
314
183
|
stories,
|
|
315
184
|
dispatched,
|
|
316
185
|
);
|
|
317
|
-
// A Story
|
|
318
|
-
// just like an in-flight one: fold it into the in-flight set so it is both
|
|
319
|
-
// withheld (via the projected label) and excluded from a false wedge, but
|
|
320
|
-
// never dispatched by this run.
|
|
186
|
+
// A foreign-held Story counts as in flight: withheld, and not a false wedge.
|
|
321
187
|
const foreignHeld = deriveForeignHeld(stories, self, warn);
|
|
322
188
|
for (const id of foreignHeld.keys()) inFlightIds.add(id);
|
|
323
189
|
const nodes = envelope.dag.map((node) => ({
|
|
@@ -330,21 +196,13 @@ export async function probeLiveState({
|
|
|
330
196
|
}));
|
|
331
197
|
return {
|
|
332
198
|
nodes,
|
|
333
|
-
//
|
|
334
|
-
// only a count, so it can shrink capacity but can never stop a Story
|
|
335
|
-
// admitted now from sharing files with one dispatched on an earlier beat
|
|
336
|
-
// and still implementing. These records carry the `files[]` and `body` the
|
|
337
|
-
// co-dispatch guard needs, so the kernel can RESERVE those footprints
|
|
338
|
-
// rather than merely count them (Story #4950). No extra fetch: this is a
|
|
339
|
-
// projection of what the probe already read.
|
|
199
|
+
// Records (not just a count) so the kernel can reserve their footprints.
|
|
340
200
|
inFlightRecords: nodes.filter((node) => inFlightIds.has(node.id)),
|
|
341
201
|
doneIds: new Set(envelope.done),
|
|
342
202
|
inFlight: inFlightIds.size,
|
|
343
203
|
blockedIds: deriveBlockedIds(stories),
|
|
344
|
-
//
|
|
345
|
-
//
|
|
346
|
-
// foreign lease is its own withhold reason and outranks the claim, so it
|
|
347
|
-
// is subtracted — one Story must not carry two recoveries.
|
|
204
|
+
// Reported, never released. A foreign lease outranks the claim, so one
|
|
205
|
+
// Story never carries two recoveries.
|
|
348
206
|
stalledDispatch: [...unlabelled]
|
|
349
207
|
.filter((id) => !foreignHeld.has(id))
|
|
350
208
|
.sort((a, b) => a - b),
|
|
@@ -353,29 +211,13 @@ export async function probeLiveState({
|
|
|
353
211
|
}
|
|
354
212
|
|
|
355
213
|
/**
|
|
356
|
-
*
|
|
357
|
-
* `
|
|
214
|
+
* Synthesize `agent::executing` for a dispatched-but-unlabelled Story. The
|
|
215
|
+
* `inFlight` count only reserves capacity; eligibility is per-record from
|
|
216
|
+
* labels, so without this the Story stays `ready` and is re-dispatched.
|
|
358
217
|
*
|
|
359
|
-
*
|
|
360
|
-
*
|
|
361
|
-
*
|
|
362
|
-
*
|
|
363
|
-
* - `inFlight` is only a **count**. It reserves capacity (`slots = cap −
|
|
364
|
-
* inFlight`) and nothing more.
|
|
365
|
-
* - **Eligibility is decided per-record by `classifyStory`**, from labels.
|
|
366
|
-
*
|
|
367
|
-
* So a dispatched-but-unlabelled Story counted only via `inFlight` still
|
|
368
|
-
* classifies `ready`, stays eligible, and — whenever a slot remains — is
|
|
369
|
-
* admitted to the very same beat that reserved a slot for it. It would be
|
|
370
|
-
* re-dispatched onto its own live branch, with the miscount merely reshaped
|
|
371
|
-
* rather than fixed. Handing the kernel the label makes it apply the rule it
|
|
372
|
-
* already has, and keeps the kernel itself untouched: the adapter's job is to
|
|
373
|
-
* supply the input the kernel's contract ("executing / closing / dispatched-
|
|
374
|
-
* not-yet-labelled") already specifies.
|
|
375
|
-
*
|
|
376
|
-
* @param {string[]} labels The Story's live labels.
|
|
377
|
-
* @param {boolean} inFlight Whether the Story occupies a dispatch slot.
|
|
378
|
-
* @returns {string[]} Labels, with `agent::executing` added when needed.
|
|
218
|
+
* @param {string[]} labels
|
|
219
|
+
* @param {boolean} inFlight
|
|
220
|
+
* @returns {string[]}
|
|
379
221
|
*/
|
|
380
222
|
function projectInFlightLabels(labels, inFlight) {
|
|
381
223
|
if (!inFlight || classifyStory({ labels }) === 'executing') return labels;
|
|
@@ -383,20 +225,10 @@ function projectInFlightLabels(labels, inFlight) {
|
|
|
383
225
|
}
|
|
384
226
|
|
|
385
227
|
/**
|
|
386
|
-
*
|
|
387
|
-
*
|
|
388
|
-
*
|
|
389
|
-
*
|
|
390
|
-
* from live state, so honouring a caller-supplied `--done` alongside it would
|
|
391
|
-
* silently reintroduce the hand-maintained accounting probe mode exists to
|
|
392
|
-
* retire — and quietly disagree with reality when the two differ.
|
|
393
|
-
*
|
|
394
|
-
* `--dispatched` is the deliberate exception, and it is **additive rather than
|
|
395
|
-
* authoritative**: it does not replace the derived in-flight set, it is unioned
|
|
396
|
-
* into it and then filtered by live state (see `deriveInFlightIds`). It carries
|
|
397
|
-
* the one fact the host knows and GitHub does not yet — "I spawned this id, the
|
|
398
|
-
* label has not appeared yet" — so it cannot disagree with reality the way an
|
|
399
|
-
* authoritative `--in-flight <n>` could. `--in-flight` therefore stays excluded.
|
|
228
|
+
* Keep `--probe-live` exclusive of the flag-mode inputs it derives from live
|
|
229
|
+
* state (`--done`, `--in-flight`, ...), which could otherwise disagree with
|
|
230
|
+
* reality. `--dispatched` is allowed because it is additive and filtered by
|
|
231
|
+
* live state.
|
|
400
232
|
*
|
|
401
233
|
* @param {object} flags
|
|
402
234
|
* @param {boolean} [flags.probeLive]
|