mandrel 2.60.0 → 2.62.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/README.md +10 -10
- package/.agents/agents/story-worker.md +1 -1
- package/.agents/docs/agentrc-reference.json +4 -82
- package/.agents/docs/configuration.md +20 -87
- package/.agents/docs/workflows.md +1 -1
- package/.agents/instructions.md +1 -3
- package/.agents/rules/gherkin-standards.md +4 -0
- package/.agents/schemas/agentrc.schema.json +11 -486
- package/.agents/schemas/story-deliver-terminal.schema.json +10 -0
- package/.agents/schemas/validation-evidence.schema.json +2 -1
- package/.agents/scripts/README.md +14 -14
- package/.agents/scripts/acceptance-eval.js +32 -164
- package/.agents/scripts/agents-bootstrap-github.js +27 -129
- package/.agents/scripts/apply-quality-bootstrap.js +4 -40
- package/.agents/scripts/audit-baselines.js +6 -27
- package/.agents/scripts/audit-labels-bootstrap.js +5 -29
- package/.agents/scripts/audit-to-stories.js +91 -361
- package/.agents/scripts/boot-sweep.js +19 -72
- package/.agents/scripts/bootstrap.js +74 -395
- package/.agents/scripts/ceremony-derive.js +9 -45
- package/.agents/scripts/check-arch-cycles.js +14 -64
- package/.agents/scripts/check-baselines.js +8 -48
- package/.agents/scripts/check-context-budget.js +46 -172
- package/.agents/scripts/check-cyclomatic.js +12 -44
- package/.agents/scripts/check-dead-exports.js +13 -64
- package/.agents/scripts/check-doc-links.js +38 -186
- package/.agents/scripts/check-gherkin-corpus.js +24 -127
- package/.agents/scripts/check-test-temp-hygiene.js +28 -169
- package/.agents/scripts/coverage-capture.js +32 -99
- package/.agents/scripts/deliver-light.js +14 -101
- package/.agents/scripts/deliver-recover.js +6 -42
- package/.agents/scripts/deliver-run.js +36 -133
- package/.agents/scripts/diagnose-friction.js +24 -116
- package/.agents/scripts/drain-pending-cleanup.js +1 -1
- package/.agents/scripts/evidence-gate.js +23 -85
- package/.agents/scripts/file-ci-gap.js +10 -50
- package/.agents/scripts/generate-config-docs.js +30 -170
- package/.agents/scripts/generate-lens-checklists.js +8 -52
- package/.agents/scripts/generate-skills-index.js +14 -112
- package/.agents/scripts/generate-workflows-doc.js +10 -70
- package/.agents/scripts/git-cleanup.js +2 -34
- package/.agents/scripts/lib/Graph.js +24 -81
- package/.agents/scripts/lib/ITicketingProvider.js +47 -143
- package/.agents/scripts/lib/Logger.js +14 -76
- package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
- package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
- package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
- package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
- package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
- package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
- package/.agents/scripts/lib/audit-baselines/read.js +3 -16
- package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
- package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
- package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
- package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
- package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
- package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
- package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
- package/.agents/scripts/lib/audit-suite/findings.js +12 -52
- package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
- package/.agents/scripts/lib/audit-suite/index.js +1 -15
- package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
- package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
- package/.agents/scripts/lib/audit-suite/runner.js +13 -43
- package/.agents/scripts/lib/audit-suite/selector.js +49 -349
- package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
- package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
- package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
- package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
- package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
- package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
- package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
- package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
- package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
- package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
- package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
- package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
- package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
- package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
- package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
- package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
- package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
- package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
- package/.agents/scripts/lib/baseline-loader.js +12 -51
- package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
- package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
- package/.agents/scripts/lib/baselines/components.js +10 -61
- package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
- package/.agents/scripts/lib/baselines/crap-preview-incremental.js +5 -21
- package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
- package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
- package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
- package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
- package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
- package/.agents/scripts/lib/baselines/envelope.js +13 -129
- package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
- package/.agents/scripts/lib/baselines/git-base.js +23 -142
- package/.agents/scripts/lib/baselines/kernel.js +11 -111
- package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
- package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
- package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
- package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
- package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
- package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
- package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
- package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
- package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
- package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
- package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
- package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
- package/.agents/scripts/lib/baselines/path-canon.js +19 -128
- package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
- package/.agents/scripts/lib/baselines/reader.js +14 -107
- package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
- package/.agents/scripts/lib/baselines/scope.js +11 -135
- package/.agents/scripts/lib/baselines/writer.js +16 -149
- package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
- package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
- package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
- package/.agents/scripts/lib/bdd-step-index.js +26 -100
- package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
- package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
- package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
- package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
- package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
- package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
- package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
- package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
- package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
- package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
- package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
- package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
- package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
- package/.agents/scripts/lib/bootstrap/summary.js +1 -8
- package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
- package/.agents/scripts/lib/branch-name-guard.js +4 -23
- package/.agents/scripts/lib/changed-files.js +31 -143
- package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
- package/.agents/scripts/lib/checks/index.js +18 -101
- package/.agents/scripts/lib/checks/loop-health.js +11 -53
- package/.agents/scripts/lib/checks/state.js +16 -91
- package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
- package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
- package/.agents/scripts/lib/child-exec.js +39 -108
- package/.agents/scripts/lib/cli/standard-args.js +9 -116
- package/.agents/scripts/lib/cli-args.js +31 -146
- package/.agents/scripts/lib/cli-usage.js +5 -27
- package/.agents/scripts/lib/cli-utils.js +2 -12
- package/.agents/scripts/lib/close-validation/commands.js +13 -76
- package/.agents/scripts/lib/close-validation/gates.js +92 -331
- package/.agents/scripts/lib/close-validation/process.js +121 -151
- package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
- package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
- package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
- package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
- package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
- package/.agents/scripts/lib/close-validation/runner.js +53 -110
- package/.agents/scripts/lib/command-header.js +6 -28
- package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
- package/.agents/scripts/lib/config/baselines.js +3 -14
- package/.agents/scripts/lib/config/ci.js +8 -38
- package/.agents/scripts/lib/config/commands.js +1 -15
- package/.agents/scripts/lib/config/defaults.js +4 -33
- package/.agents/scripts/lib/config/delivery-routing.js +6 -35
- package/.agents/scripts/lib/config/explain.js +9 -80
- package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
- package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +2 -30
- package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
- package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
- package/.agents/scripts/lib/config/gates/index.js +2 -17
- package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
- package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
- package/.agents/scripts/lib/config/gates/shared.js +4 -64
- package/.agents/scripts/lib/config/github.js +4 -22
- package/.agents/scripts/lib/config/limits.js +4 -57
- package/.agents/scripts/lib/config/paths.js +2 -21
- package/.agents/scripts/lib/config/qa.js +4 -38
- package/.agents/scripts/lib/config/quality.js +76 -432
- package/.agents/scripts/lib/config/runners.js +12 -56
- package/.agents/scripts/lib/config/runtime.js +13 -57
- package/.agents/scripts/lib/config/shared.js +2 -16
- package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
- package/.agents/scripts/lib/config/temp-paths.js +40 -280
- package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
- package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
- package/.agents/scripts/lib/config-resolver.js +10 -52
- package/.agents/scripts/lib/config-schema-shared.js +1 -4
- package/.agents/scripts/lib/config-settings-schema-delivery.js +12 -294
- package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
- package/.agents/scripts/lib/config-settings-schema.js +37 -274
- package/.agents/scripts/lib/coverage-baseline.js +20 -110
- package/.agents/scripts/lib/coverage-capture-fullscope.js +12 -37
- package/.agents/scripts/lib/coverage-capture-incremental.js +12 -43
- package/.agents/scripts/lib/coverage-capture-usage.js +4 -24
- package/.agents/scripts/lib/coverage-capture.js +99 -224
- package/.agents/scripts/lib/coverage-utils.js +14 -79
- package/.agents/scripts/lib/cpu-pool.js +17 -123
- package/.agents/scripts/lib/crap-baseline-join.js +16 -88
- package/.agents/scripts/lib/crap-coordinates.js +6 -25
- package/.agents/scripts/lib/crap-engine.js +40 -153
- package/.agents/scripts/lib/crap-method-identity.js +16 -78
- package/.agents/scripts/lib/crap-utils.js +31 -155
- package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
- package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
- package/.agents/scripts/lib/dead-exports-knip.js +18 -56
- package/.agents/scripts/lib/dead-exports-mode.js +5 -24
- package/.agents/scripts/lib/degraded-mode.js +3 -26
- package/.agents/scripts/lib/dependency-parser.js +8 -40
- package/.agents/scripts/lib/dependency-version.js +13 -35
- package/.agents/scripts/lib/detect-package-manager.js +6 -36
- package/.agents/scripts/lib/doc-tiers.js +22 -126
- package/.agents/scripts/lib/duplicate-search.js +8 -72
- package/.agents/scripts/lib/env-loader.js +5 -27
- package/.agents/scripts/lib/error-redactor.js +6 -31
- package/.agents/scripts/lib/errors/index.js +2 -22
- package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
- package/.agents/scripts/lib/escomplex-kernel.js +21 -123
- package/.agents/scripts/lib/feedback-loop/graduator-core.js +93 -419
- package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
- package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -151
- package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
- package/.agents/scripts/lib/findings/classify-finding.js +14 -69
- package/.agents/scripts/lib/findings/promote-finding.js +14 -112
- package/.agents/scripts/lib/findings/provenance-field.js +11 -52
- package/.agents/scripts/lib/findings/route-finding.js +37 -255
- package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
- package/.agents/scripts/lib/findings/severity.js +18 -104
- package/.agents/scripts/lib/format-generated-json.js +12 -44
- package/.agents/scripts/lib/full-suite-lock.js +160 -429
- package/.agents/scripts/lib/full-suite-queue.js +213 -0
- package/.agents/scripts/lib/gates/baseline-store.js +5 -9
- package/.agents/scripts/lib/gates/friction.js +1 -3
- package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
- package/.agents/scripts/lib/gh-exec.js +31 -259
- package/.agents/scripts/lib/git/cached-fetch.js +9 -52
- package/.agents/scripts/lib/git/sync-from-base.js +15 -107
- package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
- package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
- package/.agents/scripts/lib/git-utils.js +37 -161
- package/.agents/scripts/lib/github/framework-repo.js +8 -71
- package/.agents/scripts/lib/github-url.js +2 -17
- package/.agents/scripts/lib/import-graph.js +11 -38
- package/.agents/scripts/lib/install-cmd-parser.js +4 -13
- package/.agents/scripts/lib/json-utils.js +3 -18
- package/.agents/scripts/lib/label-constants.js +16 -111
- package/.agents/scripts/lib/label-taxonomy.js +4 -30
- package/.agents/scripts/lib/maintainability-engine.js +12 -80
- package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
- package/.agents/scripts/lib/maintainability-utils.js +16 -92
- package/.agents/scripts/lib/mandrel-catalog.js +12 -70
- package/.agents/scripts/lib/notifications/notifier.js +13 -38
- package/.agents/scripts/lib/npm-scripts.js +4 -23
- package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
- package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
- package/.agents/scripts/lib/observability/signal-validator.js +5 -37
- package/.agents/scripts/lib/observability/signals-writer.js +11 -121
- package/.agents/scripts/lib/observability/source-classifier.js +21 -203
- package/.agents/scripts/lib/observability/terse-result.js +14 -47
- package/.agents/scripts/lib/onboard/init-tail.js +13 -74
- package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
- package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
- package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
- package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
- package/.agents/scripts/lib/orchestration/ceremony-routing.js +5 -75
- package/.agents/scripts/lib/orchestration/change-set.js +7 -36
- package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
- package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
- package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
- package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
- package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
- package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
- package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
- package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
- package/.agents/scripts/lib/orchestration/check-state.js +92 -0
- package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
- package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +42 -189
- package/.agents/scripts/lib/orchestration/code-review.js +24 -128
- package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
- package/.agents/scripts/lib/orchestration/complexity-gate.js +42 -214
- package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
- package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
- package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
- package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
- package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
- package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
- package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
- package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
- package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
- package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
- package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
- package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
- package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
- package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
- package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
- package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
- package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
- package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
- package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
- package/.agents/scripts/lib/orchestration/light-suitability.js +26 -231
- package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
- package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
- package/.agents/scripts/lib/orchestration/merge-queue.js +158 -0
- package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
- package/.agents/scripts/lib/orchestration/plan-context.js +52 -303
- package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
- package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
- package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
- package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
- package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
- package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
- package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +14 -78
- package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
- package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
- package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
- package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
- package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
- package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
- package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +49 -248
- package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
- package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +85 -368
- package/.agents/scripts/lib/orchestration/plan-persist/summary.js +8 -38
- package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +30 -190
- package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
- package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
- package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
- package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
- package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
- package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
- package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
- package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
- package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
- package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
- package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
- package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
- package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
- package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
- package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
- package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
- package/.agents/scripts/lib/orchestration/review-depth.js +12 -94
- package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
- package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
- package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
- package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
- package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
- package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
- package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
- package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
- package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
- package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
- package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
- package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
- package/.agents/scripts/lib/orchestration/run-epilogue.js +40 -199
- package/.agents/scripts/lib/orchestration/run-scoped-config.js +13 -81
- package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
- package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
- package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
- package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +190 -280
- package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +18 -80
- package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
- package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
- package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +183 -485
- package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
- package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +9 -50
- package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
- package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
- package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
- package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
- package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
- package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
- package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
- package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
- package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
- package/.agents/scripts/lib/orchestration/single-story-close/runner.js +110 -290
- package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
- package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
- package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
- package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
- package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
- package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
- package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
- package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
- package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -201
- package/.agents/scripts/lib/orchestration/story-follow-ups.js +43 -245
- package/.agents/scripts/lib/orchestration/story-init-envelope.js +4 -23
- package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
- package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
- package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -126
- package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
- package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
- package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
- package/.agents/scripts/lib/orchestration/ticket-validator.js +39 -181
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -250
- package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
- package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
- package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
- package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
- package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
- package/.agents/scripts/lib/path-security.js +3 -6
- package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
- package/.agents/scripts/lib/preflight-runner.js +13 -69
- package/.agents/scripts/lib/process-group.js +143 -0
- package/.agents/scripts/lib/project-root.js +2 -8
- package/.agents/scripts/lib/provider-factory.js +2 -25
- package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
- package/.agents/scripts/lib/qa/qa-session.js +15 -69
- package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
- package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
- package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
- package/.agents/scripts/lib/reserved-test-ids.js +9 -47
- package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
- package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
- package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
- package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
- package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
- package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
- package/.agents/scripts/lib/signals/detectors/common.js +12 -38
- package/.agents/scripts/lib/signals/index.js +2 -19
- package/.agents/scripts/lib/signals/schema.js +14 -109
- package/.agents/scripts/lib/signals/write.js +2 -11
- package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
- package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
- package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
- package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
- package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
- package/.agents/scripts/lib/single-story-sweep.js +14 -97
- package/.agents/scripts/lib/skills/parse-skill.js +13 -59
- package/.agents/scripts/lib/skills/skills-index.js +8 -29
- package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
- package/.agents/scripts/lib/source-extensions.js +11 -42
- package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
- package/.agents/scripts/lib/stdio-flush.js +9 -36
- package/.agents/scripts/lib/story-adjacency.js +8 -40
- package/.agents/scripts/lib/story-body/body-format-lints.js +22 -83
- package/.agents/scripts/lib/story-body/footer-block.js +11 -44
- package/.agents/scripts/lib/story-body/story-body.js +83 -358
- package/.agents/scripts/lib/temp-retention.js +42 -143
- package/.agents/scripts/lib/templates/decomposer-prompts.js +11 -65
- package/.agents/scripts/lib/test-env.js +12 -65
- package/.agents/scripts/lib/test-run-credit.js +10 -65
- package/.agents/scripts/lib/test-runner-contract.js +19 -74
- package/.agents/scripts/lib/test-temp.js +38 -184
- package/.agents/scripts/lib/test-tiers.js +12 -96
- package/.agents/scripts/lib/ticket-body-sections.js +21 -96
- package/.agents/scripts/lib/transpile.js +15 -74
- package/.agents/scripts/lib/util/concurrent-map.js +6 -25
- package/.agents/scripts/lib/util/parse-id-list.js +8 -34
- package/.agents/scripts/lib/util/poll-loop.js +8 -28
- package/.agents/scripts/lib/util/with-timeout.js +2 -11
- package/.agents/scripts/lib/validation-evidence.js +21 -96
- package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
- package/.agents/scripts/lib/wave-runner/live-probe.js +53 -221
- package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
- package/.agents/scripts/lib/workers/crap-worker.js +11 -64
- package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
- package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
- package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
- package/.agents/scripts/lib/workflow-closure.js +22 -105
- package/.agents/scripts/lib/workspace-provisioner.js +16 -54
- package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
- package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
- package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
- package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
- package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
- package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
- package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
- package/.agents/scripts/lib/worktree-manager.js +15 -40
- package/.agents/scripts/lint-issue-body.js +12 -68
- package/.agents/scripts/mandrel-update-preflight.js +10 -70
- package/.agents/scripts/merge-baseline.js +30 -104
- package/.agents/scripts/nav-registry-diff.js +22 -108
- package/.agents/scripts/notify.js +12 -69
- package/.agents/scripts/plan-context.js +27 -111
- package/.agents/scripts/plan-critics.js +12 -66
- package/.agents/scripts/plan-persist.js +31 -148
- package/.agents/scripts/plan-run-epilogue.js +11 -37
- package/.agents/scripts/pr-watch-with-update.js +76 -267
- package/.agents/scripts/providers/github/auth.js +3 -8
- package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
- package/.agents/scripts/providers/github/board-add.js +5 -21
- package/.agents/scripts/providers/github/branch-protection.js +11 -43
- package/.agents/scripts/providers/github/cache.js +2 -14
- package/.agents/scripts/providers/github/comments.js +7 -40
- package/.agents/scripts/providers/github/compose.js +3 -19
- package/.agents/scripts/providers/github/errors.js +22 -125
- package/.agents/scripts/providers/github/issues.js +31 -123
- package/.agents/scripts/providers/github/labels.js +24 -124
- package/.agents/scripts/providers/github/mappers.js +5 -27
- package/.agents/scripts/providers/github/merge-methods.js +3 -22
- package/.agents/scripts/providers/github/project-board.js +2 -17
- package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
- package/.agents/scripts/providers/github/request-helpers.js +5 -32
- package/.agents/scripts/providers/github/search-budget.js +9 -39
- package/.agents/scripts/providers/github/search-query.js +5 -26
- package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
- package/.agents/scripts/providers/github/sub-issues.js +7 -36
- package/.agents/scripts/providers/github/tickets.js +32 -134
- package/.agents/scripts/providers/github.js +18 -59
- package/.agents/scripts/prune-plan-run-labels.js +12 -46
- package/.agents/scripts/quality-preview.js +35 -220
- package/.agents/scripts/resolve-doc-tiers.js +3 -26
- package/.agents/scripts/resolve-stories.js +16 -67
- package/.agents/scripts/resync-status-column.js +6 -25
- package/.agents/scripts/run-tests.js +29 -104
- package/.agents/scripts/single-story-close.js +23 -135
- package/.agents/scripts/single-story-confirm-merge.js +32 -139
- package/.agents/scripts/single-story-init.js +47 -209
- package/.agents/scripts/stories-wave-tick.js +102 -472
- package/.agents/scripts/sync-agentrc.js +3 -21
- package/.agents/scripts/sync-claude-agents.js +9 -55
- package/.agents/scripts/sync-claude-commands.js +20 -110
- package/.agents/scripts/test-wrapper.js +6 -43
- package/.agents/scripts/update-coverage-baseline.js +5 -22
- package/.agents/scripts/update-crap-baseline.js +7 -30
- package/.agents/scripts/update-duplication-baseline.js +16 -92
- package/.agents/scripts/update-maintainability-baseline.js +8 -62
- package/.agents/scripts/update-ticket-state.js +1 -7
- package/.agents/scripts/validate-skills.js +6 -26
- package/.agents/templates/agent-protocol.md +2 -2
- package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
- package/.agents/workflows/audit-accessibility.md +4 -7
- package/.agents/workflows/audit-adrs.md +3 -6
- package/.agents/workflows/audit-architecture.md +3 -11
- package/.agents/workflows/audit-baselines.md +6 -9
- package/.agents/workflows/audit-clean-code.md +8 -12
- package/.agents/workflows/audit-data-model.md +3 -7
- package/.agents/workflows/audit-dependencies.md +4 -7
- package/.agents/workflows/audit-devops.md +4 -8
- package/.agents/workflows/audit-documentation.md +1 -4
- package/.agents/workflows/audit-mobile.md +4 -7
- package/.agents/workflows/audit-navigability.md +3 -6
- package/.agents/workflows/audit-performance.md +2 -4
- package/.agents/workflows/audit-privacy.md +4 -7
- package/.agents/workflows/audit-quality.md +4 -7
- package/.agents/workflows/audit-security.md +4 -7
- package/.agents/workflows/audit-seo.md +4 -7
- package/.agents/workflows/audit-sre.md +4 -7
- package/.agents/workflows/audit-to-stories.md +17 -30
- package/.agents/workflows/audit-ux-ui.md +4 -7
- package/.agents/workflows/helpers/audit-lens-core.md +1 -1
- package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
- package/.agents/workflows/helpers/deliver-digest.md +6 -4
- package/.agents/workflows/helpers/deliver-reference.md +114 -188
- package/.agents/workflows/helpers/deliver-story-reference.md +189 -533
- package/.agents/workflows/helpers/plan-reference.md +86 -139
- package/.agents/workflows/helpers/qa-core.md +12 -0
- package/.agents/workflows/memory-consolidate.md +1 -1
- package/.agents/workflows/qa-assist.md +27 -71
- package/.agents/workflows/qa-explore.md +19 -59
- package/.agents/workflows/qa-run.md +11 -33
- package/README.md +1 -1
- package/bin/mandrel.js +5 -46
- package/bin/postinstall.js +18 -107
- package/docs/CHANGELOG.md +32 -0
- package/lib/cli/doctor.js +11 -71
- package/lib/cli/init.js +26 -165
- package/lib/cli/migrate.js +5 -64
- package/lib/cli/registry.js +84 -467
- package/lib/cli/sync-agents.js +4 -64
- package/lib/cli/sync-commands.js +11 -64
- package/lib/cli/sync.js +34 -213
- package/lib/cli/uninstall.js +40 -219
- package/lib/cli/update.js +105 -661
- package/lib/cli/version-check.js +8 -72
- package/lib/cli/version-helpers.js +14 -87
- package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
- package/lib/migrations/index.js +15 -92
- package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
- package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
- package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
- package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
- package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
- package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
- package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
- package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
- package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +2 -21
- package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
- package/package.json +16 -14
- package/.agents/docs/SDLC.md +0 -590
- package/.agents/docs/quality-gates.md +0 -1183
- package/.agents/rules/known-tooling-behavior.md +0 -200
- package/.agents/rules/orchestration-error-handling.md +0 -61
- package/.agents/rules/test-seams.md +0 -59
- package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
- package/.agents/schemas/baselines/lint.schema.json +0 -47
- package/.agents/scripts/check-action-pinning.js +0 -260
- package/.agents/scripts/check-audit-attribution.js +0 -302
- package/.agents/scripts/check-baseline-drift.js +0 -211
- package/.agents/scripts/check-baseline-scope.js +0 -362
- package/.agents/scripts/check-generated-validator.js +0 -202
- package/.agents/scripts/check-knip-entries.js +0 -159
- package/.agents/scripts/check-lifecycle-lint.js +0 -294
- package/.agents/scripts/check-pinned-override-notes.js +0 -102
- package/.agents/scripts/check-schema-references.js +0 -368
- package/.agents/scripts/check-test-portability.js +0 -512
- package/.agents/scripts/check-workflow-citations.js +0 -218
- package/.agents/scripts/check-workflow-cli-lint.js +0 -299
- package/.agents/scripts/check-workflow-timeouts.js +0 -291
- package/.agents/scripts/install-matrix-assert.js +0 -326
- package/.agents/scripts/lib/audit-advisories.js +0 -195
- package/.agents/scripts/lib/audit-attribution.js +0 -134
- package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
- package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
- package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
- package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
- package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
- package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
- package/.agents/scripts/lib/c8-cli-path.js +0 -21
- package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
- package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
- package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
- package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
- package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
- package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
- package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
- package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
- package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
- package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
- package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
- package/.agents/scripts/lib/fs-walk.js +0 -52
- package/.agents/scripts/lib/knip-config-resolver.js +0 -181
- package/.agents/scripts/lib/knip-entry-sync.js +0 -452
- package/.agents/scripts/lib/pinned-override-notes.js +0 -88
- package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
- package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
- package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
- package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
- package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
- package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
- package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
- package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
- package/.agents/scripts/lib/test-isolate/runner.js +0 -483
- package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
- package/.agents/scripts/lib/test-profile/render-report.js +0 -45
- package/.agents/scripts/lint-label-vocabulary.js +0 -214
- package/.agents/scripts/post-structured-comment.js +0 -127
- package/.agents/scripts/provision-git-hooks.js +0 -85
- package/.agents/scripts/prune-baseline-orphans.js +0 -181
- package/.agents/scripts/run-coverage.js +0 -197
- package/.agents/scripts/run-lint.js +0 -133
- package/.agents/scripts/run-test-profile.js +0 -129
- package/.agents/scripts/run-verify.js +0 -125
- package/.agents/scripts/test-isolate.js +0 -55
- package/.agents/scripts/update-dead-exports-baseline.js +0 -321
|
@@ -1,21 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* `checklist-threading.js#buildChecklistPayload` was built and unit-tested but
|
|
7
|
-
* had **zero production call sites**: nothing derived a footprint, assembled
|
|
8
|
-
* the payload, or handed a `checklistPath` to the spawned Story worker. This
|
|
9
|
-
* module is that call site. Given a Story's predicted footprint (its
|
|
10
|
-
* `changes[]` / `references[]` path entries), it assembles the footprint-matched
|
|
11
|
-
* local-lens checklist payload, writes it to the run's temp dir, and returns
|
|
12
|
-
* the `checklistPath` the deliver-story spawn threads into the maker's prompt
|
|
13
|
-
* (the same way the docs digest reaches the worker as `docsDigestPath`).
|
|
14
|
-
*
|
|
15
|
-
* Pure modulo the single file write, which is an injectable seam
|
|
16
|
-
* (`writeFileFn`) so the builder is unit-testable without touching disk. No
|
|
17
|
-
* git, no provider, no network — the footprint is the planner's *prediction*,
|
|
18
|
-
* not a diff, so no repository read is involved.
|
|
2
|
+
* Deliver-dispatch call site for checklist threading: builds the payload from
|
|
3
|
+
* a Story's predicted `changes[]` + `references[]` footprint, writes it to
|
|
4
|
+
* the run temp dir, and returns the `checklistPath` the worker spawn threads.
|
|
5
|
+
* The footprint is a prediction, not a diff: no git, provider, or network.
|
|
19
6
|
*/
|
|
20
7
|
|
|
21
8
|
import fs from 'node:fs';
|
|
@@ -23,9 +10,7 @@ import path from 'node:path';
|
|
|
23
10
|
import { buildChecklistPayload } from './checklist-threading.js';
|
|
24
11
|
|
|
25
12
|
/**
|
|
26
|
-
*
|
|
27
|
-
* entries. Accepts both the parsed `{ path, assumption }` PathEntry shape and a
|
|
28
|
-
* bare `string`, dropping empty / non-string entries.
|
|
13
|
+
* Accepts `{ path }` entries or bare strings.
|
|
29
14
|
*
|
|
30
15
|
* @param {unknown} entries
|
|
31
16
|
* @returns {string[]}
|
|
@@ -39,13 +24,7 @@ function footprintFromEntries(entries) {
|
|
|
39
24
|
}
|
|
40
25
|
|
|
41
26
|
/**
|
|
42
|
-
*
|
|
43
|
-
* Story's `changes[]` and `references[]` path entries, in that order.
|
|
44
|
-
*
|
|
45
|
-
* Module-local: a detail of {@link buildDispatchChecklist}, exercised through
|
|
46
|
-
* that public entry point (assert the footprint the injected payload builder
|
|
47
|
-
* received) rather than imported directly, so it adds no test-only public
|
|
48
|
-
* export the dead-export ratchet would flag.
|
|
27
|
+
* Module-local so it adds no test-only export for the dead-export ratchet.
|
|
49
28
|
*
|
|
50
29
|
* @param {{ changes?: unknown, references?: unknown }} [args]
|
|
51
30
|
* @returns {string[]}
|
|
@@ -58,8 +37,6 @@ function deriveDispatchFootprint({ changes, references } = {}) {
|
|
|
58
37
|
}
|
|
59
38
|
|
|
60
39
|
/**
|
|
61
|
-
* Default file writer: ensure the parent dir exists, then write the payload.
|
|
62
|
-
*
|
|
63
40
|
* @param {string} filePath
|
|
64
41
|
* @param {string} content
|
|
65
42
|
* @returns {void}
|
|
@@ -70,24 +47,16 @@ function defaultWriteFile(filePath, content) {
|
|
|
70
47
|
}
|
|
71
48
|
|
|
72
49
|
/**
|
|
73
|
-
*
|
|
74
|
-
* temp dir, returning the `checklistPath` the deliver-story spawn threads.
|
|
75
|
-
*
|
|
76
|
-
* When the footprint matches no local lens (the common case for a
|
|
77
|
-
* docs-only or infra-only Story), nothing is written and `checklistPath` is
|
|
78
|
-
* `null` — the worker then runs with no write-time checklist, exactly as it
|
|
79
|
-
* does today, and lens-aware coverage still runs maker-blind at Story-scope
|
|
80
|
-
* close.
|
|
50
|
+
* No matched lens → nothing written, `checklistPath: null`.
|
|
81
51
|
*
|
|
82
52
|
* @param {object} args
|
|
83
|
-
* @param {number|string} args.storyId
|
|
84
|
-
* @param {unknown} [args.changes]
|
|
85
|
-
* @param {unknown} [args.references]
|
|
86
|
-
* @param {string} args.runTempDir
|
|
87
|
-
* @param {number} [args.tokenBudget]
|
|
88
|
-
* @param {typeof buildChecklistPayload} [args.buildPayloadFn]
|
|
89
|
-
* @param {(filePath: string, content: string) => void} [args.writeFileFn]
|
|
90
|
-
* injectable write seam (defaults to the on-disk writer).
|
|
53
|
+
* @param {number|string} args.storyId
|
|
54
|
+
* @param {unknown} [args.changes]
|
|
55
|
+
* @param {unknown} [args.references]
|
|
56
|
+
* @param {string} args.runTempDir
|
|
57
|
+
* @param {number} [args.tokenBudget]
|
|
58
|
+
* @param {typeof buildChecklistPayload} [args.buildPayloadFn]
|
|
59
|
+
* @param {(filePath: string, content: string) => void} [args.writeFileFn]
|
|
91
60
|
* @returns {{
|
|
92
61
|
* checklistPath: string|null,
|
|
93
62
|
* skipped: boolean,
|
|
@@ -1,26 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* block of the audit-suite envelope with a severity histogram.
|
|
6
|
-
*
|
|
7
|
-
* `aggregateBaselineDelta` (Task #1920, Epic #1786) reports per-component
|
|
8
|
-
* rollup deltas between two committed baseline envelopes loaded via
|
|
9
|
-
* `lib/baselines/reader.js`. It supersedes the prior row-by-row diff —
|
|
10
|
-
* row-level deltas surfaced noise from churn that did not move any
|
|
11
|
-
* component's rollup, drowning out the regressions that actually mattered.
|
|
12
|
-
*
|
|
13
|
-
* The delta function is **pure**: it takes the two `{ rollup, rows }`
|
|
14
|
-
* envelopes returned by the reader plus the resolved components map and
|
|
15
|
-
* returns a deterministic per-component delta. No filesystem I/O.
|
|
2
|
+
* Findings severity histogram and per-component baseline rollup deltas.
|
|
3
|
+
* Deltas are per rollup, not per row: row churn that moves no rollup is noise.
|
|
4
|
+
* Pure, no I/O.
|
|
16
5
|
*/
|
|
17
6
|
|
|
18
7
|
import { groupRows, resolveComponents } from '../baselines/components.js';
|
|
19
8
|
|
|
20
9
|
/**
|
|
21
|
-
*
|
|
22
|
-
* with severities outside that set are ignored, keeping the rendered summary
|
|
23
|
-
* truthful even if upstream callers append non-standard severities.
|
|
10
|
+
* Non-standard severities are ignored.
|
|
24
11
|
*
|
|
25
12
|
* @param {Array<{ severity?: string }>|null|undefined} findings
|
|
26
13
|
* @returns {{ critical: number, high: number, medium: number, low: number }}
|
|
@@ -36,20 +23,10 @@ export function aggregateSummary(findings) {
|
|
|
36
23
|
}
|
|
37
24
|
|
|
38
25
|
/**
|
|
39
|
-
* The single halting rule
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
* integration gate (`evaluateAutoMergePredicate`) — routes its
|
|
44
|
-
* halt-on-critical decision through this one predicate so the rule has a
|
|
45
|
-
* single definition rather than a re-derived `critical > 0` expression at
|
|
46
|
-
* each site.
|
|
47
|
-
*
|
|
48
|
-
* Accepts either the severity **count object** produced by
|
|
49
|
-
* `countBySeverity` / {@link aggregateSummary} (`{ critical: n, ... }`) or a
|
|
50
|
-
* raw `Finding[]`. A non-numeric / absent `critical` count (e.g. the
|
|
51
|
-
* auto-merge gate's "unparseable body" sentinel `null`) is **not** a halt —
|
|
52
|
-
* the caller owns that fail-open path separately. Pure; never throws.
|
|
26
|
+
* The single halting rule: a surviving Critical finding halts delivery. Every
|
|
27
|
+
* consumer routes through this rather than re-deriving `critical > 0`.
|
|
28
|
+
* Accepts a severity count object or a `Finding[]`; a non-numeric `critical`
|
|
29
|
+
* (e.g. an unparseable-body `null`) is not a halt — the caller owns that path.
|
|
53
30
|
*
|
|
54
31
|
* @param {{ critical?: unknown }|Array<{ severity?: string }>|null|undefined} input
|
|
55
32
|
* @returns {boolean} `true` when at least one surviving Critical is present.
|
|
@@ -63,11 +40,7 @@ export function hasSurvivingCritical(input) {
|
|
|
63
40
|
}
|
|
64
41
|
|
|
65
42
|
/**
|
|
66
|
-
*
|
|
67
|
-
* already carries a `rollup` block (every writer-produced baseline does), we
|
|
68
|
-
* trust it as the source of truth. When `rollup` is absent (raw test
|
|
69
|
-
* fixtures, hand-written cases) we recompute from rows via the supplied
|
|
70
|
-
* `recompute` callback so the function stays useful in both shapes.
|
|
43
|
+
* The envelope's own `rollup` when present, else recomputed from rows.
|
|
71
44
|
*
|
|
72
45
|
* @param {{ rollup?: object, rows?: Array<object> }} envelope
|
|
73
46
|
* @param {Record<string, string[]>} components
|
|
@@ -89,13 +62,8 @@ function resolveRollup(envelope, components, keyField, recompute) {
|
|
|
89
62
|
}
|
|
90
63
|
|
|
91
64
|
/**
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
* The direction is informational only — the audit emitter does not enforce
|
|
96
|
-
* pass/fail policy; floor enforcement happens in `check-baselines.js`. We
|
|
97
|
-
* report `before`, `after`, and the signed delta so a reviewer can read the
|
|
98
|
-
* sign in context (lint count up = bad; coverage % down = bad).
|
|
65
|
+
* One entry per differing axis. Informational only — floors are enforced by
|
|
66
|
+
* `check-baselines.js`.
|
|
99
67
|
*
|
|
100
68
|
* @param {Record<string, number>|null|undefined} before
|
|
101
69
|
* @param {Record<string, number>|null|undefined} after
|
|
@@ -120,12 +88,6 @@ function diffAxes(before, after) {
|
|
|
120
88
|
}
|
|
121
89
|
|
|
122
90
|
/**
|
|
123
|
-
* Compute per-component rollup deltas between two baseline envelopes.
|
|
124
|
-
*
|
|
125
|
-
* Inputs are the shapes returned by `lib/baselines/reader.js#load(kind)`.
|
|
126
|
-
* The function is pure — disk reads happen in the caller so the audit
|
|
127
|
-
* emitter (and its tests) can drive synthetic before/after pairs.
|
|
128
|
-
*
|
|
129
91
|
* @param {{
|
|
130
92
|
* before: { rollup?: object, rows?: Array<object> },
|
|
131
93
|
* after: { rollup?: object, rows?: Array<object> },
|
|
@@ -137,9 +99,7 @@ function diffAxes(before, after) {
|
|
|
137
99
|
* component: string,
|
|
138
100
|
* axes: Array<{ axis: string, before: number|null, after: number|null, delta: number|null }>
|
|
139
101
|
* }>}
|
|
140
|
-
*
|
|
141
|
-
* the remainder is alpha. Components with no axis changes are omitted so
|
|
142
|
-
* an unchanged baseline yields `[]`.
|
|
102
|
+
* Changed components only, `*` first then alpha.
|
|
143
103
|
*/
|
|
144
104
|
export function aggregateBaselineDelta(params = {}) {
|
|
145
105
|
const before = params.before ?? { rollup: {}, rows: [] };
|
|
@@ -1,20 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Extracted from `.agents/scripts/run-audit-suite.js` (Story #963, Epic #946).
|
|
5
|
-
* Pure module — no IO, no provider calls, safe to unit-test in isolation.
|
|
6
|
-
*
|
|
7
|
-
* The functions here are the parsing seam used by the audit suite to derive
|
|
8
|
-
* a 1–3-sentence summary from a workflow's `description` frontmatter field
|
|
9
|
-
* (falling back to its first prose paragraph). Keep them tiny and free of
|
|
10
|
-
* cross-module imports so the audit-suite entry-point stays orchestration-only.
|
|
2
|
+
* Pure frontmatter + workflow-summary helpers; keep free of cross-module
|
|
3
|
+
* imports.
|
|
11
4
|
*/
|
|
12
5
|
|
|
13
|
-
//
|
|
14
|
-
//
|
|
15
|
-
// score this file. The walker has a long-standing bug where it crashes on
|
|
16
|
-
// RegExp literals via `RegExpLiteral`, returning MI=0 — see the parse-time
|
|
17
|
-
// fallback in lib/maintainability-engine.js#calculateForSource.
|
|
6
|
+
// RegExp constructors, not literals: typhonjs-escomplex crashes on
|
|
7
|
+
// `RegExpLiteral` and scores the file MI=0.
|
|
18
8
|
// biome-ignore-start lint/complexity/useRegexLiterals: typhonjs-escomplex MI workaround
|
|
19
9
|
const FRONTMATTER_RE = new RegExp(String.raw`^---\r?\n([\s\S]*?)\r?\n---\r?\n`);
|
|
20
10
|
const NEWLINE_SPLIT_RE = new RegExp(String.raw`\r?\n`);
|
|
@@ -27,9 +17,7 @@ const SUMMARY_MAX_SENTENCES = 3;
|
|
|
27
17
|
const SUMMARY_MAX_CHARS = 280;
|
|
28
18
|
|
|
29
19
|
/**
|
|
30
|
-
*
|
|
31
|
-
* key→value map. Quoted values are unwrapped; entries without a `:` separator
|
|
32
|
-
* are skipped. Returns `{}` when no frontmatter is present.
|
|
20
|
+
* Flat key→value map; quotes unwrapped, `:`-less lines skipped.
|
|
33
21
|
*
|
|
34
22
|
* @param {string} content
|
|
35
23
|
* @returns {Record<string, string>}
|
|
@@ -55,10 +43,6 @@ export function extractFrontmatter(content) {
|
|
|
55
43
|
}
|
|
56
44
|
|
|
57
45
|
/**
|
|
58
|
-
* Pure: find the first prose paragraph after the frontmatter block, skipping
|
|
59
|
-
* headings and `---` rules. Whitespace inside the paragraph is collapsed to
|
|
60
|
-
* single spaces. Returns `''` when the body is empty / heading-only.
|
|
61
|
-
*
|
|
62
46
|
* @param {string} content
|
|
63
47
|
* @returns {string}
|
|
64
48
|
*/
|
|
@@ -75,11 +59,6 @@ export function firstProseParagraph(content) {
|
|
|
75
59
|
}
|
|
76
60
|
|
|
77
61
|
/**
|
|
78
|
-
* Pure: trim a candidate summary to at most three sentences and 280 chars.
|
|
79
|
-
* Sentences are matched by `[^.!?\n]+[.!?]+`; bare paragraphs that contain no
|
|
80
|
-
* terminator are returned verbatim (subject to the char clamp). The 280-char
|
|
81
|
-
* trim appends an ellipsis to signal truncation to readers.
|
|
82
|
-
*
|
|
83
62
|
* @param {string} text
|
|
84
63
|
* @returns {string}
|
|
85
64
|
*/
|
|
@@ -97,9 +76,6 @@ export function clampSummary(text) {
|
|
|
97
76
|
}
|
|
98
77
|
|
|
99
78
|
/**
|
|
100
|
-
* Pure: derive a 1–3-sentence summary from a workflow's frontmatter
|
|
101
|
-
* `description` field, falling back to the first prose paragraph.
|
|
102
|
-
*
|
|
103
79
|
* @param {string} content
|
|
104
80
|
* @returns {string}
|
|
105
81
|
*/
|
|
@@ -1,17 +1,4 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* lib/audit-suite/index.js — Audit-suite SDK barrel.
|
|
3
|
-
*
|
|
4
|
-
* Single library entry point for the audit-suite. Exports the two public
|
|
5
|
-
* functions (`runAuditSuite`, `selectAudits`) plus the pure rule-matching
|
|
6
|
-
* helpers (`matchesFilePattern`, `matchesAnyFilePattern`).
|
|
7
|
-
*
|
|
8
|
-
* Consumers import from this file — the former top-level CLI wrappers
|
|
9
|
-
* (`run-audit-suite.js`, `select-audits.js`) were retired in #4482; this
|
|
10
|
-
* barrel is the only supported entry point (Story #1083 / Epic #1072).
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* import { runAuditSuite, selectAudits } from './lib/audit-suite/index.js';
|
|
14
|
-
*/
|
|
1
|
+
/** Audit-suite barrel — the only supported entry point. */
|
|
15
2
|
|
|
16
3
|
export {
|
|
17
4
|
buildChecklistPayload,
|
|
@@ -23,7 +10,6 @@ export { buildDispatchChecklist } from './dispatch-checklist.js';
|
|
|
23
10
|
export {
|
|
24
11
|
countChangedLines,
|
|
25
12
|
evaluateLensDiffFloor,
|
|
26
|
-
resolveLensDiffFloor,
|
|
27
13
|
} from './lens-diff-floor.js';
|
|
28
14
|
export { runAuditSuite } from './runner.js';
|
|
29
15
|
export {
|
|
@@ -1,34 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* write-time tier: instead of an engineer only learning what a lens checks
|
|
7
|
-
* when `/audit-<lens>` runs, a compact per-lens checklist ships as a committed
|
|
8
|
-
* build artifact under `.agents/audit-checklists/`. This module is the pure
|
|
9
|
-
* distillation seam — no IO — so it is unit-testable and the generator
|
|
10
|
-
* (`generate-lens-checklists.js`) owns only the file read/write/prune and the
|
|
11
|
-
* `--check` drift gate.
|
|
12
|
-
*
|
|
13
|
-
* The distillation is a deterministic transform of the workflow markdown: it
|
|
14
|
-
* lifts the lens's *concern* labels — the bold lead-ins of the analysis /
|
|
15
|
-
* evaluation list items — from the audit region of the workflow (everything
|
|
16
|
-
* before the `Output Requirements` / report-template boundary), skipping the
|
|
17
|
-
* recurring boilerplate sections (Role, Context, Scope, Execution strategy,
|
|
18
|
-
* Configuration). When a lens exposes no bold concern items it falls back to
|
|
19
|
-
* its audit-step headings so every checklist is non-empty. The output is
|
|
20
|
-
* hard-capped at {@link MAX_CHECKLIST_LINES} lines.
|
|
21
|
-
*
|
|
22
|
-
* Pure: no IO, no provider calls, safe to unit-test in isolation.
|
|
23
|
-
*
|
|
24
|
-
* @see Story #4408 — per-lens authoring checklists as drift-gated artifacts.
|
|
2
|
+
* Pure distillation of an `audit-<lens>.md` workflow into the committed,
|
|
3
|
+
* drift-gated authoring checklist (the generator owns I/O). Lifts bold
|
|
4
|
+
* concern lead-ins from the audit region, skipping boilerplate sections and
|
|
5
|
+
* stopping at the report-template boundary; falls back to step headings.
|
|
25
6
|
*/
|
|
26
7
|
|
|
27
8
|
import { clampSummary, extractFrontmatter } from './frontmatter.js';
|
|
28
9
|
|
|
29
|
-
//
|
|
30
|
-
// `/.../`) so the maintainability engine's AST walker (typhonjs-escomplex) can
|
|
31
|
-
// score this file — see the note in lib/audit-suite/frontmatter.js.
|
|
10
|
+
// RegExp constructors, not literals: typhonjs-escomplex crashes on literals.
|
|
32
11
|
// biome-ignore-start lint/complexity/useRegexLiterals: typhonjs-escomplex MI workaround
|
|
33
12
|
const LINE_SPLIT_RE = new RegExp(String.raw`\r?\n`);
|
|
34
13
|
const FRONTMATTER_BLOCK_RE = new RegExp(
|
|
@@ -44,14 +23,11 @@ const BOLD_LEAD_ITEM_RE = new RegExp(
|
|
|
44
23
|
);
|
|
45
24
|
const STEP_PREFIX_RE = new RegExp(String.raw`^Step\s+\d+\s*[:.]?\s*`, 'i');
|
|
46
25
|
const TRAILING_COLON_RE = new RegExp(String.raw`\s*:\s*$`);
|
|
47
|
-
// A `##` section whose heading opens with one of these is workflow boilerplate,
|
|
48
|
-
// not a lens concern — its list items are skipped during concern extraction.
|
|
49
26
|
const BOILERPLATE_SECTION_RE = new RegExp(
|
|
50
27
|
String.raw`^(Role|Context & Objective|Scope|Execution strategy|Configuration|Run Context|Target set)\b`,
|
|
51
28
|
'i',
|
|
52
29
|
);
|
|
53
|
-
//
|
|
54
|
-
// first heading matching this is template scaffolding, never a concern.
|
|
30
|
+
// Everything from this heading on is report-template scaffolding.
|
|
55
31
|
const OUTPUT_BOUNDARY_RE = new RegExp(
|
|
56
32
|
'(Output Requirements|Generate the Report)',
|
|
57
33
|
'i',
|
|
@@ -61,15 +37,9 @@ const OUTPUT_BOUNDARY_RE = new RegExp(
|
|
|
61
37
|
/** Hard cap on generated checklist lines (asserted by the drift test). */
|
|
62
38
|
export const MAX_CHECKLIST_LINES = 40;
|
|
63
39
|
|
|
64
|
-
/** Fixed header/intro line budget consumed before the checklist items. */
|
|
65
40
|
const HEADER_LINE_BUDGET = 12;
|
|
66
41
|
|
|
67
42
|
/**
|
|
68
|
-
* Pure: walk the workflow body once, collecting the lens's concern labels (bold
|
|
69
|
-
* lead-ins of analysis/evaluation list items) and, as a fallback, its audit
|
|
70
|
-
* step headings. Extraction stops at the report-template boundary and ignores
|
|
71
|
-
* boilerplate sections.
|
|
72
|
-
*
|
|
73
43
|
* @param {string} content — raw `audit-<lens>.md` markdown.
|
|
74
44
|
* @returns {{ title: string|null, concerns: string[], stepHeadings: string[] }}
|
|
75
45
|
*/
|
|
@@ -114,10 +84,8 @@ export function extractLensConcerns(content) {
|
|
|
114
84
|
}
|
|
115
85
|
|
|
116
86
|
/**
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
* back into one line. `extractFrontmatter` only sees the indicator token
|
|
120
|
-
* (`>-`) for a block scalar, so this reads the continuation lines directly.
|
|
87
|
+
* One clamped description line; folds a YAML block scalar, whose indicator
|
|
88
|
+
* token is all `extractFrontmatter` sees.
|
|
121
89
|
*
|
|
122
90
|
* @param {string} content — raw workflow markdown.
|
|
123
91
|
* @param {Record<string, string>} fm — parsed frontmatter map.
|
|
@@ -146,7 +114,7 @@ export function resolveDescription(content, fm) {
|
|
|
146
114
|
}
|
|
147
115
|
|
|
148
116
|
/**
|
|
149
|
-
*
|
|
117
|
+
* Case-insensitive, first-seen order.
|
|
150
118
|
*
|
|
151
119
|
* @param {string[]} items
|
|
152
120
|
* @returns {string[]}
|
|
@@ -164,10 +132,7 @@ function dedupePreserveOrder(items) {
|
|
|
164
132
|
}
|
|
165
133
|
|
|
166
134
|
/**
|
|
167
|
-
*
|
|
168
|
-
* markdown. The output is deterministic (a pure function of `content`) and
|
|
169
|
-
* hard-capped at {@link MAX_CHECKLIST_LINES} lines including the trailing
|
|
170
|
-
* newline, so the same input always regenerates byte-identically.
|
|
135
|
+
* Deterministic, capped at {@link MAX_CHECKLIST_LINES} lines.
|
|
171
136
|
*
|
|
172
137
|
* @param {string} lens — canonical lens name (e.g. `security`).
|
|
173
138
|
* @param {string} content — raw `audit-<lens>.md` markdown.
|
|
@@ -1,74 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* The Story-scope local-lens pass materialized ~28 KB of lens prompts per
|
|
8
|
-
* close while sampled closes yielded almost zero findings — and none above
|
|
9
|
-
* Suggestion severity. The cheapest correct response is a deterministic
|
|
10
|
-
* floor: a *small* diff that touches *no* sensitive path earns no lens
|
|
11
|
-
* materialization at all. The floor is measured in **changed lines**
|
|
12
|
-
* (additions + deletions across the diff), configured via
|
|
13
|
-
* `delivery.review.lensDiffFloor` (default {@link DEFAULT_LENS_DIFF_FLOOR};
|
|
14
|
-
* `0` disables the skip entirely).
|
|
15
|
-
*
|
|
16
|
-
* ## Fail-open contract
|
|
17
|
-
*
|
|
18
|
-
* The skip only fires on positive evidence that the diff is small and
|
|
19
|
-
* non-sensitive. Every degraded input — an unknown line count, an
|
|
20
|
-
* unreadable manifest, a disabled floor — resolves to "do not skip", so a
|
|
21
|
-
* measurement failure can never buy a change less review. Sensitive-path
|
|
22
|
-
* hits are matched with the same `sensitivePaths` classes the review-depth
|
|
23
|
-
* derivation reads (`selectSensitivePathClasses`), so the floor and the
|
|
24
|
-
* depth tiering can never disagree about what "sensitive" means.
|
|
25
|
-
*
|
|
26
|
-
* All exports are total: no throws, no I/O beyond the injected git spawn in
|
|
27
|
-
* {@link countChangedLines}.
|
|
2
|
+
* Close-scope lens diff-floor: a diff under the changed-line floor that
|
|
3
|
+
* touches no sensitive path skips lens materialization. Fail-open — every
|
|
4
|
+
* degraded input (unknown count, unreadable manifest, floor `0`) means "do
|
|
5
|
+
* not skip". Sensitive classes come from the same selector as review depth,
|
|
6
|
+
* so the two never disagree. Total; no I/O beyond the injected git spawn.
|
|
28
7
|
*/
|
|
29
8
|
|
|
30
9
|
import { gitSpawn } from '../git-utils.js';
|
|
31
10
|
import { readNumstatRows } from '../orchestration/diff-magnitude.js';
|
|
32
11
|
import { selectSensitivePathClasses } from './selector.js';
|
|
33
12
|
|
|
34
|
-
/**
|
|
35
|
-
* Default changed-line floor below which a non-sensitive diff skips lens
|
|
36
|
-
* materialization. Chosen from the measured distribution (Story #4699): the
|
|
37
|
-
* sampled zero-yield closes clustered well under this size.
|
|
38
|
-
*/
|
|
13
|
+
/** Measured: zero-yield closes clustered well under this size. */
|
|
39
14
|
export const DEFAULT_LENS_DIFF_FLOOR = 40;
|
|
40
15
|
|
|
41
16
|
/**
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
* {@link DEFAULT_LENS_DIFF_FLOOR}. `0` is a valid, deliberate "floor off".
|
|
46
|
-
*
|
|
47
|
-
* @param {object|null|undefined} config Resolved `.agentrc.json` wrapper.
|
|
48
|
-
* @returns {number}
|
|
49
|
-
*/
|
|
50
|
-
export function resolveLensDiffFloor(config) {
|
|
51
|
-
const value = config?.delivery?.review?.lensDiffFloor;
|
|
52
|
-
if (typeof value === 'number' && Number.isInteger(value) && value >= 0) {
|
|
53
|
-
return value;
|
|
54
|
-
}
|
|
55
|
-
return DEFAULT_LENS_DIFF_FLOOR;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* Count the changed lines (additions + deletions) in the
|
|
60
|
-
* `baseRef...headRef` diff via `git diff --numstat`.
|
|
61
|
-
*
|
|
62
|
-
* The read and the parse are shared with the light path's magnitude backstop
|
|
63
|
-
* ({@link module:lib/orchestration/diff-magnitude.readNumstatRows}) so the two
|
|
64
|
-
* cannot disagree about how a diff is measured. This one keeps a whole-diff
|
|
65
|
-
* total: the lens floor asks "is this diff small", not "is its implementation
|
|
66
|
-
* half small", so it deliberately does **not** apply the companion exemption.
|
|
67
|
-
*
|
|
68
|
-
* Total — never throws. Returns `null` (the neutral "count unknown" signal
|
|
69
|
-
* the floor fails open on) for any git failure or unparseable output, and
|
|
70
|
-
* `0` for a genuinely empty diff. Binary rows (`-\t-\tpath`) contribute 0
|
|
71
|
-
* text lines but do not poison the parse.
|
|
17
|
+
* Whole-diff additions + deletions (no companion exemption: the question is
|
|
18
|
+
* "is this diff small"). Shares the numstat parse with the light path's
|
|
19
|
+
* backstop. `null` on any git failure; binary rows count 0.
|
|
72
20
|
*
|
|
73
21
|
* @param {{
|
|
74
22
|
* baseRef: string,
|
|
@@ -90,20 +38,8 @@ export function countChangedLines({
|
|
|
90
38
|
}
|
|
91
39
|
|
|
92
40
|
/**
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
* 1. The floor is enabled (`floor > 0`).
|
|
97
|
-
* 2. The changed-line count is *known* and strictly below the floor.
|
|
98
|
-
* 3. The changed-file set intersects **zero** registered sensitive-path
|
|
99
|
-
* classes (`audit-rules.json#sensitivePaths`).
|
|
100
|
-
*
|
|
101
|
-
* Every other state — floor disabled, unknown count, at-or-above floor, a
|
|
102
|
-
* sensitive-path hit — resolves to `skip: false` with a named reason, so
|
|
103
|
-
* the verdict is auditable in the findings-yield ledger.
|
|
104
|
-
*
|
|
105
|
-
* Pure and total: never throws (a throwing sensitive-path matcher degrades
|
|
106
|
-
* to "not skippable").
|
|
41
|
+
* Skip only when the floor is enabled, the count is known and below it, and
|
|
42
|
+
* no sensitive-path class matches; every other state names its reason.
|
|
107
43
|
*
|
|
108
44
|
* @param {{
|
|
109
45
|
* changedFiles?: string[]|null,
|
|
@@ -153,7 +89,6 @@ export function evaluateLensDiffFloor(input = {}) {
|
|
|
153
89
|
injectedRules: input.injectedRules,
|
|
154
90
|
});
|
|
155
91
|
} catch {
|
|
156
|
-
// An unreadable manifest is not evidence the change is safe to skip.
|
|
157
92
|
return verdict(false, 'sensitive-classes-unknown');
|
|
158
93
|
}
|
|
159
94
|
const matched = Array.isArray(classes) ? classes : [];
|
|
@@ -1,20 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Extracted from the former `run-audit-suite.js` CLI (Story #963, Epic #946;
|
|
5
|
-
* the CLI wrapper itself was retired in #4482 — `runAuditSuite` via the
|
|
6
|
-
* barrel is the only supported entry point).
|
|
7
|
-
*
|
|
8
|
-
* The runner composes the focused helpers from this directory:
|
|
9
|
-
* - frontmatter.js → `summarizeWorkflow`
|
|
10
|
-
* - substitutions.js → `applySubstitutions`, `computeAllowedKeys`
|
|
11
|
-
* - findings.js → `aggregateSummary`
|
|
12
|
-
* - workflow-loader.js → `loadWorkflow`, `defaultWriteArtifact`
|
|
13
|
-
*
|
|
14
|
-
* It owns the audit envelope shape (`metadata`, `findings`, `workflows`) and
|
|
15
|
-
* the per-audit fan-out + result reduction. The former CLI entry-point
|
|
16
|
-
* (`run-audit-suite.js`) was retired in #4482; callers invoke
|
|
17
|
-
* `runAuditSuite` via the `lib/audit-suite/index.js` barrel.
|
|
2
|
+
* `runAuditSuite`: owns the audit envelope shape (`metadata`, `findings`,
|
|
3
|
+
* `workflows`) and the per-audit fan-out; invoked via the barrel.
|
|
18
4
|
*/
|
|
19
5
|
|
|
20
6
|
import fs from 'node:fs/promises';
|
|
@@ -149,35 +135,19 @@ async function reduceResults({
|
|
|
149
135
|
}
|
|
150
136
|
|
|
151
137
|
/**
|
|
152
|
-
*
|
|
153
|
-
*
|
|
154
|
-
*
|
|
155
|
-
*
|
|
156
|
-
* 2. Locate the corresponding `.agents/workflows/<auditName>.md` file.
|
|
157
|
-
* 3. Return a slim `workflow` descriptor (audit name, source path, summary,
|
|
158
|
-
* byte size) for the calling AI agent. Full prompt bodies are written to
|
|
159
|
-
* `<auditOutputDir>/audit-<runId>-<audit>.md` (resolved from
|
|
160
|
-
* `project.paths.tempRoot`, default `temp/audits/`) when `artifactPrefix`
|
|
161
|
-
* (or `runId`) is provided, so downstream agents can read them locally
|
|
162
|
-
* without bloating the GitHub comment surface.
|
|
163
|
-
*
|
|
164
|
-
* Substitutions: callers may pass a `substitutions` map of `{{key}}` → value
|
|
165
|
-
* pairs. Allowed keys are the built-ins (auditOutputDir, ticketId, baseBranch,
|
|
166
|
-
* changedFiles) plus any `substitutionKeys` declared on the requested audits in
|
|
167
|
-
* audit-rules.json, aggregated across auditWorkflows. Unknown keys
|
|
168
|
-
* raise a ValidationError.
|
|
138
|
+
* Resolve registered audit workflows into slim descriptors; with
|
|
139
|
+
* `artifactPrefix`, full bodies are written to disk instead of travelling in
|
|
140
|
+
* the envelope. Substitution keys beyond the built-ins must be declared as
|
|
141
|
+
* `substitutionKeys` in audit-rules.json, else ValidationError.
|
|
169
142
|
*
|
|
170
143
|
* @param {object} opts
|
|
171
|
-
* @param {string[]} opts.auditWorkflows
|
|
172
|
-
* @param {Record<string,string>} [opts.substitutions]
|
|
173
|
-
* @param {string} [opts.artifactPrefix] -
|
|
174
|
-
*
|
|
175
|
-
* @param {
|
|
176
|
-
*
|
|
177
|
-
*
|
|
178
|
-
* @param {Function} [opts.injectedLoadWorkflow] - Optional override for testing.
|
|
179
|
-
* @param {object} [opts.injectedRules] - Optional override for the audit-rules content (testing).
|
|
180
|
-
* @param {Function} [opts.injectedWriteArtifact] - Optional override for filesystem-free testing.
|
|
144
|
+
* @param {string[]} opts.auditWorkflows
|
|
145
|
+
* @param {Record<string,string>} [opts.substitutions]
|
|
146
|
+
* @param {string} [opts.artifactPrefix] - writes `audit-<prefix>-<audit>.md`.
|
|
147
|
+
* @param {string} [opts.artifactsDir] - defaults to `<auditOutputDir>`.
|
|
148
|
+
* @param {Function} [opts.injectedLoadWorkflow]
|
|
149
|
+
* @param {object} [opts.injectedRules]
|
|
150
|
+
* @param {Function} [opts.injectedWriteArtifact]
|
|
181
151
|
* @returns {Promise<object>} Aggregated audit results.
|
|
182
152
|
*/
|
|
183
153
|
export async function runAuditSuite({
|