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,14 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Owns CLI flag parsing and the canned `--help` text. Migrated in Story
|
|
5
|
-
* #2989 to delegate the bulk of argv walking to
|
|
6
|
-
* `parseStandardCliArgs`; the wrapper preserves the legacy parsed shape
|
|
7
|
-
* (storyId / epicId are now numbers, the rest of the keys are unchanged).
|
|
8
|
-
*
|
|
9
|
-
* `parseArgs(argv)` is re-exported from `check-baselines.js` and exercised
|
|
10
|
-
* directly by the unit tests, so the function name and signature are
|
|
11
|
-
* load-bearing.
|
|
2
|
+
* check-baselines CLI flag parsing and `--help` text.
|
|
12
3
|
*
|
|
13
4
|
* @module lib/orchestration/check-baselines/phases/parse-args
|
|
14
5
|
*/
|
|
@@ -16,23 +7,19 @@
|
|
|
16
7
|
import { parseStandardCliArgs } from '../../../cli/standard-args.js';
|
|
17
8
|
|
|
18
9
|
export const KNOWN_KINDS = Object.freeze([
|
|
19
|
-
'lint',
|
|
20
10
|
'coverage',
|
|
21
11
|
'crap',
|
|
22
12
|
'maintainability',
|
|
23
13
|
'mutation',
|
|
24
|
-
'lighthouse',
|
|
25
14
|
'bundle-size',
|
|
26
15
|
'duplication',
|
|
27
16
|
]);
|
|
28
17
|
|
|
29
18
|
export const DEFAULT_BASELINE_PATHS = Object.freeze({
|
|
30
|
-
lint: 'baselines/lint.json',
|
|
31
19
|
coverage: 'baselines/coverage.json',
|
|
32
20
|
crap: 'baselines/crap.json',
|
|
33
21
|
maintainability: 'baselines/maintainability.json',
|
|
34
22
|
mutation: 'baselines/mutation.json',
|
|
35
|
-
lighthouse: 'baselines/lighthouse.json',
|
|
36
23
|
'bundle-size': 'baselines/bundle-size.json',
|
|
37
24
|
duplication: 'baselines/duplication.json',
|
|
38
25
|
});
|
|
@@ -55,8 +42,8 @@ Env vars:
|
|
|
55
42
|
re-enforces the ratchet at full strength.
|
|
56
43
|
|
|
57
44
|
Equivalent commit-tagged trigger: a commit in the
|
|
58
|
-
compared range whose subject contains
|
|
59
|
-
'
|
|
45
|
+
compared range whose subject contains
|
|
46
|
+
'baseline-refresh:' AND whose
|
|
60
47
|
diff touches that kind's baseline file. One-shot by
|
|
61
48
|
construction — once merged the refreshed baseline is
|
|
62
49
|
the new base and the tag leaves the range.
|
|
@@ -81,13 +68,7 @@ export function helpReport() {
|
|
|
81
68
|
};
|
|
82
69
|
}
|
|
83
70
|
|
|
84
|
-
/**
|
|
85
|
-
* Comma-split + repeat-aggregate the raw `--gate` tokens collected by
|
|
86
|
-
* the shared parser. The original walker accepted both
|
|
87
|
-
* `--gate coverage,lint` and `--gate coverage --gate lint` and
|
|
88
|
-
* concatenated the values; we replicate that here in a single pass over
|
|
89
|
-
* the `string-multi` array the shared parser produces.
|
|
90
|
-
*/
|
|
71
|
+
/** Accept both `--gate a,b` and repeated `--gate a --gate b`. */
|
|
91
72
|
function flattenGateTokens(raw) {
|
|
92
73
|
if (!Array.isArray(raw) || raw.length === 0) return null;
|
|
93
74
|
const parts = [];
|
|
@@ -102,15 +83,6 @@ function flattenGateTokens(raw) {
|
|
|
102
83
|
}
|
|
103
84
|
|
|
104
85
|
/**
|
|
105
|
-
* Parse the CLI flags. Pure — exported for tests.
|
|
106
|
-
*
|
|
107
|
-
* Note: the migration to `parseStandardCliArgs` (Story #2989) changes
|
|
108
|
-
* `storyId` / `epicId` from string to number — both `parseTicketId`
|
|
109
|
-
* (positive integer, leading `#` stripped, `null` on invalid). The
|
|
110
|
-
* downstream `emitFrictionSignal` short-circuits on falsy, and
|
|
111
|
-
* `signals-writer` documents `storyId` / `epicId` as `number`, so the
|
|
112
|
-
* type alignment fixes a latent string-vs-number mismatch.
|
|
113
|
-
*
|
|
114
86
|
* @param {string[]} argv process.argv.slice(2)
|
|
115
87
|
* @returns {{
|
|
116
88
|
* configPath: string | null,
|
|
@@ -123,12 +95,8 @@ function flattenGateTokens(raw) {
|
|
|
123
95
|
* }}
|
|
124
96
|
*/
|
|
125
97
|
export function parseArgs(argv) {
|
|
126
|
-
//
|
|
127
|
-
// surface a help flag; pre-scan and short-circuit before delegating.
|
|
98
|
+
// The shared parser has no help flag and accepts any `--format` string.
|
|
128
99
|
const helpRequested = argv.some((t) => t === '--help' || t === '-h');
|
|
129
|
-
// Pre-validate `--format` so the legacy "expects json/text" message
|
|
130
|
-
// shape survives. The shared parser would accept any string for an
|
|
131
|
-
// extras `string` flag.
|
|
132
100
|
for (let i = 0; i < argv.length; i += 1) {
|
|
133
101
|
if (argv[i] !== '--format') continue;
|
|
134
102
|
const v = argv[i + 1];
|
|
@@ -151,7 +119,6 @@ export function parseArgs(argv) {
|
|
|
151
119
|
});
|
|
152
120
|
} catch (err) {
|
|
153
121
|
if (err && err.code === 'UNKNOWN_FLAG') {
|
|
154
|
-
// Preserve the legacy `unknown flag "--foo"` phrasing.
|
|
155
122
|
throw new Error(`unknown flag "--${err.flag}"`);
|
|
156
123
|
}
|
|
157
124
|
throw err;
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Orchestrates the per-kind dispatch: filter enabled kinds, fan-out via
|
|
5
|
-
* `Promise.all`, aggregate exit codes through the shared helper, run
|
|
6
|
-
* friction emission, and assemble the final structured report.
|
|
7
|
-
*
|
|
8
|
-
* Extracted from `check-baselines.js` without behavior change.
|
|
2
|
+
* check-baselines dispatch: enabled kinds in parallel, aggregated exit
|
|
3
|
+
* codes, friction emission, final report.
|
|
9
4
|
*
|
|
10
5
|
* @module lib/orchestration/check-baselines/phases/pipeline
|
|
11
6
|
*/
|
|
@@ -58,7 +53,7 @@ function dispatchPerKind({ wanted, quality, env, cwd, configPath }) {
|
|
|
58
53
|
return Promise.all(
|
|
59
54
|
wanted.map((kind) => {
|
|
60
55
|
const gateBlock = quality.gates[kind];
|
|
61
|
-
const scope = resolveDispatchScope({ kind,
|
|
56
|
+
const scope = resolveDispatchScope({ kind, env });
|
|
62
57
|
return evaluateKind({ kind, gateBlock, scope, cwd, configPath, env });
|
|
63
58
|
}),
|
|
64
59
|
);
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Extracted from `evaluate.js`, where it grew from a bundle-size env flag
|
|
5
|
-
* (Story #151) through a maintainability env-or-commit-tag pair (Story #4731)
|
|
6
|
-
* into the kind-generic trigger (Story #4802). Story #5179 narrowed the
|
|
7
|
-
* commit-tag arm from a whole-run blanket to the rows the tagged commit
|
|
8
|
-
* actually refreshed, which is enough logic to own its own module.
|
|
2
|
+
* One-shot baseline refresh acknowledgment, scoped to the rows a tagged
|
|
3
|
+
* commit actually refreshed.
|
|
9
4
|
*
|
|
10
5
|
* @module lib/orchestration/check-baselines/phases/refresh-ack
|
|
11
6
|
*/
|
|
@@ -20,8 +15,8 @@ import { Logger } from '../../../Logger.js';
|
|
|
20
15
|
import { applyTolerance } from './compare.js';
|
|
21
16
|
import { DEFAULT_BASELINE_PATHS } from './parse-args.js';
|
|
22
17
|
|
|
23
|
-
/**
|
|
24
|
-
const
|
|
18
|
+
/** Commit-subject substring that acknowledges a deliberate refresh. */
|
|
19
|
+
const REFRESH_TAG = 'baseline-refresh:';
|
|
25
20
|
|
|
26
21
|
function resolveBaselinePath(kind, gateBlock) {
|
|
27
22
|
const configured =
|
|
@@ -31,34 +26,11 @@ function resolveBaselinePath(kind, gateBlock) {
|
|
|
31
26
|
return configured ?? DEFAULT_BASELINE_PATHS[kind] ?? null;
|
|
32
27
|
}
|
|
33
28
|
|
|
34
|
-
function resolveRefreshTag(gateBlock) {
|
|
35
|
-
return typeof gateBlock?.refreshTag === 'string' &&
|
|
36
|
-
gateBlock.refreshTag.length
|
|
37
|
-
? gateBlock.refreshTag
|
|
38
|
-
: DEFAULT_REFRESH_TAG;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
29
|
/**
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
* the two pre-existing names (`BUNDLE_SIZE_REFRESH`,
|
|
47
|
-
* `MAINTAINABILITY_REFRESH`) keep working unchanged.
|
|
48
|
-
* 2. Commit tag: a commit in the compared range `<baseRef>..HEAD` whose
|
|
49
|
-
* subject contains the configured `refreshTag` AND whose diff touches that
|
|
50
|
-
* kind's baseline file. One-shot by construction — once merged, the
|
|
51
|
-
* refreshed baseline becomes the base and the tag leaves the range.
|
|
52
|
-
*
|
|
53
|
-
* The tag is matched as a plain substring of a conventional commit subject, so
|
|
54
|
-
* commitlint stays satisfied (e.g. `chore(baselines): baseline-refresh: …`).
|
|
55
|
-
*
|
|
56
|
-
* The two arms are reported separately because Story #5179 scopes them
|
|
57
|
-
* differently: see `applyRefreshAcknowledgment`.
|
|
58
|
-
*
|
|
59
|
-
* Fails closed: a kind whose baseline path is neither configured nor present in
|
|
60
|
-
* `DEFAULT_BASELINE_PATHS` simply skips the commit-tag path rather than
|
|
61
|
-
* throwing, leaving that arm un-acknowledged.
|
|
30
|
+
* Refresh trigger: env `<KIND>_REFRESH=1`, or a commit in `<baseRef>..HEAD`
|
|
31
|
+
* whose subject contains the tag (a substring, so commitlint still passes) and
|
|
32
|
+
* whose diff touches the kind's baseline. One-shot: after merge the tag leaves
|
|
33
|
+
* the range. A kind with no known baseline path skips the commit arm.
|
|
62
34
|
*
|
|
63
35
|
* @returns {{ triggered: boolean, reasons: string[], envAcknowledged: boolean,
|
|
64
36
|
* refreshCommits: { sha: string, subject: string }[], baselinePath: string | null }}
|
|
@@ -73,15 +45,14 @@ function resolveRefreshTrigger({ kind, gateBlock, cmp, cwd, env }) {
|
|
|
73
45
|
const refreshCommits = [];
|
|
74
46
|
const baseRef = cmp?.baseRef ?? null;
|
|
75
47
|
if (baseRef && typeof baselinePath === 'string' && baselinePath.length) {
|
|
76
|
-
const refreshTag = resolveRefreshTag(gateBlock);
|
|
77
48
|
const commits = readRangeCommitsTouchingFile(baseRef, baselinePath, {
|
|
78
49
|
cwd,
|
|
79
50
|
});
|
|
80
51
|
for (const commit of commits) {
|
|
81
|
-
if (!commit.subject.includes(
|
|
52
|
+
if (!commit.subject.includes(REFRESH_TAG)) continue;
|
|
82
53
|
refreshCommits.push(commit);
|
|
83
54
|
reasons.push(
|
|
84
|
-
`refresh commit "${commit.subject}" (subject contains ${JSON.stringify(
|
|
55
|
+
`refresh commit "${commit.subject}" (subject contains ${JSON.stringify(REFRESH_TAG)}, touches ${baselinePath})`,
|
|
85
56
|
);
|
|
86
57
|
}
|
|
87
58
|
}
|
|
@@ -96,20 +67,9 @@ function resolveRefreshTrigger({ kind, gateBlock, cmp, cwd, env }) {
|
|
|
96
67
|
}
|
|
97
68
|
|
|
98
69
|
/**
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
* unreadable or unparseable at that ref. The caller treats `null` as "this
|
|
103
|
-
* commit acknowledges nothing", which keeps the ratchet at full strength rather
|
|
104
|
-
* than acknowledging on a guess.
|
|
105
|
-
*
|
|
106
|
-
* A blob that is genuinely ABSENT at the ref reads as `{ rows: [] }`, not
|
|
107
|
-
* `null`. The distinction only matters for the `sha^` read below: the commit
|
|
108
|
-
* that CREATES a baseline has no blob at its parent, and treating that as
|
|
109
|
-
* unreadable would make the first refresh of any kind acknowledge nothing.
|
|
110
|
-
* `readBaseFromGit` already draws exactly this line — `null` for git's exit
|
|
111
|
-
* 128 "path does not exist in this revision", a throw for everything else — so
|
|
112
|
-
* the two cases are distinguishable rather than guessed at.
|
|
70
|
+
* Baseline rows at a ref; `null` (acknowledge nothing) when unreadable. An
|
|
71
|
+
* absent blob reads as `{ rows: [] }` so a baseline-creating commit's `sha^`
|
|
72
|
+
* read still works.
|
|
113
73
|
*
|
|
114
74
|
* @returns {{ rows: Array<object> }|null}
|
|
115
75
|
*/
|
|
@@ -130,24 +90,11 @@ function readRowsAtRef(ref, baselinePath, cwd) {
|
|
|
130
90
|
}
|
|
131
91
|
|
|
132
92
|
/**
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
*
|
|
136
|
-
* rows present in the baseline blob *at* the tagged commit — but a blob is a
|
|
137
|
-
* whole-file snapshot, so it also contains every row an EARLIER, untagged
|
|
138
|
-
* commit on the same branch lowered. Such a row is present at the refresh
|
|
139
|
-
* commit and unchanged at head, so it classified as `ok` and was acknowledged
|
|
140
|
-
* by a commit that never touched it. The observed shape: a branch lowers a
|
|
141
|
-
* maintainability row while refactoring, later refreshes an unrelated CRAP row
|
|
142
|
-
* with a `baseline-refresh:` commit, and the first regression is waved through.
|
|
93
|
+
* Row keys the tagged commit itself rewrote (`sha^ → sha`, no tolerance). The
|
|
94
|
+
* blob at the commit is a whole-file snapshot that also carries rows earlier
|
|
95
|
+
* untagged commits lowered; only this diff attributes a row to the commit.
|
|
143
96
|
*
|
|
144
|
-
*
|
|
145
|
-
* COMMIT rather than about the branch's accumulated state. No tolerance is
|
|
146
|
-
* applied: any movement at all means the commit re-scored that identity, which
|
|
147
|
-
* is the only question being asked here.
|
|
148
|
-
*
|
|
149
|
-
* @returns {Set<string>|null} null when the diff is unusable, which
|
|
150
|
-
* acknowledges nothing from this commit.
|
|
97
|
+
* @returns {Set<string>|null} null (acknowledge nothing) when unusable.
|
|
151
98
|
*/
|
|
152
99
|
function keysTouchedByCommit({ mod, rowsAtSha, rowsAtParent }) {
|
|
153
100
|
try {
|
|
@@ -165,25 +112,10 @@ function keysTouchedByCommit({ mod, rowsAtSha, rowsAtParent }) {
|
|
|
165
112
|
}
|
|
166
113
|
|
|
167
114
|
/**
|
|
168
|
-
* Classify
|
|
169
|
-
*
|
|
170
|
-
*
|
|
171
|
-
*
|
|
172
|
-
* the row property the kind is *about*, which is not always its compare key:
|
|
173
|
-
* CRAP declares `keyField: 'path'` but keys rows as `path::method@startLine`,
|
|
174
|
-
* because one file holds many methods. Reading `row[keyField]` would produce a
|
|
175
|
-
* key matching no regression, silently acknowledging nothing for that kind.
|
|
176
|
-
* `compare()` is the one thing that knows a kind's key, so every key here comes
|
|
177
|
-
* back out of it — the same reason direction and tolerance are delegated rather
|
|
178
|
-
* than reimplemented.
|
|
179
|
-
*
|
|
180
|
-
* That also collapses both tests into one classification:
|
|
181
|
-
*
|
|
182
|
-
* - `regressions` — present in both, worse at head: post-refresh drift.
|
|
183
|
-
* - `improvements` / `unchanged` — present in both, no worse: the rows this
|
|
184
|
-
* commit vouches for.
|
|
185
|
-
* - `additions` — present at head but absent from the refresh blob, i.e.
|
|
186
|
-
* never refreshed by this commit, so deliberately in neither set.
|
|
115
|
+
* Classify head rows against a refresh commit's rows with the kind's own
|
|
116
|
+
* `compare()` and tolerance. Keys always come out of `compare()`: `keyField`
|
|
117
|
+
* is not the compare key (CRAP keys `path::method@startLine`). `ok` =
|
|
118
|
+
* no worse since refresh; `drifted` = worse; additions are in neither.
|
|
187
119
|
*
|
|
188
120
|
* @returns {{ ok: string[], drifted: string[] } | null} null when the
|
|
189
121
|
* classifier is unusable, which acknowledges nothing.
|
|
@@ -210,29 +142,8 @@ function classifyAgainstRefresh({ mod, headRows, refreshRows, tolerance }) {
|
|
|
210
142
|
}
|
|
211
143
|
|
|
212
144
|
/**
|
|
213
|
-
*
|
|
214
|
-
*
|
|
215
|
-
* The acknowledgment is a statement about what a refresh commit re-scored, so a
|
|
216
|
-
* key is acknowledgeable only when the commit both covered it and recorded a
|
|
217
|
-
* value the head has not since fallen below. Both tests come out of
|
|
218
|
-
* `classifyAgainstRefresh` above:
|
|
219
|
-
*
|
|
220
|
-
* 1. **Row membership** — a key absent from the refresh blob lands in
|
|
221
|
-
* `additions`, never in `ok`. This was the larger half of the leak: a
|
|
222
|
-
* single tagged commit cleared regressions on rows in directories it never
|
|
223
|
-
* touched.
|
|
224
|
-
* 2. **No post-refresh drift** — a key worse at head than the commit recorded
|
|
225
|
-
* lands in `drifted`. Drift from commits landing AFTER the refresh is what
|
|
226
|
-
* "the baseline commit must be the branch's last score-moving commit" asks
|
|
227
|
-
* for by convention and nothing enforced.
|
|
228
|
-
* 3. **The commit actually rewrote it** (Story #5277) — `keysTouchedByCommit`
|
|
229
|
-
* diffs `sha^ → sha`. Tests 1 and 2 both read the blob AT the commit,
|
|
230
|
-
* which is a whole-file snapshot and therefore also carries rows an
|
|
231
|
-
* earlier untagged commit lowered; those rows passed both tests without
|
|
232
|
-
* the tagged commit having touched them.
|
|
233
|
-
*
|
|
234
|
-
* Fails closed at every step: an unreadable blob, a missing `compare`, or a
|
|
235
|
-
* classifier that throws contributes nothing, so those regressions stand.
|
|
145
|
+
* Regression keys a tagged commit acknowledges: in its blob, not drifted worse
|
|
146
|
+
* since, and actually rewritten by that commit. Fails closed at every step.
|
|
236
147
|
*
|
|
237
148
|
* @returns {Set<string>}
|
|
238
149
|
*/
|
|
@@ -258,9 +169,7 @@ function acknowledgeableKeys({
|
|
|
258
169
|
if (typeof mod?.compare !== 'function') return acknowledgeable;
|
|
259
170
|
|
|
260
171
|
const headRows = Array.isArray(headBaseline?.rows) ? headBaseline.rows : [];
|
|
261
|
-
//
|
|
262
|
-
// refresh already ruled on is not reopened by an older one: the newest is the
|
|
263
|
-
// state the branch is asking to be held to.
|
|
172
|
+
// Newest-first: an older refresh never reopens a key a newer one ruled on.
|
|
264
173
|
const decided = new Set();
|
|
265
174
|
for (const { sha } of refreshCommits) {
|
|
266
175
|
const atSha = readRowsAtRef(sha, baselinePath, cwd);
|
|
@@ -313,27 +222,10 @@ function logAcknowledgment({ kind, reasons, acknowledged, kept }) {
|
|
|
313
222
|
}
|
|
314
223
|
|
|
315
224
|
/**
|
|
316
|
-
*
|
|
317
|
-
*
|
|
318
|
-
*
|
|
319
|
-
*
|
|
320
|
-
* the new base and the tag leaves the range, so the ratchet returns to full
|
|
321
|
-
* strength automatically.
|
|
322
|
-
*
|
|
323
|
-
* The two trigger arms are scoped differently, deliberately:
|
|
324
|
-
*
|
|
325
|
-
* - **Commit tag** — scoped to the rows the tagged commits actually rewrote,
|
|
326
|
-
* per `acknowledgeableKeys`. Before Story #5179 this cleared every regression
|
|
327
|
-
* in the range, so a branch merged carrying a stale row and the ratchet ran
|
|
328
|
-
* loose on that file; the failure recurred six times. Story #5277 closed the
|
|
329
|
-
* remainder: the scoping read the blob at the tagged commit, which still
|
|
330
|
-
* carried rows an earlier untagged commit had lowered.
|
|
331
|
-
* - **Env parity** (`<KIND>_REFRESH=1`) — stays whole-run. There is no commit to
|
|
332
|
-
* anchor row-scoping to, and setting the variable is an explicit, deliberate
|
|
333
|
-
* operator act rather than a signal inferred from history.
|
|
334
|
-
*
|
|
335
|
-
* A no-op absent a trigger, so an unacknowledged run of any kind reports its
|
|
336
|
-
* regressions exactly as before.
|
|
225
|
+
* When triggered, demote acknowledged regressions to `unchanged` for this run
|
|
226
|
+
* only (floors still apply; nothing persists). The commit-tag arm is scoped to
|
|
227
|
+
* rewritten rows; the env arm stays whole-run, as an explicit operator act
|
|
228
|
+
* with no commit to anchor to.
|
|
337
229
|
*
|
|
338
230
|
* @returns {{ compareOutput: object, acknowledged: boolean, acknowledgedKeys: string[] }}
|
|
339
231
|
*/
|
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Formats the structured report for stdout. Pure. Extracted verbatim from
|
|
5
|
-
* `check-baselines.js`; the public `formatReport(report, format)` named
|
|
6
|
-
* export is preserved on the CLI shell for test consumers.
|
|
2
|
+
* Formats the check-baselines report for stdout.
|
|
7
3
|
*
|
|
8
4
|
* @module lib/orchestration/check-baselines/phases/report
|
|
9
5
|
*/
|
|
@@ -27,18 +23,12 @@ function formatGateLine(g) {
|
|
|
27
23
|
? ''
|
|
28
24
|
: ` [kernel drift ${g.kernelBaseline} → ${g.kernelCurrent}]`;
|
|
29
25
|
const baseRef = g.baseRef ? ` [baseRef=${g.baseRef}]` : '';
|
|
30
|
-
//
|
|
31
|
-
// regressions and zero additions, which is indistinguishable from a clean
|
|
32
|
-
// run unless the text report says so out loud.
|
|
26
|
+
// A compare that never ran would otherwise read as a clean run.
|
|
33
27
|
const baseRead =
|
|
34
28
|
g.baseRef && g.baseRead === false
|
|
35
29
|
? ' [baseRead=false — compare skipped]'
|
|
36
30
|
: '';
|
|
37
|
-
//
|
|
38
|
-
// the count says how much was cleared and the status ahead of it still shows
|
|
39
|
-
// FAIL when regressions outside those rows survived. `buildGateReport` always
|
|
40
|
-
// sets `acknowledgedKeys` alongside `acknowledged` from the same result
|
|
41
|
-
// object, so the array needs no guard of its own here.
|
|
31
|
+
// `acknowledgedKeys` is always set alongside `acknowledged`.
|
|
42
32
|
const ack = g.acknowledged
|
|
43
33
|
? ` [ACKNOWLEDGED ${g.acknowledgedKeys.length} row(s) — this run only]`
|
|
44
34
|
: '';
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
// .agents/scripts/lib/orchestration/check-state.js
|
|
2
|
+
/**
|
|
3
|
+
* check-state.js — the one CI check-state classifier and rerun rule; the
|
|
4
|
+
* merge wait and recovery watch keep separate sources but adapt through here
|
|
5
|
+
* so a GitHub state means the same on both sides. Pure.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/** A `Map` so a key like `constructor` cannot hit a prototype member. */
|
|
9
|
+
const RAW_TO_OUTCOME = new Map([
|
|
10
|
+
// Still running — the only non-terminal outcome.
|
|
11
|
+
['', 'pending'],
|
|
12
|
+
['pending', 'pending'],
|
|
13
|
+
['queued', 'pending'],
|
|
14
|
+
['in_progress', 'pending'],
|
|
15
|
+
['requested', 'pending'],
|
|
16
|
+
['waiting', 'pending'],
|
|
17
|
+
['expected', 'pending'],
|
|
18
|
+
['success', 'success'],
|
|
19
|
+
['completed', 'success'],
|
|
20
|
+
['pass', 'success'],
|
|
21
|
+
['failure', 'failure'],
|
|
22
|
+
['startup_failure', 'failure'],
|
|
23
|
+
['error', 'failure'],
|
|
24
|
+
['fail', 'failure'],
|
|
25
|
+
['neutral', 'neutral'],
|
|
26
|
+
['cancelled', 'cancelled'],
|
|
27
|
+
['cancel', 'cancelled'],
|
|
28
|
+
['timed_out', 'timed_out'],
|
|
29
|
+
['action_required', 'action_required'],
|
|
30
|
+
['stale', 'stale'],
|
|
31
|
+
['skipped', 'skipped'],
|
|
32
|
+
['skipping', 'skipped'],
|
|
33
|
+
]);
|
|
34
|
+
|
|
35
|
+
const NON_FAILING_OUTCOMES = new Set(['success', 'neutral', 'skipped']);
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Unknown → `skipped`, so a new GitHub state cannot wedge a poll loop.
|
|
39
|
+
*
|
|
40
|
+
* @param {unknown} raw
|
|
41
|
+
* @returns {string}
|
|
42
|
+
*/
|
|
43
|
+
function classifyCheckState(raw) {
|
|
44
|
+
const key = String(raw ?? '')
|
|
45
|
+
.trim()
|
|
46
|
+
.toLowerCase();
|
|
47
|
+
return RAW_TO_OUTCOME.get(key) ?? 'skipped';
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* @param {string} outcome A {@link classifyCheckState} result.
|
|
52
|
+
* @returns {'pass'|'fail'|'pending'}
|
|
53
|
+
*/
|
|
54
|
+
export function checkVerdict(outcome) {
|
|
55
|
+
if (outcome === 'pending') return 'pending';
|
|
56
|
+
return NON_FAILING_OUTCOMES.has(outcome) ? 'pass' : 'fail';
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* CheckRun (`status`/`conclusion`) or legacy StatusContext (`state`).
|
|
61
|
+
*
|
|
62
|
+
* @param {{ status?: string, conclusion?: string, state?: string }} [check]
|
|
63
|
+
* @returns {string}
|
|
64
|
+
*/
|
|
65
|
+
export function classifyRollupEntry(check) {
|
|
66
|
+
const conclusion = String(check?.conclusion ?? '').trim();
|
|
67
|
+
if (conclusion) return classifyCheckState(conclusion);
|
|
68
|
+
const status = String(check?.status ?? '').trim();
|
|
69
|
+
if (status && status.toUpperCase() !== 'COMPLETED') return 'pending';
|
|
70
|
+
return classifyCheckState(check?.state ?? status);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* @param {{ state?: string, bucket?: string }} [entry]
|
|
75
|
+
* @returns {string}
|
|
76
|
+
*/
|
|
77
|
+
export function classifyRequiredCheck(entry) {
|
|
78
|
+
return classifyCheckState(entry?.state || entry?.bucket || '');
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* A red required check is never re-run by automation (fix on a new head)
|
|
83
|
+
* unless a `file-ci-gap.js` verdict is recorded for this head; an advisory
|
|
84
|
+
* check may be. Anything not `required: false` counts as required.
|
|
85
|
+
*
|
|
86
|
+
* @param {{ required?: boolean, allowanceRecorded?: boolean }} [check]
|
|
87
|
+
* @returns {boolean}
|
|
88
|
+
*/
|
|
89
|
+
export function isRerunPermitted({ required, allowanceRecorded = false } = {}) {
|
|
90
|
+
if (required === false) return true;
|
|
91
|
+
return allowanceRecorded === true;
|
|
92
|
+
}
|