@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,387 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: test-red-team
|
|
3
|
+
description: >
|
|
4
|
+
Red-team a running web, React Native, or Capacitor app. Use when "red team
|
|
5
|
+
this app", "attack my app", "break it", "find all the defects", "adversarial
|
|
6
|
+
test", "pentest the app", "pre-launch hardening", or "full app QA". Monkey
|
|
7
|
+
test → test-exploratory.
|
|
8
|
+
license: MIT
|
|
9
|
+
effort: high
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# test-red-team — Adversarial Full-App Defect Sweep
|
|
13
|
+
|
|
14
|
+
**Degree of freedom: MIXED** — matrix and severity `[HIGH freedom]`; ROE,
|
|
15
|
+
harness, and benign-payload confirmation `[LOW freedom — run exactly]`.
|
|
16
|
+
Web driver is **playwright-cli**. Do not write exploit PoCs into the repo.
|
|
17
|
+
|
|
18
|
+
A hostile, skeptical pass across UI/UX, data pipeline, security, and
|
|
19
|
+
performance. Default output is a **severity-ranked defect list**, not inline
|
|
20
|
+
fixes (`test-playwright` is the fix-as-you-go PDCA). Offer to fix after the
|
|
21
|
+
report; ask which defects to prioritize.
|
|
22
|
+
Your turn ends with the Phase 7 report and a matrix with no blank cells — each cell PASS, DEFECT, or N-A with a reason — not with the matrix printed and the sweep still owed.
|
|
23
|
+
|
|
24
|
+
Read `protocol-browser-anti-stall` before any browser action (Rule 0: manual
|
|
25
|
+
& headed) and `references/playwright-session-coordination.md`.
|
|
26
|
+
|
|
27
|
+
> **Attack through the visible UI, by hand.** One real action at a time.
|
|
28
|
+
> `eval` / CDP / WebView attach may **set a condition** (throttle, kill a
|
|
29
|
+
> request, emulate) or **inspect** — never perform the click/type/submit
|
|
30
|
+
> under test. The defect must be reachable the way a real attacker reaches it.
|
|
31
|
+
|
|
32
|
+
## This skill vs neighbors
|
|
33
|
+
|
|
34
|
+
| Skill | Owns |
|
|
35
|
+
|:------|:-----|
|
|
36
|
+
| **test-red-team** (this) | Adversarial feature×dimension matrix; report first |
|
|
37
|
+
| `test-exploratory` | Naive **guest vs authed** wander (do not reclaim) |
|
|
38
|
+
| `test-qa` | Story/CRUD smoke — not a hostile matrix |
|
|
39
|
+
| `test-playwright` | This-diff PDCA + **fixes** |
|
|
40
|
+
| `audit-llm-security` | Product LLM / prompt-injection depth |
|
|
41
|
+
| `test-load` | Concurrency breaking point (not headed UI) |
|
|
42
|
+
| `audit-security` | Static OWASP checklist |
|
|
43
|
+
|
|
44
|
+
## How to reason (every cell / finding)
|
|
45
|
+
|
|
46
|
+
1. **Observe** — screenshot + console + network + DB (for mutations)
|
|
47
|
+
2. **Interpret** — reachable defect vs expected deny vs untested (N-A)
|
|
48
|
+
3. **Classify** — PASS / DEFECT / N-A; chain if two cells combine
|
|
49
|
+
4. **Severity** — Critical/High/Medium/Low/Info by impact × likelihood
|
|
50
|
+
|
|
51
|
+
## Worked example
|
|
52
|
+
|
|
53
|
+
> **Observe:** User B `GET /api/docs/A-id` → 200 + A's body. `SET ROLE
|
|
54
|
+
> authenticated` + `user_id != auth.uid()` also returns the row.
|
|
55
|
+
> **Interpret:** IDOR; handler has no ownership check.
|
|
56
|
+
> **Classify:** DEFECT (Security / A01). Chain with weak session = takeover.
|
|
57
|
+
> **Severity:** Critical — cross-user data leak.
|
|
58
|
+
> **Evidence:** screenshot + network + SQL. Payload was a read, not a dump/DROP.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Coverage model
|
|
63
|
+
|
|
64
|
+
This is not a blind DOM crawl (`test-qa`) or an unscripted guest-vs-logged-in wander (`test-exploratory`). Traverse a **coverage matrix**:
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
feature/capability
|
|
68
|
+
→ surfaces (routes, sub-pages, API endpoints, RPCs, tables)
|
|
69
|
+
→ components + states (forms, tables, modals, empty/error/loading, roles)
|
|
70
|
+
→ 4 attack dimensions: UI/UX · data pipeline · security · performance
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Each cell (`feature × surface × component-state × dimension`) is **PASS /
|
|
74
|
+
DEFECT / N-A**. The matrix is the plan and the audit trail.
|
|
75
|
+
|
|
76
|
+
**Graceful fallback:** no discernible features (pure marketing) → route →
|
|
77
|
+
component structural traversal.
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Phase 0: Scope & rules of engagement [LOW freedom — ROE exact]
|
|
82
|
+
|
|
83
|
+
### 0a. Detect the stack
|
|
84
|
+
|
|
85
|
+
`package.json` → framework, auth, ORM, RN/Expo, port.
|
|
86
|
+
`capacitor.config.ts/.json` → Capacitor hybrid.
|
|
87
|
+
`app.json` / `app.config.*` → Expo / RN. `android/` → native Android.
|
|
88
|
+
|
|
89
|
+
Record: target type (web / RN/Expo / Capacitor / mixed); dev URL/port;
|
|
90
|
+
auth pattern; test credentials (`.env.local`, `.env.test`, README);
|
|
91
|
+
backend MCPs (Supabase, Sentry, Firecrawl).
|
|
92
|
+
|
|
93
|
+
### 0b. Pick the automation driver
|
|
94
|
+
|
|
95
|
+
| Target | Driver |
|
|
96
|
+
|--------|--------|
|
|
97
|
+
| Web / PWA / Next.js / SvelteKit / Remix | playwright-cli (`npx --yes @playwright/cli@latest`) |
|
|
98
|
+
| Capacitor WebView on Android emulator | Playwright `_android` WebView attach over ADB (Phase 0c) |
|
|
99
|
+
| Native chrome: system dialogs, sheets, permissions | `adb shell input tap` (`mobile-emulator-test`) |
|
|
100
|
+
| Pure-native iOS/Android (Swift/Kotlin UI) | **Out of scope** — Appium; document as limitation |
|
|
101
|
+
|
|
102
|
+
### 0c. Capacitor WebView attach (when target includes Capacitor)
|
|
103
|
+
|
|
104
|
+
**Exception to Rule 0:** a native WebView can't be driven by snapshot-ref
|
|
105
|
+
tools, so attaching is the only option. Once attached, still interact like
|
|
106
|
+
a user — don't script the flow end-to-end.
|
|
107
|
+
|
|
108
|
+
```javascript
|
|
109
|
+
const { _android } = require('playwright');
|
|
110
|
+
const [device] = await _android.devices();
|
|
111
|
+
// ADB online, Chrome ≥ 87, WebView debuggable
|
|
112
|
+
const webview = await device.webView({ pkg: 'com.your.app.id' });
|
|
113
|
+
const page = await webview.page();
|
|
114
|
+
// standard Playwright Page API — not playwright-cli verbs
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Native chrome outside the WebView: `adb shell input tap` with coordinates
|
|
118
|
+
from `adb shell uiautomator dump`.
|
|
119
|
+
|
|
120
|
+
### 0d. Rules of engagement
|
|
121
|
+
|
|
122
|
+
- Test data prefixed `RT-TEST-` for cleanup
|
|
123
|
+
- Do NOT mutate production data; ask before any non-reversible operation
|
|
124
|
+
- Confirm with **benign** evidence; no destructive PoCs against real rows;
|
|
125
|
+
**do not write exploit PoCs into the repo**
|
|
126
|
+
- Secrets by name only — never printed
|
|
127
|
+
|
|
128
|
+
### 0e. Browser session (before Phases 2–5)
|
|
129
|
+
|
|
130
|
+
1. Own session — never share or claim another agent's:
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
PW="npx --yes @playwright/cli@latest"
|
|
134
|
+
$PW -s=rt-<app> open --headed --persistent \
|
|
135
|
+
--profile "$HOME/.playwright-cli-profiles/<app>" "<app-url>"
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
2. Reuse the signed-in session (`--profile`, or `state-save` /
|
|
139
|
+
`state-load .playwright-mcp/auth/<host>.json`). Google needs the one-time
|
|
140
|
+
real-Chrome login in the coordination reference.
|
|
141
|
+
3. Never `close-all` / `kill-all`; close only `-s=rt-<app>` when done.
|
|
142
|
+
4. Do not log out between attack phases unless testing logout/fixation.
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Phase 1: Recon & build the coverage matrix [HIGH freedom]
|
|
147
|
+
|
|
148
|
+
Build the matrix from source **before** opening the browser.
|
|
149
|
+
|
|
150
|
+
### 1a. Enumerate features / capabilities
|
|
151
|
+
|
|
152
|
+
| Source | What to extract |
|
|
153
|
+
|--------|----------------|
|
|
154
|
+
| `src/app/**/page.tsx` (Next.js App Router) | Routes → feature groupings |
|
|
155
|
+
| `src/routes/**/*.tsx` (Remix / RN Router) | Route tree |
|
|
156
|
+
| `features/*/`, `modules/*/`, `src/*/` | Feature boundary names |
|
|
157
|
+
| `supabase/migrations/*.sql`, `prisma/schema.prisma` | Entities + relationships |
|
|
158
|
+
| `src/app/api/**`, `supabase/functions/**` | API endpoints + RPCs |
|
|
159
|
+
| README / feature docs | Business capability names |
|
|
160
|
+
| Nav / sidebar / tab bar | User-visible feature map |
|
|
161
|
+
|
|
162
|
+
### 1b. For each feature, decompose
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
Feature: [name]
|
|
166
|
+
Surfaces: routes/pages, deep links, API/RPCs, DB tables
|
|
167
|
+
Components + states: default/empty/loading/error/role-A/role-B; forms;
|
|
168
|
+
modals; file uploads
|
|
169
|
+
Roles / tenants: anon, user, admin, org-member, …
|
|
170
|
+
Input surfaces: fields, URL params, query strings, headers, file content
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### 1c. Output the matrix
|
|
174
|
+
|
|
175
|
+
Print before Phases 2–5. Fill ✅ PASS / ❌ DEFECT(#N) / — N-A as you go.
|
|
176
|
+
|
|
177
|
+
```
|
|
178
|
+
COVERAGE MATRIX
|
|
179
|
+
| Feature | Surface/Component+State | UI/UX | Pipeline | Security | Perf |
|
|
180
|
+
|-----------|--------------------------------|-------|----------|----------|------|
|
|
181
|
+
| Auth | Login form / empty | | | | |
|
|
182
|
+
| Auth | Login form / error | | | | |
|
|
183
|
+
| Documents | List / empty · 100+ · create · share/other-user | | | | |
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## Phase 2: UI/UX red team (per matrix cell) [HIGH freedom]
|
|
189
|
+
|
|
190
|
+
**Driver:** playwright-cli — `goto`, `snapshot`, `screenshot`, `click`,
|
|
191
|
+
`type`, `fill`, `console`, `requests`, `resize`.
|
|
192
|
+
|
|
193
|
+
| Attack | What to do |
|
|
194
|
+
|--------|-----------|
|
|
195
|
+
| 3-second clarity | Cold navigate. Purpose obvious in 3 s? |
|
|
196
|
+
| Primary action | CTA obvious, above the fold, 1 tap? |
|
|
197
|
+
| Empty / loading / error | Fresh account; throttle (`eval`/CDP); kill API. Human-readable states? |
|
|
198
|
+
| Dead buttons | Every button/link produces a visible response |
|
|
199
|
+
| Form labels | Every `<input>` has a visible label or `aria-label` |
|
|
200
|
+
| Responsive | `resize` 1280×800, 768×1024, 375×812 — no break |
|
|
201
|
+
| Dark mode | Toggle if supported. No white flash / invisible text |
|
|
202
|
+
| Role variant | Same surface as each role — different data/controls |
|
|
203
|
+
| Overflow | 200-char strings, fat numbers — no clip without ellipsis |
|
|
204
|
+
|
|
205
|
+
`screenshot` every DEFECT. Note the component path if identifiable.
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Phase 3: Data pipeline red team (per matrix cell) [LOW freedom — 3-layer verify]
|
|
210
|
+
|
|
211
|
+
Every mutation surface (create / update / delete / upload). Verify at
|
|
212
|
+
**(1) UI (2) network (3) DB**. Look up Supabase schemas first, then:
|
|
213
|
+
|
|
214
|
+
```json
|
|
215
|
+
supabase:execute_sql
|
|
216
|
+
{
|
|
217
|
+
"query": "SELECT * FROM <table> WHERE <col> LIKE 'RT-TEST-%' ORDER BY created_at DESC LIMIT 10"
|
|
218
|
+
}
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
RLS (what the client can actually read/write):
|
|
222
|
+
|
|
223
|
+
```json
|
|
224
|
+
supabase:execute_sql
|
|
225
|
+
{
|
|
226
|
+
"query": "SET ROLE authenticated; SELECT * FROM <table> WHERE user_id != auth.uid() LIMIT 5"
|
|
227
|
+
}
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
Also `list_tables`, `query_logs` (`source = 'edge_logs'` or
|
|
231
|
+
`'postgres_logs'`), `get_advisors`.
|
|
232
|
+
Unexpected 5xx, unhandled exceptions, RLS denies, and new ERROR advisors
|
|
233
|
+
are pipeline defects.
|
|
234
|
+
|
|
235
|
+
| Attack | How |
|
|
236
|
+
|--------|-----|
|
|
237
|
+
| Double-submit dupe | Click submit twice. Duplicate row? |
|
|
238
|
+
| Optimistic-update lie | Submit → immediately check DB. Row landed? |
|
|
239
|
+
| Stale cache | Mutate in one tab, reload the other |
|
|
240
|
+
| Ghost delete | Delete, reload. Reappears? |
|
|
241
|
+
| Race / partial write | Two conflicting mutations; kill network mid-request (`eval` `fetch` override). Consistent? |
|
|
242
|
+
| Idempotency | Replay the same request. Safe? |
|
|
243
|
+
| Relationship integrity | Delete parent. Orphans cleaned or guarded? |
|
|
244
|
+
| Pagination consistency | Create while on page 2. Right position? |
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## Phase 4: Security red team (per matrix cell, OWASP-mapped) [HIGH freedom; payloads = LOW]
|
|
249
|
+
|
|
250
|
+
Full payload tables: `references/owasp-attack-checklist.md`. Confirm with
|
|
251
|
+
**benign** payloads (`document.title='XSS'`, `SELECT 1`) — never `DROP TABLE`,
|
|
252
|
+
never real exfil, **never commit an exploit PoC**.
|
|
253
|
+
|
|
254
|
+
Priority (highest real-world impact first):
|
|
255
|
+
|
|
256
|
+
| # | Class (OWASP) | Key test |
|
|
257
|
+
|---|---------------|----------|
|
|
258
|
+
| 1 | Authorization / IDOR (A01) | User B reads/mutates User A's resource by ID; verify at DB with `SET ROLE authenticated` |
|
|
259
|
+
| 2 | Authentication (A07) | Reset-token reuse, session fixation, JWT tampering, missing lockout |
|
|
260
|
+
| 3 | Injection (A03) | XSS / SQLi / path traversal in every input — benign confirm only |
|
|
261
|
+
| 4 | Sensitive data (A02) | API leaks `password`/`token`/PII? Tokens in `localStorage`? Env in bundle? |
|
|
262
|
+
| 5 | Security headers | Missing CSP, HSTS, `X-Content-Type-Options`, `X-Frame-Options`, `Referrer-Policy` |
|
|
263
|
+
| 6 | Capacitor MASVS | `allowUniversalAccessFromFileURLs`? Unvalidated bridge? XSS → native plugin? |
|
|
264
|
+
|
|
265
|
+
Correlate with Sentry (401/403/CSP, last 30 days) and current OWASP via Firecrawl.
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
## Phase 5: Performance red team (per matrix cell) [HIGH freedom; throttle setup = LOW]
|
|
270
|
+
|
|
271
|
+
Condition-setup only — then drive load/scroll/submit by hand.
|
|
272
|
+
|
|
273
|
+
```javascript
|
|
274
|
+
const client = await page.context().newCDPSession(page);
|
|
275
|
+
await client.send('Network.emulateNetworkConditions', {
|
|
276
|
+
offline: false, downloadThroughput: 50 * 1024 / 8,
|
|
277
|
+
uploadThroughput: 20 * 1024 / 8, latency: 300
|
|
278
|
+
});
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
Capacitor/Android: `adb shell tc qdisc add dev wlan0 root netem delay 300ms`.
|
|
282
|
+
|
|
283
|
+
| Attack | What to look for |
|
|
284
|
+
|--------|-----------------|
|
|
285
|
+
| Cold load (hard refresh) | TTI > 3 s on simulated 3G? Layout shift? |
|
|
286
|
+
| Large list (50+) | Scroll jank? Virtualize or render all nodes? |
|
|
287
|
+
| Pagination / infinite scroll | Dupes or missing items at the boundary? |
|
|
288
|
+
| Payload size | `requests` → list response > 500 KB? |
|
|
289
|
+
| Memory growth | Large list, scroll bottom↔top × 5. Unbounded heap? |
|
|
290
|
+
| Simultaneous requests | Rapid nav. Loading-state races? |
|
|
291
|
+
| Supabase N+1 | `query_logs` on `source = 'postgres_logs'` after the feature. Repeated identical queries? |
|
|
292
|
+
|
|
293
|
+
Same `get_advisors` as Phase 3: missing indexes, seq scans, bloated RLS =
|
|
294
|
+
Medium–High perf defects.
|
|
295
|
+
|
|
296
|
+
---
|
|
297
|
+
|
|
298
|
+
## Phase 6: Finding-chaining & triage [HIGH freedom]
|
|
299
|
+
|
|
300
|
+
Scan DEFECT cells for chains before the report:
|
|
301
|
+
|
|
302
|
+
- Two Mediums often combine into High/Critical (reflected input + missing
|
|
303
|
+
CSP = stored XSS).
|
|
304
|
+
- Auth weakness + IDOR = account takeover.
|
|
305
|
+
- Stale cache + no optimistic revert = silent corruption.
|
|
306
|
+
|
|
307
|
+
| Field | Options |
|
|
308
|
+
|-------|---------|
|
|
309
|
+
| Severity | Critical / High / Medium / Low / Info |
|
|
310
|
+
| Likelihood | High (trivial) / Medium (needs access) / Low (theoretical) |
|
|
311
|
+
| Impact | Data loss / takeover / PII leak / UX degradation / perf SLA |
|
|
312
|
+
| Affected component | `src/components/Foo.tsx`, `supabase/functions/bar`, … |
|
|
313
|
+
| Remediation | File/function-level fix, not vague advice |
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
## Phase 7: Defect report (the deliverable) [LOW freedom — this shape]
|
|
318
|
+
|
|
319
|
+
```markdown
|
|
320
|
+
## Red-Team Defect Report — [App / Repo] — [Date]
|
|
321
|
+
|
|
322
|
+
### Scope
|
|
323
|
+
- Target type: [web | RN | Capacitor | mixed]
|
|
324
|
+
- Dev URL: [...] Auth: [...]
|
|
325
|
+
- Features red-teamed: [list]
|
|
326
|
+
- Coverage matrix: [link or inline]
|
|
327
|
+
|
|
328
|
+
### Critical Defects (fix before any release)
|
|
329
|
+
| # | Feature | Surface / Component+State | Finding | Evidence | File | Remediation |
|
|
330
|
+
|---|---------|--------------------------|---------|----------|------|-------------|
|
|
331
|
+
| 1 | Auth | Login / error | IDOR: B reads A via GET /api/docs/:id | Screenshot+network | src/app/api/docs/[id]/route.ts | `WHERE user_id = auth.uid()` |
|
|
332
|
+
|
|
333
|
+
### High / Medium / Low / Info
|
|
334
|
+
Same columns. Group by severity.
|
|
335
|
+
|
|
336
|
+
### Attack chains identified
|
|
337
|
+
1. [Finding #N] + [Finding #M] → [combined impact and path]
|
|
338
|
+
|
|
339
|
+
### Coverage matrix (final)
|
|
340
|
+
| Feature | Surface/Component+State | UI/UX | Pipeline | Security | Perf |
|
|
341
|
+
|---------|------------------------|-------|----------|----------|------|
|
|
342
|
+
|
|
343
|
+
### Backend truth-check
|
|
344
|
+
- Sentry: [new/related — count + highest severity]
|
|
345
|
+
- Supabase: [advisors, logs, RLS results]
|
|
346
|
+
|
|
347
|
+
### Launch-readiness verdict
|
|
348
|
+
**Ready / Ready after Critical fixes / Not ready** — [2-sentence justification]
|
|
349
|
+
|
|
350
|
+
### Test data cleanup
|
|
351
|
+
- RT-TEST-* rows deleted: [Y/N / N-A]
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
## Self-critique before reporting [LOW freedom — do not skip]
|
|
355
|
+
|
|
356
|
+
1. **No exploit PoC** — benign confirm only; nothing committed to the repo
|
|
357
|
+
2. **Every DEFECT evidenced** — screenshot + console + network (+ DB for mutations)
|
|
358
|
+
3. **Untested ≠ PASS** — untested cells are N-A with why
|
|
359
|
+
4. **Right owner** — guest wander → `test-exploratory`; LLM inject →
|
|
360
|
+
`audit-llm-security`; load → `test-load`
|
|
361
|
+
5. **Report first** — fix only after the user picks Critical/High
|
|
362
|
+
|
|
363
|
+
---
|
|
364
|
+
|
|
365
|
+
## Guardrails
|
|
366
|
+
|
|
367
|
+
1. **Manual & headed, never scripted** — attack through the visible UI;
|
|
368
|
+
code execution is condition-setup/inspection only; no `*.spec.ts`, no
|
|
369
|
+
`npx playwright test`.
|
|
370
|
+
2. **Anti-stall always** — never block >3 s; max 4 attempts; `[TIMEOUT]` and move on.
|
|
371
|
+
3. **Evidence for every DEFECT** — screenshot + console + network + DB.
|
|
372
|
+
"It looked broken" is not a defect.
|
|
373
|
+
4. **No destructive PoCs** — benign payloads only; never `DROP TABLE` or
|
|
374
|
+
real exfil; do not write exploit PoCs into the repo.
|
|
375
|
+
5. **Ask before mutating production rows** — requested DDL may ship;
|
|
376
|
+
`DELETE`/`UPDATE`/`TRUNCATE` on real prod data asks first.
|
|
377
|
+
6. **Secrets by name only.**
|
|
378
|
+
7. **Honest verdict** — untested cells are N-A, not PASS.
|
|
379
|
+
8. **Offer to fix after the report** — then `test-playwright` PDCA.
|
|
380
|
+
9. **MCP schemas first** — read the server's tool schema before any MCP call.
|
|
381
|
+
10. **Pure-native iOS/Android out of scope** — say so in the report.
|
|
382
|
+
|
|
383
|
+
## Related
|
|
384
|
+
|
|
385
|
+
- `audit-llm-security` — product LLM / prompt-injection depth
|
|
386
|
+
- `test-load` — concurrency breaking point (not a headed UI attack)
|
|
387
|
+
- `test-playwright` / `test-qa` / `audit-security` / `iterate-post-launch`
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
# OWASP Attack Checklist & Payload Library
|
|
2
|
+
|
|
3
|
+
Reference for Phase 4 (Security red team) of `test-red-team`. Load this file
|
|
4
|
+
when you need exhaustive payloads or the full OWASP mapping table.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## OWASP Top 10:2021 — Red-team mapping
|
|
9
|
+
|
|
10
|
+
IDs follow the 2021 edition; check https://owasp.org/www-project-top-ten/ for
|
|
11
|
+
the current edition before citing an ID.
|
|
12
|
+
|
|
13
|
+
| ID | Name | Red-team action |
|
|
14
|
+
|----|------|----------------|
|
|
15
|
+
| A01 | Broken Access Control | IDOR, tenant-boundary, privilege escalation, RLS bypass |
|
|
16
|
+
| A02 | Cryptographic Failures | PII in responses/localStorage, HTTP vs HTTPS, weak token entropy |
|
|
17
|
+
| A03 | Injection | XSS, SQLi, template injection, path traversal, SSRF |
|
|
18
|
+
| A04 | Insecure Design | Business-logic abuse, workflow skip, missing rate limits |
|
|
19
|
+
| A05 | Security Misconfiguration | Security headers, CORS, error messages leaking stack traces |
|
|
20
|
+
| A06 | Vulnerable Components | `npm audit`, outdated deps with known CVEs |
|
|
21
|
+
| A07 | Auth Failures | Brute force, session fixation, JWT tampering, account takeover |
|
|
22
|
+
| A08 | Software & Data Integrity | Supply-chain, unverified file uploads, unsafe deserialization |
|
|
23
|
+
| A09 | Logging Failures | Sentry blind spots, missing audit logs for sensitive actions |
|
|
24
|
+
| A10 | SSRF | URLs in user input used for backend fetch |
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## XSS payloads (confirm with benign effect only)
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
<script>document.title='XSS-CONFIRM'</script>
|
|
32
|
+
<img src=x onerror="document.title='XSS-CONFIRM'">
|
|
33
|
+
<svg onload="document.title='XSS-CONFIRM'">
|
|
34
|
+
javascript:document.title='XSS-CONFIRM'
|
|
35
|
+
"><script>document.title='XSS-CONFIRM'</script>
|
|
36
|
+
' onmouseover='document.title="XSS-CONFIRM"
|
|
37
|
+
{{constructor.constructor('document.title="XSS-CONFIRM"')()}}
|
|
38
|
+
${7*7} (template literal check — expect 49)
|
|
39
|
+
<%= 7*7 %> (ERB / EJS check)
|
|
40
|
+
#{7*7} (Ruby ERB)
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
A hit is confirmed when: the injected string appears un-escaped in the DOM,
|
|
44
|
+
`document.title` changes, or the expression is evaluated server-side (49 appears).
|
|
45
|
+
Never use `alert()` — use `document.title` to avoid browser popups.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## SQL injection probes (safe read-only)
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
' (single quote — triggers syntax error)
|
|
53
|
+
' OR '1'='1 (classic always-true)
|
|
54
|
+
' OR 1=1-- (comment-out rest of query)
|
|
55
|
+
'; SELECT pg_sleep(2)-- (time-based blind — expect 2s delay)
|
|
56
|
+
' UNION SELECT null,null-- (column count probe)
|
|
57
|
+
" OR ""=" (double-quote variant)
|
|
58
|
+
\x00 (null byte)
|
|
59
|
+
1; DROP TABLE users-- (never actually run — shows intent, blocked by parameterized queries)
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Confirm by: syntax error in response, unusual delay (blind SQLi), unexpected
|
|
63
|
+
data in response. A parameterized-query app will return a normal 400/422.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Path traversal probes
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
../../etc/passwd
|
|
71
|
+
..%2F..%2Fetc%2Fpasswd
|
|
72
|
+
....//....//etc/passwd
|
|
73
|
+
%2e%2e%2f%2e%2e%2fetc%2fpasswd
|
|
74
|
+
/etc/passwd%00.jpg (null byte truncation for file ext bypass)
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## SSRF probes (for URL-accepting inputs)
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
http://localhost/
|
|
83
|
+
http://127.0.0.1/
|
|
84
|
+
http://169.254.169.254/latest/meta-data/ (AWS metadata)
|
|
85
|
+
http://metadata.google.internal/
|
|
86
|
+
http://[::1]/
|
|
87
|
+
file:///etc/passwd
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Authentication attack checklist
|
|
93
|
+
|
|
94
|
+
- [ ] Password reset token entropy: generate 2 reset tokens, are they sequential/guessable?
|
|
95
|
+
- [ ] Password reset token reuse: use the same token twice — second use must be rejected.
|
|
96
|
+
- [ ] Password reset token expiry: wait >15 min, use old token — must be expired.
|
|
97
|
+
- [ ] Login brute force: 10 rapid attempts with wrong password — rate limit or lockout?
|
|
98
|
+
- [ ] JWT `alg: none` bypass: send JWT with `"alg":"none"` and no signature.
|
|
99
|
+
- [ ] JWT secret: try weak secrets (`secret`, `password`, `changeme`) via jwt.io debugger.
|
|
100
|
+
- [ ] JWT payload tampering: decode, change `role` to `admin` or `user_id` to another user.
|
|
101
|
+
- [ ] Session cookie flags: `HttpOnly`, `Secure`, `SameSite=Strict`/`Lax` required.
|
|
102
|
+
- [ ] Token storage: tokens must NOT be in `localStorage` (XSS-accessible); use HttpOnly cookies.
|
|
103
|
+
- [ ] OAuth state: state param present, validated server-side (CSRF protection for OAuth).
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## IDOR test procedure (per resource type)
|
|
108
|
+
|
|
109
|
+
1. Create resource as **User A** (get its ID from the response or URL).
|
|
110
|
+
2. Log in as **User B** (different account, same or lower role).
|
|
111
|
+
3. Access the resource directly:
|
|
112
|
+
- `GET /api/resource/<id>`
|
|
113
|
+
- `PUT /api/resource/<id>` with modified payload
|
|
114
|
+
- `DELETE /api/resource/<id>`
|
|
115
|
+
4. Expected: 404 or 403. **DEFECT** if: data returned, mutation succeeds, or
|
|
116
|
+
error leaks the resource exists (200 with "not found" message = info leak).
|
|
117
|
+
5. Verify at DB: `SELECT * FROM resource WHERE id = '<id>'` — should be User A's row.
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Tenant-boundary test procedure (multi-tenant apps)
|
|
122
|
+
|
|
123
|
+
1. Create records in **Org A** context.
|
|
124
|
+
2. Switch to **Org B** context (URL param, header, or UI switcher).
|
|
125
|
+
3. Navigate to the same feature. **DEFECT** if Org A's data is visible.
|
|
126
|
+
4. Directly call the API with Org A's resource IDs while authenticated as Org B user.
|
|
127
|
+
5. Verify RLS via Supabase MCP: `SET ROLE authenticated; SET LOCAL request.jwt.claims = '{"sub":"<org_b_user_id>","role":"authenticated"}'; SELECT * FROM org_resources WHERE org_id = '<org_a_id>'` — must return 0 rows.
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## File upload attack checklist
|
|
132
|
+
|
|
133
|
+
- [ ] Upload a file with a `.php`, `.js`, `.py`, `.sh` extension. Expect rejection.
|
|
134
|
+
- [ ] Upload an SVG with embedded `<script>`. If served back, XSS vector.
|
|
135
|
+
- [ ] Upload a file with MIME type `text/html` but `.jpg` extension (MIME sniffing).
|
|
136
|
+
- [ ] Upload a 100 MB file. Expect file-size rejection, not server crash.
|
|
137
|
+
- [ ] Upload a ZIP bomb (if archive uploads accepted).
|
|
138
|
+
- [ ] Upload a file with a path-traversal filename: `../../evil.sh`.
|
|
139
|
+
- [ ] Upload a valid image with embedded EXIF data containing XSS payload.
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## Security headers checklist
|
|
144
|
+
|
|
145
|
+
| Header | Required value | Defect if missing/wrong |
|
|
146
|
+
|--------|---------------|------------------------|
|
|
147
|
+
| `Strict-Transport-Security` | `max-age=31536000; includeSubDomains` | High |
|
|
148
|
+
| `Content-Security-Policy` | Specific directives, not `default-src *` | High |
|
|
149
|
+
| `X-Content-Type-Options` | `nosniff` | Medium |
|
|
150
|
+
| `X-Frame-Options` | `DENY` or `SAMEORIGIN` | Medium |
|
|
151
|
+
| `Referrer-Policy` | `strict-origin-when-cross-origin` or stricter | Low |
|
|
152
|
+
| `Permissions-Policy` | Restrict unnecessary browser features | Low |
|
|
153
|
+
| `CORS Access-Control-Allow-Origin` | Must NOT be `*` for authenticated endpoints | High |
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## MASVS-PLATFORM checks (Capacitor / hybrid apps)
|
|
158
|
+
|
|
159
|
+
| Control | MASVS ID | What to check |
|
|
160
|
+
|---------|----------|--------------|
|
|
161
|
+
| WebView allows all file access | MASVS-PLATFORM-2 | `allowFileAccessFromFileURLs`, `allowUniversalAccessFromFileURLs` in `AndroidManifest.xml` / `MainViewController.swift` — must be false |
|
|
162
|
+
| JavaScript enabled on untrusted content | MASVS-PLATFORM-2 | WebView that loads remote URLs must not also bridge to native file system |
|
|
163
|
+
| JS-to-native bridge exposed | MASVS-PLATFORM-2 | All Capacitor plugins must validate input before calling native APIs |
|
|
164
|
+
| Deep-link scheme abuse | MASVS-PLATFORM-1 | Can an external app trigger a deep link with crafted params? Validate all deep-link params. |
|
|
165
|
+
| Exported activities | MASVS-PLATFORM-1 | `android:exported="true"` activities must not expose sensitive functionality |
|
|
166
|
+
| Screenshot prevention | MASVS-PLATFORM-3 | `FLAG_SECURE` set for screens showing PII? |
|
|
167
|
+
| Keyboard cache | MASVS-PLATFORM-3 | Password fields use `inputType=textPassword` (disables autocorrect cache) |
|
|
168
|
+
| Clipboard leakage | MASVS-PLATFORM-3 | Sensitive fields should not be copyable |
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Performance benchmark thresholds
|
|
173
|
+
|
|
174
|
+
| Metric | Target | DEFECT threshold |
|
|
175
|
+
|--------|--------|-----------------|
|
|
176
|
+
| Time to First Byte (TTFB) | < 200 ms | > 600 ms = High |
|
|
177
|
+
| Largest Contentful Paint (LCP) | < 2.5 s | > 4 s = High |
|
|
178
|
+
| Cumulative Layout Shift (CLS) | < 0.1 | > 0.25 = Medium |
|
|
179
|
+
| Total Blocking Time (TBT) | < 200 ms | > 600 ms = High |
|
|
180
|
+
| API response (list endpoint) | < 300 ms | > 1000 ms = Medium |
|
|
181
|
+
| API response (single item) | < 100 ms | > 500 ms = Medium |
|
|
182
|
+
| JS bundle (initial) | < 200 KB gzip | > 500 KB = Medium |
|
|
183
|
+
| Largest single network payload | < 500 KB | > 1 MB = Medium |
|
|
184
|
+
|
|
185
|
+
Measure LCP/CLS with:
|
|
186
|
+
```javascript
|
|
187
|
+
// eval
|
|
188
|
+
const entries = performance.getEntriesByType('paint');
|
|
189
|
+
const lcp = await new Promise(resolve => {
|
|
190
|
+
new PerformanceObserver(list => resolve(list.getEntries().at(-1)?.startTime))
|
|
191
|
+
.observe({ type: 'largest-contentful-paint', buffered: true });
|
|
192
|
+
});
|
|
193
|
+
```
|