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,28 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* through this interface. Concrete implementations (e.g., `providers/github.js`)
|
|
6
|
-
* extend this class and override every method.
|
|
7
|
-
*
|
|
8
|
-
* Unoverridden methods throw `Error('Not implemented: <method>')` to enforce
|
|
9
|
-
* the contract at runtime rather than silently returning `undefined`.
|
|
10
|
-
*
|
|
11
|
-
* @see docs/architecture.md — Provider Abstraction Layer
|
|
12
|
-
* @see docs/v5-implementation-plan.md Sprint 1A
|
|
2
|
+
* Abstract ticketing provider. Implementations (e.g. `providers/github.js`)
|
|
3
|
+
* override every method; unoverridden ones throw rather than return
|
|
4
|
+
* `undefined`.
|
|
13
5
|
*/
|
|
14
6
|
|
|
15
7
|
export class ITicketingProvider {
|
|
16
|
-
//
|
|
17
|
-
// Read Operations
|
|
18
|
-
// ---------------------------------------------------------------------------
|
|
8
|
+
// Reads
|
|
19
9
|
|
|
20
10
|
/**
|
|
21
|
-
*
|
|
22
|
-
* (ideation sections plus the folded Tech Spec / Acceptance Table
|
|
23
|
-
* managed sections, Story #4324).
|
|
24
|
-
*
|
|
25
|
-
* @param {number} epicId - GitHub Issue number of the Epic.
|
|
11
|
+
* @param {number} epicId
|
|
26
12
|
* @returns {Promise<{
|
|
27
13
|
* id: number,
|
|
28
14
|
* title: string,
|
|
@@ -34,10 +20,8 @@ export class ITicketingProvider {
|
|
|
34
20
|
throw new Error('Not implemented: getEpic');
|
|
35
21
|
}
|
|
36
22
|
/**
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
* @param {number} epicId - GitHub Issue number of the Epic.
|
|
40
|
-
* @param {{ label?: string, state?: string }} [filters={}] - Filter criteria.
|
|
23
|
+
* @param {number} epicId
|
|
24
|
+
* @param {{ label?: string, state?: string }} [filters={}]
|
|
41
25
|
* @returns {Promise<Array<{
|
|
42
26
|
* id: number,
|
|
43
27
|
* title: string,
|
|
@@ -50,9 +34,7 @@ export class ITicketingProvider {
|
|
|
50
34
|
}
|
|
51
35
|
|
|
52
36
|
/**
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
* @param {number} parentId - GitHub Issue number of the parent.
|
|
37
|
+
* @param {number} parentId
|
|
56
38
|
* @returns {Promise<Array<{
|
|
57
39
|
* id: number,
|
|
58
40
|
* title: string,
|
|
@@ -65,9 +47,7 @@ export class ITicketingProvider {
|
|
|
65
47
|
}
|
|
66
48
|
|
|
67
49
|
/**
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
* @param {number} ticketId - GitHub Issue number.
|
|
50
|
+
* @param {number} ticketId
|
|
71
51
|
* @returns {Promise<{
|
|
72
52
|
* id: number,
|
|
73
53
|
* title: string,
|
|
@@ -82,41 +62,19 @@ export class ITicketingProvider {
|
|
|
82
62
|
}
|
|
83
63
|
|
|
84
64
|
/**
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
* served from cache instead of issuing a REST round-trip.
|
|
88
|
-
*
|
|
89
|
-
* Default no-op: providers without a cache (e.g. the manual adapter or
|
|
90
|
-
* test stubs) need not override. Call sites can therefore invoke
|
|
91
|
-
* `provider.primeTicketCache(tickets)` unconditionally without an
|
|
92
|
-
* `instanceof` / `typeof === 'function'` capability check.
|
|
65
|
+
* Seed the ticket cache so later `getTicket` calls skip a round-trip. A
|
|
66
|
+
* no-op by default, so callers need no capability check.
|
|
93
67
|
*
|
|
94
68
|
* @param {Array<{ id: number }>} _tickets
|
|
95
69
|
* @returns {void}
|
|
96
70
|
*/
|
|
97
|
-
primeTicketCache(_tickets) {
|
|
98
|
-
// Intentional no-op. Concrete providers that maintain a cache override.
|
|
99
|
-
}
|
|
71
|
+
primeTicketCache(_tickets) {}
|
|
100
72
|
|
|
101
73
|
/**
|
|
102
|
-
* List
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
* other read on this interface does — in particular `id` is the **issue
|
|
107
|
-
* number**, not the backend's internal database id.
|
|
108
|
-
*
|
|
109
|
-
* That single rule is the whole reason the method exists. The raw REST
|
|
110
|
-
* payload names the issue number `number` and the database id `id`, so a
|
|
111
|
-
* consumer handed either shape wrote `number ?? id` and appeared to cope —
|
|
112
|
-
* while silently addressing issues by database id on the mapped shape,
|
|
113
|
-
* because there `id` is already the number and the fallback never fires.
|
|
114
|
-
* A declared shape removes the choice rather than documenting it.
|
|
115
|
-
*
|
|
116
|
-
* `state` selects `open` (default), `closed` or `all`. Implementations MUST
|
|
117
|
-
* honour it: a caller asking for `all` is asking a question — "did this
|
|
118
|
-
* child reopen?" — that an open-only listing answers wrongly rather than
|
|
119
|
-
* partially.
|
|
74
|
+
* List tickets carrying `labels` in the mapped shape: `id` MUST be the issue
|
|
75
|
+
* number, never the backend database id (a raw-vs-mapped `number ?? id`
|
|
76
|
+
* fallback silently addresses the wrong issue). `state` (default `open`)
|
|
77
|
+
* MUST be honoured.
|
|
120
78
|
*
|
|
121
79
|
* @param {{ state?: 'open'|'closed'|'all', labels?: string }} [_opts]
|
|
122
80
|
* @returns {Promise<Array<{
|
|
@@ -134,19 +92,9 @@ export class ITicketingProvider {
|
|
|
134
92
|
}
|
|
135
93
|
|
|
136
94
|
/**
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
* backend's child edge is keyed by the parent's opaque node id, while
|
|
141
|
-
* `number` exists only so a degraded read can name the parent it failed on.
|
|
142
|
-
* Passing the number where the node id belongs is not a type error — it is
|
|
143
|
-
* a successful call about the wrong issue — which is why the parameter
|
|
144
|
-
* order is fixed here rather than left to each call site.
|
|
145
|
-
*
|
|
146
|
-
* Implementations MUST return `[]` rather than throw when the sub-issue
|
|
147
|
-
* feature is unavailable on the backend: absence of the feature is not a
|
|
148
|
-
* failed read, and callers union this with a body checklist that still
|
|
149
|
-
* answers the question.
|
|
95
|
+
* Native sub-issue children as issue numbers. The edge is keyed by node id;
|
|
96
|
+
* passing the number there succeeds about the wrong issue. MUST return `[]`
|
|
97
|
+
* when the backend lacks the feature (callers union a body checklist).
|
|
150
98
|
*
|
|
151
99
|
* @param {string} _nodeId Opaque node id of the parent.
|
|
152
100
|
* @param {number} _number Parent's issue number, for diagnostics only.
|
|
@@ -157,30 +105,19 @@ export class ITicketingProvider {
|
|
|
157
105
|
}
|
|
158
106
|
|
|
159
107
|
/**
|
|
160
|
-
* Resolve a
|
|
108
|
+
* Resolve a container parent in one call. Returns `null` (never throws) when
|
|
109
|
+
* there is no parent or the backend cannot answer, so a degraded lookup
|
|
110
|
+
* never fails a lifecycle edge.
|
|
161
111
|
*
|
|
162
|
-
*
|
|
163
|
-
*
|
|
164
|
-
* each one's children — O(containers) requests to answer what the backend
|
|
165
|
-
* knows directly.
|
|
166
|
-
*
|
|
167
|
-
* Returns `null` when the ticket has no parent, and `null` rather than
|
|
168
|
-
* throwing when the backend cannot answer. Callers treat a null as "no
|
|
169
|
-
* parent resolved *here*" and may fall back to a body-declared link; an
|
|
170
|
-
* exception would turn a degraded lookup into a failed lifecycle edge.
|
|
171
|
-
*
|
|
172
|
-
* @param {number} _number Issue number whose parent to resolve.
|
|
173
|
-
* @returns {Promise<object|null>} Mapped parent ticket, or null.
|
|
112
|
+
* @param {number} _number
|
|
113
|
+
* @returns {Promise<object|null>}
|
|
174
114
|
*/
|
|
175
115
|
async getParentIssue(_number) {
|
|
176
116
|
throw new Error('Not implemented: getParentIssue');
|
|
177
117
|
}
|
|
178
118
|
|
|
179
119
|
/**
|
|
180
|
-
*
|
|
181
|
-
* Parses `blocked by #NNN` patterns from the ticket body.
|
|
182
|
-
*
|
|
183
|
-
* @param {number} ticketId - GitHub Issue number.
|
|
120
|
+
* @param {number} ticketId
|
|
184
121
|
* @returns {Promise<{
|
|
185
122
|
* blocks: number[],
|
|
186
123
|
* blockedBy: number[]
|
|
@@ -191,28 +128,22 @@ export class ITicketingProvider {
|
|
|
191
128
|
}
|
|
192
129
|
|
|
193
130
|
/**
|
|
194
|
-
*
|
|
195
|
-
*
|
|
196
|
-
* @param {number} ticketId - GitHub Issue number.
|
|
197
|
-
* @returns {Promise<object[]>} Array of comment objects.
|
|
131
|
+
* @param {number} ticketId
|
|
132
|
+
* @returns {Promise<object[]>}
|
|
198
133
|
*/
|
|
199
134
|
async getTicketComments(_ticketId) {
|
|
200
135
|
throw new Error('Not implemented: getTicketComments');
|
|
201
136
|
}
|
|
202
137
|
|
|
203
|
-
//
|
|
204
|
-
// Write Operations
|
|
205
|
-
// ---------------------------------------------------------------------------
|
|
138
|
+
// Writes
|
|
206
139
|
|
|
207
140
|
/**
|
|
208
|
-
*
|
|
209
|
-
*
|
|
210
|
-
* @param {number} ticketId - GitHub Issue number.
|
|
141
|
+
* @param {number} ticketId
|
|
211
142
|
* @param {{
|
|
212
143
|
* labels?: { add?: string[], remove?: string[] },
|
|
213
144
|
* body?: string,
|
|
214
145
|
* assignees?: string[]
|
|
215
|
-
* }} mutations
|
|
146
|
+
* }} mutations
|
|
216
147
|
* @returns {Promise<void>}
|
|
217
148
|
*/
|
|
218
149
|
async updateTicket(_ticketId, _mutations) {
|
|
@@ -220,13 +151,11 @@ export class ITicketingProvider {
|
|
|
220
151
|
}
|
|
221
152
|
|
|
222
153
|
/**
|
|
223
|
-
*
|
|
224
|
-
*
|
|
225
|
-
* @param {number} ticketId - GitHub Issue number.
|
|
154
|
+
* @param {number} ticketId
|
|
226
155
|
* @param {{
|
|
227
156
|
* body: string,
|
|
228
157
|
* type: 'progress'|'friction'|'notification'
|
|
229
|
-
* }} payload
|
|
158
|
+
* }} payload
|
|
230
159
|
* @returns {Promise<{ commentId: number }>}
|
|
231
160
|
*/
|
|
232
161
|
async postComment(_ticketId, _payload) {
|
|
@@ -234,8 +163,7 @@ export class ITicketingProvider {
|
|
|
234
163
|
}
|
|
235
164
|
|
|
236
165
|
/**
|
|
237
|
-
*
|
|
238
|
-
* Implementations SHOULD treat "not found" as a no-op.
|
|
166
|
+
* SHOULD treat "not found" as a no-op.
|
|
239
167
|
*
|
|
240
168
|
* @param {number} _commentId
|
|
241
169
|
* @returns {Promise<void>}
|
|
@@ -244,13 +172,9 @@ export class ITicketingProvider {
|
|
|
244
172
|
throw new Error('Not implemented: deleteComment');
|
|
245
173
|
}
|
|
246
174
|
|
|
247
|
-
//
|
|
248
|
-
// Setup Operations (used by bootstrap)
|
|
249
|
-
// ---------------------------------------------------------------------------
|
|
175
|
+
// Setup (bootstrap)
|
|
250
176
|
|
|
251
177
|
/**
|
|
252
|
-
* Idempotent label creation. Skips labels that already exist.
|
|
253
|
-
*
|
|
254
178
|
* @param {Array<{ name: string, color: string, description: string }>} labelDefs
|
|
255
179
|
* @returns {Promise<{ created: string[], skipped: string[] }>}
|
|
256
180
|
*/
|
|
@@ -259,11 +183,8 @@ export class ITicketingProvider {
|
|
|
259
183
|
}
|
|
260
184
|
|
|
261
185
|
/**
|
|
262
|
-
*
|
|
263
|
-
*
|
|
264
|
-
* Implementations MUST paginate rather than take a fixed page cap: a cap is
|
|
265
|
-
* silent truncation, and a caller deciding what to delete from a truncated
|
|
266
|
-
* view is the exact failure Story #5189 exists to stop reproducing.
|
|
186
|
+
* MUST paginate: a page cap silently truncates, and callers decide
|
|
187
|
+
* deletions from this list.
|
|
267
188
|
*
|
|
268
189
|
* @returns {Promise<Array<{ name: string, color: string|null, description: string|null }>>}
|
|
269
190
|
*/
|
|
@@ -272,11 +193,8 @@ export class ITicketingProvider {
|
|
|
272
193
|
}
|
|
273
194
|
|
|
274
195
|
/**
|
|
275
|
-
*
|
|
276
|
-
*
|
|
277
|
-
* A label that is already gone MUST resolve as a successful no-op
|
|
278
|
-
* (`{ deleted: false, reason: 'not-found' }`) rather than throwing, so a
|
|
279
|
-
* re-run of any sweep built on this port is idempotent.
|
|
196
|
+
* An absent label MUST resolve `{ deleted: false, reason: 'not-found' }`,
|
|
197
|
+
* never throw, so sweeps are idempotent.
|
|
280
198
|
*
|
|
281
199
|
* @param {string} _name
|
|
282
200
|
* @returns {Promise<{ deleted: boolean, reason: string|null }>}
|
|
@@ -286,8 +204,7 @@ export class ITicketingProvider {
|
|
|
286
204
|
}
|
|
287
205
|
|
|
288
206
|
/**
|
|
289
|
-
* Idempotent
|
|
290
|
-
* Only applicable when `projectNumber` is configured.
|
|
207
|
+
* Idempotent; only applicable when `projectNumber` is configured.
|
|
291
208
|
*
|
|
292
209
|
* @param {Array<{
|
|
293
210
|
* name: string,
|
|
@@ -301,21 +218,17 @@ export class ITicketingProvider {
|
|
|
301
218
|
}
|
|
302
219
|
|
|
303
220
|
/**
|
|
304
|
-
*
|
|
305
|
-
* @param {string} _query - GraphQL query/mutation string.
|
|
221
|
+
* @param {string} _query
|
|
306
222
|
* @param {object} [_variables={}]
|
|
307
223
|
* @param {object} [_opts={}]
|
|
308
|
-
* @returns {Promise<object>} The `data
|
|
224
|
+
* @returns {Promise<object>} The response's `data`.
|
|
309
225
|
*/
|
|
310
226
|
async graphql(_query, _variables = {}, _opts = {}) {
|
|
311
227
|
throw new Error('Not implemented: graphql');
|
|
312
228
|
}
|
|
313
229
|
|
|
314
230
|
/**
|
|
315
|
-
*
|
|
316
|
-
* `{ enabled: false }` when no protection rule exists (HTTP 404), and
|
|
317
|
-
* `{ enabled: true, raw }` when one does. Implementations may return a
|
|
318
|
-
* richer shape; the only contract consumers rely on is the boolean.
|
|
231
|
+
* `{ enabled: false }` on 404; consumers rely only on the boolean.
|
|
319
232
|
*
|
|
320
233
|
* @param {string} _branch
|
|
321
234
|
* @returns {Promise<{ enabled: boolean, raw?: object }>}
|
|
@@ -325,15 +238,9 @@ export class ITicketingProvider {
|
|
|
325
238
|
}
|
|
326
239
|
|
|
327
240
|
/**
|
|
328
|
-
*
|
|
329
|
-
*
|
|
330
|
-
*
|
|
331
|
-
* created with sensible defaults and just the supplied contexts.
|
|
332
|
-
*
|
|
333
|
-
* Returns a summary `{ created, added, existing }` describing the diff
|
|
334
|
-
* the bootstrap orchestrator surfaces to the operator. Implementations
|
|
335
|
-
* MAY ignore other branch-protection knobs (PR review counts, signed
|
|
336
|
-
* commits, etc.) so operator-tuned settings survive re-runs.
|
|
241
|
+
* Additively merge required status-check `contexts` (creating the rule if
|
|
242
|
+
* absent). Other protection knobs are left alone so operator tuning
|
|
243
|
+
* survives re-runs.
|
|
337
244
|
*
|
|
338
245
|
* @param {string} _branch
|
|
339
246
|
* @param {{ contexts: string[], strict?: boolean }} _opts
|
|
@@ -344,9 +251,7 @@ export class ITicketingProvider {
|
|
|
344
251
|
}
|
|
345
252
|
|
|
346
253
|
/**
|
|
347
|
-
*
|
|
348
|
-
* flags. Returns a sparse object containing only the fields the upstream
|
|
349
|
-
* API exposes (consumers should treat missing keys as "unknown").
|
|
254
|
+
* Sparse: a missing key means "unknown".
|
|
350
255
|
*
|
|
351
256
|
* @returns {Promise<Partial<{
|
|
352
257
|
* allow_squash_merge: boolean,
|
|
@@ -361,8 +266,7 @@ export class ITicketingProvider {
|
|
|
361
266
|
}
|
|
362
267
|
|
|
363
268
|
/**
|
|
364
|
-
* PATCH
|
|
365
|
-
* only the supplied fields are sent / touched.
|
|
269
|
+
* Sparse PATCH: only supplied fields are touched.
|
|
366
270
|
*
|
|
367
271
|
* @param {Partial<{
|
|
368
272
|
* allow_squash_merge: boolean,
|
|
@@ -1,52 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* - `warn`: recoverable issue the operator should notice.
|
|
7
|
-
* - `error`: non-fatal failure; caller continues. Use when `throw` would
|
|
8
|
-
* be too loud (e.g. best-effort cleanup paths).
|
|
9
|
-
* - `fatal`: unrecoverable; exits the process. Use only at CLI
|
|
10
|
-
* boundaries, never inside library code.
|
|
11
|
-
*
|
|
12
|
-
* Level is resolved **lazily on every emit** from `AGENT_LOG_LEVEL` (or a
|
|
13
|
-
* `setLevel` override). Resolving per emit — rather than once at module
|
|
14
|
-
* load — lets tests exercise every level branch in-process via `setLevel`
|
|
15
|
-
* or a live `AGENT_LOG_LEVEL` flip, without spawning a child process per
|
|
16
|
-
* level (Story #3329):
|
|
17
|
-
*
|
|
18
|
-
* - `silent` → only `fatal` emits.
|
|
19
|
-
* - `info` → default. Emits `info` and above; suppresses `debug`.
|
|
20
|
-
* - `verbose` → emits everything (including `debug`).
|
|
2
|
+
* `error` is non-fatal (the caller continues); `fatal` exits and belongs only
|
|
3
|
+
* at CLI boundaries. The level (`silent` = fatal only, `info` default,
|
|
4
|
+
* `verbose` adds debug) is resolved from `AGENT_LOG_LEVEL` on every emit, not
|
|
5
|
+
* at load, so tests can flip it in-process.
|
|
21
6
|
*/
|
|
22
7
|
/**
|
|
23
|
-
*
|
|
24
|
-
* resolves to `info`.
|
|
8
|
+
* Anything else resolves to `info`.
|
|
25
9
|
*
|
|
26
10
|
* @type {ReadonlySet<string>}
|
|
27
11
|
*/
|
|
28
12
|
const VALID_LEVELS = Object.freeze(new Set(['silent', 'info', 'verbose']));
|
|
29
13
|
|
|
30
14
|
/**
|
|
31
|
-
*
|
|
32
|
-
* `AGENT_LOG_LEVEL` from the environment on each resolve". `setLevel`
|
|
33
|
-
* pins this so tests (and embedders) can exercise every level branch
|
|
34
|
-
* in-process without spawning a child whose module-load reads a different
|
|
35
|
-
* env var. `setLevel(null)` clears the pin and restores env-driven
|
|
36
|
-
* resolution.
|
|
15
|
+
* `null` means read `AGENT_LOG_LEVEL` on each resolve.
|
|
37
16
|
*
|
|
38
17
|
* @type {string|null}
|
|
39
18
|
*/
|
|
40
19
|
let levelOverride = null;
|
|
41
20
|
|
|
42
21
|
/**
|
|
43
|
-
* Resolve the active log level lazily. Honors an explicit `setLevel`
|
|
44
|
-
* override first, otherwise reads `AGENT_LOG_LEVEL` from the environment
|
|
45
|
-
* on every call. Resolving per emit (rather than once at module load)
|
|
46
|
-
* means a test can flip `AGENT_LOG_LEVEL` — or call `setLevel` — and see
|
|
47
|
-
* the level branches react in-process, without a child process per level
|
|
48
|
-
* (Story #3329).
|
|
49
|
-
*
|
|
50
22
|
* @returns {'silent'|'info'|'verbose'}
|
|
51
23
|
*/
|
|
52
24
|
export function resolveLevel() {
|
|
@@ -59,11 +31,8 @@ export function resolveLevel() {
|
|
|
59
31
|
}
|
|
60
32
|
|
|
61
33
|
/**
|
|
62
|
-
* Pin the
|
|
63
|
-
*
|
|
64
|
-
* or `null` to clear the pin and restore env-driven resolution. An
|
|
65
|
-
* unrecognized non-null value throws so callers cannot silently pin a
|
|
66
|
-
* level that resolves to `info`.
|
|
34
|
+
* Pin the level (`null` clears it). An unrecognized value throws rather than
|
|
35
|
+
* silently pinning `info`.
|
|
67
36
|
*
|
|
68
37
|
* @param {('silent'|'info'|'verbose')|null} level
|
|
69
38
|
* @returns {void}
|
|
@@ -89,24 +58,12 @@ function infoEnabled() {
|
|
|
89
58
|
return resolveLevel() === 'info' || debugEnabled();
|
|
90
59
|
}
|
|
91
60
|
|
|
92
|
-
//
|
|
93
|
-
// stdout branch of `createProgress` (defaults to console.log). `warn` already
|
|
94
|
-
// uses console.warn which Node routes to stderr, but we expose a sink for it
|
|
95
|
-
// too so a single `routeAllOutputToStderr()` call gives a uniform guarantee
|
|
96
|
-
// to callers that "no Logger output lands on stdout" (Story #2278).
|
|
61
|
+
// Swappable so `routeAllOutputToStderr()` can guarantee nothing hits stdout.
|
|
97
62
|
let infoSink = (msg) => console.log(msg);
|
|
98
63
|
let warnSink = (msg) => console.warn(msg);
|
|
99
64
|
let progressStdoutSink = (msg) => console.log(msg);
|
|
100
65
|
|
|
101
|
-
/**
|
|
102
|
-
* Flip every Logger output that can land on stdout (`info`, `warn`, and the
|
|
103
|
-
* stdout branch of `createProgress`) to stderr for the lifetime of the
|
|
104
|
-
* process. Idempotent. Use when stdout is reserved for a structured payload
|
|
105
|
-
* — for example the JSON envelope emitted by
|
|
106
|
-
* `plan-context.js`, where any interleaved
|
|
107
|
-
* `[Orchestrator] ℹ️ …` log line corrupts the captured file
|
|
108
|
-
* (Story #2278).
|
|
109
|
-
*/
|
|
66
|
+
/** For processes whose stdout is a structured payload. Idempotent. */
|
|
110
67
|
export function routeAllOutputToStderr() {
|
|
111
68
|
infoSink = (msg) => console.error(msg);
|
|
112
69
|
warnSink = (msg) => console.error(msg);
|
|
@@ -114,11 +71,7 @@ export function routeAllOutputToStderr() {
|
|
|
114
71
|
}
|
|
115
72
|
|
|
116
73
|
export const Logger = {
|
|
117
|
-
/**
|
|
118
|
-
* The currently-resolved level. A getter (not a frozen snapshot) so it
|
|
119
|
-
* reflects `setLevel` overrides and live `AGENT_LOG_LEVEL` changes —
|
|
120
|
-
* reading `Logger.level` always returns what the next emit will use.
|
|
121
|
-
*/
|
|
74
|
+
/** A getter, so it always reports what the next emit will use. */
|
|
122
75
|
get level() {
|
|
123
76
|
return resolveLevel();
|
|
124
77
|
},
|
|
@@ -155,16 +108,8 @@ export const Logger = {
|
|
|
155
108
|
};
|
|
156
109
|
|
|
157
110
|
/**
|
|
158
|
-
*
|
|
159
|
-
*
|
|
160
|
-
* this as the default-argument value when a function accepts an optional
|
|
161
|
-
* logger; consumers that don't pass one get a uniform shape without each
|
|
162
|
-
* call site re-declaring its own inline literal.
|
|
163
|
-
*
|
|
164
|
-
* Deliberately omits `fatal` so that any code path tempted to call
|
|
165
|
-
* `logger.fatal(...)` against the no-op fails loudly rather than silently
|
|
166
|
-
* skipping a process-exit that would otherwise have surfaced an
|
|
167
|
-
* unrecoverable error.
|
|
111
|
+
* Default for an optional logger. Omits `fatal` deliberately: a silenced
|
|
112
|
+
* process-exit would hide an unrecoverable error, so calling it throws.
|
|
168
113
|
*/
|
|
169
114
|
export const NOOP_LOGGER = Object.freeze({
|
|
170
115
|
silent: true,
|
|
@@ -174,14 +119,7 @@ export const NOOP_LOGGER = Object.freeze({
|
|
|
174
119
|
error() {},
|
|
175
120
|
});
|
|
176
121
|
|
|
177
|
-
/**
|
|
178
|
-
* Frozen logger that routes every level to **stderr**. Use this when a
|
|
179
|
-
* caller's stdout is a structured payload (e.g. the authoring-context JSON
|
|
180
|
-
* envelope from `plan-context.js`) and any
|
|
181
|
-
* progress/telemetry log must not interleave with the payload. Mirrors the
|
|
182
|
-
* `{ info, warn, error, debug }` shape that the orchestration helpers
|
|
183
|
-
* accept via optional `logger` arguments.
|
|
184
|
-
*/
|
|
122
|
+
/** Every level to stderr, for callers whose stdout is a structured payload. */
|
|
185
123
|
export const STDERR_LOGGER = Object.freeze({
|
|
186
124
|
debug: (message) => console.error(message),
|
|
187
125
|
info: (message) => console.error(message),
|
|
@@ -1,16 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* Strictly read-only and strictly offline: it reads committed baselines, the
|
|
6
|
-
* resolved config, git history, the static import graph, and any friction
|
|
7
|
-
* ledger it finds. It never writes under `baselines/`, never refreshes a
|
|
8
|
-
* baseline, and never runs a test, coverage, or mutation suite — the whole
|
|
9
|
-
* point is that a baseline review costs a file read, not a CI run.
|
|
10
|
-
*
|
|
11
|
-
* Findings are evidence, not a verdict: assembling the envelope is success,
|
|
12
|
-
* however alarming its contents, so the CLI exits 0 whenever it got this far.
|
|
13
|
-
* Judgment belongs to the lens that reads the envelope.
|
|
2
|
+
* Assembles the `/audit-baselines` evidence envelope. Read-only and offline:
|
|
3
|
+
* never writes baselines or runs a suite — a review costs a file read, not a
|
|
4
|
+
* CI run. Evidence, not a verdict: assembling it is success (exit 0).
|
|
14
5
|
*
|
|
15
6
|
* @module lib/audit-baselines/engine
|
|
16
7
|
*/
|
|
@@ -31,19 +22,16 @@ import {
|
|
|
31
22
|
readFriction,
|
|
32
23
|
} from './weights.js';
|
|
33
24
|
|
|
34
|
-
/**
|
|
25
|
+
/** Matches the shipped schema's const. */
|
|
35
26
|
const ENVELOPE_KIND = 'audit-baselines-envelope';
|
|
36
27
|
|
|
37
|
-
/**
|
|
28
|
+
/** Bump on any breaking shape change. */
|
|
38
29
|
const ENVELOPE_SCHEMA_VERSION = '1';
|
|
39
30
|
|
|
40
|
-
/** Cap on emitted hotspot clusters, independent of the per-gate `topN`. */
|
|
41
31
|
export const DEFAULT_HOTSPOT_LIMIT = 50;
|
|
42
32
|
|
|
43
33
|
/**
|
|
44
|
-
*
|
|
45
|
-
* abort the run — an unreadable config still leaves the baseline files
|
|
46
|
-
* themselves readable at their default paths.
|
|
34
|
+
* A broken `.agentrc.json` must not abort: default baseline paths still read.
|
|
47
35
|
*
|
|
48
36
|
* @param {string} cwd
|
|
49
37
|
* @returns {{ quality: object, configError: string | null }}
|
|
@@ -57,11 +45,8 @@ function resolveQualityBlock(cwd) {
|
|
|
57
45
|
}
|
|
58
46
|
|
|
59
47
|
/**
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
* anchors to whichever checkout the current process sits in, which is the
|
|
63
|
-
* right answer for a writer and the wrong one here: an engine pointed at
|
|
64
|
-
* another repo with `--cwd` must read that repo's ledger, not this one's.
|
|
48
|
+
* Anchored to the analysed repo (`--cwd`), not the process's checkout as
|
|
49
|
+
* `resolvedTempRoot()` would be.
|
|
65
50
|
*
|
|
66
51
|
* @param {string} cwd
|
|
67
52
|
* @returns {string}
|
|
@@ -71,17 +56,13 @@ function tempRootFor(cwd) {
|
|
|
71
56
|
try {
|
|
72
57
|
relative = tempRootFrom(resolveConfig({ cwd }));
|
|
73
58
|
} catch {
|
|
74
|
-
// Unreadable config
|
|
59
|
+
// Unreadable config: probe the default root.
|
|
75
60
|
}
|
|
76
61
|
if (path.isAbsolute(relative)) return relative;
|
|
77
62
|
return path.join(mainCheckoutRoot(cwd) ?? cwd, relative);
|
|
78
63
|
}
|
|
79
64
|
|
|
80
65
|
/**
|
|
81
|
-
* Run the engine and return the envelope object. Pure with respect to the
|
|
82
|
-
* filesystem apart from the reads named in the module docstring — writing
|
|
83
|
-
* the result is the caller's job.
|
|
84
|
-
*
|
|
85
66
|
* @param {{
|
|
86
67
|
* cwd: string,
|
|
87
68
|
* topN?: number,
|
|
@@ -138,11 +119,10 @@ export function runEngine({
|
|
|
138
119
|
}
|
|
139
120
|
|
|
140
121
|
/**
|
|
141
|
-
*
|
|
142
|
-
* read in a terminal, and never carrying a row set.
|
|
122
|
+
* Terminal-sized stdout summary; never carries a row set.
|
|
143
123
|
*
|
|
144
124
|
* @param {object} envelope
|
|
145
|
-
* @param {string} outPath
|
|
125
|
+
* @param {string} outPath
|
|
146
126
|
* @returns {object}
|
|
147
127
|
*/
|
|
148
128
|
export function summarize(envelope, outPath) {
|
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* The closed `delivery.quality.gates` kinds and the out-of-band ratchet
|
|
5
|
-
* baselines are one surface, and an engine that walks only the first silently
|
|
6
|
-
* drops the second. This module owns that walk and the file universe an
|
|
7
|
-
* `ignoreGlobs` entry is checked against; [`surface-entry.js`](surface-entry.js)
|
|
8
|
-
* turns each kind into its health report.
|
|
2
|
+
* Walks both halves of the baseline surface (gates and ratchets).
|
|
9
3
|
*
|
|
10
4
|
* @module lib/audit-baselines/gate-surface
|
|
11
5
|
*/
|
|
@@ -16,9 +10,7 @@ import { listFilesUnder, readJsonFile } from './read.js';
|
|
|
16
10
|
import { surfaceEntryFor } from './surface-entry.js';
|
|
17
11
|
|
|
18
12
|
/**
|
|
19
|
-
*
|
|
20
|
-
* file universe an `ignoreGlobs` entry is checked against — a glob that
|
|
21
|
-
* matches nothing inside the dirs its own gate scans is dead weight.
|
|
13
|
+
* The file universe `ignoreGlobs` are checked against.
|
|
22
14
|
*
|
|
23
15
|
* @param {object | null | undefined} quality
|
|
24
16
|
* @returns {string[]}
|
|
@@ -34,15 +26,9 @@ function declaredTargetDirs(quality) {
|
|
|
34
26
|
}
|
|
35
27
|
|
|
36
28
|
/**
|
|
37
|
-
* Walk both halves of the gate surface — the closed `delivery.quality.gates`
|
|
38
|
-
* kinds and the out-of-band ratchet baselines — and report each instrument's
|
|
39
|
-
* health.
|
|
40
|
-
*
|
|
41
29
|
* @param {{ cwd: string, quality: object, now?: Date, run?: Function }} args
|
|
42
|
-
* `run` overrides the git spawn; `staleness.js` owns the real default.
|
|
43
30
|
* @returns {{ entries: object[], baselines: Map<string, object|null> }}
|
|
44
|
-
* `baselines`
|
|
45
|
-
* and headroom sections never re-read a 650KB file off disk.
|
|
31
|
+
* `baselines` is carried forward so later sections never re-read from disk.
|
|
46
32
|
*/
|
|
47
33
|
export function buildGateSurface({ cwd, quality, now = new Date(), run }) {
|
|
48
34
|
const files = declaredTargetDirs(quality).flatMap((dir) =>
|