codymaster 7.0.2 → 7.0.3

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 (341) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/README.md +38 -1
  3. package/dist/agent/codex.js +73 -21
  4. package/dist/agent-dispatch.js +63 -48
  5. package/dist/cli/commands/brain.js +18 -0
  6. package/dist/cli/commands/design-studio.js +1 -1
  7. package/dist/cm-suggest.js +3 -3
  8. package/dist/dashboard-project-summary.js +9 -0
  9. package/dist/dashboard.js +11 -5
  10. package/dist/execution-analyzer.js +9 -1
  11. package/dist/judge.js +16 -15
  12. package/dist/mcp-context-server.js +45 -23
  13. package/dist/mcp-skills-tools.js +2 -2
  14. package/dist/skill-chain.js +26 -3
  15. package/dist/skill-token-report.js +105 -0
  16. package/dist/sprint-pipeline.js +3 -3
  17. package/dist/ui/onboarding.js +3 -4
  18. package/dist/utils/design-taste.js +1 -1
  19. package/dist/utils/output-compress.js +8 -0
  20. package/package.json +2 -1
  21. package/public/dashboard/app.js +40 -13
  22. package/public/dashboard/index.html +190 -5
  23. package/public/dashboard/style.css +1 -1
  24. package/scripts/build-skills.mjs +36 -2
  25. package/scripts/mcp-bridge.js +41 -24
  26. package/scripts/pack-plugin.mjs +206 -0
  27. package/skills/cm-ads-tracker/SKILL.md +401 -0
  28. package/skills/cm-ads-tracker/evals/evals.json +55 -0
  29. package/skills/cm-ads-tracker/references/gtm-architecture.md +321 -0
  30. package/skills/cm-ads-tracker/references/industry-events.md +294 -0
  31. package/skills/cm-ads-tracker/references/platforms-api.md +238 -0
  32. package/skills/cm-ads-tracker/templates/capi-payload.md +79 -0
  33. package/skills/cm-ads-tracker/templates/datalayer-push.js +104 -0
  34. package/skills/cm-ads-tracker/templates/gtm-variables.js +56 -0
  35. package/skills/cm-auto-publisher/SKILL.md +81 -0
  36. package/skills/cm-booking-calendar/SKILL.md +521 -0
  37. package/skills/cm-booking-calendar/references/industry-patterns.md +527 -0
  38. package/skills/cm-booking-calendar/templates/booking-form.css +626 -0
  39. package/skills/cm-booking-calendar/templates/booking-form.html +477 -0
  40. package/skills/cm-booking-calendar/templates/calendar-engine.js +419 -0
  41. package/skills/cm-booking-calendar/templates/calendar-export.js +395 -0
  42. package/skills/cm-booking-calendar/templates/reminder-config.js +629 -0
  43. package/skills/cm-brainstorm-idea/SKILL.md +5 -5
  44. package/skills/cm-code-review/SKILL.md +2 -2
  45. package/skills/cm-codeintell/SKILL.md +47 -580
  46. package/skills/cm-codeintell/references/integration-workflows.md +23 -0
  47. package/skills/cm-codeintell/references/layer-0-skeleton.md +54 -0
  48. package/skills/cm-codeintell/references/layer-1-codegraph.md +58 -0
  49. package/skills/cm-codeintell/references/layer-2-architecture.md +31 -0
  50. package/skills/cm-codeintell/references/layer-3-context-builder.md +32 -0
  51. package/skills/cm-content-factory/.content-factory-state.json +132 -0
  52. package/skills/cm-content-factory/.git 2/logs/refs/heads/main +1 -0
  53. package/skills/cm-content-factory/.git 2/logs/refs/remotes/origin/main +1 -0
  54. package/skills/cm-content-factory/.git 2/objects/02/fb0956734b5f8ba3f918b7defd04a89cfe0076 +0 -0
  55. package/skills/cm-content-factory/.git 2/objects/08/1e129d75dc6feac6c02037272e6bd1a04e3324 +0 -0
  56. package/skills/cm-content-factory/.git 2/objects/0c/5393416f3c5e01c9a655a802bff0dd52f76f0a +0 -0
  57. package/skills/cm-content-factory/.git 2/objects/10/0b9be46978a946a77188f68be725098a122001 +0 -0
  58. package/skills/cm-content-factory/.git 2/objects/10/cf041167fc9843610eb3d90259ef3396315fdc +0 -0
  59. package/skills/cm-content-factory/.git 2/objects/12/5e19538dd6e1338ffe74f6c4c165b00435bf48 +0 -0
  60. package/skills/cm-content-factory/.git 2/objects/16/a9b9d0088d5c1347628b45a2620b479d8ad57c +0 -0
  61. package/skills/cm-content-factory/.git 2/objects/17/8c2a9ef93c33ae4eec9d58e82321f9229843a1 +0 -0
  62. package/skills/cm-content-factory/.git 2/objects/25/397ae41d09104d763bdcac2695209d85cdea89 +0 -0
  63. package/skills/cm-content-factory/.git 2/objects/2f/a836b7947f2d458e1f639788bf4bb0983a3305 +0 -0
  64. package/skills/cm-content-factory/.git 2/objects/3a/baaaf0a1c0909c0828335791557125fba911e0 +0 -0
  65. package/skills/cm-content-factory/.git 2/objects/42/2924221b81f5ce3c4e4daac9a64a24f9b01f9a +0 -0
  66. package/skills/cm-content-factory/.git 2/objects/42/ec0ce707447dc11446a34c9995fb8533801731 +0 -0
  67. package/skills/cm-content-factory/.git 2/objects/46/e43ce92866d56ce74b1d750db307cfe6154a15 +0 -0
  68. package/skills/cm-content-factory/.git 2/objects/48/5e41b633c63f55b8277bcc59f44f67681f671a +0 -0
  69. package/skills/cm-content-factory/.git 2/objects/49/49c596a3a89fa240642acd95dd3258e261eb09 +0 -0
  70. package/skills/cm-content-factory/.git 2/objects/50/9d42d8412ef8eaf7f7e138476bac2e4d10ce60 +0 -0
  71. package/skills/cm-content-factory/.git 2/objects/55/0c8c389d981b463ef849aeb792d8be3ccb6ec8 +0 -0
  72. package/skills/cm-content-factory/.git 2/objects/5d/82d3b18410cdda3ace3677436f0cb599dbe2d2 +0 -0
  73. package/skills/cm-content-factory/.git 2/objects/60/0617c58e871a38b33bf29e282d132bb3c381ad +0 -0
  74. package/skills/cm-content-factory/.git 2/objects/6a/8369a99c687b7245c92ffaf0e0f0dab9014504 +0 -0
  75. package/skills/cm-content-factory/.git 2/objects/79/bea435d40ab531c1aaf6be0432c6a5b7aaed21 +0 -0
  76. package/skills/cm-content-factory/.git 2/objects/7e/5ebd79251c2f14e4aceb86c74b6b6daae6b500 +0 -0
  77. package/skills/cm-content-factory/.git 2/objects/81/98a822a60178d6d5023ddb3e222cddf048742e +0 -0
  78. package/skills/cm-content-factory/.git 2/objects/86/0a0e1943dfe53411d2e499a1f16f46a96ef758 +0 -0
  79. package/skills/cm-content-factory/.git 2/objects/86/971fb55fdc081fdbae52376f0f13e57a4e9b04 +0 -0
  80. package/skills/cm-content-factory/.git 2/objects/88/b89dd609a0a03f8d4fe8bfde20d5b8fc1d326d +0 -0
  81. package/skills/cm-content-factory/.git 2/objects/90/8737edb6b7809e32cc01590b4e08ba42a9d40d +0 -0
  82. package/skills/cm-content-factory/.git 2/objects/93/d5a8a9a7d4fb7f11491cb596a6880528725118 +0 -0
  83. package/skills/cm-content-factory/.git 2/objects/98/46a2ab81d0c3b3eb00ef88fc56989aa7e9f316 +0 -0
  84. package/skills/cm-content-factory/.git 2/objects/9b/d8dd1e49cf274eaf9c555f3ab39dce7af5715e +0 -0
  85. package/skills/cm-content-factory/.git 2/objects/a1/13329fb0cec96ae78b222d33a24c3b5bc7fa1f +0 -0
  86. package/skills/cm-content-factory/.git 2/objects/a9/e6effe626e8a3aea3a8fc3364b492191c6e7d0 +0 -0
  87. package/skills/cm-content-factory/.git 2/objects/ad/6de7e48d9782cca9353d1ff0aa1aab7fe1df85 +0 -0
  88. package/skills/cm-content-factory/.git 2/objects/af/54ae316f771ff692e299ffcd8bf2f06b413b59 +0 -0
  89. package/skills/cm-content-factory/.git 2/objects/b0/4cb8b0b00dad633e731c1472161419e738d674 +0 -0
  90. package/skills/cm-content-factory/.git 2/objects/b3/094abb0b9ed46419b269e4a4e36a459690e3b0 +0 -0
  91. package/skills/cm-content-factory/.git 2/objects/b9/435c5d4baac2cfc5c83009ddd27b46b60db5f1 +0 -0
  92. package/skills/cm-content-factory/.git 2/objects/ba/5da17dbaec5ec2dcfdfd126aead518d1171d5c +0 -0
  93. package/skills/cm-content-factory/.git 2/objects/c0/bf58703aa258ba5dd63083bebaec8f223d844c +0 -0
  94. package/skills/cm-content-factory/.git 2/objects/c4/701a34edf1fc1bad58ccc57bd03f9426acb59a +0 -0
  95. package/skills/cm-content-factory/.git 2/objects/c7/5ccce9a4e5cc74d9b3174550cf6d993ca43638 +0 -0
  96. package/skills/cm-content-factory/.git 2/objects/c7/710d59b5a35b0f1f0a0399386643a0bd94c929 +0 -0
  97. package/skills/cm-content-factory/.git 2/objects/d1/fe58237112e953e5fec52da22cf38e08be3df9 +5 -0
  98. package/skills/cm-content-factory/.git 2/objects/d2/2bbe9fd2f74c95bc5583e803f5e435f1e2cd86 +0 -0
  99. package/skills/cm-content-factory/.git 2/objects/d7/e72852ea2bff74581dbf247d400120086229f4 +0 -0
  100. package/skills/cm-content-factory/.git 2/objects/d8/d4c3b5553e4fd72807e1d4b49ef07d9ef3ac35 +0 -0
  101. package/skills/cm-content-factory/.git 2/objects/dc/75050c2876f6a02ae2a53a3c886f395b622977 +0 -0
  102. package/skills/cm-content-factory/.git 2/objects/ee/e8546f95acec500187c08a28a8b9ee02db0dec +0 -0
  103. package/skills/cm-content-factory/.git 2/objects/ef/263c059208b416c2146434f10cb2b9fabcba16 +0 -0
  104. package/skills/cm-content-factory/.git 2/objects/f3/ae597e84d9a59b88acd21c99bde2eaf686d785 +0 -0
  105. package/skills/cm-content-factory/.git 2/objects/f3/f6f5673c821d3d8e76fa267a9e882e7a5387ea +0 -0
  106. package/skills/cm-content-factory/.git 2/objects/f9/6e6d0ad02624dd11d5848594d056caef7a5e8b +0 -0
  107. package/skills/cm-content-factory/.git 2/objects/ff/278988fc1edf0db3abcf18de795f4cc0b4f3e1 +0 -0
  108. package/skills/cm-content-factory/.git 2/refs/heads/main +1 -0
  109. package/skills/cm-content-factory/.git 2/refs/remotes/origin/main +1 -0
  110. package/skills/cm-content-factory/.pytest_cache 2/v/cache/nodeids +76 -0
  111. package/skills/cm-content-factory/.pytest_cache 2/v/cache/stepwise +1 -0
  112. package/skills/cm-content-factory/AGENTS.md +61 -0
  113. package/skills/cm-content-factory/CLAUDE.md +63 -0
  114. package/skills/cm-content-factory/CURSOR.md +43 -0
  115. package/skills/cm-content-factory/Content Factory.zip +0 -0
  116. package/skills/cm-content-factory/SKILL.md +416 -0
  117. package/skills/cm-content-factory/cf +313 -0
  118. package/skills/cm-content-factory/config.schema.json +397 -0
  119. package/skills/cm-content-factory/dashboard/app.js +556 -0
  120. package/skills/cm-content-factory/dashboard/index.html +397 -0
  121. package/skills/cm-content-factory/dashboard/style.css +1211 -0
  122. package/skills/cm-content-factory/examples/01-real-estate.config.json +146 -0
  123. package/skills/cm-content-factory/examples/02-personal-finance.config.json +146 -0
  124. package/skills/cm-content-factory/examples/03-health-wellness.config.json +147 -0
  125. package/skills/cm-content-factory/examples/04-saas-software.config.json +147 -0
  126. package/skills/cm-content-factory/examples/05-legal-services.config.json +147 -0
  127. package/skills/cm-content-factory/examples/06-insurance.config.json +146 -0
  128. package/skills/cm-content-factory/examples/07-ecommerce-dropship.config.json +146 -0
  129. package/skills/cm-content-factory/examples/08-online-education.config.json +147 -0
  130. package/skills/cm-content-factory/examples/09-crypto-defi.config.json +147 -0
  131. package/skills/cm-content-factory/examples/10-beauty-skincare.config.json +147 -0
  132. package/skills/cm-content-factory/examples/11-home-services.config.json +146 -0
  133. package/skills/cm-content-factory/examples/12-dental-clinic.config.json +147 -0
  134. package/skills/cm-content-factory/examples/13-pet-care.config.json +147 -0
  135. package/skills/cm-content-factory/examples/14-travel-hospitality.config.json +147 -0
  136. package/skills/cm-content-factory/examples/15-ai-automation.config.json +147 -0
  137. package/skills/cm-content-factory/examples/16-wedding-events.config.json +147 -0
  138. package/skills/cm-content-factory/examples/17-fitness-coaching.config.json +148 -0
  139. package/skills/cm-content-factory/examples/18-cybersecurity.config.json +147 -0
  140. package/skills/cm-content-factory/examples/19-food-restaurant.config.json +148 -0
  141. package/skills/cm-content-factory/examples/20-solar-energy.config.json +147 -0
  142. package/skills/cm-content-factory/examples/fitness-blog.config.json +116 -0
  143. package/skills/cm-content-factory/examples/tech-blog.config.json +107 -0
  144. package/skills/cm-content-factory/extensions/EXTENSION_GUIDE.md +72 -0
  145. package/skills/cm-content-factory/extensions/hooks.py +126 -0
  146. package/skills/cm-content-factory/extensions/openclaw_adapter.py +132 -0
  147. package/skills/cm-content-factory/landing/docs/content/changelog.md +36 -0
  148. package/skills/cm-content-factory/landing/docs/content/deployment.md +46 -0
  149. package/skills/cm-content-factory/landing/docs/content/execution-flow.md +67 -0
  150. package/skills/cm-content-factory/landing/docs/content/openspace.md +27 -0
  151. package/skills/cm-content-factory/landing/docs/content/openviking.md +33 -0
  152. package/skills/cm-content-factory/landing/docs/content/use-cases.md +26 -0
  153. package/skills/cm-content-factory/landing/docs/content/v5-intro.md +28 -0
  154. package/skills/cm-content-factory/landing/docs/index.html +240 -0
  155. package/skills/cm-content-factory/landing/index.html +680 -0
  156. package/skills/cm-content-factory/landing/script.js +143 -0
  157. package/skills/cm-content-factory/landing/style.css +1216 -0
  158. package/skills/cm-content-factory/landing/translations.js +508 -0
  159. package/skills/cm-content-factory/logs/events.jsonl +11 -0
  160. package/skills/cm-content-factory/profiles/_template.profile.json +231 -0
  161. package/skills/cm-content-factory/profiles/finance.profile.json +278 -0
  162. package/skills/cm-content-factory/profiles/legal.profile.json +263 -0
  163. package/skills/cm-content-factory/profiles/medical-research.profile.json +321 -0
  164. package/skills/cm-content-factory/profiles/technology.profile.json +275 -0
  165. package/skills/cm-content-factory/scripts/agent_dispatcher.py +266 -0
  166. package/skills/cm-content-factory/scripts/audit.py +106 -0
  167. package/skills/cm-content-factory/scripts/dashboard_server.py +225 -0
  168. package/skills/cm-content-factory/scripts/deploy.py +146 -0
  169. package/skills/cm-content-factory/scripts/extract.py +132 -0
  170. package/skills/cm-content-factory/scripts/landing_generator.py +459 -0
  171. package/skills/cm-content-factory/scripts/memory.py +521 -0
  172. package/skills/cm-content-factory/scripts/monetize.py +239 -0
  173. package/skills/cm-content-factory/scripts/pipeline.py +357 -0
  174. package/skills/cm-content-factory/scripts/plan.py +163 -0
  175. package/skills/cm-content-factory/scripts/publish.py +145 -0
  176. package/skills/cm-content-factory/scripts/research.py +337 -0
  177. package/skills/cm-content-factory/scripts/scaffold.py +464 -0
  178. package/skills/cm-content-factory/scripts/scoreboard.py +336 -0
  179. package/skills/cm-content-factory/scripts/seo.py +90 -0
  180. package/skills/cm-content-factory/scripts/state_manager.py +320 -0
  181. package/skills/cm-content-factory/scripts/token_manager.py +268 -0
  182. package/skills/cm-content-factory/scripts/validate.py +221 -0
  183. package/skills/cm-content-factory/scripts/wizard.py +329 -0
  184. package/skills/cm-content-factory/scripts/write.py +93 -0
  185. package/skills/cm-content-factory/sites/docs-site/src/assets/houston.webp +0 -0
  186. package/skills/cm-content-factory/sites/docs-site/src/content/docs/architecture.md +90 -0
  187. package/skills/cm-content-factory/sites/docs-site/src/content/docs/data-flow.md +54 -0
  188. package/skills/cm-content-factory/sites/docs-site/src/content/docs/deployment.md +38 -0
  189. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/index.md +65 -0
  190. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/lc-content-lifecycle.md +48 -0
  191. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/seq-write-mode.md +39 -0
  192. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/uj-first-batch.md +42 -0
  193. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/wf-content-pipeline.md +51 -0
  194. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/wf-learning-cycle.md +52 -0
  195. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/configuration.md +86 -0
  196. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/installation.md +80 -0
  197. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/intro.md +58 -0
  198. package/skills/cm-content-factory/sites/docs-site/src/content/docs/index.md +102 -0
  199. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/index.md +45 -0
  200. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/optimize-seo.md +29 -0
  201. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/scale-content-production.md +55 -0
  202. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/standardize-quality.md +29 -0
  203. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/buyer-cmo-huong.md +41 -0
  204. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/buyer-content-lead-khoa.md +40 -0
  205. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/index.md +56 -0
  206. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-content-manager-lan.md +46 -0
  207. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-seo-minh.md +45 -0
  208. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-writer-tu.md +45 -0
  209. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/content-pipeline.md +108 -0
  210. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/index.md +22 -0
  211. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/memory-system.md +52 -0
  212. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/seo-optimization.md +58 -0
  213. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/troubleshooting-guide.md +92 -0
  214. package/skills/cm-content-factory/sites/docs-site/src/styles/custom.css +575 -0
  215. package/skills/cm-content-factory/tests/conftest.py +66 -0
  216. package/skills/cm-content-factory/tests/test_agent_dispatcher.py +125 -0
  217. package/skills/cm-content-factory/tests/test_memory.py +128 -0
  218. package/skills/cm-content-factory/tests/test_pipeline.py +107 -0
  219. package/skills/cm-content-factory/tests/test_research.py +56 -0
  220. package/skills/cm-content-factory/tests/test_state_manager.py +131 -0
  221. package/skills/cm-content-factory/tests/test_token_manager.py +110 -0
  222. package/skills/cm-content-factory/tests/test_wizard.py +121 -0
  223. package/skills/cm-continuity/SKILL.md +49 -480
  224. package/skills/cm-continuity/references/cm-uri-scheme.md +23 -0
  225. package/skills/cm-continuity/references/continuity-template.md +48 -0
  226. package/skills/cm-continuity/references/mcp-context-server.md +27 -0
  227. package/skills/cm-continuity/references/memory-architecture.md +26 -0
  228. package/skills/cm-continuity/references/memory-audit.md +18 -0
  229. package/skills/cm-continuity/references/session-protocol.md +31 -0
  230. package/skills/cm-continuity/references/storage-formats.md +20 -0
  231. package/skills/cm-cro-methodology/SKILL.md +290 -0
  232. package/skills/cm-cro-methodology/references/COPYWRITING.md +178 -0
  233. package/skills/cm-cro-methodology/references/OBJECTIONS.md +135 -0
  234. package/skills/cm-cro-methodology/references/PERSUASION.md +158 -0
  235. package/skills/cm-cro-methodology/references/RESEARCH.md +220 -0
  236. package/skills/cm-cro-methodology/references/funnel-analysis.md +365 -0
  237. package/skills/cm-cro-methodology/references/testing-methodology.md +330 -0
  238. package/skills/cm-design-system/SKILL.md +5 -6
  239. package/skills/cm-execution/SKILL.md +61 -379
  240. package/skills/cm-execution/references/mode-a-batch.md +28 -0
  241. package/skills/cm-execution/references/mode-b-subagent.md +46 -0
  242. package/skills/cm-execution/references/mode-c-parallel.md +39 -0
  243. package/skills/cm-execution/references/mode-d-rarv.md +62 -0
  244. package/skills/cm-execution/references/mode-e-triz-parallel.md +53 -0
  245. package/skills/cm-execution/references/mode-f-party.md +61 -0
  246. package/skills/cm-execution/references/persona-dispatch.md +22 -0
  247. package/skills/cm-execution/references/security-rules.md +47 -0
  248. package/skills/cm-google-form/SKILL.md +266 -0
  249. package/skills/cm-google-form/templates/apps-script.js +55 -0
  250. package/skills/cm-google-form/templates/form-markup.html +110 -0
  251. package/skills/cm-google-form/templates/form-submit.js +201 -0
  252. package/skills/cm-google-form/templates/toast.css +152 -0
  253. package/skills/cm-growth-hacking/SKILL.md +282 -0
  254. package/skills/cm-growth-hacking/bottom-sheet-engine.md +261 -0
  255. package/skills/cm-growth-hacking/calendar-integration.md +264 -0
  256. package/skills/cm-growth-hacking/references/engagement-patterns.md +346 -0
  257. package/skills/cm-growth-hacking/templates/bottom-sheet.css +528 -0
  258. package/skills/cm-growth-hacking/templates/bottom-sheet.js +269 -0
  259. package/skills/cm-growth-hacking/templates/calendar-cta.js +213 -0
  260. package/skills/cm-growth-hacking/templates/tracking-events.js +211 -0
  261. package/skills/cm-growth-hacking/templates/trigger-manager.js +254 -0
  262. package/skills/cm-growth-hacking/tracking-events.md +246 -0
  263. package/skills/cm-growth-hacking/trigger-system.md +342 -0
  264. package/skills/cm-how-it-work/SKILL.md +8 -9
  265. package/skills/cm-identity-guard/SKILL.md +4 -4
  266. package/skills/cm-jtbd/SKILL.md +98 -0
  267. package/skills/cm-notebooklm/SKILL.md +156 -0
  268. package/skills/cm-notebooklm/references/command_reference.md +94 -0
  269. package/skills/cm-notebooklm/references/workflows.md +60 -0
  270. package/skills/cm-notebooklm/resources/knowledge_sources.md +106 -0
  271. package/skills/cm-notebooklm/scripts/brain-sync.sh +453 -0
  272. package/skills/cm-notebooklm/scripts/graduate_wisdom.py +101 -0
  273. package/skills/cm-planning/SKILL.md +3 -3
  274. package/skills/cm-project-bootstrap/SKILL.md +2 -2
  275. package/skills/cm-quality-gate/SKILL.md +1 -1
  276. package/skills/cm-readit/SKILL.md +289 -0
  277. package/skills/cm-readit/audio-player.md +206 -0
  278. package/skills/cm-readit/examples/blog-reader.js +352 -0
  279. package/skills/cm-readit/examples/voice-cro.js +390 -0
  280. package/skills/cm-readit/tts-engine.md +262 -0
  281. package/skills/cm-readit/ui-patterns.md +362 -0
  282. package/skills/cm-readit/voice-cro.md +223 -0
  283. package/skills/cm-safe-deploy/SKILL.md +80 -510
  284. package/skills/cm-safe-deploy/references/gate-0-5-security-scan.md +31 -0
  285. package/skills/cm-safe-deploy/references/gate-0-secret-hygiene.md +68 -0
  286. package/skills/cm-safe-deploy/references/gate-1-syntax.md +23 -0
  287. package/skills/cm-safe-deploy/references/gate-2-test-suite.md +28 -0
  288. package/skills/cm-safe-deploy/references/gate-3-i18n.md +19 -0
  289. package/skills/cm-safe-deploy/references/gate-4-5-build-dist.md +16 -0
  290. package/skills/cm-safe-deploy/references/gate-6-deploy-smoke.md +18 -0
  291. package/skills/cm-safe-deploy/references/rollback.md +17 -0
  292. package/skills/cm-safe-deploy/references/setup-new-project.md +20 -0
  293. package/skills/cm-skill-index/SKILL.md +15 -15
  294. package/skills/cm-start/SKILL.md +1 -1
  295. package/skills/cm-tdd/SKILL.md +51 -356
  296. package/skills/cm-tdd/references/bugfix-example.md +15 -0
  297. package/skills/cm-tdd/references/rationalizations.md +20 -0
  298. package/skills/cm-tdd/references/red-green-refactor.md +33 -0
  299. package/skills/cm-tdd/references/stuck-debugging.md +18 -0
  300. package/skills/cm-tdd/references/test-quality.md +19 -0
  301. package/skills/cm-ux-master/SKILL.md +368 -115
  302. package/skills/profiles/core.txt +1 -4
  303. package/skills/profiles/design.txt +1 -2
  304. package/skills/profiles/full.txt +10 -16
  305. package/skills/profiles/growth.txt +9 -9
  306. package/skills/profiles/top35.json +13 -13
  307. package/skills/cm-conductor-worktrees/SKILL.archive.md +0 -28
  308. package/skills/cm-conductor-worktrees/SKILL.md +0 -26
  309. package/skills/cm-dashboard/SKILL.archive.md +0 -15
  310. package/skills/cm-dashboard/SKILL.md +0 -26
  311. package/skills/cm-dashboard/ui/app.js +0 -1278
  312. package/skills/cm-dashboard/ui/index.html +0 -206
  313. package/skills/cm-dashboard/ui/style.css +0 -440
  314. package/skills/cm-design-studio/SKILL.archive.md +0 -34
  315. package/skills/cm-design-studio/SKILL.md +0 -26
  316. package/skills/cm-engineering-meta/SKILL.archive.md +0 -73
  317. package/skills/cm-engineering-meta/SKILL.md +0 -26
  318. package/skills/cm-git-worktrees/SKILL.archive.md +0 -157
  319. package/skills/cm-git-worktrees/SKILL.md +0 -26
  320. package/skills/cm-post-deploy-canary/SKILL.archive.md +0 -22
  321. package/skills/cm-post-deploy-canary/SKILL.md +0 -26
  322. package/skills/cm-qa-visual-cli/SKILL.archive.md +0 -22
  323. package/skills/cm-qa-visual-cli/SKILL.md +0 -26
  324. package/skills/cm-second-opinion-cli/SKILL.archive.md +0 -23
  325. package/skills/cm-second-opinion-cli/SKILL.md +0 -26
  326. package/skills/cm-secret-shield/SKILL.archive.md +0 -580
  327. package/skills/cm-secret-shield/SKILL.md +0 -26
  328. package/skills/cm-security-gate/SKILL.archive.md +0 -239
  329. package/skills/cm-security-gate/SKILL.md +0 -26
  330. package/skills/cm-skill-health/SKILL.archive.md +0 -83
  331. package/skills/cm-skill-health/SKILL.md +0 -26
  332. package/skills/cm-skill-mastery/SKILL.archive.md +0 -156
  333. package/skills/cm-skill-mastery/SKILL.md +0 -26
  334. package/skills/cm-skill-search/SKILL.archive.md +0 -49
  335. package/skills/cm-skill-search/SKILL.md +0 -26
  336. package/skills/cm-skill-share/SKILL.archive.md +0 -58
  337. package/skills/cm-skill-share/SKILL.md +0 -26
  338. package/skills/cm-test-gate/SKILL.archive.md +0 -245
  339. package/skills/cm-test-gate/SKILL.md +0 -26
  340. package/skills/cm-ui-preview/SKILL.archive.md +0 -153
  341. package/skills/cm-ui-preview/SKILL.md +0 -26
@@ -1,7 +1,18 @@
1
1
  ---
2
2
  name: cm-safe-deploy
3
- description: Use when setting up deployment infrastructure for any project - establishes multi-gate deploy pipeline with test gates, build verification, frontend safety checks, and rollback strategy before code reaches production
3
+ description: Use when setting up deployment infrastructure or enforcing a gated release path. Routes to deploy gates, setup, or rollback based on the current deployment stage.
4
4
  token_budget: 1500
5
+ token_core: 500
6
+ token_refs:
7
+ gate-0-secret-hygiene: 620
8
+ gate-0-5-security-scan: 300
9
+ gate-1-syntax: 280
10
+ gate-2-test-suite: 380
11
+ gate-3-i18n: 260
12
+ gate-4-5-build-dist: 340
13
+ gate-6-deploy-smoke: 320
14
+ setup-new-project: 360
15
+ rollback: 220
5
16
  compressed: true
6
17
  deprecated: false
7
18
  ---
@@ -9,520 +20,79 @@ deprecated: false
9
20
  # Safe Deploy Pipeline v2
10
21
 
11
22
  ## TL;DR
12
- - **Use before/during** deploying to staging or production
13
- - **Multi-gate**: secrets, build, stage, smoke, prod, rollback plan
14
- - **Identity**: verifies correct GitHub/Cloudflare/Supabase account
15
- - **Next**: cm-quality-gate (post-deploy)
16
-
17
- ## Overview
18
-
19
- A deploy without gates is a deploy with hope. Hope is not a strategy.
20
-
21
- **Core principle:** Every project needs a multi-gate deploy pipeline. Code passes through syntax → tests → i18n → build → verify → deploy, with hard stops at each gate. No gate skipping. No "it'll be fine."
22
-
23
- > [!CAUTION]
24
- > **March 2026 Incident:** 572 backend tests passed green while `app.js` had catastrophic syntax errors → white screen in production. This pipeline exists because `test:gate` alone was NOT enough.
23
+ - **Use before/during** staging or production deployment
24
+ - **Model**: gated deploy pipeline with hard stops
25
+ - **Decision**: choose setup, active gate execution, or rollback
26
+ - **Next**: `cm-quality-gate` for verification evidence
25
27
 
26
28
  ## The Iron Law
27
-
28
- ```
29
+ ```text
29
30
  NO DEPLOY WITHOUT PASSING ALL GATES.
30
- GATES ARE SEQUENTIAL. EACH MUST PASS BEFORE THE NEXT RUNS.
31
- SYNTAX CHECK IS GATE 1. IF IT FAILS, NOTHING ELSE RUNS.
31
+ GATES ARE SEQUENTIAL.
32
+ IF A GATE FAILS, FIX FIRST.
32
33
  ```
33
34
 
34
35
  ## When to Use
35
-
36
- **ALWAYS** when:
37
- - Setting up a new project's deployment infrastructure
38
- - A project has no test gate before deploy
39
- - Project deploys directly from `git push`
40
- - After a production incident caused by untested code
41
- - Adding CI/CD to an existing project
42
-
43
- ## The 8-Gate Pipeline
44
-
45
- ```dot
46
- digraph pipeline {
47
- rankdir=LR;
48
- gate0 [label="Gate 0\nSecret\nHygiene", shape=box, style=filled, fillcolor="#ffc0cb"];
49
- gate05 [label="Gate 0.5\nSecurity\nScan", shape=box, style=filled, fillcolor="#f0b3ff"];
50
- gate1 [label="Gate 1\nSyntax", shape=box, style=filled, fillcolor="#ffcccc"];
51
- gate2 [label="Gate 2\nTest\nSuite", shape=box, style=filled, fillcolor="#ffe0cc"];
52
- gate3 [label="Gate 3\ni18n\nParity", shape=box, style=filled, fillcolor="#e0ccff"];
53
- gate4 [label="Gate 4\nBuild", shape=box, style=filled, fillcolor="#ffffcc"];
54
- gate5 [label="Gate 5\nDist\nVerify", shape=box, style=filled, fillcolor="#ccffcc"];
55
- gate6 [label="Gate 6\nDeploy +\nSmoke", shape=box, style=filled, fillcolor="#cce5ff"];
56
- fail [label="STOP\nFix first", shape=box, style=filled, fillcolor="#ff9999"];
57
-
58
- gate0 -> gate05 [label="pass"];
59
- gate0 -> fail [label="fail"];
60
- gate05 -> gate1 [label="pass"];
61
- gate05 -> fail [label="fail"];
62
- gate1 -> gate2 [label="pass"];
63
- gate1 -> fail [label="fail"];
64
- gate2 -> gate3 [label="pass"];
65
- gate2 -> fail [label="fail"];
66
- gate3 -> gate4 [label="pass"];
67
- gate3 -> fail [label="fail"];
68
- gate4 -> gate5 [label="pass"];
69
- gate4 -> fail [label="fail"];
70
- gate5 -> gate6 [label="pass"];
71
- gate5 -> fail [label="fail"];
72
- }
73
- ```
74
-
75
- ---
76
-
77
- ### Gate 0: Secret Hygiene (FASTEST FAIL — < 0.5 seconds)
78
-
79
- > [!CAUTION]
80
- > **March 2026 Security Incident:** `SUPABASE_SERVICE_KEY` was accidentally committed to `wrangler.jsonc`. This exposed a service-role key that bypasses Row Level Security in git history. Gate 0 prevents this from ever reaching the remote.
81
-
82
- **The Rule: Where Each Variable Lives**
83
-
84
- | Variable Type | Correct Location | WRONG Location |
85
- |--------------|-----------------|----------------|
86
- | Supabase URL (public) | `wrangler.jsonc` vars section | Hardcoded in code |
87
- | `SUPABASE_SERVICE_KEY` | Cloudflare Secret (`wrangler secret put`) | ❌ `wrangler.jsonc` |
88
- | `SUPABASE_ANON_KEY` | Cloudflare Secret | `wrangler.jsonc` |
89
- | DB connection strings | Cloudflare Secret | ❌ Anywhere in repo |
90
- | Local dev secrets | `.dev.vars` (gitignored) | ❌ `wrangler.jsonc` |
91
- | Build config (non-secret) | `wrangler.jsonc` | — |
92
-
93
- **Secret Hygiene Check (Enhanced Repo-Wide):**
94
-
95
- > Calls `cm-secret-shield` Layer 4 for deep scanning. Below is the essential check:
96
-
97
- ```bash
98
- node -e "
99
- const fs = require('fs');
100
- const { execSync } = require('child_process');
101
-
102
- // 1. Check wrangler config for secrets
103
- const wranglerFiles = ['wrangler.jsonc', 'wrangler.toml', 'wrangler.json'];
104
- const dangerous = ['SERVICE_KEY', 'ANON_KEY', 'DB_PASSWORD', 'SECRET_KEY', 'PRIVATE_KEY', 'API_SECRET'];
105
- let failed = false;
106
-
107
- for (const wf of wranglerFiles) {
108
- if (!fs.existsSync(wf)) continue;
109
- const src = fs.readFileSync(wf, 'utf-8');
110
- for (const key of dangerous) {
111
- // Check for actual values, not just variable names
112
- const valuePattern = new RegExp(key + '\\\\s*[=:]\\\\s*[\"\'][a-zA-Z0-9/+=]{20,}', 'g');
113
- if (valuePattern.test(src)) {
114
- console.error('❌ DANGEROUS: ' + wf + ' contains a ' + key + ' VALUE');
115
- console.error(' Fix: wrangler secret put ' + key + ' (then remove from ' + wf + ')');
116
- failed = true;
117
- }
118
- }
119
- }
120
-
121
- // 2. Check .gitignore has required patterns
122
- if (fs.existsSync('.gitignore')) {
123
- const gi = fs.readFileSync('.gitignore', 'utf-8');
124
- const required = ['.env', '.dev.vars'];
125
- const missing = required.filter(r => !gi.includes(r));
126
- if (missing.length > 0) {
127
- console.error('❌ .gitignore missing: ' + missing.join(', '));
128
- failed = true;
129
- }
130
- } else {
131
- console.error('❌ No .gitignore found!');
132
- failed = true;
133
- }
134
-
135
- // 3. Check .env files aren't tracked by git
136
- try {
137
- const tracked = execSync('git ls-files', { encoding: 'utf-8' });
138
- const badFiles = ['.env', '.dev.vars', '.env.local', '.env.production'];
139
- const trackedBad = badFiles.filter(f => tracked.split('\\n').includes(f));
140
- if (trackedBad.length > 0) {
141
- console.error('❌ CRITICAL: Secret files tracked by git: ' + trackedBad.join(', '));
142
- console.error(' Fix: git rm --cached ' + trackedBad.join(' '));
143
- failed = true;
144
- }
145
- } catch (e) { /* not a git repo */ }
146
-
147
- if (failed) {
148
- console.error('\\n🛡️ Gate 0 FAILED. Fix issues above before deploying.');
149
- process.exit(1);
150
- }
151
- console.log('✅ Gate 0 passed: repo-wide secret hygiene verified');
152
- "
153
- ```
154
-
155
- **Setup `.dev.vars` for local development:**
156
- ```bash
157
- # .dev.vars — local only, NEVER committed
158
- SUPABASE_URL=https://YOUR_PROJECT.supabase.co
159
- SUPABASE_SERVICE_KEY=YOUR_SERVICE_KEY
160
-
161
- # Add to .gitignore:
162
- echo ".dev.vars" >> .gitignore
163
-
164
- # Commit the template:
165
- cp .dev.vars .dev.vars.example # Remove values first
166
- git add .dev.vars.example
167
- ```
168
-
169
- **If secrets were already committed:**
170
- ```bash
171
- # Remove from git history (URGENT — do before pushing)
172
- git filter-repo --path wrangler.jsonc --invert-paths # Nuclear option
173
- # OR just remove the value from wrangler.jsonc and add as secret:
174
- wrangler secret put SUPABASE_SERVICE_KEY
175
- # Then rotate the key immediately in Supabase dashboard
176
- ```
177
-
178
- ---
179
-
180
- ### Gate 0.5: Security Scan (Snyk + Aikido — Parallel)
181
-
182
- > [!IMPORTANT]
183
- > **CodyMaster internal:** This gate is MANDATORY. Both Snyk and Aikido must pass.
184
- > **User projects:** This gate is SUGGESTED by default. Becomes MANDATORY if CVEs or risk flags were detected during development.
185
-
186
- **Run both scanners in parallel:**
187
-
188
- ```bash
189
- # Snyk — dependency vulnerabilities
190
- snyk test
191
-
192
- # Aikido — SAST + dependencies + secrets + IaC
193
- aikido-api-client scan-release <repo> $(git rev-parse HEAD) \
194
- --minimum-severity-level="HIGH"
195
- ```
196
-
197
- **For CodyMaster (maximum strictness):**
198
- ```bash
199
- aikido-api-client scan-release <repo> $(git rev-parse HEAD) \
200
- --minimum-severity-level="HIGH" \
201
- --fail-on-sast-scan \
202
- --fail-on-secrets-scan
203
- ```
204
-
205
- **Gate decision:**
206
- - Both pass → proceed to Gate 1
207
- - Either fails → **STOP. Fix before continuing.** Invoke `cm-security-gate` for remediation.
208
-
209
- > See `cm-security-gate` for full setup, flag reference, and remediation workflow.
210
-
211
- ---
212
-
213
- ### Gate 1: Syntax Validation (FAST FAIL)
214
-
215
- > [!IMPORTANT]
216
- > This gate runs in < 1 second and catches the EXACT class of errors that caused the March 2026 incident. Run it BEFORE the test suite (which takes 10-30s).
217
-
218
- | Stack | Command | What it checks |
219
- |-------|---------|---------------|
220
- | Vanilla JS | `node -c path/to/app.js` | JavaScript parse errors |
221
- | TypeScript | `npx tsc --noEmit` | Type errors + syntax |
222
- | Python | `python -m py_compile app.py` | Python syntax |
223
- | Go | `go vet ./...` | Go static analysis |
224
-
225
- **For frontend monoliths without TypeScript:**
226
- ```bash
227
- # Ultra-fast syntax check — fails in < 1s if broken
228
- node -c public/static/app.js
229
- ```
230
-
231
- **Why separate from Gate 2?**
232
- - `node -c` takes < 1 second. Test suite takes 10-30 seconds.
233
- - If syntax is broken, 100% of tests will fail anyway — but with confusing error messages.
234
- - A fast syntax check gives you the EXACT line number of the error instantly.
235
-
236
- **REQUIRED SUB-SKILL:** Use `cm-quality-gate` for parser-based validation inside the test suite (Layer 1).
237
-
238
- ---
239
-
240
- ### Gate 2: Test Suite
241
-
242
- The test suite MUST include:
243
-
244
- | Test Category | What it validates | Priority |
245
- |--------------|-------------------|----------|
246
- | **Frontend safety** | JS syntax, function integrity, corruption patterns | **CRITICAL** |
247
- | **Backend API** | Routes return correct data | Required |
248
- | **Business logic** | Calculations, rules, validation | Required |
249
- | **i18n sync** | Translation key parity, orphaned keys | Required for multi-lang |
250
- | **Integration** | End-to-end workflows | Recommended |
251
-
252
- **Setup the test:gate script:**
253
- ```json
254
- {
255
- "scripts": {
256
- "test:gate": "vitest run --reporter=verbose"
257
- }
258
- }
259
- ```
260
-
261
- **Gate decision:**
262
- ```
263
- IF 0 failures → proceed to Gate 3
264
- IF any failures → STOP. Fix before continuing.
265
- ```
266
-
267
- **REQUIRED SUB-SKILL:** Use `cm-quality-gate` for enforcement discipline.
268
-
269
- ---
270
-
271
- ### Gate 3: i18n Parity Check (for multi-language projects)
272
-
273
- > [!NOTE]
274
- > Skip this gate if the project does not have i18n. For projects with i18n, this gate catches what test suites can miss: key drift between languages that causes blank strings in production.
275
-
276
- ```bash
277
- # All language files must have identical key counts
278
- node -e "
279
- const fs = require('fs');
280
- const path = require('path');
281
- const I18N_DIR = 'public/static/i18n';
282
- const langs = ['vi','en','th','ph'];
283
- const results = {};
284
- let allMatch = true;
285
-
286
- for (const lang of langs) {
287
- const filePath = path.join(I18N_DIR, lang + '.json');
288
- const data = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
289
- const flatKeys = JSON.stringify(data).split('\":').length - 1;
290
- results[lang] = flatKeys;
291
- console.log(lang + ': ' + flatKeys + ' keys');
292
- }
293
-
294
- const counts = Object.values(results);
295
- if (new Set(counts).size !== 1) {
296
- console.error('❌ KEY PARITY FAILURE! Counts differ across languages.');
297
- console.error(JSON.stringify(results));
298
- process.exit(1);
299
- } else {
300
- console.log('✅ Key parity: all languages have ' + counts[0] + ' keys');
301
- }
302
-
303
- // Check for null/empty values
304
- let nullCount = 0;
305
- for (const lang of langs) {
306
- const data = JSON.parse(fs.readFileSync(path.join(I18N_DIR, lang + '.json'), 'utf-8'));
307
- const check = (obj, prefix) => {
308
- for (const [k, v] of Object.entries(obj)) {
309
- if (k === '_meta') continue;
310
- if (typeof v === 'object' && v !== null) { check(v, prefix + '.' + k); continue; }
311
- if (v === null || v === undefined || v === '') {
312
- console.error(' ⚠ ' + lang + '.' + prefix + '.' + k + ' is null/empty');
313
- nullCount++;
314
- }
315
- }
316
- };
317
- check(data, lang);
318
- }
319
- if (nullCount > 0) {
320
- console.error('❌ Found ' + nullCount + ' null/empty translation values!');
321
- process.exit(1);
322
- }
323
- console.log('✅ No null/empty values');
324
- "
325
- ```
326
-
327
- **What this catches:**
328
- - Keys added to `vi.json` but forgotten in `en.json` → blank strings for English users
329
- - Null values from bad translation scripts → `t()` returns key name instead of translation
330
- - Key count drift between languages → inconsistent UX
331
-
332
- ---
333
-
334
- ### Gate 4: Build Verification
335
-
336
- Production build must succeed without errors.
337
-
338
- ```bash
339
- npm run build
340
- ```
341
-
342
- **What this catches that tests don't:**
343
- - Import resolution failures
344
- - Tree-shaking errors
345
- - Missing environment variables
346
- - Asset compilation failures
347
- - Bundle size explosions
348
-
349
- **Optional: Bundle size guard:**
350
- ```json
351
- {
352
- "scripts": {
353
- "build:verify": "npm run build && node -e \"const s=require('fs').statSync('dist/_worker.js').size; if(s>2e6) {console.error('Bundle too large: '+s); process.exit(1)}\""
354
- }
355
- }
356
- ```
357
-
358
- ---
359
-
360
- ### Gate 5: Dist Asset Verification (NEW)
361
-
362
- > [!IMPORTANT]
363
- > The build can "succeed" but produce an incomplete dist/ directory. This gate catches missing critical assets.
364
-
365
- ```bash
366
- # Verify critical files exist in dist/
367
- node -e "
368
- const fs = require('fs');
369
- const required = [
370
- 'dist/_worker.js',
371
- 'dist/static/app.js',
372
- 'dist/static/style.css',
373
- 'dist/static/i18n/vi.json',
374
- 'dist/static/i18n/en.json',
375
- 'dist/static/i18n/th.json',
376
- 'dist/static/i18n/ph.json',
377
- ];
378
- const missing = required.filter(f => !fs.existsSync(f));
379
- if (missing.length > 0) {
380
- console.error('❌ Missing files in dist/:');
381
- missing.forEach(f => console.error(' ' + f));
382
- process.exit(1);
383
- }
384
- console.log('✅ All ' + required.length + ' critical files present in dist/');
385
- "
386
- ```
387
-
388
- **Adapt `required` array to your project.** At minimum, verify:
389
- - Worker/server entry point exists
390
- - Frontend JS/CSS files exist
391
- - Translation files are copied
392
- - Critical images/assets are present
393
-
394
- ---
395
-
396
- ### Gate 6: Deploy + Post-Deploy Smoke Test
397
-
398
- Only after Gates 1-5 pass.
399
-
400
- **Deploy command varies by platform:**
401
-
402
- | Platform | Command |
403
- |----------|---------|
404
- | Cloudflare Pages | `npx wrangler pages deploy dist/` |
405
- | Vercel | `npx vercel --prod` |
406
- | Netlify | `npx netlify deploy --prod` |
407
-
408
- **Post-deploy verification:**
409
- ```bash
410
- # Smoke test the deployed URL — must return 200
411
- STATUS=$(curl -s -o /dev/null -w "%{http_code}" https://your-app.pages.dev)
412
- if [ "$STATUS" != "200" ]; then
413
- echo "❌ POST-DEPLOY SMOKE TEST FAILED! Status: $STATUS"
414
- echo "⚠ Consider immediate rollback."
415
- exit 1
416
- fi
417
- echo "✅ Smoke test passed (HTTP $STATUS)"
418
- ```
419
-
420
- ---
421
-
422
- ## Composing the Deploy Script
423
-
424
- ### `package.json` (Recommended)
425
- ```json
426
- {
427
- "scripts": {
428
- "predeploy:syntax": "node -c public/static/app.js",
429
- "predeploy:i18n": "node scripts/check-i18n-parity.js",
430
- "predeploy:dist": "node scripts/verify-dist.js",
431
- "deploy": "npm run predeploy:syntax && npm run test:gate && npm run predeploy:i18n && npm run build && npm run predeploy:dist && YOUR_DEPLOY_COMMAND"
432
- }
433
- }
434
- ```
435
-
436
- **Key insight:** Chain gates with `&&`. If any gate fails, the chain stops immediately.
437
-
438
- ---
439
-
440
- ## Rollback Protocol
441
-
442
- When a deployment causes issues:
443
-
444
- | Severity | Action | Command |
445
- |----------|--------|---------|
446
- | **White screen** (syntax) | Revert last commit, redeploy | `git revert HEAD && npm run deploy` |
447
- | **Broken translations** | Revert JSON files, redeploy | `git checkout HEAD~1 -- public/static/i18n/*.json && npm run deploy` |
448
- | **API error** | Revert server code, redeploy | `git revert HEAD && npm run deploy` |
449
- | **Partial breakage** | Cherry-pick fix, deploy | Fix → test → deploy |
450
-
451
- **Cloudflare Pages specific:**
452
- ```bash
453
- # Rollback to previous deployment
454
- wrangler pages deployments list --project-name prms
455
- wrangler pages deployment rollback <deployment-id> --project-name prms
456
- ```
457
-
458
- ---
459
-
460
- ## Setting Up for a New Project
461
-
462
- ### Step 1: Create test infrastructure
463
- ```bash
464
- npm install -D vitest acorn
465
- ```
466
-
467
- ### Step 2: Create package.json scripts
468
- ```json
469
- {
470
- "scripts": {
471
- "test:gate": "vitest run --reporter=verbose",
472
- "build": "YOUR_BUILD_COMMAND",
473
- "deploy": "node -c public/static/app.js && npm run test:gate && npm run build && YOUR_DEPLOY_COMMAND"
474
- }
475
- }
476
- ```
477
-
478
- ### Step 3: Add frontend safety tests
479
- **REQUIRED SUB-SKILL:** Follow `cm-quality-gate` to create test file with all layers.
480
-
481
- ### Step 4: Create deploy workflow
482
- Create `.agents/workflows/deploy.md`.
483
-
484
- ---
485
-
486
- ## Red Flags — STOP
487
-
488
- - ❌ Deploying without running test:gate
489
- - ❌ Skipping syntax check ("tests will catch it")
490
- - ❌ Skipping build step ("tests passed so it'll build")
491
- - ❌ Running tests and deploy in parallel
492
- - ❌ "Tests passed last time" (run them NOW)
493
- - ❌ "Only changed one file" (test everything)
494
- - ❌ No frontend safety tests for JS projects
495
- - ❌ No dist/ verification after build
496
- - ❌ No post-deploy smoke test
497
- - ❌ No i18n parity check for multi-language apps
498
-
499
- ## Rationalization Table
500
-
501
- | Excuse | Reality |
502
- |--------|---------|
503
- | "Tests passed earlier" | Code changed since then. Run fresh. |
504
- | "Build always works" | Until it doesn't. 30 seconds to verify. |
505
- | "It's a one-line change" | One line broke 600 lines of app.js. Test it. |
506
- | "CI will catch it" | CI runs AFTER push. Catch BEFORE push. |
507
- | "Just a hotfix" | Hotfixes need MORE testing, not less. |
508
- | "Syntax check is redundant" | `node -c` takes 0.5s and prevented the March 2026 disaster. |
509
- | "i18n parity is overkill" | Missing keys → blank strings in production. |
510
- | "dist/ is always complete" | Build tools can silently skip assets. Check. |
511
-
512
- ## Integration with Other Skills
513
-
514
- | Skill | When |
515
- |-------|------|
516
- | `cm-quality-gate` | Setting up Gate 2 frontend tests and Test Gate |
517
- | `cm-secret-shield` | Gate 0 calls Secret Shield Layer 4 for deep scanning |
518
- | `cm-safe-i18n` | Adding i18n-specific gates |
519
- | `cm-terminal` | Monitoring gate commands |
520
- | `cm-identity-guard` | Gate 0 verifies deploy identity |
36
+ - Establishing deploy infrastructure for a new project
37
+ - Hardening an existing project that deploys without gates
38
+ - Recovering after incidents caused by weak release validation
39
+ - Running or reviewing a release pipeline before production changes
40
+
41
+ ## Choose Your Path
42
+
43
+ ```
44
+ Need to create deploy infrastructure for a project?
45
+ └─ YES → Setup path
46
+
47
+ Already have infrastructure and need to run or review gates?
48
+ └─ YES → Gate path
49
+
50
+ Did a deploy fail or need reversal?
51
+ └─ YES Rollback path
52
+ ```
53
+
54
+ | Path | Summary | Load |
55
+ |---|---|---|
56
+ | Setup | Establish scripts, tests, and deploy workflow | `references/setup-new-project.md` |
57
+ | Gate 0 | Secret hygiene | `references/gate-0-secret-hygiene.md` |
58
+ | Gate 0.5 | Security scanning | `references/gate-0-5-security-scan.md` |
59
+ | Gate 1 | Syntax validation | `references/gate-1-syntax.md` |
60
+ | Gate 2 | Test suite | `references/gate-2-test-suite.md` |
61
+ | Gate 3 | i18n parity | `references/gate-3-i18n.md` |
62
+ | Gates 4-5 | Build + dist verification | `references/gate-4-5-build-dist.md` |
63
+ | Gate 6 | Deploy + smoke verification | `references/gate-6-deploy-smoke.md` |
64
+ | Rollback | Recovery and reversal | `references/rollback.md` |
65
+
66
+ ## Gate Map
67
+ ```text
68
+ 0 Secret hygiene
69
+ 0.5 Security scan
70
+ 1 Syntax
71
+ 2 Test suite
72
+ 3 i18n parity
73
+ 4 Build verification
74
+ 5 Dist verification
75
+ 6 Deploy + smoke test
76
+ ```
77
+
78
+ ## Load Rules
79
+ - Load only the gate reference for the current stage.
80
+ - Load `setup-new-project.md` only when establishing infrastructure.
81
+ - Load `rollback.md` only when deployment fails or rollback planning is required.
82
+
83
+ ## Integration
84
+ | Skill | Why |
85
+ |---|---|
86
+ | `cm-quality-gate` | verification and evidence checks |
87
+ | `cm-identity-guard` | deploy identity verification |
88
+ | `cm-safe-i18n` | i18n-specific gate setup |
89
+ | `cm-terminal` | monitored execution of gate commands |
90
+
91
+ ## Rules
92
+ - Gates are sequential and blocking.
93
+ - Do not skip to later gates when an earlier gate fails.
94
+ - Keep deploy setup and active deploy execution separate in your head and in your prompts.
95
+ - Security and secret hygiene remain part of this skill; do not rely on deprecated skills.
521
96
 
522
97
  ## The Bottom Line
523
-
524
- **6 gates. Sequential. Each must pass. No exceptions.**
525
-
526
- Syntax → Tests → i18n → Build → Dist Verify → Deploy + Smoke.
527
-
528
- This is non-negotiable.
98
+ **Choose setup, the current gate, or rollback. Load only that path, and stop on failure.**
@@ -0,0 +1,31 @@
1
+ # Gate 0.5 — Security Scan
2
+
3
+ > Run vulnerability and security scanners before progressing deeper into the pipeline.
4
+
5
+ ## Use When
6
+ - production or public release prep
7
+ - repo risk or CVE concerns exist
8
+ - internal CodyMaster release flow requires security evidence
9
+
10
+ ## Commands
11
+ ```bash
12
+ snyk test
13
+
14
+ aikido-api-client scan-release <repo> $(git rev-parse HEAD) \
15
+ --minimum-severity-level="HIGH"
16
+ ```
17
+
18
+ ## Strict Internal Variant
19
+ ```bash
20
+ aikido-api-client scan-release <repo> $(git rev-parse HEAD) \
21
+ --minimum-severity-level="HIGH" \
22
+ --fail-on-sast-scan \
23
+ --fail-on-secrets-scan
24
+ ```
25
+
26
+ ## Decision
27
+ - both pass → continue
28
+ - either fails → stop and remediate before Gate 1
29
+
30
+ ## Rule
31
+ Treat security scan failure as a hard stop, not a warning.