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,49 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* `refreshBaseline({ kind: 'duplication' })` from
|
|
7
|
-
* `.agents/scripts/lib/baselines/refresh-service.js`, completing the Epic
|
|
8
|
-
* #2173 migration — duplication was the last kind still assembling its own
|
|
9
|
-
* writer call via the legacy `buildWriterScopeArgs` path. Scope resolution,
|
|
10
|
-
* prior-envelope reading, epsilon damping, envelope assembly, and
|
|
11
|
-
* persistence all flow through the unified service.
|
|
12
|
-
*
|
|
13
|
-
* The migration is what makes this CLI's documented surface true. Before it,
|
|
14
|
-
* `--full-scope` was advertised and parsed by nobody, and the no-flag default
|
|
15
|
-
* was a full rewrite rather than the diff-scoped refresh the usage text
|
|
16
|
-
* described.
|
|
17
|
-
*
|
|
18
|
-
* Surface:
|
|
19
|
-
*
|
|
20
|
-
* - `--baseline <path>`: write somewhere other than the configured
|
|
21
|
-
* `delivery.quality.gates.duplication.baselinePath`.
|
|
22
|
-
* - `--diff-scope <ref>`: scope the refresh to files changed between
|
|
23
|
-
* `<ref>` and HEAD. Out-of-scope rows are preserved verbatim from the
|
|
24
|
-
* prior on-disk baseline.
|
|
25
|
-
* - `--full-scope`: regenerate every row (no out-of-scope merge).
|
|
26
|
-
* - With no scope flag: scope is derived from `git diff --name-only
|
|
27
|
-
* origin/main..HEAD` (the service's default `baseRef..headRef`), matching
|
|
28
|
-
* `update-crap-baseline.js` / `update-maintainability-baseline.js` /
|
|
29
|
-
* `update-coverage-baseline.js`.
|
|
30
|
-
*
|
|
31
|
-
* **Scope is a write-side filter here, not a scan-side one.** jscpd detects
|
|
32
|
-
* clones pairwise, so the scan always covers the whole target tree even in
|
|
33
|
-
* diff mode — see `buildDefaultDuplicationScorer` in the refresh service for
|
|
34
|
-
* why narrowing the scan would drop clones between a changed file and an
|
|
35
|
-
* unchanged one. What a scope flag narrows is which rows the refresh is
|
|
36
|
-
* allowed to rewrite.
|
|
37
|
-
*
|
|
38
|
-
* Exits non-zero only when the scanner itself crashes. An empty result (no
|
|
39
|
-
* detected clones) still writes an envelope with `rows: []` so downstream
|
|
40
|
-
* `check-baselines` can tell "intentional empty baseline" apart from "no
|
|
41
|
-
* baseline yet".
|
|
2
|
+
* Refresh the duplication baseline via `refreshBaseline({ kind:
|
|
3
|
+
* 'duplication' })`. Scope is a write-side filter only: clone detection is
|
|
4
|
+
* pairwise, so the scan always covers the whole tree. No clones still writes
|
|
5
|
+
* `rows: []`, so an intentional empty baseline differs from a missing one.
|
|
42
6
|
*/
|
|
43
7
|
|
|
44
|
-
//
|
|
45
|
-
// first import so the check runs before any third-party-importing sibling
|
|
46
|
-
// module is evaluated (Story #3432).
|
|
8
|
+
// Must be the first import: fails fast before any third-party import loads.
|
|
47
9
|
import './lib/runtime-deps/ensure-installed.js';
|
|
48
10
|
import path from 'node:path';
|
|
49
11
|
import { parseDiffScopeFlag } from './lib/baselines/diff-scope-cli.js';
|
|
@@ -53,12 +15,7 @@ import { getBaselineEpsilon } from './lib/config/quality.js';
|
|
|
53
15
|
import { getQuality, resolveConfig } from './lib/config-resolver.js';
|
|
54
16
|
import { Logger } from './lib/Logger.js';
|
|
55
17
|
|
|
56
|
-
/**
|
|
57
|
-
* Usage block for `--help`. This CLI *writes* on invocation, so the help
|
|
58
|
-
* branch must short-circuit before `main` runs rather than inside it —
|
|
59
|
-
* `runAsCli` answers help first, which makes "a usage probe never mutates a
|
|
60
|
-
* baseline" structural instead of a check `main` has to remember.
|
|
61
|
-
*/
|
|
18
|
+
/** `runAsCli` answers `--help` before `main`, so a usage probe never writes. */
|
|
62
19
|
const USAGE = {
|
|
63
20
|
invocation:
|
|
64
21
|
'node .agents/scripts/update-duplication-baseline.js [--baseline <path>] [--full-scope | --diff-scope <ref>]',
|
|
@@ -85,10 +42,6 @@ const USAGE = {
|
|
|
85
42
|
};
|
|
86
43
|
|
|
87
44
|
/**
|
|
88
|
-
* Parse `--baseline <path>` — the one flag this CLI does not share with its
|
|
89
|
-
* siblings. The scope flags are parsed by the shared helpers so their
|
|
90
|
-
* contract stays identical across the four update CLIs.
|
|
91
|
-
*
|
|
92
45
|
* @param {string[]} argv
|
|
93
46
|
* @returns {{ baselinePath: string | undefined }}
|
|
94
47
|
*/
|
|
@@ -104,8 +57,6 @@ function parseCliArgs(argv = process.argv.slice(2)) {
|
|
|
104
57
|
}
|
|
105
58
|
|
|
106
59
|
/**
|
|
107
|
-
* Parse `--full-scope` (boolean opt-out flag).
|
|
108
|
-
*
|
|
109
60
|
* @param {string[]} argv
|
|
110
61
|
* @returns {boolean}
|
|
111
62
|
*/
|
|
@@ -114,12 +65,8 @@ function parseFullScopeFlag(argv = []) {
|
|
|
114
65
|
}
|
|
115
66
|
|
|
116
67
|
/**
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
* post-dates the bag), so read it off the resolved `gates` map directly.
|
|
120
|
-
*
|
|
121
|
-
* @param {object} config resolved config
|
|
122
|
-
* @returns {object} the duplication gate block (possibly empty)
|
|
68
|
+
* @param {object} config
|
|
69
|
+
* @returns {object}
|
|
123
70
|
*/
|
|
124
71
|
function resolveDuplicationGate(config) {
|
|
125
72
|
const gates = getQuality(config).gates ?? {};
|
|
@@ -127,14 +74,8 @@ function resolveDuplicationGate(config) {
|
|
|
127
74
|
}
|
|
128
75
|
|
|
129
76
|
/**
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
* Split out of `main` deliberately: nothing in this file is reachable from a
|
|
133
|
-
* test (the CLI is only ever spawned with `--help`, which `runAsCli`
|
|
134
|
-
* short-circuits), so every function here scores CRAP at zero coverage —
|
|
135
|
-
* `c² + c`. A single `main` carrying all the branching lands at c=8 → 72,
|
|
136
|
-
* well over the 30 ceiling. Small single-purpose helpers keep each row far
|
|
137
|
-
* below it without hiding any logic.
|
|
77
|
+
* Split out of `main` because nothing here is covered by tests, so CRAP is
|
|
78
|
+
* `c² + c`; small helpers keep each row under the ceiling.
|
|
138
79
|
*
|
|
139
80
|
* @param {string[]} argv
|
|
140
81
|
* @returns {{ fullScope: boolean, diffScopeRef: string | null }}
|
|
@@ -152,13 +93,9 @@ function resolveScopeSelection(argv) {
|
|
|
152
93
|
}
|
|
153
94
|
|
|
154
95
|
/**
|
|
155
|
-
* Resolve the absolute path the refreshed envelope is written to:
|
|
156
|
-
* `--baseline <path>` wins, then the configured gate path, then the
|
|
157
|
-
* framework default.
|
|
158
|
-
*
|
|
159
96
|
* @param {string[]} argv
|
|
160
|
-
* @param {object} gate
|
|
161
|
-
* @returns {string}
|
|
97
|
+
* @param {object} gate
|
|
98
|
+
* @returns {string}
|
|
162
99
|
*/
|
|
163
100
|
function resolveAbsBaselinePath(argv, gate) {
|
|
164
101
|
const baselinePath =
|
|
@@ -171,9 +108,6 @@ function resolveAbsBaselinePath(argv, gate) {
|
|
|
171
108
|
}
|
|
172
109
|
|
|
173
110
|
/**
|
|
174
|
-
* Announce which scope the refresh resolved to, so an operator reading the
|
|
175
|
-
* log can tell a narrowed refresh from a full rewrite without re-deriving it.
|
|
176
|
-
*
|
|
177
111
|
* @param {{ fullScope: boolean, diffScopeRef: string | null }} selection
|
|
178
112
|
*/
|
|
179
113
|
function logScopeDecision({ fullScope, diffScopeRef }) {
|
|
@@ -189,14 +123,8 @@ function logScopeDecision({ fullScope, diffScopeRef }) {
|
|
|
189
123
|
}
|
|
190
124
|
|
|
191
125
|
/**
|
|
192
|
-
* Assemble the `refreshBaseline` option bag for the resolved selection.
|
|
193
|
-
*
|
|
194
|
-
* No `scorer` is injected — the service resolves the canonical default
|
|
195
|
-
* duplication scorer, which reads `gates.duplication.targetDirs` /
|
|
196
|
-
* `ignoreGlobs` off the same resolved config this CLI reads.
|
|
197
|
-
*
|
|
198
126
|
* @param {{ fullScope: boolean, diffScopeRef: string | null, absBaselinePath: string, epsilon: number }} args
|
|
199
|
-
* @returns {object}
|
|
127
|
+
* @returns {object}
|
|
200
128
|
*/
|
|
201
129
|
function buildRefreshOpts({
|
|
202
130
|
fullScope,
|
|
@@ -212,14 +140,10 @@ function buildRefreshOpts({
|
|
|
212
140
|
if (fullScope) {
|
|
213
141
|
refreshOpts.fullScope = true;
|
|
214
142
|
} else if (diffScopeRef) {
|
|
215
|
-
// The
|
|
216
|
-
// (three-dot). The service derives via two-dot `baseRef..headRef`; pass
|
|
217
|
-
// the ref as `baseRef` so the derivation runs through the same execFile
|
|
218
|
-
// seam the sibling CLIs use.
|
|
143
|
+
// The service derives two-dot `baseRef..headRef`, like the sibling CLIs.
|
|
219
144
|
refreshOpts.baseRef = diffScopeRef;
|
|
220
145
|
}
|
|
221
|
-
// No flag
|
|
222
|
-
// via `origin/main..HEAD` (its default baseRef/headRef).
|
|
146
|
+
// No flag: the service derives the diff from `origin/main..HEAD`.
|
|
223
147
|
return refreshOpts;
|
|
224
148
|
}
|
|
225
149
|
|
|
@@ -239,7 +163,7 @@ async function main() {
|
|
|
239
163
|
buildRefreshOpts({
|
|
240
164
|
...selection,
|
|
241
165
|
absBaselinePath,
|
|
242
|
-
epsilon: getBaselineEpsilon('duplication'
|
|
166
|
+
epsilon: getBaselineEpsilon('duplication'),
|
|
243
167
|
}),
|
|
244
168
|
);
|
|
245
169
|
|
|
@@ -1,44 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* maintainability
|
|
4
|
-
*
|
|
5
|
-
* Story #2202 / Task #2215 (Epic #2173): this CLI is now a thin wrapper
|
|
6
|
-
* around `refreshBaseline({ kind: 'maintainability' })` from
|
|
7
|
-
* `.agents/scripts/lib/baselines/refresh-service.js`. All scoring, scope
|
|
8
|
-
* resolution, envelope assembly, and persistence flows through the unified
|
|
9
|
-
* service.
|
|
10
|
-
*
|
|
11
|
-
* Story #4293: the CLI no longer injects a bespoke maintainability scorer.
|
|
12
|
-
* It now lets `refreshBaseline` resolve the canonical default scorer
|
|
13
|
-
* (`buildDefaultMaintainabilityScorer`) the same way `update-crap-baseline.js`
|
|
14
|
-
* and `update-coverage-baseline.js` route through their canonical defaults.
|
|
15
|
-
* The previously-injected `buildMaintainabilityScorer` was a stale copy of the
|
|
16
|
-
* canonical scorer that never received the `ignoreGlobs` fix on its diff-scope
|
|
17
|
-
* branch, so an ignored-but-changed file (e.g. one matched by
|
|
18
|
-
* `config-settings-schema*.js` or a consumer's `seed.mjs`) leaked into `rows`
|
|
19
|
-
* and dragged `rollup["*"].min` below the maintainability floor. The canonical
|
|
20
|
-
* default scorer applies the ignore filter on BOTH the full-scope walk and the
|
|
21
|
-
* diff-scope branch, eliminating the divergence at the source.
|
|
22
|
-
*
|
|
23
|
-
* Surface:
|
|
24
|
-
*
|
|
25
|
-
* - `--diff-scope <ref>` (or `--diff-scope=<ref>`): explicitly scope the
|
|
26
|
-
* refresh to files changed between `<ref>` and HEAD. Out-of-scope rows
|
|
27
|
-
* are preserved byte-for-byte from the prior on-disk baseline.
|
|
28
|
-
* - With no flag: scope is derived from `git diff --name-only
|
|
29
|
-
* origin/main..HEAD` (the service's default `baseRef..headRef`).
|
|
30
|
-
* Operators wanting a full rewrite must pass `--full-scope` (added by
|
|
31
|
-
* Task #2214; see that Task's notes for the cut-over).
|
|
32
|
-
*
|
|
33
|
-
* Full-scope refreshes (`scope.mode === 'full'`) walk every configured
|
|
34
|
-
* target directory; diff/explicit refreshes score only the files the
|
|
35
|
-
* service hands in. Both paths drop `ignoreGlobs`-listed files via the
|
|
36
|
-
* canonical default scorer.
|
|
2
|
+
* Refresh the maintainability baseline via `refreshBaseline({ kind:
|
|
3
|
+
* 'maintainability' })`. No scorer is injected: the service's default applies
|
|
4
|
+
* `ignoreGlobs` on both the full walk and the diff-scope branch.
|
|
37
5
|
*/
|
|
38
6
|
|
|
39
|
-
//
|
|
40
|
-
// first import so the check runs before any third-party-importing sibling
|
|
41
|
-
// module is evaluated (Story #3432).
|
|
7
|
+
// Must be the first import: fails fast before any third-party import loads.
|
|
42
8
|
import './lib/runtime-deps/ensure-installed.js';
|
|
43
9
|
import path from 'node:path';
|
|
44
10
|
import { parseDiffScopeFlag } from './lib/baselines/diff-scope-cli.js';
|
|
@@ -48,12 +14,7 @@ import { getBaselineEpsilon } from './lib/config/quality.js';
|
|
|
48
14
|
import { getBaselines, resolveConfig } from './lib/config-resolver.js';
|
|
49
15
|
import { Logger } from './lib/Logger.js';
|
|
50
16
|
|
|
51
|
-
/**
|
|
52
|
-
* Usage block for `--help` (Story #4872). This CLI *writes* on invocation, so
|
|
53
|
-
* the help branch must short-circuit before `main` runs rather than inside it —
|
|
54
|
-
* `runAsCli` answers help first, which makes "a usage probe never mutates a
|
|
55
|
-
* baseline" structural instead of a check `main` has to remember.
|
|
56
|
-
*/
|
|
17
|
+
/** `runAsCli` answers `--help` before `main`, so a usage probe never writes. */
|
|
57
18
|
const USAGE = {
|
|
58
19
|
invocation:
|
|
59
20
|
'node .agents/scripts/update-maintainability-baseline.js [--full-scope | --diff-scope <ref>]',
|
|
@@ -72,8 +33,6 @@ const USAGE = {
|
|
|
72
33
|
};
|
|
73
34
|
|
|
74
35
|
/**
|
|
75
|
-
* Parse `--full-scope` (boolean opt-out flag).
|
|
76
|
-
*
|
|
77
36
|
* @param {string[]} argv
|
|
78
37
|
* @returns {boolean}
|
|
79
38
|
*/
|
|
@@ -97,7 +56,7 @@ async function main() {
|
|
|
97
56
|
const absBaselinePath = path.isAbsolute(baselinePath)
|
|
98
57
|
? baselinePath
|
|
99
58
|
: path.resolve(process.cwd(), baselinePath);
|
|
100
|
-
const epsilon = getBaselineEpsilon('maintainability'
|
|
59
|
+
const epsilon = getBaselineEpsilon('maintainability');
|
|
101
60
|
|
|
102
61
|
Logger.info('[Maintainability] Updating baseline...');
|
|
103
62
|
if (fullScope) {
|
|
@@ -110,14 +69,6 @@ async function main() {
|
|
|
110
69
|
);
|
|
111
70
|
}
|
|
112
71
|
|
|
113
|
-
// Task #2214 (Epic #2173, AC-2): flag-omission now defaults to
|
|
114
|
-
// diff-scope. The pre-migration default was a full regenerate; operators
|
|
115
|
-
// wanting that behaviour must now pass `--full-scope` explicitly. This is
|
|
116
|
-
// a deliberate breaking CLI behaviour change — see docs/CHANGELOG.md.
|
|
117
|
-
//
|
|
118
|
-
// Story #4293: no `scorer` is injected — the service resolves the canonical
|
|
119
|
-
// default maintainability scorer, which applies `ignoreGlobs` on both the
|
|
120
|
-
// full-scope walk and the diff-scope branch.
|
|
121
72
|
const refreshOpts = {
|
|
122
73
|
kind: 'maintainability',
|
|
123
74
|
writePath: absBaselinePath,
|
|
@@ -126,15 +77,10 @@ async function main() {
|
|
|
126
77
|
if (fullScope) {
|
|
127
78
|
refreshOpts.fullScope = true;
|
|
128
79
|
} else if (diffScopeRef) {
|
|
129
|
-
// The
|
|
130
|
-
// `<ref>...HEAD` (three-dot). The service derives via two-dot
|
|
131
|
-
// `baseRef..headRef`; pass the ref as `baseRef` so the service's
|
|
132
|
-
// diff-derivation does the heavy lifting through the same execFile
|
|
133
|
-
// seam that auto-refresh uses.
|
|
80
|
+
// The service derives two-dot `baseRef..headRef`, like auto-refresh.
|
|
134
81
|
refreshOpts.baseRef = diffScopeRef;
|
|
135
82
|
}
|
|
136
|
-
// No flag
|
|
137
|
-
// diff via `origin/main..HEAD` (its default baseRef/headRef).
|
|
83
|
+
// No flag: the service derives the diff from `origin/main..HEAD`.
|
|
138
84
|
|
|
139
85
|
const result = await refreshBaseline(refreshOpts);
|
|
140
86
|
|
|
@@ -80,13 +80,7 @@ if (
|
|
|
80
80
|
Logger.info(
|
|
81
81
|
`[State-Sync] Transitioning ticket #${ticketId} to ${state}...`,
|
|
82
82
|
);
|
|
83
|
-
//
|
|
84
|
-
// fires the upward cascade on every transition (bulk.js registers
|
|
85
|
-
// `cascadeParentState` as transition.js's cascade runner, and the DONE
|
|
86
|
-
// branch delegates to `cascadeCompletion`), so the explicit call this
|
|
87
|
-
// used to make re-walked the same parents and re-spent the same API
|
|
88
|
-
// calls a second time on every done transition — under a Story-only
|
|
89
|
-
// model where no orchestration parent exists to find.
|
|
83
|
+
// No explicit cascade: `transitionTicketState` already runs it.
|
|
90
84
|
await transitionTicketState(provider, ticketId, state);
|
|
91
85
|
|
|
92
86
|
// Optional secondary label removal alongside the state transition
|
|
@@ -1,30 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
// .agents/scripts/validate-skills.js
|
|
3
3
|
//
|
|
4
|
-
// Walk `SKILL.md` under both skills roots — the package payload
|
|
5
|
-
// (`.agents/skills/{core,stack}/`) and the consumer-writable local zone
|
|
6
|
-
// (`.agents/local/skills/{core,stack}/`, Story #5135) — via the shared parser
|
|
7
|
-
// helper, validate each frontmatter block against
|
|
8
|
-
// `.agents/schemas/skill.schema.json`, enforce Policy Capsule presence
|
|
9
|
-
// (5–12 bullets), and verify membership in each root's own manifest when it
|
|
10
|
-
// exists. A consumer-authored skill is held to exactly the same bar as a
|
|
11
|
-
// shipped one; the roots are validated separately because each carries its
|
|
12
|
-
// own index (the shipped manifest is a payload file and must stay
|
|
13
|
-
// payload-only — see generate-skills-index.js). All findings are batched into a single
|
|
14
|
-
// human-readable report; the process exits non-zero when any finding is
|
|
15
|
-
// surfaced.
|
|
16
4
|
//
|
|
17
|
-
//
|
|
18
|
-
//
|
|
19
|
-
//
|
|
20
|
-
//
|
|
21
|
-
//
|
|
22
|
-
// root containing `.agents/skills`). Useful for tests
|
|
23
|
-
// staging fixture trees outside the real repo.
|
|
24
|
-
//
|
|
25
|
-
// Honors AGENT_LOG_LEVEL via the shared `Logger`. The findings report is
|
|
26
|
-
// written to stdout when any finding is present, so callers can capture
|
|
27
|
-
// it for ticket comments or CI logs.
|
|
5
|
+
// Validate every `SKILL.md` in the payload and local skills roots: schema
|
|
6
|
+
// frontmatter, a 5–12 bullet Policy Capsule, and membership in that root's
|
|
7
|
+
// own index (the shipped index is a payload file and stays payload-only).
|
|
8
|
+
// Local skills meet the same bar. Findings are batched; any finding exits
|
|
9
|
+
// non-zero. `--root <dir>` overrides the repo root (for fixtures).
|
|
28
10
|
|
|
29
11
|
import fs from 'node:fs';
|
|
30
12
|
import path from 'node:path';
|
|
@@ -56,9 +38,7 @@ function defaultRepoRoot() {
|
|
|
56
38
|
}
|
|
57
39
|
|
|
58
40
|
export function parseArgs(argv) {
|
|
59
|
-
//
|
|
60
|
-
// parser sees it: the shared parser does not (yet) model help flags as
|
|
61
|
-
// first-class output, and pre-stripping keeps the legacy parsed shape.
|
|
41
|
+
// Help is handled before the shared parser, which does not model it.
|
|
62
42
|
if (argv.some((t) => t === '--help' || t === '-h')) {
|
|
63
43
|
return { root: null, help: true };
|
|
64
44
|
}
|
|
@@ -19,7 +19,6 @@ file is the roster, the per-kind command table, and the procedure.
|
|
|
19
19
|
| `arch-cycles.json` | `npm run check:arch` |
|
|
20
20
|
| `cyclomatic.json` | `npm run check:cyclomatic` |
|
|
21
21
|
| `context-budget.json` | `npm run check:context-budget` |
|
|
22
|
-
| `workflow-citations.json` | `npm run check:workflow-citations` |
|
|
23
22
|
| `agents-loc.csv` | `npm run baseline:agents-loc` |
|
|
24
23
|
|
|
25
24
|
A refresh is **not** a regression entry — it tells the ratchet that the new
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"generatedAt": "2026-09-
|
|
2
|
+
"generatedAt": "2026-09-17T13:37:08.250Z",
|
|
3
3
|
"generator": "generate-skills-index.js@1",
|
|
4
4
|
"skills": [
|
|
5
5
|
{
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"tier": "stack",
|
|
88
88
|
"category": "qa",
|
|
89
89
|
"path": ".agents/skills/stack/qa/playwright/SKILL.md",
|
|
90
|
-
"description": "Robust E2E browser testing with Playwright. Use when writing browser-driven tests — leverage auto-waiting (no `waitForTimeout`), prefer user-visible locators (`getByRole`, `getByText`, `getByLabel`) over CSS/XPath, reuse `storageState` for auth, and enable trace-on-first-retry for CI debugging.",
|
|
90
|
+
"description": "Robust E2E browser testing with Playwright. Use when writing browser-driven tests — leverage auto-waiting (no `waitForTimeout`), prefer user-visible locators (`getByRole`, `getByText`, `getByLabel`) over CSS/XPath, reuse `storageState` for auth, and enable trace-on-first-retry for CI debugging. Also carries the `data-testid` contract a UI change states in its acceptance criteria.",
|
|
91
91
|
"policyCapsuleBullets": 8,
|
|
92
92
|
"allowedTools": null,
|
|
93
93
|
"vendor": "playwright"
|
|
@@ -5,6 +5,8 @@ description:
|
|
|
5
5
|
tests — leverage auto-waiting (no `waitForTimeout`), prefer user-visible
|
|
6
6
|
locators (`getByRole`, `getByText`, `getByLabel`) over CSS/XPath, reuse
|
|
7
7
|
`storageState` for auth, and enable trace-on-first-retry for CI debugging.
|
|
8
|
+
Also carries the `data-testid` contract a UI change states in its acceptance
|
|
9
|
+
criteria.
|
|
8
10
|
vendor: playwright
|
|
9
11
|
---
|
|
10
12
|
|
|
@@ -21,6 +23,30 @@ vendor: playwright
|
|
|
21
23
|
- Use a unique data set per test run, or tear down state explicitly, to prevent cross-test contamination.
|
|
22
24
|
- Never let Playwright own the lifetime of a dev server it did not start: boot the server out-of-band, point the suite at the running origin, and set `reuseExistingServer` so `webServer` only probes readiness.
|
|
23
25
|
|
|
26
|
+
## The testid contract
|
|
27
|
+
|
|
28
|
+
A `data-testid` is a selector two artifacts share: the component that renders
|
|
29
|
+
it and the spec that queries it. Renaming one without the other is a silent
|
|
30
|
+
break — the suite still compiles, and the failure arrives as a missing element
|
|
31
|
+
at run time, in CI, attributed to whichever change happened to land next.
|
|
32
|
+
|
|
33
|
+
So a change touching UI (`*.tsx`, `*.astro`, `*.svelte`, `*.vue`, a components
|
|
34
|
+
folder) states which side of that contract it is on, in its own acceptance
|
|
35
|
+
criteria, as one of:
|
|
36
|
+
|
|
37
|
+
- **`data-testid invariance: <the testids that MUST be preserved>`** — the
|
|
38
|
+
change reshapes markup and renames nothing, and the list says what the
|
|
39
|
+
reshape may not touch.
|
|
40
|
+
- **`data-testid changes: <old> -> <new>, with the matching
|
|
41
|
+
tests/e2e/*.spec.ts selector updated`** — the rename is deliberate, and the
|
|
42
|
+
spec file that queries it is edited in the same change (or in one ordered
|
|
43
|
+
ahead of it, when the work is split).
|
|
44
|
+
|
|
45
|
+
Renaming a testid without the matching spec edit is forbidden either way. When
|
|
46
|
+
a change deliberately renames nothing, say so in its negative-scope prose too:
|
|
47
|
+
a preserved set stated only once reads as an omission the next author is free
|
|
48
|
+
to revise.
|
|
49
|
+
|
|
24
50
|
## Running a `webServer`-backed suite outside CI
|
|
25
51
|
|
|
26
52
|
Playwright's `webServer` block **watches the process it spawned**. That
|
|
@@ -65,7 +65,7 @@ sibling-test convention, the per-file Maintainability-Index drop ceiling
|
|
|
65
65
|
(refactor when > 1.5pt), and the rename = baseline-refresh rule. Verify
|
|
66
66
|
at-keyboard with `npm run quality:preview` (the same diff-scoped MI + CRAP
|
|
67
67
|
preview the `.husky/pre-commit` hook runs) **before** committing. The
|
|
68
|
-
thresholds are
|
|
69
|
-
|
|
68
|
+
thresholds are fixed framework constants — never fork the helper to change
|
|
69
|
+
a number.
|
|
70
70
|
|
|
71
71
|
---
|
|
@@ -23,7 +23,7 @@ has to be settled here instead.
|
|
|
23
23
|
| --- | --- |
|
|
24
24
|
| Cadence | _e.g. weekly, Sunday 02:00_ |
|
|
25
25
|
| Lenses in scope | _e.g. security, clean-code, quality, dependencies_ |
|
|
26
|
-
| Severity floor | _
|
|
26
|
+
| Severity floor | _`--severity`, default `high`_ |
|
|
27
27
|
| Ledger reviewer | _e.g. @your-handle_ |
|
|
28
28
|
| Story triage owner | _e.g. the on-call maintainer_ |
|
|
29
29
|
|
|
@@ -88,9 +88,8 @@ to every finding.
|
|
|
88
88
|
`--dry-run` performs zero GitHub writes and skips the ledger write, printing
|
|
89
89
|
only the run summary. Read `totals.create` before you let the sweep file
|
|
90
90
|
anything: a first full-scope run over an un-audited repository can propose more
|
|
91
|
-
Stories than your team can triage in a quarter. Raise `--severity`
|
|
92
|
-
|
|
93
|
-
would actually take on, then go live.
|
|
91
|
+
Stories than your team can triage in a quarter. Raise `--severity` until the
|
|
92
|
+
create count is a batch you would actually take on, then go live.
|
|
94
93
|
|
|
95
94
|
## Step 4 — Go live, and persist the ledger
|
|
96
95
|
|
|
@@ -9,9 +9,7 @@ conformance** — semantic structure, ARIA correctness, keyboard operability, fo
|
|
|
9
9
|
labelling, media alternatives, and contrast — grounding every finding in a
|
|
10
10
|
concrete element and the success criterion it violates. Default to **static**
|
|
11
11
|
detection over source; escalate to a **runtime** pass only when a live target is
|
|
12
|
-
configured. The shared lens machinery
|
|
13
|
-
interpretation, report envelope + finding-block skeleton, severity scale,
|
|
14
|
-
self-cross-check, and execution strategy — lives in
|
|
12
|
+
configured. The shared lens machinery lives in
|
|
15
13
|
[`helpers/audit-lens-core.md`](helpers/audit-lens-core.md). Write the report to
|
|
16
14
|
`{{auditOutputDir}}/audit-accessibility-results.md`. Extra finding fields:
|
|
17
15
|
**WCAG:** (the violated success criterion, e.g. `1.1.1 Non-text Content (A)`)
|
|
@@ -55,7 +53,7 @@ the token-adherence note to ux-ui.
|
|
|
55
53
|
|
|
56
54
|
## Scope
|
|
57
55
|
|
|
58
|
-
|
|
56
|
+
Per the core's Scope interpretation:
|
|
59
57
|
|
|
60
58
|
```text
|
|
61
59
|
{{changedFiles}}
|
|
@@ -63,9 +61,8 @@ Interpret this lens's change-set fence per the core's Scope interpretation:
|
|
|
63
61
|
|
|
64
62
|
## Execution strategy
|
|
65
63
|
|
|
66
|
-
Run this lens as
|
|
67
|
-
|
|
68
|
-
core's Execution strategy).
|
|
64
|
+
Run this lens as one `subagent_type: auditor` dispatch per the core's
|
|
65
|
+
Execution strategy.
|
|
69
66
|
|
|
70
67
|
## Step 0: Discover the frontend surface and config (run first)
|
|
71
68
|
|
|
@@ -16,9 +16,7 @@ Accepted ADR the tree has outgrown is worse than no ADR at all — it actively
|
|
|
16
16
|
teaches a wrong contract, and it keeps teaching it until someone supersedes it.
|
|
17
17
|
That is this lens's central target; structural tidiness is the cheap part.
|
|
18
18
|
|
|
19
|
-
The shared lens machinery
|
|
20
|
-
envelope + finding-block skeleton, severity scale, self-cross-check, and
|
|
21
|
-
execution strategy — lives in
|
|
19
|
+
The shared lens machinery lives in
|
|
22
20
|
[`helpers/audit-lens-core.md`](helpers/audit-lens-core.md). Write the report to
|
|
23
21
|
`{{auditOutputDir}}/audit-adrs-results.md`. Dimension values:
|
|
24
22
|
`Decision Drift | Supersede-Chain Integrity | Structure & Status Hygiene |
|
|
@@ -91,9 +89,8 @@ only; the guard is not weakened for any other lens.
|
|
|
91
89
|
|
|
92
90
|
## Execution strategy
|
|
93
91
|
|
|
94
|
-
Run this lens as
|
|
95
|
-
|
|
96
|
-
core's Execution strategy). On a large log, the Decision Drift claim-check
|
|
92
|
+
Run this lens as one `subagent_type: auditor` dispatch per the core's
|
|
93
|
+
Execution strategy. On a large log, the Decision Drift claim-check
|
|
97
94
|
(Step 2.1) is the one dimension worth fanning out per batch of entries under
|
|
98
95
|
parallel-tooling Rule 3 — merge under the shared self-cross-check.
|
|
99
96
|
|
|
@@ -6,9 +6,7 @@ description: Audit architectural boundaries, module coupling, layering violation
|
|
|
6
6
|
|
|
7
7
|
You are a Staff Software Engineer & Architecture Reviewer performing a read-only
|
|
8
8
|
review that prioritizes maintainability and readability without altering
|
|
9
|
-
external APIs or business logic. The shared lens machinery
|
|
10
|
-
constraint, scope interpretation, report envelope + finding-block skeleton,
|
|
11
|
-
severity scale, self-cross-check, and execution strategy — lives in
|
|
9
|
+
external APIs or business logic. The shared lens machinery lives in
|
|
12
10
|
[`helpers/audit-lens-core.md`](helpers/audit-lens-core.md). Write the report to
|
|
13
11
|
`{{auditOutputDir}}/audit-architecture-results.md`. Each finding carries an
|
|
14
12
|
**Impact:** and a **Category:** (`Quick Win | Structural Change`); the report
|
|
@@ -17,7 +15,7 @@ adds a **Triage Summary** (Quick Wins / Structural Changes) and an
|
|
|
17
15
|
|
|
18
16
|
## Scope
|
|
19
17
|
|
|
20
|
-
|
|
18
|
+
Per the core's Scope interpretation:
|
|
21
19
|
|
|
22
20
|
```text
|
|
23
21
|
{{changedFiles}}
|
|
@@ -183,13 +181,7 @@ Evaluate the gathered context against the following architecture dimensions:
|
|
|
183
181
|
|
|
184
182
|
For each finding, name the module/function, identify the trapped logic and
|
|
185
183
|
the I/O it is bound to, and propose the concrete seam (the pure function or
|
|
186
|
-
port to extract, and where the I/O adapter should call into it).
|
|
187
|
-
already practices a related seam discipline at the error-handling boundary:
|
|
188
|
-
[`rules/orchestration-error-handling.md`](../rules/orchestration-error-handling.md)
|
|
189
|
-
requires orchestration scripts to `throw` rather than `Logger.fatal` so the
|
|
190
|
-
thin `runAsCli` shell — not the logic — owns the `process.exit` side effect,
|
|
191
|
-
keeping the wrapped logic exercisable under a stubbed `process.exit`. Cite
|
|
192
|
-
that precedent where it applies rather than restating it.
|
|
184
|
+
port to extract, and where the I/O adapter should call into it).
|
|
193
185
|
2. **Automated Architecture Guardrails:** Assess whether the project encodes
|
|
194
186
|
its architectural boundaries as **deterministic, automated checks** rather
|
|
195
187
|
than relying on convention or reviewer memory. When relevant to the
|
|
@@ -10,9 +10,7 @@ repository's **committed baseline surface**: the ratchet artifacts under
|
|
|
10
10
|
`.agentrc.json`. Those instruments only prevent **regression** — nothing owns
|
|
11
11
|
the loop that burns the measured debt **down** and tightens the floors behind
|
|
12
12
|
it, so a repo can hold a floor it cleared years ago and never notice. This lens
|
|
13
|
-
is that loop's read-only entry point. The shared lens machinery
|
|
14
|
-
constraint, scope interpretation, report envelope + finding-block skeleton,
|
|
15
|
-
severity scale, self-cross-check, and execution strategy — lives in
|
|
13
|
+
is that loop's read-only entry point. The shared lens machinery lives in
|
|
16
14
|
[`helpers/audit-lens-core.md`](helpers/audit-lens-core.md). Write the report to
|
|
17
15
|
`{{auditOutputDir}}/audit-baselines-results.md`. Dimension values:
|
|
18
16
|
`Dead Instrument | Staleness | Hotspot Cluster | Trend Drift | Tightening Headroom`.
|
|
@@ -26,7 +24,7 @@ severity scale, self-cross-check, and execution strategy — lives in
|
|
|
26
24
|
|
|
27
25
|
## Scope
|
|
28
26
|
|
|
29
|
-
|
|
27
|
+
Per the core's Scope interpretation:
|
|
30
28
|
|
|
31
29
|
```text
|
|
32
30
|
{{changedFiles}}
|
|
@@ -51,9 +49,8 @@ This lens **refines** the core's read-only constraint; it never relaxes it.
|
|
|
51
49
|
|
|
52
50
|
## Execution strategy
|
|
53
51
|
|
|
54
|
-
Run this lens as
|
|
55
|
-
|
|
56
|
-
core's Execution strategy).
|
|
52
|
+
Run this lens as one `subagent_type: auditor` dispatch per the core's
|
|
53
|
+
Execution strategy.
|
|
57
54
|
|
|
58
55
|
## Step 0: Run the engine (mandatory — measure before you judge)
|
|
59
56
|
|
|
@@ -155,8 +152,8 @@ Two envelope-level reads come **before** any finding:
|
|
|
155
152
|
The acknowledgment is the kind upper-snaked. It demotes that kind's
|
|
156
153
|
head-vs-base regressions to unchanged **for one run only** — floors stay
|
|
157
154
|
enforced, so a genuine breach is still caught. The durable equivalent is a
|
|
158
|
-
commit in the compared range whose subject carries the
|
|
159
|
-
|
|
155
|
+
commit in the compared range whose subject carries the fixed refresh tag
|
|
156
|
+
`baseline-refresh:` **and** whose diff touches that kind's
|
|
160
157
|
baseline file. Confirm both against
|
|
161
158
|
`node .agents/scripts/check-baselines.js --help` before writing the prompt,
|
|
162
159
|
and never invent an acknowledgment for a kind that ships no regeneration
|