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,31 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* The `--auto` sweep's whole value is memory: `baselines/audit-ledger.json`
|
|
5
|
-
* is what lets the next run tell a re-detection from a fresh finding and an
|
|
6
|
-
* accepted risk from an unseen one. A scheduled sweep, though, typically runs
|
|
7
|
-
* on an ephemeral checkout — a fresh clone that is deleted when the job ends —
|
|
8
|
-
* so the ledger `--auto` writes is discarded and every later sweep starts from
|
|
9
|
-
* an empty memory. The sweep is then permanently amnesiac, and the ledger's
|
|
10
|
-
* suppression and regression signals never fire.
|
|
11
|
-
*
|
|
12
|
-
* This module closes that hole from both ends:
|
|
13
|
-
*
|
|
14
|
-
* - {@link runLedgerCommit} (`--auto --ledger-commit`) commits the changed
|
|
15
|
-
* ledger onto a `chore/audit-ledger-<YYYY-MM-DD>-<shortsha>` branch cut
|
|
16
|
-
* from `origin/<base>`, pushes it, and opens a PR against
|
|
17
|
-
* `project.baseBranch` through the `gh` wrapper.
|
|
18
|
-
* Auto-merge is never requested: a ledger PR records machine-derived state
|
|
19
|
-
* a human should glance at, so landing it stays an operator decision.
|
|
20
|
-
* - {@link resolveLedgerSummary} answers the question the *unflagged* sweep
|
|
21
|
-
* needs — "would this ledger survive?" — so a run that cannot persist (no
|
|
22
|
-
* `origin`, or HEAD parked off the base branch) says so in its summary,
|
|
23
|
-
* and on stderr, instead of silently discarding the state.
|
|
24
|
-
*
|
|
25
|
-
* Both take injectable `git` / `gh` seams (`.agents/rules/test-seams.md`) so
|
|
26
|
-
* the branch/commit/push/PR argv shape is assertable without a live remote.
|
|
27
|
-
* The logic lives here rather than in `audit-to-stories.js` so the CLI file's
|
|
28
|
-
* complexity budget does not absorb a git driver.
|
|
2
|
+
* Persist the cross-run audit ledger, which an ephemeral checkout would
|
|
3
|
+
* otherwise discard.
|
|
29
4
|
*/
|
|
30
5
|
|
|
31
6
|
import { DEFAULT_LEDGER_PATH } from '../findings/audit-ledger.js';
|
|
@@ -33,12 +8,9 @@ import { gh as defaultGh } from '../gh-exec.js';
|
|
|
33
8
|
import { gitSync } from '../git-utils.js';
|
|
34
9
|
import { openLedgerPullRequest, probeGit } from './ledger-pr.js';
|
|
35
10
|
|
|
36
|
-
/** Fallback base branch when config carries no `project.baseBranch`. */
|
|
37
11
|
const DEFAULT_BASE_BRANCH = 'main';
|
|
38
12
|
|
|
39
13
|
/**
|
|
40
|
-
* Render the `YYYY-MM-DD` stamp both the branch name and the commit subject
|
|
41
|
-
* carry, so one sweep produces one identifiable ledger branch per day.
|
|
42
14
|
* @param {Date|string|number} [now]
|
|
43
15
|
* @returns {string}
|
|
44
16
|
*/
|
|
@@ -48,9 +20,8 @@ function isoDate(now) {
|
|
|
48
20
|
}
|
|
49
21
|
|
|
50
22
|
/**
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
* has already done its real work.
|
|
23
|
+
* Explicit, then config, then `main`; a failed config resolve must never break
|
|
24
|
+
* a sweep that has already done its work.
|
|
54
25
|
* @param {string} [explicit]
|
|
55
26
|
* @returns {Promise<string>}
|
|
56
27
|
*/
|
|
@@ -67,18 +38,12 @@ async function resolveBaseBranch(explicit) {
|
|
|
67
38
|
}
|
|
68
39
|
|
|
69
40
|
/**
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
* public surface, so a probe helper never becomes a second way in.
|
|
73
|
-
*
|
|
74
|
-
* `unpersisted` is the signal the unflagged `--auto` summary carries: the
|
|
75
|
-
* sweep produced new memory, and this checkout has nowhere to put it — either
|
|
76
|
-
* there is no `origin` to push to or HEAD is not on the base branch, so a
|
|
77
|
-
* commit here would not reach the repository's shared state.
|
|
41
|
+
* `unpersisted`: the ledger changed but there is no `origin` or HEAD is off
|
|
42
|
+
* the base branch, so a commit here would not reach shared state.
|
|
78
43
|
*
|
|
79
44
|
* @param {object} [params]
|
|
80
|
-
* @param {string} [params.ledgerPath]
|
|
81
|
-
* @param {string} [params.baseBranch]
|
|
45
|
+
* @param {string} [params.ledgerPath]
|
|
46
|
+
* @param {string} [params.baseBranch]
|
|
82
47
|
* @param {string} [params.cwd]
|
|
83
48
|
* @param {(cwd: string, ...args: string[]) => string} [params.git]
|
|
84
49
|
* @returns {Promise<{ ledgerPath: string, baseBranch: string, changed: boolean,
|
|
@@ -109,8 +74,7 @@ async function assessLedgerPersistence({
|
|
|
109
74
|
}
|
|
110
75
|
|
|
111
76
|
/**
|
|
112
|
-
*
|
|
113
|
-
* unrelated dirt in the checkout is never mistaken for it.
|
|
77
|
+
* Pathspec-scoped, so unrelated dirt never counts.
|
|
114
78
|
* @param {(args: string[]) => string} probe
|
|
115
79
|
* @param {string} ledgerPath
|
|
116
80
|
* @returns {boolean}
|
|
@@ -120,8 +84,6 @@ function ledgerIsDirty(probe, ledgerPath) {
|
|
|
120
84
|
}
|
|
121
85
|
|
|
122
86
|
/**
|
|
123
|
-
* Is there an `origin` to push to at all? The ephemeral-clone shape that makes
|
|
124
|
-
* a sweep amnesiac usually has none.
|
|
125
87
|
* @param {(args: string[]) => string} probe
|
|
126
88
|
* @returns {boolean}
|
|
127
89
|
*/
|
|
@@ -133,9 +95,7 @@ function hasOriginRemote(probe) {
|
|
|
133
95
|
}
|
|
134
96
|
|
|
135
97
|
/**
|
|
136
|
-
*
|
|
137
|
-
* commits — both of which read as "not the base branch", which is the answer
|
|
138
|
-
* the callers need.
|
|
98
|
+
* `''` when detached or commitless — both read as "not the base branch".
|
|
139
99
|
* @param {(args: string[]) => string} probe
|
|
140
100
|
* @returns {string}
|
|
141
101
|
*/
|
|
@@ -144,8 +104,6 @@ function headBranchOf(probe) {
|
|
|
144
104
|
}
|
|
145
105
|
|
|
146
106
|
/**
|
|
147
|
-
* Warn that the reconciled ledger has nowhere to go. Names the file, because
|
|
148
|
-
* "state will be lost" is unactionable without knowing which state.
|
|
149
107
|
* @param {{ ledgerPath: string, baseBranch: string, hasOrigin: boolean, headBranch: string }} state
|
|
150
108
|
* @returns {string}
|
|
151
109
|
*/
|
|
@@ -157,19 +115,14 @@ function unpersistedWarning(state) {
|
|
|
157
115
|
}
|
|
158
116
|
|
|
159
117
|
/**
|
|
160
|
-
*
|
|
161
|
-
*
|
|
162
|
-
* this checkout cannot keep.
|
|
163
|
-
*
|
|
164
|
-
* The whole decision lives here rather than in the CLI so `runAuto` stays a
|
|
165
|
-
* straight-line assembly of its summary: `dryRun` and `ledgerCommit` are
|
|
166
|
-
* passed through raw and branched on once, in one place.
|
|
118
|
+
* Marks the summary `unpersisted: true` (and warns) when the checkout cannot
|
|
119
|
+
* keep the new memory.
|
|
167
120
|
*
|
|
168
121
|
* @param {object} [params]
|
|
169
|
-
* @param {object|null} [params.ledger]
|
|
122
|
+
* @param {object|null} [params.ledger]
|
|
170
123
|
* @param {string} [params.ledgerPath]
|
|
171
|
-
* @param {boolean} [params.dryRun]
|
|
172
|
-
* @param {boolean} [params.ledgerCommit]
|
|
124
|
+
* @param {boolean} [params.dryRun]
|
|
125
|
+
* @param {boolean} [params.ledgerCommit]
|
|
173
126
|
* @param {string} [params.cwd]
|
|
174
127
|
* @param {(cwd: string, ...args: string[]) => string} [params.git]
|
|
175
128
|
* @param {{ warn: Function }} [params.logger]
|
|
@@ -192,13 +145,8 @@ export async function resolveLedgerSummary({
|
|
|
192
145
|
}
|
|
193
146
|
|
|
194
147
|
/**
|
|
195
|
-
*
|
|
196
|
-
*
|
|
197
|
-
*
|
|
198
|
-
* Assesses the checkout, then hands the whole write sequence to
|
|
199
|
-
* {@link openLedgerPullRequest}. Every git/`gh` failure is fatal and names its
|
|
200
|
-
* step; the caller runs this *after* printing the run summary, so a broken
|
|
201
|
-
* remote never costs the operator the sweep's findings.
|
|
148
|
+
* Failures are fatal and name their step; callers run this after printing the
|
|
149
|
+
* run summary so a broken remote never costs the sweep's findings.
|
|
202
150
|
*
|
|
203
151
|
* @param {object} [params]
|
|
204
152
|
* @param {string} [params.ledgerPath]
|
|
@@ -1,22 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* The mechanical half of `--ledger-commit`: how the branch is named, when the
|
|
5
|
-
* checkout is refused, the commit sequence itself, the push, and the PR body.
|
|
6
|
-
* `ledger-commit.js` next door keeps only the two entry points and the
|
|
7
|
-
* persistence assessment they share, so the run sequence there reads as a
|
|
8
|
-
* sequence rather than as a git driver.
|
|
9
|
-
*
|
|
10
|
-
* Every refusal in this module happens **before** its first write, so a refused
|
|
11
|
-
* run cannot have left a branch or a commit behind. The git and `gh` seams are
|
|
12
|
-
* injected (`.agents/rules/test-seams.md`), so the whole retry matrix is
|
|
13
|
-
* assertable without a live remote.
|
|
2
|
+
* The `--ledger-commit` write sequence. Every refusal precedes the first
|
|
3
|
+
* write.
|
|
14
4
|
*/
|
|
15
5
|
|
|
16
6
|
/**
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* a crash. The write path uses `runStep` instead, where a failure IS fatal.
|
|
7
|
+
* Read-only git probe that never throws; a checkout with no commits is an
|
|
8
|
+
* answer, not a crash. Writes use `runStep`, where failure is fatal.
|
|
20
9
|
*
|
|
21
10
|
* @param {(cwd: string, ...args: string[]) => string} git
|
|
22
11
|
* @param {string} cwd
|
|
@@ -33,9 +22,6 @@ export function probeGit(git, cwd, args) {
|
|
|
33
22
|
}
|
|
34
23
|
|
|
35
24
|
/**
|
|
36
|
-
* Does a ref resolve in this checkout? Read-only, and never fatal — an absent
|
|
37
|
-
* ref is the answer, not an error.
|
|
38
|
-
*
|
|
39
25
|
* @param {(cwd: string, ...args: string[]) => string} git
|
|
40
26
|
* @param {string} cwd
|
|
41
27
|
* @param {string} ref
|
|
@@ -48,14 +34,9 @@ function refExists(git, cwd, ref) {
|
|
|
48
34
|
}
|
|
49
35
|
|
|
50
36
|
/**
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
* the same day found `chore/audit-ledger-<date>` already present and failed at
|
|
55
|
-
* `create-branch`, so the *first* failure (usually a push) permanently poisoned
|
|
56
|
-
* every retry that day. Qualifying the name with the base commit makes it
|
|
57
|
-
* unique across bases while staying **deterministic** for the same base — which
|
|
58
|
-
* is exactly what lets a retry recognise its own half-finished branch.
|
|
37
|
+
* Qualifies the branch name so it is unique across bases (a same-day retry
|
|
38
|
+
* must not collide) yet deterministic per base (so a retry recognises its own
|
|
39
|
+
* half-finished branch).
|
|
59
40
|
*
|
|
60
41
|
* @param {(cwd: string, ...args: string[]) => string} git
|
|
61
42
|
* @param {string} cwd
|
|
@@ -71,14 +52,8 @@ function shortSha(git, cwd, baseRef) {
|
|
|
71
52
|
}
|
|
72
53
|
|
|
73
54
|
/**
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
* A ledger branch that exists locally and has never been pushed is the wreckage
|
|
77
|
-
* of a failed run, not a landed one: its commit is already made, so the work
|
|
78
|
-
* left is the push and the PR. Recognising it is what turns a failed push plus
|
|
79
|
-
* its retry into exactly one PR instead of a stranded branch and a run
|
|
80
|
-
* reporting `ledger-unchanged` — which is what the ledger file honestly is once
|
|
81
|
-
* its change has been committed onto that branch.
|
|
55
|
+
* A local, never-pushed ledger branch is a failed run's commit: resume at the
|
|
56
|
+
* push, so a failed push plus its retry yields exactly one PR.
|
|
82
57
|
*
|
|
83
58
|
* @param {{ git: Function, cwd: string, base: string, date: string }} params
|
|
84
59
|
* @returns {{ branch: string, resuming: boolean }}
|
|
@@ -94,14 +69,8 @@ function resolveLedgerBranch({ git, cwd, base, date }) {
|
|
|
94
69
|
}
|
|
95
70
|
|
|
96
71
|
/**
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
* no branch and no commit behind.
|
|
100
|
-
*
|
|
101
|
-
* HEAD parked off the base branch is the one an unattended sweep actually
|
|
102
|
-
* meets: a job that has already checked out a feature branch would otherwise
|
|
103
|
-
* cut its ledger branch from that branch's tip and open a PR carrying every
|
|
104
|
-
* unrelated commit on it.
|
|
72
|
+
* Refuses before any write. HEAD off the base branch would cut the ledger
|
|
73
|
+
* branch from a feature tip and carry its unrelated commits into the PR.
|
|
105
74
|
*
|
|
106
75
|
* @param {{ hasOrigin: boolean, onBaseBranch: boolean, headBranch: string,
|
|
107
76
|
* baseBranch: string }} state
|
|
@@ -125,10 +94,6 @@ function assertCommittable(state, branch) {
|
|
|
125
94
|
}
|
|
126
95
|
|
|
127
96
|
/**
|
|
128
|
-
* Extract the PR URL `gh pr create` prints, so the caller can name it in the
|
|
129
|
-
* run summary. A wrapper that returns something else yields `null` rather than
|
|
130
|
-
* a fabricated link.
|
|
131
|
-
*
|
|
132
97
|
* @param {unknown} result
|
|
133
98
|
* @returns {string|null}
|
|
134
99
|
*/
|
|
@@ -139,8 +104,6 @@ function pullRequestUrl(result) {
|
|
|
139
104
|
}
|
|
140
105
|
|
|
141
106
|
/**
|
|
142
|
-
* Wrap one write step so a git or `gh` failure surfaces as a fatal error that
|
|
143
|
-
* names the step that broke. Accepts sync and async steps alike.
|
|
144
107
|
* @param {string} name
|
|
145
108
|
* @param {() => unknown} fn
|
|
146
109
|
* @returns {Promise<unknown>}
|
|
@@ -157,8 +120,6 @@ async function runStep(name, fn) {
|
|
|
157
120
|
}
|
|
158
121
|
|
|
159
122
|
/**
|
|
160
|
-
* Compose the ledger PR body. Kept separate so the step sequence below reads
|
|
161
|
-
* as a sequence and not as a string-building exercise.
|
|
162
123
|
* @param {string} ledgerPath
|
|
163
124
|
* @param {string} date
|
|
164
125
|
* @returns {string}
|
|
@@ -179,10 +140,6 @@ function pullRequestBody(ledgerPath, date) {
|
|
|
179
140
|
}
|
|
180
141
|
|
|
181
142
|
/**
|
|
182
|
-
* Cut the ledger branch from `origin/<base>` and commit the ledger onto it —
|
|
183
|
-
* or, when `resuming`, simply check out the branch a failed run already
|
|
184
|
-
* committed onto, because those steps have already succeeded.
|
|
185
|
-
*
|
|
186
143
|
* @param {object} ctx
|
|
187
144
|
* @returns {Promise<void>}
|
|
188
145
|
*/
|
|
@@ -196,7 +153,6 @@ async function commitLedgerOnto({
|
|
|
196
153
|
resuming = false,
|
|
197
154
|
}) {
|
|
198
155
|
if (resuming) {
|
|
199
|
-
// The commit already exists on that branch; all it is missing is a push.
|
|
200
156
|
await runStep('resume-branch', () => git(cwd, 'checkout', branch));
|
|
201
157
|
return;
|
|
202
158
|
}
|
|
@@ -205,18 +161,14 @@ async function commitLedgerOnto({
|
|
|
205
161
|
git(cwd, 'checkout', '-b', branch, `origin/${base}`),
|
|
206
162
|
);
|
|
207
163
|
await runStep('stage-ledger', () => git(cwd, 'add', '--', ledgerPath));
|
|
208
|
-
// The
|
|
209
|
-
// the sweep's checkout carries unrelated dirt.
|
|
164
|
+
// The pathspec keeps the commit ledger-only in a dirty checkout.
|
|
210
165
|
await runStep('commit-ledger', () =>
|
|
211
166
|
git(cwd, 'commit', '-m', subject, '--', ledgerPath),
|
|
212
167
|
);
|
|
213
168
|
}
|
|
214
169
|
|
|
215
170
|
/**
|
|
216
|
-
*
|
|
217
|
-
*
|
|
218
|
-
* Auto-merge is never requested: the ledger records machine-derived lifecycle
|
|
219
|
-
* state a human should glance at, so landing it stays an operator decision.
|
|
171
|
+
* Never requests auto-merge: landing the ledger stays an operator decision.
|
|
220
172
|
*
|
|
221
173
|
* @param {object} ctx
|
|
222
174
|
* @returns {Promise<string|null>}
|
|
@@ -251,12 +203,8 @@ async function pushAndOpenPullRequest({
|
|
|
251
203
|
}
|
|
252
204
|
|
|
253
205
|
/**
|
|
254
|
-
*
|
|
255
|
-
*
|
|
256
|
-
* Best-effort by design, and called from a `finally`: on the failure path
|
|
257
|
-
* especially — where the next thing the operator runs is the retry — leaving
|
|
258
|
-
* them parked on a half-finished ledger branch is its own defect, but a failure
|
|
259
|
-
* to restore must never mask the failure that caused it.
|
|
206
|
+
* Best-effort, from a `finally`: a failed restore must never mask the failure
|
|
207
|
+
* that caused it.
|
|
260
208
|
*
|
|
261
209
|
* @param {{ git: Function, cwd: string, startBranch: string, branch: string }} params
|
|
262
210
|
*/
|
|
@@ -265,28 +213,12 @@ function restoreBranch({ git, cwd, startBranch, branch }) {
|
|
|
265
213
|
try {
|
|
266
214
|
git(cwd, 'checkout', startBranch);
|
|
267
215
|
} catch (_) {
|
|
268
|
-
// Deliberately swallowed
|
|
216
|
+
// Deliberately swallowed.
|
|
269
217
|
}
|
|
270
218
|
}
|
|
271
219
|
|
|
272
220
|
/**
|
|
273
|
-
*
|
|
274
|
-
* refuse or skip, cut (or resume) the branch, push, open the PR, and put the
|
|
275
|
-
* checkout back where it started.
|
|
276
|
-
*
|
|
277
|
-
* **Re-runnable**, which is the property an unattended sweep needs. The two
|
|
278
|
-
* ways a retry used to misbehave are both closed here:
|
|
279
|
-
*
|
|
280
|
-
* - The branch name is qualified by the base commit, so a same-day retry no
|
|
281
|
-
* longer collides with the branch a failed run left behind.
|
|
282
|
-
* - A ledger already committed on an **unpushed** ledger branch resumes at
|
|
283
|
-
* the push rather than reporting `ledger-unchanged` (the ledger file is
|
|
284
|
-
* clean — it is committed, just not pushed) and abandoning the work.
|
|
285
|
-
* Across a failed push and its retry that yields exactly one PR.
|
|
286
|
-
*
|
|
287
|
-
* The branch the run started on is restored in a `finally`, so a failure
|
|
288
|
-
* anywhere in the sequence — and success alike — leaves the operator's checkout
|
|
289
|
-
* where they left it rather than parked on a ledger branch.
|
|
221
|
+
* Re-runnable; always restores the starting branch.
|
|
290
222
|
*
|
|
291
223
|
* @param {{ state: object, ledgerPath: string, cwd: string, git: Function,
|
|
292
224
|
* gh: object, date: string }} params
|
|
@@ -1,24 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* The cross-run ledger can only suppress an already-filed finding if something
|
|
5
|
-
* tells it the finding was filed. Until Story #5305 nothing did: the reconcile
|
|
6
|
-
* ran *during* the scan, before any Issue existed, and its `issueStates` were
|
|
7
|
-
* derived from `matchedIssues` — the Issues dedup FOUND. A group classified
|
|
8
|
-
* `create` has none, so a freshly opened Issue contributed nothing and its
|
|
9
|
-
* entry persisted as `status: "new", issue: null` forever. On a host where
|
|
10
|
-
* GitHub-search dedup works that is invisible; on one where it cannot run,
|
|
11
|
-
* nothing suppresses anything and every sweep re-files everything.
|
|
12
|
-
*
|
|
13
|
-
* The missing input is the `groupKey → issueNumber` map, which exists only
|
|
14
|
-
* after the Issues are opened. `--wire-edges` already takes exactly that map
|
|
15
|
-
* and is already a required pass, which is why the record rides along with it
|
|
16
|
-
* rather than arriving as a second command an operator must remember.
|
|
17
|
-
*
|
|
18
|
-
* Nothing here reaches the network: the caller hands over the map it already
|
|
19
|
-
* holds, and the only I/O is the ledger read/write this module delegates to
|
|
20
|
-
* `ledger.js`. That is what lets the record run BEFORE the provider is loaded,
|
|
21
|
-
* so a host whose provider cannot be constructed still records what it filed.
|
|
2
|
+
* Record what a run filed onto the ledger so the next run suppresses it even
|
|
3
|
+
* without search dedup. No network: runs before the provider loads.
|
|
22
4
|
*/
|
|
23
5
|
|
|
24
6
|
import {
|
|
@@ -33,27 +15,13 @@ import {
|
|
|
33
15
|
} from './finding-adapter.js';
|
|
34
16
|
|
|
35
17
|
/**
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
* Only groups present in the map contribute. A group the map does not mention
|
|
40
|
-
* was not opened — deduped, ledger-suppressed, or simply skipped — and
|
|
41
|
-
* inventing an Issue state for it is how a finding gets suppressed against an
|
|
42
|
-
* Issue that does not exist.
|
|
43
|
-
*
|
|
44
|
-
* Every recorded state is `open`: the map names Issues this run just created,
|
|
45
|
-
* and a just-created Issue is open. A later close is learned from the live
|
|
46
|
-
* lookup on the next run, where it outranks this record (`decideStatus` reads
|
|
47
|
-
* the closed-Issue branch first).
|
|
18
|
+
* Only mapped groups contribute; inventing a state for an unopened group would
|
|
19
|
+
* suppress a finding against an Issue that does not exist. Every state is
|
|
20
|
+
* `open` — a later close is learned live next run and outranks this record.
|
|
48
21
|
*
|
|
49
22
|
* @param {object} params
|
|
50
23
|
* @param {Array<object>} params.groups — the `create`-eligible groups.
|
|
51
24
|
* @param {Record<string, number>} params.issueByGroupKey — group key → issue number.
|
|
52
|
-
* Module-internal: `recordFiledIssues` is the only production entrypoint, and
|
|
53
|
-
* exporting this for tests alone trips the CI-only `dead-exports:production`
|
|
54
|
-
* gate. It is covered through `recordFiledIssues`, which is the seam that
|
|
55
|
-
* actually ships.
|
|
56
|
-
*
|
|
57
25
|
* @returns {{ findings: Array<object>, issueStates: Record<string, { state: string, number: number }>, groupsRecorded: number }}
|
|
58
26
|
*/
|
|
59
27
|
function issueStatesFromIssueMap({ groups, issueByGroupKey }) {
|
|
@@ -78,18 +46,14 @@ function issueStatesFromIssueMap({ groups, issueByGroupKey }) {
|
|
|
78
46
|
}
|
|
79
47
|
|
|
80
48
|
/**
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
* Only the mapped groups' findings are passed to `reconcileLedger`, so every
|
|
84
|
-
* other entry survives untouched — `reconcileLedger` copies the prior index
|
|
85
|
-
* forward and rewrites only what this scan hands it.
|
|
49
|
+
* Other ledger entries survive untouched: `reconcileLedger` rewrites only the
|
|
50
|
+
* findings it is handed.
|
|
86
51
|
*
|
|
87
52
|
* @param {object} params
|
|
88
53
|
* @param {string} [params.ledgerPath]
|
|
89
54
|
* @param {Array<object>} params.groups — the `create`-eligible groups.
|
|
90
55
|
* @param {Record<string, number>} params.issueByGroupKey
|
|
91
|
-
* @param {boolean} [params.write=true] — `false`
|
|
92
|
-
* persisting it, which is what `--dry-run` needs.
|
|
56
|
+
* @param {boolean} [params.write=true] — `false` for `--dry-run`.
|
|
93
57
|
* @param {{ readLedgerImpl?: Function, writeLedgerImpl?: Function }} [seams]
|
|
94
58
|
* @returns {{ path: string, written: boolean, groupsRecorded: number, findingsRecorded: number, filed: number }}
|
|
95
59
|
*/
|
|
@@ -109,10 +73,8 @@ export function recordFiledIssues(
|
|
|
109
73
|
issueStates,
|
|
110
74
|
toCanonical: toCanonicalFinding,
|
|
111
75
|
});
|
|
112
|
-
//
|
|
113
|
-
//
|
|
114
|
-
// it with a fresh `generatedAt` and no new memory would manufacture a diff
|
|
115
|
-
// that says nothing.
|
|
76
|
+
// No findings → no write: a fresh `generatedAt` alone would make
|
|
77
|
+
// `--ledger-commit` open an empty PR.
|
|
116
78
|
const wrote = Boolean(write) && findings.length > 0;
|
|
117
79
|
if (wrote) writeLedgerImpl(path, next);
|
|
118
80
|
|