@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.
Files changed (425) hide show
  1. package/.claude-plugin/marketplace.json +53 -0
  2. package/.claude-plugin/plugin.json +40 -0
  3. package/.cursor-plugin/plugin.json +38 -0
  4. package/.mcp.json +28 -0
  5. package/CHANGELOG.md +1790 -0
  6. package/LICENSE +21 -0
  7. package/LICENSE-APACHE +62 -0
  8. package/NOTICE +13 -0
  9. package/README.md +821 -2
  10. package/SECURITY.md +55 -0
  11. package/agents/code-reviewer.md +60 -0
  12. package/agents/completion-judge.md +89 -0
  13. package/agents/db-migrator.md +125 -0
  14. package/agents/debugger.md +47 -0
  15. package/agents/deploy-checker.md +100 -0
  16. package/agents/perf-monitor.md +74 -0
  17. package/assets/favicon.png +0 -0
  18. package/assets/logo-light.png +0 -0
  19. package/assets/logo.png +0 -0
  20. package/assets/logo.svg +6 -0
  21. package/assets/og.png +0 -0
  22. package/bin/install.mjs +1127 -0
  23. package/bin/kenji.js +2 -0
  24. package/commands/adr.md +17 -0
  25. package/commands/aeo-plan.md +18 -0
  26. package/commands/arch-boundaries.md +17 -0
  27. package/commands/aso-plan.md +18 -0
  28. package/commands/auth-flows.md +19 -0
  29. package/commands/backup-plan.md +17 -0
  30. package/commands/burndown-full.md +25 -0
  31. package/commands/capacitor-plan.md +18 -0
  32. package/commands/codemod-safety.md +22 -0
  33. package/commands/commit.md +18 -0
  34. package/commands/complete-everything.md +40 -0
  35. package/commands/cost-plan.md +19 -0
  36. package/commands/deadcode-plan.md +26 -0
  37. package/commands/deadcode.md +32 -0
  38. package/commands/debug-issue.md +17 -0
  39. package/commands/deps-plan.md +18 -0
  40. package/commands/docs-plan.md +17 -0
  41. package/commands/doctrine.md +19 -0
  42. package/commands/error-plan.md +19 -0
  43. package/commands/feedback-to-closure.md +36 -0
  44. package/commands/fix-issue.md +76 -0
  45. package/commands/gate-logic.md +26 -0
  46. package/commands/green-repo.md +36 -0
  47. package/commands/grill-me.md +19 -0
  48. package/commands/gtm-plan.md +21 -0
  49. package/commands/gtm-weekly.md +17 -0
  50. package/commands/gtm.md +22 -0
  51. package/commands/handoff.md +15 -0
  52. package/commands/housekeep-backlog.md +18 -0
  53. package/commands/housekeep-files.md +22 -0
  54. package/commands/housekeep-gates.md +18 -0
  55. package/commands/instant-nav.md +11 -0
  56. package/commands/integrity-plan.md +19 -0
  57. package/commands/launch-kit.md +16 -0
  58. package/commands/mcp-guide.md +40 -0
  59. package/commands/mobile-plan.md +19 -0
  60. package/commands/native-rn-monorepo/README.md +78 -0
  61. package/commands/native-rn-monorepo/android-build.md +26 -0
  62. package/commands/native-rn-monorepo/android-install.md +32 -0
  63. package/commands/native-rn-monorepo/android-logcat.md +37 -0
  64. package/commands/native-rn-monorepo/ios-ci-logs.md +56 -0
  65. package/commands/native-rn-monorepo/ios-ci-status.md +52 -0
  66. package/commands/native-rn-monorepo/ios-ci-trigger.md +59 -0
  67. package/commands/native-rn-monorepo/rn-reset.md +50 -0
  68. package/commands/native-rn-monorepo/rn-ship-ios.md +67 -0
  69. package/commands/native-rn-monorepo/rn-verify.md +53 -0
  70. package/commands/perf-plan.md +18 -0
  71. package/commands/plan-mode.md +74 -0
  72. package/commands/pr.md +16 -0
  73. package/commands/pricing-plan.md +20 -0
  74. package/commands/privacy-plan.md +18 -0
  75. package/commands/readability.md +12 -0
  76. package/commands/readme.md +15 -0
  77. package/commands/refactor.md +15 -0
  78. package/commands/release-prep.md +17 -0
  79. package/commands/research.md +25 -0
  80. package/commands/responsive-audit.md +21 -0
  81. package/commands/review-code.md +18 -0
  82. package/commands/rls-plan.md +18 -0
  83. package/commands/secrets-plan.md +18 -0
  84. package/commands/security-plan.md +19 -0
  85. package/commands/ship-and-observe.md +36 -0
  86. package/commands/skill-conflicts.md +19 -0
  87. package/commands/slop-plan.md +18 -0
  88. package/commands/stub-plan.md +18 -0
  89. package/commands/test-mutation.md +16 -0
  90. package/commands/test-plan.md +17 -0
  91. package/commands/test.md +29 -0
  92. package/commands/thirdparty-web-interface-guidelines.md +185 -0
  93. package/commands/uiux-plan.md +18 -0
  94. package/commands/uiux.md +45 -0
  95. package/commands/update-deps.md +21 -0
  96. package/commands/validation-plan.md +19 -0
  97. package/commands-portable/fix-issue.md +72 -0
  98. package/commands-portable/plan-mode.md +92 -0
  99. package/commands-portable/research.md +91 -0
  100. package/docs/screenshots/README.md +5 -0
  101. package/docs/screenshots/audit-dark.png +0 -0
  102. package/docs/screenshots/build-dark.png +0 -0
  103. package/docs/screenshots/grill-dark.png +0 -0
  104. package/docs/screenshots/hero-dark.png +0 -0
  105. package/docs/screenshots/hero-light.png +0 -0
  106. package/docs/screenshots/ship-dark.png +0 -0
  107. package/docs/screenshots/src/showcase.html +320 -0
  108. package/hooks/completion-gate.mjs +258 -0
  109. package/hooks/cursor-hooks.json +13 -0
  110. package/hooks/hooks.json +15 -0
  111. package/install.sh +21 -0
  112. package/llms.txt +40 -0
  113. package/mcp/README.md +266 -0
  114. package/mcp/VERSIONS.md +41 -0
  115. package/mcp/mcp-full.json.template +124 -0
  116. package/mcp/mcp.json.template +29 -0
  117. package/mcp/pinned-versions.json +27 -0
  118. package/package.json +94 -4
  119. package/rules/approved-plan-execution.mdc +65 -0
  120. package/rules/full-stack-ship-discipline.mdc +37 -0
  121. package/rules/native-rn-monorepo/README.md +63 -0
  122. package/rules/native-rn-monorepo/_project.mdc +69 -0
  123. package/rules/native-rn-monorepo/native-android.mdc +72 -0
  124. package/rules/native-rn-monorepo/native-ios.mdc +61 -0
  125. package/rules/native-rn-monorepo/react-native-js.mdc +78 -0
  126. package/rules/native-rn-monorepo/web.mdc +60 -0
  127. package/rules/project-starter/components.mdc +54 -0
  128. package/rules/project-starter/data-fetching.mdc +77 -0
  129. package/rules/project-starter/git.mdc +41 -0
  130. package/rules/project-starter/supabase.mdc +37 -0
  131. package/rules/project-starter/tailwind.mdc +48 -0
  132. package/rules/project-starter/typescript.mdc +36 -0
  133. package/rules/project-starter/web-performance.mdc +42 -0
  134. package/rules/senior-engineer.mdc +30 -0
  135. package/rules/shell-first-search.mdc +19 -0
  136. package/rules/skill-workflows.mdc +35 -0
  137. package/rules/verification-before-completion.mdc +57 -0
  138. package/skills/audit-accessibility/SKILL.md +441 -0
  139. package/skills/audit-agent-speed/SKILL.md +181 -0
  140. package/skills/audit-agent-speed/scripts/stop-typecheck.mjs +151 -0
  141. package/skills/audit-analytics/SKILL.md +138 -0
  142. package/skills/audit-auth-flows/SKILL.md +267 -0
  143. package/skills/audit-backend-architecture/SKILL.md +266 -0
  144. package/skills/audit-backend-architecture/references/patterns.md +386 -0
  145. package/skills/audit-bundle-size/SKILL.md +295 -0
  146. package/skills/audit-cicd/SKILL.md +218 -0
  147. package/skills/audit-code-quality/SKILL.md +314 -0
  148. package/skills/audit-code-review/SKILL.md +289 -0
  149. package/skills/audit-codemod-safety/SKILL.md +159 -0
  150. package/skills/audit-db-schema/SKILL.md +465 -0
  151. package/skills/audit-db-schema/references/details.md +110 -0
  152. package/skills/audit-doctrine/SKILL.md +189 -0
  153. package/skills/audit-env-parity/SKILL.md +133 -0
  154. package/skills/audit-fe-api/SKILL.md +458 -0
  155. package/skills/audit-gate-logic/SKILL.md +219 -0
  156. package/skills/audit-i18n/SKILL.md +339 -0
  157. package/skills/audit-infra-cost/SKILL.md +142 -0
  158. package/skills/audit-langfuse-llm/SKILL.md +468 -0
  159. package/skills/audit-langfuse-llm/references/details.md +226 -0
  160. package/skills/audit-llm-security/SKILL.md +147 -0
  161. package/skills/audit-monetization-iap/SKILL.md +137 -0
  162. package/skills/audit-payment-system/SKILL.md +268 -0
  163. package/skills/audit-payment-system/references/checklist.md +283 -0
  164. package/skills/audit-performance/SKILL.md +383 -0
  165. package/skills/audit-performance/references/loading-priority-2026.md +81 -0
  166. package/skills/audit-realworld/SKILL.md +287 -0
  167. package/skills/audit-registry-listing/SKILL.md +122 -0
  168. package/skills/audit-resilience/SKILL.md +153 -0
  169. package/skills/audit-responsive/SKILL.md +221 -0
  170. package/skills/audit-responsive/references/checklist.md +166 -0
  171. package/skills/audit-security/SKILL.md +289 -0
  172. package/skills/audit-skill-conflicts/SKILL.md +178 -0
  173. package/skills/audit-ui-states/SKILL.md +146 -0
  174. package/skills/audit-uiux-design-system/SKILL.md +475 -0
  175. package/skills/audit-uiux-design-system/references/details.md +71 -0
  176. package/skills/audit-ux/SKILL.md +381 -0
  177. package/skills/audit-ux/references/details.md +245 -0
  178. package/skills/audit-ux-journeys/SKILL.md +215 -0
  179. package/skills/audit-ux-journeys/references/checklist.md +179 -0
  180. package/skills/backend-db-performance/SKILL.md +441 -0
  181. package/skills/backend-error-handling/SKILL.md +489 -0
  182. package/skills/backend-error-handling/references/details.md +58 -0
  183. package/skills/backend-observability/SKILL.md +88 -0
  184. package/skills/backend-patterns/SKILL.md +499 -0
  185. package/skills/backend-patterns/references/architecture-patterns.md +298 -0
  186. package/skills/backend-realtime/SKILL.md +403 -0
  187. package/skills/backend-realtime/references/patterns.md +74 -0
  188. package/skills/burndown-full/SKILL.md +174 -0
  189. package/skills/complete-everything/SKILL.md +295 -0
  190. package/skills/data-pipeline/SKILL.md +109 -0
  191. package/skills/data-visualization/SKILL.md +488 -0
  192. package/skills/debug-error/SKILL.md +322 -0
  193. package/skills/debug-fe-be-integration/SKILL.md +459 -0
  194. package/skills/debug-sentry-monitor/SKILL.md +497 -0
  195. package/skills/debug-sentry-monitor/references/details.md +165 -0
  196. package/skills/deploy-npm/SKILL.md +394 -0
  197. package/skills/deploy-npm/references/example-mushi-mushi.md +52 -0
  198. package/skills/deploy-verify/SKILL.md +489 -0
  199. package/skills/design-api/SKILL.md +379 -0
  200. package/skills/design-canvas/SKILL.md +155 -0
  201. package/skills/design-email/SKILL.md +370 -0
  202. package/skills/design-frontend/SKILL.md +143 -0
  203. package/skills/design-generative-art/SKILL.md +474 -0
  204. package/skills/design-mobile-first/SKILL.md +506 -0
  205. package/skills/design-motion/SKILL.md +333 -0
  206. package/skills/design-motion/references/delight-interactions.md +191 -0
  207. package/skills/design-prd/SKILL.md +443 -0
  208. package/skills/design-system/SKILL.md +457 -0
  209. package/skills/design-theme/SKILL.md +226 -0
  210. package/skills/design-theme/themes/tsumagoi-ranch.md +150 -0
  211. package/skills/docs-adr/SKILL.md +168 -0
  212. package/skills/docs-coauthor/SKILL.md +368 -0
  213. package/skills/docs-comparison-pages/SKILL.md +117 -0
  214. package/skills/docs-domain-modeling/SKILL.md +97 -0
  215. package/skills/docs-launch-kit/SKILL.md +139 -0
  216. package/skills/docs-writer/SKILL.md +469 -0
  217. package/skills/enhance-agent-guardrails/SKILL.md +164 -0
  218. package/skills/enhance-arch-boundaries/SKILL.md +154 -0
  219. package/skills/enhance-capacitor-ui/SKILL.md +463 -0
  220. package/skills/enhance-capacitor-ui/references/details.md +750 -0
  221. package/skills/enhance-email-deliverability/SKILL.md +143 -0
  222. package/skills/enhance-growth-loops/SKILL.md +122 -0
  223. package/skills/enhance-lifecycle-email/SKILL.md +130 -0
  224. package/skills/enhance-motion/SKILL.md +193 -0
  225. package/skills/enhance-onboarding/SKILL.md +148 -0
  226. package/skills/enhance-pwa/SKILL.md +303 -0
  227. package/skills/enhance-readability/SKILL.md +146 -0
  228. package/skills/enhance-readme/SKILL.md +496 -0
  229. package/skills/enhance-readme/package-lock.json +187 -0
  230. package/skills/enhance-readme/package.json +17 -0
  231. package/skills/enhance-readme/scripts/generate-readme-blocks.mjs +199 -0
  232. package/skills/enhance-readme/scripts/record-readme-tour.mjs +442 -0
  233. package/skills/enhance-skill-prompts/SKILL.md +167 -0
  234. package/skills/enhance-skill-prompts/references/exemplar-audit-auth-flows.md +311 -0
  235. package/skills/enhance-ux-laws/SKILL.md +409 -0
  236. package/skills/enhance-web-conversion/SKILL.md +155 -0
  237. package/skills/enhance-web-forms/SKILL.md +154 -0
  238. package/skills/enhance-web-instant-nav/SKILL.md +138 -0
  239. package/skills/enhance-web-instant-nav/references/bfcache-blockers.md +23 -0
  240. package/skills/enhance-web-instant-nav/references/early-hints.md +33 -0
  241. package/skills/enhance-web-instant-nav/references/speculation-rules.md +44 -0
  242. package/skills/enhance-web-landing/SKILL.md +459 -0
  243. package/skills/enhance-web-landing/references/details.md +773 -0
  244. package/skills/enhance-web-redesign/SKILL.md +228 -0
  245. package/skills/enhance-web-seo/SKILL.md +276 -0
  246. package/skills/enhance-web-ui/SKILL.md +473 -0
  247. package/skills/enhance-web-ui/references/details.md +674 -0
  248. package/skills/enhance-web-ux/HEURISTICS.md +248 -0
  249. package/skills/enhance-web-ux/PATTERNS.md +375 -0
  250. package/skills/enhance-web-ux/SKILL.md +464 -0
  251. package/skills/enhance-web-ux/examples.md +222 -0
  252. package/skills/enhance-web-ux/references/details.md +406 -0
  253. package/skills/enhance-web-web3d/SKILL.md +397 -0
  254. package/skills/enhance-web-web3d/references/css-canvas-effects.md +180 -0
  255. package/skills/handoff/SKILL.md +66 -0
  256. package/skills/housekeep-backlog/SKILL.md +149 -0
  257. package/skills/housekeep-dead-code/SKILL.md +387 -0
  258. package/skills/housekeep-dead-code/references/ratchet-ci.md +205 -0
  259. package/skills/housekeep-dead-code/references/supabase-hygiene.md +152 -0
  260. package/skills/housekeep-design/SKILL.md +207 -0
  261. package/skills/housekeep-files/SKILL.md +220 -0
  262. package/skills/housekeep-files/references/naming-and-catalog.md +86 -0
  263. package/skills/housekeep-files/scripts/housekeep-files.ps1 +360 -0
  264. package/skills/housekeep-files/scripts/housekeep-files.sh +238 -0
  265. package/skills/housekeep-gates/SKILL.md +174 -0
  266. package/skills/iterate-agent-harness/SKILL.md +137 -0
  267. package/skills/iterate-gtm-weekly/SKILL.md +103 -0
  268. package/skills/iterate-post-launch/SKILL.md +292 -0
  269. package/skills/meta-mcp-builder/SKILL.md +313 -0
  270. package/skills/meta-skill-creator/SKILL.md +304 -0
  271. package/skills/mobile-capacitor-platform/SKILL.md +103 -0
  272. package/skills/mobile-emulator-start/SKILL.md +296 -0
  273. package/skills/mobile-emulator-test/SKILL.md +491 -0
  274. package/skills/mobile-emulator-test/references/details.md +478 -0
  275. package/skills/mobile-rn-performance/SKILL.md +107 -0
  276. package/skills/mobile-rn-screen/SKILL.md +476 -0
  277. package/skills/mobile-rn-screen/references/details.md +785 -0
  278. package/skills/mushi-health/SKILL.md +206 -0
  279. package/skills/mushi-integration/SKILL.md +257 -0
  280. package/skills/plan-aeo-readiness/SKILL.md +166 -0
  281. package/skills/plan-antislop/SKILL.md +281 -0
  282. package/skills/plan-aso/SKILL.md +149 -0
  283. package/skills/plan-backup-dr/SKILL.md +131 -0
  284. package/skills/plan-capacitor-hardening/SKILL.md +217 -0
  285. package/skills/plan-data-integrity/SKILL.md +187 -0
  286. package/skills/plan-dead-code/SKILL.md +386 -0
  287. package/skills/plan-dead-code/references/knip-config.md +214 -0
  288. package/skills/plan-dead-code/references/output-templates.md +133 -0
  289. package/skills/plan-dead-code/references/preservation-contract.md +50 -0
  290. package/skills/plan-dead-code/references/residue-greps.md +84 -0
  291. package/skills/plan-dependency-provenance/SKILL.md +200 -0
  292. package/skills/plan-docs-sync/SKILL.md +143 -0
  293. package/skills/plan-docs-sync/references/drift-taxonomy.md +43 -0
  294. package/skills/plan-docs-sync/references/output-templates.md +33 -0
  295. package/skills/plan-docs-sync/references/preservation-contract.md +17 -0
  296. package/skills/plan-error-handling/SKILL.md +205 -0
  297. package/skills/plan-gtm/SKILL.md +276 -0
  298. package/skills/plan-gtm/references/benchmarks-2026.md +183 -0
  299. package/skills/plan-input-validation/SKILL.md +179 -0
  300. package/skills/plan-llm-cost-guardrails/SKILL.md +176 -0
  301. package/skills/plan-mobile-readiness/SKILL.md +171 -0
  302. package/skills/plan-perf-audit/SKILL.md +145 -0
  303. package/skills/plan-perf-audit/references/audit-scope.md +51 -0
  304. package/skills/plan-perf-audit/references/output-templates.md +33 -0
  305. package/skills/plan-perf-audit/references/preservation-contract.md +13 -0
  306. package/skills/plan-pricing/SKILL.md +173 -0
  307. package/skills/plan-privacy-compliance/SKILL.md +148 -0
  308. package/skills/plan-rls-audit/SKILL.md +231 -0
  309. package/skills/plan-secrets-audit/SKILL.md +181 -0
  310. package/skills/plan-security-audit/SKILL.md +168 -0
  311. package/skills/plan-security-audit/references/output-templates.md +36 -0
  312. package/skills/plan-security-audit/references/owasp-supabase-scope.md +55 -0
  313. package/skills/plan-security-audit/references/preservation-contract.md +18 -0
  314. package/skills/plan-stub-checker/SKILL.md +216 -0
  315. package/skills/plan-stub-checker/references/detection-methodology.md +75 -0
  316. package/skills/plan-stub-checker/references/detection-taxonomy.md +34 -0
  317. package/skills/plan-stub-checker/references/output-templates.md +63 -0
  318. package/skills/plan-stub-checker/references/preservation-contract.md +24 -0
  319. package/skills/plan-test-coverage/SKILL.md +170 -0
  320. package/skills/plan-test-coverage/references/methodology.md +54 -0
  321. package/skills/plan-test-coverage/references/output-templates.md +34 -0
  322. package/skills/plan-test-coverage/references/preservation-contract.md +15 -0
  323. package/skills/plan-uiux-unification/SKILL.md +230 -0
  324. package/skills/plan-uiux-unification/references/output-templates.md +67 -0
  325. package/skills/plan-uiux-unification/references/phase-workbook.md +85 -0
  326. package/skills/plan-uiux-unification/references/preservation-contract.md +24 -0
  327. package/skills/protocol-browser-anti-stall/SKILL.md +211 -0
  328. package/skills/protocol-browser-anti-stall/references/mcp-to-cli-map.md +113 -0
  329. package/skills/protocol-browser-anti-stall/references/playwright-session-coordination.md +170 -0
  330. package/skills/research/SKILL.md +422 -0
  331. package/skills/test-exploratory/SKILL.md +165 -0
  332. package/skills/test-exploratory/references/charter-template.md +29 -0
  333. package/skills/test-load/SKILL.md +126 -0
  334. package/skills/test-mutation/SKILL.md +160 -0
  335. package/skills/test-playwright/SKILL.md +354 -0
  336. package/skills/test-qa/SKILL.md +364 -0
  337. package/skills/test-qa/references/details.md +268 -0
  338. package/skills/test-red-team/SKILL.md +386 -0
  339. package/skills/test-red-team/references/owasp-attack-checklist.md +193 -0
  340. package/skills/test-unit/SKILL.md +259 -0
  341. package/skills/test-unit/references/details.md +267 -0
  342. package/skills/test-visual-regression/SKILL.md +132 -0
  343. package/skills/thirdparty-emil-design-eng/ATTRIBUTION.md +20 -0
  344. package/skills/thirdparty-emil-design-eng/SKILL.md +21 -0
  345. package/skills/thirdparty-emil-design-eng/references/emil-design-eng.md +676 -0
  346. package/skills/thirdparty-ui-ux-pro-max/ATTRIBUTION.md +22 -0
  347. package/skills/thirdparty-ui-ux-pro-max/SKILL.md +304 -0
  348. package/skills/thirdparty-ui-ux-pro-max/data/charts.csv +26 -0
  349. package/skills/thirdparty-ui-ux-pro-max/data/colors.csv +97 -0
  350. package/skills/thirdparty-ui-ux-pro-max/data/icons.csv +101 -0
  351. package/skills/thirdparty-ui-ux-pro-max/data/landing.csv +31 -0
  352. package/skills/thirdparty-ui-ux-pro-max/data/products.csv +97 -0
  353. package/skills/thirdparty-ui-ux-pro-max/data/react-performance.csv +45 -0
  354. package/skills/thirdparty-ui-ux-pro-max/data/stacks/astro.csv +54 -0
  355. package/skills/thirdparty-ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  356. package/skills/thirdparty-ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  357. package/skills/thirdparty-ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  358. package/skills/thirdparty-ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  359. package/skills/thirdparty-ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  360. package/skills/thirdparty-ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  361. package/skills/thirdparty-ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  362. package/skills/thirdparty-ui-ux-pro-max/data/stacks/react.csv +54 -0
  363. package/skills/thirdparty-ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  364. package/skills/thirdparty-ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  365. package/skills/thirdparty-ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  366. package/skills/thirdparty-ui-ux-pro-max/data/stacks/vue.csv +50 -0
  367. package/skills/thirdparty-ui-ux-pro-max/data/styles.csv +68 -0
  368. package/skills/thirdparty-ui-ux-pro-max/data/typography.csv +58 -0
  369. package/skills/thirdparty-ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  370. package/skills/thirdparty-ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  371. package/skills/thirdparty-ui-ux-pro-max/data/web-interface.csv +31 -0
  372. package/skills/thirdparty-ui-ux-pro-max/scripts/core.py +253 -0
  373. package/skills/thirdparty-ui-ux-pro-max/scripts/design_system.py +1067 -0
  374. package/skills/thirdparty-ui-ux-pro-max/scripts/search.py +114 -0
  375. package/skills/thirdparty-web-interface-guidelines/ATTRIBUTION.md +23 -0
  376. package/skills/thirdparty-web-interface-guidelines/SKILL.md +190 -0
  377. package/skills/workflow-build-feature/SKILL.md +118 -0
  378. package/skills/workflow-coding-discipline/SKILL.md +140 -0
  379. package/skills/workflow-environment-ready/SKILL.md +128 -0
  380. package/skills/workflow-feature-flag/SKILL.md +262 -0
  381. package/skills/workflow-feedback-to-closure/SKILL.md +165 -0
  382. package/skills/workflow-fix-and-ship/SKILL.md +136 -0
  383. package/skills/workflow-git-commit/SKILL.md +200 -0
  384. package/skills/workflow-green-repo/SKILL.md +166 -0
  385. package/skills/workflow-grilling/SKILL.md +73 -0
  386. package/skills/workflow-gtm/SKILL.md +153 -0
  387. package/skills/workflow-housekeep/SKILL.md +453 -0
  388. package/skills/workflow-housekeep/references/templates.md +109 -0
  389. package/skills/workflow-launch-ready/SKILL.md +145 -0
  390. package/skills/workflow-merge-conflicts/SKILL.md +62 -0
  391. package/skills/workflow-onboard/SKILL.md +99 -0
  392. package/skills/workflow-parallel-agents/SKILL.md +164 -0
  393. package/skills/workflow-pr/SKILL.md +197 -0
  394. package/skills/workflow-quality-gate/SKILL.md +147 -0
  395. package/skills/workflow-refactor/SKILL.md +274 -0
  396. package/skills/workflow-release-prep/SKILL.md +207 -0
  397. package/skills/workflow-ship-and-observe/SKILL.md +164 -0
  398. package/skills/workflow-spec-tdd/SKILL.md +141 -0
  399. package/skills/workflow-spec-tdd/references/spec-template.md +126 -0
  400. package/skills/workflow-spec-tdd/references/tdd-patterns.md +167 -0
  401. package/skills-cursor/babysit/SKILL.md +17 -0
  402. package/skills-cursor/canvas/SKILL.md +142 -0
  403. package/skills-cursor/canvas/sdk/canvas-tokens.d.ts +235 -0
  404. package/skills-cursor/canvas/sdk/chart-primitives.d.ts +200 -0
  405. package/skills-cursor/canvas/sdk/dag-layout.d.ts +102 -0
  406. package/skills-cursor/canvas/sdk/diff-view.d.ts +130 -0
  407. package/skills-cursor/canvas/sdk/form-primitives.d.ts +194 -0
  408. package/skills-cursor/canvas/sdk/hooks.d.ts +117 -0
  409. package/skills-cursor/canvas/sdk/index.d.ts +47 -0
  410. package/skills-cursor/canvas/sdk/theme.d.ts +61 -0
  411. package/skills-cursor/canvas/sdk/todo-list.d.ts +49 -0
  412. package/skills-cursor/canvas/sdk/ui-primitives.d.ts +549 -0
  413. package/skills-cursor/canvas/sdk/ui-primitives.test.d.ts +2 -0
  414. package/skills-cursor/create-hook/SKILL.md +238 -0
  415. package/skills-cursor/create-rule/SKILL.md +185 -0
  416. package/skills-cursor/create-skill/SKILL.md +269 -0
  417. package/skills-cursor/create-skill/references/authoring-guide.md +182 -0
  418. package/skills-cursor/create-subagent/SKILL.md +228 -0
  419. package/skills-cursor/migrate-to-skills/SKILL.md +121 -0
  420. package/skills-cursor/shell/SKILL.md +22 -0
  421. package/skills-cursor/split-to-prs/SKILL.md +47 -0
  422. package/skills-cursor/statusline/SKILL.md +193 -0
  423. package/skills-cursor/update-cli-config/SKILL.md +85 -0
  424. package/skills-cursor/update-cursor-settings/SKILL.md +137 -0
  425. package/skills.sh.json +297 -0
@@ -0,0 +1,238 @@
1
+ #!/usr/bin/env bash
2
+ #
3
+ # FILE: housekeep-files.sh
4
+ # PURPOSE: Copy-not-move document organizer with a hash inventory, dry run,
5
+ # labeled copies, a JSONL catalog, and a verify gate. macOS/Linux twin
6
+ # of housekeep-files.ps1 (same plan.tsv, same outputs).
7
+ #
8
+ # OVERVIEW:
9
+ # - inventory : sha256 + size of every source file -> work/inventory.csv;
10
+ # file counts of count-only folders -> work/count-only.csv
11
+ # - dry-run : work/preview.tsv with the action per file; no disk change
12
+ # - apply : cp only when the destination is absent, hash the copy, append
13
+ # _ai-catalog.jsonl at each catalog_root and work/catalog.jsonl,
14
+ # write apply-log.tsv. Never deletes.
15
+ # - verify : every inventory path exists at the same size, every copy
16
+ # re-hashes equal, every in-place file exists, count-only counts
17
+ # unchanged. Exit 1 on the first failure. -> work/verify-report.txt
18
+ #
19
+ # DEPENDENCIES: bash 3.2+, find, cp, stat, and shasum or sha256sum.
20
+ #
21
+ # USAGE:
22
+ # housekeep-files.sh inventory plan.tsv work count-only.txt
23
+ # housekeep-files.sh dry-run plan.tsv work
24
+ # housekeep-files.sh apply plan.tsv work
25
+ # housekeep-files.sh verify plan.tsv work count-only.txt
26
+ # MAX_MB=200 MAX_PATH=200 override the caps.
27
+ #
28
+ # NOTES:
29
+ # - No rm, mv, or rsync --delete anywhere in this file by design.
30
+ # - plan.tsv is tab-separated so paths may contain commas, spaces, and CJK.
31
+ # - Optional 10th column `exclude`: ';'-separated relative-path substrings cataloged in
32
+ # place instead of copied (code checkouts, caches). node_modules/.git/__pycache__/
33
+ # .venv/.next/.cache are always skipped.
34
+ #
35
+ set -u
36
+ MODE="${1:-}"; PLAN="${2:-}"; OUT="${3:-}"; COUNT_ONLY="${4:-}"
37
+ MAX_MB="${MAX_MB:-200}"; MAX_PATH="${MAX_PATH:-200}"
38
+ [ -n "$MODE" ] && [ -n "$PLAN" ] && [ -n "$OUT" ] || { echo "usage: $0 inventory|dry-run|apply|verify plan.tsv work [count-only.txt]" >&2; exit 64; }
39
+ case "$MODE" in inventory|dry-run|apply|verify) ;; *) echo "unknown mode $MODE" >&2; exit 64;; esac
40
+
41
+ mkdir -p "$OUT"
42
+ INV="$OUT/inventory.csv"; CNT="$OUT/count-only.csv"; PREVIEW="$OUT/preview.tsv"
43
+ CATALOG="$OUT/catalog.jsonl"; APPLYLOG="$OUT/apply-log.tsv"; VERIFY="$OUT/verify-report.txt"
44
+ RUN="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
45
+ DOC_EXT=" pdf doc docx xls xlsx xlsm ppt pptx csv txt md html htm xtx xml data zip jpg jpeg png heic svg gif webp rtf odt ods eml msg "
46
+ ARTIFACT_RE='/(node_modules|\.git|__pycache__|\.venv|\.next|\.cache)/'
47
+ SECRET_RE='credential|keystore|\.p8$|\.p12$|\.pem$|\.key$|\.jks$|mobileprovision|\.cer$|\.der$|certsigningrequest|\.b64$|service-account|client_secret|google-services\.json|googleservice-info|oauth|private-key|backup_code|\.env$|play-publisher|apple-credentials|env-backups|recovery|2fa|mfa|totp|アクセスキー'
48
+
49
+ if command -v sha256sum >/dev/null 2>&1; then sha() { sha256sum "$1" | awk '{print $1}'; }
50
+ elif command -v shasum >/dev/null 2>&1; then sha() { shasum -a 256 "$1" | awk '{print $1}'; }
51
+ else echo "need sha256sum or shasum" >&2; exit 69; fi
52
+ if stat -f%z / >/dev/null 2>&1; then fsize() { stat -f%z "$1"; }; else fsize() { stat -c%s "$1"; }; fi
53
+ lower() { printf '%s' "$1" | tr '[:upper:]' '[:lower:]'; }
54
+ json_esc() { printf '%s' "$1" | sed -e 's/\\/\\\\/g' -e 's/"/\\"/g' -e 's/\t/\\t/g'; }
55
+ count_files() { [ -d "$1" ] || { echo -1; return; }; find "$1" -type f ! -name desktop.ini ! -name .DS_Store ! -name Thumbs.db | wc -l | tr -d ' '; }
56
+
57
+ date_token() { # $1 name, $2 parent name
58
+ local c y m d
59
+ for c in "$1" "$2"; do
60
+ [ -n "$c" ] || continue
61
+ if [[ "$c" =~ (20[0-9]{2})[-_.]?([0-9]{2})[-_.]?([0-9]{2}) ]]; then
62
+ y="${BASH_REMATCH[1]}"; m="${BASH_REMATCH[2]}"; d="${BASH_REMATCH[3]}"
63
+ if [ "$m" -ge 1 ] && [ "$m" -le 12 ] && [ "$d" -ge 1 ] && [ "$d" -le 31 ]; then echo "$y-$m-$d"; return; fi
64
+ fi
65
+ if [[ "$c" =~ (20[0-9]{2})[-_]?([0-9]{2}) ]]; then
66
+ y="${BASH_REMATCH[1]}"; m="${BASH_REMATCH[2]}"
67
+ if [ "$m" -ge 1 ] && [ "$m" -le 12 ]; then echo "$y-$m"; return; fi
68
+ fi
69
+ done
70
+ echo undated
71
+ }
72
+
73
+ # Expand plan into per-file item lines:
74
+ # action|reason|source|destDir|newName|entity|area|project|doc_type|date|tags|catalog_root|bytes joined by \037 (unit separator).
75
+ # Tab is whitespace to read(1) and collapses empty columns, so plan.tsv is re-separated with \037 first.
76
+ expand_plan() {
77
+ local header=1 source destination entity area project doc_type tags prefix catalog_root
78
+ while IFS=$'\037' read -r source destination entity area project doc_type tags prefix catalog_root exclude _rest; do
79
+ if [ $header -eq 1 ]; then header=0; continue; fi
80
+ [ -n "$source" ] || continue
81
+ case "$source" in \#*) continue;; esac
82
+ if [ ! -e "$source" ]; then echo "plan source missing, skipped: $source" >&2; continue; fi
83
+ local files
84
+ if [ -d "$source" ]; then files=$(find "$source" -type f); else files="$source"; fi
85
+ while IFS= read -r f; do
86
+ [ -n "$f" ] || continue
87
+ local name rel destDir relDir lp ext action reason bytes date newName cand
88
+ name="$(basename "$f")"
89
+ # OS / sync-client metadata files are recreated and removed by the client itself; never inventory them.
90
+ case "$name" in desktop.ini|.DS_Store|Thumbs.db) continue;; esac
91
+ if [ -d "$source" ]; then rel="${f#"$source"/}"; else rel="$name"; fi
92
+ destDir="$destination"; relDir="$(dirname "$rel")"
93
+ [ "$relDir" != "." ] && destDir="$destination/$relDir"
94
+ lp="$(lower "$f")"; ext="$(lower "${name##*.}")"; [ "$ext" = "$(lower "$name")" ] && ext=""
95
+ bytes="$(fsize "$f")"
96
+ action=copy; reason=""
97
+ local excluded=0 pat lrel; lrel="$(lower "$rel")"
98
+ IFS=';' read -ra _ex <<< "${exclude:-}"
99
+ for pat in "${_ex[@]}"; do pat="$(lower "$(printf '%s' "$pat" | sed 's/^ *//;s/ *$//')")"; [ -n "$pat" ] && [[ "$lrel" == *"$pat"* ]] && excluded=1; done
100
+ if printf '%s' "$lp" | grep -Eq "$SECRET_RE"; then action=indexed-in-place; reason=secret
101
+ elif [ $excluded -eq 1 ]; then action=indexed-in-place; reason=excluded
102
+ elif printf '%s' "$lp" | grep -Eq "$ARTIFACT_RE"; then action=indexed-in-place; reason=artifact
103
+ elif [[ "$DOC_EXT" != *" $ext "* ]]; then action=indexed-in-place; reason=ext
104
+ elif [ "$bytes" -gt $((MAX_MB * 1024 * 1024)) ]; then action=indexed-in-place; reason=size; fi
105
+ # Parent-folder date only inside a folder row; a loose file's parent is the old root.
106
+ local parentForDate=""
107
+ if [ -d "$source" ] && [ "$(dirname "$f")" != "$source" ]; then parentForDate="$(basename "$(dirname "$f")")"; fi
108
+ date="$(date_token "$name" "$parentForDate")"
109
+ newName="$name"
110
+ if [ "$action" = copy ] && [ "$prefix" = yes ]; then
111
+ if ! [[ "$name" =~ ^(20[0-9]{6}|20[0-9]{2}-[0-9]{2}|20[0-9]{2}_) ]] && [[ "$name" != "${entity}_"* ]]; then
112
+ cand="${entity}_${area}_${date}_${doc_type}__${name}"
113
+ [ ${#destDir} -le $((MAX_PATH - ${#cand} - 1)) ] && newName="$cand"
114
+ fi
115
+ fi
116
+ printf '%s\037%s\037%s\037%s\037%s\037%s\037%s\037%s\037%s\037%s\037%s\037%s\037%s\n' \
117
+ "$action" "$reason" "$f" "$destDir" "$newName" "$entity" "$area" "$project" "$doc_type" "$date" "$tags" "$catalog_root" "$bytes"
118
+ done <<< "$files"
119
+ done < <(tr -d '\r' < "$PLAN" | tr '\t' '\037')
120
+ }
121
+
122
+ catalog_line() { # args: entity area project doc_type date tags source name canonical bytes sha persist reason
123
+ local t tags_json="" first=1
124
+ IFS=',' read -ra _tags <<< "$6"
125
+ for t in "${_tags[@]}"; do t="$(printf '%s' "$t" | sed 's/^ *//;s/ *$//')"; [ -n "$t" ] || continue
126
+ [ $first -eq 1 ] || tags_json+=","; first=0; tags_json+="\"$(json_esc "$t")\""; done
127
+ printf '{"run":"%s","entity":"%s","area":"%s","project":"%s","doc_type":"%s","date":"%s","tags":[%s],"original_path":"%s","original_name":"%s","canonical_path":"%s","bytes":%s,"sha256":"%s","persist":"%s","reason":"%s"}\n' \
128
+ "$RUN" "$(json_esc "$1")" "$(json_esc "$2")" "$(json_esc "$3")" "$(json_esc "$4")" "$5" "$tags_json" \
129
+ "$(json_esc "$7")" "$(json_esc "$8")" "$(json_esc "$9")" "${10}" "${11}" "${12}" "$(json_esc "${13}")"
130
+ }
131
+
132
+ read_count_only() { [ -n "$COUNT_ONLY" ] && [ -f "$COUNT_ONLY" ] && grep -v '^[[:space:]]*#' "$COUNT_ONLY" | grep -v '^[[:space:]]*$' || true; }
133
+
134
+ case "$MODE" in
135
+ inventory)
136
+ echo "path,bytes,sha256" > "$INV"; n=0
137
+ while IFS=$'\037' read -r action reason src destDir newName entity area project doc_type date tags croot bytes; do
138
+ n=$((n+1)); [ $((n % 50)) -eq 0 ] && echo "hashing $n"
139
+ # Hash only what will be copied; in-place items are size-checked so a streaming drive is not forced to download them.
140
+ h=""; [ "$action" = copy ] && h="$(sha "$src")"
141
+ printf '"%s",%s,%s\n' "${src//\"/\"\"}" "$bytes" "$h" >> "$INV"
142
+ done < <(expand_plan)
143
+ echo "folder,files" > "$CNT"
144
+ while IFS= read -r folder; do printf '"%s",%s\n' "${folder//\"/\"\"}" "$(count_files "$folder")" >> "$CNT"; done < <(read_count_only)
145
+ echo "inventory: $n files -> $INV; count-only -> $CNT"
146
+ ;;
147
+ dry-run)
148
+ printf 'action\treason\tsource\tdestination\tnew_name\tentity\tarea\tproject\tdoc_type\tdate\ttags\n' > "$PREVIEW"
149
+ while IFS=$'\037' read -r action reason src destDir newName entity area project doc_type date tags croot bytes; do
150
+ [ "$action" = copy ] && [ -e "$destDir/$newName" ] && action=skipped-exists
151
+ printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' "$action" "$reason" "$src" "$destDir" "$newName" "$entity" "$area" "$project" "$doc_type" "$date" "$tags" >> "$PREVIEW"
152
+ done < <(expand_plan)
153
+ echo "preview -> $PREVIEW"; tail -n +2 "$PREVIEW" | awk -F'\t' '{k=$1; if($2!="")k=k":"$2; c[k]++} END{for(k in c) printf " %-24s %d\n",k,c[k]}'
154
+ ;;
155
+ apply)
156
+ [ -f "$INV" ] || { echo "inventory.csv missing under $OUT — run inventory first" >&2; exit 65; }
157
+ printf 'action\tsource\tcanonical\tbytes\tsha256\n' > "$APPLYLOG"
158
+ copied=0 skipped=0 inplace=0 failed=0 copiedBytes=0 n=0
159
+ while IFS=$'\037' read -r action reason src destDir newName entity area project doc_type date tags croot bytes; do
160
+ n=$((n+1)); [ $((n % 50)) -eq 0 ] && echo "apply $n"
161
+ esc="${src//\"/\"\"}"
162
+ inv_line="$(grep -F -- "\"$esc\",$bytes," "$INV" | head -1)"
163
+ [ -n "$inv_line" ] || { echo "source not in inventory (plan changed after inventory?): $src" >&2; exit 65; }
164
+ sha_src="${inv_line##*,}" # empty for in-place items, which are never hashed
165
+ canonical="$destDir/$newName"; persist=""
166
+ if [ "$action" = indexed-in-place ]; then persist=indexed-in-place; canonical="$src"; inplace=$((inplace+1))
167
+ elif [ -e "$canonical" ]; then persist=skipped-exists; skipped=$((skipped+1))
168
+ else
169
+ mkdir -p "$destDir"
170
+ if cp -p "$src" "$canonical" 2>/dev/null && [ "$(sha "$canonical")" = "$sha_src" ]; then
171
+ persist=copied-source-kept; copied=$((copied+1)); copiedBytes=$((copiedBytes+bytes))
172
+ else persist=failed; reason=copy-or-hash-error; failed=$((failed+1)); fi
173
+ fi
174
+ printf '%s\t%s\t%s\t%s\t%s\n' "$persist" "$src" "$canonical" "$bytes" "$sha_src" >> "$APPLYLOG"
175
+ line="$(catalog_line "$entity" "$area" "$project" "$doc_type" "$date" "$tags" "$src" "$(basename "$src")" "$canonical" "$bytes" "$sha_src" "$persist" "$reason")"
176
+ printf '%s\n' "$line" >> "$CATALOG"
177
+ if [ -n "$croot" ]; then
178
+ mkdir -p "$croot"; printf '%s\n' "$line" >> "$croot/_ai-catalog.jsonl"
179
+ if [ ! -f "$croot/_SEARCH.md" ]; then cat > "$croot/_SEARCH.md" <<'EOF'
180
+ # _SEARCH.md — how to find a file here
181
+
182
+ 1. grep `_ai-catalog.jsonl` in this folder: tags, entity, area, doc_type, date, original_name.
183
+ 2. Search the prefixed filename: `{entity}_{area}_{date}_{doc_type}__{original name}`.
184
+ 3. Search the original name after `__`; it is unchanged.
185
+
186
+ persist values: copied-source-kept (original still at original_path), indexed-in-place (only copy is at original_path), skipped-exists, failed.
187
+ Keys, credentials, videos, and installers are never copied here; the catalog points to where they already live.
188
+ EOF
189
+ fi
190
+ fi
191
+ done < <(expand_plan)
192
+ echo "apply done: copied=$copied skipped-exists=$skipped indexed-in-place=$inplace failed=$failed copiedMB=$((copiedBytes / 1048576))"
193
+ echo "log -> $APPLYLOG"; echo "catalog -> $CATALOG"
194
+ [ "$failed" -eq 0 ] || exit 2
195
+ ;;
196
+ verify)
197
+ [ -f "$INV" ] || { echo "inventory.csv missing under $OUT" >&2; exit 65; }
198
+ : > "$VERIFY"; fail=0; checked=0; copies=0; inplace=0
199
+ echo "verify run $RUN" >> "$VERIFY"
200
+ while IFS= read -r row; do
201
+ p="$(printf '%s' "$row" | sed -E 's/^"(.*)",[0-9]+,[0-9a-f]*$/\1/' | sed 's/""/"/g')"
202
+ b="$(printf '%s' "$row" | sed -E 's/^".*",([0-9]+),[0-9a-f]*$/\1/')"
203
+ checked=$((checked+1))
204
+ if [ ! -e "$p" ]; then fail=$((fail+1)); echo "MISSING source: $p" >> "$VERIFY"
205
+ elif [ "$(fsize "$p")" != "$b" ]; then fail=$((fail+1)); echo "RESIZED source: $p" >> "$VERIFY"; fi
206
+ done < <(tail -n +2 "$INV")
207
+ echo "sources checked: $checked" >> "$VERIFY"
208
+ if [ -f "$CATALOG" ]; then
209
+ while IFS= read -r line; do
210
+ persist="$(printf '%s' "$line" | sed -E 's/.*"persist":"([^"]*)".*/\1/')"
211
+ if [ "$persist" = copied-source-kept ]; then
212
+ copies=$((copies+1))
213
+ c="$(printf '%s' "$line" | sed -E 's/.*"canonical_path":"((\\"|[^"])*)".*/\1/' | sed 's/\\"/"/g;s/\\\\/\\/g')"
214
+ h="$(printf '%s' "$line" | sed -E 's/.*"sha256":"([^"]*)".*/\1/')"
215
+ if [ ! -e "$c" ]; then fail=$((fail+1)); echo "MISSING copy: $c" >> "$VERIFY"
216
+ elif [ "$(sha "$c")" != "$h" ]; then fail=$((fail+1)); echo "HASH MISMATCH copy: $c" >> "$VERIFY"; fi
217
+ elif [ "$persist" = indexed-in-place ]; then
218
+ inplace=$((inplace+1))
219
+ o="$(printf '%s' "$line" | sed -E 's/.*"original_path":"((\\"|[^"])*)".*/\1/' | sed 's/\\"/"/g;s/\\\\/\\/g')"
220
+ [ -e "$o" ] || { fail=$((fail+1)); echo "MISSING in-place: $o" >> "$VERIFY"; }
221
+ fi
222
+ done < "$CATALOG"
223
+ fi
224
+ echo "copies re-hashed: $copies" >> "$VERIFY"; echo "in-place files present-checked: $inplace" >> "$VERIFY"
225
+ if [ -f "$CNT" ]; then cc=0
226
+ while IFS= read -r row; do
227
+ folder="$(printf '%s' "$row" | sed -E 's/^"(.*)",-?[0-9]+$/\1/' | sed 's/""/"/g')"
228
+ was="$(printf '%s' "$row" | sed -E 's/^".*",(-?[0-9]+)$/\1/')"
229
+ cc=$((cc+1)); now="$(count_files "$folder")"
230
+ [ "$now" = "$was" ] || { fail=$((fail+1)); echo "COUNT CHANGED: $folder $was -> $now" >> "$VERIFY"; }
231
+ done < <(tail -n +2 "$CNT")
232
+ echo "count-only folders rechecked: $cc" >> "$VERIFY"
233
+ fi
234
+ echo "failures: $fail" >> "$VERIFY"
235
+ if [ "$fail" -eq 0 ]; then echo "RESULT: PASS - every source present, every copy hash-equal, media counts unchanged" >> "$VERIFY"; else echo "RESULT: FAIL" >> "$VERIFY"; fi
236
+ cat "$VERIFY"; [ "$fail" -eq 0 ] || exit 1
237
+ ;;
238
+ esac
@@ -0,0 +1,174 @@
1
+ ---
2
+ name: housekeep-gates
3
+ description: >
4
+ Consolidate accreted CI gates, ratchets, and hooks into one required
5
+ aggregator check. Use after audit-gate-logic, or when "clean up our CI
6
+ checks", "we have three lint jobs", or "make one quality gate". Pipeline
7
+ cost → audit-cicd.
8
+ license: MIT
9
+ effort: high
10
+ ---
11
+
12
+ # housekeep-gates — One required check, defined in code
13
+
14
+ **Degree of freedom: MIXED — T1 is the priority.** Mapping and winner
15
+ confirmation `[HIGH freedom]`; aggregator `needs:` + skip-fail, loser
16
+ **deletion**, branch-protection, and Phase 4 probes `[LOW freedom — run
17
+ exactly]`. **Net enforcement strictly ≥ before.**
18
+
19
+ Apply-now. `audit-gate-logic` mapped the sprawl and named a winner per
20
+ duplicate cluster; this makes the repo match the map. **Target state: one
21
+ required check in branch protection, backed by an aggregator job that
22
+ `needs:` every real gate — so "what blocks merge" has exactly one answer,
23
+ in one file.**
24
+
25
+ Every retirement is proven safe before deletion. Never weaken enforcement
26
+ while consolidating. **Net enforcement strictly ≥ before.**
27
+
28
+ This is the execution arm of `audit-gate-logic`, the same way
29
+ `housekeep-design` executes `plan-uiux-unification`.
30
+
31
+ ## This skill vs neighbors
32
+
33
+ | Skill | Owns |
34
+ |---|---|
35
+ | **housekeep-gates** (this) | Consolidate / delete / wire the aggregator |
36
+ | `audit-gate-logic` | Read-only map — bypass, ratchets, archaeology |
37
+ | `audit-cicd` | Pipeline cost, speed, storage |
38
+ | `workflow-quality-gate` | *Runs* the pre-release sweep |
39
+ | `enhance-agent-guardrails` | *Installs* new guard classes, not accreted-gate cleanup |
40
+ | `workflow-green-repo` | Make the repo green — does not redesign the gate graph |
41
+ | `housekeep-backlog` | Parked-work register — not CI gates |
42
+ | `housekeep-dead-code` | Owns the dead-code `--max-issues` ratchet that joins this aggregator |
43
+
44
+ ## How to reason
45
+
46
+ 1. **Observe** — archaeology map: cluster, winner, loser, current required checks
47
+ 2. **Interpret** — would deleting this loser drop unique coverage?
48
+ 3. **Classify** — port-then-delete / keep / not-yet-mapped
49
+ 4. **Severity** — deleting the only server-side-enforced gate is a regression
50
+
51
+ ## Worked example
52
+
53
+ > **Observe:** two lint jobs; old `lint.yml` is required; new `ci.yml` lint
54
+ > is not. `paths:` skips `.github/**`.
55
+ > **Interpret:** retiring `lint.yml` without porting + aggregator skip-fail
56
+ > would let a workflow edit merge unlinted.
57
+ > **Classify:** port unique rules, wire winner, delete loser; probe the skip path.
58
+ > **Probe:** change matching the old skip filter → aggregator must go red, not skip-green.
59
+
60
+ ---
61
+
62
+ ## Phase 0 — Load the map (or make a quick one) [HIGH freedom; confirm before edits]
63
+
64
+ Consume the archaeology map from `audit-gate-logic` (duplicate clusters,
65
+ winners, losers, ratchet findings). If none exists, run its Phase 0 + 2.5
66
+ first — never consolidate gates you have not mapped. Deleting an "obvious
67
+ duplicate" that was the only server-side-enforced one *weakens* the repo.
68
+
69
+ Confirm which winners stand **before touching anything**. Branch-protection
70
+ changes always get explicit confirmation.
71
+
72
+ ---
73
+
74
+ ## Phase 1 — Build the aggregator gate [LOW freedom — fail on failed or skipped]
75
+
76
+ Create (or adopt) the single-gate structure:
77
+
78
+ - One job — conventionally `gate` / `all-green` — that `needs:` every real
79
+ check (lint, typecheck, tests, build, and the audit jobs worth blocking
80
+ on) and fails if any dependency failed **or was skipped** (`if: always()`
81
+ + explicit result check). Skipped-counts-as-success is the classic
82
+ aggregator bug.
83
+ - Make that job the **only** required status check; remove scattered
84
+ required entries. Enforcement moves from a settings list nobody audits
85
+ to a `needs:` list that lives in code review.
86
+ - If a merge queue is (or will be) in use: add `merge_group` to the
87
+ workflow triggers and keep check names identical across `pull_request`
88
+ and `merge_group`, or queued PRs wait on checks that never start.
89
+ - Keep one fast always-runs job as the visible status link if the
90
+ aggregator's `needs:` delays its appearance.
91
+
92
+ ---
93
+
94
+ ## Phase 2 — Consolidate per the map [LOW freedom — delete losers, do not disable]
95
+
96
+ For each duplicate cluster, in this order:
97
+
98
+ 1. **Port unique value** from losers into the winner (a lint rule only the
99
+ old config had, a test only the old workflow ran). Diff configs before
100
+ deleting — retirement must not drop coverage.
101
+ 2. **Wire the winner** into the aggregator's `needs:`.
102
+ 3. **Retire the losers** — delete the workflow/config, do not
103
+ disable-and-keep. A disabled gate is comprehension debt and resurrection
104
+ bait for the next agent session.
105
+ 4. **Extract shared logic** into a reusable workflow or composite action
106
+ when the same steps exist in 2+ places.
107
+
108
+ Also restore **hook/CI parity**: local pre-commit / pre-push hooks run the
109
+ same commands (ideally the same scripts) as CI's gate jobs — one
110
+ definition, two callers — so "passes locally" predicts "passes CI" and
111
+ nobody learns `--no-verify`.
112
+
113
+ ---
114
+
115
+ ## Phase 3 — Normalize the ratchets [HIGH freedom]
116
+
117
+ - **One baseline per metric.** Competing thresholds (jest + codecov + a
118
+ committed floor) collapse to one enforcement point; the rest read from
119
+ it or die.
120
+ - **Auto-tighten upward.** Floors track reality (threshold rises as the
121
+ metric improves, small flake tolerance) instead of sitting far below
122
+ actual.
123
+ - **Resets are reviewed, separate acts.** Baseline regeneration happens in
124
+ its own PR with the diff visible. CI should fail if a baseline file
125
+ changes in the same PR as a metric regression, where the tooling allows
126
+ expressing that.
127
+ - **No silent exemption growth.** Ignore-lists and inline-disable counts
128
+ become ratcheted metrics themselves where feasible.
129
+
130
+ ---
131
+
132
+ ## Phase 4 — Prove it [LOW freedom — run both probes]
133
+
134
+ - **Deliberate-violation probe** on a scratch branch: one violation per
135
+ consolidated gate class (lint error, failing test, coverage drop,
136
+ baseline edit bundled with a regression). Confirm the aggregator goes
137
+ red and the PR is unmergeable. A consolidation is not done until each
138
+ retired loser's job is demonstrably covered by the winner.
139
+ - **Skip-path probe:** push a change matching any `paths:` filter that
140
+ previously skipped gates; confirm the aggregator still reports
141
+ (skipped-as-success is the failure mode to disprove).
142
+ - Run a `workflow-green-repo`-style full pass to confirm the repo is green
143
+ under the new single gate.
144
+
145
+ ---
146
+
147
+ ## Definition of Done
148
+
149
+ - [ ] Archaeology map confirmed with the user before edits
150
+ - [ ] Aggregator job exists, fails on any failed **or skipped** dependency, and is the only required check
151
+ - [ ] `merge_group` parity in place if a merge queue is used
152
+ - [ ] Every cluster: unique value ported, winner wired, losers deleted (not disabled)
153
+ - [ ] Shared steps extracted to one reusable definition; hooks and CI call the same commands
154
+ - [ ] One baseline per metric; ratchets auto-tighten; resets require a separate reviewed PR; exemption lists cannot silently grow
155
+ - [ ] Deliberate-violation + skip-path probes red as expected; repo green under the new gate
156
+ - [ ] Net enforcement strictly ≥ before
157
+
158
+ ## Self-critique before claiming done [LOW freedom — do not skip]
159
+
160
+ 1. **Map confirmed** — no "obvious duplicate" deleted unmapped
161
+ 2. **Skipped ≠ success** — aggregator checks dependency results
162
+ 3. **Losers deleted** — not disabled
163
+ 4. **Probes red** — violation + skip-path
164
+ 5. **Branch protection** — only after explicit confirmation
165
+
166
+ ## Output format
167
+
168
+ 1. **Before/after map** — old gates → new structure (aggregator + needs list)
169
+ 2. **Per-cluster log** — winner | value ported from losers | losers deleted
170
+ 3. **Ratchet policy** — metric | enforcement point | floor behavior | reset rule
171
+ 4. **Probe evidence** — violation | gate response | pass/fail
172
+
173
+ Applied phase-by-phase. Pause for approval between phases when blast
174
+ radius is large. Branch-protection changes always get explicit confirmation.
@@ -0,0 +1,137 @@
1
+ ---
2
+ name: iterate-agent-harness
3
+ description: >
4
+ Turn an agent failure (premature stop, false completion, gamed check, missed
5
+ file) into a rule, hook, or CI guard with a regression test. Use when "the
6
+ agent stopped early again", "it gamed the test", or "add a guard so this
7
+ doesn't recur".
8
+ license: MIT
9
+ effort: high
10
+ ---
11
+
12
+ # iterate-agent-harness — Failure → Durable Guard
13
+
14
+ **Degree of freedom: MIXED.** Failure-class and smallest fix `[HIGH freedom]`;
15
+ guard-fails-before-fix and the report shape `[LOW freedom — run exactly]`.
16
+
17
+ When an agent run ends wrong, the fix is not just to redo the task — it is to
18
+ change the harness so the whole class of failure cannot recur silently. This
19
+ skill converts a single failure into a durable guard plus a regression check.
20
+
21
+ > **A failure you cannot reproduce, you cannot prove you fixed.** Capture the
22
+ > failure mode, add a guard that fails on it, then make the guard pass with the
23
+ > smallest durable change.
24
+
25
+ ## How to reason
26
+
27
+ 1. **Observe** — happened vs should-have; transcript, state file, diff, CI
28
+ 2. **Interpret** — routing miss, missing guard, or a gate that passed wrongly
29
+ 3. **Classify** — premature stop / false completion / reward hacking / scope / handoff / context loss
30
+ 4. **Guard** — add a guard that fails on the unfixed behavior, then the smallest durable fix
31
+
32
+ ## Worked example
33
+
34
+ > **Observe:** agent said complete-everything was done; `.cursor/complete-everything-state.md` still has 12 unchecked items.
35
+ > **Interpret:** false completion — no harness stopped the claim.
36
+ > **Classify:** false completion; gap is an unwired or skippable completion gate.
37
+ > **Fix:** add a hook test that fails while unchecked items remain; confirm it fails on this tree; then wire the hook. Do not delete the open items to go green.
38
+
39
+ ## Self-critique before reporting
40
+
41
+ - **Fail-then-pass** — the new guard failed on the unfixed tree
42
+ - **Class, not incident** — the same failure mode would now be caught
43
+ - **Guard not weakened** — passing did not mean deleting or narrowing the check
44
+ - **Right owner** — app bug → `workflow-fix-and-ship`; new SKILL.md from scratch → `meta-skill-creator`
45
+
46
+ ## Phase 0 — Capture the failure precisely [HIGH freedom]
47
+
48
+ 1. State what happened vs. what should have happened, in one sentence each.
49
+ 2. Classify the failure mode (borrow the taxonomy the toolkit already targets):
50
+ - **premature stop** — quit with actionable work remaining. Shapes to guard: ends the turn with a plan or status report instead of the work; asks a question the repo could answer; stops after a subagent returns without integrating its result; wraps up early believing context is running out (compaction exists — it should not)
51
+ - **false completion** — claimed done without evidence, including fabricated progress: a "ran", "checked", or "verified" with no matching tool result in the transcript
52
+ - **reward hacking** — satisfied the check, not the intent (skipped test,
53
+ narrowed assertion, `@ts-ignore`, blanket snapshot update)
54
+ - **scope boundary error** — treated the plan/visible list as the full scope
55
+ - **broken handoff** — a skill/command/subagent pointed at a missing or
56
+ wrong target, or a phase transition dropped work
57
+ - **context loss** — forgot earlier state after compaction
58
+ 3. Pull evidence from the agent transcript, `.cursor/*-state.md` files,
59
+ `git diff`, and CI logs. Link the concrete artifacts.
60
+
61
+ ## Phase 1 — Locate the harness gap [HIGH freedom]
62
+
63
+ Find where the harness *should* have caught it:
64
+
65
+ - Was there a skill/rule that covered this, and it was not followed or not
66
+ triggered? → the description/routing or wording is the gap.
67
+ - Was there no guard at all? → a new rule, hook, subagent check, or
68
+ verification script is warranted.
69
+ - Did an enforcement gate exist but pass anyway (like a count check with
70
+ incomplete coverage)? → the gate's coverage is the gap.
71
+
72
+ Name the single smallest change that closes the class, not just this instance.
73
+ Prefer strengthening an existing skill/rule/hook over adding a new one; only
74
+ add a new component when no existing one owns the concern.
75
+
76
+ ## Phase 2 — Add a regression guard first [LOW freedom — fail before fix]
77
+
78
+ Before fixing, add something that fails on the captured failure:
79
+
80
+ - an executable check (a script under `scripts/`, a hook test like
81
+ `scripts/test-completion-gate.mjs`, a validation rule) — preferred; or
82
+ - a documented, repeatable scenario with an explicit expected outcome when the
83
+ failure is judgment-based and not mechanically checkable.
84
+
85
+ For premature-stop and false-completion classes, two guards are mechanical: (1) transcript audit — every claimed action maps to a tool result; (2) turn-ending check — the last paragraph of a turn lists done vs owed, and an owed item with no named blocker means the turn should not have ended. Encode those as the guard rather than a wording tweak.
86
+
87
+ Confirm the guard actually fails against the current (unfixed) behavior — a
88
+ guard that passes before the fix proves nothing.
89
+
90
+ ## Phase 3 — Make the smallest durable fix [HIGH freedom]
91
+
92
+ Apply the minimal change that makes the guard pass by satisfying intent:
93
+
94
+ - tighten a skill/rule's wording or trigger; resolve a policy conflict;
95
+ - fix or add a hook / subagent / verification script;
96
+ - repair a broken skill/command/subagent reference or handoff.
97
+
98
+ Do not weaken the guard to pass, and do not delete working behavior. Keep the
99
+ public behavior of unrelated skills unchanged.
100
+
101
+ ## Phase 4 — Validate and record the lesson [LOW freedom — do not skip]
102
+
103
+ 1. Re-run the guard: it now passes for the right reason. Run the repo's full
104
+ check suite (`npm test` or equivalent) so the new guard is wired in.
105
+ 2. Record a concise lesson: the failure mode, the trigger, the guard, and the
106
+ fix — in `CHANGELOG.md` and/or a durable lessons note, so the same mistake
107
+ surfaces a reference next time.
108
+ 3. If the failure recurred despite an existing guard, note why the guard was
109
+ insufficient and strengthen it rather than duplicating it.
110
+
111
+ ## Phase 5 — Report [LOW freedom — this shape]
112
+
113
+ ```md
114
+ ## Harness Iteration — <date>
115
+ Failure mode: <class> — <one-sentence description>
116
+ Root gap: <missing/weak guard or conflicting rule>
117
+ Guard added: <script/test/rule> — failed before, passes after
118
+ Durable fix: <smallest change>
119
+ Validation: <check suite> → green
120
+ Lesson recorded: <where>
121
+ ```
122
+
123
+ ## Guardrails
124
+
125
+ - Improve the harness for the **class**, not just the one incident.
126
+ - A new guard must fail before the fix and pass after — never the reverse.
127
+ - Never satisfy a guard by weakening it; that repeats the reward-hacking
128
+ failure this skill exists to prevent.
129
+ - Prefer editing an existing skill/rule/hook to adding a new one.
130
+
131
+ ## Related
132
+
133
+ - `verification-before-completion` — the evidence discipline guards enforce
134
+ - `completion-judge` — independent verdict that catches false completion
135
+ - `complete-everything` / `burndown-full` — the closure loops guards protect
136
+ - `create-skill` / `create-rule` / `create-hook` — build the new guard
137
+ - `meta-skill-creator` — author or refine a skill correctly
@@ -0,0 +1,103 @@
1
+ ---
2
+ name: iterate-gtm-weekly
3
+ description: >
4
+ Weekly go-to-market review for a shipped product: funnel by source,
5
+ activation cohort, top drop-off, launch results, then one experiment and one
6
+ post, scorecard row appended. Use when "weekly growth review", "what should
7
+ we do this week for growth", "GTM check-in". Production bugs →
8
+ iterate-post-launch.
9
+ license: MIT
10
+ disable-model-invocation: true
11
+ ---
12
+
13
+ # iterate-gtm-weekly — One number, one fix, one post
14
+
15
+ **Degree of freedom: MIXED.** Which lever to pull `[HIGH freedom]`; the
16
+ five-line review, the single-experiment rule, and the scorecard update
17
+ `[LOW freedom — run exactly]`.
18
+
19
+ The loop after `workflow-gtm`. Thirty minutes a week: read what the funnel
20
+ did, name the one step that lost the most, ship one experiment against it,
21
+ publish one thing, write it down. `iterate-post-launch` owns production
22
+ defects; this owns growth.
23
+
24
+ ## This skill vs neighbors
25
+
26
+ | Skill | Owns |
27
+ |---|---|
28
+ | **iterate-gtm-weekly** (this) | Weekly funnel read → one experiment → one post → scorecard |
29
+ | `iterate-post-launch` | Sentry / production signals → fix |
30
+ | `workflow-gtm` | The initial plan-to-apply run this loop follows |
31
+ | `audit-analytics` | When a funnel cell is blind, add the event first |
32
+ | `docs-launch-kit` | The post, when it is a launch |
33
+ | `workflow-feedback-to-closure` | Turning user feedback into tickets |
34
+
35
+ Do **not** fire for "errors spiked in production" → `iterate-post-launch`.
36
+
37
+ ## How to reason
38
+
39
+ 1. **Read** — the six funnel cells by source for the last 7 days vs the prior 7
40
+ 2. **Locate** — the single step with the largest absolute loss (not the smallest percentage)
41
+ 3. **Attribute** — did last week's experiment or post move anything; say so with the number
42
+ 4. **Choose** — one experiment on the losing step, one post, both small enough for this week
43
+ 5. **Record** — scorecard row appended; next review scheduled
44
+
45
+ ## Worked example
46
+
47
+ > **Read:** visits 4,120 (+9%), signups 310 (−4%), activated 71 (23%, flat), paid 6, refer 2; Show HN source dried up, organic docs traffic up.
48
+ > **Locate:** signup → activated loses 239 users; visit → signup lost 22 more than last week but far fewer in absolute terms.
49
+ > **Attribute:** last week's hero rewrite: visit→signup 7.9% → 7.5% — no lift; keep for one more week (sample small).
50
+ > **Choose:** experiment — pre-fill the workspace with sample data for the "explore" JTBD answer (`enhance-onboarding`); post — a short comparison page announcement.
51
+ > **Record:** row appended to `plan-gtm.md` scorecard; review next Monday.
52
+
53
+ ## Self-critique before reporting
54
+
55
+ - **Five lines** — the review fits: funnel by source · activation cohort · top drop-off · last experiment result · one post
56
+ - **One experiment** — exactly one, with a metric and a stop date; a second becomes next week's
57
+ - **Attributed** — last week's change has a number beside it, even if "no change" or "unmeasured"
58
+ - **Recorded** — scorecard row appended in `plan-gtm.md` (or the file `workflow-gtm` produced)
59
+ - **Right owner** — production errors → `iterate-post-launch`; new events → `audit-analytics`
60
+
61
+ ---
62
+
63
+ ## Procedure [LOW freedom — run exactly]
64
+
65
+ 1. **Pull numbers** — analytics dashboard or export for Visit → Signup →
66
+ Activated → Habit → Paid → Refer, by `utm_source` / referrer, this week vs
67
+ last. Blind cell → write **unmeasured** and file the event with
68
+ `audit-analytics` as this week's experiment if it is the losing step.
69
+ 2. **Launch results** — fill any `docs/launch/*.md` Results table older than 7 days.
70
+ 3. **Locate the loss** — absolute users lost per step; pick the largest.
71
+ 4. **Attribute** — last week's experiment: metric before / after; keep, revert, or extend.
72
+ 5. **Choose** — one experiment (owner skill named) + one post (channel named).
73
+ 6. **Write the row** and schedule next week.
74
+
75
+ ## Levers by losing step [HIGH freedom]
76
+
77
+ | Losing step | First levers | Skill |
78
+ |---|---|---|
79
+ | Visit → Signup | hero five-second test, CTA verb, "no card" line, ungated try | `enhance-web-conversion` |
80
+ | Signup → Activated | cut a field, sample data, checklist end = activation, day-1 nudge | `enhance-onboarding`, `enhance-lifecycle-email` |
81
+ | Activated → Habit | day-3/7 nudges, saved-state reminder, second aha | `enhance-lifecycle-email` |
82
+ | Habit → Paid | limit-moment prompt, price shown, annual toggle wording | `enhance-web-conversion`, `plan-pricing` |
83
+ | Paid → Refer | badge, share artifact, referral credit on activation | `enhance-growth-loops` |
84
+ | Visits themselves | one comparison page, one launch post, registry listing | `docs-comparison-pages`, `docs-launch-kit`, `audit-registry-listing` |
85
+
86
+ ## Scorecard row [LOW freedom — shape]
87
+
88
+ ```markdown
89
+ | Week | Visit | Signup | Activated | Habit | Paid | Refer | Top loss | Experiment (metric, stop date) | Post | Last week's result |
90
+ ```
91
+
92
+ ## Guardrails
93
+
94
+ - **One experiment.** Two changes on one step make attribution impossible.
95
+ - **Absolute loss, not percentage.** A 90% drop on 10 users is not the priority.
96
+ - **Numbers or "unmeasured".** No estimates presented as measurements.
97
+ - **Thirty minutes.** If the review grows, the instrumentation is the problem — file it.
98
+
99
+ ## Chains with
100
+
101
+ - **`workflow-gtm`** → produces the scorecard this loop appends to.
102
+ - **`audit-analytics`** → blind cells.
103
+ - **`enhance-onboarding`**, **`enhance-web-conversion`**, **`enhance-lifecycle-email`**, **`enhance-growth-loops`**, **`docs-comparison-pages`**, **`docs-launch-kit`** → the levers.