@kensaurus/skills 0.0.0-stage → 2.0.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 +1761 -0
- package/LICENSE +21 -0
- package/NOTICE +13 -0
- package/README.md +820 -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 +93 -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 +296 -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 +154 -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 +379 -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 +304 -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-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 +242 -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 +104 -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 +387 -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 +296 -0
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: audit-code-quality
|
|
3
|
+
description: >
|
|
4
|
+
Detect and fix repo-wide anti-patterns and consistency drift (naming,
|
|
5
|
+
organisation, repeated smells). Use when "code smell", "anti-pattern",
|
|
6
|
+
"technical debt", or "standardize the codebase". This PR/diff review →
|
|
7
|
+
audit-code-review.
|
|
8
|
+
license: MIT
|
|
9
|
+
effort: high
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Code Quality Audit
|
|
13
|
+
|
|
14
|
+
**Degree of freedom: MIXED** — Parts 1–2 judgment `[HIGH freedom]`; convention
|
|
15
|
+
greps and Validation `[LOW freedom — run exactly]`.
|
|
16
|
+
|
|
17
|
+
> **Audit-and-fix exception.** Detect and then fix. Not present-then-stop.
|
|
18
|
+
>
|
|
19
|
+
> Fix the findings you reported, in the files you named; a repo-wide restyle
|
|
20
|
+
> or rename pass the report did not list is a different session. Edit
|
|
21
|
+
> surgically — the offending hook, key, or import — rather than rewriting
|
|
22
|
+
> whole files. Pre-existing bugs met on the way go in the report as
|
|
23
|
+
> follow-ups. Add or change tests only where the task asks or the repo
|
|
24
|
+
> already keeps them for that surface; one-off greps and scratch scripts stay
|
|
25
|
+
> out of the commit.
|
|
26
|
+
|
|
27
|
+
Repo-wide React/TypeScript anti-patterns plus naming, organisation, and
|
|
28
|
+
pattern consistency. A named PR/diff → `audit-code-review`.
|
|
29
|
+
|
|
30
|
+
## How to reason
|
|
31
|
+
|
|
32
|
+
1. **Observe** — quote the smell (`file:line`) and whether `git blame` / CONTRIBUTING marks it intentional
|
|
33
|
+
2. **Interpret** — bug/perf risk, or style-only drift?
|
|
34
|
+
3. **Classify** — anti-pattern / naming / organisation / pattern-split / intentional
|
|
35
|
+
4. **Severity** — runtime bug or data-fetch `useEffect` = High; naming-only = Low
|
|
36
|
+
|
|
37
|
+
## Worked example
|
|
38
|
+
|
|
39
|
+
> **Observe:** `components/PaymentForm.tsx` has `'use server'` and a
|
|
40
|
+
> `useEffect` that fetches invoices; four sortable lists use `key={i}`.
|
|
41
|
+
> **Interpret:** server action lives in UI; fetch refires on remount; reorder remounts rows.
|
|
42
|
+
> **Classify:** organisation + `useEffect`-for-data + index-as-key.
|
|
43
|
+
> **Severity:** High (actions-in-components); Medium (keys).
|
|
44
|
+
> **Finding:** `PaymentForm.tsx` | High | move action to `features/*/server/`;
|
|
45
|
+
> replace fetch effect with TanStack Query
|
|
46
|
+
|
|
47
|
+
## Before any change [LOW freedom — run exactly]
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
cat CONTRIBUTING.md .cursor/rules/*.md 2>/dev/null | head -100 # existing conventions
|
|
51
|
+
git log --oneline -20 | grep -i "convention\|pattern\|style" # recent decisions
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Verify the "inconsistency" isn't intentional. Check `git blame` before touching working code.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Part 1 — Anti-patterns [HIGH freedom]
|
|
59
|
+
|
|
60
|
+
### React
|
|
61
|
+
|
|
62
|
+
#### Props drilling → Context or composition
|
|
63
|
+
```tsx
|
|
64
|
+
// Bad: prop drilled through 5+ levels
|
|
65
|
+
<Layout user={user}><Sidebar user={user}><UserMenu user={user}><Avatar user={user} />
|
|
66
|
+
|
|
67
|
+
// Fix: context for global state
|
|
68
|
+
const UserContext = createContext<User | null>(null)
|
|
69
|
+
const useUser = () => useContext(UserContext)
|
|
70
|
+
|
|
71
|
+
// Fix: composition for UI concerns
|
|
72
|
+
<Layout><Layout.Sidebar><UserMenu /></Layout.Sidebar></Layout>
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
#### Derived state in `useState` → `useMemo`
|
|
76
|
+
```tsx
|
|
77
|
+
// Bad
|
|
78
|
+
const [items, setItems] = useState([])
|
|
79
|
+
const [filtered, setFiltered] = useState([])
|
|
80
|
+
useEffect(() => { setFiltered(items.filter(i => i.active)) }, [items])
|
|
81
|
+
|
|
82
|
+
// Fix
|
|
83
|
+
const filtered = useMemo(() => items.filter(i => i.active), [items])
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
#### `useEffect` for data fetching → Server Components or TanStack Query
|
|
87
|
+
```tsx
|
|
88
|
+
// Fix (Next.js 16 Server Component)
|
|
89
|
+
async function DataDisplay() {
|
|
90
|
+
const data = await db.getData()
|
|
91
|
+
return <div>{data.name}</div>
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Fix (client with TanStack Query)
|
|
95
|
+
const { data, isLoading } = useQuery({ queryKey: ['data'], queryFn: fetchData })
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
#### Object/array in dependency array → memoize or destructure
|
|
99
|
+
```tsx
|
|
100
|
+
// Bad: new object every render → infinite loop
|
|
101
|
+
useEffect(() => { doSomething(options) }, [options])
|
|
102
|
+
|
|
103
|
+
// Fix
|
|
104
|
+
const options = useMemo(() => ({ page, limit }), [page, limit])
|
|
105
|
+
useEffect(() => { doSomething(options) }, [options])
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
#### Index as key in dynamic lists → stable IDs
|
|
109
|
+
```tsx
|
|
110
|
+
// Bad
|
|
111
|
+
{items.map((item, i) => <Item key={i} />)}
|
|
112
|
+
// Fix
|
|
113
|
+
{items.map(item => <Item key={item.id} />)}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
#### Giant component → composition
|
|
117
|
+
```tsx
|
|
118
|
+
// Split by responsibility
|
|
119
|
+
export function UserDashboard() {
|
|
120
|
+
const user = useUser()
|
|
121
|
+
return (
|
|
122
|
+
<DashboardLayout>
|
|
123
|
+
<UserHeader user={user} />
|
|
124
|
+
<UserStats userId={user.id} />
|
|
125
|
+
<RecentActivity userId={user.id} />
|
|
126
|
+
</DashboardLayout>
|
|
127
|
+
)
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### TypeScript
|
|
132
|
+
|
|
133
|
+
```tsx
|
|
134
|
+
// Bad: any
|
|
135
|
+
function processData(data: any) { return data.items.map((i: any) => i.name) }
|
|
136
|
+
|
|
137
|
+
// Fix: proper types + Zod validation
|
|
138
|
+
const DataSchema = z.object({ items: z.array(z.object({ id: z.string(), name: z.string() })) })
|
|
139
|
+
function processData(data: z.infer<typeof DataSchema>) { return data.items.map(i => i.name) }
|
|
140
|
+
|
|
141
|
+
// Bad: enums (runtime object, not tree-shakeable)
|
|
142
|
+
enum Status { Pending = 'pending', Active = 'active' }
|
|
143
|
+
// Fix: union types
|
|
144
|
+
type Status = 'pending' | 'active'
|
|
145
|
+
|
|
146
|
+
// Fix: exhaustive switch
|
|
147
|
+
function handle(s: Status): string {
|
|
148
|
+
switch (s) {
|
|
149
|
+
case 'pending': return 'Waiting'
|
|
150
|
+
case 'active': return 'Running'
|
|
151
|
+
default:
|
|
152
|
+
const _: never = s
|
|
153
|
+
throw new Error(`Unknown: ${_}`)
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### State management
|
|
159
|
+
|
|
160
|
+
```tsx
|
|
161
|
+
// Rule of thumb:
|
|
162
|
+
// URL state (nuqs) → shareable, bookmarkable
|
|
163
|
+
// Global state (Zustand) → cross-component, persisted
|
|
164
|
+
// Local state (useState) → component-specific, ephemeral
|
|
165
|
+
|
|
166
|
+
// Stale closure fix
|
|
167
|
+
useEffect(() => {
|
|
168
|
+
const id = setInterval(() => setCount(c => c + 1), 1000) // functional update
|
|
169
|
+
return () => clearInterval(id)
|
|
170
|
+
}, [])
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Architecture
|
|
174
|
+
|
|
175
|
+
```
|
|
176
|
+
// Circular deps → extract shared code / dependency inversion
|
|
177
|
+
// Business logic in components → move to lib/feature/calculations.ts
|
|
178
|
+
// God files → feature-based organisation:
|
|
179
|
+
lib/
|
|
180
|
+
date/format.ts
|
|
181
|
+
currency/format.ts
|
|
182
|
+
validation/schemas.ts
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## Part 2 — Consistency audit [HIGH freedom; greps LOW]
|
|
188
|
+
|
|
189
|
+
### Naming conventions
|
|
190
|
+
|
|
191
|
+
| Element | Expected | Check |
|
|
192
|
+
|---------|----------|-------|
|
|
193
|
+
| Components | PascalCase | `userCard` vs `UserCard` |
|
|
194
|
+
| Hooks | `use` prefix | `fetchData` vs `useFetchData` |
|
|
195
|
+
| Utils | camelCase | `format_date` vs `formatDate` |
|
|
196
|
+
| Constants | SCREAMING_SNAKE | `apiUrl` vs `API_URL` |
|
|
197
|
+
| Files | kebab-case | `UserCard.tsx` vs `user-card.tsx` |
|
|
198
|
+
| Boolean props | `is/has/should` | `loading` vs `isLoading` |
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
rg "export (function|const|class) [a-z]" --type tsx # lowercase component exports
|
|
202
|
+
rg "use[A-Z]" --type ts # hook patterns
|
|
203
|
+
rg "export default" --type tsx -l | head -20 # mixed default/named exports
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
### File organisation (feature-sliced)
|
|
207
|
+
|
|
208
|
+
```
|
|
209
|
+
src/
|
|
210
|
+
features/{name}/
|
|
211
|
+
components/ # UI only
|
|
212
|
+
hooks/ # custom hooks
|
|
213
|
+
server/ # server actions
|
|
214
|
+
types.ts
|
|
215
|
+
schemas.ts
|
|
216
|
+
components/ui/ # shared primitives
|
|
217
|
+
lib/ # global utilities
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
Red flags:
|
|
221
|
+
- Components in `/lib` or `/utils`
|
|
222
|
+
- Server actions in component files
|
|
223
|
+
- Types scattered across component files
|
|
224
|
+
- Zod schemas inline in components
|
|
225
|
+
|
|
226
|
+
```bash
|
|
227
|
+
rg "z\.object" --glob "*/components/*" # inline schemas
|
|
228
|
+
rg "'use server'" --glob "*/components/*" # actions in wrong place
|
|
229
|
+
rg "from '\.\." --type tsx | head -20 # relative imports instead of @/
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### Pattern consistency
|
|
233
|
+
|
|
234
|
+
| Concern | Check |
|
|
235
|
+
|---------|-------|
|
|
236
|
+
| Server state | All TanStack Query, or mixed with useEffect? |
|
|
237
|
+
| Forms | All React Hook Form, or controlled inputs too? |
|
|
238
|
+
| Error handling | Consistent ActionResult shape? |
|
|
239
|
+
| Styling | cn() used everywhere? Dark mode via CSS vars? |
|
|
240
|
+
| Tests | `*.test.ts` vs `__tests__/`? Consistent mocking? |
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## Coherency report template
|
|
245
|
+
|
|
246
|
+
```markdown
|
|
247
|
+
# Code Quality Audit
|
|
248
|
+
|
|
249
|
+
## Summary
|
|
250
|
+
- Verdict: [one line — what blocks, what is drift]
|
|
251
|
+
- Critical findings: X
|
|
252
|
+
|
|
253
|
+
## Anti-patterns found
|
|
254
|
+
| Pattern | Files | Severity |
|
|
255
|
+
|---------|-------|----------|
|
|
256
|
+
| useEffect for data | 3 files | High |
|
|
257
|
+
| Index as key | 2 files | Medium |
|
|
258
|
+
|
|
259
|
+
## Naming convention findings
|
|
260
|
+
| Element | Expected | Actual | Files |
|
|
261
|
+
|---------|----------|--------|-------|
|
|
262
|
+
| Components | PascalCase | Mixed | 4 |
|
|
263
|
+
|
|
264
|
+
## Organisation findings
|
|
265
|
+
- Server actions found in: components/PaymentForm.tsx
|
|
266
|
+
- Types scattered in: 6 component files
|
|
267
|
+
|
|
268
|
+
## Priority fixes
|
|
269
|
+
1. Move server actions to features/*/server/
|
|
270
|
+
2. Replace useEffect data fetching with TanStack Query
|
|
271
|
+
3. Standardise component naming to PascalCase
|
|
272
|
+
|
|
273
|
+
## Conventions to document
|
|
274
|
+
1. Decision on default vs named exports
|
|
275
|
+
2. Where Zod schemas live
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
## Anti-pattern detection checklist
|
|
281
|
+
|
|
282
|
+
### React checks
|
|
283
|
+
- [ ] No `useEffect` for derived state
|
|
284
|
+
- [ ] No index keys in dynamic lists
|
|
285
|
+
- [ ] No objects/arrays in dependency arrays
|
|
286
|
+
- [ ] Components under 300 lines
|
|
287
|
+
- [ ] No prop drilling beyond 2 levels
|
|
288
|
+
|
|
289
|
+
### TypeScript checks
|
|
290
|
+
- [ ] No `any` (use `unknown` + validation)
|
|
291
|
+
- [ ] No unsafe type assertions
|
|
292
|
+
- [ ] Exhaustive switch statements
|
|
293
|
+
- [ ] Zod schemas for all external data
|
|
294
|
+
|
|
295
|
+
### Architecture checks
|
|
296
|
+
- [ ] No circular dependencies
|
|
297
|
+
- [ ] Business logic separated from UI
|
|
298
|
+
- [ ] Files under 400 lines
|
|
299
|
+
- [ ] Clear module boundaries
|
|
300
|
+
|
|
301
|
+
## Self-critique before applying fixes [LOW freedom — do not skip]
|
|
302
|
+
|
|
303
|
+
1. **Evidenced** — `file:line` or rg hit, not "the codebase feels messy"
|
|
304
|
+
2. **Reproducible** — the convention grep still finds it
|
|
305
|
+
3. **Severity justified** — High = bug/perf, not naming taste
|
|
306
|
+
4. **Right owner** — this PR/diff → `audit-code-review`
|
|
307
|
+
5. **No-false-safety** — `git blame` checked; working intentional code left alone
|
|
308
|
+
|
|
309
|
+
## Validation [LOW freedom — run exactly]
|
|
310
|
+
|
|
311
|
+
1. Typecheck with the repo's own script (`package.json` → `typecheck`, else `tsc --noEmit`)
|
|
312
|
+
2. Lint with the repo's own script — not a generic `eslint src/`
|
|
313
|
+
3. Run the repo's test script and confirm no new failures
|
|
314
|
+
4. Document any enforced standard in `CONTRIBUTING.md` or `.cursor/rules/`
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: audit-code-review
|
|
3
|
+
description: >
|
|
4
|
+
Review a PR or diff for correctness, security, and maintainability. Use for
|
|
5
|
+
a pull request, a named change set, or "review my changes". Repo-wide
|
|
6
|
+
anti-patterns → audit-code-quality. Bulk transforms → audit-codemod-safety.
|
|
7
|
+
license: MIT
|
|
8
|
+
effort: high
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Code Review Skill
|
|
12
|
+
|
|
13
|
+
**Degree of freedom: MIXED** — Phases 1–2 judgment `[HIGH freedom]`;
|
|
14
|
+
mandatory pre-review git/docs `[LOW freedom — run exactly]`.
|
|
15
|
+
|
|
16
|
+
Review this PR or named diff. Repo-wide anti-patterns → `audit-code-quality`.
|
|
17
|
+
Bulk transform semantics → `audit-codemod-safety`.
|
|
18
|
+
|
|
19
|
+
## How to reason
|
|
20
|
+
|
|
21
|
+
1. **Observe** — quote the hunk and the surrounding file (not the line alone)
|
|
22
|
+
2. **Interpret** — what breaks, leaks, or duplicates if this merges?
|
|
23
|
+
3. **Classify** — blocking / suggestion / nit / praise
|
|
24
|
+
4. **Severity** — security, data-loss, or break-existing = blocking
|
|
25
|
+
|
|
26
|
+
## Worked example
|
|
27
|
+
|
|
28
|
+
> **Observe:** new `GET /api/invoices/:id` returns `Invoice.findById(id)`
|
|
29
|
+
> with no `userId` predicate (`app/api/invoices/[id]/route.ts` in this diff).
|
|
30
|
+
> **Interpret:** any authenticated caller reads another user's invoice.
|
|
31
|
+
> **Classify:** blocking (IDOR).
|
|
32
|
+
> **Severity:** Critical — must fix before merge.
|
|
33
|
+
> **Finding:** `[id]/route.ts` | add ownership check | blocking
|
|
34
|
+
|
|
35
|
+
## Pre-review checks [LOW freedom — run exactly]
|
|
36
|
+
|
|
37
|
+
**Before reviewing code:**
|
|
38
|
+
|
|
39
|
+
### 1. Read Relevant Documentation
|
|
40
|
+
```
|
|
41
|
+
README.md (project conventions)
|
|
42
|
+
src/[domain]/@_[domain]-README.md (domain-specific patterns)
|
|
43
|
+
CONTRIBUTING.md (code standards)
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### 2. Understand the Full Change
|
|
47
|
+
|
|
48
|
+
If reviewing a PR or commit:
|
|
49
|
+
```bash
|
|
50
|
+
git log --oneline -10 # recent context
|
|
51
|
+
git diff <base>..HEAD --stat # files changed
|
|
52
|
+
git diff <base>..HEAD # full diff
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
If reviewing a specific file, read the FULL file for context — not just the changed lines.
|
|
56
|
+
|
|
57
|
+
### 3. Check for Duplicate Implementations
|
|
58
|
+
|
|
59
|
+
Use `Grep` and `SemanticSearch` to verify:
|
|
60
|
+
- Does this code duplicate existing functionality?
|
|
61
|
+
- Is there an existing component/service that should have been extended?
|
|
62
|
+
- Does this follow established patterns in the codebase?
|
|
63
|
+
|
|
64
|
+
### 4. Check Production Impact (Sentry)
|
|
65
|
+
|
|
66
|
+
If the change touches error-prone code, check if related Sentry issues exist:
|
|
67
|
+
|
|
68
|
+
```json
|
|
69
|
+
sentry:search_issues
|
|
70
|
+
{
|
|
71
|
+
"organizationSlug": "<ORG_SLUG>",
|
|
72
|
+
"query": "issues related to <component or function being changed>",
|
|
73
|
+
"projectSlugOrId": "<PROJECT_SLUG>",
|
|
74
|
+
"regionUrl": "<REGION_URL>",
|
|
75
|
+
"limit": 10
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
This reveals: does the code being changed have known production issues? Does this change fix or risk introducing them?
|
|
80
|
+
|
|
81
|
+
### 5. Research Current Best Practices (for non-trivial patterns)
|
|
82
|
+
|
|
83
|
+
If the code uses a pattern you want to verify:
|
|
84
|
+
|
|
85
|
+
```json
|
|
86
|
+
firecrawl:firecrawl_search
|
|
87
|
+
{
|
|
88
|
+
"query": "<framework> <pattern> best practice <current year>",
|
|
89
|
+
"limit": 5,
|
|
90
|
+
"sources": [{ "type": "web" }]
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Review Process [HIGH freedom]
|
|
97
|
+
|
|
98
|
+
### Phase 1: High-Level Assessment
|
|
99
|
+
|
|
100
|
+
Before line-by-line review:
|
|
101
|
+
- What is the purpose of this change?
|
|
102
|
+
- Does the approach make sense architecturally?
|
|
103
|
+
- Are there simpler alternatives?
|
|
104
|
+
- Does this introduce new dependencies? Are they justified?
|
|
105
|
+
|
|
106
|
+
### Phase 2: Detailed Review Checklist
|
|
107
|
+
|
|
108
|
+
#### Correctness
|
|
109
|
+
- [ ] Logic is correct for all expected inputs
|
|
110
|
+
- [ ] The change does what the PR / task says — a missing requirement, half-implemented path, or silently narrowed scope is a blocking finding
|
|
111
|
+
- [ ] Edge cases handled (null, empty, overflow, concurrent access)
|
|
112
|
+
- [ ] No obvious bugs (off-by-one, wrong operator, missing await)
|
|
113
|
+
- [ ] Error handling is full and appropriate
|
|
114
|
+
- [ ] Async code handles race conditions and cleanup (AbortController, etc.)
|
|
115
|
+
|
|
116
|
+
#### Security
|
|
117
|
+
- [ ] No SQL injection vectors (raw queries with user input)
|
|
118
|
+
- [ ] No XSS vulnerabilities (dangerouslySetInnerHTML, innerHTML)
|
|
119
|
+
- [ ] No hardcoded secrets or credentials
|
|
120
|
+
- [ ] Input validation present on all user-facing endpoints
|
|
121
|
+
- [ ] Auth/authz properly checked (not just at UI level)
|
|
122
|
+
- [ ] No sensitive data in logs or error messages
|
|
123
|
+
|
|
124
|
+
#### Performance
|
|
125
|
+
- [ ] No N+1 queries (batching, eager loading)
|
|
126
|
+
- [ ] No unnecessary loops or repeated computations
|
|
127
|
+
- [ ] Appropriate data structures (Map vs Object, Set vs Array)
|
|
128
|
+
- [ ] No memory leaks (event listeners cleaned up, subscriptions unsubscribed)
|
|
129
|
+
- [ ] React: no unnecessary re-renders (memo, useMemo, useCallback where appropriate)
|
|
130
|
+
- [ ] Database: queries use indexes, avoid full table scans
|
|
131
|
+
|
|
132
|
+
#### Readability
|
|
133
|
+
- [ ] Clear, descriptive names (functions, variables, types)
|
|
134
|
+
- [ ] Functions appropriately sized (single responsibility)
|
|
135
|
+
- [ ] Comments explain "why" not "what" (non-obvious constraints only)
|
|
136
|
+
- [ ] Consistent with project's existing style
|
|
137
|
+
|
|
138
|
+
#### Maintainability
|
|
139
|
+
- [ ] DRY — no duplicated logic that should be shared
|
|
140
|
+
- [ ] Single responsibility — each function/component does one thing
|
|
141
|
+
- [ ] No magic numbers or strings (use constants or union types)
|
|
142
|
+
- [ ] Types are specific (no `any`, no overly broad unions)
|
|
143
|
+
- [ ] Dependencies are appropriate and minimal
|
|
144
|
+
|
|
145
|
+
#### Testing
|
|
146
|
+
- [ ] Tests cover the change (happy path + edge cases)
|
|
147
|
+
- [ ] Tests are independent and deterministic
|
|
148
|
+
- [ ] No flaky tests introduced (timeouts, race conditions)
|
|
149
|
+
- [ ] Test names describe the expected behavior
|
|
150
|
+
|
|
151
|
+
#### Duplicate Prevention
|
|
152
|
+
- [ ] No duplicate components (checked `src/components/`)
|
|
153
|
+
- [ ] No duplicate services or hooks
|
|
154
|
+
- [ ] Extends rather than duplicates existing patterns
|
|
155
|
+
- [ ] Shared logic extracted to utility/hook when used 2+ times
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## Feedback Format
|
|
160
|
+
|
|
161
|
+
Use severity levels:
|
|
162
|
+
|
|
163
|
+
```markdown
|
|
164
|
+
### Critical (must fix before merge)
|
|
165
|
+
**[File:Line]** — [Description]
|
|
166
|
+
Why: [Impact if not fixed]
|
|
167
|
+
Fix: [Specific suggestion]
|
|
168
|
+
|
|
169
|
+
### Suggestion (recommended improvement)
|
|
170
|
+
**[File:Line]** — [Description]
|
|
171
|
+
Why: [Benefit of the change]
|
|
172
|
+
Alternative: [How to improve]
|
|
173
|
+
|
|
174
|
+
### Nitpick (optional, non-blocking)
|
|
175
|
+
**[File:Line]** — [Description]
|
|
176
|
+
|
|
177
|
+
### Praise (good patterns to reinforce)
|
|
178
|
+
**[File:Line]** — [What's done well and why]
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## Blocking vs Non-Blocking
|
|
184
|
+
|
|
185
|
+
### Blocking (must fix)
|
|
186
|
+
- Security vulnerabilities
|
|
187
|
+
- Data corruption risks
|
|
188
|
+
- Breaking existing functionality
|
|
189
|
+
- Missing critical error handling
|
|
190
|
+
- Performance regressions (measurable)
|
|
191
|
+
- Type safety violations (`any`, unchecked casts)
|
|
192
|
+
|
|
193
|
+
### Non-Blocking (suggestions)
|
|
194
|
+
- Better naming or organization
|
|
195
|
+
- Missing tests for edge cases
|
|
196
|
+
- Documentation gaps
|
|
197
|
+
- Minor performance improvements
|
|
198
|
+
- Style preferences not covered by linter
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Common Patterns to Flag
|
|
203
|
+
|
|
204
|
+
### TypeScript/JavaScript
|
|
205
|
+
```typescript
|
|
206
|
+
// BLOCK: any types
|
|
207
|
+
const data: any = response;
|
|
208
|
+
|
|
209
|
+
// BLOCK: unhandled promises
|
|
210
|
+
fetchData(); // missing await or .catch()
|
|
211
|
+
|
|
212
|
+
// BLOCK: implicit type coercion in conditions
|
|
213
|
+
if (value) // when value could be 0 or ""
|
|
214
|
+
|
|
215
|
+
// SUGGEST: magic strings
|
|
216
|
+
if (status === 'active') // use a constant or union type
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### React
|
|
220
|
+
```tsx
|
|
221
|
+
// BLOCK: missing key in lists
|
|
222
|
+
{items.map(item => <Item {...item} />)}
|
|
223
|
+
|
|
224
|
+
// BLOCK: stale closure in useEffect
|
|
225
|
+
useEffect(() => {
|
|
226
|
+
setInterval(() => console.log(count), 1000); // captures stale count
|
|
227
|
+
}, []);
|
|
228
|
+
|
|
229
|
+
// SUGGEST: inline object creation in props
|
|
230
|
+
<Component style={{ margin: 10 }} /> // new object each render
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### Database
|
|
234
|
+
```sql
|
|
235
|
+
-- BLOCK: SQL injection vector
|
|
236
|
+
WHERE name = '${userInput}'
|
|
237
|
+
|
|
238
|
+
-- SUGGEST: missing index
|
|
239
|
+
SELECT * FROM orders WHERE user_id = ? -- is user_id indexed?
|
|
240
|
+
|
|
241
|
+
-- SUGGEST: SELECT *
|
|
242
|
+
SELECT * FROM users -- select only needed columns
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## Self-critique before reporting [LOW freedom — do not skip]
|
|
248
|
+
|
|
249
|
+
1. **Evidenced** — `File:Line` from the diff, not "this could be better"
|
|
250
|
+
2. **Reproducible** — read the full file, not only the hunk
|
|
251
|
+
3. **Severity justified** — blocking = security / data-loss / break / missing critical handling
|
|
252
|
+
4. **Right owner** — repo-wide smells → `audit-code-quality`; bulk transform → `audit-codemod-safety`
|
|
253
|
+
5. **No-false-safety** — linter-covered style is not blocking
|
|
254
|
+
|
|
255
|
+
## Review Response Template
|
|
256
|
+
|
|
257
|
+
```markdown
|
|
258
|
+
## Code Review: [PR Title / File]
|
|
259
|
+
|
|
260
|
+
### Summary
|
|
261
|
+
[1-2 sentence overall assessment — is this ready to merge?]
|
|
262
|
+
|
|
263
|
+
### Critical (blocking)
|
|
264
|
+
[List any must-fix findings]
|
|
265
|
+
|
|
266
|
+
### Suggestions (recommended)
|
|
267
|
+
[List recommended improvements]
|
|
268
|
+
|
|
269
|
+
### Praise
|
|
270
|
+
[Highlight good practices — reinforces positive patterns]
|
|
271
|
+
|
|
272
|
+
### Questions
|
|
273
|
+
[Clarifying questions about intent or design decisions]
|
|
274
|
+
|
|
275
|
+
### Research Notes
|
|
276
|
+
[If patterns were verified via Firecrawl/Context7, note what was confirmed]
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
## What counts as a finding
|
|
282
|
+
|
|
283
|
+
Blocking findings are correctness bugs, security holes, data-loss paths, and
|
|
284
|
+
gaps between what the change claims and what it does; suggestions and nits
|
|
285
|
+
follow the Feedback Format above. Each finding names the line, the
|
|
286
|
+
consequence, and a fix. Style that the linter or the codebase's own
|
|
287
|
+
conventions already cover is not a finding at any tier. Read the surrounding
|
|
288
|
+
code before judging a hunk, and where intent is unclear, ask in the Questions
|
|
289
|
+
section rather than assume.
|