mandrel 1.57.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 +954 -0
- package/.agents/docs/SDLC.md +1420 -0
- package/.agents/docs/agentrc-reference.json +278 -0
- package/.agents/docs/configuration.md +1040 -0
- package/.agents/docs/workflows.md +59 -0
- package/.agents/instructions.md +384 -0
- package/.agents/personas/architect.md +107 -0
- package/.agents/personas/devops-engineer.md +36 -0
- package/.agents/personas/engineer-mobile.md +119 -0
- package/.agents/personas/engineer-web.md +110 -0
- package/.agents/personas/engineer.md +90 -0
- package/.agents/personas/product.md +88 -0
- package/.agents/personas/project-manager.md +110 -0
- package/.agents/personas/qa-engineer.md +91 -0
- package/.agents/personas/refactorer.md +110 -0
- package/.agents/personas/security-engineer.md +112 -0
- package/.agents/personas/sre.md +86 -0
- package/.agents/personas/technical-writer.md +100 -0
- package/.agents/personas/ux-designer.md +95 -0
- package/.agents/rules/api-conventions.md +75 -0
- package/.agents/rules/changelog-style.md +238 -0
- package/.agents/rules/gherkin-standards.md +146 -0
- package/.agents/rules/git-conventions.md +146 -0
- package/.agents/rules/orchestration-error-handling.md +35 -0
- package/.agents/rules/security-baseline.md +92 -0
- package/.agents/rules/shell-conventions.md +70 -0
- package/.agents/rules/test-seams.md +59 -0
- package/.agents/rules/testing-standards.md +177 -0
- package/.agents/runtime-deps.json +18 -0
- package/.agents/schemas/acceptance-eval-verdict.schema.json +93 -0
- package/.agents/schemas/agentrc.schema.json +1583 -0
- package/.agents/schemas/audit-results.schema.json +69 -0
- package/.agents/schemas/audit-rules.json +134 -0
- package/.agents/schemas/audit-rules.schema.json +69 -0
- package/.agents/schemas/baselines/baseline-envelope.schema.json +44 -0
- package/.agents/schemas/baselines/bundle-size.schema.json +47 -0
- package/.agents/schemas/baselines/coverage.schema.json +50 -0
- package/.agents/schemas/baselines/crap.schema.json +52 -0
- package/.agents/schemas/baselines/duplication.schema.json +62 -0
- package/.agents/schemas/baselines/lighthouse.schema.json +59 -0
- package/.agents/schemas/baselines/lint.schema.json +47 -0
- package/.agents/schemas/baselines/maintainability.schema.json +71 -0
- package/.agents/schemas/baselines/mutation.schema.json +52 -0
- package/.agents/schemas/crap-baseline.schema.json +57 -0
- package/.agents/schemas/crap-report.schema.json +102 -0
- package/.agents/schemas/dispatch-manifest.json +232 -0
- package/.agents/schemas/epic-perf-report.schema.json +89 -0
- package/.agents/schemas/epic-spec.schema.json +183 -0
- package/.agents/schemas/friction-event.schema.json +56 -0
- package/.agents/schemas/lifecycle/README.md +18 -0
- package/.agents/schemas/lifecycle/acceptance.reconcile.failed.schema.json +13 -0
- package/.agents/schemas/lifecycle/acceptance.reconcile.ok.schema.json +13 -0
- package/.agents/schemas/lifecycle/acceptance.reconcile.skipped.schema.json +13 -0
- package/.agents/schemas/lifecycle/acceptance.reconcile.start.schema.json +12 -0
- package/.agents/schemas/lifecycle/acceptance.reconcile.waived.schema.json +13 -0
- package/.agents/schemas/lifecycle/checkpoint.written.schema.json +13 -0
- package/.agents/schemas/lifecycle/close-validate.end.schema.json +18 -0
- package/.agents/schemas/lifecycle/close-validate.start.schema.json +13 -0
- package/.agents/schemas/lifecycle/code-review.end.schema.json +30 -0
- package/.agents/schemas/lifecycle/code-review.start.schema.json +12 -0
- package/.agents/schemas/lifecycle/epic.automerge.end.schema.json +14 -0
- package/.agents/schemas/lifecycle/epic.automerge.start.schema.json +13 -0
- package/.agents/schemas/lifecycle/epic.blocked.schema.json +13 -0
- package/.agents/schemas/lifecycle/epic.cleanup.end.schema.json +12 -0
- package/.agents/schemas/lifecycle/epic.cleanup.start.schema.json +12 -0
- package/.agents/schemas/lifecycle/epic.close.end.schema.json +12 -0
- package/.agents/schemas/lifecycle/epic.complete.schema.json +13 -0
- package/.agents/schemas/lifecycle/epic.finalize.end.schema.json +13 -0
- package/.agents/schemas/lifecycle/epic.finalize.start.schema.json +12 -0
- package/.agents/schemas/lifecycle/epic.merge.armed.schema.json +13 -0
- package/.agents/schemas/lifecycle/epic.merge.blocked.schema.json +14 -0
- package/.agents/schemas/lifecycle/epic.merge.confirmed.schema.json +17 -0
- package/.agents/schemas/lifecycle/epic.merge.ready.schema.json +15 -0
- package/.agents/schemas/lifecycle/epic.plan.end.schema.json +18 -0
- package/.agents/schemas/lifecycle/epic.plan.start.schema.json +12 -0
- package/.agents/schemas/lifecycle/epic.snapshot.end.schema.json +16 -0
- package/.agents/schemas/lifecycle/epic.snapshot.start.schema.json +12 -0
- package/.agents/schemas/lifecycle/epic.watch.end.schema.json +28 -0
- package/.agents/schemas/lifecycle/epic.watch.start.schema.json +16 -0
- package/.agents/schemas/lifecycle/intervention.recorded.schema.json +15 -0
- package/.agents/schemas/lifecycle/ledger-record.schema.json +59 -0
- package/.agents/schemas/lifecycle/notification.emitted.schema.json +18 -0
- package/.agents/schemas/lifecycle/pr.created.schema.json +14 -0
- package/.agents/schemas/lifecycle/retro.end.schema.json +16 -0
- package/.agents/schemas/lifecycle/retro.start.schema.json +12 -0
- package/.agents/schemas/lifecycle/story.blocked.schema.json +13 -0
- package/.agents/schemas/lifecycle/story.dispatch.end.schema.json +17 -0
- package/.agents/schemas/lifecycle/story.dispatch.start.schema.json +15 -0
- package/.agents/schemas/lifecycle/story.heartbeat.schema.json +20 -0
- package/.agents/schemas/lifecycle/story.merged.schema.json +13 -0
- package/.agents/schemas/mi-report.schema.json +58 -0
- package/.agents/schemas/model-attribution.schema.json +49 -0
- package/.agents/schemas/qa-finding.schema.json +133 -0
- package/.agents/schemas/qa-ledger.schema.json +89 -0
- package/.agents/schemas/risk-verdict.schema.json +53 -0
- package/.agents/schemas/signal-event.schema.json +58 -0
- package/.agents/schemas/skill.schema.json +31 -0
- package/.agents/schemas/skills-index.schema.json +81 -0
- package/.agents/schemas/story-perf-summary.schema.json +73 -0
- package/.agents/schemas/validation-evidence.schema.json +78 -0
- package/.agents/scripts/README.md +93 -0
- package/.agents/scripts/acceptance-eval.js +284 -0
- package/.agents/scripts/acceptance-spec-reconciler.js +556 -0
- package/.agents/scripts/agents-bootstrap-github.js +634 -0
- package/.agents/scripts/analyze-execution.js +369 -0
- package/.agents/scripts/assert-branch.js +83 -0
- package/.agents/scripts/audit-labels-bootstrap.js +253 -0
- package/.agents/scripts/audit-to-stories.js +257 -0
- package/.agents/scripts/bootstrap.js +1378 -0
- package/.agents/scripts/check-baselines.js +81 -0
- package/.agents/scripts/check-dead-exports.js +311 -0
- package/.agents/scripts/check-doc-links.js +401 -0
- package/.agents/scripts/check-gherkin-placeholders.js +663 -0
- package/.agents/scripts/check-lifecycle-doc-drift.js +402 -0
- package/.agents/scripts/check-lifecycle-lint.js +379 -0
- package/.agents/scripts/check-prepush-recovery.js +90 -0
- package/.agents/scripts/check-windows-git-perf.js +138 -0
- package/.agents/scripts/cleanup-repo-test-temp.js +67 -0
- package/.agents/scripts/coverage-capture.js +112 -0
- package/.agents/scripts/detect-merges.js +111 -0
- package/.agents/scripts/diagnose-friction.js +257 -0
- package/.agents/scripts/diagnose.js +240 -0
- package/.agents/scripts/dispatcher.js +295 -0
- package/.agents/scripts/drain-pending-cleanup.js +147 -0
- package/.agents/scripts/epic-audit-prepare.js +419 -0
- package/.agents/scripts/epic-audit-recheck.js +241 -0
- package/.agents/scripts/epic-deliver-note-intervention.js +192 -0
- package/.agents/scripts/epic-deliver-preflight.js +407 -0
- package/.agents/scripts/epic-deliver-prepare.js +383 -0
- package/.agents/scripts/epic-execute-record-wave.js +463 -0
- package/.agents/scripts/epic-plan-clarity.js +201 -0
- package/.agents/scripts/epic-plan-decompose.js +79 -0
- package/.agents/scripts/epic-plan-healthcheck.js +363 -0
- package/.agents/scripts/epic-plan-spec-validate.js +111 -0
- package/.agents/scripts/epic-plan-spec.js +198 -0
- package/.agents/scripts/epic-reconcile.js +637 -0
- package/.agents/scripts/evidence-gate.js +235 -0
- package/.agents/scripts/generate-config-docs.js +516 -0
- package/.agents/scripts/generate-lifecycle-docs.js +224 -0
- package/.agents/scripts/generate-skills-index.js +252 -0
- package/.agents/scripts/generate-workflows-doc.js +168 -0
- package/.agents/scripts/git-cleanup.js +124 -0
- package/.agents/scripts/git-pr-quality-gate.js +203 -0
- package/.agents/scripts/git-rebase-and-resolve.js +234 -0
- package/.agents/scripts/hierarchy-gate.js +176 -0
- package/.agents/scripts/hydrate-context.js +179 -0
- package/.agents/scripts/install-matrix-assert.js +282 -0
- package/.agents/scripts/lib/Graph.js +326 -0
- package/.agents/scripts/lib/ITicketingProvider.js +349 -0
- package/.agents/scripts/lib/Logger.js +194 -0
- package/.agents/scripts/lib/audit-suite/cli.js +64 -0
- package/.agents/scripts/lib/audit-suite/findings.js +164 -0
- package/.agents/scripts/lib/audit-suite/frontmatter-lint.js +32 -0
- package/.agents/scripts/lib/audit-suite/frontmatter.js +110 -0
- package/.agents/scripts/lib/audit-suite/index.js +22 -0
- package/.agents/scripts/lib/audit-suite/runner.js +233 -0
- package/.agents/scripts/lib/audit-suite/selector.js +235 -0
- package/.agents/scripts/lib/audit-suite/substitutions.js +124 -0
- package/.agents/scripts/lib/audit-suite/workflow-loader.js +49 -0
- package/.agents/scripts/lib/audit-to-stories/build-story-body.js +130 -0
- package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +114 -0
- package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +93 -0
- package/.agents/scripts/lib/audit-to-stories/group-findings.js +265 -0
- package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +246 -0
- package/.agents/scripts/lib/audit-to-stories/seed-epic-from-findings.js +160 -0
- package/.agents/scripts/lib/auto-refresh-baselines.js +308 -0
- package/.agents/scripts/lib/baseline-loader.js +0 -0
- package/.agents/scripts/lib/baseline-schema-registry.js +69 -0
- package/.agents/scripts/lib/baseline-snapshot.js +716 -0
- package/.agents/scripts/lib/baselines/component-matcher.js +21 -0
- package/.agents/scripts/lib/baselines/components.js +126 -0
- package/.agents/scripts/lib/baselines/diff-scope-cli.js +203 -0
- package/.agents/scripts/lib/baselines/duplication-scanner.js +220 -0
- package/.agents/scripts/lib/baselines/env-overrides.js +129 -0
- package/.agents/scripts/lib/baselines/envelope.js +368 -0
- package/.agents/scripts/lib/baselines/exit-codes.js +89 -0
- package/.agents/scripts/lib/baselines/git-base.js +0 -0
- package/.agents/scripts/lib/baselines/kernel.js +111 -0
- package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +220 -0
- package/.agents/scripts/lib/baselines/kinds/bundle-size.js +157 -0
- package/.agents/scripts/lib/baselines/kinds/coverage.js +194 -0
- package/.agents/scripts/lib/baselines/kinds/crap.js +555 -0
- package/.agents/scripts/lib/baselines/kinds/duplication.js +197 -0
- package/.agents/scripts/lib/baselines/kinds/lighthouse.js +185 -0
- package/.agents/scripts/lib/baselines/kinds/lint.js +172 -0
- package/.agents/scripts/lib/baselines/kinds/maintainability.js +340 -0
- package/.agents/scripts/lib/baselines/kinds/mutation.js +153 -0
- package/.agents/scripts/lib/baselines/path-canon.js +279 -0
- package/.agents/scripts/lib/baselines/preview-gates.js +298 -0
- package/.agents/scripts/lib/baselines/reader.js +321 -0
- package/.agents/scripts/lib/baselines/refresh-service.js +733 -0
- package/.agents/scripts/lib/baselines/scope.js +291 -0
- package/.agents/scripts/lib/baselines/writer.js +312 -0
- package/.agents/scripts/lib/bdd-runner-detect.js +417 -0
- package/.agents/scripts/lib/bdd-scenario-scanner.js +310 -0
- package/.agents/scripts/lib/bootstrap/baselines-layout-migration.js +202 -0
- package/.agents/scripts/lib/bootstrap/branch-protection.js +222 -0
- package/.agents/scripts/lib/bootstrap/ci-workflow-template.js +171 -0
- package/.agents/scripts/lib/bootstrap/commit-push.js +146 -0
- package/.agents/scripts/lib/bootstrap/gh-list.js +153 -0
- package/.agents/scripts/lib/bootstrap/gh-preflight.js +306 -0
- package/.agents/scripts/lib/bootstrap/hitl-confirm.js +89 -0
- package/.agents/scripts/lib/bootstrap/install-ledger.js +174 -0
- package/.agents/scripts/lib/bootstrap/manifest.js +272 -0
- package/.agents/scripts/lib/bootstrap/merge-methods.js +108 -0
- package/.agents/scripts/lib/bootstrap/preflight.js +195 -0
- package/.agents/scripts/lib/bootstrap/project-bootstrap.js +801 -0
- package/.agents/scripts/lib/bootstrap/prompt.js +480 -0
- package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +370 -0
- package/.agents/scripts/lib/bootstrap/summary.js +75 -0
- package/.agents/scripts/lib/bootstrap/workflow-audit.js +256 -0
- package/.agents/scripts/lib/branch-name-guard.js +98 -0
- package/.agents/scripts/lib/c8-cli-path.js +21 -0
- package/.agents/scripts/lib/changed-files.js +184 -0
- package/.agents/scripts/lib/checks/baseline-drift-main-checkout.js +104 -0
- package/.agents/scripts/lib/checks/core-bare-clean.js +48 -0
- package/.agents/scripts/lib/checks/epic-merge-lock-stale.js +54 -0
- package/.agents/scripts/lib/checks/index.js +288 -0
- package/.agents/scripts/lib/checks/push-hook-parity.js +106 -0
- package/.agents/scripts/lib/checks/stale-origin-epic.js +49 -0
- package/.agents/scripts/lib/checks/state.js +558 -0
- package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +186 -0
- package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +182 -0
- package/.agents/scripts/lib/checks/windows-coverage-noise-floor.js +92 -0
- package/.agents/scripts/lib/checks/worktree-bootstrap-env.js +81 -0
- package/.agents/scripts/lib/checks/worktree-residue-biome.js +55 -0
- package/.agents/scripts/lib/cli/parse-numeric.js +60 -0
- package/.agents/scripts/lib/cli/standard-args.js +351 -0
- package/.agents/scripts/lib/cli-args.js +286 -0
- package/.agents/scripts/lib/cli-utils.js +69 -0
- package/.agents/scripts/lib/close-validation/projections/head-sha.js +44 -0
- package/.agents/scripts/lib/close-validation/projections/inputs.js +86 -0
- package/.agents/scripts/lib/close-validation/projections/maintainability.js +286 -0
- package/.agents/scripts/lib/close-validation.js +897 -0
- package/.agents/scripts/lib/codebase-snapshot.js +513 -0
- package/.agents/scripts/lib/command-header.js +33 -0
- package/.agents/scripts/lib/config/acceptance-eval.js +95 -0
- package/.agents/scripts/lib/config/baselines.js +60 -0
- package/.agents/scripts/lib/config/ci.js +30 -0
- package/.agents/scripts/lib/config/commands.js +36 -0
- package/.agents/scripts/lib/config/defaults.js +119 -0
- package/.agents/scripts/lib/config/explain.js +348 -0
- package/.agents/scripts/lib/config/gates/bundle-size.schema.js +23 -0
- package/.agents/scripts/lib/config/gates/coverage.schema.js +18 -0
- package/.agents/scripts/lib/config/gates/crap.schema.js +33 -0
- package/.agents/scripts/lib/config/gates/duplication.schema.js +26 -0
- package/.agents/scripts/lib/config/gates/index.js +36 -0
- package/.agents/scripts/lib/config/gates/lighthouse.schema.js +23 -0
- package/.agents/scripts/lib/config/gates/lint.schema.js +9 -0
- package/.agents/scripts/lib/config/gates/maintainability.schema.js +20 -0
- package/.agents/scripts/lib/config/gates/mutation.schema.js +12 -0
- package/.agents/scripts/lib/config/gates/shared.js +117 -0
- package/.agents/scripts/lib/config/github.js +122 -0
- package/.agents/scripts/lib/config/lifecycle.js +40 -0
- package/.agents/scripts/lib/config/limits.js +211 -0
- package/.agents/scripts/lib/config/paths.js +73 -0
- package/.agents/scripts/lib/config/preflight.js +58 -0
- package/.agents/scripts/lib/config/quality.js +665 -0
- package/.agents/scripts/lib/config/retro.js +77 -0
- package/.agents/scripts/lib/config/runners.js +105 -0
- package/.agents/scripts/lib/config/runtime.js +167 -0
- package/.agents/scripts/lib/config/shared.js +46 -0
- package/.agents/scripts/lib/config/sync-agentrc.js +243 -0
- package/.agents/scripts/lib/config/temp-paths.js +373 -0
- package/.agents/scripts/lib/config/validate-orchestration.js +81 -0
- package/.agents/scripts/lib/config/worktree-isolation.js +80 -0
- package/.agents/scripts/lib/config-resolver.js +298 -0
- package/.agents/scripts/lib/config-schema-shared.js +32 -0
- package/.agents/scripts/lib/config-schema.js +20 -0
- package/.agents/scripts/lib/config-settings-schema-delivery.js +332 -0
- package/.agents/scripts/lib/config-settings-schema-quality.js +165 -0
- package/.agents/scripts/lib/config-settings-schema.js +420 -0
- package/.agents/scripts/lib/coverage-baseline.js +352 -0
- package/.agents/scripts/lib/coverage-capture.js +195 -0
- package/.agents/scripts/lib/coverage-utils.js +239 -0
- package/.agents/scripts/lib/cpu-pool.js +223 -0
- package/.agents/scripts/lib/crap-engine.js +119 -0
- package/.agents/scripts/lib/crap-utils.js +479 -0
- package/.agents/scripts/lib/degraded-mode.js +69 -0
- package/.agents/scripts/lib/dependency-parser.js +129 -0
- package/.agents/scripts/lib/duplicate-search.js +189 -0
- package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +70 -0
- package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +197 -0
- package/.agents/scripts/lib/dynamic-workflow/capability.js +396 -0
- package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +80 -0
- package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +72 -0
- package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +90 -0
- package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +43 -0
- package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +83 -0
- package/.agents/scripts/lib/env-loader.js +52 -0
- package/.agents/scripts/lib/epic-merge-lock.js +239 -0
- package/.agents/scripts/lib/epic-plan-clarity.js +142 -0
- package/.agents/scripts/lib/epic-plan-ideation.js +228 -0
- package/.agents/scripts/lib/error-redactor.js +125 -0
- package/.agents/scripts/lib/errors/index.js +67 -0
- package/.agents/scripts/lib/feedback-loop/audit-results-graduator.js +230 -0
- package/.agents/scripts/lib/feedback-loop/code-review-graduator.js +207 -0
- package/.agents/scripts/lib/feedback-loop/graduator-core.js +421 -0
- package/.agents/scripts/lib/feedback-loop/memory-freshness.js +480 -0
- package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +229 -0
- package/.agents/scripts/lib/findings/classify-finding.js +195 -0
- package/.agents/scripts/lib/findings/promote-finding.js +353 -0
- package/.agents/scripts/lib/findings/route-finding.js +283 -0
- package/.agents/scripts/lib/findings/semantic-issue-search.js +179 -0
- package/.agents/scripts/lib/findings/severity.js +102 -0
- package/.agents/scripts/lib/gates/baseline-store.js +106 -0
- package/.agents/scripts/lib/gates/friction.js +43 -0
- package/.agents/scripts/lib/gh-exec.js +553 -0
- package/.agents/scripts/lib/git/cached-fetch.js +0 -0
- package/.agents/scripts/lib/git/sync-from-base.js +162 -0
- package/.agents/scripts/lib/git-branch-cleanup.js +213 -0
- package/.agents/scripts/lib/git-branch-lifecycle.js +353 -0
- package/.agents/scripts/lib/git-merge-orchestrator.js +261 -0
- package/.agents/scripts/lib/git-utils.js +363 -0
- package/.agents/scripts/lib/github-url.js +29 -0
- package/.agents/scripts/lib/install-cmd-parser.js +51 -0
- package/.agents/scripts/lib/issue-link-parser.js +74 -0
- package/.agents/scripts/lib/json-utils.js +60 -0
- package/.agents/scripts/lib/label-constants.js +169 -0
- package/.agents/scripts/lib/label-taxonomy.js +200 -0
- package/.agents/scripts/lib/maintainability-engine.js +164 -0
- package/.agents/scripts/lib/maintainability-utils.js +343 -0
- package/.agents/scripts/lib/mandrel-catalog.js +170 -0
- package/.agents/scripts/lib/mutation/baseline-snapshot.js +238 -0
- package/.agents/scripts/lib/mutation/config-detector.js +119 -0
- package/.agents/scripts/lib/mutation/stryker-runner.js +306 -0
- package/.agents/scripts/lib/mutation/survivor-report.js +160 -0
- package/.agents/scripts/lib/notifications/notifier.js +75 -0
- package/.agents/scripts/lib/observability/active-story-env.js +182 -0
- package/.agents/scripts/lib/observability/baseline-refresh-rate.js +221 -0
- package/.agents/scripts/lib/observability/perf-aggregator.js +887 -0
- package/.agents/scripts/lib/observability/perf-report-readers.js +319 -0
- package/.agents/scripts/lib/observability/perf-report-render.js +182 -0
- package/.agents/scripts/lib/observability/signals-writer.js +296 -0
- package/.agents/scripts/lib/observability/source-classifier.js +103 -0
- package/.agents/scripts/lib/observability/tool-trace-hook.js +417 -0
- package/.agents/scripts/lib/onboard/detect-stack.js +300 -0
- package/.agents/scripts/lib/onboard/scaffold-docs.js +128 -0
- package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +173 -0
- package/.agents/scripts/lib/orchestration/cascade-grouping.js +275 -0
- package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +131 -0
- package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +80 -0
- package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +132 -0
- package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +142 -0
- package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +149 -0
- package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +158 -0
- package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +56 -0
- package/.agents/scripts/lib/orchestration/code-review.js +652 -0
- package/.agents/scripts/lib/orchestration/column-sync.js +286 -0
- package/.agents/scripts/lib/orchestration/context-envelope.js +280 -0
- package/.agents/scripts/lib/orchestration/context-hydration-engine.js +581 -0
- package/.agents/scripts/lib/orchestration/dependency-analyzer.js +88 -0
- package/.agents/scripts/lib/orchestration/detectors-phase.js +188 -0
- package/.agents/scripts/lib/orchestration/dispatch-engine.js +144 -0
- package/.agents/scripts/lib/orchestration/dispatch-pipeline.js +206 -0
- package/.agents/scripts/lib/orchestration/doc-reader.js +94 -0
- package/.agents/scripts/lib/orchestration/epic-cleanup.js +473 -0
- package/.agents/scripts/lib/orchestration/epic-deliver-lease-guard.js +310 -0
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/cli.js +167 -0
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/context.js +151 -0
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/creation.js +74 -0
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/dag.js +78 -0
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/diagnostics.js +72 -0
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist-helpers.js +155 -0
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist.js +321 -0
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/planning-artifacts.js +75 -0
- package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/reconcile-spawn.js +86 -0
- package/.agents/scripts/lib/orchestration/epic-plan-lease-guard.js +235 -0
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/authoring-context.js +197 -0
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/cli-args.js +48 -0
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/drain.js +94 -0
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/plan-epic.js +414 -0
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/prompts.js +55 -0
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/risk-verdict.js +105 -0
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/run-spec-phase.js +235 -0
- package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/spec-freshness.js +120 -0
- package/.agents/scripts/lib/orchestration/epic-plan-state-store.js +118 -0
- package/.agents/scripts/lib/orchestration/epic-run-state-store.js +295 -0
- package/.agents/scripts/lib/orchestration/epic-runner/concurrency-gate.js +186 -0
- package/.agents/scripts/lib/orchestration/epic-runner/deliver-phases.js +50 -0
- package/.agents/scripts/lib/orchestration/epic-runner/phases/build-wave-dag.js +146 -0
- package/.agents/scripts/lib/orchestration/epic-runner/phases/snapshot.js +110 -0
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/composition.js +392 -0
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/signals.js +217 -0
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/transport.js +235 -0
- package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter.js +69 -0
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/_bullet-format.js +32 -0
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/crap-drift.js +291 -0
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/maintainability-drift.js +175 -0
- package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/stalled-worktree.js +37 -0
- package/.agents/scripts/lib/orchestration/epic-runner/story-launcher.js +127 -0
- package/.agents/scripts/lib/orchestration/epic-runner/story-run-progress-writer.js +400 -0
- package/.agents/scripts/lib/orchestration/epic-runner/sub-agent-return.js +285 -0
- package/.agents/scripts/lib/orchestration/epic-runner/wave-scheduler.js +66 -0
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-apply.js +797 -0
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-diff.js +619 -0
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-discriminator.js +335 -0
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-format.js +230 -0
- package/.agents/scripts/lib/orchestration/epic-spec-reconciler-ops.js +363 -0
- package/.agents/scripts/lib/orchestration/error-journal.js +139 -0
- package/.agents/scripts/lib/orchestration/file-assumption-enum.js +31 -0
- package/.agents/scripts/lib/orchestration/file-assumptions.js +506 -0
- package/.agents/scripts/lib/orchestration/finalize/close-planning-tickets.js +116 -0
- package/.agents/scripts/lib/orchestration/finalize/open-or-locate-pr.js +241 -0
- package/.agents/scripts/lib/orchestration/finalize/post-handoff-comment.js +489 -0
- package/.agents/scripts/lib/orchestration/finalize/sanitize-skip-ci.js +88 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +219 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +309 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +99 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +123 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +57 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +114 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +426 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +84 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +365 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +72 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +69 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +214 -0
- package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +137 -0
- package/.agents/scripts/lib/orchestration/label-transitions.js +43 -0
- package/.agents/scripts/lib/orchestration/lifecycle/bus.js +309 -0
- package/.agents/scripts/lib/orchestration/lifecycle/emit-story-dispatch-end.js +147 -0
- package/.agents/scripts/lib/orchestration/lifecycle/emit-story-heartbeat.js +155 -0
- package/.agents/scripts/lib/orchestration/lifecycle/ledger-writer.js +226 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/README.md +69 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/acceptance-reconciler.js +378 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-armer.js +248 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-predicate.js +527 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/branch-cleaner.js +259 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/checkpoint-pointer-writer.js +278 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/cleaner.js +355 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/finalizer.js +647 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/index.js +331 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/intervention-recorder.js +140 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/merge-watcher.js +421 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/notify-dispatcher.js +168 -0
- package/.agents/scripts/lib/orchestration/lifecycle/listeners/watcher.js +668 -0
- package/.agents/scripts/lib/orchestration/lifecycle/trace-logger.js +322 -0
- package/.agents/scripts/lib/orchestration/lint-baseline-service.js +114 -0
- package/.agents/scripts/lib/orchestration/manifest-builder.js +216 -0
- package/.agents/scripts/lib/orchestration/model-attribution.js +390 -0
- package/.agents/scripts/lib/orchestration/parked-follow-ons.js +147 -0
- package/.agents/scripts/lib/orchestration/phase-runner.js +87 -0
- package/.agents/scripts/lib/orchestration/plan-review-routing.js +63 -0
- package/.agents/scripts/lib/orchestration/plan-runner/plan-router.js +86 -0
- package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +212 -0
- package/.agents/scripts/lib/orchestration/planning-context-budget.js +213 -0
- package/.agents/scripts/lib/orchestration/planning-risk.js +155 -0
- package/.agents/scripts/lib/orchestration/planning-state-manager.js +318 -0
- package/.agents/scripts/lib/orchestration/post-merge/phases/branch-cleanup.js +56 -0
- package/.agents/scripts/lib/orchestration/post-merge/phases/dashboard-refresh.js +33 -0
- package/.agents/scripts/lib/orchestration/post-merge/phases/notification.js +78 -0
- package/.agents/scripts/lib/orchestration/post-merge/phases/temp-cleanup.js +68 -0
- package/.agents/scripts/lib/orchestration/post-merge/phases/ticket-closure.js +118 -0
- package/.agents/scripts/lib/orchestration/post-merge/phases/worktree-reap.js +396 -0
- package/.agents/scripts/lib/orchestration/post-merge-pipeline.js +205 -0
- package/.agents/scripts/lib/orchestration/pr-base-guard.js +47 -0
- package/.agents/scripts/lib/orchestration/preflight-cache.js +164 -0
- package/.agents/scripts/lib/orchestration/reassert-status-column.js +202 -0
- package/.agents/scripts/lib/orchestration/reconciler.js +137 -0
- package/.agents/scripts/lib/orchestration/recurring-failure-detector.js +152 -0
- package/.agents/scripts/lib/orchestration/recut.js +56 -0
- package/.agents/scripts/lib/orchestration/resolves-token.js +127 -0
- package/.agents/scripts/lib/orchestration/retro/phases/checks.js +94 -0
- package/.agents/scripts/lib/orchestration/retro/phases/compose-body.js +448 -0
- package/.agents/scripts/lib/orchestration/retro/phases/gather-signals.js +335 -0
- package/.agents/scripts/lib/orchestration/retro/phases/post-and-mirror.js +133 -0
- package/.agents/scripts/lib/orchestration/retro-heuristics.js +57 -0
- package/.agents/scripts/lib/orchestration/retro-perf-heuristics.js +275 -0
- package/.agents/scripts/lib/orchestration/retro-proposals.js +395 -0
- package/.agents/scripts/lib/orchestration/retro-runner.js +171 -0
- package/.agents/scripts/lib/orchestration/review-depth.js +93 -0
- package/.agents/scripts/lib/orchestration/review-providers/codex.js +363 -0
- package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +205 -0
- package/.agents/scripts/lib/orchestration/review-providers/native.js +805 -0
- package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +73 -0
- package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +396 -0
- package/.agents/scripts/lib/orchestration/review-providers/security-review.js +373 -0
- package/.agents/scripts/lib/orchestration/review-providers/types.js +89 -0
- package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +107 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +159 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +194 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +81 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +190 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +70 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +106 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +42 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +73 -0
- package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +225 -0
- package/.agents/scripts/lib/orchestration/single-story-close/runner.js +315 -0
- package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +149 -0
- package/.agents/scripts/lib/orchestration/skill-capsule-loader.js +110 -0
- package/.agents/scripts/lib/orchestration/spec-freshness.js +320 -0
- package/.agents/scripts/lib/orchestration/spec-renderer.js +456 -0
- package/.agents/scripts/lib/orchestration/spec-section-validator.js +80 -0
- package/.agents/scripts/lib/orchestration/story-close/auto-refresh-runner.js +797 -0
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/gate-failure.js +163 -0
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/pre-merge-attribution.js +152 -0
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/refresh-commit.js +387 -0
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/regression-projection.js +266 -0
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/scope-discovery.js +48 -0
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution-wiring.js +67 -0
- package/.agents/scripts/lib/orchestration/story-close/baseline-attribution.js +161 -0
- package/.agents/scripts/lib/orchestration/story-close/baseline-friction-body.js +117 -0
- package/.agents/scripts/lib/orchestration/story-close/cd-out-guard.js +86 -0
- package/.agents/scripts/lib/orchestration/story-close/cleanup-reconciler.js +147 -0
- package/.agents/scripts/lib/orchestration/story-close/close-inputs.js +142 -0
- package/.agents/scripts/lib/orchestration/story-close/comment-bodies.js +62 -0
- package/.agents/scripts/lib/orchestration/story-close/format-autofix-scoped.js +221 -0
- package/.agents/scripts/lib/orchestration/story-close/format-autofix-shared.js +123 -0
- package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +216 -0
- package/.agents/scripts/lib/orchestration/story-close/merge-runner.js +636 -0
- package/.agents/scripts/lib/orchestration/story-close/merge-subject.js +198 -0
- package/.agents/scripts/lib/orchestration/story-close/phases/branch-restore.js +105 -0
- package/.agents/scripts/lib/orchestration/story-close/phases/close.js +222 -0
- package/.agents/scripts/lib/orchestration/story-close/phases/code-review.js +220 -0
- package/.agents/scripts/lib/orchestration/story-close/phases/gates.js +291 -0
- package/.agents/scripts/lib/orchestration/story-close/phases/locked-pipeline.js +234 -0
- package/.agents/scripts/lib/orchestration/story-close/phases/preflight.js +110 -0
- package/.agents/scripts/lib/orchestration/story-close/phases/refresh.js +86 -0
- package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked-emitter.js +112 -0
- package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked.js +157 -0
- package/.agents/scripts/lib/orchestration/story-close/post-merge-close.js +434 -0
- package/.agents/scripts/lib/orchestration/story-close/pre-merge-validation.js +290 -0
- package/.agents/scripts/lib/orchestration/story-close-recovery.js +643 -0
- package/.agents/scripts/lib/orchestration/structured-comment-parser.js +67 -0
- package/.agents/scripts/lib/orchestration/task-body-validator.js +391 -0
- package/.agents/scripts/lib/orchestration/ticket-lease.js +358 -0
- package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +783 -0
- package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +367 -0
- package/.agents/scripts/lib/orchestration/ticket-validator.js +691 -0
- package/.agents/scripts/lib/orchestration/ticketing/bulk.js +723 -0
- package/.agents/scripts/lib/orchestration/ticketing/reads.js +474 -0
- package/.agents/scripts/lib/orchestration/ticketing/state.js +559 -0
- package/.agents/scripts/lib/orchestration/ticketing.js +55 -0
- package/.agents/scripts/lib/orchestration/wave-marker.js +28 -0
- package/.agents/scripts/lib/orchestration/wave-record-io.js +277 -0
- package/.agents/scripts/lib/orchestration/wave-record-notifications.js +189 -0
- package/.agents/scripts/lib/orchestration/wave-record-projection.js +423 -0
- package/.agents/scripts/lib/path-security.js +25 -0
- package/.agents/scripts/lib/plan-phase-cleanup.js +125 -0
- package/.agents/scripts/lib/preflight-runner.js +196 -0
- package/.agents/scripts/lib/presentation/dispatch-manifest-render.js +95 -0
- package/.agents/scripts/lib/presentation/manifest-builder.js +245 -0
- package/.agents/scripts/lib/presentation/manifest-formatter.js +243 -0
- package/.agents/scripts/lib/presentation/manifest-helpers.js +213 -0
- package/.agents/scripts/lib/presentation/manifest-persistence.js +262 -0
- package/.agents/scripts/lib/presentation/manifest-procedures.js +55 -0
- package/.agents/scripts/lib/presentation/manifest-render-waves.js +252 -0
- package/.agents/scripts/lib/presentation/manifest-renderer.js +188 -0
- package/.agents/scripts/lib/presentation/manifest-story-views.js +119 -0
- package/.agents/scripts/lib/provider-factory.js +80 -0
- package/.agents/scripts/lib/push-epic-retry.js +209 -0
- package/.agents/scripts/lib/qa/console-allowlist.js +151 -0
- package/.agents/scripts/lib/qa/coverage-report.js +181 -0
- package/.agents/scripts/lib/qa/coverage-verdict.js +296 -0
- package/.agents/scripts/lib/qa/propose-missing-test.js +95 -0
- package/.agents/scripts/lib/qa/qa-context-hydrator.js +296 -0
- package/.agents/scripts/lib/qa/qa-session.js +197 -0
- package/.agents/scripts/lib/qa/redact-evidence.js +245 -0
- package/.agents/scripts/lib/qa/resolve-qa-contract.js +190 -0
- package/.agents/scripts/lib/qa/resolve-selection.js +373 -0
- package/.agents/scripts/lib/runtime-deps/ensure-installed.js +100 -0
- package/.agents/scripts/lib/runtime-deps/manifest.js +96 -0
- package/.agents/scripts/lib/runtime-deps/preflight.js +78 -0
- package/.agents/scripts/lib/runtime-deps/scan-imports.js +202 -0
- package/.agents/scripts/lib/signals/detectors/common.js +36 -0
- package/.agents/scripts/lib/signals/detectors/hotspot.js +298 -0
- package/.agents/scripts/lib/signals/detectors/index.js +14 -0
- package/.agents/scripts/lib/signals/detectors/retry.js +289 -0
- package/.agents/scripts/lib/signals/detectors/rework.js +204 -0
- package/.agents/scripts/lib/signals/index.js +39 -0
- package/.agents/scripts/lib/signals/read.js +268 -0
- package/.agents/scripts/lib/signals/schema.js +225 -0
- package/.agents/scripts/lib/signals/span-tree.js +290 -0
- package/.agents/scripts/lib/signals/write.js +19 -0
- package/.agents/scripts/lib/single-story/confirm-merge.js +201 -0
- package/.agents/scripts/lib/single-story/story-merged-notify.js +126 -0
- package/.agents/scripts/lib/single-story-sweep/protection.js +274 -0
- package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +169 -0
- package/.agents/scripts/lib/single-story-sweep.js +329 -0
- package/.agents/scripts/lib/skills/parse-skill.js +202 -0
- package/.agents/scripts/lib/skills/walk-skill-files.js +56 -0
- package/.agents/scripts/lib/spec/index.js +36 -0
- package/.agents/scripts/lib/spec/loader.js +425 -0
- package/.agents/scripts/lib/spec/state.js +217 -0
- package/.agents/scripts/lib/story-body/story-body.js +743 -0
- package/.agents/scripts/lib/story-init/blocker-validator.js +68 -0
- package/.agents/scripts/lib/story-init/branch-initializer.js +422 -0
- package/.agents/scripts/lib/story-init/context-resolver.js +92 -0
- package/.agents/scripts/lib/story-init/donor-precheck.js +207 -0
- package/.agents/scripts/lib/story-init/hierarchy-tracer.js +36 -0
- package/.agents/scripts/lib/story-init/state-transitioner.js +80 -0
- package/.agents/scripts/lib/story-init/task-graph-builder.js +114 -0
- package/.agents/scripts/lib/story-init/transition-summary.js +34 -0
- package/.agents/scripts/lib/story-lifecycle.js +186 -0
- package/.agents/scripts/lib/story-plan.js +246 -0
- package/.agents/scripts/lib/task-utils.js +26 -0
- package/.agents/scripts/lib/templates/decomposer-prompts.js +168 -0
- package/.agents/scripts/lib/test-env.js +30 -0
- package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +52 -0
- package/.agents/scripts/lib/test-isolate/list-files.js +90 -0
- package/.agents/scripts/lib/test-isolate/parse-tap.js +75 -0
- package/.agents/scripts/lib/test-isolate/runner.js +483 -0
- package/.agents/scripts/lib/test-profile/parse-tap.js +136 -0
- package/.agents/scripts/lib/test-profile/render-report.js +45 -0
- package/.agents/scripts/lib/test-reserved-epic-temp-ids.js +35 -0
- package/.agents/scripts/lib/test-tiers.js +94 -0
- package/.agents/scripts/lib/util/concurrent-map.js +59 -0
- package/.agents/scripts/lib/util/phase-timer-state.js +72 -0
- package/.agents/scripts/lib/util/phase-timer.js +163 -0
- package/.agents/scripts/lib/util/poll-loop.js +86 -0
- package/.agents/scripts/lib/util/with-timeout.js +32 -0
- package/.agents/scripts/lib/validation-evidence.js +323 -0
- package/.agents/scripts/lib/wave-runner/tick.js +665 -0
- package/.agents/scripts/lib/wave-runner/wave-checkpoint.js +91 -0
- package/.agents/scripts/lib/wave-runner/wave-runner-error.js +19 -0
- package/.agents/scripts/lib/workers/crap-worker.js +197 -0
- package/.agents/scripts/lib/workers/maintainability-report-worker.js +137 -0
- package/.agents/scripts/lib/workers/maintainability-worker.js +79 -0
- package/.agents/scripts/lib/workspace-provisioner.js +189 -0
- package/.agents/scripts/lib/worktree/bootstrapper.js +48 -0
- package/.agents/scripts/lib/worktree/inspector.js +140 -0
- package/.agents/scripts/lib/worktree/lifecycle/creation.js +118 -0
- package/.agents/scripts/lib/worktree/lifecycle/drift-detection.js +62 -0
- package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +276 -0
- package/.agents/scripts/lib/worktree/lifecycle/gc.js +49 -0
- package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +178 -0
- package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +264 -0
- package/.agents/scripts/lib/worktree/lifecycle/precheck.js +100 -0
- package/.agents/scripts/lib/worktree/lifecycle/reap.js +588 -0
- package/.agents/scripts/lib/worktree/lifecycle/registry-sync.js +124 -0
- package/.agents/scripts/lib/worktree/lifecycle/shared.js +26 -0
- package/.agents/scripts/lib/worktree/lifecycle-manager.js +40 -0
- package/.agents/scripts/lib/worktree/node-modules-strategy.js +349 -0
- package/.agents/scripts/lib/worktree-manager.js +243 -0
- package/.agents/scripts/lifecycle-diff.js +206 -0
- package/.agents/scripts/lifecycle-emit-story-dispatch.js +194 -0
- package/.agents/scripts/lifecycle-emit.js +479 -0
- package/.agents/scripts/lint-baseline.js +507 -0
- package/.agents/scripts/lint-label-vocabulary.js +237 -0
- package/.agents/scripts/loc-delta.js +205 -0
- package/.agents/scripts/notify.js +307 -0
- package/.agents/scripts/package.json +3 -0
- package/.agents/scripts/post-structured-comment.js +127 -0
- package/.agents/scripts/pr-watch-with-update.js +152 -0
- package/.agents/scripts/providers/github/auth.js +65 -0
- package/.agents/scripts/providers/github/board-add.js +63 -0
- package/.agents/scripts/providers/github/branch-protection.js +186 -0
- package/.agents/scripts/providers/github/cache.js +72 -0
- package/.agents/scripts/providers/github/comments.js +131 -0
- package/.agents/scripts/providers/github/compose.js +111 -0
- package/.agents/scripts/providers/github/errors.js +242 -0
- package/.agents/scripts/providers/github/issues.js +242 -0
- package/.agents/scripts/providers/github/labels.js +179 -0
- package/.agents/scripts/providers/github/mappers.js +126 -0
- package/.agents/scripts/providers/github/merge-methods.js +82 -0
- package/.agents/scripts/providers/github/project-board.js +47 -0
- package/.agents/scripts/providers/github/projects-v2-graphql.js +472 -0
- package/.agents/scripts/providers/github/prs.js +103 -0
- package/.agents/scripts/providers/github/request-helpers.js +110 -0
- package/.agents/scripts/providers/github/sub-issues.js +369 -0
- package/.agents/scripts/providers/github/tickets.js +381 -0
- package/.agents/scripts/providers/github/transient-retry.js +62 -0
- package/.agents/scripts/providers/github.js +157 -0
- package/.agents/scripts/quality-preview.js +327 -0
- package/.agents/scripts/quality-watch.js +223 -0
- package/.agents/scripts/render-manifest.js +143 -0
- package/.agents/scripts/resync-status-column.js +176 -0
- package/.agents/scripts/retro-run.js +167 -0
- package/.agents/scripts/run-audit-suite.js +97 -0
- package/.agents/scripts/run-coverage.js +103 -0
- package/.agents/scripts/run-lint.js +94 -0
- package/.agents/scripts/run-test-profile.js +126 -0
- package/.agents/scripts/run-tests.js +185 -0
- package/.agents/scripts/run-verify.js +56 -0
- package/.agents/scripts/select-audits.js +155 -0
- package/.agents/scripts/signals-view.js +294 -0
- package/.agents/scripts/single-story-close.js +83 -0
- package/.agents/scripts/single-story-confirm-merge.js +183 -0
- package/.agents/scripts/single-story-init.js +692 -0
- package/.agents/scripts/stories-wave-tick.js +415 -0
- package/.agents/scripts/story-close.js +246 -0
- package/.agents/scripts/story-deliver-prepare.js +267 -0
- package/.agents/scripts/story-init.js +516 -0
- package/.agents/scripts/story-phase.js +327 -0
- package/.agents/scripts/story-plan.js +284 -0
- package/.agents/scripts/sync-agentrc.js +71 -0
- package/.agents/scripts/sync-branch-from-base.js +138 -0
- package/.agents/scripts/sync-claude-commands.js +151 -0
- package/.agents/scripts/test-isolate.js +222 -0
- package/.agents/scripts/test-wrapper.js +108 -0
- package/.agents/scripts/update-coverage-baseline.js +129 -0
- package/.agents/scripts/update-crap-baseline.js +177 -0
- package/.agents/scripts/update-duplication-baseline.js +134 -0
- package/.agents/scripts/update-maintainability-baseline.js +183 -0
- package/.agents/scripts/update-mutation-baseline.js +189 -0
- package/.agents/scripts/update-ticket-state.js +107 -0
- package/.agents/scripts/validate-docs-freshness.js +259 -0
- package/.agents/scripts/validate-skills.js +278 -0
- package/.agents/scripts/wave-tick.js +335 -0
- package/.agents/skills/core/analyze-execution/SKILL.md +98 -0
- package/.agents/skills/core/api-and-interface-design/SKILL.md +327 -0
- package/.agents/skills/core/baseline-refresh/SKILL.md +181 -0
- package/.agents/skills/core/browser-testing-with-devtools/SKILL.md +352 -0
- package/.agents/skills/core/ci-cd-and-automation/SKILL.md +274 -0
- package/.agents/skills/core/ci-cd-and-automation/examples.md +211 -0
- package/.agents/skills/core/code-review-and-quality/SKILL.md +421 -0
- package/.agents/skills/core/code-simplification/SKILL.md +389 -0
- package/.agents/skills/core/context-engineering/SKILL.md +309 -0
- package/.agents/skills/core/context-engineering/examples.md +58 -0
- package/.agents/skills/core/debugging-and-error-recovery/SKILL.md +338 -0
- package/.agents/skills/core/deprecation-and-migration/SKILL.md +250 -0
- package/.agents/skills/core/diagnose-friction/SKILL.md +79 -0
- package/.agents/skills/core/documentation-and-adrs/SKILL.md +323 -0
- package/.agents/skills/core/epic-plan-consolidate/SKILL.md +145 -0
- package/.agents/skills/core/epic-plan-decompose-author/SKILL.md +425 -0
- package/.agents/skills/core/epic-plan-spec-author/SKILL.md +393 -0
- package/.agents/skills/core/frontend-ui-engineering/SKILL.md +357 -0
- package/.agents/skills/core/git-workflow-and-versioning/SKILL.md +352 -0
- package/.agents/skills/core/hydrate-context/SKILL.md +118 -0
- package/.agents/skills/core/idea-refinement/SKILL.md +317 -0
- package/.agents/skills/core/idea-refinement/examples.md +437 -0
- package/.agents/skills/core/idea-refinement/frameworks.md +135 -0
- package/.agents/skills/core/idea-refinement/refinement-criteria.md +155 -0
- package/.agents/skills/core/idea-refinement/scripts/idea-refine.sh +15 -0
- package/.agents/skills/core/incremental-implementation/SKILL.md +271 -0
- package/.agents/skills/core/introducing-a-baseline-gate/SKILL.md +213 -0
- package/.agents/skills/core/knowledge-transfer/SKILL.md +175 -0
- package/.agents/skills/core/mutation-survivor-remediation/SKILL.md +117 -0
- package/.agents/skills/core/performance-optimization/SKILL.md +314 -0
- package/.agents/skills/core/planning-and-task-breakdown/SKILL.md +277 -0
- package/.agents/skills/core/property-based-testing/SKILL.md +148 -0
- package/.agents/skills/core/qa-coverage-mapping/SKILL.md +105 -0
- package/.agents/skills/core/refactoring-discipline/SKILL.md +111 -0
- package/.agents/skills/core/scope-triage/SKILL.md +127 -0
- package/.agents/skills/core/security-and-hardening/SKILL.md +400 -0
- package/.agents/skills/core/shipping-and-launch/SKILL.md +328 -0
- package/.agents/skills/core/spec-driven-development/SKILL.md +252 -0
- package/.agents/skills/core/test-driven-development/SKILL.md +475 -0
- package/.agents/skills/core/using-agent-skills/SKILL.md +232 -0
- package/.agents/skills/skills.index.json +596 -0
- package/.agents/skills/stack/architecture/monorepo-path-strategist/SKILL.md +31 -0
- package/.agents/skills/stack/architecture/structured-output-zod/SKILL.md +51 -0
- package/.agents/skills/stack/architecture/subagent-orchestration/SKILL.md +48 -0
- package/.agents/skills/stack/backend/cloudflare-hono-architect/SKILL.md +31 -0
- package/.agents/skills/stack/backend/cloudflare-hono-architect/examples/route-template.ts +33 -0
- package/.agents/skills/stack/backend/cloudflare-queue-manager/SKILL.md +31 -0
- package/.agents/skills/stack/backend/cloudflare-workers/SKILL.md +51 -0
- package/.agents/skills/stack/backend/highlevel-crm/SKILL.md +54 -0
- package/.agents/skills/stack/backend/sqlite-drizzle-expert/SKILL.md +29 -0
- package/.agents/skills/stack/backend/sqlite-drizzle-expert/examples/schema-template.ts +30 -0
- package/.agents/skills/stack/backend/stripe-integration/SKILL.md +57 -0
- package/.agents/skills/stack/backend/stripe-integration/scripts/listen-stripe.sh +9 -0
- package/.agents/skills/stack/backend/turso-sqlite/SKILL.md +48 -0
- package/.agents/skills/stack/frontend/astro/SKILL.md +62 -0
- package/.agents/skills/stack/frontend/astro-react-island-strategist/SKILL.md +30 -0
- package/.agents/skills/stack/frontend/expo-react-native-developer/SKILL.md +29 -0
- package/.agents/skills/stack/frontend/google-analytics-v4/SKILL.md +50 -0
- package/.agents/skills/stack/frontend/tailwind-v4/SKILL.md +58 -0
- package/.agents/skills/stack/frontend/ui-accessibility-engineer/SKILL.md +34 -0
- package/.agents/skills/stack/qa/audit-accessibility/SKILL.md +51 -0
- package/.agents/skills/stack/qa/gherkin-authoring/SKILL.md +257 -0
- package/.agents/skills/stack/qa/gherkin-authoring/examples/invoice-issue.feature +41 -0
- package/.agents/skills/stack/qa/lighthouse-baseline/SKILL.md +199 -0
- package/.agents/skills/stack/qa/playwright/SKILL.md +50 -0
- package/.agents/skills/stack/qa/playwright-bdd/SKILL.md +188 -0
- package/.agents/skills/stack/qa/qa-explore-driving/SKILL.md +142 -0
- package/.agents/skills/stack/qa/qa-harness/SKILL.md +220 -0
- package/.agents/skills/stack/qa/vitest/SKILL.md +51 -0
- package/.agents/skills/stack/security/backend-security-patterns/SKILL.md +68 -0
- package/.agents/starter-agentrc.json +22 -0
- package/.agents/templates/agent-protocol.md +72 -0
- package/.agents/templates/docs/architecture.md +30 -0
- package/.agents/templates/docs/decisions.md +24 -0
- package/.agents/templates/epic-from-idea.md +21 -0
- package/.agents/templates/single-story-body.md +17 -0
- package/.agents/workflows/agents-update.md +415 -0
- package/.agents/workflows/audit-architecture.md +312 -0
- package/.agents/workflows/audit-clean-code.md +179 -0
- package/.agents/workflows/audit-dependencies.md +91 -0
- package/.agents/workflows/audit-devops.md +110 -0
- package/.agents/workflows/audit-lighthouse.md +260 -0
- package/.agents/workflows/audit-performance.md +161 -0
- package/.agents/workflows/audit-privacy.md +104 -0
- package/.agents/workflows/audit-quality.md +191 -0
- package/.agents/workflows/audit-security.md +156 -0
- package/.agents/workflows/audit-seo.md +118 -0
- package/.agents/workflows/audit-sre.md +139 -0
- package/.agents/workflows/audit-to-stories.md +257 -0
- package/.agents/workflows/audit-ux-ui.md +102 -0
- package/.agents/workflows/epic-deliver.md +864 -0
- package/.agents/workflows/epic-plan.md +998 -0
- package/.agents/workflows/explain.md +118 -0
- package/.agents/workflows/git-cleanup.md +250 -0
- package/.agents/workflows/git-commit-all.md +15 -0
- package/.agents/workflows/git-merge-pr.md +377 -0
- package/.agents/workflows/git-pr-all.md +278 -0
- package/.agents/workflows/git-push.md +60 -0
- package/.agents/workflows/helpers/_merge-conflict-template.md +54 -0
- package/.agents/workflows/helpers/acceptance-self-eval.md +74 -0
- package/.agents/workflows/helpers/agents-sync-config.md +129 -0
- package/.agents/workflows/helpers/code-quality-guardrails.md +101 -0
- package/.agents/workflows/helpers/code-review.md +370 -0
- package/.agents/workflows/helpers/diagnose.md +117 -0
- package/.agents/workflows/helpers/epic-audit.md +295 -0
- package/.agents/workflows/helpers/epic-deliver-story.md +370 -0
- package/.agents/workflows/helpers/epic-plan-decompose.md +199 -0
- package/.agents/workflows/helpers/epic-plan-spec.md +184 -0
- package/.agents/workflows/helpers/epic-testing.md +125 -0
- package/.agents/workflows/helpers/parallel-tooling.md +88 -0
- package/.agents/workflows/helpers/signals.md +112 -0
- package/.agents/workflows/helpers/single-story-deliver.md +636 -0
- package/.agents/workflows/helpers/worktree-lifecycle.md +317 -0
- package/.agents/workflows/onboard.md +207 -0
- package/.agents/workflows/qa-assist.md +293 -0
- package/.agents/workflows/qa-explore.md +350 -0
- package/.agents/workflows/qa-run-harness.md +288 -0
- package/.agents/workflows/story-deliver.md +327 -0
- package/.agents/workflows/story-plan.md +233 -0
- package/LICENSE +21 -0
- package/README.md +193 -0
- package/bin/mandrel.js +56 -0
- package/bin/postinstall.js +195 -0
- package/lib/cli/__tests__/migrate.test.js +268 -0
- package/lib/cli/__tests__/sync-local-zone.test.js +247 -0
- package/lib/cli/__tests__/sync.test.js +372 -0
- package/lib/cli/__tests__/update-major.test.js +217 -0
- package/lib/cli/__tests__/update.test.js +696 -0
- package/lib/cli/__tests__/version-check.test.js +398 -0
- package/lib/cli/doctor.js +124 -0
- package/lib/cli/explain.js +107 -0
- package/lib/cli/migrate.js +260 -0
- package/lib/cli/registry.js +830 -0
- package/lib/cli/sync-commands.js +50 -0
- package/lib/cli/sync.js +200 -0
- package/lib/cli/uninstall.js +795 -0
- package/lib/cli/update.js +854 -0
- package/lib/cli/version-check.js +206 -0
- package/lib/migrations/README.md +69 -0
- package/lib/migrations/__tests__/index.test.js +216 -0
- package/lib/migrations/index.js +164 -0
- package/package.json +105 -0
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger conventions (see `docs/patterns.md` → "Error Handling Convention"):
|
|
3
|
+
*
|
|
4
|
+
* - `debug`: verbose trace; only emitted when the logger level is `verbose`.
|
|
5
|
+
* - `info`: normal progress.
|
|
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`).
|
|
21
|
+
* - `debug` → alias for `verbose` (backward compatible).
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* Recognized log levels, lowest-noise first. Anything outside this set
|
|
25
|
+
* resolves to `info`.
|
|
26
|
+
*
|
|
27
|
+
* @type {ReadonlySet<string>}
|
|
28
|
+
*/
|
|
29
|
+
const VALID_LEVELS = Object.freeze(
|
|
30
|
+
new Set(['silent', 'info', 'verbose', 'debug']),
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Process-wide level override. `null` means "no explicit override — read
|
|
35
|
+
* `AGENT_LOG_LEVEL` from the environment on each resolve". `setLevel`
|
|
36
|
+
* pins this so tests (and embedders) can exercise every level branch
|
|
37
|
+
* in-process without spawning a child whose module-load reads a different
|
|
38
|
+
* env var. `setLevel(null)` clears the pin and restores env-driven
|
|
39
|
+
* resolution.
|
|
40
|
+
*
|
|
41
|
+
* @type {string|null}
|
|
42
|
+
*/
|
|
43
|
+
let levelOverride = null;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Resolve the active log level lazily. Honors an explicit `setLevel`
|
|
47
|
+
* override first, otherwise reads `AGENT_LOG_LEVEL` from the environment
|
|
48
|
+
* on every call. Resolving per emit (rather than once at module load)
|
|
49
|
+
* means a test can flip `AGENT_LOG_LEVEL` — or call `setLevel` — and see
|
|
50
|
+
* the level branches react in-process, without a child process per level
|
|
51
|
+
* (Story #3329).
|
|
52
|
+
*
|
|
53
|
+
* @returns {'silent'|'info'|'verbose'|'debug'}
|
|
54
|
+
*/
|
|
55
|
+
export function resolveLevel() {
|
|
56
|
+
const raw = (
|
|
57
|
+
levelOverride ??
|
|
58
|
+
process.env.AGENT_LOG_LEVEL ??
|
|
59
|
+
''
|
|
60
|
+
).toLowerCase();
|
|
61
|
+
return VALID_LEVELS.has(raw) ? raw : 'info';
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Pin the process-wide log level, bypassing `AGENT_LOG_LEVEL`. Pass a
|
|
66
|
+
* recognized level (`silent` / `info` / `verbose` / `debug`) to force it,
|
|
67
|
+
* or `null` to clear the pin and restore env-driven resolution. An
|
|
68
|
+
* unrecognized non-null value throws so callers cannot silently pin a
|
|
69
|
+
* level that resolves to `info`.
|
|
70
|
+
*
|
|
71
|
+
* @param {('silent'|'info'|'verbose'|'debug')|null} level
|
|
72
|
+
* @returns {void}
|
|
73
|
+
*/
|
|
74
|
+
export function setLevel(level) {
|
|
75
|
+
if (level === null) {
|
|
76
|
+
levelOverride = null;
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (typeof level !== 'string' || !VALID_LEVELS.has(level.toLowerCase())) {
|
|
80
|
+
throw new RangeError(
|
|
81
|
+
`setLevel: level must be one of silent|info|verbose|debug or null (got ${level})`,
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
levelOverride = level.toLowerCase();
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function debugEnabled() {
|
|
88
|
+
const level = resolveLevel();
|
|
89
|
+
return level === 'verbose' || level === 'debug';
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function infoEnabled() {
|
|
93
|
+
return resolveLevel() === 'info' || debugEnabled();
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Mutable sinks for `info` (defaults to stdout via console.log) and the
|
|
97
|
+
// stdout branch of `createProgress` (defaults to console.log). `warn` already
|
|
98
|
+
// uses console.warn which Node routes to stderr, but we expose a sink for it
|
|
99
|
+
// too so a single `routeAllOutputToStderr()` call gives a uniform guarantee
|
|
100
|
+
// to callers that "no Logger output lands on stdout" (Story #2278).
|
|
101
|
+
let infoSink = (msg) => console.log(msg);
|
|
102
|
+
let warnSink = (msg) => console.warn(msg);
|
|
103
|
+
let progressStdoutSink = (msg) => console.log(msg);
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Flip every Logger output that can land on stdout (`info`, `warn`, and the
|
|
107
|
+
* stdout branch of `createProgress`) to stderr for the lifetime of the
|
|
108
|
+
* process. Idempotent. Use when stdout is reserved for a structured payload
|
|
109
|
+
* — for example the `--emit-context` JSON envelopes emitted by
|
|
110
|
+
* `epic-plan-spec.js` and `epic-plan-decompose.js`, where any interleaved
|
|
111
|
+
* `[Orchestrator] ℹ️ …` log line corrupts the captured file
|
|
112
|
+
* (Story #2278).
|
|
113
|
+
*/
|
|
114
|
+
export function routeAllOutputToStderr() {
|
|
115
|
+
infoSink = (msg) => console.error(msg);
|
|
116
|
+
warnSink = (msg) => console.error(msg);
|
|
117
|
+
progressStdoutSink = (msg) => console.error(msg);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export const Logger = {
|
|
121
|
+
/**
|
|
122
|
+
* The currently-resolved level. A getter (not a frozen snapshot) so it
|
|
123
|
+
* reflects `setLevel` overrides and live `AGENT_LOG_LEVEL` changes —
|
|
124
|
+
* reading `Logger.level` always returns what the next emit will use.
|
|
125
|
+
*/
|
|
126
|
+
get level() {
|
|
127
|
+
return resolveLevel();
|
|
128
|
+
},
|
|
129
|
+
|
|
130
|
+
debug(message) {
|
|
131
|
+
if (debugEnabled()) console.error(`[Orchestrator] 🐛 ${message}`);
|
|
132
|
+
},
|
|
133
|
+
|
|
134
|
+
info(message) {
|
|
135
|
+
if (infoEnabled()) infoSink(`[Orchestrator] ℹ️ ${message}`);
|
|
136
|
+
},
|
|
137
|
+
|
|
138
|
+
warn(message) {
|
|
139
|
+
if (infoEnabled()) warnSink(`[Orchestrator] ⚠️ ${message}`);
|
|
140
|
+
},
|
|
141
|
+
|
|
142
|
+
error(message) {
|
|
143
|
+
if (infoEnabled()) console.error(`[Orchestrator] ❌ ${message}`);
|
|
144
|
+
},
|
|
145
|
+
|
|
146
|
+
fatal(message) {
|
|
147
|
+
console.error(`[Orchestrator] ❌ ${message}`);
|
|
148
|
+
process.exit(1);
|
|
149
|
+
},
|
|
150
|
+
|
|
151
|
+
createProgress(scriptName, { stderr = true } = {}) {
|
|
152
|
+
return (phase, message) => {
|
|
153
|
+
if (!infoEnabled()) return;
|
|
154
|
+
const line = `▶ [${scriptName}] [${phase}] ${message}`;
|
|
155
|
+
if (stderr) console.error(line);
|
|
156
|
+
else progressStdoutSink(line);
|
|
157
|
+
};
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Frozen no-op logger shaped like the public `Logger` surface (minus `fatal`,
|
|
163
|
+
* which must never be silenced — silencing process-exit is a footgun). Use
|
|
164
|
+
* this as the default-argument value when a function accepts an optional
|
|
165
|
+
* logger; consumers that don't pass one get a uniform shape without each
|
|
166
|
+
* call site re-declaring its own inline literal.
|
|
167
|
+
*
|
|
168
|
+
* Deliberately omits `fatal` so that any code path tempted to call
|
|
169
|
+
* `logger.fatal(...)` against the no-op fails loudly rather than silently
|
|
170
|
+
* skipping a process-exit that would otherwise have surfaced an
|
|
171
|
+
* unrecoverable error.
|
|
172
|
+
*/
|
|
173
|
+
export const NOOP_LOGGER = Object.freeze({
|
|
174
|
+
silent: true,
|
|
175
|
+
debug() {},
|
|
176
|
+
info() {},
|
|
177
|
+
warn() {},
|
|
178
|
+
error() {},
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Frozen logger that routes every level to **stderr**. Use this when a
|
|
183
|
+
* caller's stdout is a structured payload (e.g. `--emit-context` JSON
|
|
184
|
+
* envelopes from `epic-plan-spec.js` / `epic-plan-decompose.js`) and any
|
|
185
|
+
* progress/telemetry log must not interleave with the payload. Mirrors the
|
|
186
|
+
* `{ info, warn, error, debug }` shape that the orchestration helpers
|
|
187
|
+
* accept via optional `logger` arguments.
|
|
188
|
+
*/
|
|
189
|
+
export const STDERR_LOGGER = Object.freeze({
|
|
190
|
+
debug: (message) => console.error(message),
|
|
191
|
+
info: (message) => console.error(message),
|
|
192
|
+
warn: (message) => console.error(message),
|
|
193
|
+
error: (message) => console.error(message),
|
|
194
|
+
});
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* lib/audit-suite/cli.js — Argv parsing + help text for run-audit-suite.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from `.agents/scripts/run-audit-suite.js` (Story #963, Epic #946).
|
|
5
|
+
* No IO, no provider call. The entry-point composes these helpers with the
|
|
6
|
+
* runner from `./runner.js`.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { parseArgs } from 'node:util';
|
|
10
|
+
|
|
11
|
+
export const HELP = `Usage: node .agents/scripts/run-audit-suite.js \\
|
|
12
|
+
--audits <comma-list> [--ticket <id>] [--base-branch main] \\
|
|
13
|
+
[--substitution key=value]... [--run-id <id>]
|
|
14
|
+
|
|
15
|
+
Flags:
|
|
16
|
+
--audits Comma-separated audit workflow names (required).
|
|
17
|
+
--ticket Ticket id used for the {{ticketId}} substitution (optional).
|
|
18
|
+
--base-branch Value used for the {{baseBranch}} substitution (default: main).
|
|
19
|
+
--substitution Repeatable key=value substitution (e.g. --substitution alphaKey=val).
|
|
20
|
+
Allowed keys are the built-ins (auditOutputDir, ticketId, baseBranch,
|
|
21
|
+
changedFiles) plus any substitutionKeys declared on the requested audits.
|
|
22
|
+
--run-id Optional artifact prefix. When set, full prompt bodies are written
|
|
23
|
+
to <auditOutputDir>/audit-<run-id>-<audit>.md (defaults to
|
|
24
|
+
temp/audits/) so downstream agents can read them.
|
|
25
|
+
--help Show this message.
|
|
26
|
+
`;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Pure: split a comma-separated `--audits` value into a clean workflow list.
|
|
30
|
+
* Empty/whitespace tokens are dropped; nullish input yields an empty array.
|
|
31
|
+
*
|
|
32
|
+
* @param {string|null|undefined} commaList
|
|
33
|
+
* @returns {string[]}
|
|
34
|
+
*/
|
|
35
|
+
export function parseAuditList(commaList) {
|
|
36
|
+
return String(commaList ?? '')
|
|
37
|
+
.split(',')
|
|
38
|
+
.map((a) => a.trim())
|
|
39
|
+
.filter(Boolean);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Parse the run-audit-suite CLI argv into a flat `values` object.
|
|
44
|
+
* `strict: false` keeps the parser permissive so callers can pass extra
|
|
45
|
+
* positional/unknown flags without aborting the run.
|
|
46
|
+
*
|
|
47
|
+
* @param {string[]} argv
|
|
48
|
+
* @returns {Record<string, unknown>}
|
|
49
|
+
*/
|
|
50
|
+
export function parseArgv(argv) {
|
|
51
|
+
const { values } = parseArgs({
|
|
52
|
+
args: argv,
|
|
53
|
+
options: {
|
|
54
|
+
audits: { type: 'string' },
|
|
55
|
+
ticket: { type: 'string' },
|
|
56
|
+
'base-branch': { type: 'string' },
|
|
57
|
+
substitution: { type: 'string', multiple: true },
|
|
58
|
+
'run-id': { type: 'string' },
|
|
59
|
+
help: { type: 'boolean' },
|
|
60
|
+
},
|
|
61
|
+
strict: false,
|
|
62
|
+
});
|
|
63
|
+
return values;
|
|
64
|
+
}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* lib/audit-suite/findings.js — Findings histogram + baseline delta emitters.
|
|
3
|
+
*
|
|
4
|
+
* `aggregateSummary` (Story #963, Epic #946) populates the `metadata.summary`
|
|
5
|
+
* block of the audit-suite envelope with a severity histogram.
|
|
6
|
+
*
|
|
7
|
+
* `aggregateBaselineDelta` (Task #1920, Epic #1786) reports per-component
|
|
8
|
+
* rollup deltas between two committed baseline envelopes loaded via
|
|
9
|
+
* `lib/baselines/reader.js`. It supersedes the prior row-by-row diff —
|
|
10
|
+
* row-level deltas surfaced noise from churn that did not move any
|
|
11
|
+
* component's rollup, drowning out the regressions that actually mattered.
|
|
12
|
+
*
|
|
13
|
+
* The delta function is **pure**: it takes the two `{ rollup, rows }`
|
|
14
|
+
* envelopes returned by the reader plus the resolved components map and
|
|
15
|
+
* returns a deterministic per-component delta. No filesystem I/O.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { groupRows, resolveComponents } from '../baselines/components.js';
|
|
19
|
+
|
|
20
|
+
const SEVERITIES = Object.freeze(['critical', 'high', 'medium', 'low']);
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Pure: count findings into a {critical,high,medium,low} histogram. Findings
|
|
24
|
+
* with severities outside that set are ignored, keeping the rendered summary
|
|
25
|
+
* truthful even if upstream callers append non-standard severities.
|
|
26
|
+
*
|
|
27
|
+
* @param {Array<{ severity?: string }>|null|undefined} findings
|
|
28
|
+
* @returns {{ critical: number, high: number, medium: number, low: number }}
|
|
29
|
+
*/
|
|
30
|
+
export function aggregateSummary(findings) {
|
|
31
|
+
const summary = { critical: 0, high: 0, medium: 0, low: 0 };
|
|
32
|
+
for (const finding of findings ?? []) {
|
|
33
|
+
if (Object.hasOwn(summary, finding.severity)) {
|
|
34
|
+
summary[finding.severity] += 1;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return summary;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export const KNOWN_SEVERITIES = SEVERITIES;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Resolve the per-component rollup map for an envelope. When the envelope
|
|
44
|
+
* already carries a `rollup` block (every writer-produced baseline does), we
|
|
45
|
+
* trust it as the source of truth. When `rollup` is absent (raw test
|
|
46
|
+
* fixtures, hand-written cases) we recompute from rows via the supplied
|
|
47
|
+
* `recompute` callback so the function stays useful in both shapes.
|
|
48
|
+
*
|
|
49
|
+
* @param {{ rollup?: object, rows?: Array<object> }} envelope
|
|
50
|
+
* @param {Record<string, string[]>} components
|
|
51
|
+
* @param {string} keyField
|
|
52
|
+
* @param {(rows: Array<object>) => Record<string, number>} [recompute]
|
|
53
|
+
* @returns {Record<string, Record<string, number>>}
|
|
54
|
+
*/
|
|
55
|
+
function resolveRollup(envelope, components, keyField, recompute) {
|
|
56
|
+
if (envelope?.rollup && typeof envelope.rollup === 'object') {
|
|
57
|
+
return envelope.rollup;
|
|
58
|
+
}
|
|
59
|
+
if (typeof recompute !== 'function') return { '*': {} };
|
|
60
|
+
const buckets = groupRows(envelope?.rows ?? [], components, keyField);
|
|
61
|
+
const out = {};
|
|
62
|
+
for (const [name, rows] of Object.entries(buckets)) {
|
|
63
|
+
out[name] = recompute(rows);
|
|
64
|
+
}
|
|
65
|
+
return out;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Compare two component rollup objects (`{ axis: value }`) and emit one
|
|
70
|
+
* delta entry per axis that differs. Pure.
|
|
71
|
+
*
|
|
72
|
+
* The direction is informational only — the audit emitter does not enforce
|
|
73
|
+
* pass/fail policy; floor enforcement happens in `check-baselines.js`. We
|
|
74
|
+
* report `before`, `after`, and the signed delta so a reviewer can read the
|
|
75
|
+
* sign in context (lint count up = bad; coverage % down = bad).
|
|
76
|
+
*
|
|
77
|
+
* @param {Record<string, number>|null|undefined} before
|
|
78
|
+
* @param {Record<string, number>|null|undefined} after
|
|
79
|
+
* @returns {Array<{ axis: string, before: number|null, after: number|null, delta: number|null }>}
|
|
80
|
+
*/
|
|
81
|
+
function diffAxes(before, after) {
|
|
82
|
+
const axes = new Set([
|
|
83
|
+
...Object.keys(before ?? {}),
|
|
84
|
+
...Object.keys(after ?? {}),
|
|
85
|
+
]);
|
|
86
|
+
const out = [];
|
|
87
|
+
for (const axis of [...axes].sort()) {
|
|
88
|
+
const b = before?.[axis];
|
|
89
|
+
const a = after?.[axis];
|
|
90
|
+
const bNum = typeof b === 'number' && Number.isFinite(b) ? b : null;
|
|
91
|
+
const aNum = typeof a === 'number' && Number.isFinite(a) ? a : null;
|
|
92
|
+
if (bNum === aNum) continue;
|
|
93
|
+
const delta = bNum !== null && aNum !== null ? aNum - bNum : null;
|
|
94
|
+
out.push({ axis, before: bNum, after: aNum, delta });
|
|
95
|
+
}
|
|
96
|
+
return out;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Compute per-component rollup deltas between two baseline envelopes.
|
|
101
|
+
*
|
|
102
|
+
* Inputs are the shapes returned by `lib/baselines/reader.js#load(kind)`.
|
|
103
|
+
* The function is pure — disk reads happen in the caller so the audit
|
|
104
|
+
* emitter (and its tests) can drive synthetic before/after pairs.
|
|
105
|
+
*
|
|
106
|
+
* @param {{
|
|
107
|
+
* before: { rollup?: object, rows?: Array<object> },
|
|
108
|
+
* after: { rollup?: object, rows?: Array<object> },
|
|
109
|
+
* gateConfig?: object,
|
|
110
|
+
* keyField?: string,
|
|
111
|
+
* recompute?: (rows: Array<object>) => Record<string, number>,
|
|
112
|
+
* }} params
|
|
113
|
+
* @returns {Array<{
|
|
114
|
+
* component: string,
|
|
115
|
+
* axes: Array<{ axis: string, before: number|null, after: number|null, delta: number|null }>
|
|
116
|
+
* }>}
|
|
117
|
+
* One entry per component whose rollup changed. `*` always sorts first;
|
|
118
|
+
* the remainder is alpha. Components with no axis changes are omitted so
|
|
119
|
+
* an unchanged baseline yields `[]`.
|
|
120
|
+
*/
|
|
121
|
+
export function aggregateBaselineDelta(params = {}) {
|
|
122
|
+
const before = params.before ?? { rollup: {}, rows: [] };
|
|
123
|
+
const after = params.after ?? { rollup: {}, rows: [] };
|
|
124
|
+
const components = resolveComponents(params.gateConfig);
|
|
125
|
+
const keyField =
|
|
126
|
+
typeof params.keyField === 'string' && params.keyField.length > 0
|
|
127
|
+
? params.keyField
|
|
128
|
+
: 'path';
|
|
129
|
+
|
|
130
|
+
const beforeRollup = resolveRollup(
|
|
131
|
+
before,
|
|
132
|
+
components,
|
|
133
|
+
keyField,
|
|
134
|
+
params.recompute,
|
|
135
|
+
);
|
|
136
|
+
const afterRollup = resolveRollup(
|
|
137
|
+
after,
|
|
138
|
+
components,
|
|
139
|
+
keyField,
|
|
140
|
+
params.recompute,
|
|
141
|
+
);
|
|
142
|
+
|
|
143
|
+
const componentNames = new Set([
|
|
144
|
+
'*',
|
|
145
|
+
...Object.keys(components),
|
|
146
|
+
...Object.keys(beforeRollup),
|
|
147
|
+
...Object.keys(afterRollup),
|
|
148
|
+
]);
|
|
149
|
+
|
|
150
|
+
const entries = [];
|
|
151
|
+
for (const name of componentNames) {
|
|
152
|
+
const axes = diffAxes(beforeRollup[name], afterRollup[name]);
|
|
153
|
+
if (axes.length === 0) continue;
|
|
154
|
+
entries.push({ component: name, axes });
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
entries.sort((a, b) => {
|
|
158
|
+
if (a.component === '*') return -1;
|
|
159
|
+
if (b.component === '*') return 1;
|
|
160
|
+
return a.component.localeCompare(b.component);
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
return entries;
|
|
164
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* lib/audit-suite/frontmatter-lint.js — workflow frontmatter linter.
|
|
3
|
+
*
|
|
4
|
+
* Lives next to `frontmatter.js` but stays in its own module so adding
|
|
5
|
+
* lints doesn't drag the summary helper's maintainability score down.
|
|
6
|
+
* Pure: no IO, no provider calls, safe to unit-test in isolation.
|
|
7
|
+
*
|
|
8
|
+
* Story #1324, Epic #1185 — Dispatch performance pass.
|
|
9
|
+
*
|
|
10
|
+
* Story #2824, Epic #2815 — Model-hint frontmatter was removed from
|
|
11
|
+
* every workflow and from the validator's field list. The function is
|
|
12
|
+
* retained as a no-op safety net so callers (and any future frontmatter
|
|
13
|
+
* lints) keep a stable entry point.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { extractFrontmatter } from './frontmatter.js';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Pure: lint a frontmatter map (or raw workflow content). Currently a
|
|
20
|
+
* no-op — no frontmatter fields are validated after the model-hint
|
|
21
|
+
* removal. The signature is preserved so future field-level lints can
|
|
22
|
+
* slot in without churning callers.
|
|
23
|
+
*
|
|
24
|
+
* @param {string | Record<string, string>} input
|
|
25
|
+
* @returns {{ ok: boolean, errors: Array<{ field: string, value: string, message: string }> }}
|
|
26
|
+
*/
|
|
27
|
+
export function validateFrontmatter(input) {
|
|
28
|
+
// Extract so callers still pay the same "is this parseable?" cost as
|
|
29
|
+
// before; we just have no field-level rules to enforce right now.
|
|
30
|
+
if (typeof input === 'string') extractFrontmatter(input);
|
|
31
|
+
return { ok: true, errors: [] };
|
|
32
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* lib/audit-suite/frontmatter.js — Markdown frontmatter + summary helpers.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from `.agents/scripts/run-audit-suite.js` (Story #963, Epic #946).
|
|
5
|
+
* Pure module — no IO, no provider calls, safe to unit-test in isolation.
|
|
6
|
+
*
|
|
7
|
+
* The functions here are the parsing seam used by the audit suite to derive
|
|
8
|
+
* a 1–3-sentence summary from a workflow's `description` frontmatter field
|
|
9
|
+
* (falling back to its first prose paragraph). Keep them tiny and free of
|
|
10
|
+
* cross-module imports so the audit-suite entry-point stays orchestration-only.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
// All RegExp instances are built via the constructor (rather than literal
|
|
14
|
+
// `/.../`) so the maintainability engine's AST walker (typhonjs-escomplex) can
|
|
15
|
+
// score this file. The walker has a long-standing bug where it crashes on
|
|
16
|
+
// RegExp literals via `RegExpLiteral`, returning MI=0 — see the parse-time
|
|
17
|
+
// fallback in lib/maintainability-engine.js#calculateForSource.
|
|
18
|
+
// biome-ignore-start lint/complexity/useRegexLiterals: typhonjs-escomplex MI workaround
|
|
19
|
+
const FRONTMATTER_RE = new RegExp(String.raw`^---\r?\n([\s\S]*?)\r?\n---\r?\n`);
|
|
20
|
+
const NEWLINE_SPLIT_RE = new RegExp(String.raw`\r?\n`);
|
|
21
|
+
const PARAGRAPH_SPLIT_RE = new RegExp(String.raw`\r?\n\s*\r?\n`);
|
|
22
|
+
const COLLAPSE_WS_RE = new RegExp(String.raw`\s+`, 'g');
|
|
23
|
+
const SENTENCE_RE = new RegExp(String.raw`[^.!?\n]+[.!?]+`, 'g');
|
|
24
|
+
// biome-ignore-end lint/complexity/useRegexLiterals: typhonjs-escomplex MI workaround
|
|
25
|
+
|
|
26
|
+
const SUMMARY_MAX_SENTENCES = 3;
|
|
27
|
+
const SUMMARY_MAX_CHARS = 280;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Pure: parse a workflow's leading `---` frontmatter block into a flat
|
|
31
|
+
* key→value map. Quoted values are unwrapped; entries without a `:` separator
|
|
32
|
+
* are skipped. Returns `{}` when no frontmatter is present.
|
|
33
|
+
*
|
|
34
|
+
* @param {string} content
|
|
35
|
+
* @returns {Record<string, string>}
|
|
36
|
+
*/
|
|
37
|
+
export function extractFrontmatter(content) {
|
|
38
|
+
const match = FRONTMATTER_RE.exec(content);
|
|
39
|
+
if (!match) return {};
|
|
40
|
+
const fm = {};
|
|
41
|
+
for (const line of match[1].split(NEWLINE_SPLIT_RE)) {
|
|
42
|
+
const eq = line.indexOf(':');
|
|
43
|
+
if (eq <= 0) continue;
|
|
44
|
+
const key = line.slice(0, eq).trim();
|
|
45
|
+
let value = line.slice(eq + 1).trim();
|
|
46
|
+
if (
|
|
47
|
+
(value.startsWith('"') && value.endsWith('"')) ||
|
|
48
|
+
(value.startsWith("'") && value.endsWith("'"))
|
|
49
|
+
) {
|
|
50
|
+
value = value.slice(1, -1);
|
|
51
|
+
}
|
|
52
|
+
fm[key] = value;
|
|
53
|
+
}
|
|
54
|
+
return fm;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Pure: find the first prose paragraph after the frontmatter block, skipping
|
|
59
|
+
* headings and `---` rules. Whitespace inside the paragraph is collapsed to
|
|
60
|
+
* single spaces. Returns `''` when the body is empty / heading-only.
|
|
61
|
+
*
|
|
62
|
+
* @param {string} content
|
|
63
|
+
* @returns {string}
|
|
64
|
+
*/
|
|
65
|
+
export function firstProseParagraph(content) {
|
|
66
|
+
const stripped = content.replace(FRONTMATTER_RE, '');
|
|
67
|
+
for (const block of stripped.split(PARAGRAPH_SPLIT_RE)) {
|
|
68
|
+
const trimmed = block.trim();
|
|
69
|
+
if (!trimmed) continue;
|
|
70
|
+
if (trimmed.startsWith('#')) continue;
|
|
71
|
+
if (trimmed.startsWith('---')) continue;
|
|
72
|
+
return trimmed.replace(COLLAPSE_WS_RE, ' ');
|
|
73
|
+
}
|
|
74
|
+
return '';
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Pure: trim a candidate summary to at most three sentences and 280 chars.
|
|
79
|
+
* Sentences are matched by `[^.!?\n]+[.!?]+`; bare paragraphs that contain no
|
|
80
|
+
* terminator are returned verbatim (subject to the char clamp). The 280-char
|
|
81
|
+
* trim appends an ellipsis to signal truncation to readers.
|
|
82
|
+
*
|
|
83
|
+
* @param {string} text
|
|
84
|
+
* @returns {string}
|
|
85
|
+
*/
|
|
86
|
+
export function clampSummary(text) {
|
|
87
|
+
const trimmed = text.trim();
|
|
88
|
+
if (!trimmed) return '';
|
|
89
|
+
const sentences = trimmed.match(SENTENCE_RE);
|
|
90
|
+
let result = sentences
|
|
91
|
+
? sentences.slice(0, SUMMARY_MAX_SENTENCES).join(' ').trim()
|
|
92
|
+
: trimmed;
|
|
93
|
+
if (result.length > SUMMARY_MAX_CHARS) {
|
|
94
|
+
result = `${result.slice(0, SUMMARY_MAX_CHARS - 1).trimEnd()}…`;
|
|
95
|
+
}
|
|
96
|
+
return result;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Pure: derive a 1–3-sentence summary from a workflow's frontmatter
|
|
101
|
+
* `description` field, falling back to the first prose paragraph.
|
|
102
|
+
*
|
|
103
|
+
* @param {string} content
|
|
104
|
+
* @returns {string}
|
|
105
|
+
*/
|
|
106
|
+
export function summarizeWorkflow(content) {
|
|
107
|
+
const fm = extractFrontmatter(content);
|
|
108
|
+
const candidate = fm.description?.trim() || firstProseParagraph(content);
|
|
109
|
+
return clampSummary(candidate);
|
|
110
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* lib/audit-suite/index.js — Audit-suite SDK barrel.
|
|
3
|
+
*
|
|
4
|
+
* Single library entry point for the audit-suite. Exports the two public
|
|
5
|
+
* functions (`runAuditSuite`, `selectAudits`) plus the pure rule-matching
|
|
6
|
+
* helpers (`matchesFilePattern`, `matchesAnyFilePattern`) used by the
|
|
7
|
+
* top-level CLIs (`run-audit-suite.js`, `select-audits.js`).
|
|
8
|
+
*
|
|
9
|
+
* Consumers import from this file rather than reaching upward into the
|
|
10
|
+
* CLI scripts (`../../run-audit-suite.js`, `../../select-audits.js`) —
|
|
11
|
+
* that direction inversion is the goal of Story #1083 / Epic #1072.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* import { runAuditSuite, selectAudits } from './lib/audit-suite/index.js';
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
export { runAuditSuite } from './runner.js';
|
|
18
|
+
export {
|
|
19
|
+
matchesAnyFilePattern,
|
|
20
|
+
matchesFilePattern,
|
|
21
|
+
selectAudits,
|
|
22
|
+
} from './selector.js';
|