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,272 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* bootstrap/manifest — single mutation-manifest source for the
|
|
3
|
+
* consent-first phased install (Story #3521, Feature #3515, Epic #3438).
|
|
4
|
+
*
|
|
5
|
+
* `buildMutationManifest(ctx)` enumerates every mutation the bootstrap
|
|
6
|
+
* pipeline can perform as a flat, declarative array. Each entry carries the
|
|
7
|
+
* five fields the consent-first install screen needs to preview a change
|
|
8
|
+
* before any write lands:
|
|
9
|
+
*
|
|
10
|
+
* - `phaseGroup` — one of the four independently-approvable groups
|
|
11
|
+
* (`ide-wiring`, `repo-config`, `github-admin`, `quality-gates`).
|
|
12
|
+
* - `target` — the file path or remote resource the mutation touches.
|
|
13
|
+
* - `action` — the verb describing the mutation (`create`, `merge`,
|
|
14
|
+
* `update`, `run`, `configure`).
|
|
15
|
+
* - `detail` — a one-line operator-facing description of the change.
|
|
16
|
+
* - `reversible` — whether the operator can trivially undo the change
|
|
17
|
+
* (e.g. delete a created file) vs. a remote-admin mutation that is not
|
|
18
|
+
* a simple local revert.
|
|
19
|
+
*
|
|
20
|
+
* The manifest is the SINGLE source of truth: `applyProjectBootstrap`'s
|
|
21
|
+
* no-write preview is derived from `buildMutationManifest` so the preview
|
|
22
|
+
* the operator approves and the execution that follows enumerate the exact
|
|
23
|
+
* same set of mutations. There is no second, drift-prone list.
|
|
24
|
+
*
|
|
25
|
+
* The manifest describes *intended* mutations deterministically from the
|
|
26
|
+
* project root; it does not read or mutate any file. Whether a given
|
|
27
|
+
* mutation is a no-op on a particular clone (the file already carries the
|
|
28
|
+
* wiring) is decided at execution time by the idempotent `ensure*` steps —
|
|
29
|
+
* the manifest always lists the full surface so the preview is complete.
|
|
30
|
+
*
|
|
31
|
+
* @module bootstrap/manifest
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
import path from 'node:path';
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* The four independently-approvable phase groups. The consent-first install
|
|
38
|
+
* flow gates each group behind its own opt-in, so every manifest entry MUST
|
|
39
|
+
* carry exactly one of these values.
|
|
40
|
+
*
|
|
41
|
+
* @type {Readonly<{ IDE_WIRING: 'ide-wiring', REPO_CONFIG: 'repo-config',
|
|
42
|
+
* GITHUB_ADMIN: 'github-admin', QUALITY_GATES: 'quality-gates' }>}
|
|
43
|
+
*/
|
|
44
|
+
export const PHASE_GROUPS = Object.freeze({
|
|
45
|
+
IDE_WIRING: 'ide-wiring',
|
|
46
|
+
REPO_CONFIG: 'repo-config',
|
|
47
|
+
GITHUB_ADMIN: 'github-admin',
|
|
48
|
+
QUALITY_GATES: 'quality-gates',
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Frozen set of valid `phaseGroup` values, for validation and the
|
|
53
|
+
* acceptance check. Derived from `PHASE_GROUPS` so the two never drift.
|
|
54
|
+
*
|
|
55
|
+
* @type {ReadonlySet<string>}
|
|
56
|
+
*/
|
|
57
|
+
export const PHASE_GROUP_VALUES = Object.freeze(
|
|
58
|
+
new Set(Object.values(PHASE_GROUPS)),
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* The five required fields on every manifest entry. Exported so tests and
|
|
63
|
+
* downstream renderers can assert entry shape without re-declaring the list.
|
|
64
|
+
*
|
|
65
|
+
* @type {readonly string[]}
|
|
66
|
+
*/
|
|
67
|
+
export const MANIFEST_ENTRY_FIELDS = Object.freeze([
|
|
68
|
+
'phaseGroup',
|
|
69
|
+
'target',
|
|
70
|
+
'action',
|
|
71
|
+
'detail',
|
|
72
|
+
'reversible',
|
|
73
|
+
]);
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* @typedef {object} MutationManifestEntry
|
|
77
|
+
* @property {'ide-wiring'|'repo-config'|'github-admin'|'quality-gates'} phaseGroup
|
|
78
|
+
* — the independently-approvable group this mutation belongs to.
|
|
79
|
+
* @property {string} target — file path (relative to project root) or a
|
|
80
|
+
* remote-resource identifier the mutation touches.
|
|
81
|
+
* @property {string} action — verb describing the mutation.
|
|
82
|
+
* @property {string} detail — one-line operator-facing description.
|
|
83
|
+
* @property {boolean} reversible — true when the operator can trivially
|
|
84
|
+
* undo the change locally; false for remote-admin mutations.
|
|
85
|
+
*/
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Build the consent-first mutation manifest for a project root.
|
|
89
|
+
*
|
|
90
|
+
* Returns a flat array of {@link MutationManifestEntry} objects covering
|
|
91
|
+
* every mutation the bootstrap pipeline performs, partitioned across the
|
|
92
|
+
* four {@link PHASE_GROUPS}. File targets are project-root-relative
|
|
93
|
+
* forward-slash POSIX paths so the preview renders identically on every
|
|
94
|
+
* platform; remote targets are scoped to the resolved `owner/repo` slug.
|
|
95
|
+
*
|
|
96
|
+
* The `github-admin` group is omitted when `ctx.skipGithub` is set, and the
|
|
97
|
+
* `quality-gates` group is omitted when `ctx.skipQuality` is set, so the
|
|
98
|
+
* preview reflects the same flags the executing pipeline honours.
|
|
99
|
+
*
|
|
100
|
+
* @param {object} [ctx]
|
|
101
|
+
* @param {{ owner?: string, repo?: string }} [ctx.answers] — scopes the
|
|
102
|
+
* `github-admin` targets to the `owner/repo` slug.
|
|
103
|
+
* @param {boolean} [ctx.skipGithub] — omit the `github-admin` group.
|
|
104
|
+
* @param {boolean} [ctx.skipQuality] — omit the `quality-gates` group.
|
|
105
|
+
* @returns {MutationManifestEntry[]}
|
|
106
|
+
*/
|
|
107
|
+
export function buildMutationManifest(ctx = {}) {
|
|
108
|
+
const rel = (...parts) => path.posix.join(...parts);
|
|
109
|
+
|
|
110
|
+
const entries = [];
|
|
111
|
+
|
|
112
|
+
// --- ide-wiring -------------------------------------------------------
|
|
113
|
+
// Claude Code / IDE integration: the system-prompt import, the
|
|
114
|
+
// UserPromptSubmit sync hook, the generated flat command surface, and the
|
|
115
|
+
// .gitignore entry that keeps the generated tree out of git.
|
|
116
|
+
entries.push(
|
|
117
|
+
{
|
|
118
|
+
phaseGroup: PHASE_GROUPS.IDE_WIRING,
|
|
119
|
+
target: rel('CLAUDE.md'),
|
|
120
|
+
action: 'merge',
|
|
121
|
+
detail:
|
|
122
|
+
'Wire the @.agents/instructions.md system-prompt import so Claude Code hydrates the framework on cold start.',
|
|
123
|
+
reversible: true,
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
phaseGroup: PHASE_GROUPS.IDE_WIRING,
|
|
127
|
+
target: rel('.claude', 'settings.json'),
|
|
128
|
+
action: 'merge',
|
|
129
|
+
detail:
|
|
130
|
+
'Add the UserPromptSubmit re-sync hook so the /<command> tree stays current.',
|
|
131
|
+
reversible: true,
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
phaseGroup: PHASE_GROUPS.IDE_WIRING,
|
|
135
|
+
target: rel('.claude', 'commands'),
|
|
136
|
+
action: 'run',
|
|
137
|
+
detail:
|
|
138
|
+
'Generate the flat command surface (/<name>) from .agents/workflows/.',
|
|
139
|
+
reversible: true,
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
phaseGroup: PHASE_GROUPS.IDE_WIRING,
|
|
143
|
+
target: rel('.gitignore'),
|
|
144
|
+
action: 'merge',
|
|
145
|
+
detail:
|
|
146
|
+
'Ignore .claude/commands/ (generated), .mcp.json + .env (carry secrets), and the per-clone install ledger.',
|
|
147
|
+
reversible: true,
|
|
148
|
+
},
|
|
149
|
+
);
|
|
150
|
+
|
|
151
|
+
// --- repo-config ------------------------------------------------------
|
|
152
|
+
// Local repository configuration files the bootstrap seeds or extends.
|
|
153
|
+
entries.push(
|
|
154
|
+
{
|
|
155
|
+
phaseGroup: PHASE_GROUPS.REPO_CONFIG,
|
|
156
|
+
target: rel('package.json'),
|
|
157
|
+
action: 'merge',
|
|
158
|
+
detail:
|
|
159
|
+
'Seed/merge the sync:commands, prepare, and bootstrap npm scripts.',
|
|
160
|
+
reversible: true,
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
phaseGroup: PHASE_GROUPS.REPO_CONFIG,
|
|
164
|
+
target: rel('.agentrc.json'),
|
|
165
|
+
action: 'create',
|
|
166
|
+
detail:
|
|
167
|
+
'Seed .agentrc.json from the bundled starter with the operator-supplied owner/repo/handle/base-branch.',
|
|
168
|
+
reversible: true,
|
|
169
|
+
},
|
|
170
|
+
);
|
|
171
|
+
|
|
172
|
+
// --- quality-gates ----------------------------------------------------
|
|
173
|
+
// Stabilized quality-gate surface (husky pre-commit, quality npm
|
|
174
|
+
// scripts, .agentrc quality defaults).
|
|
175
|
+
if (!ctx.skipQuality) {
|
|
176
|
+
entries.push(
|
|
177
|
+
{
|
|
178
|
+
phaseGroup: PHASE_GROUPS.QUALITY_GATES,
|
|
179
|
+
target: rel('.husky', 'pre-commit'),
|
|
180
|
+
action: 'configure',
|
|
181
|
+
detail:
|
|
182
|
+
'Install the quality:preview pre-commit hook that blocks MI/CRAP drift at commit time.',
|
|
183
|
+
reversible: true,
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
phaseGroup: PHASE_GROUPS.QUALITY_GATES,
|
|
187
|
+
target: rel('package.json'),
|
|
188
|
+
action: 'merge',
|
|
189
|
+
detail: 'Add the quality:preview and quality:watch npm scripts.',
|
|
190
|
+
reversible: true,
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
phaseGroup: PHASE_GROUPS.QUALITY_GATES,
|
|
194
|
+
target: rel('.agentrc.json'),
|
|
195
|
+
action: 'merge',
|
|
196
|
+
detail:
|
|
197
|
+
'Seed delivery.quality coding-guardrails and auto-refresh defaults.',
|
|
198
|
+
reversible: true,
|
|
199
|
+
},
|
|
200
|
+
);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// --- github-admin -----------------------------------------------------
|
|
204
|
+
// Remote GitHub configuration. These are NOT trivially reversible local
|
|
205
|
+
// edits — they mutate remote repo/org admin state.
|
|
206
|
+
if (!ctx.skipGithub) {
|
|
207
|
+
const repoSlug =
|
|
208
|
+
ctx.answers?.owner && ctx.answers?.repo
|
|
209
|
+
? `${ctx.answers.owner}/${ctx.answers.repo}`
|
|
210
|
+
: 'the GitHub repository';
|
|
211
|
+
entries.push(
|
|
212
|
+
{
|
|
213
|
+
phaseGroup: PHASE_GROUPS.GITHUB_ADMIN,
|
|
214
|
+
target: `${repoSlug} labels`,
|
|
215
|
+
action: 'create',
|
|
216
|
+
detail:
|
|
217
|
+
'Create the framework ticket-lifecycle labels (type::*, agent::*, meta::*, …).',
|
|
218
|
+
reversible: false,
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
phaseGroup: PHASE_GROUPS.GITHUB_ADMIN,
|
|
222
|
+
target: `${repoSlug} Projects V2`,
|
|
223
|
+
action: 'configure',
|
|
224
|
+
detail:
|
|
225
|
+
'Create/adopt the Projects V2 board, status field, and saved views.',
|
|
226
|
+
reversible: false,
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
phaseGroup: PHASE_GROUPS.GITHUB_ADMIN,
|
|
230
|
+
target: `${repoSlug} branch protection`,
|
|
231
|
+
action: 'configure',
|
|
232
|
+
detail:
|
|
233
|
+
'Apply the required-status-check branch-protection rule to the base branch.',
|
|
234
|
+
reversible: false,
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
phaseGroup: PHASE_GROUPS.GITHUB_ADMIN,
|
|
238
|
+
target: `${repoSlug} merge methods`,
|
|
239
|
+
action: 'configure',
|
|
240
|
+
detail:
|
|
241
|
+
'Set the allowed pull-request merge methods to the framework stance.',
|
|
242
|
+
reversible: false,
|
|
243
|
+
},
|
|
244
|
+
);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
return entries;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Render the manifest as a no-write preview report grouped by phase group.
|
|
252
|
+
* Pure helper — derives entirely from {@link buildMutationManifest}, so the
|
|
253
|
+
* preview and the executing pipeline enumerate one identical source.
|
|
254
|
+
*
|
|
255
|
+
* The returned shape is `{ preview: true, groups: { <phaseGroup>: entry[] },
|
|
256
|
+
* entries: entry[] }`: callers that want the flat list read `entries`, and
|
|
257
|
+
* the consent-first screen reads `groups` to render one approvable section
|
|
258
|
+
* per phase group (only groups with at least one entry appear).
|
|
259
|
+
*
|
|
260
|
+
* @param {object} [ctx] — same context as {@link buildMutationManifest}.
|
|
261
|
+
* @returns {{ preview: true, groups: Record<string, MutationManifestEntry[]>,
|
|
262
|
+
* entries: MutationManifestEntry[] }}
|
|
263
|
+
*/
|
|
264
|
+
export function previewMutationManifest(ctx = {}) {
|
|
265
|
+
const entries = buildMutationManifest(ctx);
|
|
266
|
+
const groups = {};
|
|
267
|
+
for (const entry of entries) {
|
|
268
|
+
if (!groups[entry.phaseGroup]) groups[entry.phaseGroup] = [];
|
|
269
|
+
groups[entry.phaseGroup].push(entry);
|
|
270
|
+
}
|
|
271
|
+
return { preview: true, groups, entries };
|
|
272
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* bootstrap/merge-methods — Epic #1235 Story 5
|
|
3
|
+
*
|
|
4
|
+
* Promotes the framework's hands-off-pipeline merge stance to the
|
|
5
|
+
* consumer repo:
|
|
6
|
+
* - allow_squash_merge: true — single commit per PR; clean history.
|
|
7
|
+
* - allow_rebase_merge: false — no rebase-merge (status checks would
|
|
8
|
+
* need to be re-run per commit).
|
|
9
|
+
* - allow_merge_commit: false — no merge commits cluttering the
|
|
10
|
+
* default branch.
|
|
11
|
+
* - allow_auto_merge: true — required for the auto-merge label
|
|
12
|
+
* feature Story 1 delivered.
|
|
13
|
+
* - delete_branch_on_merge: true — head branches are throwaway.
|
|
14
|
+
*
|
|
15
|
+
* Behaviour rules
|
|
16
|
+
* ---------------
|
|
17
|
+
* No drift (live settings already match the target): no-op, returns
|
|
18
|
+
* `{ status: 'unchanged' }`.
|
|
19
|
+
*
|
|
20
|
+
* Drift (any field differs from the target stance): routes the proposed
|
|
21
|
+
* payload through `hitlConfirm`. On approval, PATCH is issued. On
|
|
22
|
+
* decline or non-TTY (the gate returns false), the module returns
|
|
23
|
+
* `{ status: 'skipped', reason: 'hitl-declined' }` without writing.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
export const TARGET_MERGE_METHODS = Object.freeze({
|
|
27
|
+
allow_squash_merge: true,
|
|
28
|
+
allow_rebase_merge: false,
|
|
29
|
+
allow_merge_commit: false,
|
|
30
|
+
allow_auto_merge: true,
|
|
31
|
+
delete_branch_on_merge: true,
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Compute the drift between `current` (sparse) and the merged
|
|
36
|
+
* (defaults+settings) target. Returns null when nothing diverges so the
|
|
37
|
+
* caller can short-circuit before prompting HITL.
|
|
38
|
+
*/
|
|
39
|
+
export function diffMergeMethods(current, target) {
|
|
40
|
+
const diff = {};
|
|
41
|
+
for (const key of Object.keys(target)) {
|
|
42
|
+
const live = current?.[key];
|
|
43
|
+
if (live !== target[key]) {
|
|
44
|
+
diff[key] = { current: live ?? null, proposed: target[key] };
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return Object.keys(diff).length > 0 ? diff : null;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* @param {object} args
|
|
52
|
+
* @param {object} args.provider - Provider exposing `getMergeMethods()` /
|
|
53
|
+
* `setMergeMethods(settings)`.
|
|
54
|
+
* @param {object} [args.settings] - The resolved settings bag. Reads
|
|
55
|
+
* `github.mergeMethods` and merges over framework defaults.
|
|
56
|
+
* @param {(args:{summary:string, current:object, proposed:object})=>Promise<boolean>}
|
|
57
|
+
* [args.hitlConfirm] - HITL gate. Defaults to "abort on diverge".
|
|
58
|
+
* @param {(msg:string)=>void} [args.log] - Logger sink.
|
|
59
|
+
*/
|
|
60
|
+
export async function applyMergeMethods({
|
|
61
|
+
provider,
|
|
62
|
+
settings,
|
|
63
|
+
hitlConfirm,
|
|
64
|
+
log = () => {},
|
|
65
|
+
}) {
|
|
66
|
+
// Merge methods live under `github.mergeMethods`.
|
|
67
|
+
const override = settings?.github?.mergeMethods ?? {};
|
|
68
|
+
const target = { ...TARGET_MERGE_METHODS, ...override };
|
|
69
|
+
|
|
70
|
+
let current = {};
|
|
71
|
+
try {
|
|
72
|
+
current = (await provider.getMergeMethods()) ?? {};
|
|
73
|
+
} catch (err) {
|
|
74
|
+
log(`[bootstrap] Merge methods: read failed — ${err.message}.`);
|
|
75
|
+
return { status: 'failed', reason: err.message };
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const diff = diffMergeMethods(current, target);
|
|
79
|
+
if (!diff) {
|
|
80
|
+
log('[bootstrap] Merge methods: already at target stance (no-op).');
|
|
81
|
+
return { status: 'unchanged' };
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const approved =
|
|
85
|
+
typeof hitlConfirm === 'function'
|
|
86
|
+
? await hitlConfirm({
|
|
87
|
+
summary:
|
|
88
|
+
'Repo merge-method settings diverge from the framework hands-off-pipeline stance.',
|
|
89
|
+
current,
|
|
90
|
+
proposed: target,
|
|
91
|
+
})
|
|
92
|
+
: false;
|
|
93
|
+
if (!approved) {
|
|
94
|
+
log(
|
|
95
|
+
'[bootstrap] Merge methods: drift detected; HITL declined / non-TTY — leaving operator settings untouched.',
|
|
96
|
+
);
|
|
97
|
+
return { status: 'skipped', reason: 'hitl-declined', diff };
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
try {
|
|
101
|
+
const result = await provider.setMergeMethods(target);
|
|
102
|
+
log(`[bootstrap] Merge methods: patched (${result.patched.join(', ')}).`);
|
|
103
|
+
return { status: 'patched', ...result, diff };
|
|
104
|
+
} catch (err) {
|
|
105
|
+
log(`[bootstrap] Merge methods: PATCH failed — ${err.message}.`);
|
|
106
|
+
return { status: 'failed', reason: err.message };
|
|
107
|
+
}
|
|
108
|
+
}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* bootstrap/preflight — unified prerequisite preflight (Story #3375).
|
|
3
|
+
*
|
|
4
|
+
* Aggregates the cold-start prerequisite checks into a single
|
|
5
|
+
* fail-before-mutate gate that `bootstrap.js` runs as the FIRST pipeline
|
|
6
|
+
* phase, ahead of any project-side or GitHub-side mutation:
|
|
7
|
+
*
|
|
8
|
+
* - Node version — reuses `checkNodeVersion` from `project-bootstrap.js`.
|
|
9
|
+
* - git available — `git --version` resolves on PATH.
|
|
10
|
+
* - inside-work-tree — `git rev-parse --is-inside-work-tree` is true.
|
|
11
|
+
* - gh CLI + auth — reuses `preflightGh` from `gh-preflight.js`; skipped
|
|
12
|
+
* entirely when `skipGithub` is true.
|
|
13
|
+
*
|
|
14
|
+
* `runPreflight({ skipGithub })` returns `{ ok, checks }` where `ok` is
|
|
15
|
+
* false when any check failed. Every failing check carries a `remedy`
|
|
16
|
+
* string so the CLI can print actionable next steps before halting.
|
|
17
|
+
*
|
|
18
|
+
* The runner seams (`nodeCheck`, `gitRunner`, `gh`) default to the real
|
|
19
|
+
* implementations and are injectable so the unit test can drive every
|
|
20
|
+
* branch without spawning real child processes.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
import { spawnSync } from 'node:child_process';
|
|
24
|
+
import { checkProjectScopes, preflightGh } from './gh-preflight.js';
|
|
25
|
+
import { checkNodeVersion } from './project-bootstrap.js';
|
|
26
|
+
|
|
27
|
+
const GIT_INSTALL_HINT =
|
|
28
|
+
'Install git: https://git-scm.com/downloads — then re-run this command.';
|
|
29
|
+
const GIT_WORKTREE_HINT =
|
|
30
|
+
'Run this command from inside a git repository (run `git init` or `cd` into your project clone), then re-run.';
|
|
31
|
+
const NODE_REMEDY = (result) =>
|
|
32
|
+
`Node ${result.version} is below required ${result.required}. Upgrade Node (https://nodejs.org/) and re-run this command.`;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Default git runner: synchronously execs `git <args>` and returns the
|
|
36
|
+
* normalized `{ status, stdout, stderr, error }` shape. Extracted so the
|
|
37
|
+
* preflight tests can inject a stub without spawning a real child process.
|
|
38
|
+
*
|
|
39
|
+
* @param {string[]} args
|
|
40
|
+
* @returns {{ status: number|null, stdout: string, stderr: string,
|
|
41
|
+
* error?: NodeJS.ErrnoException }}
|
|
42
|
+
*/
|
|
43
|
+
function defaultGitRunner(args) {
|
|
44
|
+
const result = spawnSync('git', args, { encoding: 'utf8' });
|
|
45
|
+
return {
|
|
46
|
+
status: result.status,
|
|
47
|
+
stdout: typeof result.stdout === 'string' ? result.stdout : '',
|
|
48
|
+
stderr: typeof result.stderr === 'string' ? result.stderr : '',
|
|
49
|
+
error: result.error,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Probe Node version via the injected `nodeCheck` seam (defaults to
|
|
55
|
+
* `checkNodeVersion`). Returns a check record.
|
|
56
|
+
*
|
|
57
|
+
* @param {() => { ok: boolean, version: string, required: string }} nodeCheck
|
|
58
|
+
* @returns {{ name: string, ok: boolean, remedy?: string }}
|
|
59
|
+
*/
|
|
60
|
+
function checkNode(nodeCheck) {
|
|
61
|
+
const result = nodeCheck();
|
|
62
|
+
if (result.ok) return { name: 'node', ok: true };
|
|
63
|
+
return { name: 'node', ok: false, remedy: NODE_REMEDY(result) };
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Probe `git --version` for availability on PATH.
|
|
68
|
+
*
|
|
69
|
+
* @param {(args: string[]) => { status: number|null, stdout: string,
|
|
70
|
+
* stderr: string, error?: NodeJS.ErrnoException }} gitRunner
|
|
71
|
+
* @returns {{ name: string, ok: boolean, remedy?: string }}
|
|
72
|
+
*/
|
|
73
|
+
function checkGitAvailable(gitRunner) {
|
|
74
|
+
const result = gitRunner(['--version']);
|
|
75
|
+
if (result.error?.code === 'ENOENT') {
|
|
76
|
+
return { name: 'git', ok: false, remedy: GIT_INSTALL_HINT };
|
|
77
|
+
}
|
|
78
|
+
if (result.status !== 0) {
|
|
79
|
+
const snippet = (result.stderr || '').trim().slice(0, 200);
|
|
80
|
+
return {
|
|
81
|
+
name: 'git',
|
|
82
|
+
ok: false,
|
|
83
|
+
remedy: `git --version failed (exit ${result.status})${
|
|
84
|
+
snippet ? `: ${snippet}` : ''
|
|
85
|
+
}. ${GIT_INSTALL_HINT}`,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
return { name: 'git', ok: true };
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Probe `git rev-parse --is-inside-work-tree` to confirm the command is
|
|
93
|
+
* running inside a git work tree.
|
|
94
|
+
*
|
|
95
|
+
* @param {(args: string[]) => { status: number|null, stdout: string,
|
|
96
|
+
* stderr: string, error?: NodeJS.ErrnoException }} gitRunner
|
|
97
|
+
* @returns {{ name: string, ok: boolean, remedy?: string }}
|
|
98
|
+
*/
|
|
99
|
+
function checkInsideWorkTree(gitRunner) {
|
|
100
|
+
const result = gitRunner(['rev-parse', '--is-inside-work-tree']);
|
|
101
|
+
if (result.status === 0 && result.stdout.trim() === 'true') {
|
|
102
|
+
return { name: 'git-work-tree', ok: true };
|
|
103
|
+
}
|
|
104
|
+
return { name: 'git-work-tree', ok: false, remedy: GIT_WORKTREE_HINT };
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Probe the `gh` CLI + auth via the injected `gh` seam (defaults to
|
|
109
|
+
* `preflightGh`). Maps the typed errors `preflightGh` throws into a
|
|
110
|
+
* single failing check carrying the error message as the remedy.
|
|
111
|
+
*
|
|
112
|
+
* @param {(opts?: object) => Promise<{ version: string }>} gh
|
|
113
|
+
* @returns {Promise<{ name: string, ok: boolean, remedy?: string }>}
|
|
114
|
+
*/
|
|
115
|
+
async function checkGh(gh) {
|
|
116
|
+
try {
|
|
117
|
+
await gh();
|
|
118
|
+
return { name: 'gh', ok: true };
|
|
119
|
+
} catch (err) {
|
|
120
|
+
return { name: 'gh', ok: false, remedy: err.message };
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Run every prerequisite check and aggregate them into a single result.
|
|
126
|
+
*
|
|
127
|
+
* @param {object} [opts]
|
|
128
|
+
* @param {boolean} [opts.skipGithub=false] — when true, skip the `gh` CLI
|
|
129
|
+
* + auth check (the Node and git checks always run).
|
|
130
|
+
* @param {boolean} [opts.requireWorkTree=true] — when true (the default,
|
|
131
|
+
* used by `bootstrap.js`), being outside a git work tree FAILS the gate.
|
|
132
|
+
* When false (`bootstrap-new.js`), the work-tree probe is informational:
|
|
133
|
+
* it never fails the gate and its result is reported via the returned
|
|
134
|
+
* `gitInitialized` flag so later steps can fill in the missing git state.
|
|
135
|
+
* @param {boolean} [opts.checkProjectScope=false] — when true (and
|
|
136
|
+
* `skipGithub` is false), also verify the `gh` token carries the
|
|
137
|
+
* `project` scope needed to read/modify GitHub Projects V2.
|
|
138
|
+
* @param {() => { ok: boolean, version: string, required: string }}
|
|
139
|
+
* [opts.nodeCheck] — Node-version seam (defaults to `checkNodeVersion`).
|
|
140
|
+
* @param {(args: string[]) => object} [opts.gitRunner] — git runner seam
|
|
141
|
+
* (defaults to a real `spawnSync('git', …)`).
|
|
142
|
+
* @param {(opts?: object) => Promise<{ version: string }>} [opts.gh] —
|
|
143
|
+
* `gh` preflight seam (defaults to `preflightGh`).
|
|
144
|
+
* @param {() => Promise<{ name: string, ok: boolean, remedy?: string }>}
|
|
145
|
+
* [opts.projectScope] — project-scope seam (defaults to
|
|
146
|
+
* `checkProjectScopes`).
|
|
147
|
+
* @returns {Promise<{ ok: boolean, gitInitialized: boolean,
|
|
148
|
+
* checks: Array<{ name: string, ok: boolean, remedy?: string }> }>}
|
|
149
|
+
*/
|
|
150
|
+
export async function runPreflight(opts = {}) {
|
|
151
|
+
const skipGithub = Boolean(opts.skipGithub);
|
|
152
|
+
const requireWorkTree = opts.requireWorkTree !== false;
|
|
153
|
+
const checkProjectScope = Boolean(opts.checkProjectScope);
|
|
154
|
+
const nodeCheck = opts.nodeCheck ?? checkNodeVersion;
|
|
155
|
+
const gitRunner = opts.gitRunner ?? defaultGitRunner;
|
|
156
|
+
const gh = opts.gh ?? preflightGh;
|
|
157
|
+
const projectScope = opts.projectScope ?? checkProjectScopes;
|
|
158
|
+
|
|
159
|
+
const checks = [checkNode(nodeCheck)];
|
|
160
|
+
|
|
161
|
+
const gitAvailable = checkGitAvailable(gitRunner);
|
|
162
|
+
checks.push(gitAvailable);
|
|
163
|
+
// The inside-work-tree probe only makes sense when git itself resolved;
|
|
164
|
+
// if git is missing the rev-parse error is redundant noise.
|
|
165
|
+
let gitInitialized = false;
|
|
166
|
+
if (gitAvailable.ok) {
|
|
167
|
+
const workTree = checkInsideWorkTree(gitRunner);
|
|
168
|
+
gitInitialized = workTree.ok;
|
|
169
|
+
if (requireWorkTree) {
|
|
170
|
+
checks.push(workTree);
|
|
171
|
+
} else {
|
|
172
|
+
// Non-fatal detection: record whether we are inside a git repo but
|
|
173
|
+
// never fail the gate on it — `bootstrap-new.js` can run pre-init and
|
|
174
|
+
// collect the remote/branch/owner in later steps.
|
|
175
|
+
checks.push({
|
|
176
|
+
name: 'git-work-tree',
|
|
177
|
+
ok: true,
|
|
178
|
+
gitInitialized,
|
|
179
|
+
detail: gitInitialized
|
|
180
|
+
? 'inside a git work tree'
|
|
181
|
+
: 'not a git repo yet — will be collected in later steps',
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
if (!skipGithub) {
|
|
187
|
+
checks.push(await checkGh(gh));
|
|
188
|
+
if (checkProjectScope) {
|
|
189
|
+
checks.push(await projectScope());
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
const ok = checks.every((c) => c.ok);
|
|
194
|
+
return { ok, gitInitialized, checks };
|
|
195
|
+
}
|