codymaster 4.8.0 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (416) hide show
  1. package/CHANGELOG.md +331 -7
  2. package/README.md +226 -296
  3. package/dist/advisory-handoff.js +89 -0
  4. package/dist/advisory-report.js +105 -0
  5. package/dist/agent/antigravity.js +152 -0
  6. package/dist/agent/backend.js +2 -0
  7. package/dist/agent/claude.js +196 -0
  8. package/dist/agent/codex.js +204 -0
  9. package/dist/agent/copilot.js +284 -0
  10. package/dist/agent/cursor.js +211 -0
  11. package/dist/agent/factory.js +30 -0
  12. package/dist/agent/gemini.js +142 -0
  13. package/dist/agent/opencode.js +205 -0
  14. package/dist/agent/spawn-helper.js +237 -0
  15. package/dist/agent/version.js +25 -0
  16. package/dist/browse/adapter-factory.js +69 -0
  17. package/dist/browse/adapters/agent-browser-adapter.js +305 -0
  18. package/dist/browse/adapters/playwright-adapter.js +309 -0
  19. package/dist/browse/adapters/types.js +6 -0
  20. package/dist/browse/error-collector.js +132 -0
  21. package/dist/browse/event-log.js +109 -0
  22. package/dist/browse/index.js +17 -0
  23. package/dist/browse-server.js +204 -120
  24. package/dist/cli/command-registry.js +20 -0
  25. package/dist/cli/commands/bench.js +69 -0
  26. package/dist/cli/commands/brain.js +108 -0
  27. package/dist/cli/commands/dashboard.js +76 -2
  28. package/dist/cli/commands/engineering.js +326 -4
  29. package/dist/cli/commands/evolve.js +123 -0
  30. package/dist/cli/commands/install.js +160 -0
  31. package/dist/cli/commands/learn.js +181 -0
  32. package/dist/cli/commands/mcp-serve.js +104 -0
  33. package/dist/cli/commands/parallel.js +138 -0
  34. package/dist/cli/commands/quality.js +105 -0
  35. package/dist/cli/commands/stack.js +49 -0
  36. package/dist/cli/commands/update.js +159 -0
  37. package/dist/cli/update-check.js +94 -10
  38. package/dist/cm-config.js +0 -18
  39. package/dist/codybench/judges/automated.js +31 -0
  40. package/dist/codybench/runners/claude-code.js +32 -0
  41. package/dist/codybench/suites/memory-retention.js +85 -0
  42. package/dist/codybench/suites/tdd-regression.js +35 -0
  43. package/dist/codybench/suites/token-efficiency.js +55 -0
  44. package/dist/codybench/types.js +2 -0
  45. package/dist/context-db.js +157 -0
  46. package/dist/continuity.js +5 -7
  47. package/dist/dashboard.js +47 -6
  48. package/dist/data.js +35 -0
  49. package/dist/execution/tdd-gate.js +113 -0
  50. package/dist/execution-analyzer.js +138 -0
  51. package/dist/executor/cancel.js +34 -0
  52. package/dist/executor/gc.js +74 -0
  53. package/dist/executor/index.js +14 -0
  54. package/dist/executor/runner.js +70 -0
  55. package/dist/executor/workdir.js +31 -0
  56. package/dist/handoff/contracts.js +22 -0
  57. package/dist/handoff/index.js +18 -0
  58. package/dist/handoff/io.js +121 -0
  59. package/dist/index.js +7 -3
  60. package/dist/indexer/skills-lib.js +533 -0
  61. package/dist/indexer/skills-map.js +1374 -0
  62. package/dist/indexer/skills.js +16 -0
  63. package/dist/indexer/stack-detect.js +219 -0
  64. package/dist/install/copy.js +98 -0
  65. package/dist/install/engine.js +42 -0
  66. package/dist/install/paths.js +70 -0
  67. package/dist/install/platforms/_simple.js +85 -0
  68. package/dist/install/platforms/antigravity.js +91 -0
  69. package/dist/install/platforms/claude-code.js +107 -0
  70. package/dist/install/platforms/cursor.js +77 -0
  71. package/dist/install/platforms/index.js +27 -0
  72. package/dist/install/platforms/simple.js +163 -0
  73. package/dist/install/profiles.js +75 -0
  74. package/dist/install/types.js +2 -0
  75. package/dist/learning-promoter.js +246 -0
  76. package/dist/learnings.js +208 -0
  77. package/dist/mcp-context-server.js +230 -1
  78. package/dist/middleware/metrics.js +30 -0
  79. package/dist/middleware/security-headers.js +14 -0
  80. package/dist/realtime/event-bus.js +29 -0
  81. package/dist/realtime/ws-hub.js +91 -0
  82. package/dist/schemas/task-schema.js +48 -0
  83. package/dist/schemas/validate.js +18 -0
  84. package/dist/skill-chain.js +63 -1
  85. package/dist/skill-evolver.js +456 -0
  86. package/dist/skill-execution-cache.js +254 -0
  87. package/dist/skills-lock.js +96 -0
  88. package/dist/smart-brain-router.js +184 -0
  89. package/dist/sprint-pipeline.js +26 -0
  90. package/dist/storage/index.js +21 -0
  91. package/dist/storage/repos/activity-repo.js +46 -0
  92. package/dist/storage/repos/message-repo.js +39 -0
  93. package/dist/storage/repos/project-repo.js +56 -0
  94. package/dist/storage/repos/task-repo.js +142 -0
  95. package/dist/storage/services/project-service.js +49 -0
  96. package/dist/storage/services/task-service.js +97 -0
  97. package/dist/storage/sqlite.js +113 -0
  98. package/dist/storage-backend.js +10 -8
  99. package/dist/tier-classify.js +131 -0
  100. package/dist/token-budget.js +88 -0
  101. package/dist/ui/onboarding.js +51 -15
  102. package/dist/utils/cli-utils.js +7 -2
  103. package/dist/utils/design-taste.js +108 -0
  104. package/dist/utils/output-compress.js +143 -0
  105. package/dist/vibecoding-index.js +126 -0
  106. package/package.json +20 -6
  107. package/public/dashboard/app.js +52 -1
  108. package/scripts/build-skills-lock.mjs +88 -0
  109. package/scripts/build-skills.mjs +187 -28
  110. package/scripts/compress-skill.mjs +73 -0
  111. package/scripts/deprecate-skill.mjs +72 -0
  112. package/scripts/install.sh +170 -0
  113. package/scripts/mcp-bridge.js +2 -2
  114. package/scripts/postinstall.js +53 -335
  115. package/scripts/update-changelog.sh +88 -0
  116. package/scripts/validate-skills.mjs +101 -4
  117. package/skills/CLAUDE.md +0 -5
  118. package/skills/_shared/SKILL_TEMPLATE.md +62 -0
  119. package/skills/_shared/helpers.md +2 -8
  120. package/skills/cm-autopilot/scripts/autopilot.py +19 -2
  121. package/skills/cm-brainstorm-idea/SKILL.md +9 -0
  122. package/skills/cm-browse/SKILL.md +6 -0
  123. package/skills/cm-clean-code/SKILL.md +20 -0
  124. package/skills/cm-code-review/SKILL.md +21 -0
  125. package/skills/cm-codeintell/SKILL.md +9 -0
  126. package/skills/cm-conductor-worktrees/SKILL.archive.md +28 -0
  127. package/skills/cm-conductor-worktrees/SKILL.md +20 -18
  128. package/skills/cm-continuity/SKILL.md +41 -33
  129. package/skills/cm-dashboard/SKILL.archive.md +15 -0
  130. package/skills/cm-dashboard/SKILL.md +20 -9
  131. package/skills/cm-dashboard/ui/app.js +9 -1
  132. package/skills/cm-debugging/SKILL.md +9 -0
  133. package/skills/cm-design-studio/SKILL.archive.md +34 -0
  134. package/skills/cm-design-studio/SKILL.md +20 -24
  135. package/skills/cm-design-system/SKILL.md +1 -0
  136. package/skills/cm-ecosystem-roadmap/SKILL.md +4 -0
  137. package/skills/cm-engineering-meta/SKILL.archive.md +73 -0
  138. package/skills/cm-engineering-meta/SKILL.md +19 -62
  139. package/skills/cm-execution/SKILL.md +98 -0
  140. package/skills/cm-git-worktrees/SKILL.archive.md +157 -0
  141. package/skills/cm-git-worktrees/SKILL.md +15 -146
  142. package/skills/cm-guardian-runtime/SKILL.md +5 -1
  143. package/skills/cm-identity-guard/SKILL.md +8 -0
  144. package/skills/cm-mcp-engineering/SKILL.md +4 -0
  145. package/skills/cm-planning/SKILL.md +63 -92
  146. package/skills/cm-post-deploy-canary/SKILL.archive.md +22 -0
  147. package/skills/cm-post-deploy-canary/SKILL.md +20 -12
  148. package/skills/cm-project-bootstrap/SKILL.md +11 -0
  149. package/skills/cm-qa-visual-cli/SKILL.archive.md +22 -0
  150. package/skills/cm-qa-visual-cli/SKILL.md +19 -11
  151. package/skills/cm-quality-gate/SKILL.md +38 -0
  152. package/skills/cm-retro-cli/SKILL.md +4 -0
  153. package/skills/cm-safe-deploy/SKILL.md +9 -0
  154. package/skills/cm-second-opinion-cli/SKILL.archive.md +23 -0
  155. package/skills/cm-second-opinion-cli/SKILL.md +20 -13
  156. package/skills/cm-secret-shield/SKILL.archive.md +580 -0
  157. package/skills/cm-secret-shield/SKILL.md +15 -569
  158. package/skills/cm-security-gate/SKILL.archive.md +239 -0
  159. package/skills/cm-security-gate/SKILL.md +16 -228
  160. package/skills/cm-skill-chain/SKILL.md +25 -4
  161. package/skills/cm-skill-evolution/SKILL.md +83 -0
  162. package/skills/cm-skill-health/SKILL.archive.md +83 -0
  163. package/skills/cm-skill-health/SKILL.md +26 -0
  164. package/skills/cm-skill-index/SKILL.md +19 -3
  165. package/skills/cm-skill-mastery/SKILL.archive.md +156 -0
  166. package/skills/cm-skill-mastery/SKILL.md +16 -146
  167. package/skills/cm-skill-search/SKILL.archive.md +49 -0
  168. package/skills/cm-skill-search/SKILL.md +26 -0
  169. package/skills/cm-skill-share/SKILL.archive.md +58 -0
  170. package/skills/cm-skill-share/SKILL.md +26 -0
  171. package/skills/cm-sprint-bus/SKILL.md +13 -0
  172. package/skills/cm-start/SKILL.md +17 -10
  173. package/skills/cm-tdd/SKILL.md +21 -2
  174. package/skills/cm-terminal/SKILL.md +15 -0
  175. package/skills/cm-test-gate/SKILL.archive.md +245 -0
  176. package/skills/cm-test-gate/SKILL.md +15 -234
  177. package/skills/cm-ui-preview/SKILL.archive.md +153 -0
  178. package/skills/cm-ui-preview/SKILL.md +16 -143
  179. package/skills/cm-ux-master/cli/uxmaster/commands/mcp.py +1 -1
  180. package/skills/cm-ux-master/mcp/mcp-config.json +1 -1
  181. package/skills/cm-ux-master/mcp/server.py +2 -2
  182. package/skills/profiles/design.txt +1 -1
  183. package/skills/profiles/full.txt +4 -10
  184. package/skills/profiles/growth.txt +8 -8
  185. package/skills/profiles/knowledge.txt +1 -1
  186. package/skills/profiles/top35.json +41 -0
  187. package/adapters/antigravity.js +0 -15
  188. package/adapters/claude-code.js +0 -17
  189. package/adapters/cursor.js +0 -16
  190. package/install.sh +0 -1125
  191. package/scripts/viking-demo.ts +0 -105
  192. package/skills/cm-ads-tracker/SKILL.md +0 -401
  193. package/skills/cm-ads-tracker/evals/evals.json +0 -55
  194. package/skills/cm-ads-tracker/references/gtm-architecture.md +0 -321
  195. package/skills/cm-ads-tracker/references/industry-events.md +0 -294
  196. package/skills/cm-ads-tracker/references/platforms-api.md +0 -238
  197. package/skills/cm-ads-tracker/templates/capi-payload.md +0 -79
  198. package/skills/cm-ads-tracker/templates/datalayer-push.js +0 -104
  199. package/skills/cm-ads-tracker/templates/gtm-variables.js +0 -56
  200. package/skills/cm-auto-publisher/SKILL.md +0 -81
  201. package/skills/cm-booking-calendar/SKILL.md +0 -521
  202. package/skills/cm-booking-calendar/references/industry-patterns.md +0 -527
  203. package/skills/cm-booking-calendar/templates/booking-form.css +0 -626
  204. package/skills/cm-booking-calendar/templates/booking-form.html +0 -477
  205. package/skills/cm-booking-calendar/templates/calendar-engine.js +0 -419
  206. package/skills/cm-booking-calendar/templates/calendar-export.js +0 -395
  207. package/skills/cm-booking-calendar/templates/reminder-config.js +0 -629
  208. package/skills/cm-content-factory/.content-factory-state.json +0 -132
  209. package/skills/cm-content-factory/.git 2/logs/refs/heads/main +0 -1
  210. package/skills/cm-content-factory/.git 2/logs/refs/remotes/origin/main +0 -1
  211. package/skills/cm-content-factory/.git 2/objects/02/fb0956734b5f8ba3f918b7defd04a89cfe0076 +0 -0
  212. package/skills/cm-content-factory/.git 2/objects/08/1e129d75dc6feac6c02037272e6bd1a04e3324 +0 -0
  213. package/skills/cm-content-factory/.git 2/objects/0c/5393416f3c5e01c9a655a802bff0dd52f76f0a +0 -0
  214. package/skills/cm-content-factory/.git 2/objects/10/0b9be46978a946a77188f68be725098a122001 +0 -0
  215. package/skills/cm-content-factory/.git 2/objects/10/cf041167fc9843610eb3d90259ef3396315fdc +0 -0
  216. package/skills/cm-content-factory/.git 2/objects/12/5e19538dd6e1338ffe74f6c4c165b00435bf48 +0 -0
  217. package/skills/cm-content-factory/.git 2/objects/16/a9b9d0088d5c1347628b45a2620b479d8ad57c +0 -0
  218. package/skills/cm-content-factory/.git 2/objects/17/8c2a9ef93c33ae4eec9d58e82321f9229843a1 +0 -0
  219. package/skills/cm-content-factory/.git 2/objects/25/397ae41d09104d763bdcac2695209d85cdea89 +0 -0
  220. package/skills/cm-content-factory/.git 2/objects/2f/a836b7947f2d458e1f639788bf4bb0983a3305 +0 -0
  221. package/skills/cm-content-factory/.git 2/objects/3a/baaaf0a1c0909c0828335791557125fba911e0 +0 -0
  222. package/skills/cm-content-factory/.git 2/objects/42/2924221b81f5ce3c4e4daac9a64a24f9b01f9a +0 -0
  223. package/skills/cm-content-factory/.git 2/objects/42/ec0ce707447dc11446a34c9995fb8533801731 +0 -0
  224. package/skills/cm-content-factory/.git 2/objects/46/e43ce92866d56ce74b1d750db307cfe6154a15 +0 -0
  225. package/skills/cm-content-factory/.git 2/objects/48/5e41b633c63f55b8277bcc59f44f67681f671a +0 -0
  226. package/skills/cm-content-factory/.git 2/objects/49/49c596a3a89fa240642acd95dd3258e261eb09 +0 -0
  227. package/skills/cm-content-factory/.git 2/objects/50/9d42d8412ef8eaf7f7e138476bac2e4d10ce60 +0 -0
  228. package/skills/cm-content-factory/.git 2/objects/55/0c8c389d981b463ef849aeb792d8be3ccb6ec8 +0 -0
  229. package/skills/cm-content-factory/.git 2/objects/5d/82d3b18410cdda3ace3677436f0cb599dbe2d2 +0 -0
  230. package/skills/cm-content-factory/.git 2/objects/60/0617c58e871a38b33bf29e282d132bb3c381ad +0 -0
  231. package/skills/cm-content-factory/.git 2/objects/6a/8369a99c687b7245c92ffaf0e0f0dab9014504 +0 -0
  232. package/skills/cm-content-factory/.git 2/objects/79/bea435d40ab531c1aaf6be0432c6a5b7aaed21 +0 -0
  233. package/skills/cm-content-factory/.git 2/objects/7e/5ebd79251c2f14e4aceb86c74b6b6daae6b500 +0 -0
  234. package/skills/cm-content-factory/.git 2/objects/81/98a822a60178d6d5023ddb3e222cddf048742e +0 -0
  235. package/skills/cm-content-factory/.git 2/objects/86/0a0e1943dfe53411d2e499a1f16f46a96ef758 +0 -0
  236. package/skills/cm-content-factory/.git 2/objects/86/971fb55fdc081fdbae52376f0f13e57a4e9b04 +0 -0
  237. package/skills/cm-content-factory/.git 2/objects/88/b89dd609a0a03f8d4fe8bfde20d5b8fc1d326d +0 -0
  238. package/skills/cm-content-factory/.git 2/objects/90/8737edb6b7809e32cc01590b4e08ba42a9d40d +0 -0
  239. package/skills/cm-content-factory/.git 2/objects/93/d5a8a9a7d4fb7f11491cb596a6880528725118 +0 -0
  240. package/skills/cm-content-factory/.git 2/objects/98/46a2ab81d0c3b3eb00ef88fc56989aa7e9f316 +0 -0
  241. package/skills/cm-content-factory/.git 2/objects/9b/d8dd1e49cf274eaf9c555f3ab39dce7af5715e +0 -0
  242. package/skills/cm-content-factory/.git 2/objects/a1/13329fb0cec96ae78b222d33a24c3b5bc7fa1f +0 -0
  243. package/skills/cm-content-factory/.git 2/objects/a9/e6effe626e8a3aea3a8fc3364b492191c6e7d0 +0 -0
  244. package/skills/cm-content-factory/.git 2/objects/ad/6de7e48d9782cca9353d1ff0aa1aab7fe1df85 +0 -0
  245. package/skills/cm-content-factory/.git 2/objects/af/54ae316f771ff692e299ffcd8bf2f06b413b59 +0 -0
  246. package/skills/cm-content-factory/.git 2/objects/b0/4cb8b0b00dad633e731c1472161419e738d674 +0 -0
  247. package/skills/cm-content-factory/.git 2/objects/b3/094abb0b9ed46419b269e4a4e36a459690e3b0 +0 -0
  248. package/skills/cm-content-factory/.git 2/objects/b9/435c5d4baac2cfc5c83009ddd27b46b60db5f1 +0 -0
  249. package/skills/cm-content-factory/.git 2/objects/ba/5da17dbaec5ec2dcfdfd126aead518d1171d5c +0 -0
  250. package/skills/cm-content-factory/.git 2/objects/c0/bf58703aa258ba5dd63083bebaec8f223d844c +0 -0
  251. package/skills/cm-content-factory/.git 2/objects/c4/701a34edf1fc1bad58ccc57bd03f9426acb59a +0 -0
  252. package/skills/cm-content-factory/.git 2/objects/c7/5ccce9a4e5cc74d9b3174550cf6d993ca43638 +0 -0
  253. package/skills/cm-content-factory/.git 2/objects/c7/710d59b5a35b0f1f0a0399386643a0bd94c929 +0 -0
  254. package/skills/cm-content-factory/.git 2/objects/d1/fe58237112e953e5fec52da22cf38e08be3df9 +0 -5
  255. package/skills/cm-content-factory/.git 2/objects/d2/2bbe9fd2f74c95bc5583e803f5e435f1e2cd86 +0 -0
  256. package/skills/cm-content-factory/.git 2/objects/d7/e72852ea2bff74581dbf247d400120086229f4 +0 -0
  257. package/skills/cm-content-factory/.git 2/objects/d8/d4c3b5553e4fd72807e1d4b49ef07d9ef3ac35 +0 -0
  258. package/skills/cm-content-factory/.git 2/objects/dc/75050c2876f6a02ae2a53a3c886f395b622977 +0 -0
  259. package/skills/cm-content-factory/.git 2/objects/ee/e8546f95acec500187c08a28a8b9ee02db0dec +0 -0
  260. package/skills/cm-content-factory/.git 2/objects/ef/263c059208b416c2146434f10cb2b9fabcba16 +0 -0
  261. package/skills/cm-content-factory/.git 2/objects/f3/ae597e84d9a59b88acd21c99bde2eaf686d785 +0 -0
  262. package/skills/cm-content-factory/.git 2/objects/f3/f6f5673c821d3d8e76fa267a9e882e7a5387ea +0 -0
  263. package/skills/cm-content-factory/.git 2/objects/f9/6e6d0ad02624dd11d5848594d056caef7a5e8b +0 -0
  264. package/skills/cm-content-factory/.git 2/objects/ff/278988fc1edf0db3abcf18de795f4cc0b4f3e1 +0 -0
  265. package/skills/cm-content-factory/.git 2/refs/heads/main +0 -1
  266. package/skills/cm-content-factory/.git 2/refs/remotes/origin/main +0 -1
  267. package/skills/cm-content-factory/.pytest_cache 2/v/cache/nodeids +0 -76
  268. package/skills/cm-content-factory/.pytest_cache 2/v/cache/stepwise +0 -1
  269. package/skills/cm-content-factory/AGENTS.md +0 -61
  270. package/skills/cm-content-factory/CLAUDE.md +0 -63
  271. package/skills/cm-content-factory/CURSOR.md +0 -43
  272. package/skills/cm-content-factory/Content Factory.zip +0 -0
  273. package/skills/cm-content-factory/SKILL.md +0 -416
  274. package/skills/cm-content-factory/cf +0 -313
  275. package/skills/cm-content-factory/config.schema.json +0 -397
  276. package/skills/cm-content-factory/dashboard/app.js +0 -556
  277. package/skills/cm-content-factory/dashboard/index.html +0 -397
  278. package/skills/cm-content-factory/dashboard/style.css +0 -1211
  279. package/skills/cm-content-factory/examples/01-real-estate.config.json +0 -146
  280. package/skills/cm-content-factory/examples/02-personal-finance.config.json +0 -146
  281. package/skills/cm-content-factory/examples/03-health-wellness.config.json +0 -147
  282. package/skills/cm-content-factory/examples/04-saas-software.config.json +0 -147
  283. package/skills/cm-content-factory/examples/05-legal-services.config.json +0 -147
  284. package/skills/cm-content-factory/examples/06-insurance.config.json +0 -146
  285. package/skills/cm-content-factory/examples/07-ecommerce-dropship.config.json +0 -146
  286. package/skills/cm-content-factory/examples/08-online-education.config.json +0 -147
  287. package/skills/cm-content-factory/examples/09-crypto-defi.config.json +0 -147
  288. package/skills/cm-content-factory/examples/10-beauty-skincare.config.json +0 -147
  289. package/skills/cm-content-factory/examples/11-home-services.config.json +0 -146
  290. package/skills/cm-content-factory/examples/12-dental-clinic.config.json +0 -147
  291. package/skills/cm-content-factory/examples/13-pet-care.config.json +0 -147
  292. package/skills/cm-content-factory/examples/14-travel-hospitality.config.json +0 -147
  293. package/skills/cm-content-factory/examples/15-ai-automation.config.json +0 -147
  294. package/skills/cm-content-factory/examples/16-wedding-events.config.json +0 -147
  295. package/skills/cm-content-factory/examples/17-fitness-coaching.config.json +0 -148
  296. package/skills/cm-content-factory/examples/18-cybersecurity.config.json +0 -147
  297. package/skills/cm-content-factory/examples/19-food-restaurant.config.json +0 -148
  298. package/skills/cm-content-factory/examples/20-solar-energy.config.json +0 -147
  299. package/skills/cm-content-factory/examples/fitness-blog.config.json +0 -116
  300. package/skills/cm-content-factory/examples/tech-blog.config.json +0 -107
  301. package/skills/cm-content-factory/extensions/EXTENSION_GUIDE.md +0 -72
  302. package/skills/cm-content-factory/extensions/hooks.py +0 -126
  303. package/skills/cm-content-factory/extensions/openclaw_adapter.py +0 -132
  304. package/skills/cm-content-factory/landing/docs/content/changelog.md +0 -36
  305. package/skills/cm-content-factory/landing/docs/content/deployment.md +0 -46
  306. package/skills/cm-content-factory/landing/docs/content/execution-flow.md +0 -67
  307. package/skills/cm-content-factory/landing/docs/content/openspace.md +0 -27
  308. package/skills/cm-content-factory/landing/docs/content/openviking.md +0 -33
  309. package/skills/cm-content-factory/landing/docs/content/use-cases.md +0 -26
  310. package/skills/cm-content-factory/landing/docs/content/v5-intro.md +0 -28
  311. package/skills/cm-content-factory/landing/docs/index.html +0 -240
  312. package/skills/cm-content-factory/landing/index.html +0 -680
  313. package/skills/cm-content-factory/landing/script.js +0 -143
  314. package/skills/cm-content-factory/landing/style.css +0 -1216
  315. package/skills/cm-content-factory/landing/translations.js +0 -508
  316. package/skills/cm-content-factory/logs/events.jsonl +0 -11
  317. package/skills/cm-content-factory/profiles/_template.profile.json +0 -231
  318. package/skills/cm-content-factory/profiles/finance.profile.json +0 -278
  319. package/skills/cm-content-factory/profiles/legal.profile.json +0 -263
  320. package/skills/cm-content-factory/profiles/medical-research.profile.json +0 -321
  321. package/skills/cm-content-factory/profiles/technology.profile.json +0 -275
  322. package/skills/cm-content-factory/scripts/agent_dispatcher.py +0 -266
  323. package/skills/cm-content-factory/scripts/audit.py +0 -106
  324. package/skills/cm-content-factory/scripts/dashboard_server.py +0 -225
  325. package/skills/cm-content-factory/scripts/deploy.py +0 -146
  326. package/skills/cm-content-factory/scripts/extract.py +0 -132
  327. package/skills/cm-content-factory/scripts/landing_generator.py +0 -459
  328. package/skills/cm-content-factory/scripts/memory.py +0 -521
  329. package/skills/cm-content-factory/scripts/monetize.py +0 -239
  330. package/skills/cm-content-factory/scripts/pipeline.py +0 -357
  331. package/skills/cm-content-factory/scripts/plan.py +0 -163
  332. package/skills/cm-content-factory/scripts/publish.py +0 -145
  333. package/skills/cm-content-factory/scripts/research.py +0 -337
  334. package/skills/cm-content-factory/scripts/scaffold.py +0 -464
  335. package/skills/cm-content-factory/scripts/scoreboard.py +0 -336
  336. package/skills/cm-content-factory/scripts/seo.py +0 -90
  337. package/skills/cm-content-factory/scripts/state_manager.py +0 -320
  338. package/skills/cm-content-factory/scripts/token_manager.py +0 -268
  339. package/skills/cm-content-factory/scripts/validate.py +0 -221
  340. package/skills/cm-content-factory/scripts/wizard.py +0 -329
  341. package/skills/cm-content-factory/scripts/write.py +0 -93
  342. package/skills/cm-content-factory/sites/docs-site/src/assets/houston.webp +0 -0
  343. package/skills/cm-content-factory/sites/docs-site/src/content/docs/architecture.md +0 -90
  344. package/skills/cm-content-factory/sites/docs-site/src/content/docs/data-flow.md +0 -54
  345. package/skills/cm-content-factory/sites/docs-site/src/content/docs/deployment.md +0 -38
  346. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/index.md +0 -65
  347. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/lc-content-lifecycle.md +0 -48
  348. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/seq-write-mode.md +0 -39
  349. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/uj-first-batch.md +0 -42
  350. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/wf-content-pipeline.md +0 -51
  351. package/skills/cm-content-factory/sites/docs-site/src/content/docs/flows/wf-learning-cycle.md +0 -52
  352. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/configuration.md +0 -86
  353. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/installation.md +0 -80
  354. package/skills/cm-content-factory/sites/docs-site/src/content/docs/getting-started/intro.md +0 -58
  355. package/skills/cm-content-factory/sites/docs-site/src/content/docs/index.md +0 -102
  356. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/index.md +0 -45
  357. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/optimize-seo.md +0 -29
  358. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/scale-content-production.md +0 -55
  359. package/skills/cm-content-factory/sites/docs-site/src/content/docs/jtbd/standardize-quality.md +0 -29
  360. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/buyer-cmo-huong.md +0 -41
  361. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/buyer-content-lead-khoa.md +0 -40
  362. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/index.md +0 -56
  363. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-content-manager-lan.md +0 -46
  364. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-seo-minh.md +0 -45
  365. package/skills/cm-content-factory/sites/docs-site/src/content/docs/personas/user-writer-tu.md +0 -45
  366. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/content-pipeline.md +0 -108
  367. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/index.md +0 -22
  368. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/memory-system.md +0 -52
  369. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/seo-optimization.md +0 -58
  370. package/skills/cm-content-factory/sites/docs-site/src/content/docs/sop/troubleshooting-guide.md +0 -92
  371. package/skills/cm-content-factory/sites/docs-site/src/styles/custom.css +0 -575
  372. package/skills/cm-content-factory/tests/conftest.py +0 -66
  373. package/skills/cm-content-factory/tests/test_agent_dispatcher.py +0 -125
  374. package/skills/cm-content-factory/tests/test_memory.py +0 -128
  375. package/skills/cm-content-factory/tests/test_pipeline.py +0 -107
  376. package/skills/cm-content-factory/tests/test_research.py +0 -56
  377. package/skills/cm-content-factory/tests/test_state_manager.py +0 -131
  378. package/skills/cm-content-factory/tests/test_token_manager.py +0 -110
  379. package/skills/cm-content-factory/tests/test_wizard.py +0 -121
  380. package/skills/cm-cro-methodology/SKILL.md +0 -290
  381. package/skills/cm-cro-methodology/references/COPYWRITING.md +0 -178
  382. package/skills/cm-cro-methodology/references/OBJECTIONS.md +0 -135
  383. package/skills/cm-cro-methodology/references/PERSUASION.md +0 -158
  384. package/skills/cm-cro-methodology/references/RESEARCH.md +0 -220
  385. package/skills/cm-cro-methodology/references/funnel-analysis.md +0 -365
  386. package/skills/cm-cro-methodology/references/testing-methodology.md +0 -330
  387. package/skills/cm-google-form/SKILL.md +0 -266
  388. package/skills/cm-google-form/templates/apps-script.js +0 -55
  389. package/skills/cm-google-form/templates/form-markup.html +0 -110
  390. package/skills/cm-google-form/templates/form-submit.js +0 -201
  391. package/skills/cm-google-form/templates/toast.css +0 -152
  392. package/skills/cm-growth-hacking/SKILL.md +0 -282
  393. package/skills/cm-growth-hacking/bottom-sheet-engine.md +0 -261
  394. package/skills/cm-growth-hacking/calendar-integration.md +0 -264
  395. package/skills/cm-growth-hacking/references/engagement-patterns.md +0 -346
  396. package/skills/cm-growth-hacking/templates/bottom-sheet.css +0 -528
  397. package/skills/cm-growth-hacking/templates/bottom-sheet.js +0 -269
  398. package/skills/cm-growth-hacking/templates/calendar-cta.js +0 -213
  399. package/skills/cm-growth-hacking/templates/tracking-events.js +0 -211
  400. package/skills/cm-growth-hacking/templates/trigger-manager.js +0 -254
  401. package/skills/cm-growth-hacking/tracking-events.md +0 -246
  402. package/skills/cm-growth-hacking/trigger-system.md +0 -342
  403. package/skills/cm-jtbd/SKILL.md +0 -98
  404. package/skills/cm-notebooklm/SKILL.md +0 -156
  405. package/skills/cm-notebooklm/references/command_reference.md +0 -94
  406. package/skills/cm-notebooklm/references/workflows.md +0 -60
  407. package/skills/cm-notebooklm/resources/knowledge_sources.md +0 -106
  408. package/skills/cm-notebooklm/scripts/brain-sync.sh +0 -453
  409. package/skills/cm-notebooklm/scripts/graduate_wisdom.py +0 -101
  410. package/skills/cm-readit/SKILL.md +0 -289
  411. package/skills/cm-readit/audio-player.md +0 -206
  412. package/skills/cm-readit/examples/blog-reader.js +0 -352
  413. package/skills/cm-readit/examples/voice-cro.js +0 -390
  414. package/skills/cm-readit/tts-engine.md +0 -262
  415. package/skills/cm-readit/ui-patterns.md +0 -362
  416. package/skills/cm-readit/voice-cro.md +0 -223
@@ -1,10 +1,18 @@
1
1
  ---
2
2
  name: cm-start
3
3
  description: Start the CM Workflow to execute your objective from idea to production code.
4
+ token_budget: 1000
5
+ compressed: true
6
+ deprecated: false
4
7
  ---
5
8
 
6
9
  # Command: `/cm-start [your objective]`
7
10
 
11
+ ## TL;DR
12
+ - **Use to** kick off a CM session — entry point
13
+ - **Detects**: stack (Phase 2), suggests skills, reads continuity + learnings
14
+ - **Next**: cm-brainstorm-idea or cm-planning
15
+
8
16
  > **Role: Workflow Orchestrator** — You assess complexity, select the right workflow depth, and drive execution from objective to production code.
9
17
 
10
18
  When this workflow is called, the AI Assistant should execute the following action sequence in the spirit of the **CodyMaster Kit**:
@@ -13,16 +21,12 @@ When this workflow is called, the AI Assistant should execute the following acti
13
21
  Per `_shared/helpers.md#Load-Working-Memory` — **use Smart Spine order:**
14
22
  1. Check `.cm/context-bus.json` → any active pipeline? any prior skill output to reuse?
15
23
  2. Load L0 indexes: `learnings-index.md` (~100 tok) + `skeleton-index.md` (~500 tok)
16
- > **If OpenViking backend active:** Skip step 2 — engine auto-serves L0/L1 via `cm_resolve`.
17
24
  3. Scope-filter learnings via `cm_query` — only load what matches current objective
18
- > **If OpenViking:** `cm_query` uses vector semantic search — broader recall, fewer missed learnings.
19
25
  4. Read `CONTINUITY.md` → set Active Goal to the new objective
20
26
  5. Run token budget check: `cm continuity budget` → confirm no category is over soft limit
21
27
 
22
28
  > ⚡ Total context load: ~700 tokens. Full load used to be ~3,200.
23
29
  > Only escalate to L2 (full files) if L0 index explicitly flags a match.
24
- > With OpenViking: L0 is auto-maintained — no stale index risk.
25
-
26
30
  0.5. **Skill Coverage Check (Adaptive Discovery):**
27
31
  - Scan the objective for technologies, frameworks, or patterns mentioned
28
32
  - Cross-reference with `cm-skill-index` Layer 1 triggers
@@ -30,6 +34,15 @@ When this workflow is called, the AI Assistant should execute the following acti
30
34
  `npx skills find "{keyword}"` → review → ask user → install if approved
31
35
  - Log any discovered skills to `.cm-skills-log.json`
32
36
 
37
+ 0.6. **Stack & Tier Detection (Phase 2):**
38
+ - `cm stack detect --write` → writes `.cm/project-skills.md` (frameworks + suggested skills)
39
+ - `cm tier classify --write` → writes `.cm/project-tier.md` (LITE/STANDARD/PROFESSIONAL/ENTERPRISE)
40
+ - The tier sets the default Vibecoding mode and **adaptive depth**:
41
+ - LITE/STANDARD → render skill TL;DR only
42
+ - PROFESSIONAL/ENTERPRISE → render full protocol
43
+ - Inject the suggested-skills list into the skill chain shortlist
44
+ - These reports are token-light (~300 tok combined) and skipped if files exist and are <24h old
45
+
33
46
  0.7. **Code Intelligence Setup (cm-codeintell):**
34
47
  - **ALWAYS:** Run skeleton indexer → `bash scripts/index-codebase.sh` → `.cm/skeleton.md`
35
48
  - Read `.cm/skeleton.md` (~5K tokens) → instant codebase understanding
@@ -85,11 +98,5 @@ When this workflow is called, the AI Assistant should execute the following acti
85
98
  - Record any new learnings or decisions made during this workflow
86
99
  - If inside a skill chain: `cm continuity bus` → verify context bus reflects completed step
87
100
  - Refresh L0 indexes: `cm continuity index` (auto-runs on `addLearning`, manual refresh here)
88
- > **If OpenViking:** Skip manual index refresh — engine maintains L0/L1 automatically.
89
-
90
101
  > **Note for AI:** If this is a brand new project, suggest running `cm-project-bootstrap` first.
91
102
  > If the working environment has a risk of accidentally switching accounts/projects, remind about `cm-identity-guard` (Per `_shared/helpers.md#Identity-Check`).
92
- >
93
- > **OpenViking tip:** If the project uses many learnings/decisions (>100 entries) or needs semantic
94
- > search beyond keyword matching, suggest switching to the Viking backend:
95
- > `storage.backend: viking` in `.cm/config.yaml` + `pip install openviking && openviking start`
@@ -1,10 +1,19 @@
1
1
  ---
2
-
3
- ## name: cm-tdd
2
+ name: cm-tdd
4
3
  description: Use when implementing any feature or bugfix, before writing implementation code
4
+ token_budget: 1500
5
+ compressed: true
6
+ deprecated: false
7
+ ---
5
8
 
6
9
  # Test-Driven Development (TDD)
7
10
 
11
+ ## TL;DR
12
+ - **Use when** writing or fixing any feature/bugfix
13
+ - **Cycle**: red (failing test) → green (minimal code) → refactor
14
+ - **No prod code** without a failing test first
15
+ - **Next**: cm-execution or cm-code-review
16
+
8
17
  ## Overview
9
18
 
10
19
  Write the test first. Watch it fail. Write minimal code to pass.
@@ -352,6 +361,16 @@ Bug found? Write failing test reproducing it. Follow TDD cycle. Test proves fix
352
361
 
353
362
  Never fix bugs without a test.
354
363
 
364
+ ## Karpathy Discipline — Goal-Driven Execution
365
+
366
+ TDD is the canonical form of goal-driven execution. Reinforce it:
367
+ - **Translate vague tasks into verifiable goals before writing code.**
368
+ - "Add validation" → "Test invalid inputs fail; valid inputs pass."
369
+ - "Fix the bug" → "Test reproduces it red; fix turns it green."
370
+ - "Refactor X" → "Same tests green before and after."
371
+ - **Strong success criteria let you loop independently.** Weak criteria ("make it work") force the user to babysit.
372
+ - **Minimum code to pass.** Don't over-implement to "anticipate" the next test — write that test first.
373
+
355
374
  ## Final Rule
356
375
 
357
376
  ```
@@ -85,6 +85,21 @@ ERROR PATTERNS TO DETECT:
85
85
  - Warning patterns that indicate real problems
86
86
  ```
87
87
 
88
+ ### Step 4b: Compress Before Quoting
89
+
90
+ **Before pasting stdout into TaskSummary or model context:**
91
+
92
+ | Command pattern | Rule |
93
+ |-----------------|------|
94
+ | `git status` | Keep only changed entries + branch line + `(N changed)` count. Drop "use git add…" boilerplate. |
95
+ | `npm test` / `vitest` / `jest` | Keep failing tests + summary line. Drop `PASS` lines. |
96
+ | `npm run build` / `tsc` | Keep `error` / `warning` / final status. Drop incremental progress. |
97
+ | Any output | Collapse runs of ≥ 3 identical lines into `<line> … (× N)`. |
98
+
99
+ **Helper:** `src/utils/output-compress.ts` — `compressGitStatus`, `compressNpmTest`, `summarizeBuildLog`, `collapseRepeatedLines`, `compressFor(command, stdout)`.
100
+
101
+ **Anti-pattern:** Pasting full stdout (> 50 lines) into TaskSummary when only the failing portion matters. Compress first, then quote.
102
+
88
103
  ### Step 5: Stop on Error
89
104
 
90
105
  **If ANY error is detected:**
@@ -0,0 +1,245 @@
1
+ ---
2
+ name: cm-test-gate
3
+ description: Complete guide to setting up a reliable test gate for any project — covers stack detection, 4 core test files, script wiring, secret hygiene, and Cloudflare Workers/Pages patterns. Use when starting a new project, adding CI to an existing one, or when "tests pass but production breaks." Companion to cm-safe-deploy and cm-project-bootstrap.
4
+ ---
5
+
6
+ # cm-test-gate: Multi-Layer Test Gate Setup
7
+
8
+ ## Overview
9
+
10
+ A deployment process without a test gate is just shipping code and praying. The `test:gate` script is your first line of defense before deployment. A test gate MUST verify four things: frontend component safety, backend API behavior, core business logic, and i18n synchronization.
11
+
12
+ **Core assumption:** The most dangerous errors are syntax flaws, variable shadowing, or import failures that tests often skip if they only check logic.
13
+
14
+ **Violating the letter of this process is violating the spirit of quality engineering.**
15
+
16
+ ## The Protocol
17
+
18
+ When setting up a test gate for a project, follow these 5 phases in order.
19
+
20
+ ### Phase 1: Stack Detection and Environment Setup
21
+
22
+ **Goal:** Identify the framework and install the correct testing dependencies.
23
+
24
+ 1. **Detect Stack:**
25
+ - Check `package.json` for framework (React, Vue, Svelte, static HTML) and build tool (Vite, Next.js).
26
+ - Check for `wrangler.json(c)` (Cloudflare Workers/Pages).
27
+ - Check for Tailwind, PostCSS, or specific UI libraries.
28
+
29
+ 2. **Install Dependencies (Example: Vite/Vitest):**
30
+ ```bash
31
+ # Install vitest and related tools
32
+ npm install -D vitest jsdom @testing-library/react @testing-library/jest-dom
33
+ # (Adjust based on framework: e.g., @testing-library/svelte)
34
+ ```
35
+
36
+ 3. **Configure File:**
37
+ - Create `vitest.config.ts` (or `.js`):
38
+ ```typescript
39
+ import { defineConfig } from 'vitest/config'
40
+ // Import framework plugin (e.g., react(), svelte())
41
+
42
+ export default defineConfig({
43
+ test: {
44
+ environment: 'jsdom',
45
+ globals: true,
46
+ setupFiles: ['./test/setup.ts'], // Optional
47
+ },
48
+ })
49
+ ```
50
+
51
+ ### Phase 2: The 4 Core Test Files
52
+
53
+ A complete `test:gate` must cover four distinct layers. Do not combine these files.
54
+
55
+ #### Layer 1: Frontend Safety (`frontend-safety.test.ts`)
56
+ This layer prevents white screens and catastrophic syntax errors in the browser. Emphasize parsing and template rendering over logical assertions.
57
+
58
+ *Use the exact implementation from `cm-quality-gate` regarding the 4 corruption checks.*
59
+
60
+ ```typescript
61
+ import { test, expect } from 'vitest';
62
+ import fs from 'fs';
63
+ import path from 'path';
64
+
65
+ test('app.js does not contain catastrophic syntax corruption', () => {
66
+ // 1. Read the raw file
67
+ const content = fs.readFileSync(path.resolve(__dirname, '../public/static/app.js'), 'utf-8');
68
+
69
+ // 2. Syntax Validation (Check for broken template literals)
70
+ // ❌ Bug #1: Single-quote wrapping template string
71
+ expect(content).not.toMatch(/=\s*'[^']*\$\{t\(/);
72
+
73
+ // 3. Delimiter consistency
74
+ // ❌ Bug #4: Mismatched delimiters
75
+ expect(content).not.toMatch(/t\('[^']*\`/);
76
+ expect(content).not.toMatch(/t\(\`[^']*'\)/);
77
+
78
+ // 4. HTML structure integrity
79
+ // ❌ Bug #2: Spaces inside tags or broken closers
80
+ expect(content).not.toMatch(/<\s+[a-zA-Z]/); // e.g., "< div"
81
+ expect(content).not.toMatch(/<\/\s+[a-zA-Z]/); // e.g., "</ div"
82
+ expect(content).not.toMatch(/--\s+>/); // e.g., "text-- >"
83
+ });
84
+ ```
85
+
86
+ #### Layer 2: API Routes (`api-routes.test.ts`)
87
+ This layer ensures backend endpoints respond correctly and handle JSON properly.
88
+
89
+ *Example for a generic fetch wrapper or specific Next.js/Worker handler:*
90
+
91
+ ```typescript
92
+ import { test, expect } from 'vitest';
93
+
94
+ test('API mock test', async () => {
95
+ // Test your server handlers directly
96
+ // Ensure 200 OK for valid inputs and 400 for errors
97
+ expect(true).toBe(true);
98
+ });
99
+ ```
100
+
101
+ #### Layer 3: Business Logic (`business-logic.test.ts`)
102
+ This layer tests pure functions: calculations, validations, and data transformations.
103
+
104
+ ```typescript
105
+ import { test, expect } from 'vitest';
106
+
107
+ test('Calculates score correctly', () => {
108
+ // const result = calculateScore(input);
109
+ // expect(result).toBe(expected);
110
+ expect(true).toBe(true);
111
+ });
112
+ ```
113
+
114
+ #### Layer 4: i18n Synchronization (`i18n-sync.test.ts`)
115
+ This layer guarantees that language files are complete and identical in structure.
116
+
117
+ ```typescript
118
+ import { test, expect } from 'vitest';
119
+ import fs from 'fs';
120
+ import path from 'path';
121
+
122
+ test('i18n files have identical key counts', () => {
123
+ const langDir = path.resolve(__dirname, '../public/static/i18n');
124
+ const langs = ['vi.json', 'en.json', 'th.json', 'ph.json'];
125
+
126
+ const countKeys = (obj: any): number => {
127
+ let count = 0;
128
+ for (const k in obj) {
129
+ if (typeof obj[k] === 'object' && obj[k] !== null) {
130
+ count += countKeys(obj[k]);
131
+ } else {
132
+ count++;
133
+ }
134
+ }
135
+ return count;
136
+ };
137
+
138
+ let baseCount = -1;
139
+ for (const file of langs) {
140
+ if (!fs.existsSync(path.join(langDir, file))) continue;
141
+
142
+ const data = JSON.parse(fs.readFileSync(path.join(langDir, file), 'utf-8'));
143
+ const count = countKeys(data);
144
+
145
+ if (baseCount === -1) {
146
+ baseCount = count;
147
+ } else {
148
+ expect(count, `File ${file} has a different key count`).toBe(baseCount);
149
+ }
150
+ }
151
+ });
152
+ ```
153
+
154
+ #### Layer 5: Security Scan (`security-scan.test.ts`)
155
+ This layer prevents secrets from being committed to the repository. Powered by `cm-secret-shield` patterns.
156
+
157
+ ```typescript
158
+ import { test, expect } from 'vitest';
159
+ import fs from 'fs';
160
+ import { execSync } from 'child_process';
161
+
162
+ test('no secret files tracked by git', () => {
163
+ const tracked = execSync('git ls-files', { encoding: 'utf-8' });
164
+ const badFiles = ['.env', '.dev.vars', '.env.local', '.env.production'];
165
+ const found = badFiles.filter(f => tracked.split('\n').includes(f));
166
+ expect(found, `Secret files tracked: ${found.join(', ')}`).toEqual([]);
167
+ });
168
+
169
+ test('.gitignore contains required security patterns', () => {
170
+ const gitignore = fs.readFileSync('.gitignore', 'utf-8');
171
+ expect(gitignore).toContain('.env');
172
+ expect(gitignore).toContain('.dev.vars');
173
+ });
174
+
175
+ test('no hardcoded secrets in source files', () => {
176
+ const dangerousPatterns = [
177
+ /SERVICE_KEY\s*[=:]\s*['"][a-zA-Z0-9/+=]{20,}/g,
178
+ /PRIVATE_KEY\s*[=:]\s*['"][a-zA-Z0-9/+=]{20,}/g,
179
+ /-----BEGIN.*PRIVATE KEY-----/g,
180
+ ];
181
+ const srcDir = 'src';
182
+ if (!fs.existsSync(srcDir)) return;
183
+ const files = fs.readdirSync(srcDir).filter(f => f.endsWith('.ts') || f.endsWith('.js'));
184
+ for (const file of files) {
185
+ const content = fs.readFileSync(`${srcDir}/${file}`, 'utf-8');
186
+ for (const pattern of dangerousPatterns) {
187
+ expect(content, `${file} contains potential secret`).not.toMatch(pattern);
188
+ }
189
+ }
190
+ });
191
+ ```
192
+
193
+ ### Phase 3: Script Wiring
194
+
195
+ Wire these tests into `package.json` to make them easily executable by CI or other skills.
196
+
197
+ ```json
198
+ {
199
+ "scripts": {
200
+ "test": "vitest",
201
+ "test:gate": "vitest run --reporter=verbose",
202
+ "test:security": "snyk test && aikido-api-client scan-release $npm_package_name $(git rev-parse HEAD) --minimum-severity-level=HIGH",
203
+ "test:watch": "vitest watch"
204
+ }
205
+ }
206
+ ```
207
+
208
+ > **Security Gate Check:** The `test:security` script runs the Snyk dependency check and the Aikido release scan in parallel. See `cm-security-gate` for advanced SAST/IaC flags.
209
+
210
+ ### Phase 4: Secret Hygiene and Ignore Configuration
211
+
212
+ **NEVER commit `.env` or `.dev.vars`.** Ensure tests do not expose actual production secrets.
213
+
214
+ 1. **Check `.gitignore`:**
215
+ ```bash
216
+ grep -E "node_modules|\.env|\.dev\.vars" .gitignore
217
+ # Must exist, if not, add them.
218
+ ```
219
+ 2. **Define Mock Env:**
220
+ Create a `.env.test` file (this CAN be committed) with safe, mock values if needed by the test environment.
221
+
222
+ ### Phase 5: Verification
223
+
224
+ Run the test gate to prove it works before declaring the task complete.
225
+
226
+ ```bash
227
+ npm run test:gate
228
+ ```
229
+
230
+ ## Integration with Other Skills
231
+
232
+ | Skill | Relationship |
233
+ |---|---|
234
+ | `cm-safe-deploy` | `test:gate` is Gate 2 in the safe deploy pipeline. |
235
+ | `cm-project-bootstrap` | Should invoke `cm-test-gate` during Phase 7 (Infrastructure Setup). |
236
+ | `cm-safe-i18n` | Relies on the i18n tests set up in Phase 2, Layer 4. |
237
+ | `cm-secret-shield` | Layer 5 security scan uses Secret Shield patterns. |
238
+
239
+ ## Red Flags - STOP and Fix
240
+
241
+ - Setting up tests but not creating the `test:gate` run script.
242
+ - Combining all tests into one massive `app.test.js` file.
243
+ - Skipping the `frontend-safety.test.ts` layer for SPA/monolith projects.
244
+ - Using real production database credentials in the test setup.
245
+ - Ignoring test failures and proceeding anyway.
@@ -1,245 +1,26 @@
1
1
  ---
2
2
  name: cm-test-gate
3
- description: Complete guide to setting up a reliable test gate for any project — covers stack detection, 4 core test files, script wiring, secret hygiene, and Cloudflare Workers/Pages patterns. Use when starting a new project, adding CI to an existing one, or when "tests pass but production breaks." Companion to cm-safe-deploy and cm-project-bootstrap.
3
+ description: "[Deprecated] quality gate now covers tests + canary. Use `cm-quality-gate` instead."
4
+ deprecated: true
5
+ merged_into: cm-quality-gate
4
6
  ---
5
7
 
6
- # cm-test-gate: Multi-Layer Test Gate Setup
8
+ # cm-test-gate Deprecated
7
9
 
8
- ## Overview
10
+ > ⚠️ This skill is deprecated as of CodyMaster v6.0.0 and will be removed in v6.1.0.
11
+ >
12
+ > **Use `cm-quality-gate` instead.** quality gate now covers tests + canary.
13
+ >
14
+ > See [docs/migration-v2.md](../../docs/migration-v2.md) for the full mapping.
9
15
 
10
- A deployment process without a test gate is just shipping code and praying. The `test:gate` script is your first line of defense before deployment. A test gate MUST verify four things: frontend component safety, backend API behavior, core business logic, and i18n synchronization.
16
+ The original content is preserved at [SKILL.archive.md](SKILL.archive.md) for reference.
11
17
 
12
- **Core assumption:** The most dangerous errors are syntax flaws, variable shadowing, or import failures that tests often skip if they only check logic.
13
-
14
- **Violating the letter of this process is violating the spirit of quality engineering.**
15
-
16
- ## The Protocol
17
-
18
- When setting up a test gate for a project, follow these 5 phases in order.
19
-
20
- ### Phase 1: Stack Detection and Environment Setup
21
-
22
- **Goal:** Identify the framework and install the correct testing dependencies.
23
-
24
- 1. **Detect Stack:**
25
- - Check `package.json` for framework (React, Vue, Svelte, static HTML) and build tool (Vite, Next.js).
26
- - Check for `wrangler.json(c)` (Cloudflare Workers/Pages).
27
- - Check for Tailwind, PostCSS, or specific UI libraries.
28
-
29
- 2. **Install Dependencies (Example: Vite/Vitest):**
30
- ```bash
31
- # Install vitest and related tools
32
- npm install -D vitest jsdom @testing-library/react @testing-library/jest-dom
33
- # (Adjust based on framework: e.g., @testing-library/svelte)
34
- ```
35
-
36
- 3. **Configure File:**
37
- - Create `vitest.config.ts` (or `.js`):
38
- ```typescript
39
- import { defineConfig } from 'vitest/config'
40
- // Import framework plugin (e.g., react(), svelte())
41
-
42
- export default defineConfig({
43
- test: {
44
- environment: 'jsdom',
45
- globals: true,
46
- setupFiles: ['./test/setup.ts'], // Optional
47
- },
48
- })
49
- ```
50
-
51
- ### Phase 2: The 4 Core Test Files
52
-
53
- A complete `test:gate` must cover four distinct layers. Do not combine these files.
54
-
55
- #### Layer 1: Frontend Safety (`frontend-safety.test.ts`)
56
- This layer prevents white screens and catastrophic syntax errors in the browser. Emphasize parsing and template rendering over logical assertions.
57
-
58
- *Use the exact implementation from `cm-quality-gate` regarding the 4 corruption checks.*
59
-
60
- ```typescript
61
- import { test, expect } from 'vitest';
62
- import fs from 'fs';
63
- import path from 'path';
64
-
65
- test('app.js does not contain catastrophic syntax corruption', () => {
66
- // 1. Read the raw file
67
- const content = fs.readFileSync(path.resolve(__dirname, '../public/static/app.js'), 'utf-8');
68
-
69
- // 2. Syntax Validation (Check for broken template literals)
70
- // ❌ Bug #1: Single-quote wrapping template string
71
- expect(content).not.toMatch(/=\s*'[^']*\$\{t\(/);
72
-
73
- // 3. Delimiter consistency
74
- // ❌ Bug #4: Mismatched delimiters
75
- expect(content).not.toMatch(/t\('[^']*\`/);
76
- expect(content).not.toMatch(/t\(\`[^']*'\)/);
77
-
78
- // 4. HTML structure integrity
79
- // ❌ Bug #2: Spaces inside tags or broken closers
80
- expect(content).not.toMatch(/<\s+[a-zA-Z]/); // e.g., "< div"
81
- expect(content).not.toMatch(/<\/\s+[a-zA-Z]/); // e.g., "</ div"
82
- expect(content).not.toMatch(/--\s+>/); // e.g., "text-- >"
83
- });
84
- ```
85
-
86
- #### Layer 2: API Routes (`api-routes.test.ts`)
87
- This layer ensures backend endpoints respond correctly and handle JSON properly.
88
-
89
- *Example for a generic fetch wrapper or specific Next.js/Worker handler:*
90
-
91
- ```typescript
92
- import { test, expect } from 'vitest';
93
-
94
- test('API mock test', async () => {
95
- // Test your server handlers directly
96
- // Ensure 200 OK for valid inputs and 400 for errors
97
- expect(true).toBe(true);
98
- });
99
- ```
100
-
101
- #### Layer 3: Business Logic (`business-logic.test.ts`)
102
- This layer tests pure functions: calculations, validations, and data transformations.
103
-
104
- ```typescript
105
- import { test, expect } from 'vitest';
106
-
107
- test('Calculates score correctly', () => {
108
- // const result = calculateScore(input);
109
- // expect(result).toBe(expected);
110
- expect(true).toBe(true);
111
- });
112
- ```
113
-
114
- #### Layer 4: i18n Synchronization (`i18n-sync.test.ts`)
115
- This layer guarantees that language files are complete and identical in structure.
116
-
117
- ```typescript
118
- import { test, expect } from 'vitest';
119
- import fs from 'fs';
120
- import path from 'path';
121
-
122
- test('i18n files have identical key counts', () => {
123
- const langDir = path.resolve(__dirname, '../public/static/i18n');
124
- const langs = ['vi.json', 'en.json', 'th.json', 'ph.json'];
125
-
126
- const countKeys = (obj: any): number => {
127
- let count = 0;
128
- for (const k in obj) {
129
- if (typeof obj[k] === 'object' && obj[k] !== null) {
130
- count += countKeys(obj[k]);
131
- } else {
132
- count++;
133
- }
134
- }
135
- return count;
136
- };
137
-
138
- let baseCount = -1;
139
- for (const file of langs) {
140
- if (!fs.existsSync(path.join(langDir, file))) continue;
141
-
142
- const data = JSON.parse(fs.readFileSync(path.join(langDir, file), 'utf-8'));
143
- const count = countKeys(data);
144
-
145
- if (baseCount === -1) {
146
- baseCount = count;
147
- } else {
148
- expect(count, `File ${file} has a different key count`).toBe(baseCount);
149
- }
150
- }
151
- });
152
- ```
153
-
154
- #### Layer 5: Security Scan (`security-scan.test.ts`)
155
- This layer prevents secrets from being committed to the repository. Powered by `cm-secret-shield` patterns.
156
-
157
- ```typescript
158
- import { test, expect } from 'vitest';
159
- import fs from 'fs';
160
- import { execSync } from 'child_process';
161
-
162
- test('no secret files tracked by git', () => {
163
- const tracked = execSync('git ls-files', { encoding: 'utf-8' });
164
- const badFiles = ['.env', '.dev.vars', '.env.local', '.env.production'];
165
- const found = badFiles.filter(f => tracked.split('\n').includes(f));
166
- expect(found, `Secret files tracked: ${found.join(', ')}`).toEqual([]);
167
- });
168
-
169
- test('.gitignore contains required security patterns', () => {
170
- const gitignore = fs.readFileSync('.gitignore', 'utf-8');
171
- expect(gitignore).toContain('.env');
172
- expect(gitignore).toContain('.dev.vars');
173
- });
174
-
175
- test('no hardcoded secrets in source files', () => {
176
- const dangerousPatterns = [
177
- /SERVICE_KEY\s*[=:]\s*['"][a-zA-Z0-9/+=]{20,}/g,
178
- /PRIVATE_KEY\s*[=:]\s*['"][a-zA-Z0-9/+=]{20,}/g,
179
- /-----BEGIN.*PRIVATE KEY-----/g,
180
- ];
181
- const srcDir = 'src';
182
- if (!fs.existsSync(srcDir)) return;
183
- const files = fs.readdirSync(srcDir).filter(f => f.endsWith('.ts') || f.endsWith('.js'));
184
- for (const file of files) {
185
- const content = fs.readFileSync(`${srcDir}/${file}`, 'utf-8');
186
- for (const pattern of dangerousPatterns) {
187
- expect(content, `${file} contains potential secret`).not.toMatch(pattern);
188
- }
189
- }
190
- });
191
- ```
192
-
193
- ### Phase 3: Script Wiring
194
-
195
- Wire these tests into `package.json` to make them easily executable by CI or other skills.
196
-
197
- ```json
198
- {
199
- "scripts": {
200
- "test": "vitest",
201
- "test:gate": "vitest run --reporter=verbose",
202
- "test:security": "snyk test && aikido-api-client scan-release $npm_package_name $(git rev-parse HEAD) --minimum-severity-level=HIGH",
203
- "test:watch": "vitest watch"
204
- }
205
- }
206
- ```
207
-
208
- > **Security Gate Check:** The `test:security` script runs the Snyk dependency check and the Aikido release scan in parallel. See `cm-security-gate` for advanced SAST/IaC flags.
209
-
210
- ### Phase 4: Secret Hygiene and Ignore Configuration
211
-
212
- **NEVER commit `.env` or `.dev.vars`.** Ensure tests do not expose actual production secrets.
213
-
214
- 1. **Check `.gitignore`:**
215
- ```bash
216
- grep -E "node_modules|\.env|\.dev\.vars" .gitignore
217
- # Must exist, if not, add them.
218
- ```
219
- 2. **Define Mock Env:**
220
- Create a `.env.test` file (this CAN be committed) with safe, mock values if needed by the test environment.
221
-
222
- ### Phase 5: Verification
223
-
224
- Run the test gate to prove it works before declaring the task complete.
18
+ ## Migration
225
19
 
226
20
  ```bash
227
- npm run test:gate
21
+ # Old: cm <use this skill>
22
+ # New (v6.0+): cm quality-gate <equivalent action>
228
23
  ```
229
24
 
230
- ## Integration with Other Skills
231
-
232
- | Skill | Relationship |
233
- |---|---|
234
- | `cm-safe-deploy` | `test:gate` is Gate 2 in the safe deploy pipeline. |
235
- | `cm-project-bootstrap` | Should invoke `cm-test-gate` during Phase 7 (Infrastructure Setup). |
236
- | `cm-safe-i18n` | Relies on the i18n tests set up in Phase 2, Layer 4. |
237
- | `cm-secret-shield` | Layer 5 security scan uses Secret Shield patterns. |
238
-
239
- ## Red Flags - STOP and Fix
240
-
241
- - Setting up tests but not creating the `test:gate` run script.
242
- - Combining all tests into one massive `app.test.js` file.
243
- - Skipping the `frontend-safety.test.ts` layer for SPA/monolith projects.
244
- - Using real production database credentials in the test setup.
245
- - Ignoring test failures and proceeding anyway.
25
+ If you depend on a capability that didn't carry over, please file an issue:
26
+ https://github.com/tody-agent/codymaster/issues