@kensaurus/skills 0.0.0-stage → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +53 -0
- package/.claude-plugin/plugin.json +40 -0
- package/.cursor-plugin/plugin.json +38 -0
- package/.mcp.json +28 -0
- package/CHANGELOG.md +1790 -0
- package/LICENSE +21 -0
- package/LICENSE-APACHE +62 -0
- package/NOTICE +13 -0
- package/README.md +821 -2
- package/SECURITY.md +55 -0
- package/agents/code-reviewer.md +60 -0
- package/agents/completion-judge.md +89 -0
- package/agents/db-migrator.md +125 -0
- package/agents/debugger.md +47 -0
- package/agents/deploy-checker.md +100 -0
- package/agents/perf-monitor.md +74 -0
- package/assets/favicon.png +0 -0
- package/assets/logo-light.png +0 -0
- package/assets/logo.png +0 -0
- package/assets/logo.svg +6 -0
- package/assets/og.png +0 -0
- package/bin/install.mjs +1127 -0
- package/bin/kenji.js +2 -0
- package/commands/adr.md +17 -0
- package/commands/aeo-plan.md +18 -0
- package/commands/arch-boundaries.md +17 -0
- package/commands/aso-plan.md +18 -0
- package/commands/auth-flows.md +19 -0
- package/commands/backup-plan.md +17 -0
- package/commands/burndown-full.md +25 -0
- package/commands/capacitor-plan.md +18 -0
- package/commands/codemod-safety.md +22 -0
- package/commands/commit.md +18 -0
- package/commands/complete-everything.md +40 -0
- package/commands/cost-plan.md +19 -0
- package/commands/deadcode-plan.md +26 -0
- package/commands/deadcode.md +32 -0
- package/commands/debug-issue.md +17 -0
- package/commands/deps-plan.md +18 -0
- package/commands/docs-plan.md +17 -0
- package/commands/doctrine.md +19 -0
- package/commands/error-plan.md +19 -0
- package/commands/feedback-to-closure.md +36 -0
- package/commands/fix-issue.md +76 -0
- package/commands/gate-logic.md +26 -0
- package/commands/green-repo.md +36 -0
- package/commands/grill-me.md +19 -0
- package/commands/gtm-plan.md +21 -0
- package/commands/gtm-weekly.md +17 -0
- package/commands/gtm.md +22 -0
- package/commands/handoff.md +15 -0
- package/commands/housekeep-backlog.md +18 -0
- package/commands/housekeep-files.md +22 -0
- package/commands/housekeep-gates.md +18 -0
- package/commands/instant-nav.md +11 -0
- package/commands/integrity-plan.md +19 -0
- package/commands/launch-kit.md +16 -0
- package/commands/mcp-guide.md +40 -0
- package/commands/mobile-plan.md +19 -0
- package/commands/native-rn-monorepo/README.md +78 -0
- package/commands/native-rn-monorepo/android-build.md +26 -0
- package/commands/native-rn-monorepo/android-install.md +32 -0
- package/commands/native-rn-monorepo/android-logcat.md +37 -0
- package/commands/native-rn-monorepo/ios-ci-logs.md +56 -0
- package/commands/native-rn-monorepo/ios-ci-status.md +52 -0
- package/commands/native-rn-monorepo/ios-ci-trigger.md +59 -0
- package/commands/native-rn-monorepo/rn-reset.md +50 -0
- package/commands/native-rn-monorepo/rn-ship-ios.md +67 -0
- package/commands/native-rn-monorepo/rn-verify.md +53 -0
- package/commands/perf-plan.md +18 -0
- package/commands/plan-mode.md +74 -0
- package/commands/pr.md +16 -0
- package/commands/pricing-plan.md +20 -0
- package/commands/privacy-plan.md +18 -0
- package/commands/readability.md +12 -0
- package/commands/readme.md +15 -0
- package/commands/refactor.md +15 -0
- package/commands/release-prep.md +17 -0
- package/commands/research.md +25 -0
- package/commands/responsive-audit.md +21 -0
- package/commands/review-code.md +18 -0
- package/commands/rls-plan.md +18 -0
- package/commands/secrets-plan.md +18 -0
- package/commands/security-plan.md +19 -0
- package/commands/ship-and-observe.md +36 -0
- package/commands/skill-conflicts.md +19 -0
- package/commands/slop-plan.md +18 -0
- package/commands/stub-plan.md +18 -0
- package/commands/test-mutation.md +16 -0
- package/commands/test-plan.md +17 -0
- package/commands/test.md +29 -0
- package/commands/thirdparty-web-interface-guidelines.md +185 -0
- package/commands/uiux-plan.md +18 -0
- package/commands/uiux.md +45 -0
- package/commands/update-deps.md +21 -0
- package/commands/validation-plan.md +19 -0
- package/commands-portable/fix-issue.md +72 -0
- package/commands-portable/plan-mode.md +92 -0
- package/commands-portable/research.md +91 -0
- package/docs/screenshots/README.md +5 -0
- package/docs/screenshots/audit-dark.png +0 -0
- package/docs/screenshots/build-dark.png +0 -0
- package/docs/screenshots/grill-dark.png +0 -0
- package/docs/screenshots/hero-dark.png +0 -0
- package/docs/screenshots/hero-light.png +0 -0
- package/docs/screenshots/ship-dark.png +0 -0
- package/docs/screenshots/src/showcase.html +320 -0
- package/hooks/completion-gate.mjs +258 -0
- package/hooks/cursor-hooks.json +13 -0
- package/hooks/hooks.json +15 -0
- package/install.sh +21 -0
- package/llms.txt +40 -0
- package/mcp/README.md +266 -0
- package/mcp/VERSIONS.md +41 -0
- package/mcp/mcp-full.json.template +124 -0
- package/mcp/mcp.json.template +29 -0
- package/mcp/pinned-versions.json +27 -0
- package/package.json +94 -4
- package/rules/approved-plan-execution.mdc +65 -0
- package/rules/full-stack-ship-discipline.mdc +37 -0
- package/rules/native-rn-monorepo/README.md +63 -0
- package/rules/native-rn-monorepo/_project.mdc +69 -0
- package/rules/native-rn-monorepo/native-android.mdc +72 -0
- package/rules/native-rn-monorepo/native-ios.mdc +61 -0
- package/rules/native-rn-monorepo/react-native-js.mdc +78 -0
- package/rules/native-rn-monorepo/web.mdc +60 -0
- package/rules/project-starter/components.mdc +54 -0
- package/rules/project-starter/data-fetching.mdc +77 -0
- package/rules/project-starter/git.mdc +41 -0
- package/rules/project-starter/supabase.mdc +37 -0
- package/rules/project-starter/tailwind.mdc +48 -0
- package/rules/project-starter/typescript.mdc +36 -0
- package/rules/project-starter/web-performance.mdc +42 -0
- package/rules/senior-engineer.mdc +30 -0
- package/rules/shell-first-search.mdc +19 -0
- package/rules/skill-workflows.mdc +35 -0
- package/rules/verification-before-completion.mdc +57 -0
- package/skills/audit-accessibility/SKILL.md +441 -0
- package/skills/audit-agent-speed/SKILL.md +181 -0
- package/skills/audit-agent-speed/scripts/stop-typecheck.mjs +151 -0
- package/skills/audit-analytics/SKILL.md +138 -0
- package/skills/audit-auth-flows/SKILL.md +267 -0
- package/skills/audit-backend-architecture/SKILL.md +266 -0
- package/skills/audit-backend-architecture/references/patterns.md +386 -0
- package/skills/audit-bundle-size/SKILL.md +295 -0
- package/skills/audit-cicd/SKILL.md +218 -0
- package/skills/audit-code-quality/SKILL.md +314 -0
- package/skills/audit-code-review/SKILL.md +289 -0
- package/skills/audit-codemod-safety/SKILL.md +159 -0
- package/skills/audit-db-schema/SKILL.md +465 -0
- package/skills/audit-db-schema/references/details.md +110 -0
- package/skills/audit-doctrine/SKILL.md +189 -0
- package/skills/audit-env-parity/SKILL.md +133 -0
- package/skills/audit-fe-api/SKILL.md +458 -0
- package/skills/audit-gate-logic/SKILL.md +219 -0
- package/skills/audit-i18n/SKILL.md +339 -0
- package/skills/audit-infra-cost/SKILL.md +142 -0
- package/skills/audit-langfuse-llm/SKILL.md +468 -0
- package/skills/audit-langfuse-llm/references/details.md +226 -0
- package/skills/audit-llm-security/SKILL.md +147 -0
- package/skills/audit-monetization-iap/SKILL.md +137 -0
- package/skills/audit-payment-system/SKILL.md +268 -0
- package/skills/audit-payment-system/references/checklist.md +283 -0
- package/skills/audit-performance/SKILL.md +383 -0
- package/skills/audit-performance/references/loading-priority-2026.md +81 -0
- package/skills/audit-realworld/SKILL.md +287 -0
- package/skills/audit-registry-listing/SKILL.md +122 -0
- package/skills/audit-resilience/SKILL.md +153 -0
- package/skills/audit-responsive/SKILL.md +221 -0
- package/skills/audit-responsive/references/checklist.md +166 -0
- package/skills/audit-security/SKILL.md +289 -0
- package/skills/audit-skill-conflicts/SKILL.md +178 -0
- package/skills/audit-ui-states/SKILL.md +146 -0
- package/skills/audit-uiux-design-system/SKILL.md +475 -0
- package/skills/audit-uiux-design-system/references/details.md +71 -0
- package/skills/audit-ux/SKILL.md +381 -0
- package/skills/audit-ux/references/details.md +245 -0
- package/skills/audit-ux-journeys/SKILL.md +215 -0
- package/skills/audit-ux-journeys/references/checklist.md +179 -0
- package/skills/backend-db-performance/SKILL.md +441 -0
- package/skills/backend-error-handling/SKILL.md +489 -0
- package/skills/backend-error-handling/references/details.md +58 -0
- package/skills/backend-observability/SKILL.md +88 -0
- package/skills/backend-patterns/SKILL.md +499 -0
- package/skills/backend-patterns/references/architecture-patterns.md +298 -0
- package/skills/backend-realtime/SKILL.md +403 -0
- package/skills/backend-realtime/references/patterns.md +74 -0
- package/skills/burndown-full/SKILL.md +174 -0
- package/skills/complete-everything/SKILL.md +295 -0
- package/skills/data-pipeline/SKILL.md +109 -0
- package/skills/data-visualization/SKILL.md +488 -0
- package/skills/debug-error/SKILL.md +322 -0
- package/skills/debug-fe-be-integration/SKILL.md +459 -0
- package/skills/debug-sentry-monitor/SKILL.md +497 -0
- package/skills/debug-sentry-monitor/references/details.md +165 -0
- package/skills/deploy-npm/SKILL.md +394 -0
- package/skills/deploy-npm/references/example-mushi-mushi.md +52 -0
- package/skills/deploy-verify/SKILL.md +489 -0
- package/skills/design-api/SKILL.md +379 -0
- package/skills/design-canvas/SKILL.md +155 -0
- package/skills/design-email/SKILL.md +370 -0
- package/skills/design-frontend/SKILL.md +143 -0
- package/skills/design-generative-art/SKILL.md +474 -0
- package/skills/design-mobile-first/SKILL.md +506 -0
- package/skills/design-motion/SKILL.md +333 -0
- package/skills/design-motion/references/delight-interactions.md +191 -0
- package/skills/design-prd/SKILL.md +443 -0
- package/skills/design-system/SKILL.md +457 -0
- package/skills/design-theme/SKILL.md +226 -0
- package/skills/design-theme/themes/tsumagoi-ranch.md +150 -0
- package/skills/docs-adr/SKILL.md +168 -0
- package/skills/docs-coauthor/SKILL.md +368 -0
- package/skills/docs-comparison-pages/SKILL.md +117 -0
- package/skills/docs-domain-modeling/SKILL.md +97 -0
- package/skills/docs-launch-kit/SKILL.md +139 -0
- package/skills/docs-writer/SKILL.md +469 -0
- package/skills/enhance-agent-guardrails/SKILL.md +164 -0
- package/skills/enhance-arch-boundaries/SKILL.md +154 -0
- package/skills/enhance-capacitor-ui/SKILL.md +463 -0
- package/skills/enhance-capacitor-ui/references/details.md +750 -0
- package/skills/enhance-email-deliverability/SKILL.md +143 -0
- package/skills/enhance-growth-loops/SKILL.md +122 -0
- package/skills/enhance-lifecycle-email/SKILL.md +130 -0
- package/skills/enhance-motion/SKILL.md +193 -0
- package/skills/enhance-onboarding/SKILL.md +148 -0
- package/skills/enhance-pwa/SKILL.md +303 -0
- package/skills/enhance-readability/SKILL.md +146 -0
- package/skills/enhance-readme/SKILL.md +496 -0
- package/skills/enhance-readme/package-lock.json +187 -0
- package/skills/enhance-readme/package.json +17 -0
- package/skills/enhance-readme/scripts/generate-readme-blocks.mjs +199 -0
- package/skills/enhance-readme/scripts/record-readme-tour.mjs +442 -0
- package/skills/enhance-skill-prompts/SKILL.md +167 -0
- package/skills/enhance-skill-prompts/references/exemplar-audit-auth-flows.md +311 -0
- package/skills/enhance-ux-laws/SKILL.md +409 -0
- package/skills/enhance-web-conversion/SKILL.md +155 -0
- package/skills/enhance-web-forms/SKILL.md +154 -0
- package/skills/enhance-web-instant-nav/SKILL.md +138 -0
- package/skills/enhance-web-instant-nav/references/bfcache-blockers.md +23 -0
- package/skills/enhance-web-instant-nav/references/early-hints.md +33 -0
- package/skills/enhance-web-instant-nav/references/speculation-rules.md +44 -0
- package/skills/enhance-web-landing/SKILL.md +459 -0
- package/skills/enhance-web-landing/references/details.md +773 -0
- package/skills/enhance-web-redesign/SKILL.md +228 -0
- package/skills/enhance-web-seo/SKILL.md +276 -0
- package/skills/enhance-web-ui/SKILL.md +473 -0
- package/skills/enhance-web-ui/references/details.md +674 -0
- package/skills/enhance-web-ux/HEURISTICS.md +248 -0
- package/skills/enhance-web-ux/PATTERNS.md +375 -0
- package/skills/enhance-web-ux/SKILL.md +464 -0
- package/skills/enhance-web-ux/examples.md +222 -0
- package/skills/enhance-web-ux/references/details.md +406 -0
- package/skills/enhance-web-web3d/SKILL.md +397 -0
- package/skills/enhance-web-web3d/references/css-canvas-effects.md +180 -0
- package/skills/handoff/SKILL.md +66 -0
- package/skills/housekeep-backlog/SKILL.md +149 -0
- package/skills/housekeep-dead-code/SKILL.md +387 -0
- package/skills/housekeep-dead-code/references/ratchet-ci.md +205 -0
- package/skills/housekeep-dead-code/references/supabase-hygiene.md +152 -0
- package/skills/housekeep-design/SKILL.md +207 -0
- package/skills/housekeep-files/SKILL.md +220 -0
- package/skills/housekeep-files/references/naming-and-catalog.md +86 -0
- package/skills/housekeep-files/scripts/housekeep-files.ps1 +360 -0
- package/skills/housekeep-files/scripts/housekeep-files.sh +238 -0
- package/skills/housekeep-gates/SKILL.md +174 -0
- package/skills/iterate-agent-harness/SKILL.md +137 -0
- package/skills/iterate-gtm-weekly/SKILL.md +103 -0
- package/skills/iterate-post-launch/SKILL.md +292 -0
- package/skills/meta-mcp-builder/SKILL.md +313 -0
- package/skills/meta-skill-creator/SKILL.md +304 -0
- package/skills/mobile-capacitor-platform/SKILL.md +103 -0
- package/skills/mobile-emulator-start/SKILL.md +296 -0
- package/skills/mobile-emulator-test/SKILL.md +491 -0
- package/skills/mobile-emulator-test/references/details.md +478 -0
- package/skills/mobile-rn-performance/SKILL.md +107 -0
- package/skills/mobile-rn-screen/SKILL.md +476 -0
- package/skills/mobile-rn-screen/references/details.md +785 -0
- package/skills/mushi-health/SKILL.md +206 -0
- package/skills/mushi-integration/SKILL.md +257 -0
- package/skills/plan-aeo-readiness/SKILL.md +166 -0
- package/skills/plan-antislop/SKILL.md +281 -0
- package/skills/plan-aso/SKILL.md +149 -0
- package/skills/plan-backup-dr/SKILL.md +131 -0
- package/skills/plan-capacitor-hardening/SKILL.md +217 -0
- package/skills/plan-data-integrity/SKILL.md +187 -0
- package/skills/plan-dead-code/SKILL.md +386 -0
- package/skills/plan-dead-code/references/knip-config.md +214 -0
- package/skills/plan-dead-code/references/output-templates.md +133 -0
- package/skills/plan-dead-code/references/preservation-contract.md +50 -0
- package/skills/plan-dead-code/references/residue-greps.md +84 -0
- package/skills/plan-dependency-provenance/SKILL.md +200 -0
- package/skills/plan-docs-sync/SKILL.md +143 -0
- package/skills/plan-docs-sync/references/drift-taxonomy.md +43 -0
- package/skills/plan-docs-sync/references/output-templates.md +33 -0
- package/skills/plan-docs-sync/references/preservation-contract.md +17 -0
- package/skills/plan-error-handling/SKILL.md +205 -0
- package/skills/plan-gtm/SKILL.md +276 -0
- package/skills/plan-gtm/references/benchmarks-2026.md +183 -0
- package/skills/plan-input-validation/SKILL.md +179 -0
- package/skills/plan-llm-cost-guardrails/SKILL.md +176 -0
- package/skills/plan-mobile-readiness/SKILL.md +171 -0
- package/skills/plan-perf-audit/SKILL.md +145 -0
- package/skills/plan-perf-audit/references/audit-scope.md +51 -0
- package/skills/plan-perf-audit/references/output-templates.md +33 -0
- package/skills/plan-perf-audit/references/preservation-contract.md +13 -0
- package/skills/plan-pricing/SKILL.md +173 -0
- package/skills/plan-privacy-compliance/SKILL.md +148 -0
- package/skills/plan-rls-audit/SKILL.md +231 -0
- package/skills/plan-secrets-audit/SKILL.md +181 -0
- package/skills/plan-security-audit/SKILL.md +168 -0
- package/skills/plan-security-audit/references/output-templates.md +36 -0
- package/skills/plan-security-audit/references/owasp-supabase-scope.md +55 -0
- package/skills/plan-security-audit/references/preservation-contract.md +18 -0
- package/skills/plan-stub-checker/SKILL.md +216 -0
- package/skills/plan-stub-checker/references/detection-methodology.md +75 -0
- package/skills/plan-stub-checker/references/detection-taxonomy.md +34 -0
- package/skills/plan-stub-checker/references/output-templates.md +63 -0
- package/skills/plan-stub-checker/references/preservation-contract.md +24 -0
- package/skills/plan-test-coverage/SKILL.md +170 -0
- package/skills/plan-test-coverage/references/methodology.md +54 -0
- package/skills/plan-test-coverage/references/output-templates.md +34 -0
- package/skills/plan-test-coverage/references/preservation-contract.md +15 -0
- package/skills/plan-uiux-unification/SKILL.md +230 -0
- package/skills/plan-uiux-unification/references/output-templates.md +67 -0
- package/skills/plan-uiux-unification/references/phase-workbook.md +85 -0
- package/skills/plan-uiux-unification/references/preservation-contract.md +24 -0
- package/skills/protocol-browser-anti-stall/SKILL.md +211 -0
- package/skills/protocol-browser-anti-stall/references/mcp-to-cli-map.md +113 -0
- package/skills/protocol-browser-anti-stall/references/playwright-session-coordination.md +170 -0
- package/skills/research/SKILL.md +422 -0
- package/skills/test-exploratory/SKILL.md +165 -0
- package/skills/test-exploratory/references/charter-template.md +29 -0
- package/skills/test-load/SKILL.md +126 -0
- package/skills/test-mutation/SKILL.md +160 -0
- package/skills/test-playwright/SKILL.md +354 -0
- package/skills/test-qa/SKILL.md +364 -0
- package/skills/test-qa/references/details.md +268 -0
- package/skills/test-red-team/SKILL.md +386 -0
- package/skills/test-red-team/references/owasp-attack-checklist.md +193 -0
- package/skills/test-unit/SKILL.md +259 -0
- package/skills/test-unit/references/details.md +267 -0
- package/skills/test-visual-regression/SKILL.md +132 -0
- package/skills/thirdparty-emil-design-eng/ATTRIBUTION.md +20 -0
- package/skills/thirdparty-emil-design-eng/SKILL.md +21 -0
- package/skills/thirdparty-emil-design-eng/references/emil-design-eng.md +676 -0
- package/skills/thirdparty-ui-ux-pro-max/ATTRIBUTION.md +22 -0
- package/skills/thirdparty-ui-ux-pro-max/SKILL.md +304 -0
- package/skills/thirdparty-ui-ux-pro-max/data/charts.csv +26 -0
- package/skills/thirdparty-ui-ux-pro-max/data/colors.csv +97 -0
- package/skills/thirdparty-ui-ux-pro-max/data/icons.csv +101 -0
- package/skills/thirdparty-ui-ux-pro-max/data/landing.csv +31 -0
- package/skills/thirdparty-ui-ux-pro-max/data/products.csv +97 -0
- package/skills/thirdparty-ui-ux-pro-max/data/react-performance.csv +45 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/skills/thirdparty-ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/skills/thirdparty-ui-ux-pro-max/data/styles.csv +68 -0
- package/skills/thirdparty-ui-ux-pro-max/data/typography.csv +58 -0
- package/skills/thirdparty-ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/skills/thirdparty-ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/skills/thirdparty-ui-ux-pro-max/data/web-interface.csv +31 -0
- package/skills/thirdparty-ui-ux-pro-max/scripts/core.py +253 -0
- package/skills/thirdparty-ui-ux-pro-max/scripts/design_system.py +1067 -0
- package/skills/thirdparty-ui-ux-pro-max/scripts/search.py +114 -0
- package/skills/thirdparty-web-interface-guidelines/ATTRIBUTION.md +23 -0
- package/skills/thirdparty-web-interface-guidelines/SKILL.md +190 -0
- package/skills/workflow-build-feature/SKILL.md +118 -0
- package/skills/workflow-coding-discipline/SKILL.md +140 -0
- package/skills/workflow-environment-ready/SKILL.md +128 -0
- package/skills/workflow-feature-flag/SKILL.md +262 -0
- package/skills/workflow-feedback-to-closure/SKILL.md +165 -0
- package/skills/workflow-fix-and-ship/SKILL.md +136 -0
- package/skills/workflow-git-commit/SKILL.md +200 -0
- package/skills/workflow-green-repo/SKILL.md +166 -0
- package/skills/workflow-grilling/SKILL.md +73 -0
- package/skills/workflow-gtm/SKILL.md +153 -0
- package/skills/workflow-housekeep/SKILL.md +453 -0
- package/skills/workflow-housekeep/references/templates.md +109 -0
- package/skills/workflow-launch-ready/SKILL.md +145 -0
- package/skills/workflow-merge-conflicts/SKILL.md +62 -0
- package/skills/workflow-onboard/SKILL.md +99 -0
- package/skills/workflow-parallel-agents/SKILL.md +164 -0
- package/skills/workflow-pr/SKILL.md +197 -0
- package/skills/workflow-quality-gate/SKILL.md +147 -0
- package/skills/workflow-refactor/SKILL.md +274 -0
- package/skills/workflow-release-prep/SKILL.md +207 -0
- package/skills/workflow-ship-and-observe/SKILL.md +164 -0
- package/skills/workflow-spec-tdd/SKILL.md +141 -0
- package/skills/workflow-spec-tdd/references/spec-template.md +126 -0
- package/skills/workflow-spec-tdd/references/tdd-patterns.md +167 -0
- package/skills-cursor/babysit/SKILL.md +17 -0
- package/skills-cursor/canvas/SKILL.md +142 -0
- package/skills-cursor/canvas/sdk/canvas-tokens.d.ts +235 -0
- package/skills-cursor/canvas/sdk/chart-primitives.d.ts +200 -0
- package/skills-cursor/canvas/sdk/dag-layout.d.ts +102 -0
- package/skills-cursor/canvas/sdk/diff-view.d.ts +130 -0
- package/skills-cursor/canvas/sdk/form-primitives.d.ts +194 -0
- package/skills-cursor/canvas/sdk/hooks.d.ts +117 -0
- package/skills-cursor/canvas/sdk/index.d.ts +47 -0
- package/skills-cursor/canvas/sdk/theme.d.ts +61 -0
- package/skills-cursor/canvas/sdk/todo-list.d.ts +49 -0
- package/skills-cursor/canvas/sdk/ui-primitives.d.ts +549 -0
- package/skills-cursor/canvas/sdk/ui-primitives.test.d.ts +2 -0
- package/skills-cursor/create-hook/SKILL.md +238 -0
- package/skills-cursor/create-rule/SKILL.md +185 -0
- package/skills-cursor/create-skill/SKILL.md +269 -0
- package/skills-cursor/create-skill/references/authoring-guide.md +182 -0
- package/skills-cursor/create-subagent/SKILL.md +228 -0
- package/skills-cursor/migrate-to-skills/SKILL.md +121 -0
- package/skills-cursor/shell/SKILL.md +22 -0
- package/skills-cursor/split-to-prs/SKILL.md +47 -0
- package/skills-cursor/statusline/SKILL.md +193 -0
- package/skills-cursor/update-cli-config/SKILL.md +85 -0
- package/skills-cursor/update-cursor-settings/SKILL.md +137 -0
- package/skills.sh.json +297 -0
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: audit-i18n
|
|
3
|
+
description: >
|
|
4
|
+
Audit and fix internationalisation in web or mobile apps. Use when "audit
|
|
5
|
+
i18n", "fix translations", "add locale", "hardcoded strings",
|
|
6
|
+
"localisation", "translation quality", or "the Japanese feels like Google
|
|
7
|
+
Translate".
|
|
8
|
+
license: MIT
|
|
9
|
+
effort: high
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# audit-i18n — Natural, Human-Sounding Translations
|
|
13
|
+
|
|
14
|
+
**Degree of freedom: MIXED** — Quality judgment and rewrite `[HIGH freedom]`;
|
|
15
|
+
Phase 2 key-diff and Phase 4 locale walk `[LOW freedom — run exactly]`.
|
|
16
|
+
|
|
17
|
+
> **Audit-and-fix exception.** Find bad copy, then fix it. Not present-then-stop.
|
|
18
|
+
>
|
|
19
|
+
> Fix the strings the audit named — extract, rewrite, add the missing key —
|
|
20
|
+
> with surgical edits to the source line and the locale entry; do not
|
|
21
|
+
> reformat or re-key whole translation files, and copy you did not audit
|
|
22
|
+
> stays as it is. Unrelated bugs met on the way go in the report as
|
|
23
|
+
> follow-ups. Add tests only where the repo already tests i18n; the Phase 2
|
|
24
|
+
> key-diff scripts stay out of the commit.
|
|
25
|
+
|
|
26
|
+
**Translations that read like machine output erode user trust** — especially in
|
|
27
|
+
the user's own language. Find every unnatural, jargon-heavy, or technically
|
|
28
|
+
worded string and rewrite it to sound like a real person in that locale.
|
|
29
|
+
|
|
30
|
+
> **The goal**: every string should sound like it was written by a native speaker
|
|
31
|
+
> who understands the user, not translated from English by a developer.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Core principles for good copy
|
|
36
|
+
|
|
37
|
+
These apply to every string in every locale:
|
|
38
|
+
|
|
39
|
+
| Bad | Better | Why |
|
|
40
|
+
|-----|--------|-----|
|
|
41
|
+
| "Invalid email format" | "That email doesn't look right — check for typos" | Guides, doesn't blame |
|
|
42
|
+
| "An error occurred" | "Something went wrong. Try again, or contact us if it keeps happening" | Actionable |
|
|
43
|
+
| "Please enter a valid value" | "This field is required" or "Enter a number between 1 and 100" | Specific |
|
|
44
|
+
| "Authentication failed" | "Wrong email or password" | Plain language |
|
|
45
|
+
| "Submit" | "Save", "Send message", "Create account" | Says what actually happens |
|
|
46
|
+
| "OK" | "Got it", "Done", or the specific action | Less dismissive |
|
|
47
|
+
| "User" | "you", "your account" | Conversational |
|
|
48
|
+
| "The operation was successful" | "Done!" or "Saved" | Natural |
|
|
49
|
+
| "Do you want to proceed?" | "Are you sure? This can't be undone." | Honest and specific |
|
|
50
|
+
|
|
51
|
+
## How to reason — Observe → Interpret → Classify → Severity
|
|
52
|
+
|
|
53
|
+
1. **Observe** — quote the source string or locale key (`file:line`) and the base-locale counterpart
|
|
54
|
+
2. **Interpret** — does a native speaker get a next step, or a literal/dev-voiced phrase?
|
|
55
|
+
3. **Classify** — hardcoded / missing key / too-literal / wrong-tone / format-mismatch / untranslated-key
|
|
56
|
+
4. **Severity** — checkout, auth, and error strings first; `[TODO]` if you are not a native speaker
|
|
57
|
+
|
|
58
|
+
## Worked example
|
|
59
|
+
|
|
60
|
+
> **Observe:** `CheckoutButton.tsx:42` renders `<button>Submit</button>` (no i18n
|
|
61
|
+
> key). `ja` `errors.email_invalid` is "無効なメールアドレス"; `en` key exists.
|
|
62
|
+
> **Interpret:** the CTA does not name the outcome; JA is a literal of "Invalid
|
|
63
|
+
> email address" — it blames and gives no next step.
|
|
64
|
+
> **Classify:** hardcoded + too-literal error.
|
|
65
|
+
> **Severity:** High — primary checkout CTA and a blocking validation error.
|
|
66
|
+
> **Finding:** extract `buttons.place_order`; rewrite JA to guide a typo check;
|
|
67
|
+
> then apply (audit-and-fix).
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Phase 0: Detect the i18n setup [HIGH freedom]
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
package.json → i18next, react-i18next, next-intl, vue-i18n, @angular/localize,
|
|
75
|
+
i18n-js, rosetta, lingui, typesafe-i18n
|
|
76
|
+
src/i18n/ → translation files
|
|
77
|
+
locales/ → JSON/YAML translation files
|
|
78
|
+
messages/ → next-intl message files
|
|
79
|
+
public/locales → common path for react-i18next
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Identify:
|
|
83
|
+
- **Library**: react-i18next / next-intl / vue-i18n / lingui / custom
|
|
84
|
+
- **Active locales**: list of language codes (`en`, `ja`, `fr`, `de`, `zh`, etc.)
|
|
85
|
+
- **Translation file format**: JSON / YAML / TypeScript / PO files
|
|
86
|
+
- **Completeness**: are all locales present? Do non-English files have all keys?
|
|
87
|
+
|
|
88
|
+
Fetch library docs:
|
|
89
|
+
```json
|
|
90
|
+
context7:resolve-library-id
|
|
91
|
+
{
|
|
92
|
+
"libraryName": "react-i18next"
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Phase 1: Find hardcoded strings in source code [HIGH freedom]
|
|
99
|
+
|
|
100
|
+
Look for user-facing text that bypasses the i18n system entirely.
|
|
101
|
+
|
|
102
|
+
Scan for:
|
|
103
|
+
- String literals in JSX/TSX: `<p>Welcome back</p>`, `<button>Save</button>`
|
|
104
|
+
- Template literals with user-visible content: `` `Hello ${name}` ``
|
|
105
|
+
- Alert/toast calls with hardcoded strings: `toast.error("Something failed")`
|
|
106
|
+
- Error message strings in API handlers returned to the client
|
|
107
|
+
- Placeholder text: `placeholder="Enter your email"`
|
|
108
|
+
- Aria labels: `aria-label="Close dialog"`
|
|
109
|
+
- `alt` text on meaningful images
|
|
110
|
+
|
|
111
|
+
Use shell to scan (the codebase search tools may be slow on large repos):
|
|
112
|
+
```bash
|
|
113
|
+
grep -rn 'placeholder="' src/ --include="*.tsx" --include="*.jsx" | head -30
|
|
114
|
+
grep -rn '"en":' src/ --include="*.ts" --include="*.tsx" | head -20
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Build a list: file path, line number, string content, whether it has an i18n key already.
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Phase 2: Audit translation file completeness [LOW freedom — run exactly]
|
|
122
|
+
|
|
123
|
+
For each locale, check that all keys from the base locale (usually `en`) exist:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
# Example: compare en.json vs ja.json key counts
|
|
127
|
+
node -e "
|
|
128
|
+
const en = require('./public/locales/en/common.json');
|
|
129
|
+
const ja = require('./public/locales/ja/common.json');
|
|
130
|
+
const missing = Object.keys(en).filter(k => !ja[k]);
|
|
131
|
+
console.log('Missing in ja:', missing);
|
|
132
|
+
"
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Or for next-intl format:
|
|
136
|
+
```bash
|
|
137
|
+
node -e "
|
|
138
|
+
const en = require('./messages/en.json');
|
|
139
|
+
const ja = require('./messages/ja.json');
|
|
140
|
+
function findMissing(base, target, path='') {
|
|
141
|
+
for (const k of Object.keys(base)) {
|
|
142
|
+
const kp = path ? path+'.'+k : k;
|
|
143
|
+
if (!(k in target)) console.log('MISSING:', kp);
|
|
144
|
+
else if (typeof base[k] === 'object') findMissing(base[k], target[k], kp);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
findMissing(en, ja);
|
|
148
|
+
"
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## Phase 3: Review translation quality [HIGH freedom]
|
|
154
|
+
|
|
155
|
+
This is the most important phase. For each locale, review every string
|
|
156
|
+
against the natural-language principles at the top of this skill.
|
|
157
|
+
|
|
158
|
+
### What to look for in each category
|
|
159
|
+
|
|
160
|
+
**Error messages** — must guide, not blame, and tell the user what to do:
|
|
161
|
+
```json
|
|
162
|
+
// Before
|
|
163
|
+
"errors.email_invalid": "Invalid email address"
|
|
164
|
+
|
|
165
|
+
// After
|
|
166
|
+
"errors.email_invalid": "That doesn't look like a valid email — check for typos and try again"
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
**Action buttons** — must describe the outcome, not just label the input:
|
|
170
|
+
```json
|
|
171
|
+
// Before
|
|
172
|
+
"buttons.submit": "Submit"
|
|
173
|
+
"buttons.confirm": "OK"
|
|
174
|
+
|
|
175
|
+
// After
|
|
176
|
+
"buttons.submit": "Save changes" // or whatever the action actually does
|
|
177
|
+
"buttons.confirm": "Got it" // or the specific action: "Delete account", "Send message"
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
**Empty states** — should explain and invite, not just state the absence:
|
|
181
|
+
```json
|
|
182
|
+
// Before
|
|
183
|
+
"empty.projects": "No projects"
|
|
184
|
+
|
|
185
|
+
// After
|
|
186
|
+
"empty.projects": "You haven't created any projects yet. Start one to get going."
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
**Success messages** — should feel warm and confirm the action clearly:
|
|
190
|
+
```json
|
|
191
|
+
// Before
|
|
192
|
+
"success.saved": "Data saved successfully"
|
|
193
|
+
|
|
194
|
+
// After
|
|
195
|
+
"success.saved": "Saved!" // or "Your changes are saved"
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
**Loading states** — should be human:
|
|
199
|
+
```json
|
|
200
|
+
// Before
|
|
201
|
+
"loading.data": "Loading data..."
|
|
202
|
+
|
|
203
|
+
// After
|
|
204
|
+
"loading.data": "Getting things ready…" // or just omit "Loading" entirely
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### Locale-specific tone guidelines
|
|
208
|
+
|
|
209
|
+
| Locale | Tone notes |
|
|
210
|
+
|--------|-----------|
|
|
211
|
+
| `en` | Friendly, direct, conversational. Use contractions ("you've", "can't"). No formal passive voice. |
|
|
212
|
+
| `ja` | Use polite but natural keigo (〜ます/〜です form). Avoid literal translations of English idioms. Use short, clear sentences. Don't overuse katakana loanwords when Japanese alternatives exist. |
|
|
213
|
+
| `ko` | Polite 합쇼체 or 해요체 depending on the app's audience. Avoid Konglish where natural Korean exists. |
|
|
214
|
+
| `zh-TW` / `zh-CN` | Traditional vs simplified — do not mix. Natural, not literal. Check that date/number formats are locale-correct. |
|
|
215
|
+
| `fr` | Formal `vous` for most apps; `tu` only for clearly youth/casual products. Gender agreement must be correct — check nouns. |
|
|
216
|
+
| `de` | German compounds can get long — check for truncation. Formal `Sie` for business apps. |
|
|
217
|
+
| `es` | Check for `tú`/`usted`/`vosotros` consistency. Latin American vs Spain variants differ. |
|
|
218
|
+
| RTL (`ar`, `he`) | Mirror layout. Check that numbers are LTR within RTL text. Verify UI wraps correctly. |
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## Phase 4: Walk the live app in each locale (Playwright) [LOW freedom — run exactly]
|
|
223
|
+
|
|
224
|
+
For each active locale:
|
|
225
|
+
|
|
226
|
+
1. Navigate to the locale-specific URL or trigger the locale switcher
|
|
227
|
+
2. Walk the key flows: onboarding, core feature, error states, empty states, settings
|
|
228
|
+
3. Screenshot each screen for visual review
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
PW="npx --yes @playwright/cli@latest"
|
|
232
|
+
$PW -s=i18n open --headed "http://localhost:3000/ja" # or set the locale cookie, then `goto`
|
|
233
|
+
$PW -s=i18n snapshot # capture the state
|
|
234
|
+
$PW -s=i18n screenshot --filename ".playwright-mcp/i18n-ja-<route>.png"
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
Look for:
|
|
238
|
+
- Strings that are still in English (untranslated keys showing as key names like `common.save`)
|
|
239
|
+
- Text that overflows its container in longer languages (German, Finnish, Russian)
|
|
240
|
+
- Date/time formatting that doesn't match the locale (30/01/2026 vs Jan 30, 2026 vs 2026年1月30日)
|
|
241
|
+
- Currency symbols in the wrong position (`$10.00` vs `10,00 €` vs `¥1,000`)
|
|
242
|
+
- Numbers using the wrong decimal/thousands separator (1,234.56 vs 1.234,56)
|
|
243
|
+
- Plural forms: English has singular/plural; many languages have more forms
|
|
244
|
+
|
|
245
|
+
Save screenshots under `.playwright-mcp/`.
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
## Self-critique before applying [LOW freedom — do not skip]
|
|
250
|
+
|
|
251
|
+
1. **Evidenced** — `file:line` + key, not "Japanese feels off"
|
|
252
|
+
2. **Native-or-TODO** — if you are not a native speaker, mark `[TODO]`; do not ship confident wrong idiom
|
|
253
|
+
3. **Completeness first** — missing keys listed before quality nits
|
|
254
|
+
4. **Right owner** — breakpoint overflow that is not locale-length → `audit-responsive`; WCAG → `audit-accessibility`
|
|
255
|
+
5. **Do not delete copy** to "fix" i18n — extract or rewrite
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## Phase 5: Fix — priority order [HIGH freedom]
|
|
260
|
+
|
|
261
|
+
### Fix 1: Extract all hardcoded strings
|
|
262
|
+
|
|
263
|
+
For every hardcoded string found in Phase 1, create an i18n key and replace it:
|
|
264
|
+
|
|
265
|
+
```typescript
|
|
266
|
+
// Before (react-i18next)
|
|
267
|
+
<p>Welcome back, {name}!</p>
|
|
268
|
+
|
|
269
|
+
// After
|
|
270
|
+
const { t } = useTranslation('common');
|
|
271
|
+
<p>{t('welcome_back', { name })}</p>
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
```json
|
|
275
|
+
// en/common.json
|
|
276
|
+
"welcome_back": "Welcome back, {{name}}!"
|
|
277
|
+
|
|
278
|
+
// ja/common.json
|
|
279
|
+
"welcome_back": "おかえりなさい、{{name}}さん!"
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
### Fix 2: Rewrite poor translations
|
|
283
|
+
|
|
284
|
+
Edit the translation files directly. Prioritise:
|
|
285
|
+
1. Error messages that blame or confuse users
|
|
286
|
+
2. Empty states that dead-end users
|
|
287
|
+
3. Action buttons that say "Submit" or "OK"
|
|
288
|
+
4. Any string a native speaker would read and say "that's not how we talk"
|
|
289
|
+
|
|
290
|
+
### Fix 3: Add missing locale keys
|
|
291
|
+
|
|
292
|
+
For any key missing in a non-English locale, add a natural translation.
|
|
293
|
+
If you don't have a native speaker for a locale, use a clearly-marked placeholder:
|
|
294
|
+
```json
|
|
295
|
+
"some_key": "[TODO: needs native Japanese review] {{count}} items selected"
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
### Fix 4: Fix number/date/currency formatting
|
|
299
|
+
|
|
300
|
+
Use the i18n library's format functions rather than manual formatting:
|
|
301
|
+
|
|
302
|
+
```typescript
|
|
303
|
+
// react-i18next with i18next-icu or i18next-intervalPlural
|
|
304
|
+
t('items_count', { count: 5 }) // handles plural forms automatically
|
|
305
|
+
|
|
306
|
+
// Intl API for dates and numbers (framework-agnostic)
|
|
307
|
+
new Intl.DateTimeFormat(locale, { dateStyle: 'long' }).format(date);
|
|
308
|
+
new Intl.NumberFormat(locale, { style: 'currency', currency: 'JPY' }).format(1234);
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
---
|
|
312
|
+
|
|
313
|
+
## Phase 6: i18n audit report
|
|
314
|
+
|
|
315
|
+
```markdown
|
|
316
|
+
## i18n Audit Report — [App] — [Date]
|
|
317
|
+
|
|
318
|
+
### Active locales
|
|
319
|
+
[list with coverage % — keys present / total keys]
|
|
320
|
+
|
|
321
|
+
### Hardcoded strings found
|
|
322
|
+
| File | Line | String | Action |
|
|
323
|
+
|------|------|--------|--------|
|
|
324
|
+
| src/components/Foo.tsx | 42 | "Save" | Extracted to key `buttons.save` |
|
|
325
|
+
|
|
326
|
+
### Translation quality issues fixed
|
|
327
|
+
| Locale | Key | Before | After | Issue type |
|
|
328
|
+
|--------|-----|--------|-------|-----------|
|
|
329
|
+
| ja | errors.email_invalid | "無効なメールアドレス" | "メールアドレスが正しくないようです。入力内容をご確認ください。" | Too literal, not helpful |
|
|
330
|
+
|
|
331
|
+
### Missing keys added
|
|
332
|
+
[count per locale]
|
|
333
|
+
|
|
334
|
+
### Formatting fixes
|
|
335
|
+
[date/number/currency issues found and fixed]
|
|
336
|
+
|
|
337
|
+
### Still needs native review
|
|
338
|
+
[keys marked [TODO] that need a human native speaker]
|
|
339
|
+
```
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: audit-infra-cost
|
|
3
|
+
description: >
|
|
4
|
+
Read-only audit of hosting, database, storage, egress, and serverless spend
|
|
5
|
+
(Supabase, Vercel, S3/R2, edge). Use when "hosting bill is high", "cut infra
|
|
6
|
+
costs", or a bill jumps. CI minutes → audit-cicd. LLM tokens →
|
|
7
|
+
plan-llm-cost-guardrails.
|
|
8
|
+
license: MIT
|
|
9
|
+
effort: high
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# audit-infra-cost — Hosting spend without hurting reliability
|
|
13
|
+
|
|
14
|
+
**Degree of freedom: HIGH** — quantify and plan. Phase 2 stays plan-only
|
|
15
|
+
until approved. Never propose a cut that weakens backups (`plan-backup-dr`).
|
|
16
|
+
|
|
17
|
+
Read-only. Find where money leaks in the infra bill and plan cuts that do not
|
|
18
|
+
trade away reliability.
|
|
19
|
+
|
|
20
|
+
**For a solo operator, infra cost is runway.** A silent egress or storage leak
|
|
21
|
+
can double a bill nobody is watching.
|
|
22
|
+
|
|
23
|
+
> **Quantify and plan. Apply only on approval.** Never propose a cut that
|
|
24
|
+
> weakens backups (`plan-backup-dr`) or user experience.
|
|
25
|
+
|
|
26
|
+
## This skill vs neighbors
|
|
27
|
+
|
|
28
|
+
| Skill | Owns |
|
|
29
|
+
|---|---|
|
|
30
|
+
| **audit-infra-cost** (this) | Compute, storage, bandwidth, platform fees |
|
|
31
|
+
| `audit-cicd` | GitHub Actions minutes / artifacts |
|
|
32
|
+
| `plan-llm-cost-guardrails` | Model tokens / quota abuse |
|
|
33
|
+
| `test-load` | Measured peak — right-size to this, not a guess |
|
|
34
|
+
| `audit-bundle-size` / `audit-performance` | Client payload (feeds egress) |
|
|
35
|
+
| `backend-db-performance` | The index that stops compute burn |
|
|
36
|
+
|
|
37
|
+
## How to reason
|
|
38
|
+
|
|
39
|
+
1. **Observe** — billed resource, pricing model, and (if exposed) the breakdown line
|
|
40
|
+
2. **Interpret** — is this utilization, a leak (egress/storage/zombies), or a tier mismatch?
|
|
41
|
+
3. **Classify** — safe quick win / medium / structural / do-not-cut (backup/UX)
|
|
42
|
+
4. **Severity** — by $ magnitude × reliability risk, not by how easy the cut looks
|
|
43
|
+
|
|
44
|
+
## Worked example
|
|
45
|
+
|
|
46
|
+
> **Observe:** object-storage bill is 40% of spend; logs prefix has no
|
|
47
|
+
> lifecycle; backups retained 90 days (DR requirement).
|
|
48
|
+
> **Interpret:** unbounded logs are the leak; backup retention is not a cut.
|
|
49
|
+
> **Classify:** safe quick win (expire temp logs) + do-not-cut (backups).
|
|
50
|
+
> **Severity:** major $; reliability risk low if only temp logs expire.
|
|
51
|
+
> **Finding:** logs | ~X% | lifecycle 7d | do not touch backup prefix
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Phase 0 — Map the spend surface [HIGH freedom]
|
|
56
|
+
|
|
57
|
+
Enumerate billed resources and, if the provider exposes it, the breakdown:
|
|
58
|
+
|
|
59
|
+
- Compute (functions / servers / containers)
|
|
60
|
+
- Database (compute + storage + connections)
|
|
61
|
+
- Object storage (GB + operations)
|
|
62
|
+
- **Egress** (usually the sneaky line)
|
|
63
|
+
- CDN, per-seat / per-project fees
|
|
64
|
+
|
|
65
|
+
Note each pricing model (per-request, per-GB, per-hour, tiered) — that is
|
|
66
|
+
where the leak hides. Pricing tiers change: fetch the provider's current
|
|
67
|
+
pricing page rather than quoting tiers from memory; a remembered price is
|
|
68
|
+
not evidence for a saving estimate.
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Phase 1 — Waste [HIGH freedom]
|
|
73
|
+
|
|
74
|
+
**Egress** — Large assets from origin every request? Unoptimized images?
|
|
75
|
+
Hotlinking / unthrottled public endpoints? Cross-check `audit-bundle-size`.
|
|
76
|
+
|
|
77
|
+
**Storage growth** — Unbounded uploads, logs, backups that never expire,
|
|
78
|
+
orphans after DB deletes. Lifecycle to cheaper tiers?
|
|
79
|
+
|
|
80
|
+
**Over-provisioning** — Sized for a rare peak, 24/7 low utilization. Pair
|
|
81
|
+
with `test-load`. Under-provision that forces expensive workarounds is also
|
|
82
|
+
a finding.
|
|
83
|
+
|
|
84
|
+
**Serverless** — Keep-warm waste, chatty N+1 invocations, long functions
|
|
85
|
+
that belong on a queue, cron too frequent.
|
|
86
|
+
|
|
87
|
+
**Database** — Full scans, missing indexes (`backend-db-performance`),
|
|
88
|
+
pool misconfig forcing a bigger instance, unbounded rows with no archive.
|
|
89
|
+
|
|
90
|
+
**Zombies** — Duplicate staging, unused region, leftover add-ons.
|
|
91
|
+
|
|
92
|
+
**Tier fit** — Next tier cheaper than overages? Paid add-on cheaper than
|
|
93
|
+
the current pattern?
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Phase 2 — Plan (approve before executing) [HIGH freedom — plan only]
|
|
98
|
+
|
|
99
|
+
Estimate saving magnitude ("egress is ~X% of the bill; CDN cuts most of it")
|
|
100
|
+
and reliability risk.
|
|
101
|
+
|
|
102
|
+
- **Safe quick wins** — CDN/cache, image optimize, expire temp logs, delete
|
|
103
|
+
zombies, add the missing index
|
|
104
|
+
- **Medium** — right-size to measured load, lifecycle-tier cold data, batch
|
|
105
|
+
chatty calls, queue long work
|
|
106
|
+
- **Structural** — plan/tier change, architecture shift
|
|
107
|
+
|
|
108
|
+
Protect `plan-backup-dr` items. Do not expire backups to save cents.
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Definition of Done
|
|
113
|
+
|
|
114
|
+
- [ ] Billed resources + pricing model enumerated
|
|
115
|
+
- [ ] Egress / storage / compute / serverless / zombies / tier-fit scored
|
|
116
|
+
- [ ] Right-size vs real utilization or `test-load`
|
|
117
|
+
- [ ] Each finding has saving magnitude + reliability risk
|
|
118
|
+
- [ ] Nothing proposed that weakens backups or UX
|
|
119
|
+
- [ ] Plan approved before change
|
|
120
|
+
|
|
121
|
+
## Self-critique before reporting [LOW freedom — do not skip]
|
|
122
|
+
|
|
123
|
+
1. **Quantified** — each finding has a saving magnitude, even if rough
|
|
124
|
+
2. **Backups protected** — no expire-backups-to-save-cents item
|
|
125
|
+
3. **Right-sized to evidence** — `test-load` or utilization, not a guess
|
|
126
|
+
4. **Right owner** — CI minutes → `audit-cicd`; tokens → `plan-llm-cost-guardrails`
|
|
127
|
+
5. **Nothing applied** until approved
|
|
128
|
+
|
|
129
|
+
## Output format
|
|
130
|
+
|
|
131
|
+
1. **Spend surface** — resource | model | rough share
|
|
132
|
+
2. **Findings** — leak | est. saving | fix | risk
|
|
133
|
+
3. **Fix plan** — safe-quick-win → structural
|
|
134
|
+
4. Read-only until approved
|
|
135
|
+
|
|
136
|
+
## Related
|
|
137
|
+
|
|
138
|
+
- `audit-cicd` — pipeline cost
|
|
139
|
+
- `plan-llm-cost-guardrails` — token spend
|
|
140
|
+
- `test-load` — capacity numbers
|
|
141
|
+
- `plan-backup-dr` — do not cut restore
|
|
142
|
+
- `audit-bundle-size` / `backend-db-performance` — technical levers
|