mandrel 2.59.0 → 2.61.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/README.md +21 -19
- package/.agents/agents/acceptance-critic.md +24 -43
- package/.agents/agents/story-worker.md +20 -21
- package/.agents/docs/agentrc-reference.json +5 -84
- package/.agents/docs/configuration.md +48 -132
- package/.agents/docs/workflows.md +2 -2
- package/.agents/instructions.md +5 -8
- package/.agents/rules/ci-remediation.md +41 -8
- package/.agents/rules/gherkin-standards.md +4 -0
- package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
- package/.agents/schemas/agentrc.schema.json +16 -496
- package/.agents/schemas/story-deliver-terminal.schema.json +13 -3
- package/.agents/schemas/validation-evidence.schema.json +2 -1
- package/.agents/scripts/README.md +23 -13
- package/.agents/scripts/acceptance-eval.js +35 -169
- package/.agents/scripts/agents-bootstrap-github.js +27 -129
- package/.agents/scripts/apply-quality-bootstrap.js +4 -40
- package/.agents/scripts/audit-baselines.js +6 -27
- package/.agents/scripts/audit-labels-bootstrap.js +5 -29
- package/.agents/scripts/audit-to-stories.js +91 -361
- package/.agents/scripts/boot-sweep.js +19 -72
- package/.agents/scripts/bootstrap.js +74 -395
- package/.agents/scripts/ceremony-derive.js +10 -41
- package/.agents/scripts/check-arch-cycles.js +14 -64
- package/.agents/scripts/check-baselines.js +8 -48
- package/.agents/scripts/check-context-budget.js +105 -311
- package/.agents/scripts/check-cyclomatic.js +12 -44
- package/.agents/scripts/check-dead-exports.js +13 -64
- package/.agents/scripts/check-doc-links.js +38 -186
- package/.agents/scripts/check-gherkin-corpus.js +24 -127
- package/.agents/scripts/check-test-temp-hygiene.js +28 -169
- package/.agents/scripts/coverage-capture.js +34 -98
- package/.agents/scripts/deliver-light.js +25 -171
- package/.agents/scripts/deliver-recover.js +6 -42
- package/.agents/scripts/deliver-run.js +534 -0
- package/.agents/scripts/diagnose-friction.js +24 -116
- package/.agents/scripts/drain-pending-cleanup.js +1 -1
- package/.agents/scripts/evidence-gate.js +23 -85
- package/.agents/scripts/file-ci-gap.js +57 -49
- package/.agents/scripts/generate-config-docs.js +30 -170
- package/.agents/scripts/generate-lens-checklists.js +8 -52
- package/.agents/scripts/generate-skills-index.js +14 -112
- package/.agents/scripts/generate-workflows-doc.js +10 -70
- package/.agents/scripts/git-cleanup.js +2 -34
- package/.agents/scripts/lib/Graph.js +24 -81
- package/.agents/scripts/lib/ITicketingProvider.js +47 -143
- package/.agents/scripts/lib/Logger.js +14 -76
- package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
- package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
- package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
- package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
- package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
- package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
- package/.agents/scripts/lib/audit-baselines/read.js +3 -16
- package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
- package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
- package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
- package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
- package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
- package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
- package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
- package/.agents/scripts/lib/audit-suite/findings.js +12 -52
- package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
- package/.agents/scripts/lib/audit-suite/index.js +1 -15
- package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
- package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
- package/.agents/scripts/lib/audit-suite/runner.js +13 -43
- package/.agents/scripts/lib/audit-suite/selector.js +49 -349
- package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
- package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
- package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
- package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
- package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
- package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
- package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
- package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
- package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
- package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
- package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
- package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
- package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
- package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
- package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
- package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
- package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
- package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
- package/.agents/scripts/lib/baseline-loader.js +12 -51
- package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
- package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
- package/.agents/scripts/lib/baselines/components.js +10 -61
- package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
- package/.agents/scripts/lib/baselines/crap-preview-incremental.js +7 -19
- package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
- package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
- package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
- package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
- package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
- package/.agents/scripts/lib/baselines/envelope.js +13 -129
- package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
- package/.agents/scripts/lib/baselines/git-base.js +23 -142
- package/.agents/scripts/lib/baselines/kernel.js +11 -111
- package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
- package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
- package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
- package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
- package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
- package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
- package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
- package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
- package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
- package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
- package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
- package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
- package/.agents/scripts/lib/baselines/path-canon.js +19 -128
- package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
- package/.agents/scripts/lib/baselines/reader.js +14 -107
- package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
- package/.agents/scripts/lib/baselines/scope.js +11 -135
- package/.agents/scripts/lib/baselines/writer.js +16 -149
- package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
- package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
- package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
- package/.agents/scripts/lib/bdd-step-index.js +26 -100
- package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
- package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
- package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
- package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
- package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
- package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
- package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
- package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
- package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
- package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
- package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
- package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
- package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
- package/.agents/scripts/lib/bootstrap/summary.js +1 -8
- package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
- package/.agents/scripts/lib/branch-name-guard.js +4 -23
- package/.agents/scripts/lib/changed-files.js +39 -121
- package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
- package/.agents/scripts/lib/checks/index.js +18 -101
- package/.agents/scripts/lib/checks/loop-health.js +11 -53
- package/.agents/scripts/lib/checks/state.js +16 -91
- package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
- package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
- package/.agents/scripts/lib/child-exec.js +39 -108
- package/.agents/scripts/lib/cli/standard-args.js +9 -116
- package/.agents/scripts/lib/cli-args.js +31 -146
- package/.agents/scripts/lib/cli-usage.js +5 -27
- package/.agents/scripts/lib/cli-utils.js +2 -12
- package/.agents/scripts/lib/close-validation/commands.js +13 -76
- package/.agents/scripts/lib/close-validation/gates.js +92 -331
- package/.agents/scripts/lib/close-validation/process.js +121 -151
- package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
- package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
- package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
- package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
- package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
- package/.agents/scripts/lib/close-validation/runner.js +53 -110
- package/.agents/scripts/lib/command-header.js +6 -28
- package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
- package/.agents/scripts/lib/config/baselines.js +3 -14
- package/.agents/scripts/lib/config/ci.js +8 -38
- package/.agents/scripts/lib/config/commands.js +1 -15
- package/.agents/scripts/lib/config/defaults.js +4 -33
- package/.agents/scripts/lib/config/delivery-routing.js +6 -34
- package/.agents/scripts/lib/config/explain.js +10 -83
- package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
- package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +3 -31
- package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
- package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
- package/.agents/scripts/lib/config/gates/index.js +2 -17
- package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
- package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
- package/.agents/scripts/lib/config/gates/shared.js +4 -64
- package/.agents/scripts/lib/config/github.js +4 -22
- package/.agents/scripts/lib/config/limits.js +4 -57
- package/.agents/scripts/lib/config/paths.js +2 -21
- package/.agents/scripts/lib/config/qa.js +4 -38
- package/.agents/scripts/lib/config/quality.js +76 -432
- package/.agents/scripts/lib/config/runners.js +12 -56
- package/.agents/scripts/lib/config/runtime.js +13 -57
- package/.agents/scripts/lib/config/shared.js +2 -16
- package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
- package/.agents/scripts/lib/config/temp-paths.js +40 -280
- package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
- package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
- package/.agents/scripts/lib/config-resolver.js +11 -52
- package/.agents/scripts/lib/config-schema-shared.js +1 -4
- package/.agents/scripts/lib/config-settings-schema-delivery.js +16 -291
- package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
- package/.agents/scripts/lib/config-settings-schema.js +37 -274
- package/.agents/scripts/lib/coverage-baseline.js +20 -110
- package/.agents/scripts/lib/coverage-capture-fullscope.js +18 -35
- package/.agents/scripts/lib/coverage-capture-incremental.js +15 -45
- package/.agents/scripts/lib/coverage-capture-usage.js +8 -25
- package/.agents/scripts/lib/coverage-capture.js +99 -224
- package/.agents/scripts/lib/coverage-utils.js +14 -79
- package/.agents/scripts/lib/cpu-pool.js +17 -123
- package/.agents/scripts/lib/crap-baseline-join.js +16 -88
- package/.agents/scripts/lib/crap-coordinates.js +6 -25
- package/.agents/scripts/lib/crap-engine.js +40 -153
- package/.agents/scripts/lib/crap-method-identity.js +16 -78
- package/.agents/scripts/lib/crap-utils.js +31 -155
- package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
- package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
- package/.agents/scripts/lib/dead-exports-knip.js +18 -56
- package/.agents/scripts/lib/dead-exports-mode.js +5 -24
- package/.agents/scripts/lib/degraded-mode.js +3 -26
- package/.agents/scripts/lib/dependency-parser.js +8 -40
- package/.agents/scripts/lib/dependency-version.js +13 -35
- package/.agents/scripts/lib/detect-package-manager.js +6 -36
- package/.agents/scripts/lib/doc-tiers.js +22 -124
- package/.agents/scripts/lib/duplicate-search.js +8 -72
- package/.agents/scripts/lib/env-loader.js +5 -27
- package/.agents/scripts/lib/error-redactor.js +6 -31
- package/.agents/scripts/lib/errors/index.js +2 -22
- package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
- package/.agents/scripts/lib/escomplex-kernel.js +21 -123
- package/.agents/scripts/lib/feedback-loop/graduator-core.js +94 -419
- package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
- package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -149
- package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
- package/.agents/scripts/lib/findings/classify-finding.js +14 -69
- package/.agents/scripts/lib/findings/promote-finding.js +14 -112
- package/.agents/scripts/lib/findings/provenance-field.js +11 -52
- package/.agents/scripts/lib/findings/route-finding.js +37 -255
- package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
- package/.agents/scripts/lib/findings/severity.js +18 -104
- package/.agents/scripts/lib/format-generated-json.js +12 -44
- package/.agents/scripts/lib/full-suite-lock.js +160 -429
- package/.agents/scripts/lib/full-suite-queue.js +213 -0
- package/.agents/scripts/lib/gates/baseline-store.js +5 -9
- package/.agents/scripts/lib/gates/friction.js +1 -3
- package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
- package/.agents/scripts/lib/gh-exec.js +123 -191
- package/.agents/scripts/lib/git/cached-fetch.js +9 -52
- package/.agents/scripts/lib/git/sync-from-base.js +15 -107
- package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
- package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
- package/.agents/scripts/lib/git-utils.js +37 -161
- package/.agents/scripts/lib/github/framework-repo.js +8 -71
- package/.agents/scripts/lib/github-url.js +2 -17
- package/.agents/scripts/lib/import-graph.js +11 -38
- package/.agents/scripts/lib/install-cmd-parser.js +4 -13
- package/.agents/scripts/lib/json-utils.js +3 -18
- package/.agents/scripts/lib/label-constants.js +16 -111
- package/.agents/scripts/lib/label-taxonomy.js +4 -30
- package/.agents/scripts/lib/maintainability-engine.js +12 -80
- package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
- package/.agents/scripts/lib/maintainability-utils.js +16 -92
- package/.agents/scripts/lib/mandrel-catalog.js +12 -70
- package/.agents/scripts/lib/notifications/notifier.js +13 -38
- package/.agents/scripts/lib/npm-scripts.js +4 -23
- package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
- package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
- package/.agents/scripts/lib/observability/signal-validator.js +5 -37
- package/.agents/scripts/lib/observability/signals-writer.js +11 -121
- package/.agents/scripts/lib/observability/source-classifier.js +22 -203
- package/.agents/scripts/lib/observability/terse-result.js +14 -47
- package/.agents/scripts/lib/onboard/init-tail.js +13 -74
- package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
- package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
- package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
- package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
- package/.agents/scripts/lib/orchestration/ceremony-routing.js +28 -156
- package/.agents/scripts/lib/orchestration/change-set.js +7 -36
- package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
- package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
- package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
- package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
- package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
- package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
- package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
- package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
- package/.agents/scripts/lib/orchestration/check-state.js +92 -0
- package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
- package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +121 -157
- package/.agents/scripts/lib/orchestration/code-review.js +24 -128
- package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
- package/.agents/scripts/lib/orchestration/complexity-gate.js +118 -462
- package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
- package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
- package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
- package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
- package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
- package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
- package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
- package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
- package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
- package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
- package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
- package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
- package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
- package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
- package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
- package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
- package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
- package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
- package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
- package/.agents/scripts/lib/orchestration/light-suitability.js +37 -307
- package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
- package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
- package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
- package/.agents/scripts/lib/orchestration/plan-context.js +55 -318
- package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
- package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
- package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
- package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
- package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
- package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
- package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +16 -78
- package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
- package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
- package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
- package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
- package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
- package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
- package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +71 -289
- package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
- package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +96 -362
- package/.agents/scripts/lib/orchestration/plan-persist/summary.js +9 -39
- package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +60 -186
- package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
- package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
- package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
- package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
- package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
- package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
- package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
- package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
- package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
- package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
- package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
- package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
- package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
- package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
- package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
- package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
- package/.agents/scripts/lib/orchestration/review-depth.js +12 -91
- package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
- package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
- package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
- package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
- package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
- package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
- package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
- package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
- package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
- package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
- package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
- package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
- package/.agents/scripts/lib/orchestration/run-epilogue.js +245 -326
- package/.agents/scripts/lib/orchestration/run-scoped-config.js +55 -159
- package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
- package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
- package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
- package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +83 -239
- package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +20 -82
- package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
- package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
- package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +136 -486
- package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
- package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +96 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
- package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
- package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
- package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
- package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
- package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
- package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
- package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
- package/.agents/scripts/lib/orchestration/single-story-close/runner.js +180 -273
- package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
- package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
- package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
- package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
- package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
- package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
- package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
- package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
- package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -200
- package/.agents/scripts/lib/orchestration/story-follow-ups.js +167 -252
- package/.agents/scripts/lib/orchestration/story-init-envelope.js +52 -0
- package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
- package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
- package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -135
- package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
- package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
- package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
- package/.agents/scripts/lib/orchestration/ticket-validator.js +63 -344
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -261
- package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
- package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
- package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
- package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
- package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
- package/.agents/scripts/lib/path-security.js +3 -6
- package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
- package/.agents/scripts/lib/preflight-runner.js +13 -69
- package/.agents/scripts/lib/process-group.js +143 -0
- package/.agents/scripts/lib/project-root.js +2 -8
- package/.agents/scripts/lib/provider-factory.js +2 -25
- package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
- package/.agents/scripts/lib/qa/qa-session.js +15 -69
- package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
- package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
- package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
- package/.agents/scripts/lib/reserved-test-ids.js +9 -47
- package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
- package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
- package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
- package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
- package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
- package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
- package/.agents/scripts/lib/signals/detectors/common.js +12 -38
- package/.agents/scripts/lib/signals/index.js +2 -19
- package/.agents/scripts/lib/signals/schema.js +14 -109
- package/.agents/scripts/lib/signals/write.js +2 -11
- package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
- package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
- package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
- package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
- package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
- package/.agents/scripts/lib/single-story-sweep.js +14 -97
- package/.agents/scripts/lib/skills/parse-skill.js +13 -59
- package/.agents/scripts/lib/skills/skills-index.js +8 -29
- package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
- package/.agents/scripts/lib/source-extensions.js +11 -42
- package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
- package/.agents/scripts/lib/stdio-flush.js +9 -36
- package/.agents/scripts/lib/story-adjacency.js +8 -40
- package/.agents/scripts/lib/story-body/body-format-lints.js +51 -66
- package/.agents/scripts/lib/story-body/footer-block.js +11 -44
- package/.agents/scripts/lib/story-body/story-body.js +123 -344
- package/.agents/scripts/lib/temp-retention.js +42 -143
- package/.agents/scripts/lib/templates/decomposer-prompts.js +18 -80
- package/.agents/scripts/lib/test-env.js +12 -65
- package/.agents/scripts/lib/test-run-credit.js +10 -65
- package/.agents/scripts/lib/test-runner-contract.js +19 -74
- package/.agents/scripts/lib/test-temp.js +38 -184
- package/.agents/scripts/lib/test-tiers.js +12 -96
- package/.agents/scripts/lib/ticket-body-sections.js +21 -96
- package/.agents/scripts/lib/transpile.js +15 -74
- package/.agents/scripts/lib/util/concurrent-map.js +6 -25
- package/.agents/scripts/lib/util/parse-id-list.js +8 -34
- package/.agents/scripts/lib/util/poll-loop.js +8 -28
- package/.agents/scripts/lib/util/with-timeout.js +2 -11
- package/.agents/scripts/lib/validation-evidence.js +21 -96
- package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
- package/.agents/scripts/lib/wave-runner/live-probe.js +67 -209
- package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
- package/.agents/scripts/lib/workers/crap-worker.js +11 -64
- package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
- package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
- package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
- package/.agents/scripts/lib/workflow-closure.js +22 -105
- package/.agents/scripts/lib/workspace-provisioner.js +16 -54
- package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
- package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
- package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
- package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
- package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
- package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
- package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
- package/.agents/scripts/lib/worktree-manager.js +15 -40
- package/.agents/scripts/lint-issue-body.js +12 -68
- package/.agents/scripts/mandrel-update-preflight.js +10 -70
- package/.agents/scripts/merge-baseline.js +30 -105
- package/.agents/scripts/nav-registry-diff.js +22 -108
- package/.agents/scripts/notify.js +12 -69
- package/.agents/scripts/plan-context.js +97 -92
- package/.agents/scripts/plan-critics.js +12 -66
- package/.agents/scripts/plan-persist.js +71 -137
- package/.agents/scripts/plan-run-epilogue.js +20 -43
- package/.agents/scripts/pr-watch-with-update.js +79 -263
- package/.agents/scripts/providers/github/auth.js +3 -8
- package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
- package/.agents/scripts/providers/github/board-add.js +5 -21
- package/.agents/scripts/providers/github/branch-protection.js +11 -43
- package/.agents/scripts/providers/github/cache.js +2 -14
- package/.agents/scripts/providers/github/comments.js +7 -40
- package/.agents/scripts/providers/github/compose.js +3 -19
- package/.agents/scripts/providers/github/errors.js +22 -125
- package/.agents/scripts/providers/github/issues.js +31 -123
- package/.agents/scripts/providers/github/labels.js +24 -124
- package/.agents/scripts/providers/github/mappers.js +5 -27
- package/.agents/scripts/providers/github/merge-methods.js +3 -22
- package/.agents/scripts/providers/github/project-board.js +2 -17
- package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
- package/.agents/scripts/providers/github/request-helpers.js +5 -32
- package/.agents/scripts/providers/github/search-budget.js +9 -39
- package/.agents/scripts/providers/github/search-query.js +5 -26
- package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
- package/.agents/scripts/providers/github/sub-issues.js +7 -36
- package/.agents/scripts/providers/github/tickets.js +32 -134
- package/.agents/scripts/providers/github.js +18 -59
- package/.agents/scripts/prune-plan-run-labels.js +12 -46
- package/.agents/scripts/quality-preview.js +35 -220
- package/.agents/scripts/resolve-doc-tiers.js +3 -26
- package/.agents/scripts/resolve-stories.js +16 -67
- package/.agents/scripts/resync-status-column.js +6 -25
- package/.agents/scripts/run-tests.js +29 -104
- package/.agents/scripts/single-story-close.js +23 -135
- package/.agents/scripts/single-story-confirm-merge.js +32 -139
- package/.agents/scripts/single-story-init.js +47 -259
- package/.agents/scripts/stories-wave-tick.js +179 -415
- package/.agents/scripts/sync-agentrc.js +3 -21
- package/.agents/scripts/sync-claude-agents.js +9 -55
- package/.agents/scripts/sync-claude-commands.js +20 -110
- package/.agents/scripts/test-wrapper.js +6 -43
- package/.agents/scripts/update-coverage-baseline.js +5 -22
- package/.agents/scripts/update-crap-baseline.js +7 -30
- package/.agents/scripts/update-duplication-baseline.js +16 -92
- package/.agents/scripts/update-maintainability-baseline.js +8 -62
- package/.agents/scripts/update-ticket-state.js +1 -7
- package/.agents/scripts/validate-skills.js +6 -26
- package/.agents/skills/core/gates-and-baselines/reference.md +0 -1
- package/.agents/skills/skills.index.json +2 -2
- package/.agents/skills/stack/qa/playwright/SKILL.md +26 -0
- package/.agents/templates/agent-protocol.md +2 -2
- package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
- package/.agents/workflows/audit-accessibility.md +4 -7
- package/.agents/workflows/audit-adrs.md +3 -6
- package/.agents/workflows/audit-architecture.md +3 -11
- package/.agents/workflows/audit-baselines.md +6 -9
- package/.agents/workflows/audit-clean-code.md +8 -12
- package/.agents/workflows/audit-data-model.md +3 -7
- package/.agents/workflows/audit-dependencies.md +4 -7
- package/.agents/workflows/audit-devops.md +4 -8
- package/.agents/workflows/audit-documentation.md +1 -4
- package/.agents/workflows/audit-mobile.md +4 -7
- package/.agents/workflows/audit-navigability.md +3 -6
- package/.agents/workflows/audit-performance.md +2 -4
- package/.agents/workflows/audit-privacy.md +4 -7
- package/.agents/workflows/audit-quality.md +4 -7
- package/.agents/workflows/audit-security.md +4 -7
- package/.agents/workflows/audit-seo.md +4 -7
- package/.agents/workflows/audit-sre.md +4 -7
- package/.agents/workflows/audit-to-stories.md +17 -30
- package/.agents/workflows/audit-ux-ui.md +4 -7
- package/.agents/workflows/helpers/acceptance-self-eval.md +84 -157
- package/.agents/workflows/helpers/audit-lens-core.md +1 -1
- package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
- package/.agents/workflows/helpers/code-review.md +4 -2
- package/.agents/workflows/helpers/deliver-digest.md +37 -28
- package/.agents/workflows/helpers/deliver-light.md +92 -101
- package/.agents/workflows/helpers/deliver-reference.md +162 -220
- package/.agents/workflows/helpers/deliver-story-reference.md +197 -607
- package/.agents/workflows/helpers/deliver-story.md +17 -18
- package/.agents/workflows/helpers/plan-reference.md +125 -167
- package/.agents/workflows/helpers/qa-core.md +12 -0
- package/.agents/workflows/mandrel-deliver.md +47 -31
- package/.agents/workflows/mandrel-plan.md +22 -21
- package/.agents/workflows/mandrel-update.md +36 -21
- package/.agents/workflows/memory-consolidate.md +1 -1
- package/.agents/workflows/qa-assist.md +27 -71
- package/.agents/workflows/qa-explore.md +19 -59
- package/.agents/workflows/qa-run.md +11 -33
- package/README.md +1 -1
- package/bin/mandrel.js +5 -46
- package/bin/postinstall.js +18 -107
- package/docs/CHANGELOG.md +60 -0
- package/lib/cli/doctor.js +11 -71
- package/lib/cli/init.js +26 -165
- package/lib/cli/migrate.js +5 -64
- package/lib/cli/registry.js +84 -467
- package/lib/cli/sync-agents.js +4 -64
- package/lib/cli/sync-commands.js +11 -64
- package/lib/cli/sync.js +34 -213
- package/lib/cli/uninstall.js +40 -219
- package/lib/cli/update.js +326 -523
- package/lib/cli/version-check.js +8 -72
- package/lib/cli/version-helpers.js +14 -87
- package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
- package/lib/migrations/index.js +17 -92
- package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
- package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
- package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
- package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
- package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
- package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
- package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
- package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
- package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +21 -0
- package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
- package/package.json +17 -14
- package/.agents/docs/SDLC.md +0 -590
- package/.agents/docs/quality-gates.md +0 -1179
- package/.agents/rules/known-tooling-behavior.md +0 -150
- package/.agents/rules/orchestration-error-handling.md +0 -61
- package/.agents/rules/test-seams.md +0 -59
- package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
- package/.agents/schemas/baselines/lint.schema.json +0 -47
- package/.agents/schemas/model-attribution.schema.json +0 -53
- package/.agents/scripts/check-action-pinning.js +0 -260
- package/.agents/scripts/check-audit-attribution.js +0 -302
- package/.agents/scripts/check-baseline-drift.js +0 -211
- package/.agents/scripts/check-baseline-scope.js +0 -362
- package/.agents/scripts/check-generated-validator.js +0 -202
- package/.agents/scripts/check-knip-entries.js +0 -159
- package/.agents/scripts/check-lifecycle-lint.js +0 -294
- package/.agents/scripts/check-pinned-override-notes.js +0 -102
- package/.agents/scripts/check-schema-references.js +0 -366
- package/.agents/scripts/check-test-portability.js +0 -512
- package/.agents/scripts/check-workflow-citations.js +0 -332
- package/.agents/scripts/check-workflow-cli-lint.js +0 -299
- package/.agents/scripts/check-workflow-timeouts.js +0 -291
- package/.agents/scripts/install-matrix-assert.js +0 -326
- package/.agents/scripts/lib/audit-advisories.js +0 -195
- package/.agents/scripts/lib/audit-attribution.js +0 -134
- package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
- package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
- package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
- package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
- package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
- package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
- package/.agents/scripts/lib/c8-cli-path.js +0 -21
- package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
- package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
- package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
- package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
- package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
- package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
- package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
- package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
- package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
- package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
- package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
- package/.agents/scripts/lib/fs-walk.js +0 -52
- package/.agents/scripts/lib/knip-config-resolver.js +0 -181
- package/.agents/scripts/lib/knip-entry-sync.js +0 -452
- package/.agents/scripts/lib/orchestration/model-attribution.js +0 -418
- package/.agents/scripts/lib/orchestration/story-plan-state.js +0 -33
- package/.agents/scripts/lib/orchestration/structured-comment-parser.js +0 -67
- package/.agents/scripts/lib/pinned-override-notes.js +0 -88
- package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
- package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
- package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
- package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
- package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
- package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
- package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
- package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
- package/.agents/scripts/lib/test-isolate/runner.js +0 -483
- package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
- package/.agents/scripts/lib/test-profile/render-report.js +0 -45
- package/.agents/scripts/lint-label-vocabulary.js +0 -214
- package/.agents/scripts/post-structured-comment.js +0 -127
- package/.agents/scripts/provision-git-hooks.js +0 -85
- package/.agents/scripts/prune-baseline-orphans.js +0 -181
- package/.agents/scripts/run-coverage.js +0 -197
- package/.agents/scripts/run-lint.js +0 -133
- package/.agents/scripts/run-test-profile.js +0 -129
- package/.agents/scripts/run-verify.js +0 -118
- package/.agents/scripts/test-isolate.js +0 -55
- package/.agents/scripts/update-dead-exports-baseline.js +0 -321
|
@@ -1,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,70 +22,42 @@ 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.
|
|
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.
|
|
103
32
|
*
|
|
104
33
|
* @param {Array<{id?: number, number?: number, labels?: string[], state?: string}>} storyRecords
|
|
105
|
-
* @param {Iterable<number>} [dispatched]
|
|
106
|
-
* @returns {Set<number>}
|
|
34
|
+
* @param {Iterable<number>} [dispatched]
|
|
35
|
+
* @returns {{inFlight: Set<number>, unlabelled: Set<number>}}
|
|
107
36
|
*/
|
|
108
37
|
function deriveInFlightIds(storyRecords, dispatched = []) {
|
|
109
38
|
const claimed = new Set(dispatched);
|
|
110
|
-
const
|
|
39
|
+
const byClass = { executing: new Set(), ready: new Set() };
|
|
111
40
|
for (const rec of storyRecords) {
|
|
112
41
|
const id = storyIdOf(rec);
|
|
113
42
|
if (id === null) continue;
|
|
114
43
|
const cls = classifyStory(rec);
|
|
115
44
|
if (cls === 'executing' || (claimed.has(id) && cls === 'ready')) {
|
|
116
|
-
|
|
45
|
+
byClass[cls].add(id);
|
|
117
46
|
}
|
|
118
47
|
}
|
|
119
|
-
return
|
|
48
|
+
return {
|
|
49
|
+
inFlight: new Set([...byClass.executing, ...byClass.ready]),
|
|
50
|
+
unlabelled: byClass.ready,
|
|
51
|
+
};
|
|
120
52
|
}
|
|
121
53
|
|
|
122
54
|
/**
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
*
|
|
126
|
-
* consumed it: a blocked Story was never done, never ready, and never counted
|
|
127
|
-
* in-flight, so `detectWedge` dropped it (its "undone work with no unmet
|
|
128
|
-
* blockers would have been dispatched" invariant is precisely what probe mode
|
|
129
|
-
* broke) and the beat reported exit 0 / `ready: []` / `wedged: null` forever.
|
|
130
|
-
* `/mandrel-deliver` reads that as "waiting", so the `agent::blocked` HITL pause — the
|
|
131
|
-
* 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.
|
|
132
58
|
*
|
|
133
59
|
* @param {Array<{id?: number, number?: number, labels?: string[], state?: string}>} storyRecords
|
|
134
|
-
* @returns {number[]}
|
|
60
|
+
* @returns {number[]}
|
|
135
61
|
*/
|
|
136
62
|
function deriveBlockedIds(storyRecords) {
|
|
137
63
|
return storyRecords
|
|
@@ -142,31 +68,16 @@ function deriveBlockedIds(storyRecords) {
|
|
|
142
68
|
}
|
|
143
69
|
|
|
144
70
|
/**
|
|
145
|
-
*
|
|
146
|
-
*
|
|
147
|
-
*
|
|
148
|
-
*
|
|
149
|
-
*
|
|
150
|
-
* worktree install — so for that whole window a Story another operator is
|
|
151
|
-
* actively delivering still reads `agent::ready` with no in-flight label. A
|
|
152
|
-
* label-only probe classifies it `ready` and hands it to this run, which then
|
|
153
|
-
* dispatches into a guaranteed init failure (the fail-closed lease refuses a
|
|
154
|
-
* foreign assignee) mid-batch. Reading the assignee lets the probe withhold it
|
|
155
|
-
* up front and report who holds it instead.
|
|
156
|
-
*
|
|
157
|
-
* Only Stories that would otherwise be `ready` are considered — a `done`,
|
|
158
|
-
* `blocked`, or already-`executing` Story is handled by its own class, and a
|
|
159
|
-
* self-held assignee is this run's own claim and never withholds.
|
|
160
|
-
*
|
|
161
|
-
* When `self` is unresolved (no `github.operatorHandle`), foreign cannot be
|
|
162
|
-
* told from self, so this returns empty and warns once: the probe is a
|
|
163
|
-
* read-only path that must not fail closed, and init's lease acquire remains
|
|
164
|
-
* 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).
|
|
165
76
|
*
|
|
166
77
|
* @param {Array<{id?: number, number?: number, labels?: string[], state?: string, assignees?: string[]}>} storyRecords
|
|
167
|
-
* @param {string|null|undefined} self
|
|
78
|
+
* @param {string|null|undefined} self Bare operator login for this run.
|
|
168
79
|
* @param {(msg: string) => void} [warn]
|
|
169
|
-
* @returns {Map<number, string>}
|
|
80
|
+
* @returns {Map<number, string>} Story id → holder login.
|
|
170
81
|
*/
|
|
171
82
|
function deriveForeignHeld(storyRecords, self, warn) {
|
|
172
83
|
const held = new Map();
|
|
@@ -190,14 +101,10 @@ function deriveForeignHeld(storyRecords, self, warn) {
|
|
|
190
101
|
}
|
|
191
102
|
|
|
192
103
|
/**
|
|
193
|
-
*
|
|
194
|
-
*
|
|
195
|
-
* Shares `resolve-stories.js`'s provider seam, so probe mode authenticates and
|
|
196
|
-
* targets exactly the same repo `/mandrel-deliver`'s resolution step does. Tests
|
|
197
|
-
* inject a stub provider instead of calling this.
|
|
104
|
+
* Provider + repo coordinates, via `resolve-stories.js`'s provider seam.
|
|
198
105
|
*
|
|
199
106
|
* @param {object} [deps]
|
|
200
|
-
* @param {Function} [deps.resolveProvider]
|
|
107
|
+
* @param {Function} [deps.resolveProvider]
|
|
201
108
|
* @returns {{ provider: object, owner: string|undefined, repo: string|undefined, self: string|null }}
|
|
202
109
|
*/
|
|
203
110
|
export function createProbeContext({
|
|
@@ -208,49 +115,34 @@ export function createProbeContext({
|
|
|
208
115
|
provider,
|
|
209
116
|
owner: config?.github?.owner,
|
|
210
117
|
repo: config?.github?.repo,
|
|
211
|
-
// Bare login
|
|
212
|
-
// `@[USERNAME]` placeholder → null) so it compares against the bare assignee
|
|
213
|
-
// logins GitHub returns; `null` disables assignee-based withholding.
|
|
118
|
+
// Bare login (placeholder → null, which disables lease withholding).
|
|
214
119
|
self: normalizeOperatorHandle(config?.github?.operatorHandle),
|
|
215
120
|
};
|
|
216
121
|
}
|
|
217
122
|
|
|
218
123
|
/**
|
|
219
|
-
* Probe live state
|
|
220
|
-
* `
|
|
221
|
-
*
|
|
222
|
-
*
|
|
223
|
-
*
|
|
224
|
-
* issue state, and the second pass folds those satisfied foreign blockers into
|
|
225
|
-
* `done[]`. Skipping that pass would withhold any Story whose blocker landed
|
|
226
|
-
* 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.
|
|
227
129
|
*
|
|
228
130
|
* @param {object} args
|
|
229
|
-
* @param {number[]} args.ids
|
|
230
|
-
* @param {object} args.provider
|
|
131
|
+
* @param {number[]} args.ids
|
|
132
|
+
* @param {object} args.provider
|
|
231
133
|
* @param {string} [args.owner]
|
|
232
134
|
* @param {string} [args.repo]
|
|
233
135
|
* @param {boolean} [args.native=true] Read native `blocked_by` edges.
|
|
234
|
-
* @param {number[]} [args.dispatched=[]]
|
|
235
|
-
*
|
|
236
|
-
* @param {string|null} [args.self] Resolved bare operator login for this
|
|
237
|
-
* run, used to withhold Stories another operator's lease holds
|
|
238
|
-
* (`deriveForeignHeld`). Absent/unresolved → assignee-based withholding is
|
|
239
|
-
* skipped (the probe never fails closed).
|
|
136
|
+
* @param {number[]} [args.dispatched=[]]
|
|
137
|
+
* @param {string|null} [args.self]
|
|
240
138
|
* @param {(msg: string) => void} [args.warn]
|
|
241
|
-
* Each returned node carries its **live labels**. That is load-bearing, not
|
|
242
|
-
* decoration: `planReadySet` classifies from labels, so a node stripped of
|
|
243
|
-
* them reads as `ready` and an `agent::executing` Story gets re-dispatched
|
|
244
|
-
* onto a second branch while its first run is still going. The resolver's DAG
|
|
245
|
-
* projection (`{id, dependsOn, files}`) drops labels because flag mode's
|
|
246
|
-
* caller tracked in-flight itself; probe mode must put them back.
|
|
247
|
-
*
|
|
248
139
|
* @returns {Promise<{
|
|
249
140
|
* nodes: Array<{id: number, dependsOn: number[], files: string[], body: string, labels: string[]}>,
|
|
250
141
|
* inFlightRecords: Array<{id: number, dependsOn: number[], files: string[], body: string, labels: string[]}>,
|
|
251
142
|
* doneIds: Set<number>,
|
|
252
143
|
* inFlight: number,
|
|
253
144
|
* blockedIds: number[],
|
|
145
|
+
* stalledDispatch: number[],
|
|
254
146
|
* foreignHeld: Array<{id: number, holder: string}>
|
|
255
147
|
* }>}
|
|
256
148
|
*/
|
|
@@ -264,12 +156,8 @@ export async function probeLiveState({
|
|
|
264
156
|
self,
|
|
265
157
|
warn,
|
|
266
158
|
}) {
|
|
267
|
-
//
|
|
268
|
-
//
|
|
269
|
-
// per-beat REPORT on work already admitted. A Story dispatched a moment ago
|
|
270
|
-
// is legitimately unlabelled until `single-story-init.js` flips it — the
|
|
271
|
-
// init window this probe models explicitly — and refusing it here would fail
|
|
272
|
-
// 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.
|
|
273
161
|
const stories = await fetchStories(provider, ids, { allowUnlabelled: true });
|
|
274
162
|
const nativeEdges = native
|
|
275
163
|
? await readNativeEdges({ provider, stories, owner, repo })
|
|
@@ -289,16 +177,13 @@ export async function probeLiveState({
|
|
|
289
177
|
});
|
|
290
178
|
|
|
291
179
|
const labelsById = new Map(stories.map((s) => [s.id, s.labels ?? []]));
|
|
292
|
-
// Bodies
|
|
293
|
-
// declared footprint from the paths a Story's own text names (Story #4875).
|
|
294
|
-
// They are consumed in-process by `planReadySet` and never serialized into
|
|
295
|
-
// the beat envelope, which stays a list of ids.
|
|
180
|
+
// Bodies are consumed in-process only; the beat envelope stays a list of ids.
|
|
296
181
|
const bodyById = new Map(stories.map((s) => [s.id, s.body ?? '']));
|
|
297
|
-
const inFlightIds = deriveInFlightIds(
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
//
|
|
182
|
+
const { inFlight: inFlightIds, unlabelled } = deriveInFlightIds(
|
|
183
|
+
stories,
|
|
184
|
+
dispatched,
|
|
185
|
+
);
|
|
186
|
+
// A foreign-held Story counts as in flight: withheld, and not a false wedge.
|
|
302
187
|
const foreignHeld = deriveForeignHeld(stories, self, warn);
|
|
303
188
|
for (const id of foreignHeld.keys()) inFlightIds.add(id);
|
|
304
189
|
const nodes = envelope.dag.map((node) => ({
|
|
@@ -311,45 +196,28 @@ export async function probeLiveState({
|
|
|
311
196
|
}));
|
|
312
197
|
return {
|
|
313
198
|
nodes,
|
|
314
|
-
//
|
|
315
|
-
// only a count, so it can shrink capacity but can never stop a Story
|
|
316
|
-
// admitted now from sharing files with one dispatched on an earlier beat
|
|
317
|
-
// and still implementing. These records carry the `files[]` and `body` the
|
|
318
|
-
// co-dispatch guard needs, so the kernel can RESERVE those footprints
|
|
319
|
-
// rather than merely count them (Story #4950). No extra fetch: this is a
|
|
320
|
-
// projection of what the probe already read.
|
|
199
|
+
// Records (not just a count) so the kernel can reserve their footprints.
|
|
321
200
|
inFlightRecords: nodes.filter((node) => inFlightIds.has(node.id)),
|
|
322
201
|
doneIds: new Set(envelope.done),
|
|
323
202
|
inFlight: inFlightIds.size,
|
|
324
203
|
blockedIds: deriveBlockedIds(stories),
|
|
204
|
+
// Reported, never released. A foreign lease outranks the claim, so one
|
|
205
|
+
// Story never carries two recoveries.
|
|
206
|
+
stalledDispatch: [...unlabelled]
|
|
207
|
+
.filter((id) => !foreignHeld.has(id))
|
|
208
|
+
.sort((a, b) => a - b),
|
|
325
209
|
foreignHeld: [...foreignHeld].map(([id, holder]) => ({ id, holder })),
|
|
326
210
|
};
|
|
327
211
|
}
|
|
328
212
|
|
|
329
213
|
/**
|
|
330
|
-
*
|
|
331
|
-
* `
|
|
332
|
-
*
|
|
333
|
-
* This is the load-bearing half of the dispatch-window fix, and it is why
|
|
334
|
-
* `inFlight` alone is not enough. The two inputs do **different** jobs inside
|
|
335
|
-
* `planReadySet`:
|
|
336
|
-
*
|
|
337
|
-
* - `inFlight` is only a **count**. It reserves capacity (`slots = cap −
|
|
338
|
-
* inFlight`) and nothing more.
|
|
339
|
-
* - **Eligibility is decided per-record by `classifyStory`**, from labels.
|
|
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.
|
|
340
217
|
*
|
|
341
|
-
*
|
|
342
|
-
*
|
|
343
|
-
*
|
|
344
|
-
* re-dispatched onto its own live branch, with the miscount merely reshaped
|
|
345
|
-
* rather than fixed. Handing the kernel the label makes it apply the rule it
|
|
346
|
-
* already has, and keeps the kernel itself untouched: the adapter's job is to
|
|
347
|
-
* supply the input the kernel's contract ("executing / closing / dispatched-
|
|
348
|
-
* not-yet-labelled") already specifies.
|
|
349
|
-
*
|
|
350
|
-
* @param {string[]} labels The Story's live labels.
|
|
351
|
-
* @param {boolean} inFlight Whether the Story occupies a dispatch slot.
|
|
352
|
-
* @returns {string[]} Labels, with `agent::executing` added when needed.
|
|
218
|
+
* @param {string[]} labels
|
|
219
|
+
* @param {boolean} inFlight
|
|
220
|
+
* @returns {string[]}
|
|
353
221
|
*/
|
|
354
222
|
function projectInFlightLabels(labels, inFlight) {
|
|
355
223
|
if (!inFlight || classifyStory({ labels }) === 'executing') return labels;
|
|
@@ -357,20 +225,10 @@ function projectInFlightLabels(labels, inFlight) {
|
|
|
357
225
|
}
|
|
358
226
|
|
|
359
227
|
/**
|
|
360
|
-
*
|
|
361
|
-
*
|
|
362
|
-
*
|
|
363
|
-
*
|
|
364
|
-
* from live state, so honouring a caller-supplied `--done` alongside it would
|
|
365
|
-
* silently reintroduce the hand-maintained accounting probe mode exists to
|
|
366
|
-
* retire — and quietly disagree with reality when the two differ.
|
|
367
|
-
*
|
|
368
|
-
* `--dispatched` is the deliberate exception, and it is **additive rather than
|
|
369
|
-
* authoritative**: it does not replace the derived in-flight set, it is unioned
|
|
370
|
-
* into it and then filtered by live state (see `deriveInFlightIds`). It carries
|
|
371
|
-
* the one fact the host knows and GitHub does not yet — "I spawned this id, the
|
|
372
|
-
* label has not appeared yet" — so it cannot disagree with reality the way an
|
|
373
|
-
* 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.
|
|
374
232
|
*
|
|
375
233
|
* @param {object} flags
|
|
376
234
|
* @param {boolean} [flags.probeLive]
|