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,155 @@
|
|
|
1
|
+
# Refinement & Evaluation Criteria
|
|
2
|
+
|
|
3
|
+
Use this rubric during Phase 2 (Evaluate & Converge) to stress-test idea
|
|
4
|
+
directions. Not every criterion applies to every idea — use judgment about which
|
|
5
|
+
dimensions matter most for the specific context.
|
|
6
|
+
|
|
7
|
+
## Core Evaluation Dimensions
|
|
8
|
+
|
|
9
|
+
### 1. User Value
|
|
10
|
+
|
|
11
|
+
The most important dimension. If the value isn't clear, nothing else matters.
|
|
12
|
+
|
|
13
|
+
**Painkiller vs. Vitamin:**
|
|
14
|
+
|
|
15
|
+
- **Painkiller:** Solves an acute, frequent problem. Users will actively seek
|
|
16
|
+
this out. They'll switch from their current solution. Signs: people describe
|
|
17
|
+
the problem with emotion, they've built workarounds, they'll pay for a
|
|
18
|
+
solution.
|
|
19
|
+
- **Vitamin:** Nice to have. Makes something marginally better. Users won't go
|
|
20
|
+
out of their way. Signs: people nod politely, say "that's cool," then don't
|
|
21
|
+
change behavior.
|
|
22
|
+
|
|
23
|
+
**Questions to ask:**
|
|
24
|
+
|
|
25
|
+
- Can you name 3 specific people who have this problem right now?
|
|
26
|
+
- What are they doing today instead? (The real competitor is always the current
|
|
27
|
+
workaround.)
|
|
28
|
+
- Would they switch from their current approach? What would make them switch?
|
|
29
|
+
- How often do they encounter this problem? (Daily problems > monthly problems)
|
|
30
|
+
- Is this a "pull" problem (users are asking for this) or a "push" problem (you
|
|
31
|
+
think they should want this)?
|
|
32
|
+
|
|
33
|
+
**Red flags:**
|
|
34
|
+
|
|
35
|
+
- "Everyone could use this" — if you can't name a specific user, the value isn't
|
|
36
|
+
clear
|
|
37
|
+
- "It's like X but better" — marginal improvements rarely drive adoption
|
|
38
|
+
- The problem is real but rare — high intensity but low frequency rarely
|
|
39
|
+
justifies a product
|
|
40
|
+
|
|
41
|
+
### 2. Feasibility
|
|
42
|
+
|
|
43
|
+
Can you actually build this? Not just technically, but practically.
|
|
44
|
+
|
|
45
|
+
**Technical feasibility:**
|
|
46
|
+
|
|
47
|
+
- Does the core technology exist and work reliably?
|
|
48
|
+
- What's the hardest technical problem? Is it a known-hard problem or a novel
|
|
49
|
+
one?
|
|
50
|
+
- Are there dependencies on third parties, APIs, or data sources you don't
|
|
51
|
+
control?
|
|
52
|
+
- What's the minimum technical stack needed? (If the answer is "a lot," that's a
|
|
53
|
+
signal.)
|
|
54
|
+
|
|
55
|
+
**Resource feasibility:**
|
|
56
|
+
|
|
57
|
+
- What's the minimum team/effort to build an MVP?
|
|
58
|
+
- Does it require specialized expertise you don't have?
|
|
59
|
+
- Are there regulatory, legal, or compliance requirements?
|
|
60
|
+
|
|
61
|
+
**Time-to-value:**
|
|
62
|
+
|
|
63
|
+
- How quickly can you get something in front of users?
|
|
64
|
+
- Is there a version that delivers value in days/weeks, not months?
|
|
65
|
+
- What's the critical path? What has to happen first?
|
|
66
|
+
|
|
67
|
+
**Red flags:**
|
|
68
|
+
|
|
69
|
+
- "We just need to solve [very hard research problem] first"
|
|
70
|
+
- Multiple dependencies that all need to work simultaneously
|
|
71
|
+
- MVP still requires months of work — likely not minimal enough
|
|
72
|
+
|
|
73
|
+
### 3. Differentiation
|
|
74
|
+
|
|
75
|
+
What makes this genuinely different? Not better — _different_.
|
|
76
|
+
|
|
77
|
+
**Questions to ask:**
|
|
78
|
+
|
|
79
|
+
- If a user described this to a friend, what would they say? Is that description
|
|
80
|
+
compelling?
|
|
81
|
+
- What's the one thing this does that nothing else does? (If you can't name one,
|
|
82
|
+
that's a problem.)
|
|
83
|
+
- Is this differentiation durable? Can a competitor copy it in a week?
|
|
84
|
+
- Is the difference something users actually care about, or just something
|
|
85
|
+
builders find interesting?
|
|
86
|
+
|
|
87
|
+
**Types of differentiation (strongest to weakest):**
|
|
88
|
+
|
|
89
|
+
1. **New capability:** Does something that was previously impossible
|
|
90
|
+
2. **10x improvement:** So much better on a key dimension that it changes
|
|
91
|
+
behavior
|
|
92
|
+
3. **New audience:** Brings an existing capability to people who were excluded
|
|
93
|
+
4. **New context:** Works in a situation where existing solutions fail
|
|
94
|
+
5. **Better UX:** Same capability, dramatically simpler experience
|
|
95
|
+
6. **Cheaper:** Same thing, lower cost (weakest — easily competed away)
|
|
96
|
+
|
|
97
|
+
**Red flags:**
|
|
98
|
+
|
|
99
|
+
- Differentiation is entirely about technology, not user experience
|
|
100
|
+
- "We're faster/cheaper/prettier" without a structural reason why
|
|
101
|
+
- The feature that differentiates is not the feature users care most about
|
|
102
|
+
|
|
103
|
+
## Assumption Audit
|
|
104
|
+
|
|
105
|
+
For every idea direction, explicitly list assumptions in three categories:
|
|
106
|
+
|
|
107
|
+
### Must Be True (Dealbreakers)
|
|
108
|
+
|
|
109
|
+
Assumptions that, if wrong, kill the idea entirely. These need validation before
|
|
110
|
+
building.
|
|
111
|
+
|
|
112
|
+
Example: "Users will share their data with us" — if they won't, the entire
|
|
113
|
+
product doesn't work.
|
|
114
|
+
|
|
115
|
+
### Should Be True (Important)
|
|
116
|
+
|
|
117
|
+
Assumptions that significantly impact success but don't kill the idea. You can
|
|
118
|
+
adjust the approach if these are wrong.
|
|
119
|
+
|
|
120
|
+
Example: "Users prefer self-serve over talking to a person" — if wrong, you need
|
|
121
|
+
a different go-to-market, but the core product can still work.
|
|
122
|
+
|
|
123
|
+
### Might Be True (Nice to Have)
|
|
124
|
+
|
|
125
|
+
Assumptions about secondary features or optimizations. Don't validate these
|
|
126
|
+
until the core is proven.
|
|
127
|
+
|
|
128
|
+
Example: "Users will want to share their results with teammates" — a growth
|
|
129
|
+
feature, not a core value proposition.
|
|
130
|
+
|
|
131
|
+
## Decision Framework
|
|
132
|
+
|
|
133
|
+
When choosing between directions, rank on this matrix:
|
|
134
|
+
|
|
135
|
+
| | High Feasibility | Low Feasibility |
|
|
136
|
+
| -------------- | ---------------- | --------------- |
|
|
137
|
+
| **High Value** | Do this first | Worth the risk |
|
|
138
|
+
| **Low Value** | Only if trivial | Don't do this |
|
|
139
|
+
|
|
140
|
+
Then use differentiation as the tiebreaker between options in the same quadrant.
|
|
141
|
+
|
|
142
|
+
## MVP Scoping Principles
|
|
143
|
+
|
|
144
|
+
When defining MVP scope for the chosen direction:
|
|
145
|
+
|
|
146
|
+
1. **One job, done well.** The MVP should nail exactly one user job. Not three
|
|
147
|
+
jobs done partially.
|
|
148
|
+
2. **The riskiest assumption first.** The MVP's primary purpose is to test the
|
|
149
|
+
assumption most likely to be wrong.
|
|
150
|
+
3. **Time-box, not feature-list.** "What can we build and test in [timeframe]?"
|
|
151
|
+
is better than "What features do we need?"
|
|
152
|
+
4. **The 'Not Doing' list is mandatory.** Explicitly name what you're cutting
|
|
153
|
+
and why. This prevents scope creep and forces honest prioritization.
|
|
154
|
+
5. **If it's not embarrassing, you waited too long.** The first version should
|
|
155
|
+
feel incomplete to the builder. If it doesn't, you over-built.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
set -e
|
|
3
|
+
|
|
4
|
+
# This script helps initialize the ideas directory for the idea-refine skill.
|
|
5
|
+
|
|
6
|
+
IDEAS_DIR="docs/ideas"
|
|
7
|
+
|
|
8
|
+
if [ ! -d "$IDEAS_DIR" ]; then
|
|
9
|
+
mkdir -p "$IDEAS_DIR"
|
|
10
|
+
echo "Created directory: $IDEAS_DIR" >&2
|
|
11
|
+
else
|
|
12
|
+
echo "Directory already exists: $IDEAS_DIR" >&2
|
|
13
|
+
fi
|
|
14
|
+
|
|
15
|
+
echo "{\"status\": \"ready\", \"directory\": \"$IDEAS_DIR\"}"
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: incremental-implementation
|
|
3
|
+
description:
|
|
4
|
+
Delivers changes incrementally. Use when implementing any feature or change
|
|
5
|
+
that touches more than one file. Use when you're about to write a large amount
|
|
6
|
+
of code at once, or when a task feels too big to land in one step.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Incremental Implementation
|
|
10
|
+
|
|
11
|
+
## Policy Capsule
|
|
12
|
+
|
|
13
|
+
- Deliver in thin vertical slices: **Implement → Test → Verify → Commit → Next slice**. Never write more than ~100 lines before testing.
|
|
14
|
+
- Each slice MUST leave the system in a working, testable state — build green, existing tests pass, type-check and lint clean.
|
|
15
|
+
- Each commit changes one logical thing; never mix refactors with features or formatting with behavior.
|
|
16
|
+
- Apply Simplicity First: write the naive, obviously-correct version. Three similar lines beats a premature abstraction; do not build for hypothetical future requirements.
|
|
17
|
+
- Enforce Scope Discipline: touch only what the task requires. No drive-by cleanups, import re-orderings, comment deletions, or syntax modernizations in files you're "just reading" — note them instead.
|
|
18
|
+
- Gate incomplete work behind a feature flag rather than holding a long-lived branch; default new behaviour to safe / opt-in.
|
|
19
|
+
- Keep increments rollback-friendly: prefer additive changes, ship DB migrations with rollbacks, and never delete + replace in the same commit.
|
|
20
|
+
- Prefer vertical slices that deliver end-to-end functionality; use contract-first slicing only when backend/frontend must develop in parallel, and risk-first slicing when the riskiest piece dominates the plan.
|
|
21
|
+
- Verify the increment checklist before moving on: tests pass, build succeeds, types check, lint clean, change committed with a descriptive message.
|
|
22
|
+
|
|
23
|
+
## Overview
|
|
24
|
+
|
|
25
|
+
Build in thin vertical slices — implement one piece, test it, verify it, then
|
|
26
|
+
expand. Avoid implementing an entire feature in one pass. Each increment should
|
|
27
|
+
leave the system in a working, testable state. This is the execution discipline
|
|
28
|
+
that makes large features manageable.
|
|
29
|
+
|
|
30
|
+
## When to Use
|
|
31
|
+
|
|
32
|
+
- Implementing any multi-file change
|
|
33
|
+
- Building a new feature from a task breakdown
|
|
34
|
+
- Refactoring existing code
|
|
35
|
+
- Any time you're tempted to write more than ~100 lines before testing
|
|
36
|
+
|
|
37
|
+
**When NOT to use:** Single-file, single-function changes where the scope is
|
|
38
|
+
already minimal.
|
|
39
|
+
|
|
40
|
+
## The Increment Cycle
|
|
41
|
+
|
|
42
|
+
```text
|
|
43
|
+
┌──────────────────────────────────────┐
|
|
44
|
+
│ │
|
|
45
|
+
│ Implement ──→ Test ──→ Verify ──┐ │
|
|
46
|
+
│ ▲ │ │
|
|
47
|
+
│ └───── Commit ◄─────────────┘ │
|
|
48
|
+
│ │ │
|
|
49
|
+
│ ▼ │
|
|
50
|
+
│ Next slice │
|
|
51
|
+
│ │
|
|
52
|
+
└──────────────────────────────────────┘
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
For each slice:
|
|
56
|
+
|
|
57
|
+
1. **Implement** the smallest complete piece of functionality
|
|
58
|
+
2. **Test** — run the test suite (or write a test if none exists)
|
|
59
|
+
3. **Verify** — confirm the slice works as expected (tests pass, build succeeds,
|
|
60
|
+
manual check)
|
|
61
|
+
4. **Commit** -- save your progress with a descriptive message (see
|
|
62
|
+
`git-workflow-and-versioning` for atomic commit guidance)
|
|
63
|
+
5. **Move to the next slice** — carry forward, don't restart
|
|
64
|
+
|
|
65
|
+
## Slicing Strategies
|
|
66
|
+
|
|
67
|
+
### Vertical Slices (Preferred)
|
|
68
|
+
|
|
69
|
+
Build one complete path through the stack:
|
|
70
|
+
|
|
71
|
+
```text
|
|
72
|
+
Slice 1: Create a task (DB + API + basic UI)
|
|
73
|
+
→ Tests pass, user can create a task via the UI
|
|
74
|
+
|
|
75
|
+
Slice 2: List tasks (query + API + UI)
|
|
76
|
+
→ Tests pass, user can see their tasks
|
|
77
|
+
|
|
78
|
+
Slice 3: Edit a task (update + API + UI)
|
|
79
|
+
→ Tests pass, user can modify tasks
|
|
80
|
+
|
|
81
|
+
Slice 4: Delete a task (delete + API + UI + confirmation)
|
|
82
|
+
→ Tests pass, full CRUD complete
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Each slice delivers working end-to-end functionality.
|
|
86
|
+
|
|
87
|
+
### Contract-First Slicing
|
|
88
|
+
|
|
89
|
+
When backend and frontend need to develop in parallel:
|
|
90
|
+
|
|
91
|
+
```text
|
|
92
|
+
Slice 0: Define the API contract (types, interfaces, OpenAPI spec)
|
|
93
|
+
Slice 1a: Implement backend against the contract + API tests
|
|
94
|
+
Slice 1b: Implement frontend against mock data matching the contract
|
|
95
|
+
Slice 2: Integrate and test end-to-end
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Risk-First Slicing
|
|
99
|
+
|
|
100
|
+
Tackle the riskiest or most uncertain piece first:
|
|
101
|
+
|
|
102
|
+
```text
|
|
103
|
+
Slice 1: Prove the WebSocket connection works (highest risk)
|
|
104
|
+
Slice 2: Build real-time task updates on the proven connection
|
|
105
|
+
Slice 3: Add offline support and reconnection
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
If Slice 1 fails, you discover it before investing in Slices 2 and 3.
|
|
109
|
+
|
|
110
|
+
## Implementation Rules
|
|
111
|
+
|
|
112
|
+
### Rule 0: Simplicity First
|
|
113
|
+
|
|
114
|
+
Before writing any code, ask: "What is the simplest thing that could work?"
|
|
115
|
+
|
|
116
|
+
After writing code, review it against these checks:
|
|
117
|
+
|
|
118
|
+
- Can this be done in fewer lines?
|
|
119
|
+
- Are these abstractions earning their complexity?
|
|
120
|
+
- Would a staff engineer look at this and say "why didn't you just..."?
|
|
121
|
+
- Am I building for hypothetical future requirements, or the current task?
|
|
122
|
+
|
|
123
|
+
```text
|
|
124
|
+
SIMPLICITY CHECK:
|
|
125
|
+
✗ Generic EventBus with middleware pipeline for one notification
|
|
126
|
+
✓ Simple function call
|
|
127
|
+
|
|
128
|
+
✗ Abstract factory pattern for two similar components
|
|
129
|
+
✓ Two straightforward components with shared utilities
|
|
130
|
+
|
|
131
|
+
✗ Config-driven form builder for three forms
|
|
132
|
+
✓ Three form components
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Three similar lines of code is better than a premature abstraction. Implement
|
|
136
|
+
the naive, obviously-correct version first. Optimize only after correctness is
|
|
137
|
+
proven with tests.
|
|
138
|
+
|
|
139
|
+
### Rule 0.5: Scope Discipline
|
|
140
|
+
|
|
141
|
+
Touch only what the task requires.
|
|
142
|
+
|
|
143
|
+
Do NOT:
|
|
144
|
+
|
|
145
|
+
- "Clean up" code adjacent to your change
|
|
146
|
+
- Refactor imports in files you're not modifying
|
|
147
|
+
- Remove comments you don't fully understand
|
|
148
|
+
- Add features not in the spec because they "seem useful"
|
|
149
|
+
- Modernize syntax in files you're only reading
|
|
150
|
+
|
|
151
|
+
If you notice something worth improving outside your task scope, note it — don't
|
|
152
|
+
fix it:
|
|
153
|
+
|
|
154
|
+
```text
|
|
155
|
+
NOTICED BUT NOT TOUCHING:
|
|
156
|
+
- src/utils/format.ts has an unused import (unrelated to this task)
|
|
157
|
+
- The auth middleware could use better error messages (separate task)
|
|
158
|
+
→ Want me to create tasks for these?
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### Rule 1: One Thing at a Time
|
|
162
|
+
|
|
163
|
+
Each increment changes one logical thing. Don't mix concerns:
|
|
164
|
+
|
|
165
|
+
**Bad:** One commit that adds a new component, refactors an existing one, and
|
|
166
|
+
updates the build config.
|
|
167
|
+
|
|
168
|
+
**Good:** Three separate commits — one for each change.
|
|
169
|
+
|
|
170
|
+
### Rule 2: Keep It Compilable
|
|
171
|
+
|
|
172
|
+
After each increment, the project must build and existing tests must pass. Don't
|
|
173
|
+
leave the codebase in a broken state between slices.
|
|
174
|
+
|
|
175
|
+
### Rule 3: Feature Flags for Incomplete Features
|
|
176
|
+
|
|
177
|
+
If a feature isn't ready for users but you need to merge increments:
|
|
178
|
+
|
|
179
|
+
```typescript
|
|
180
|
+
// Feature flag for work-in-progress
|
|
181
|
+
const ENABLE_TASK_SHARING = process.env.FEATURE_TASK_SHARING === 'true';
|
|
182
|
+
|
|
183
|
+
if (ENABLE_TASK_SHARING) {
|
|
184
|
+
// New sharing UI
|
|
185
|
+
}
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
This lets you merge small increments to the main branch without exposing
|
|
189
|
+
incomplete work.
|
|
190
|
+
|
|
191
|
+
### Rule 4: Safe Defaults
|
|
192
|
+
|
|
193
|
+
New code should default to safe, conservative behavior:
|
|
194
|
+
|
|
195
|
+
```typescript
|
|
196
|
+
// Safe: disabled by default, opt-in
|
|
197
|
+
export function createTask(data: TaskInput, options?: { notify?: boolean }) {
|
|
198
|
+
const shouldNotify = options?.notify ?? false;
|
|
199
|
+
// ...
|
|
200
|
+
}
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### Rule 5: Rollback-Friendly
|
|
204
|
+
|
|
205
|
+
Each increment should be independently revertable:
|
|
206
|
+
|
|
207
|
+
- Additive changes (new files, new functions) are easy to revert
|
|
208
|
+
- Modifications to existing code should be minimal and focused
|
|
209
|
+
- Database migrations should have corresponding rollback migrations
|
|
210
|
+
- Avoid deleting something in one commit and replacing it in the same commit —
|
|
211
|
+
separate them
|
|
212
|
+
|
|
213
|
+
## Working with Agents
|
|
214
|
+
|
|
215
|
+
When directing an agent to implement incrementally:
|
|
216
|
+
|
|
217
|
+
```text
|
|
218
|
+
"Let's implement Task 3 from the plan.
|
|
219
|
+
|
|
220
|
+
Start with just the database schema change and the API endpoint.
|
|
221
|
+
Don't touch the UI yet — we'll do that in the next increment.
|
|
222
|
+
|
|
223
|
+
After implementing, run `npm test` and `npm run build` to verify
|
|
224
|
+
nothing is broken."
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
Be explicit about what's in scope and what's NOT in scope for each increment.
|
|
228
|
+
|
|
229
|
+
## Increment Checklist
|
|
230
|
+
|
|
231
|
+
After each increment, verify:
|
|
232
|
+
|
|
233
|
+
- [ ] The change does one thing and does it completely
|
|
234
|
+
- [ ] All existing tests still pass (`npm test`)
|
|
235
|
+
- [ ] The build succeeds (`npm run build`)
|
|
236
|
+
- [ ] Type checking passes (`npx tsc --noEmit`)
|
|
237
|
+
- [ ] Linting passes (`npm run lint`)
|
|
238
|
+
- [ ] The new functionality works as expected
|
|
239
|
+
- [ ] The change is committed with a descriptive message
|
|
240
|
+
|
|
241
|
+
## Common Rationalizations
|
|
242
|
+
|
|
243
|
+
| Rationalization | Reality |
|
|
244
|
+
| -------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
|
|
245
|
+
| "I'll test it all at the end" | Bugs compound. A bug in Slice 1 makes Slices 2-5 wrong. Test each slice. |
|
|
246
|
+
| "It's faster to do it all at once" | It _feels_ faster until something breaks and you can't find which of 500 changed lines caused it. |
|
|
247
|
+
| "These changes are too small to commit separately" | Small commits are free. Large commits hide bugs and make rollbacks painful. |
|
|
248
|
+
| "I'll add the feature flag later" | If the feature isn't complete, it shouldn't be user-visible. Add the flag now. |
|
|
249
|
+
| "This refactor is small enough to include" | Refactors mixed with features make both harder to review and debug. Separate them. |
|
|
250
|
+
|
|
251
|
+
## Red Flags
|
|
252
|
+
|
|
253
|
+
- More than 100 lines of code written without running tests
|
|
254
|
+
- Multiple unrelated changes in a single increment
|
|
255
|
+
- "Let me just quickly add this too" scope expansion
|
|
256
|
+
- Skipping the test/verify step to move faster
|
|
257
|
+
- Build or tests broken between increments
|
|
258
|
+
- Large uncommitted changes accumulating
|
|
259
|
+
- Building abstractions before the third use case demands it
|
|
260
|
+
- Touching files outside the task scope "while I'm here"
|
|
261
|
+
- Creating new utility files for one-time operations
|
|
262
|
+
|
|
263
|
+
## Verification
|
|
264
|
+
|
|
265
|
+
After completing all increments for a task:
|
|
266
|
+
|
|
267
|
+
- [ ] Each increment was individually tested and committed
|
|
268
|
+
- [ ] The full test suite passes
|
|
269
|
+
- [ ] The build is clean
|
|
270
|
+
- [ ] The feature works end-to-end as specified
|
|
271
|
+
- [ ] No uncommitted changes remain
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: introducing-a-baseline-gate
|
|
3
|
+
description:
|
|
4
|
+
Land a new CI check that asserts on a body of pre-existing state
|
|
5
|
+
(doc-drift, lint-vocabulary, dependency-cycle, missing-test-coverage,
|
|
6
|
+
unused-export). Use when introducing a gate whose first run would
|
|
7
|
+
surface latent findings — the introducing Story MUST guarantee the
|
|
8
|
+
gate exits 0 at merge, not just that the cited discrepancies pass.
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Skill: Introducing a Baseline-Style Gate
|
|
12
|
+
|
|
13
|
+
## Policy Capsule
|
|
14
|
+
|
|
15
|
+
- A new check that asserts on pre-existing state MUST exit 0 at merge time. Wiring the gate into CI without proving it's green ships a red gate that blocks every downstream Story.
|
|
16
|
+
- "The cited discrepancies are fixed" is **not** the AC. The AC is **"the gate exits 0 against the full repository on the merge commit"** — write it in the Story body in those words.
|
|
17
|
+
- Choose one of two landing shapes before you write the AC: **advisory-first** (gate exits 0 with warnings; a follow-up Story flips it to blocking) or **populate-the-baseline** (the introducing Story fixes every existing finding in the same PR, or writes them to an ignore-list / baseline snapshot the gate respects).
|
|
18
|
+
- Run the gate against `main` (or `epic/<id>`) **before** writing the AC. The findings count it surfaces is the scope of what landing-green will cost.
|
|
19
|
+
- Wire the gate into `.agentrc.json` `github.branchProtection.requiredChecks` in the **same PR** that ships the gate's first green run — never split "add the check script" from "make it required".
|
|
20
|
+
- Never land a gate red and rely on a follow-up Story to populate the baseline. The window between merge and the follow-up landing blocks every Story in flight.
|
|
21
|
+
|
|
22
|
+
## When to reach for this
|
|
23
|
+
|
|
24
|
+
Reach for this skill whenever you're introducing a check whose **first
|
|
25
|
+
run on the existing codebase would surface findings you didn't author**.
|
|
26
|
+
That includes (but is not limited to):
|
|
27
|
+
|
|
28
|
+
- **Doc-drift gates** — `check-lifecycle-doc-drift.js`, "docs/X.md must
|
|
29
|
+
enumerate every Y in `src/Y/`", "README badge list must match the CI
|
|
30
|
+
workflow file list".
|
|
31
|
+
- **Lint-vocabulary gates** — "no `TODO` without an issue link", "every
|
|
32
|
+
exported function must have a JSDoc summary", "every `agent::*` label
|
|
33
|
+
must appear in `label-constants.js`".
|
|
34
|
+
- **Dependency-cycle / boundary gates** — "no import from `app/` into
|
|
35
|
+
`lib/`", "no cycle in module graph", "every workspace dep declared at
|
|
36
|
+
the right `package.json` level".
|
|
37
|
+
- **Coverage-shape gates** — "every public API surface in
|
|
38
|
+
`tests/contract/**` has at least one negative-path test", "every
|
|
39
|
+
feature flag defined in `flags.ts` is referenced".
|
|
40
|
+
- **Baseline-numeric gates** — Lighthouse / bundle-size / CRAP first
|
|
41
|
+
introduction. (For the numeric-ratchet shape specifically, also read
|
|
42
|
+
`stack/qa/lighthouse-baseline`.)
|
|
43
|
+
|
|
44
|
+
If the check only fires on **new** code (e.g. a lint rule wired with
|
|
45
|
+
`--cache` against the diff, or a hook scoped to staged files), this
|
|
46
|
+
skill is not required — there's no latent-state landmine.
|
|
47
|
+
|
|
48
|
+
## The Trap (Why This Skill Exists)
|
|
49
|
+
|
|
50
|
+
**Epic #2880, Wave 1.** Story #2895 introduced
|
|
51
|
+
`check-lifecycle-doc-drift.js` — a gate that asserts every entry in the
|
|
52
|
+
project's lifecycle event registry has a matching row in
|
|
53
|
+
`docs/LIFECYCLE.md`. The Story's AC required correcting 3 cited
|
|
54
|
+
discrepancies and adding 2 new event rows. The gate landed wired into
|
|
55
|
+
CI. The first CI run on the **next** Story (#2898) reported **11
|
|
56
|
+
pre-existing drift findings** — drift that had been latent for months,
|
|
57
|
+
silent because no gate enforced it.
|
|
58
|
+
|
|
59
|
+
Stories #2898 and #2900 were both blocked. A hotfix commit on
|
|
60
|
+
`epic/2880` (5e3ef962) had to populate the full listener table before
|
|
61
|
+
wave 1 could merge. The cost was a half-day of wave-1 wall-clock and
|
|
62
|
+
two interrupted Stories.
|
|
63
|
+
|
|
64
|
+
**The diagnosis:** the introducing Story's AC was scoped to "fix what
|
|
65
|
+
we cited", not "the gate is green". Those are different ACs. The
|
|
66
|
+
second one is the load-bearing one.
|
|
67
|
+
|
|
68
|
+
This skill exists so the next drift-style gate doesn't replay that
|
|
69
|
+
pattern.
|
|
70
|
+
|
|
71
|
+
## Two Landing Shapes — Pick One Before AC Authoring
|
|
72
|
+
|
|
73
|
+
### Shape A: Advisory-First (exit 0 + warnings)
|
|
74
|
+
|
|
75
|
+
Land the gate as **non-blocking** in the introducing Story. The script
|
|
76
|
+
exits 0 even when findings exist, but prints them as warnings (and
|
|
77
|
+
optionally posts them as a PR comment). A follow-up Story drives the
|
|
78
|
+
findings count to zero, then flips the gate to blocking
|
|
79
|
+
(`process.exit(1)` on finding-count > 0) and adds it to
|
|
80
|
+
`requiredChecks`.
|
|
81
|
+
|
|
82
|
+
**When to choose this shape:**
|
|
83
|
+
|
|
84
|
+
- The existing-state findings are numerous (10+) and a one-shot fix
|
|
85
|
+
would balloon the introducing Story's scope.
|
|
86
|
+
- The findings need per-finding owner triage (each row is a different
|
|
87
|
+
module's bug).
|
|
88
|
+
- You want the warnings to surface in PRs immediately so contributors
|
|
89
|
+
can fix-as-they-touch.
|
|
90
|
+
|
|
91
|
+
**Required AC line:**
|
|
92
|
+
|
|
93
|
+
> "The gate runs in advisory mode (exits 0 with warnings on the full
|
|
94
|
+
> repo). The follow-up Story #<NNN> flips it to blocking."
|
|
95
|
+
|
|
96
|
+
The follow-up Story MUST exist as a real ticket on the board before the
|
|
97
|
+
introducing Story closes — otherwise "follow-up" is a euphemism for
|
|
98
|
+
"never".
|
|
99
|
+
|
|
100
|
+
### Shape B: Populate-the-Baseline (exit 0 from day one)
|
|
101
|
+
|
|
102
|
+
The introducing Story includes the work to drive existing findings to
|
|
103
|
+
zero. Two sub-shapes:
|
|
104
|
+
|
|
105
|
+
1. **Fix-them-all.** Edit the docs / add the missing tests / break the
|
|
106
|
+
cycles. The PR diff includes the gate code **and** the
|
|
107
|
+
findings-resolution diff. The first CI run is green.
|
|
108
|
+
2. **Snapshot-as-baseline.** Write the current findings to a committed
|
|
109
|
+
ignore-list (`baselines/<gate>-ignore.json`) that the gate reads at
|
|
110
|
+
startup. The gate exits 0 when the only failures are in the ignore
|
|
111
|
+
list, and exits non-zero on any **new** finding. A follow-up Story
|
|
112
|
+
shrinks the ignore list to empty.
|
|
113
|
+
|
|
114
|
+
**When to choose this shape:**
|
|
115
|
+
|
|
116
|
+
- The findings count is small (≤ 10) and tractable in one PR.
|
|
117
|
+
- Or: the findings reflect real bugs that should be fixed, not papered
|
|
118
|
+
over.
|
|
119
|
+
- Or: an ignore-list snapshot is a meaningful artifact (it answers
|
|
120
|
+
"what's our drift debt right now?").
|
|
121
|
+
|
|
122
|
+
**Required AC line:**
|
|
123
|
+
|
|
124
|
+
> "On the merge commit, `<gate-script>` exits 0 against the full
|
|
125
|
+
> repository. The gate is wired into `requiredChecks` in this PR."
|
|
126
|
+
|
|
127
|
+
## Pre-Authoring Step: Run the Gate Against `main`
|
|
128
|
+
|
|
129
|
+
**Before** writing the AC, run the gate script against `main` (or
|
|
130
|
+
`epic/<id>`) locally and count the findings.
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
# In the introducing Story's worktree, with the gate script written:
|
|
134
|
+
node .agents/scripts/<new-gate>.js
|
|
135
|
+
echo "exit=$?"
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
That number — the **pre-existing finding count** — is the budget the
|
|
139
|
+
Story is choosing to spend. Write it in the Story body:
|
|
140
|
+
|
|
141
|
+
```text
|
|
142
|
+
## Pre-existing finding count (as of <SHA>)
|
|
143
|
+
- N findings on main / epic/<id>
|
|
144
|
+
- Landing shape: <Advisory-First | Populate-the-Baseline:fix |
|
|
145
|
+
Populate-the-Baseline:snapshot>
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
If you skip this step you are gambling that the count is zero. It
|
|
149
|
+
isn't, that's why you're adding the gate.
|
|
150
|
+
|
|
151
|
+
## AC Checklist for a Drift-Style Gate Story
|
|
152
|
+
|
|
153
|
+
Copy this checklist into the Story body. Every line MUST appear:
|
|
154
|
+
|
|
155
|
+
- [ ] The gate script (`<path>`) exists and runs locally.
|
|
156
|
+
- [ ] The pre-existing finding count on `<base-branch>` is documented
|
|
157
|
+
in the Story body.
|
|
158
|
+
- [ ] The landing shape (Advisory-First / Populate-fix /
|
|
159
|
+
Populate-snapshot) is named in the Story body.
|
|
160
|
+
- [ ] If Advisory-First: the follow-up Story (#<NNN>) exists on the
|
|
161
|
+
board with `type::story` and a link from this Story.
|
|
162
|
+
- [ ] On the merge commit, the gate exits 0 against the full
|
|
163
|
+
repository (logs attached to the close comment).
|
|
164
|
+
- [ ] The gate is wired into `.agentrc.json`
|
|
165
|
+
`github.branchProtection.requiredChecks` (Populate-shape) **or**
|
|
166
|
+
explicitly marked advisory (Advisory-First).
|
|
167
|
+
- [ ] CI on the introducing PR shows the gate green.
|
|
168
|
+
|
|
169
|
+
## Anti-patterns
|
|
170
|
+
|
|
171
|
+
- **"The AC just says fix the cited cases."** The cited cases are the
|
|
172
|
+
spark that surfaced the need for the gate. The AC must cover the
|
|
173
|
+
whole forest, not just the tree the operator was standing under.
|
|
174
|
+
- **"We'll wire it in now and clean up the drift in a follow-up."**
|
|
175
|
+
Every Story merged between "wire in" and "clean up" is blocked.
|
|
176
|
+
That's a wave-stopper, not a follow-up. Either populate-now or
|
|
177
|
+
advisory-now — never blocking-now-with-debt.
|
|
178
|
+
- **"It's green locally, ship it."** Local environments routinely have
|
|
179
|
+
uncommitted state that the gate accepts. Verify against the **base
|
|
180
|
+
branch tip**, not `git status`-clean working tree.
|
|
181
|
+
- **"The hotfix commit on the integration branch counts as cleanup."**
|
|
182
|
+
It counts as a Story-2895-class debt: the gate is green on
|
|
183
|
+
`epic/<id>` only because someone manually populated the gap.
|
|
184
|
+
Codify the populate work as scope of the introducing Story instead.
|
|
185
|
+
- **No follow-up Story for Advisory-First.** "Advisory forever" means
|
|
186
|
+
the gate is decoration. Either commit to flipping it or don't ship
|
|
187
|
+
the advisory version.
|
|
188
|
+
|
|
189
|
+
## Cross-references
|
|
190
|
+
|
|
191
|
+
- **`stack/qa/lighthouse-baseline`** — for the **numeric-ratchet**
|
|
192
|
+
flavour of baseline gate (a number with a tolerance band that
|
|
193
|
+
ratchets only with intent). That skill's `--self-test` and
|
|
194
|
+
weekly-cadence patterns complement this one's landing-shape
|
|
195
|
+
patterns; the two skills cover orthogonal concerns (number-shape
|
|
196
|
+
vs. land-green).
|
|
197
|
+
- **`core/baseline-refresh`** — once the gate exists and is blocking,
|
|
198
|
+
this skill governs how an intentional drift in the baseline is
|
|
199
|
+
refreshed without bypassing the gate.
|
|
200
|
+
- **`core/ci-cd-and-automation`** — generic CI-pipeline conventions
|
|
201
|
+
(gate ordering, no-skip rule, branch-protection wiring) that this
|
|
202
|
+
skill specialises for the latent-state case.
|
|
203
|
+
- **`.agents/rules/git-conventions.md` § Contract Cutovers** — a
|
|
204
|
+
drift-style gate is itself a contract cutover (the contract is "the
|
|
205
|
+
artifact and the source agree"). The hard-cutover policy applies:
|
|
206
|
+
land green in one PR, don't ship two-shape tolerance.
|
|
207
|
+
- **Source incident:** Epic #2880 friction note **F-W1-1**
|
|
208
|
+
(LIFECYCLE.md drift exposure), hotfix
|
|
209
|
+
[`5e3ef962`](https://github.com/dsj1984/mandrel/commit/5e3ef962),
|
|
210
|
+
Stories
|
|
211
|
+
[#2895](https://github.com/dsj1984/mandrel/issues/2895),
|
|
212
|
+
[#2898](https://github.com/dsj1984/mandrel/issues/2898),
|
|
213
|
+
[#2900](https://github.com/dsj1984/mandrel/issues/2900).
|