@kensaurus/skills 0.0.0-stage → 2.1.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/.claude-plugin/marketplace.json +53 -0
- package/.claude-plugin/plugin.json +40 -0
- package/.cursor-plugin/plugin.json +38 -0
- package/.mcp.json +28 -0
- package/CHANGELOG.md +1790 -0
- package/LICENSE +21 -0
- package/LICENSE-APACHE +62 -0
- package/NOTICE +13 -0
- package/README.md +821 -2
- package/SECURITY.md +55 -0
- package/agents/code-reviewer.md +60 -0
- package/agents/completion-judge.md +89 -0
- package/agents/db-migrator.md +125 -0
- package/agents/debugger.md +47 -0
- package/agents/deploy-checker.md +100 -0
- package/agents/perf-monitor.md +74 -0
- package/assets/favicon.png +0 -0
- package/assets/logo-light.png +0 -0
- package/assets/logo.png +0 -0
- package/assets/logo.svg +6 -0
- package/assets/og.png +0 -0
- package/bin/install.mjs +1127 -0
- package/bin/kenji.js +2 -0
- package/commands/adr.md +17 -0
- package/commands/aeo-plan.md +18 -0
- package/commands/arch-boundaries.md +17 -0
- package/commands/aso-plan.md +18 -0
- package/commands/auth-flows.md +19 -0
- package/commands/backup-plan.md +17 -0
- package/commands/burndown-full.md +25 -0
- package/commands/capacitor-plan.md +18 -0
- package/commands/codemod-safety.md +22 -0
- package/commands/commit.md +18 -0
- package/commands/complete-everything.md +40 -0
- package/commands/cost-plan.md +19 -0
- package/commands/deadcode-plan.md +26 -0
- package/commands/deadcode.md +32 -0
- package/commands/debug-issue.md +17 -0
- package/commands/deps-plan.md +18 -0
- package/commands/docs-plan.md +17 -0
- package/commands/doctrine.md +19 -0
- package/commands/error-plan.md +19 -0
- package/commands/feedback-to-closure.md +36 -0
- package/commands/fix-issue.md +76 -0
- package/commands/gate-logic.md +26 -0
- package/commands/green-repo.md +36 -0
- package/commands/grill-me.md +19 -0
- package/commands/gtm-plan.md +21 -0
- package/commands/gtm-weekly.md +17 -0
- package/commands/gtm.md +22 -0
- package/commands/handoff.md +15 -0
- package/commands/housekeep-backlog.md +18 -0
- package/commands/housekeep-files.md +22 -0
- package/commands/housekeep-gates.md +18 -0
- package/commands/instant-nav.md +11 -0
- package/commands/integrity-plan.md +19 -0
- package/commands/launch-kit.md +16 -0
- package/commands/mcp-guide.md +40 -0
- package/commands/mobile-plan.md +19 -0
- package/commands/native-rn-monorepo/README.md +78 -0
- package/commands/native-rn-monorepo/android-build.md +26 -0
- package/commands/native-rn-monorepo/android-install.md +32 -0
- package/commands/native-rn-monorepo/android-logcat.md +37 -0
- package/commands/native-rn-monorepo/ios-ci-logs.md +56 -0
- package/commands/native-rn-monorepo/ios-ci-status.md +52 -0
- package/commands/native-rn-monorepo/ios-ci-trigger.md +59 -0
- package/commands/native-rn-monorepo/rn-reset.md +50 -0
- package/commands/native-rn-monorepo/rn-ship-ios.md +67 -0
- package/commands/native-rn-monorepo/rn-verify.md +53 -0
- package/commands/perf-plan.md +18 -0
- package/commands/plan-mode.md +74 -0
- package/commands/pr.md +16 -0
- package/commands/pricing-plan.md +20 -0
- package/commands/privacy-plan.md +18 -0
- package/commands/readability.md +12 -0
- package/commands/readme.md +15 -0
- package/commands/refactor.md +15 -0
- package/commands/release-prep.md +17 -0
- package/commands/research.md +25 -0
- package/commands/responsive-audit.md +21 -0
- package/commands/review-code.md +18 -0
- package/commands/rls-plan.md +18 -0
- package/commands/secrets-plan.md +18 -0
- package/commands/security-plan.md +19 -0
- package/commands/ship-and-observe.md +36 -0
- package/commands/skill-conflicts.md +19 -0
- package/commands/slop-plan.md +18 -0
- package/commands/stub-plan.md +18 -0
- package/commands/test-mutation.md +16 -0
- package/commands/test-plan.md +17 -0
- package/commands/test.md +29 -0
- package/commands/thirdparty-web-interface-guidelines.md +185 -0
- package/commands/uiux-plan.md +18 -0
- package/commands/uiux.md +45 -0
- package/commands/update-deps.md +21 -0
- package/commands/validation-plan.md +19 -0
- package/commands-portable/fix-issue.md +72 -0
- package/commands-portable/plan-mode.md +92 -0
- package/commands-portable/research.md +91 -0
- package/docs/screenshots/README.md +5 -0
- package/docs/screenshots/audit-dark.png +0 -0
- package/docs/screenshots/build-dark.png +0 -0
- package/docs/screenshots/grill-dark.png +0 -0
- package/docs/screenshots/hero-dark.png +0 -0
- package/docs/screenshots/hero-light.png +0 -0
- package/docs/screenshots/ship-dark.png +0 -0
- package/docs/screenshots/src/showcase.html +320 -0
- package/hooks/completion-gate.mjs +258 -0
- package/hooks/cursor-hooks.json +13 -0
- package/hooks/hooks.json +15 -0
- package/install.sh +21 -0
- package/llms.txt +40 -0
- package/mcp/README.md +266 -0
- package/mcp/VERSIONS.md +41 -0
- package/mcp/mcp-full.json.template +124 -0
- package/mcp/mcp.json.template +29 -0
- package/mcp/pinned-versions.json +27 -0
- package/package.json +94 -4
- package/rules/approved-plan-execution.mdc +65 -0
- package/rules/full-stack-ship-discipline.mdc +37 -0
- package/rules/native-rn-monorepo/README.md +63 -0
- package/rules/native-rn-monorepo/_project.mdc +69 -0
- package/rules/native-rn-monorepo/native-android.mdc +72 -0
- package/rules/native-rn-monorepo/native-ios.mdc +61 -0
- package/rules/native-rn-monorepo/react-native-js.mdc +78 -0
- package/rules/native-rn-monorepo/web.mdc +60 -0
- package/rules/project-starter/components.mdc +54 -0
- package/rules/project-starter/data-fetching.mdc +77 -0
- package/rules/project-starter/git.mdc +41 -0
- package/rules/project-starter/supabase.mdc +37 -0
- package/rules/project-starter/tailwind.mdc +48 -0
- package/rules/project-starter/typescript.mdc +36 -0
- package/rules/project-starter/web-performance.mdc +42 -0
- package/rules/senior-engineer.mdc +30 -0
- package/rules/shell-first-search.mdc +19 -0
- package/rules/skill-workflows.mdc +35 -0
- package/rules/verification-before-completion.mdc +57 -0
- package/skills/audit-accessibility/SKILL.md +441 -0
- package/skills/audit-agent-speed/SKILL.md +181 -0
- package/skills/audit-agent-speed/scripts/stop-typecheck.mjs +151 -0
- package/skills/audit-analytics/SKILL.md +138 -0
- package/skills/audit-auth-flows/SKILL.md +267 -0
- package/skills/audit-backend-architecture/SKILL.md +266 -0
- package/skills/audit-backend-architecture/references/patterns.md +386 -0
- package/skills/audit-bundle-size/SKILL.md +295 -0
- package/skills/audit-cicd/SKILL.md +218 -0
- package/skills/audit-code-quality/SKILL.md +314 -0
- package/skills/audit-code-review/SKILL.md +289 -0
- package/skills/audit-codemod-safety/SKILL.md +159 -0
- package/skills/audit-db-schema/SKILL.md +465 -0
- package/skills/audit-db-schema/references/details.md +110 -0
- package/skills/audit-doctrine/SKILL.md +189 -0
- package/skills/audit-env-parity/SKILL.md +133 -0
- package/skills/audit-fe-api/SKILL.md +458 -0
- package/skills/audit-gate-logic/SKILL.md +219 -0
- package/skills/audit-i18n/SKILL.md +339 -0
- package/skills/audit-infra-cost/SKILL.md +142 -0
- package/skills/audit-langfuse-llm/SKILL.md +468 -0
- package/skills/audit-langfuse-llm/references/details.md +226 -0
- package/skills/audit-llm-security/SKILL.md +147 -0
- package/skills/audit-monetization-iap/SKILL.md +137 -0
- package/skills/audit-payment-system/SKILL.md +268 -0
- package/skills/audit-payment-system/references/checklist.md +283 -0
- package/skills/audit-performance/SKILL.md +383 -0
- package/skills/audit-performance/references/loading-priority-2026.md +81 -0
- package/skills/audit-realworld/SKILL.md +287 -0
- package/skills/audit-registry-listing/SKILL.md +122 -0
- package/skills/audit-resilience/SKILL.md +153 -0
- package/skills/audit-responsive/SKILL.md +221 -0
- package/skills/audit-responsive/references/checklist.md +166 -0
- package/skills/audit-security/SKILL.md +289 -0
- package/skills/audit-skill-conflicts/SKILL.md +178 -0
- package/skills/audit-ui-states/SKILL.md +146 -0
- package/skills/audit-uiux-design-system/SKILL.md +475 -0
- package/skills/audit-uiux-design-system/references/details.md +71 -0
- package/skills/audit-ux/SKILL.md +381 -0
- package/skills/audit-ux/references/details.md +245 -0
- package/skills/audit-ux-journeys/SKILL.md +215 -0
- package/skills/audit-ux-journeys/references/checklist.md +179 -0
- package/skills/backend-db-performance/SKILL.md +441 -0
- package/skills/backend-error-handling/SKILL.md +489 -0
- package/skills/backend-error-handling/references/details.md +58 -0
- package/skills/backend-observability/SKILL.md +88 -0
- package/skills/backend-patterns/SKILL.md +499 -0
- package/skills/backend-patterns/references/architecture-patterns.md +298 -0
- package/skills/backend-realtime/SKILL.md +403 -0
- package/skills/backend-realtime/references/patterns.md +74 -0
- package/skills/burndown-full/SKILL.md +174 -0
- package/skills/complete-everything/SKILL.md +295 -0
- package/skills/data-pipeline/SKILL.md +109 -0
- package/skills/data-visualization/SKILL.md +488 -0
- package/skills/debug-error/SKILL.md +322 -0
- package/skills/debug-fe-be-integration/SKILL.md +459 -0
- package/skills/debug-sentry-monitor/SKILL.md +497 -0
- package/skills/debug-sentry-monitor/references/details.md +165 -0
- package/skills/deploy-npm/SKILL.md +394 -0
- package/skills/deploy-npm/references/example-mushi-mushi.md +52 -0
- package/skills/deploy-verify/SKILL.md +489 -0
- package/skills/design-api/SKILL.md +379 -0
- package/skills/design-canvas/SKILL.md +155 -0
- package/skills/design-email/SKILL.md +370 -0
- package/skills/design-frontend/SKILL.md +143 -0
- package/skills/design-generative-art/SKILL.md +474 -0
- package/skills/design-mobile-first/SKILL.md +506 -0
- package/skills/design-motion/SKILL.md +333 -0
- package/skills/design-motion/references/delight-interactions.md +191 -0
- package/skills/design-prd/SKILL.md +443 -0
- package/skills/design-system/SKILL.md +457 -0
- package/skills/design-theme/SKILL.md +226 -0
- package/skills/design-theme/themes/tsumagoi-ranch.md +150 -0
- package/skills/docs-adr/SKILL.md +168 -0
- package/skills/docs-coauthor/SKILL.md +368 -0
- package/skills/docs-comparison-pages/SKILL.md +117 -0
- package/skills/docs-domain-modeling/SKILL.md +97 -0
- package/skills/docs-launch-kit/SKILL.md +139 -0
- package/skills/docs-writer/SKILL.md +469 -0
- package/skills/enhance-agent-guardrails/SKILL.md +164 -0
- package/skills/enhance-arch-boundaries/SKILL.md +154 -0
- package/skills/enhance-capacitor-ui/SKILL.md +463 -0
- package/skills/enhance-capacitor-ui/references/details.md +750 -0
- package/skills/enhance-email-deliverability/SKILL.md +143 -0
- package/skills/enhance-growth-loops/SKILL.md +122 -0
- package/skills/enhance-lifecycle-email/SKILL.md +130 -0
- package/skills/enhance-motion/SKILL.md +193 -0
- package/skills/enhance-onboarding/SKILL.md +148 -0
- package/skills/enhance-pwa/SKILL.md +303 -0
- package/skills/enhance-readability/SKILL.md +146 -0
- package/skills/enhance-readme/SKILL.md +496 -0
- package/skills/enhance-readme/package-lock.json +187 -0
- package/skills/enhance-readme/package.json +17 -0
- package/skills/enhance-readme/scripts/generate-readme-blocks.mjs +199 -0
- package/skills/enhance-readme/scripts/record-readme-tour.mjs +442 -0
- package/skills/enhance-skill-prompts/SKILL.md +167 -0
- package/skills/enhance-skill-prompts/references/exemplar-audit-auth-flows.md +311 -0
- package/skills/enhance-ux-laws/SKILL.md +409 -0
- package/skills/enhance-web-conversion/SKILL.md +155 -0
- package/skills/enhance-web-forms/SKILL.md +154 -0
- package/skills/enhance-web-instant-nav/SKILL.md +138 -0
- package/skills/enhance-web-instant-nav/references/bfcache-blockers.md +23 -0
- package/skills/enhance-web-instant-nav/references/early-hints.md +33 -0
- package/skills/enhance-web-instant-nav/references/speculation-rules.md +44 -0
- package/skills/enhance-web-landing/SKILL.md +459 -0
- package/skills/enhance-web-landing/references/details.md +773 -0
- package/skills/enhance-web-redesign/SKILL.md +228 -0
- package/skills/enhance-web-seo/SKILL.md +276 -0
- package/skills/enhance-web-ui/SKILL.md +473 -0
- package/skills/enhance-web-ui/references/details.md +674 -0
- package/skills/enhance-web-ux/HEURISTICS.md +248 -0
- package/skills/enhance-web-ux/PATTERNS.md +375 -0
- package/skills/enhance-web-ux/SKILL.md +464 -0
- package/skills/enhance-web-ux/examples.md +222 -0
- package/skills/enhance-web-ux/references/details.md +406 -0
- package/skills/enhance-web-web3d/SKILL.md +397 -0
- package/skills/enhance-web-web3d/references/css-canvas-effects.md +180 -0
- package/skills/handoff/SKILL.md +66 -0
- package/skills/housekeep-backlog/SKILL.md +149 -0
- package/skills/housekeep-dead-code/SKILL.md +387 -0
- package/skills/housekeep-dead-code/references/ratchet-ci.md +205 -0
- package/skills/housekeep-dead-code/references/supabase-hygiene.md +152 -0
- package/skills/housekeep-design/SKILL.md +207 -0
- package/skills/housekeep-files/SKILL.md +220 -0
- package/skills/housekeep-files/references/naming-and-catalog.md +86 -0
- package/skills/housekeep-files/scripts/housekeep-files.ps1 +360 -0
- package/skills/housekeep-files/scripts/housekeep-files.sh +238 -0
- package/skills/housekeep-gates/SKILL.md +174 -0
- package/skills/iterate-agent-harness/SKILL.md +137 -0
- package/skills/iterate-gtm-weekly/SKILL.md +103 -0
- package/skills/iterate-post-launch/SKILL.md +292 -0
- package/skills/meta-mcp-builder/SKILL.md +313 -0
- package/skills/meta-skill-creator/SKILL.md +304 -0
- package/skills/mobile-capacitor-platform/SKILL.md +103 -0
- package/skills/mobile-emulator-start/SKILL.md +296 -0
- package/skills/mobile-emulator-test/SKILL.md +491 -0
- package/skills/mobile-emulator-test/references/details.md +478 -0
- package/skills/mobile-rn-performance/SKILL.md +107 -0
- package/skills/mobile-rn-screen/SKILL.md +476 -0
- package/skills/mobile-rn-screen/references/details.md +785 -0
- package/skills/mushi-health/SKILL.md +206 -0
- package/skills/mushi-integration/SKILL.md +257 -0
- package/skills/plan-aeo-readiness/SKILL.md +166 -0
- package/skills/plan-antislop/SKILL.md +281 -0
- package/skills/plan-aso/SKILL.md +149 -0
- package/skills/plan-backup-dr/SKILL.md +131 -0
- package/skills/plan-capacitor-hardening/SKILL.md +217 -0
- package/skills/plan-data-integrity/SKILL.md +187 -0
- package/skills/plan-dead-code/SKILL.md +386 -0
- package/skills/plan-dead-code/references/knip-config.md +214 -0
- package/skills/plan-dead-code/references/output-templates.md +133 -0
- package/skills/plan-dead-code/references/preservation-contract.md +50 -0
- package/skills/plan-dead-code/references/residue-greps.md +84 -0
- package/skills/plan-dependency-provenance/SKILL.md +200 -0
- package/skills/plan-docs-sync/SKILL.md +143 -0
- package/skills/plan-docs-sync/references/drift-taxonomy.md +43 -0
- package/skills/plan-docs-sync/references/output-templates.md +33 -0
- package/skills/plan-docs-sync/references/preservation-contract.md +17 -0
- package/skills/plan-error-handling/SKILL.md +205 -0
- package/skills/plan-gtm/SKILL.md +276 -0
- package/skills/plan-gtm/references/benchmarks-2026.md +183 -0
- package/skills/plan-input-validation/SKILL.md +179 -0
- package/skills/plan-llm-cost-guardrails/SKILL.md +176 -0
- package/skills/plan-mobile-readiness/SKILL.md +171 -0
- package/skills/plan-perf-audit/SKILL.md +145 -0
- package/skills/plan-perf-audit/references/audit-scope.md +51 -0
- package/skills/plan-perf-audit/references/output-templates.md +33 -0
- package/skills/plan-perf-audit/references/preservation-contract.md +13 -0
- package/skills/plan-pricing/SKILL.md +173 -0
- package/skills/plan-privacy-compliance/SKILL.md +148 -0
- package/skills/plan-rls-audit/SKILL.md +231 -0
- package/skills/plan-secrets-audit/SKILL.md +181 -0
- package/skills/plan-security-audit/SKILL.md +168 -0
- package/skills/plan-security-audit/references/output-templates.md +36 -0
- package/skills/plan-security-audit/references/owasp-supabase-scope.md +55 -0
- package/skills/plan-security-audit/references/preservation-contract.md +18 -0
- package/skills/plan-stub-checker/SKILL.md +216 -0
- package/skills/plan-stub-checker/references/detection-methodology.md +75 -0
- package/skills/plan-stub-checker/references/detection-taxonomy.md +34 -0
- package/skills/plan-stub-checker/references/output-templates.md +63 -0
- package/skills/plan-stub-checker/references/preservation-contract.md +24 -0
- package/skills/plan-test-coverage/SKILL.md +170 -0
- package/skills/plan-test-coverage/references/methodology.md +54 -0
- package/skills/plan-test-coverage/references/output-templates.md +34 -0
- package/skills/plan-test-coverage/references/preservation-contract.md +15 -0
- package/skills/plan-uiux-unification/SKILL.md +230 -0
- package/skills/plan-uiux-unification/references/output-templates.md +67 -0
- package/skills/plan-uiux-unification/references/phase-workbook.md +85 -0
- package/skills/plan-uiux-unification/references/preservation-contract.md +24 -0
- package/skills/protocol-browser-anti-stall/SKILL.md +211 -0
- package/skills/protocol-browser-anti-stall/references/mcp-to-cli-map.md +113 -0
- package/skills/protocol-browser-anti-stall/references/playwright-session-coordination.md +170 -0
- package/skills/research/SKILL.md +422 -0
- package/skills/test-exploratory/SKILL.md +165 -0
- package/skills/test-exploratory/references/charter-template.md +29 -0
- package/skills/test-load/SKILL.md +126 -0
- package/skills/test-mutation/SKILL.md +160 -0
- package/skills/test-playwright/SKILL.md +354 -0
- package/skills/test-qa/SKILL.md +364 -0
- package/skills/test-qa/references/details.md +268 -0
- package/skills/test-red-team/SKILL.md +386 -0
- package/skills/test-red-team/references/owasp-attack-checklist.md +193 -0
- package/skills/test-unit/SKILL.md +259 -0
- package/skills/test-unit/references/details.md +267 -0
- package/skills/test-visual-regression/SKILL.md +132 -0
- package/skills/thirdparty-emil-design-eng/ATTRIBUTION.md +20 -0
- package/skills/thirdparty-emil-design-eng/SKILL.md +21 -0
- package/skills/thirdparty-emil-design-eng/references/emil-design-eng.md +676 -0
- package/skills/thirdparty-ui-ux-pro-max/ATTRIBUTION.md +22 -0
- package/skills/thirdparty-ui-ux-pro-max/SKILL.md +304 -0
- package/skills/thirdparty-ui-ux-pro-max/data/charts.csv +26 -0
- package/skills/thirdparty-ui-ux-pro-max/data/colors.csv +97 -0
- package/skills/thirdparty-ui-ux-pro-max/data/icons.csv +101 -0
- package/skills/thirdparty-ui-ux-pro-max/data/landing.csv +31 -0
- package/skills/thirdparty-ui-ux-pro-max/data/products.csv +97 -0
- package/skills/thirdparty-ui-ux-pro-max/data/react-performance.csv +45 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/skills/thirdparty-ui-ux-pro-max/data/styles.csv +68 -0
- package/skills/thirdparty-ui-ux-pro-max/data/typography.csv +58 -0
- package/skills/thirdparty-ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/skills/thirdparty-ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/skills/thirdparty-ui-ux-pro-max/data/web-interface.csv +31 -0
- package/skills/thirdparty-ui-ux-pro-max/scripts/core.py +253 -0
- package/skills/thirdparty-ui-ux-pro-max/scripts/design_system.py +1067 -0
- package/skills/thirdparty-ui-ux-pro-max/scripts/search.py +114 -0
- package/skills/thirdparty-web-interface-guidelines/ATTRIBUTION.md +23 -0
- package/skills/thirdparty-web-interface-guidelines/SKILL.md +190 -0
- package/skills/workflow-build-feature/SKILL.md +118 -0
- package/skills/workflow-coding-discipline/SKILL.md +140 -0
- package/skills/workflow-environment-ready/SKILL.md +128 -0
- package/skills/workflow-feature-flag/SKILL.md +262 -0
- package/skills/workflow-feedback-to-closure/SKILL.md +165 -0
- package/skills/workflow-fix-and-ship/SKILL.md +136 -0
- package/skills/workflow-git-commit/SKILL.md +200 -0
- package/skills/workflow-green-repo/SKILL.md +166 -0
- package/skills/workflow-grilling/SKILL.md +73 -0
- package/skills/workflow-gtm/SKILL.md +153 -0
- package/skills/workflow-housekeep/SKILL.md +453 -0
- package/skills/workflow-housekeep/references/templates.md +109 -0
- package/skills/workflow-launch-ready/SKILL.md +145 -0
- package/skills/workflow-merge-conflicts/SKILL.md +62 -0
- package/skills/workflow-onboard/SKILL.md +99 -0
- package/skills/workflow-parallel-agents/SKILL.md +164 -0
- package/skills/workflow-pr/SKILL.md +197 -0
- package/skills/workflow-quality-gate/SKILL.md +147 -0
- package/skills/workflow-refactor/SKILL.md +274 -0
- package/skills/workflow-release-prep/SKILL.md +207 -0
- package/skills/workflow-ship-and-observe/SKILL.md +164 -0
- package/skills/workflow-spec-tdd/SKILL.md +141 -0
- package/skills/workflow-spec-tdd/references/spec-template.md +126 -0
- package/skills/workflow-spec-tdd/references/tdd-patterns.md +167 -0
- package/skills-cursor/babysit/SKILL.md +17 -0
- package/skills-cursor/canvas/SKILL.md +142 -0
- package/skills-cursor/canvas/sdk/canvas-tokens.d.ts +235 -0
- package/skills-cursor/canvas/sdk/chart-primitives.d.ts +200 -0
- package/skills-cursor/canvas/sdk/dag-layout.d.ts +102 -0
- package/skills-cursor/canvas/sdk/diff-view.d.ts +130 -0
- package/skills-cursor/canvas/sdk/form-primitives.d.ts +194 -0
- package/skills-cursor/canvas/sdk/hooks.d.ts +117 -0
- package/skills-cursor/canvas/sdk/index.d.ts +47 -0
- package/skills-cursor/canvas/sdk/theme.d.ts +61 -0
- package/skills-cursor/canvas/sdk/todo-list.d.ts +49 -0
- package/skills-cursor/canvas/sdk/ui-primitives.d.ts +549 -0
- package/skills-cursor/canvas/sdk/ui-primitives.test.d.ts +2 -0
- package/skills-cursor/create-hook/SKILL.md +238 -0
- package/skills-cursor/create-rule/SKILL.md +185 -0
- package/skills-cursor/create-skill/SKILL.md +269 -0
- package/skills-cursor/create-skill/references/authoring-guide.md +182 -0
- package/skills-cursor/create-subagent/SKILL.md +228 -0
- package/skills-cursor/migrate-to-skills/SKILL.md +121 -0
- package/skills-cursor/shell/SKILL.md +22 -0
- package/skills-cursor/split-to-prs/SKILL.md +47 -0
- package/skills-cursor/statusline/SKILL.md +193 -0
- package/skills-cursor/update-cli-config/SKILL.md +85 -0
- package/skills-cursor/update-cursor-settings/SKILL.md +137 -0
- package/skills.sh.json +297 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Real-time Reference Patterns
|
|
2
|
+
|
|
3
|
+
Longer, copy-ready implementations for `backend-realtime`. Examples assume a
|
|
4
|
+
**Next.js App Router + Supabase** stack (`@/lib/supabase/client`, `'use client'`,
|
|
5
|
+
a `Message` row type). Adapt import paths and types to the detected stack.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Subscribe to Database Changes (`useRealtimeMessages`)
|
|
10
|
+
|
|
11
|
+
Initial fetch + INSERT/DELETE subscription for a chat room, with cleanup on
|
|
12
|
+
unmount.
|
|
13
|
+
|
|
14
|
+
```tsx
|
|
15
|
+
'use client'
|
|
16
|
+
import { useEffect, useState } from 'react'
|
|
17
|
+
import { createClient } from '@/lib/supabase/client'
|
|
18
|
+
|
|
19
|
+
export function useRealtimeMessages(roomId: string) {
|
|
20
|
+
const [messages, setMessages] = useState<Message[]>([])
|
|
21
|
+
const supabase = createClient()
|
|
22
|
+
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
// Initial fetch
|
|
25
|
+
const fetchMessages = async () => {
|
|
26
|
+
const { data } = await supabase
|
|
27
|
+
.from('messages')
|
|
28
|
+
.select('*')
|
|
29
|
+
.eq('room_id', roomId)
|
|
30
|
+
.order('created_at', { ascending: true })
|
|
31
|
+
|
|
32
|
+
if (data) setMessages(data)
|
|
33
|
+
}
|
|
34
|
+
fetchMessages()
|
|
35
|
+
|
|
36
|
+
// Subscribe to changes
|
|
37
|
+
const channel = supabase
|
|
38
|
+
.channel(`room:${roomId}`)
|
|
39
|
+
.on(
|
|
40
|
+
'postgres_changes',
|
|
41
|
+
{
|
|
42
|
+
event: 'INSERT',
|
|
43
|
+
schema: 'public',
|
|
44
|
+
table: 'messages',
|
|
45
|
+
filter: `room_id=eq.${roomId}`,
|
|
46
|
+
},
|
|
47
|
+
(payload) => {
|
|
48
|
+
setMessages((prev) => [...prev, payload.new as Message])
|
|
49
|
+
}
|
|
50
|
+
)
|
|
51
|
+
.on(
|
|
52
|
+
'postgres_changes',
|
|
53
|
+
{
|
|
54
|
+
event: 'DELETE',
|
|
55
|
+
schema: 'public',
|
|
56
|
+
table: 'messages',
|
|
57
|
+
filter: `room_id=eq.${roomId}`,
|
|
58
|
+
},
|
|
59
|
+
(payload) => {
|
|
60
|
+
setMessages((prev) =>
|
|
61
|
+
prev.filter((m) => m.id !== payload.old.id)
|
|
62
|
+
)
|
|
63
|
+
}
|
|
64
|
+
)
|
|
65
|
+
.subscribe()
|
|
66
|
+
|
|
67
|
+
return () => {
|
|
68
|
+
supabase.removeChannel(channel)
|
|
69
|
+
}
|
|
70
|
+
}, [roomId, supabase])
|
|
71
|
+
|
|
72
|
+
return messages
|
|
73
|
+
}
|
|
74
|
+
```
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: burndown-full
|
|
3
|
+
description: >
|
|
4
|
+
Drive a planned mechanical change to 100% repo coverage after a run stopped
|
|
5
|
+
early. Use when "finish the burndown", "it stopped halfway", "apply this
|
|
6
|
+
everywhere", or "half-migrated". One plan plus deferrals →
|
|
7
|
+
complete-everything.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Burndown Full
|
|
11
|
+
|
|
12
|
+
**Degree of freedom: MIXED.** Signature and batch sizing `[HIGH freedom]`;
|
|
13
|
+
from-scratch re-search and the zero-hit gate `[LOW freedom — run exactly]`.
|
|
14
|
+
|
|
15
|
+
## How to reason
|
|
16
|
+
|
|
17
|
+
1. **Observe** — the old pattern's remaining hits from a fresh search
|
|
18
|
+
2. **Interpret** — planned files vs the real blast radius (tests, barrels, stories)
|
|
19
|
+
3. **Classify** — still-old / already-new / false-positive
|
|
20
|
+
4. **Severity** — leftover production call sites outrank a comment in CHANGELOG
|
|
21
|
+
|
|
22
|
+
## Worked example
|
|
23
|
+
|
|
24
|
+
> **Observe:** plan listed 8 files; fresh `rg Button2` finds 14 (plus a story and a re-export).
|
|
25
|
+
> **Interpret:** the plan was a hypothesis; barrels were missed.
|
|
26
|
+
> **Classify:** 6 extra call sites still-old; CHANGELOG mention is false-positive.
|
|
27
|
+
> **Done:** re-search → 0 real hits; typecheck/lint/tests green.
|
|
28
|
+
|
|
29
|
+
## Self-critique before reporting
|
|
30
|
+
|
|
31
|
+
- **Fresh search** — done is zero hits from scratch, not memory
|
|
32
|
+
- **Plan is not the boundary** — extras were appended, not ignored
|
|
33
|
+
- **No skip** — tests/stories/re-exports burned down too
|
|
34
|
+
- **Right owner** — one approved plan + deferrals → `complete-everything`; inventory → `housekeep-backlog`
|
|
35
|
+
|
|
36
|
+
## What problem this solves
|
|
37
|
+
|
|
38
|
+
A coding agent is given a plan, generates it, starts executing, and then **stops before the change is actually complete across the codebase**. The user is left with a half-migrated repo. This is not a motivation problem — it is a well-documented set of failure modes in long-horizon LLM agents:
|
|
39
|
+
|
|
40
|
+
- **Compaction.** Long runs get compacted; anything that lived only in the transcript — including "what's left to do" — is gone afterwards. The remaining work has to live in a file.
|
|
41
|
+
- **Premature termination.** When tool outputs and history get pruned or summarized to save context, agents lose task-level awareness ("how many items remain, am I near done?") and declare completion early. The fix shown in the research is to keep a *condensed, persistent record of remaining work* visible at all times.
|
|
42
|
+
- **Plan-as-boundary error.** A plan is a *hypothesis* about scope produced before the repo was fully explored. The real set of affected files is almost always larger than the plan's list (barrels, tests, stories, configs, re-exports, dynamic usages). Treating the plan's file list as the boundary guarantees an incomplete burndown.
|
|
43
|
+
|
|
44
|
+
The countermeasures below are drawn from how robust coding agents (Claude Code's TodoWrite, etc.) actually achieve reliable completion: **enumerate before executing, externalize the worklist to a file so it survives context truncation, work in small focused batches, and define "done" by a fresh verification pass rather than by the agent's memory.**
|
|
45
|
+
|
|
46
|
+
## The core principle
|
|
47
|
+
|
|
48
|
+
> **The plan is a starting hypothesis about scope, never the limit of scope. Memory is not a source of truth — a fresh repo-wide search is. You are not done when the planned files are edited; you are done when a from-scratch search for the old pattern returns zero, and the whole project type-checks, lints, and tests clean.**
|
|
49
|
+
|
|
50
|
+
Internalize this loop: **enumerate → batch-execute → persist progress → verify from scratch → if anything remains, loop.** Never exit the loop on a feeling of completion.
|
|
51
|
+
|
|
52
|
+
Repo-wide parked-work inventory (every plan, TODO, skip, open finding) is
|
|
53
|
+
`housekeep-backlog`. This skill burns down **one** mechanical change.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Phase 0 — Recover and pin down the change
|
|
58
|
+
|
|
59
|
+
Reconstruct, in one precise sentence, what the change actually is. Pull from:
|
|
60
|
+
- the plan file or prior conversation (if arguments reference a plan/path, read it fully first);
|
|
61
|
+
- what's already been applied: `git diff`, `git diff --staged`, `git log --oneline -15`, `git status`.
|
|
62
|
+
|
|
63
|
+
Then convert the change into a **machine-checkable signature** — the concrete pattern(s) that distinguish "still needs changing" from "already changed." Define both explicitly:
|
|
64
|
+
|
|
65
|
+
- **MATCH** = the pattern that marks code still needing the change (the *remaining-work* signal).
|
|
66
|
+
- **DONE** = the pattern that marks code already migrated (so you never redo or thrash).
|
|
67
|
+
|
|
68
|
+
Examples of (MATCH → DONE):
|
|
69
|
+
- old import path → new import path
|
|
70
|
+
- `TWEEN_*` constant names → `SPRING_PHYSICS_*`
|
|
71
|
+
- deprecated `<OldButton>` / `useOldHook` → replacement
|
|
72
|
+
- old API/prop signature → new signature
|
|
73
|
+
- a lint/style rule violation → its corrected form
|
|
74
|
+
|
|
75
|
+
**If the change cannot be expressed as a searchable pattern (grep / structural / AST), STOP and say so.** Ask the user to make the criterion concrete, or agree on a per-file judgment checklist instead. Proceeding on "vibes" is the exact thing that causes the early stop — verification by search is what makes a full burndown provable. Do not skip this.
|
|
76
|
+
|
|
77
|
+
Also discover the project's **verification commands** up front (don't assume them):
|
|
78
|
+
- Look in `package.json` scripts, `Makefile`, `justfile`, `README`, `AGENTS.md`/`CLAUDE.md`, CI config.
|
|
79
|
+
- Identify: typecheck (e.g. `tsc --noEmit`), lint, test, build. Note the exact commands. If none exist, say so — verification will rely on search + build only.
|
|
80
|
+
|
|
81
|
+
## Phase 1 — Enumerate the FULL worklist before editing anything
|
|
82
|
+
|
|
83
|
+
Run an exhaustive, repo-wide search for MATCH. **Search the whole repo, not the plan's file list.** Cast wide with ripgrep; include every plausibly relevant extension and location:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
rg -n --hidden \
|
|
87
|
+
-g '!node_modules' -g '!.git' -g '!dist' -g '!build' -g '!.next' -g '!coverage' -g '!*.lock' \
|
|
88
|
+
-e '<MATCH_PATTERN>'
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Deliberately hunt the categories plans habitually miss:
|
|
92
|
+
- barrel / index files and re-exports (`export * from`, `export { X } from`)
|
|
93
|
+
- aliased and namespace imports (`import { X as Y }`, `import * as M`)
|
|
94
|
+
- string-literal and dynamic usages, template strings, config keys
|
|
95
|
+
- tests, snapshots, fixtures, mocks, stories (`*.stories.*`), e2e
|
|
96
|
+
- type definitions (`*.d.ts`), generated types
|
|
97
|
+
- config files (`*.config.*`, `.env*`, CI yaml), scripts, docs/README
|
|
98
|
+
- comments and JSDoc, if the change semantically requires them
|
|
99
|
+
|
|
100
|
+
If MATCH is multi-form (e.g. a symbol imported several ways), run a query per form and union the results. Don't trust a single grep to capture every flavor.
|
|
101
|
+
|
|
102
|
+
**Write the result to a durable checklist file: `.cursor/burndown-state.md`.** This file is your working memory; it must survive context truncation. One line per (file + occurrence/role). Format:
|
|
103
|
+
|
|
104
|
+
```md
|
|
105
|
+
# Burndown: <one-sentence change definition>
|
|
106
|
+
MATCH: <pattern>
|
|
107
|
+
DONE: <pattern>
|
|
108
|
+
Verify: typecheck=`<cmd>` lint=`<cmd>` test=`<cmd>` build=`<cmd>`
|
|
109
|
+
Total occurrences found: N across M files
|
|
110
|
+
Plan originally named: P files
|
|
111
|
+
|
|
112
|
+
## Worklist
|
|
113
|
+
- [ ] src/components/Button.tsx:42 — direct usage
|
|
114
|
+
- [ ] src/index.ts — barrel re-export
|
|
115
|
+
- [ ] src/components/Button.stories.tsx — story + snapshot
|
|
116
|
+
- [ ] tests/button.test.tsx:17 — assertion references old name
|
|
117
|
+
...
|
|
118
|
+
|
|
119
|
+
## Exceptions (intentionally NOT changed — justify each)
|
|
120
|
+
- (none yet)
|
|
121
|
+
|
|
122
|
+
## Newly discovered during execution (append here, then work them)
|
|
123
|
+
- (none yet)
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**State the totals out loud to the user**: "Found N occurrences across M files; the original plan named only P. I'll burn down all N." Announcing the full count up front commits you to the real scope and makes any later shortfall visible. Also create the equivalent native task list (TodoWrite / Cursor task list) so progress is visible in the UI — but `.cursor/burndown-state.md` is the source of truth because it persists.
|
|
127
|
+
|
|
128
|
+
## Phase 2 — Execute in small batches, persisting progress every batch
|
|
129
|
+
|
|
130
|
+
Work the checklist top-to-bottom in small batches (5–10 files is a good default) so every batch is ticked in the state file before the next starts. For each batch:
|
|
131
|
+
|
|
132
|
+
1. Apply the change to those files. Prefer mechanical, pattern-driven edits so coverage is verifiable rather than judgment-based. Keep edits minimal and consistent with DONE.
|
|
133
|
+
2. **Immediately** flip those lines `[ ]` → `[x]` in `.cursor/burndown-state.md`. Do the bookkeeping per-batch, never deferred — if context is truncated mid-run, an un-ticked completed item is lost work and a ticked incomplete item is a false "done."
|
|
134
|
+
3. Run a fast scoped check on just the touched files if cheap (lint/typecheck the batch). Fix what you broke before moving on.
|
|
135
|
+
4. If you discover new occurrences while editing (a usage the grep missed, a follow-on file), **append them to the "Newly discovered" section** and include them in the burndown — do not silently absorb or skip them.
|
|
136
|
+
|
|
137
|
+
Do not stop between batches to ask "should I continue?" — continue until the worklist is exhausted. Compaction may happen mid-run; after any compaction, re-read `.cursor/burndown-state.md` to recover the remaining list rather than trusting memory. A long run is not a reason to wrap up.
|
|
138
|
+
|
|
139
|
+
## Phase 3 — Prove completeness (the anti-stop gate)
|
|
140
|
+
|
|
141
|
+
Report done only when every check below passes — completion is defined by verification, not by the sense of having finished.
|
|
142
|
+
|
|
143
|
+
1. **Fresh from-scratch search.** Re-run the Phase 1 `rg` for MATCH across the entire repo *as if starting over*. Expected: **zero** hits, except items explicitly listed under Exceptions (each justified). Any new hit → add to worklist, return to Phase 2.
|
|
144
|
+
2. **Orphan sweep.** Search for things that must move *with* the change: barrel exports, type defs, tests, stories, mocks, docs referencing the old form. A migrated component whose test/story/snapshot still references the old form is **not** done.
|
|
145
|
+
3. **Whole-project typecheck** (not just touched files), e.g. `tsc --noEmit`. New errors reveal remaining work.
|
|
146
|
+
4. **Lint the repo.** Unused-import / unresolved-import / no-undef errors frequently expose half-finished migrations.
|
|
147
|
+
5. **Run the test suite** (or at least the affected projects). Update snapshots only where the change legitimately changes output; never blanket-update to hide regressions.
|
|
148
|
+
6. **Build** if there's a build step.
|
|
149
|
+
7. **Checklist is clean:** zero `[ ]` lines remain in `.cursor/burndown-state.md`.
|
|
150
|
+
|
|
151
|
+
If any check surfaces new occurrences or failures, **add them to the checklist and loop back to Phase 2.** Repeat the gate until a fresh search is clean and all configured checks pass. The loop terminates on verified emptiness, not on effort spent.
|
|
152
|
+
|
|
153
|
+
## Phase 4 — Report and clean up
|
|
154
|
+
|
|
155
|
+
Produce a concise final report:
|
|
156
|
+
|
|
157
|
+
- **Change applied:** one sentence.
|
|
158
|
+
- **Coverage:** N occurrences across M files completed. **Call out the (M − P) files the original plan missed** — this is the value the burndown added.
|
|
159
|
+
- **Verification results:** `rg <MATCH>` → 0 hits; typecheck → clean; lint → clean; tests → pass; build → ok. Show the actual commands and outcomes.
|
|
160
|
+
- **Intentional exceptions:** each file left unchanged, with reason.
|
|
161
|
+
- **Genuine ambiguities for a human:** anything you could not resolve mechanically. Surface these explicitly — never silently skip an occurrence to reach a clean number.
|
|
162
|
+
|
|
163
|
+
Leave `.cursor/burndown-state.md` in place (fully ticked) as an audit trail unless the user asks to delete it, and keep it out of the commit. Suggest committing the change as one reviewable unit, or splitting mechanical vs. judgment edits into separate commits if that aids review.
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## Operating principles (keep these in working memory)
|
|
168
|
+
|
|
169
|
+
- The plan is a hypothesis about scope; the repo is bigger than the plan and bigger than what you remember of it.
|
|
170
|
+
- The checklist file is your memory; the fresh grep is your source of truth. When they disagree, the grep wins.
|
|
171
|
+
- "I edited the files in the plan" is **not** completion. "A from-scratch search for the old pattern returns zero and the project checks clean" is completion.
|
|
172
|
+
- Whether this MATCH/DONE ratchet itself can be gamed (DONE without evidence, count going down) is `audit-gate-logic`. Whether the transform preserved behavior is `audit-codemod-safety`.
|
|
173
|
+
- Work in small batches and persist progress every batch, so a truncated context never costs progress.
|
|
174
|
+
- Your turn ends in one of two shapes: the Phase 4 report after the gate passed, or a precise statement of what is left and why you cannot resolve it (a genuine ambiguity needing a human decision, or a verification failure you cannot repair). It does not end with "should I continue?", with a summary of the remaining batches, with "I'll pick this up next", or with a partial batch ticked as done. Before ending your turn, read your last paragraph: if it describes work you could do now, do it.
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: complete-everything
|
|
3
|
+
description: >
|
|
4
|
+
Closure mode for one approved plan: finish every open item and connected
|
|
5
|
+
deferral, verify each acceptance criterion, require completion-judge PASS.
|
|
6
|
+
Use when "complete everything", "don't defer", "fix out of scope too", or a
|
|
7
|
+
plan was falsely marked done.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Complete Everything
|
|
11
|
+
|
|
12
|
+
**Degree of freedom: MIXED.** Relevance of parked items `[HIGH freedom]`;
|
|
13
|
+
state-file ticks, verification ladder, and completion-judge
|
|
14
|
+
`[LOW freedom — run exactly]`.
|
|
15
|
+
|
|
16
|
+
## How to reason
|
|
17
|
+
|
|
18
|
+
1. **Observe** — plan items, parked quotes, git diff, baseline failures
|
|
19
|
+
2. **Interpret** — connected to the approved goal vs explicit non-goal
|
|
20
|
+
3. **Classify** — plan / previously-parked / discovered / human-gate
|
|
21
|
+
4. **Severity** — an unchecked acceptance criterion blocks the report
|
|
22
|
+
|
|
23
|
+
## Worked example
|
|
24
|
+
|
|
25
|
+
> **Observe:** plan shipped the UI; "out of scope" noted the RLS migration file; live API 404s.
|
|
26
|
+
> **Interpret:** the parked migration is connected — the UI cannot work without it.
|
|
27
|
+
> **Classify:** previously-parked now in scope; deploy+verify the RPC.
|
|
28
|
+
> **Done:** state file ticked with evidence; completion-judge PASS.
|
|
29
|
+
|
|
30
|
+
## Self-critique before reporting
|
|
31
|
+
|
|
32
|
+
- **Evidence** — every tick cites a fresh command/result
|
|
33
|
+
- **No deferral language** — connected parked work was closed, not restated
|
|
34
|
+
- **Judge** — `completion-judge` ran; CONTINUE loops back
|
|
35
|
+
- **Right owner** — one mechanical pattern → `burndown-full`; dirty-tree PR → `workflow-release-prep`
|
|
36
|
+
|
|
37
|
+
## Completion contract
|
|
38
|
+
|
|
39
|
+
Drive the approved outcome through implementation, repair, and verification in
|
|
40
|
+
one continuous run. Do not stop at phase boundaries or ask whether to continue.
|
|
41
|
+
Do not claim success from memory, compilation alone, or the original plan's
|
|
42
|
+
checkboxes.
|
|
43
|
+
|
|
44
|
+
The **closure set** contains:
|
|
45
|
+
|
|
46
|
+
- every unfinished or partially finished plan item;
|
|
47
|
+
- every `out of scope`, follow-up, optional, nice-to-have, or future-work item
|
|
48
|
+
parked by the plan or prior completion report that is materially connected to
|
|
49
|
+
the approved goal;
|
|
50
|
+
- every defect, missing test, contract mismatch, or regression discovered in
|
|
51
|
+
the affected blast radius;
|
|
52
|
+
- every failure introduced by the work or blocking proof of the outcome.
|
|
53
|
+
|
|
54
|
+
This is not permission for unrelated repository-wide cleanup. Do not silently
|
|
55
|
+
reopen explicit user non-goals, rejected features, or unrelated pre-existing
|
|
56
|
+
debt. Record those as baseline context, not closure items. If relevance is
|
|
57
|
+
unclear, decide from the approved user outcome; ask only when the answer would
|
|
58
|
+
materially change product behavior.
|
|
59
|
+
|
|
60
|
+
Only these may block execution:
|
|
61
|
+
|
|
62
|
+
- missing credentials, access, or a real endpoint/contract;
|
|
63
|
+
- destructive production-data operations or irreversible external actions;
|
|
64
|
+
- auth behavior, RLS semantics, secrets, payments, destructive data mutation,
|
|
65
|
+
or an unconfirmed deployment target where project rules require approval;
|
|
66
|
+
- a genuine product decision with materially different valid outcomes.
|
|
67
|
+
|
|
68
|
+
Ask one precise question immediately when blocked. Effort, context length, an
|
|
69
|
+
uncertain implementation approach, or a failing test are not blockers.
|
|
70
|
+
Your turn ends in one of two shapes: the Phase 4 report after completion-judge PASS, or a single precise question on a real blocker. It does not end with "should I continue?", with a summary of the remaining items, with "I'll pick this up next", or with a partial ladder run. Before ending your turn, read your last paragraph: if it describes work you could do now, do it.
|
|
71
|
+
|
|
72
|
+
## Phase 0 — Recover scope and establish a baseline
|
|
73
|
+
|
|
74
|
+
1. Read the full plan, including appendices, exclusions, acceptance criteria,
|
|
75
|
+
and checked items. If no path is supplied, inspect `.cursor/plans/`, the
|
|
76
|
+
conversation, and recent plan/report files.
|
|
77
|
+
2. Read the prior completion report or chat summary. Search plan and report
|
|
78
|
+
text for parked work:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
rg -n -i \
|
|
82
|
+
'out of scope|follow[- ]?up|nice to have|later|defer(red)?|skip(ped)?|not in this (pr|pass|phase)|left as|TODO|FIXME|won.t do|optional|future work|beyond scope' \
|
|
83
|
+
<plan-and-report-paths>
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
3. Inspect `git status`, staged and unstaged diffs, and recent commits. Do not
|
|
87
|
+
overwrite unrelated user work.
|
|
88
|
+
4. Discover exact verification commands from manifests, CI, `AGENTS.md`,
|
|
89
|
+
`CLAUDE.md`, README files, Makefiles, or equivalent project tooling.
|
|
90
|
+
5. Run the cheapest representative baseline checks before editing when
|
|
91
|
+
practical. Record pre-existing failures so later results distinguish
|
|
92
|
+
regressions from baseline debt.
|
|
93
|
+
6. Convert every closure item into an observable acceptance statement: what a
|
|
94
|
+
user can do, which contract holds, or which test/command proves it.
|
|
95
|
+
|
|
96
|
+
Announce: **"Closing N items (P planned + D previously parked + G discovered).
|
|
97
|
+
No plan-related deferrals this run."**
|
|
98
|
+
|
|
99
|
+
## Phase 1 — Externalize the work
|
|
100
|
+
|
|
101
|
+
Create `.cursor/complete-everything-state.md` as the durable source of truth:
|
|
102
|
+
|
|
103
|
+
```md
|
|
104
|
+
# Complete Everything: <approved outcome>
|
|
105
|
+
Plan: <path or conversation>
|
|
106
|
+
Baseline: <commands and pre-existing failures>
|
|
107
|
+
Verify: typecheck=`...` lint=`...` test=`...` build=`...` e2e=`...|none`
|
|
108
|
+
|
|
109
|
+
## Plan items
|
|
110
|
+
- [ ] <item> — acceptance: <observable proof>
|
|
111
|
+
|
|
112
|
+
## Previously parked — now in scope
|
|
113
|
+
- [ ] <item> — parked as: "<short quote>" — acceptance: <proof>
|
|
114
|
+
|
|
115
|
+
## Discovered while closing
|
|
116
|
+
- [ ] <item> — source: <test/diff/runtime/review> — acceptance: <proof>
|
|
117
|
+
|
|
118
|
+
## Human gates
|
|
119
|
+
- [ ] <item> — blocked by: <real blocker> — question: <one precise ask>
|
|
120
|
+
|
|
121
|
+
## Verification ladder
|
|
122
|
+
- [ ] changed-file diagnostics
|
|
123
|
+
- [ ] typecheck
|
|
124
|
+
- [ ] lint
|
|
125
|
+
- [ ] focused unit/integration tests
|
|
126
|
+
- [ ] related/full tests
|
|
127
|
+
- [ ] API contract verification (if applicable)
|
|
128
|
+
- [ ] build (if configured)
|
|
129
|
+
- [ ] real user-flow smoke (if applicable)
|
|
130
|
+
- [ ] independent completion judge
|
|
131
|
+
|
|
132
|
+
## Evidence and decisions
|
|
133
|
+
- <timestamp or milestone>: <command/result or decision/rationale>
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
A ladder rung the repo cannot run (no typecheck, no build, no UI) is written
|
|
137
|
+
`- [-] <rung> — n/a: <evidence it is absent>` when the Phase 0 baseline shows
|
|
138
|
+
it is missing. `[-]` means not applicable, never passed. The Stop hook skips a
|
|
139
|
+
`[-]` line only when it carries an `n/a:` reason, and completion-judge checks
|
|
140
|
+
that reason.
|
|
141
|
+
|
|
142
|
+
Mirror the milestones in the runtime's native task list when available. The
|
|
143
|
+
state file wins after context compaction: re-read it before each milestone and
|
|
144
|
+
before any completion claim.
|
|
145
|
+
|
|
146
|
+
### Arm host-level continuation
|
|
147
|
+
|
|
148
|
+
Instruction text alone cannot reliably prevent premature stops. Use the host's
|
|
149
|
+
continuation mechanism in addition to the state file:
|
|
150
|
+
|
|
151
|
+
- **Cursor and Claude Code:** the packaged Stop hook reads
|
|
152
|
+
`.cursor/complete-everything-state.md` and continues the turn only while
|
|
153
|
+
actionable unchecked items remain. It ignores completed states, errored or
|
|
154
|
+
aborted turns, human-gate-only states, items marked
|
|
155
|
+
`blocked by: <who or what>`, and a state file untouched for 24 hours. Each
|
|
156
|
+
conversation gets three follow-ups while none of the items it saw closes;
|
|
157
|
+
closing one restores them, and another agent's edits neither spend nor
|
|
158
|
+
reset them. The counter lives outside the repo, in
|
|
159
|
+
`~/.cache/kenji/completion-gate/`. Claude Code labels each block
|
|
160
|
+
"Stop hook error occurred" — that is the gate working, not a failure. If
|
|
161
|
+
hooks are disabled, continue manually from the state file; do not lower
|
|
162
|
+
the completion contract.
|
|
163
|
+
- **Claude Code 2.1.139+:** start the run with:
|
|
164
|
+
|
|
165
|
+
```text
|
|
166
|
+
/goal All actionable items in .cursor/complete-everything-state.md are checked, every applicable verification gate has fresh passing evidence after the final edit, and completion-judge returns PASS at the claimed completion level.
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
`/goal` supplies an independent per-turn evaluator. The state file remains
|
|
170
|
+
the auditable source of truth. If `/goal` is unavailable or hooks are
|
|
171
|
+
disabled, continue the same workflow without pretending the evaluator ran.
|
|
172
|
+
|
|
173
|
+
## Phase 2 — Close every item
|
|
174
|
+
|
|
175
|
+
Work in small, independently verifiable milestones. For each item:
|
|
176
|
+
|
|
177
|
+
1. Mark it in progress in the native task list; keep it unchecked in the state
|
|
178
|
+
file until its acceptance evidence exists.
|
|
179
|
+
2. Read the relevant implementation and tests. Preserve existing public
|
|
180
|
+
behavior unless the approved plan explicitly changes it.
|
|
181
|
+
3. Implement the root-cause fix with surgical edits — change the lines the fix needs, not whole files. Do not delete features, narrow behavior, weaken tests, blanket-update snapshots, or silence errors to get green.
|
|
182
|
+
4. Add or update tests whenever behavior, contracts, or error handling change.
|
|
183
|
+
5. Run the cheapest focused validation. Repair failures before moving on.
|
|
184
|
+
6. Append newly discovered connected work to **Discovered while closing** and
|
|
185
|
+
close it in this run. Never hide it in the final report as a follow-up.
|
|
186
|
+
7. Tick the item only after recording its evidence.
|
|
187
|
+
|
|
188
|
+
If the approach is uncertain, use the `research` skill, record the decision and
|
|
189
|
+
source, then implement. Delegate to a subagent only a sizeable, independent track — a read-only inventory, a test run whose output you do not need in your context, or parallel verification — never a handful of tool calls. Brief it once with everything it needs, launch independent subagents in one message, and keep the closure set and integration in the main agent.
|
|
190
|
+
|
|
191
|
+
### Required routing by change signal
|
|
192
|
+
|
|
193
|
+
- **Searchable migration or rename remains:** use `burndown-full` for the
|
|
194
|
+
mechanical sweep, then return here for behavioral verification.
|
|
195
|
+
- **Behavior changed or coverage is missing:** use `test-unit`; tests must be
|
|
196
|
+
capable of failing for the regression.
|
|
197
|
+
- **API clients, routes, RPCs, webhooks, request/response types changed:** use
|
|
198
|
+
`audit-fe-api`; fix every mismatch in the affected contract.
|
|
199
|
+
- **4xx/5xx, validation, serialization, CORS, or FE/BE drift appears:** use
|
|
200
|
+
`debug-fe-be-integration` and verify both sides.
|
|
201
|
+
- **UI flow changed:** use `test-playwright` with
|
|
202
|
+
`protocol-browser-anti-stall`; drive the real touched flow and fix failures.
|
|
203
|
+
- **Fetching, polling, realtime, lists, images, or heavy rendering changed:**
|
|
204
|
+
measure the affected path and use `audit-performance` when evidence shows a
|
|
205
|
+
performance gap. Optimize the root cause; do not add speculative complexity.
|
|
206
|
+
- **Schema, RPC, edge function, RLS, bucket, secret, or cron changed:** obey
|
|
207
|
+
`full-stack-ship-discipline`; keep local migration/config artifacts aligned
|
|
208
|
+
with the verified target environment and honor protected-surface approvals.
|
|
209
|
+
|
|
210
|
+
## Phase 3 — Full post-enhancement verification
|
|
211
|
+
|
|
212
|
+
Completion requires fresh evidence from this run. Execute every applicable step
|
|
213
|
+
in this order:
|
|
214
|
+
|
|
215
|
+
1. Re-read the state file. Zero closure items may remain unchecked. A human gate
|
|
216
|
+
means the run is **blocked**, not complete.
|
|
217
|
+
2. Review the full diff against the plan, parked-item inventory, acceptance
|
|
218
|
+
statements, and repository conventions.
|
|
219
|
+
3. Run diagnostics on changed files and fix introduced issues.
|
|
220
|
+
4. Run the configured whole-project or affected-package typecheck.
|
|
221
|
+
5. Run lint/format checks using the repository's commands.
|
|
222
|
+
6. Run focused unit/integration tests, then the related or full suite required
|
|
223
|
+
by the blast radius.
|
|
224
|
+
7. Run API/FE-BE/runtime truth checks when those surfaces changed. Verify remote
|
|
225
|
+
backend objects and client roles when required.
|
|
226
|
+
8. Run the build when configured.
|
|
227
|
+
9. For user-facing changes, drive the real flow in a headed browser or the
|
|
228
|
+
repository's platform-appropriate E2E harness. Confirm UI, console, network,
|
|
229
|
+
persistence, and error states.
|
|
230
|
+
10. Re-run any gate invalidated by a later fix.
|
|
231
|
+
11. Invoke the `completion-judge` subagent with the approved outcome, state-file
|
|
232
|
+
path, relevant diff range, baseline, and fresh command/runtime evidence.
|
|
233
|
+
- `PASS` permits the closure report at the judge's claimable level.
|
|
234
|
+
- `CONTINUE` adds every finding to the state file and returns to Phase 2.
|
|
235
|
+
- `BLOCKED` records the precise human gate; it is not completion.
|
|
236
|
+
|
|
237
|
+
On failure: diagnose, add the repair to the state file, fix it, and restart from
|
|
238
|
+
the failed gate. Never report "known failure, ship anyway." If a whole-project
|
|
239
|
+
gate failed before the run, fix it when connected to the closure set or when it
|
|
240
|
+
blocks proof; otherwise report the unchanged baseline failure separately
|
|
241
|
+
without mislabeling the plan closure as a fully green repository.
|
|
242
|
+
|
|
243
|
+
## Phase 4 — Evidence-only closure
|
|
244
|
+
|
|
245
|
+
Use this structure:
|
|
246
|
+
|
|
247
|
+
```md
|
|
248
|
+
## Complete Everything — report
|
|
249
|
+
|
|
250
|
+
**Goal:** <approved outcome>
|
|
251
|
+
**Closed:** N planned + D previously parked + G discovered
|
|
252
|
+
**Blocked on you:** none | <real blocker and one precise question>
|
|
253
|
+
|
|
254
|
+
### Evidence
|
|
255
|
+
- diagnostics: `<tool/command>` → <result>
|
|
256
|
+
- typecheck: `<command>` → <result>
|
|
257
|
+
- lint: `<command>` → <result>
|
|
258
|
+
- tests: `<command>` → <result>
|
|
259
|
+
- API / FE-BE: ran / n/a — <result>
|
|
260
|
+
- performance: measured / n/a — <result>
|
|
261
|
+
- build: `<command>` → <result>
|
|
262
|
+
- user flow: `<flow>` → <result>
|
|
263
|
+
- completion judge: `PASS` — claimable level: <level>
|
|
264
|
+
|
|
265
|
+
### Baseline unrelated failures
|
|
266
|
+
- none | <failure that existed before and why it is outside the closure set>
|
|
267
|
+
|
|
268
|
+
### Intentionally unchanged
|
|
269
|
+
- none | <explicit user non-goal or protected human gate>
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
Forbidden success language: "left as follow-up", "out of scope for now", "can
|
|
273
|
+
be done later", "should work", "probably fine", or any claim unsupported by
|
|
274
|
+
fresh evidence.
|
|
275
|
+
|
|
276
|
+
Leave `.cursor/complete-everything-state.md` fully ticked as the audit trail
|
|
277
|
+
unless the user asks to remove it.
|
|
278
|
+
|
|
279
|
+
## Relationship to other workflows
|
|
280
|
+
|
|
281
|
+
- `complete-everything` closes plan intent, parked work, behavior, and evidence.
|
|
282
|
+
- `housekeep-backlog` inventories parked work across the repo into
|
|
283
|
+
`BACKLOG.md`; this skill executes one approved plan from that register
|
|
284
|
+
(or from a named plan file).
|
|
285
|
+
- `burndown-full` proves repo-wide mechanical pattern coverage.
|
|
286
|
+
- `workflow-quality-gate` assesses release readiness; it does not replace this
|
|
287
|
+
implementation loop.
|
|
288
|
+
- `verification-before-completion` defines the evidence levels and mandatory
|
|
289
|
+
final gate used by this workflow.
|
|
290
|
+
- `completion-judge` is the independent read-only verdict; the implementation
|
|
291
|
+
agent cannot self-certify a wide closure run.
|
|
292
|
+
- `workflow-git-commit` may create the scoped commit only when requested;
|
|
293
|
+
it never pushes. `workflow-pr` may push/open/manage only when requested.
|
|
294
|
+
Whole dirty-tree preparation is `workflow-release-prep`, which stops
|
|
295
|
+
before merge.
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: data-pipeline
|
|
3
|
+
description: >
|
|
4
|
+
Wire ETL, ingestion, cron, and queue jobs with idempotency, atomic writes,
|
|
5
|
+
data contracts, and dead-letters. Use for "build a pipeline", "sync X into
|
|
6
|
+
Y", "cron double-counts", "dedupe", "backfill", or "the numbers are wrong
|
|
7
|
+
after a retry".
|
|
8
|
+
license: MIT
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Data Pipeline Correctness
|
|
12
|
+
|
|
13
|
+
**Degree of freedom: MIXED.** Layering and window design `[HIGH freedom]`;
|
|
14
|
+
idempotency, atomic writes, overlap lock, and the DoD `[LOW freedom — run exactly]`.
|
|
15
|
+
|
|
16
|
+
## How to reason
|
|
17
|
+
|
|
18
|
+
1. **Observe** — job, retry path, write targets, schedule
|
|
19
|
+
2. **Interpret** — at-least-once vs atomic vs contract vs overlap
|
|
20
|
+
3. **Classify** — upsert / window-recompute / quarantine / lock / watermark
|
|
21
|
+
4. **Severity** — retry double-count outranks a missing metric
|
|
22
|
+
|
|
23
|
+
## Worked example
|
|
24
|
+
|
|
25
|
+
> **Observe:** nightly `refresh_order_stats` does `count = count + 1`; cron overlapped twice; dashboard totals jumped.
|
|
26
|
+
> **Interpret:** at-least-once delivery + non-idempotent delta.
|
|
27
|
+
> **Classify:** recompute-and-replace the day window; `pg_try_advisory_lock`; persist a watermark.
|
|
28
|
+
> **Verify:** re-run the same window → identical rows; overlap skipped; `pipeline_runs` recorded.
|
|
29
|
+
|
|
30
|
+
## Self-critique before reporting
|
|
31
|
+
|
|
32
|
+
- **Idempotent** — same-window re-run proven identical, not assumed
|
|
33
|
+
- **Atomic** — mid-fail leaves no half-written batch
|
|
34
|
+
- **Locked** — the scheduled job has an overlap guard
|
|
35
|
+
- **Right owner** — schema/constraints → `audit-db-schema`; post-hoc corruption hunt → `plan-data-integrity`
|
|
36
|
+
|
|
37
|
+
> Pipelines fail silently: a retry double-counts, a partial write corrupts a table, a schema drift poisons a dashboard, and nobody notices until the numbers are wrong. This skill bakes correctness in at build time. It complements post-hoc data-integrity audit skills (which *detect* these after the fact) and the Supabase plugin (DB/Edge Functions/RLS).
|
|
38
|
+
|
|
39
|
+
## When this fires
|
|
40
|
+
Any job that **moves, transforms, or aggregates** data: ingestion/ETL/ELT, scheduled aggregations, edge-function workers, `pg_cron` jobs, queue consumers, webhook processors, backfills, materialized-view refreshes.
|
|
41
|
+
|
|
42
|
+
## Non-negotiables (the 5 that prevent silent corruption) [LOW freedom — run exactly]
|
|
43
|
+
|
|
44
|
+
1. **Idempotency** — running the same job twice must not change the result. Retries, at-least-once queues, and overlapping cron fires are guaranteed, not hypothetical.
|
|
45
|
+
- Use `INSERT ... ON CONFLICT (natural_key) DO UPDATE` (upsert), not blind `INSERT`.
|
|
46
|
+
- Derive a deterministic dedup key from the source event, not `now()` or a random id.
|
|
47
|
+
- For aggregates: recompute-and-replace a window, or use idempotent deltas — never `count = count + 1` on a path that can retry.
|
|
48
|
+
|
|
49
|
+
2. **Atomicity** — a job either fully applies or not at all. No half-written batches.
|
|
50
|
+
- Wrap multi-row writes in a transaction; stage to a temp/raw table then swap.
|
|
51
|
+
- A function that writes to 3 tables must not leave 1 of them updated on failure.
|
|
52
|
+
|
|
53
|
+
3. **Data contracts** — validate shape at the boundary before trusting input.
|
|
54
|
+
- Parse/validate (zod / pydantic / JSON schema) at ingestion; reject or quarantine bad rows, don't `any`-cast them downstream.
|
|
55
|
+
- Pin expected columns/types; fail loudly on schema drift instead of silently coercing.
|
|
56
|
+
|
|
57
|
+
4. **Explicit delivery semantics** — know and document whether each stage is at-least-once, at-most-once, or exactly-once, and make the consumer match. Most queues/cron are at-least-once → consumers MUST be idempotent (see #1).
|
|
58
|
+
|
|
59
|
+
5. **Observability** — a pipeline you can't see is a pipeline that's already broken.
|
|
60
|
+
- Emit per-run: rows in / out / rejected, duration, watermark, status. Persist it (a `pipeline_runs` table or logs), don't just `console.log`.
|
|
61
|
+
- Alert on: zero rows when rows expected, reject-rate spike, run overran, run skipped.
|
|
62
|
+
|
|
63
|
+
## Staging architecture (default to 4 layers) [HIGH freedom]
|
|
64
|
+
```
|
|
65
|
+
Raw → land source data unchanged, append-only, with ingested_at + source id
|
|
66
|
+
Staged → cleaned, typed, validated, deduped (1 row per natural key)
|
|
67
|
+
Curated → business entities, joined/enriched, the query surface
|
|
68
|
+
Aggregated→ rollups / metrics / materialized views for dashboards
|
|
69
|
+
```
|
|
70
|
+
Each layer is rebuildable from the one before it. Never transform-in-place on raw; never let dashboards read raw.
|
|
71
|
+
|
|
72
|
+
## Backfills [HIGH freedom]
|
|
73
|
+
- Make jobs **parameterized by window** (`--from`, `--to` / date partition), not "everything since forever". The same code runs the nightly slice and the historical backfill.
|
|
74
|
+
- Backfills must be idempotent and chunked (partition by day/range) so a failure resumes, not restarts.
|
|
75
|
+
- Use a **watermark** (last-processed timestamp/id, persisted) for incremental runs; never re-scan the whole source each run.
|
|
76
|
+
|
|
77
|
+
## Failure handling [HIGH freedom]
|
|
78
|
+
- **Dead-letter** bad/failed records to a quarantine table or DLQ with the error + payload; keep the main run moving. Silent `try/catch {}` that swallows errors is banned.
|
|
79
|
+
- Retries: bounded, with backoff; only retry transient errors (network/timeout), never validation failures (they'll just fail again).
|
|
80
|
+
- Make partial progress resumable via the watermark, not a full redo.
|
|
81
|
+
|
|
82
|
+
## Anti-patterns (reject on sight) [HIGH freedom]
|
|
83
|
+
- **Monolithic DAG / mega-function** doing fetch+transform+load+notify in one untestable blob → split into testable stages.
|
|
84
|
+
- `count = count + 1` / `balance = balance + x` on a retryable path → not idempotent.
|
|
85
|
+
- `SELECT *` into a typed model without a contract → schema drift time bomb.
|
|
86
|
+
- N+1 writes in a loop instead of a batched upsert → slow + non-atomic.
|
|
87
|
+
- Cron with no overlap guard (job B starts before job A finishes) → double processing. Add a lock / `pg_try_advisory_lock` / "skip if running".
|
|
88
|
+
- Reading dashboards straight off raw ingestion tables.
|
|
89
|
+
|
|
90
|
+
## Supabase / edge-function specifics [LOW freedom — run exactly]
|
|
91
|
+
- `pg_cron` is at-least-once and can overlap under load → make the SQL/function idempotent and guard with an advisory lock.
|
|
92
|
+
- Edge-function workers triggered by table inserts: dedupe on the row's natural key; the trigger can fire more than once.
|
|
93
|
+
- Heavy aggregation belongs in SQL / materialized views (refresh on a schedule), not in a function looping row-by-row.
|
|
94
|
+
- Deploy + verify the function, cron, and any new table/policy on the remote in the same turn — see `full-stack-ship-discipline`.
|
|
95
|
+
|
|
96
|
+
## Definition of done [LOW freedom — do not skip]
|
|
97
|
+
- [ ] Re-running the job produces the identical result (idempotency proven, not assumed).
|
|
98
|
+
- [ ] A mid-run failure leaves no half-applied state (atomicity).
|
|
99
|
+
- [ ] Bad input is rejected/quarantined with a contract, not silently coerced.
|
|
100
|
+
- [ ] Incremental runs use a persisted watermark; backfill is windowed + chunked.
|
|
101
|
+
- [ ] Per-run metrics are emitted and an alert exists for zero-rows / reject-spike / overrun.
|
|
102
|
+
- [ ] No overlap hazard on scheduled jobs (lock or skip-if-running).
|
|
103
|
+
|
|
104
|
+
## Composes with
|
|
105
|
+
- `audit-db-schema` — the schema/constraints the pipeline writes into.
|
|
106
|
+
- `supabase-postgres-best-practices` — Postgres-level query/index tuning (official Supabase plugin).
|
|
107
|
+
- `full-stack-ship-discipline` — deploy + verify functions/cron/policies on the remote.
|
|
108
|
+
- `workflow-spec-tdd` — spec the contract + test idempotency/edge cases before coding.
|
|
109
|
+
- Project-local data-integrity audit skills — post-hoc detection of the failures this prevents.
|