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,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `delivery.ci` accessor + framework defaults — Story #2899 (Epic #2880, F13).
|
|
3
|
+
*
|
|
4
|
+
* `delivery.ci.skipForStoryPushes` defaults to `true` so per-Task Story-branch
|
|
5
|
+
* commits append a `[skip ci]` trailer out of the box. The Epic-branch merge
|
|
6
|
+
* commit produced by `story-close.js`'s merge runner never carries the
|
|
7
|
+
* marker — that path is the one consumers actually want CI to evaluate.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
export const CI_DELIVERY_DEFAULTS = Object.freeze({
|
|
11
|
+
skipForStoryPushes: true,
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Read the merged `delivery.ci` block, applying framework defaults for any
|
|
16
|
+
* field the operator omitted. Accepts the full resolved config, the bare
|
|
17
|
+
* delivery bag, or the bare ci bag.
|
|
18
|
+
*
|
|
19
|
+
* @param {object | null | undefined} config
|
|
20
|
+
* @returns {typeof CI_DELIVERY_DEFAULTS}
|
|
21
|
+
*/
|
|
22
|
+
export function getCiDelivery(config) {
|
|
23
|
+
const ci = config?.delivery?.ci ?? config?.ci ?? config ?? {};
|
|
24
|
+
return {
|
|
25
|
+
skipForStoryPushes:
|
|
26
|
+
typeof ci.skipForStoryPushes === 'boolean'
|
|
27
|
+
? ci.skipForStoryPushes
|
|
28
|
+
: CI_DELIVERY_DEFAULTS.skipForStoryPushes,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `project.commands` accessor (Epic #1720 Story #1739 — top-level reshape).
|
|
3
|
+
*
|
|
4
|
+
* The surviving five command keys are `lintBaseline`, `test`,
|
|
5
|
+
* `typecheck`, `formatCheck`, `formatWrite`.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export const COMMANDS_DEFAULTS = Object.freeze({
|
|
9
|
+
lintBaseline: 'npx eslint . --format json',
|
|
10
|
+
test: 'npm test',
|
|
11
|
+
typecheck: null,
|
|
12
|
+
formatCheck: 'npx biome format .',
|
|
13
|
+
formatWrite: 'npx biome format --write .',
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Read the grouped `project.commands` block, applying framework defaults
|
|
18
|
+
* for any field the operator omitted. Accepts the full resolved config or
|
|
19
|
+
* a bare `{ project }` bag.
|
|
20
|
+
*
|
|
21
|
+
* @param {object | null | undefined} config
|
|
22
|
+
* @returns {{ lintBaseline: string, test: string, typecheck: string|null, formatCheck: string, formatWrite: string }}
|
|
23
|
+
*/
|
|
24
|
+
export function getCommands(config) {
|
|
25
|
+
const commands = config?.project?.commands ?? {};
|
|
26
|
+
return {
|
|
27
|
+
lintBaseline: commands.lintBaseline ?? COMMANDS_DEFAULTS.lintBaseline,
|
|
28
|
+
test: commands.test ?? COMMANDS_DEFAULTS.test,
|
|
29
|
+
typecheck:
|
|
30
|
+
commands.typecheck === undefined
|
|
31
|
+
? COMMANDS_DEFAULTS.typecheck
|
|
32
|
+
: commands.typecheck,
|
|
33
|
+
formatCheck: commands.formatCheck ?? COMMANDS_DEFAULTS.formatCheck,
|
|
34
|
+
formatWrite: commands.formatWrite ?? COMMANDS_DEFAULTS.formatWrite,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `getAgentrcDefaults()` — single source of `.agentrc.json` defaults.
|
|
3
|
+
*
|
|
4
|
+
* `.agents/docs/agentrc-reference.json` is the authoritative editor-reference
|
|
5
|
+
* inventory of every field the framework supports plus its default
|
|
6
|
+
* value. Runtime accessors under `lib/config/*.js` (`COMMANDS_DEFAULTS`,
|
|
7
|
+
* `BRANCH_PROTECTION_DEFAULTS`, gate defaults, etc.) layer the same
|
|
8
|
+
* values onto whatever the project config carries; a parity test
|
|
9
|
+
* (tests/config/full-agentrc-runtime-parity.test.js) keeps the two in
|
|
10
|
+
* lockstep.
|
|
11
|
+
*
|
|
12
|
+
* Story #1995: the `/agents-update` sync helper consults this module
|
|
13
|
+
* (not the template directly) to decide whether a project value is
|
|
14
|
+
* "just the default" and therefore safe to omit from `.agentrc.json`.
|
|
15
|
+
*
|
|
16
|
+
* Identity placeholders (`[OWNER]`, `[REPO]`, `@[USERNAME]`) carry no
|
|
17
|
+
* meaningful default — the operator must set them. They survive in
|
|
18
|
+
* the returned object so the consumer can see the expected shape, but
|
|
19
|
+
* the sync helper treats them as "no usable default" via
|
|
20
|
+
* `IDENTITY_PLACEHOLDER_PATHS`.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
import fs from 'node:fs';
|
|
24
|
+
import path from 'node:path';
|
|
25
|
+
import { fileURLToPath } from 'node:url';
|
|
26
|
+
|
|
27
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
28
|
+
// .agents/scripts/lib/config/ → .agents/
|
|
29
|
+
const AGENTS_ROOT = path.resolve(__dirname, '../../..');
|
|
30
|
+
export const FULL_AGENTRC_PATH = path.join(
|
|
31
|
+
AGENTS_ROOT,
|
|
32
|
+
'docs',
|
|
33
|
+
'agentrc-reference.json',
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Dotted paths whose template value is a human placeholder
|
|
38
|
+
* (`[OWNER]`, `[REPO]`, `@[USERNAME]`). The sync helper treats these
|
|
39
|
+
* as "no default" — they are never auto-filled, and a project value
|
|
40
|
+
* present at one of these paths is never flagged as redundant.
|
|
41
|
+
*/
|
|
42
|
+
export const IDENTITY_PLACEHOLDER_PATHS = Object.freeze([
|
|
43
|
+
'github.owner',
|
|
44
|
+
'github.repo',
|
|
45
|
+
'github.operatorHandle',
|
|
46
|
+
]);
|
|
47
|
+
|
|
48
|
+
let _cache = null;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Parse `.agents/docs/agentrc-reference.json` and return a deep-frozen snapshot.
|
|
52
|
+
*
|
|
53
|
+
* @param {{ bustCache?: boolean }} [opts]
|
|
54
|
+
* @returns {object}
|
|
55
|
+
*/
|
|
56
|
+
export function getAgentrcDefaults(opts = {}) {
|
|
57
|
+
if (!opts.bustCache && _cache) return _cache;
|
|
58
|
+
const raw = fs.readFileSync(FULL_AGENTRC_PATH, 'utf8');
|
|
59
|
+
const parsed = JSON.parse(raw);
|
|
60
|
+
// Strip the `$schema` pointer — it's editor metadata, not a default.
|
|
61
|
+
delete parsed.$schema;
|
|
62
|
+
_cache = deepFreeze(parsed);
|
|
63
|
+
return _cache;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function deepFreeze(obj) {
|
|
67
|
+
if (obj === null || typeof obj !== 'object') return obj;
|
|
68
|
+
for (const key of Object.keys(obj)) deepFreeze(obj[key]);
|
|
69
|
+
return Object.freeze(obj);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Walk a default object and yield `[dottedPath, value]` for every
|
|
74
|
+
* scalar / array leaf. Objects are descended into, not yielded.
|
|
75
|
+
*
|
|
76
|
+
* @param {object} defaults
|
|
77
|
+
* @returns {Generator<[string, unknown]>}
|
|
78
|
+
*/
|
|
79
|
+
export function* iterDefaultLeaves(defaults, prefix = '') {
|
|
80
|
+
if (defaults === null || typeof defaults !== 'object') return;
|
|
81
|
+
if (Array.isArray(defaults)) {
|
|
82
|
+
if (prefix) yield [prefix, defaults];
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
for (const [key, value] of Object.entries(defaults)) {
|
|
86
|
+
const dotted = prefix ? `${prefix}.${key}` : key;
|
|
87
|
+
if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
|
|
88
|
+
yield* iterDefaultLeaves(value, dotted);
|
|
89
|
+
} else {
|
|
90
|
+
yield [dotted, value];
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Look up a dotted path inside an arbitrary nested object.
|
|
97
|
+
* Returns `{ present: boolean, value: unknown }`.
|
|
98
|
+
*
|
|
99
|
+
* @param {object|null|undefined} obj
|
|
100
|
+
* @param {string} dottedPath
|
|
101
|
+
*/
|
|
102
|
+
export function lookupPath(obj, dottedPath) {
|
|
103
|
+
if (obj == null || typeof obj !== 'object') {
|
|
104
|
+
return { present: false, value: undefined };
|
|
105
|
+
}
|
|
106
|
+
const parts = dottedPath.split('.');
|
|
107
|
+
let cursor = obj;
|
|
108
|
+
for (let i = 0; i < parts.length; i += 1) {
|
|
109
|
+
if (
|
|
110
|
+
cursor === null ||
|
|
111
|
+
typeof cursor !== 'object' ||
|
|
112
|
+
!Object.hasOwn(cursor, parts[i])
|
|
113
|
+
) {
|
|
114
|
+
return { present: false, value: undefined };
|
|
115
|
+
}
|
|
116
|
+
cursor = cursor[parts[i]];
|
|
117
|
+
}
|
|
118
|
+
return { present: true, value: cursor };
|
|
119
|
+
}
|
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config-explain capability (Story #3523, Epic #3438).
|
|
3
|
+
*
|
|
4
|
+
* `explainConfig()` answers the operator question "what does each resolved
|
|
5
|
+
* config key mean, what is its effective value, and where did that value
|
|
6
|
+
* come from?". It pairs with the unified config resolver: the resolver
|
|
7
|
+
* decides the *effective* value, this module attributes that value to a
|
|
8
|
+
* *source* layer and pins a one-line *meaning* to every key.
|
|
9
|
+
*
|
|
10
|
+
* Source attribution is two-valued (Story #3690 removed the named
|
|
11
|
+
* config-profile layer):
|
|
12
|
+
* - `agentrc` — the key is present in the project's resolved `.agentrc.json`
|
|
13
|
+
* (including any `.agentrc.local.json` overlay). The operator
|
|
14
|
+
* set it.
|
|
15
|
+
* - `default` — the project does not carry the key; the framework default
|
|
16
|
+
* from `.agents/docs/agentrc-reference.json` applies.
|
|
17
|
+
*
|
|
18
|
+
* Secret hygiene: no key in the `.agentrc.json` surface is a credential today,
|
|
19
|
+
* but the report is defensive — any key whose dotted path matches a
|
|
20
|
+
* secret-shaped token (`token`, `secret`, `password`, `apiKey`, `credential`,
|
|
21
|
+
* …) has its value redacted to `null` and is flagged `redacted: true`. Only
|
|
22
|
+
* the *source* of a secret is ever reported, never the value.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
import { resolveConfig } from '../config-resolver.js';
|
|
26
|
+
import {
|
|
27
|
+
getAgentrcDefaults,
|
|
28
|
+
iterDefaultLeaves,
|
|
29
|
+
lookupPath,
|
|
30
|
+
} from './defaults.js';
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Dotted-path segment patterns that mark a key as secret-bearing. Matched
|
|
34
|
+
* case-insensitively against any segment of the dotted path. The
|
|
35
|
+
* `.agentrc.json` schema carries none of these today; the guard is forward
|
|
36
|
+
* defence so a future credential-shaped key never leaks its value through
|
|
37
|
+
* `mandrel explain`.
|
|
38
|
+
*
|
|
39
|
+
* @type {readonly RegExp[]}
|
|
40
|
+
*/
|
|
41
|
+
const SECRET_SEGMENT_PATTERNS = Object.freeze([
|
|
42
|
+
/secret/i,
|
|
43
|
+
/password/i,
|
|
44
|
+
/passwd/i,
|
|
45
|
+
/token/i,
|
|
46
|
+
/credential/i,
|
|
47
|
+
/apikey/i,
|
|
48
|
+
/api[-_]?key/i,
|
|
49
|
+
/(^|[^a-z])key$/i,
|
|
50
|
+
/private/i,
|
|
51
|
+
]);
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Curated one-line meanings keyed by dotted config path. Wildcard floor
|
|
55
|
+
* paths (`...floors.*`) are covered by the prefix fallbacks below, so this
|
|
56
|
+
* map pins the operator-facing keys that benefit from a bespoke gloss. Any
|
|
57
|
+
* key without an exact entry falls back to the longest matching prefix gloss,
|
|
58
|
+
* then to a top-level block gloss, so every key always reports a non-empty
|
|
59
|
+
* meaning.
|
|
60
|
+
*
|
|
61
|
+
* @type {Readonly<Record<string, string>>}
|
|
62
|
+
*/
|
|
63
|
+
const KEY_MEANINGS = Object.freeze({
|
|
64
|
+
// project.*
|
|
65
|
+
'project.baseBranch':
|
|
66
|
+
'Default base branch Epics and Stories branch from and merge back into.',
|
|
67
|
+
'project.paths.agentRoot':
|
|
68
|
+
'Directory holding the distributed agent bundle (instructions, skills, scripts).',
|
|
69
|
+
'project.paths.docsRoot':
|
|
70
|
+
'Directory the mandatory docs-context reads resolve against.',
|
|
71
|
+
'project.paths.tempRoot':
|
|
72
|
+
'Root for gitignored scratch output (per-Epic run state, mirrors, logs).',
|
|
73
|
+
'project.docsContextFiles':
|
|
74
|
+
'Authoritative files an agent must read before starting any task.',
|
|
75
|
+
'project.commands.lintBaseline':
|
|
76
|
+
'Lint command the close-validation chain runs.',
|
|
77
|
+
'project.commands.test': 'Test command the close-validation chain runs.',
|
|
78
|
+
'project.commands.typecheck':
|
|
79
|
+
'Typecheck command (null disables the typecheck gate).',
|
|
80
|
+
'project.commands.formatCheck':
|
|
81
|
+
'Format-verify command run without modifying files.',
|
|
82
|
+
'project.commands.formatWrite':
|
|
83
|
+
'Format-write command that applies formatting in place.',
|
|
84
|
+
|
|
85
|
+
// github.*
|
|
86
|
+
'github.owner': 'GitHub owner/org the repo lives under.',
|
|
87
|
+
'github.repo': 'GitHub repository name for ticket and PR operations.',
|
|
88
|
+
'github.projectNumber':
|
|
89
|
+
'GitHub Projects (v2) board number tickets are added to.',
|
|
90
|
+
'github.projectOwner': 'Owner of the GitHub Projects board.',
|
|
91
|
+
'github.operatorHandle':
|
|
92
|
+
'GitHub @handle mentioned when a run needs operator attention.',
|
|
93
|
+
'github.branchProtection.enforce':
|
|
94
|
+
'Whether the framework applies branch-protection rules.',
|
|
95
|
+
'github.branchProtection.requiredChecks':
|
|
96
|
+
'Status checks that must pass before a PR can merge.',
|
|
97
|
+
'github.mergeMethods.allow_squash_merge':
|
|
98
|
+
'Whether squash-merge is permitted on PRs.',
|
|
99
|
+
'github.mergeMethods.allow_rebase_merge':
|
|
100
|
+
'Whether rebase-merge is permitted on PRs.',
|
|
101
|
+
'github.mergeMethods.allow_merge_commit':
|
|
102
|
+
'Whether merge-commit merges are permitted on PRs.',
|
|
103
|
+
'github.mergeMethods.allow_auto_merge':
|
|
104
|
+
'Whether GitHub auto-merge is enabled for the repo.',
|
|
105
|
+
'github.mergeMethods.delete_branch_on_merge':
|
|
106
|
+
'Whether head branches are deleted after merge.',
|
|
107
|
+
'github.notifications.mentionOperator':
|
|
108
|
+
'Whether notifications @-mention the operator handle.',
|
|
109
|
+
'github.notifications.commentEvents':
|
|
110
|
+
'Allowlist of events that post a GitHub comment notification.',
|
|
111
|
+
'github.notifications.webhookEvents':
|
|
112
|
+
'Allowlist of events that fire a webhook notification.',
|
|
113
|
+
|
|
114
|
+
// planning.*
|
|
115
|
+
'planning.maxTickets':
|
|
116
|
+
'Upper bound on tickets a single /epic-plan run may create.',
|
|
117
|
+
'planning.context.maxBytes':
|
|
118
|
+
'Byte budget for the planning-context payload before summary mode kicks in.',
|
|
119
|
+
'planning.context.summaryMode':
|
|
120
|
+
'When the planner switches to a summarized context representation.',
|
|
121
|
+
'planning.codebaseSnapshot.tier':
|
|
122
|
+
'Depth of the structural codebase view threaded into spec authoring.',
|
|
123
|
+
'planning.codebaseSnapshot.include':
|
|
124
|
+
'Glob patterns included in the codebase snapshot.',
|
|
125
|
+
'planning.codebaseSnapshot.exclude':
|
|
126
|
+
'Glob patterns excluded from the codebase snapshot.',
|
|
127
|
+
'planning.codebaseSnapshot.recentCommitWindow':
|
|
128
|
+
'How many recent commits the snapshot summarizes.',
|
|
129
|
+
'planning.riskHeuristics':
|
|
130
|
+
'Phrases that flag a Story as high-risk for HITL escalation.',
|
|
131
|
+
'planning.taskSizing.maxAcceptance':
|
|
132
|
+
'Hard ceiling on acceptance criteria per Story.',
|
|
133
|
+
'planning.taskSizing.softAcceptanceCount':
|
|
134
|
+
'Acceptance-criteria count above which a Story is flagged as large.',
|
|
135
|
+
'planning.taskSizing.softFiles':
|
|
136
|
+
'Touched-file count above which a Story is flagged as large.',
|
|
137
|
+
'planning.taskSizing.hardFiles':
|
|
138
|
+
'Touched-file count above which a Story is rejected unless it declares `wide` with a reason.',
|
|
139
|
+
'planning.failOnSharedEditors':
|
|
140
|
+
'Whether shared-editor conflict findings are promoted to hard errors.',
|
|
141
|
+
'planning.requireExplicitCrossStoryDeps':
|
|
142
|
+
'Whether implicit cross-Story dependencies are promoted to hard errors.',
|
|
143
|
+
|
|
144
|
+
// delivery.*
|
|
145
|
+
'delivery.execution.timeoutMs':
|
|
146
|
+
'Per-execution timeout for orchestrated delivery steps.',
|
|
147
|
+
'delivery.maxTokenBudget':
|
|
148
|
+
'Cap on the hydrated task-prompt size handed to an agent.',
|
|
149
|
+
'delivery.lease.ttlMs':
|
|
150
|
+
'Time-to-live for the Epic lease before a stale claim is reclaimable.',
|
|
151
|
+
'delivery.ci.skipForStoryPushes':
|
|
152
|
+
'Whether Story-branch pushes carry a [skip ci] trailer.',
|
|
153
|
+
'delivery.preflight.maxStories':
|
|
154
|
+
'Pre-dispatch ceiling on estimated Story count (no cap when unset).',
|
|
155
|
+
'delivery.preflight.maxWaves':
|
|
156
|
+
'Pre-dispatch ceiling on estimated wave count.',
|
|
157
|
+
'delivery.preflight.maxInstallCostSeconds':
|
|
158
|
+
'Pre-dispatch ceiling on estimated dependency-install seconds.',
|
|
159
|
+
'delivery.preflight.maxGithubApiRequests':
|
|
160
|
+
'Pre-dispatch ceiling on estimated GitHub API request volume.',
|
|
161
|
+
'delivery.preflight.maxClaudeQuotaTokens':
|
|
162
|
+
'Pre-dispatch ceiling on estimated Claude quota-token burn.',
|
|
163
|
+
'delivery.docsFreshness.paths':
|
|
164
|
+
'Docs whose freshness is checked at delivery time.',
|
|
165
|
+
'delivery.deliverRunner.concurrencyCap':
|
|
166
|
+
'Maximum Stories dispatched in parallel within one wave. Default 3 — conservative by design to keep host-quota consumption predictable. Operators running wide-wave Epics with adequate parallel-agent quota should raise this to reduce wall-clock time proportionally.',
|
|
167
|
+
'delivery.deliverRunner.progressReportIntervalSec':
|
|
168
|
+
'Cadence for delivery progress reporting.',
|
|
169
|
+
'delivery.deliverRunner.verifyConcurrencyCap':
|
|
170
|
+
'Maximum verify steps run in parallel.',
|
|
171
|
+
'delivery.worktreeIsolation.enabled':
|
|
172
|
+
'Whether each Story runs in its own git worktree.',
|
|
173
|
+
'delivery.worktreeIsolation.root':
|
|
174
|
+
'Directory under which per-Story worktrees are created.',
|
|
175
|
+
'delivery.worktreeIsolation.nodeModulesStrategy':
|
|
176
|
+
'How node_modules is provisioned per worktree.',
|
|
177
|
+
'delivery.worktreeIsolation.primeFromPath':
|
|
178
|
+
'Source path a worktree primes its node_modules from.',
|
|
179
|
+
'delivery.worktreeIsolation.allowSymlinkOnWindows':
|
|
180
|
+
'Whether symlink node_modules strategy is allowed on Windows.',
|
|
181
|
+
'delivery.worktreeIsolation.reapOnSuccess':
|
|
182
|
+
'Whether a worktree is removed after a Story closes cleanly.',
|
|
183
|
+
'delivery.worktreeIsolation.reapOnCancel':
|
|
184
|
+
'Whether a worktree is removed after a cancelled run.',
|
|
185
|
+
'delivery.worktreeIsolation.bootstrapFiles':
|
|
186
|
+
'Files copied into each new worktree (e.g. .env, .mcp.json).',
|
|
187
|
+
'delivery.codeReview.providers':
|
|
188
|
+
'Ordered provider chain the code-review phase consults.',
|
|
189
|
+
'delivery.codeReview.maxFixAttempts':
|
|
190
|
+
'Maximum auto-fix attempts the code-review phase makes.',
|
|
191
|
+
'delivery.codeReview.maxFixScopeFiles':
|
|
192
|
+
'Maximum files an auto-fix may touch in one attempt.',
|
|
193
|
+
'delivery.refactorStage.enabled':
|
|
194
|
+
'Whether a dedicated refactor stage runs during delivery.',
|
|
195
|
+
'delivery.acceptanceEval.maxRounds':
|
|
196
|
+
'Redraft rounds the per-Story acceptance self-eval loop runs before escalating to agent::blocked (default 2; clamped to a hard ceiling that cannot be disabled).',
|
|
197
|
+
|
|
198
|
+
// qa.*
|
|
199
|
+
'qa.featureRoot': 'Root directory holding the QA harness .feature files.',
|
|
200
|
+
'qa.fixturesManifest': 'Path to the QA fixtures manifest.',
|
|
201
|
+
'qa.consoleAllowlist': 'Console-message patterns the QA harness tolerates.',
|
|
202
|
+
'qa.designTokens': 'Path to the design-token source the QA harness checks.',
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Prefix-keyed fallback glosses. Used when a key has no exact entry in
|
|
207
|
+
* `KEY_MEANINGS` (notably wildcard floor paths and per-gate sub-keys). The
|
|
208
|
+
* longest matching prefix wins.
|
|
209
|
+
*
|
|
210
|
+
* @type {ReadonlyArray<[string, string]>}
|
|
211
|
+
*/
|
|
212
|
+
const PREFIX_MEANINGS = Object.freeze([
|
|
213
|
+
[
|
|
214
|
+
'delivery.quality.gates',
|
|
215
|
+
'Quality-gate threshold/configuration for the delivery close gate.',
|
|
216
|
+
],
|
|
217
|
+
[
|
|
218
|
+
'delivery.quality.codingGuardrails',
|
|
219
|
+
'Per-commit coding-guardrail threshold.',
|
|
220
|
+
],
|
|
221
|
+
[
|
|
222
|
+
'delivery.quality.autoRefresh',
|
|
223
|
+
'Auto-refresh policy for ratcheted baselines.',
|
|
224
|
+
],
|
|
225
|
+
[
|
|
226
|
+
'delivery.quality.baselineEpsilon',
|
|
227
|
+
'Tolerance epsilon applied when comparing a quality baseline.',
|
|
228
|
+
],
|
|
229
|
+
['delivery.quality', 'Delivery-time quality configuration.'],
|
|
230
|
+
['delivery.signals', 'Threshold for a delivery friction/telemetry signal.'],
|
|
231
|
+
['delivery.lifecycle.timeouts', 'Timeout for a lifecycle-bus phase.'],
|
|
232
|
+
['delivery.lifecycle', 'Lifecycle-bus configuration.'],
|
|
233
|
+
[
|
|
234
|
+
'planning.taskSizing',
|
|
235
|
+
'Story-sizing threshold for the decompose validator.',
|
|
236
|
+
],
|
|
237
|
+
['qa.signInSeam', 'QA harness sign-in seam configuration.'],
|
|
238
|
+
['qa.personas', 'QA harness persona / credential mapping.'],
|
|
239
|
+
]);
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Block-level fallback glosses by top-level prefix. Guarantees every key gets
|
|
243
|
+
* a non-empty meaning even if neither the exact map nor a prefix gloss matches.
|
|
244
|
+
*
|
|
245
|
+
* @type {Readonly<Record<string, string>>}
|
|
246
|
+
*/
|
|
247
|
+
const BLOCK_MEANINGS = Object.freeze({
|
|
248
|
+
project: 'Project identity, paths, and command configuration.',
|
|
249
|
+
github: 'GitHub provider identity and merge/notification policy.',
|
|
250
|
+
planning: 'Inputs and guardrails for /epic-plan.',
|
|
251
|
+
delivery:
|
|
252
|
+
'Execution, isolation, quality, and lifecycle settings for delivery.',
|
|
253
|
+
qa: 'Agent-driven QA harness contract.',
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Is `dottedPath` a secret-bearing key whose value must be redacted?
|
|
258
|
+
*
|
|
259
|
+
* @param {string} dottedPath
|
|
260
|
+
* @returns {boolean}
|
|
261
|
+
*/
|
|
262
|
+
export function isSecretKey(dottedPath) {
|
|
263
|
+
return dottedPath
|
|
264
|
+
.split('.')
|
|
265
|
+
.some((segment) =>
|
|
266
|
+
SECRET_SEGMENT_PATTERNS.some((pattern) => pattern.test(segment)),
|
|
267
|
+
);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Resolve the one-line meaning for a dotted config key.
|
|
272
|
+
*
|
|
273
|
+
* @param {string} dottedPath
|
|
274
|
+
* @returns {string}
|
|
275
|
+
*/
|
|
276
|
+
export function meaningFor(dottedPath) {
|
|
277
|
+
if (Object.hasOwn(KEY_MEANINGS, dottedPath)) {
|
|
278
|
+
return KEY_MEANINGS[dottedPath];
|
|
279
|
+
}
|
|
280
|
+
// Longest matching prefix wins.
|
|
281
|
+
let best = null;
|
|
282
|
+
for (const [prefix, gloss] of PREFIX_MEANINGS) {
|
|
283
|
+
if (
|
|
284
|
+
(dottedPath === prefix || dottedPath.startsWith(`${prefix}.`)) &&
|
|
285
|
+
(best === null || prefix.length > best[0].length)
|
|
286
|
+
) {
|
|
287
|
+
best = [prefix, gloss];
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
if (best) return best[1];
|
|
291
|
+
|
|
292
|
+
const block = dottedPath.split('.')[0];
|
|
293
|
+
return BLOCK_MEANINGS[block] ?? 'Configuration key.';
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Attribute a key's effective value to a source layer and capture the value
|
|
298
|
+
* the resolver actually applies.
|
|
299
|
+
*
|
|
300
|
+
* @param {string} dottedPath
|
|
301
|
+
* @param {object|null} rawAgentrc The resolver's `raw` (merged agentrc+local), or null.
|
|
302
|
+
* @param {unknown} defaultValue The framework default for this key.
|
|
303
|
+
* @returns {{ source: 'agentrc'|'default', value: unknown }}
|
|
304
|
+
*/
|
|
305
|
+
function attribute(dottedPath, rawAgentrc, defaultValue) {
|
|
306
|
+
const inAgentrc = lookupPath(rawAgentrc, dottedPath);
|
|
307
|
+
if (inAgentrc.present) {
|
|
308
|
+
return { source: 'agentrc', value: inAgentrc.value };
|
|
309
|
+
}
|
|
310
|
+
return { source: 'default', value: defaultValue };
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
/**
|
|
314
|
+
* Build the config-explain report: one entry per known config key, each
|
|
315
|
+
* carrying its effective value, source layer, and one-line meaning.
|
|
316
|
+
*
|
|
317
|
+
* @param {{ cwd?: string }} [opts]
|
|
318
|
+
* - `cwd`: project root whose `.agentrc.json` is resolved (default: the
|
|
319
|
+
* framework root via `resolveConfig`).
|
|
320
|
+
* @returns {Array<{
|
|
321
|
+
* key: string,
|
|
322
|
+
* value: unknown,
|
|
323
|
+
* source: 'agentrc'|'default',
|
|
324
|
+
* meaning: string,
|
|
325
|
+
* redacted: boolean,
|
|
326
|
+
* }>}
|
|
327
|
+
*/
|
|
328
|
+
export function explainConfig(opts = {}) {
|
|
329
|
+
const { cwd } = opts;
|
|
330
|
+
|
|
331
|
+
const resolved = resolveConfig(cwd ? { cwd } : undefined);
|
|
332
|
+
const rawAgentrc = resolved.raw ?? null;
|
|
333
|
+
const defaults = getAgentrcDefaults();
|
|
334
|
+
|
|
335
|
+
const report = [];
|
|
336
|
+
for (const [key, defaultValue] of iterDefaultLeaves(defaults)) {
|
|
337
|
+
const { source, value } = attribute(key, rawAgentrc, defaultValue);
|
|
338
|
+
const redacted = isSecretKey(key);
|
|
339
|
+
report.push({
|
|
340
|
+
key,
|
|
341
|
+
value: redacted ? null : value,
|
|
342
|
+
source,
|
|
343
|
+
meaning: meaningFor(key),
|
|
344
|
+
redacted,
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
return report;
|
|
348
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/* node:coverage ignore file -- AJV schema declaration (data-as-code) */
|
|
2
|
+
|
|
3
|
+
import { GATE_BASE } from './shared.js';
|
|
4
|
+
|
|
5
|
+
const BUNDLE_DECLARATION = {
|
|
6
|
+
type: 'object',
|
|
7
|
+
required: ['name', 'path', 'limit'],
|
|
8
|
+
properties: {
|
|
9
|
+
name: { type: 'string', minLength: 1 },
|
|
10
|
+
path: { type: 'string', minLength: 1 },
|
|
11
|
+
limit: { type: 'string', minLength: 1 },
|
|
12
|
+
},
|
|
13
|
+
additionalProperties: false,
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export const BUNDLE_SIZE_GATE = {
|
|
17
|
+
type: 'object',
|
|
18
|
+
properties: {
|
|
19
|
+
...GATE_BASE,
|
|
20
|
+
bundles: { type: 'array', items: BUNDLE_DECLARATION },
|
|
21
|
+
},
|
|
22
|
+
additionalProperties: false,
|
|
23
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/* node:coverage ignore file -- AJV schema declaration (data-as-code) */
|
|
2
|
+
|
|
3
|
+
import { GATE_BASE, SAFE_STRING } from './shared.js';
|
|
4
|
+
|
|
5
|
+
export const COVERAGE_GATE = {
|
|
6
|
+
type: 'object',
|
|
7
|
+
properties: {
|
|
8
|
+
...GATE_BASE,
|
|
9
|
+
coveragePath: { ...SAFE_STRING, minLength: 1 },
|
|
10
|
+
// Story #2136 / Task #2142 — bounded timeout for `npm run test:coverage`.
|
|
11
|
+
// Wired into `runCapture` via `spawnSync({ timeout, killSignal })`. A
|
|
12
|
+
// SIGKILL fired by the timeout is translated to exit code 124 (the GNU
|
|
13
|
+
// `timeout` convention) so close-validation can branch on "hang" vs.
|
|
14
|
+
// "test failed". Default 600000 (10 min) resolved in `config/quality.js`.
|
|
15
|
+
timeoutMs: { type: 'integer', minimum: 1 },
|
|
16
|
+
},
|
|
17
|
+
additionalProperties: false,
|
|
18
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/* node:coverage ignore file -- AJV schema declaration (data-as-code) */
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
GATE_BASE,
|
|
5
|
+
LIST_OR_EXTENDER_OF_STRINGS,
|
|
6
|
+
SAFE_STRING,
|
|
7
|
+
} from './shared.js';
|
|
8
|
+
|
|
9
|
+
export const CRAP_GATE = {
|
|
10
|
+
type: 'object',
|
|
11
|
+
properties: {
|
|
12
|
+
...GATE_BASE,
|
|
13
|
+
targetDirs: LIST_OR_EXTENDER_OF_STRINGS,
|
|
14
|
+
newMethodCeiling: { type: 'integer', minimum: 1 },
|
|
15
|
+
requireCoverage: { type: 'boolean' },
|
|
16
|
+
friction: {
|
|
17
|
+
type: 'object',
|
|
18
|
+
properties: { markerKey: { type: 'string', minLength: 1 } },
|
|
19
|
+
additionalProperties: false,
|
|
20
|
+
},
|
|
21
|
+
refreshTag: { ...SAFE_STRING, minLength: 1 },
|
|
22
|
+
// Story #2165 — bounded timeout for `npm run crap:update` spawned by the
|
|
23
|
+
// baseline-attribution refresh path. Mirrors `coverage.timeoutMs` (Story
|
|
24
|
+
// #2142): a SIGKILL fired at the budget boundary maps to exit code 124
|
|
25
|
+
// so the close orchestrator can flip the Story to `agent::blocked`.
|
|
26
|
+
refreshTimeoutMs: { type: 'integer', minimum: 1 },
|
|
27
|
+
// Story #3217 — glob patterns matched against canonicalised repo-relative
|
|
28
|
+
// paths to exclude files from CRAP discovery before scoring. Orthogonal
|
|
29
|
+
// to `components` (grouping). Absent/empty preserves existing behaviour.
|
|
30
|
+
ignoreGlobs: { type: 'array', items: { type: 'string', minLength: 1 } },
|
|
31
|
+
},
|
|
32
|
+
additionalProperties: false,
|
|
33
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/* node:coverage ignore file -- AJV schema declaration (data-as-code) */
|
|
2
|
+
|
|
3
|
+
import { GATE_BASE, LIST_OR_EXTENDER_OF_STRINGS } from './shared.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* `delivery.quality.gates.duplication` — code-duplication (DRY) gate
|
|
7
|
+
* (Story #3664). Shares the four-field `GATE_BASE` (enabled, baselinePath,
|
|
8
|
+
* tolerance, floors, components) and adds the scan-scope extras: the
|
|
9
|
+
* `targetDirs` the duplication scanner walks, a bounded refresh timeout
|
|
10
|
+
* mirroring crap/MI, and `ignoreGlobs` to exclude files from the scan.
|
|
11
|
+
*/
|
|
12
|
+
export const DUPLICATION_GATE = {
|
|
13
|
+
type: 'object',
|
|
14
|
+
properties: {
|
|
15
|
+
...GATE_BASE,
|
|
16
|
+
targetDirs: LIST_OR_EXTENDER_OF_STRINGS,
|
|
17
|
+
// Bounded timeout (ms) for the `npm run duplication:update` scanner spawn.
|
|
18
|
+
// Mirrors `crap.refreshTimeoutMs` / `maintainability.refreshTimeoutMs`.
|
|
19
|
+
refreshTimeoutMs: { type: 'integer', minimum: 1 },
|
|
20
|
+
// Glob patterns matched against canonicalised repo-relative paths to
|
|
21
|
+
// exclude files from duplication discovery before scoring. Orthogonal to
|
|
22
|
+
// `components` (grouping). Absent/empty preserves existing behaviour.
|
|
23
|
+
ignoreGlobs: { type: 'array', items: { type: 'string', minLength: 1 } },
|
|
24
|
+
},
|
|
25
|
+
additionalProperties: false,
|
|
26
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/* node:coverage ignore file -- AJV schema declaration (data-as-code); thin aggregator over per-gate sub-schemas */
|
|
2
|
+
|
|
3
|
+
import { BUNDLE_SIZE_GATE } from './bundle-size.schema.js';
|
|
4
|
+
import { COVERAGE_GATE } from './coverage.schema.js';
|
|
5
|
+
import { CRAP_GATE } from './crap.schema.js';
|
|
6
|
+
import { DUPLICATION_GATE } from './duplication.schema.js';
|
|
7
|
+
import { LIGHTHOUSE_GATE } from './lighthouse.schema.js';
|
|
8
|
+
import { LINT_GATE } from './lint.schema.js';
|
|
9
|
+
import { MAINTAINABILITY_GATE } from './maintainability.schema.js';
|
|
10
|
+
import { MUTATION_GATE } from './mutation.schema.js';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Composite `delivery.quality.gates` schema — closed shape.
|
|
14
|
+
*
|
|
15
|
+
* Split from the former `lib/config-gates-schema.js` aggregate
|
|
16
|
+
* (Story #2987) into per-gate sub-schema files under
|
|
17
|
+
* `lib/config/gates/`. Shared fragments (`GATE_BASE`, `SAFE_STRING`,
|
|
18
|
+
* `TOLERANCE_SCHEMA`, `FLOORS_SCHEMA`, `COMPONENTS_SCHEMA`,
|
|
19
|
+
* `LIST_OR_EXTENDER_OF_STRINGS`, `NULLABLE_NONEMPTY_SAFE_STRING`) live
|
|
20
|
+
* in `./shared.js`. Each per-gate file exports one sub-schema literal
|
|
21
|
+
* with the gate-specific extras layered on top of `GATE_BASE`.
|
|
22
|
+
*/
|
|
23
|
+
export const GATES_SCHEMA = {
|
|
24
|
+
type: 'object',
|
|
25
|
+
properties: {
|
|
26
|
+
lint: LINT_GATE,
|
|
27
|
+
coverage: COVERAGE_GATE,
|
|
28
|
+
crap: CRAP_GATE,
|
|
29
|
+
maintainability: MAINTAINABILITY_GATE,
|
|
30
|
+
mutation: MUTATION_GATE,
|
|
31
|
+
lighthouse: LIGHTHOUSE_GATE,
|
|
32
|
+
'bundle-size': BUNDLE_SIZE_GATE,
|
|
33
|
+
duplication: DUPLICATION_GATE,
|
|
34
|
+
},
|
|
35
|
+
additionalProperties: false,
|
|
36
|
+
};
|