@coralai/sps-cli 0.55.13 → 0.56.1

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 (437) hide show
  1. package/dist/commands/cardMarkComplete.d.ts.map +1 -1
  2. package/dist/commands/cardMarkComplete.js +6 -3
  3. package/dist/commands/cardMarkComplete.js.map +1 -1
  4. package/dist/commands/projectInit.d.ts +18 -16
  5. package/dist/commands/projectInit.d.ts.map +1 -1
  6. package/dist/commands/projectInit.js +59 -186
  7. package/dist/commands/projectInit.js.map +1 -1
  8. package/dist/commands/skillCommand.js +7 -4
  9. package/dist/commands/skillCommand.js.map +1 -1
  10. package/dist/commands/tick.d.ts +2 -20
  11. package/dist/commands/tick.d.ts.map +1 -1
  12. package/dist/commands/tick.js +58 -1
  13. package/dist/commands/tick.js.map +1 -1
  14. package/dist/console/index.d.ts.map +1 -1
  15. package/dist/console/index.js +4 -0
  16. package/dist/console/index.js.map +1 -1
  17. package/dist/console/routes/chat.d.ts.map +1 -1
  18. package/dist/console/routes/chat.js +211 -6
  19. package/dist/console/routes/chat.js.map +1 -1
  20. package/dist/console/routes/projects.d.ts +0 -6
  21. package/dist/console/routes/projects.d.ts.map +1 -1
  22. package/dist/console/routes/projects.js +11 -2
  23. package/dist/console/routes/projects.js.map +1 -1
  24. package/dist/console/routes/providers.d.ts +10 -0
  25. package/dist/console/routes/providers.d.ts.map +1 -0
  26. package/dist/console/routes/providers.js +63 -0
  27. package/dist/console/routes/providers.js.map +1 -0
  28. package/dist/console/routes/smartarrange.d.ts +4 -0
  29. package/dist/console/routes/smartarrange.d.ts.map +1 -0
  30. package/dist/console/routes/smartarrange.js +107 -0
  31. package/dist/console/routes/smartarrange.js.map +1 -0
  32. package/dist/console/routes/system.d.ts.map +1 -1
  33. package/dist/console/routes/system.js +28 -0
  34. package/dist/console/routes/system.js.map +1 -1
  35. package/dist/console/routes/workers.d.ts.map +1 -1
  36. package/dist/console/routes/workers.js +36 -4
  37. package/dist/console/routes/workers.js.map +1 -1
  38. package/dist/console-assets/assets/index-CWkYVI5d.js +600 -0
  39. package/dist/console-assets/assets/index-CnUBHNsN.css +10 -0
  40. package/dist/console-assets/index.html +2 -2
  41. package/dist/core/agents/AcpBackend.d.ts +24 -0
  42. package/dist/core/agents/AcpBackend.d.ts.map +1 -0
  43. package/dist/core/agents/AcpBackend.js +86 -0
  44. package/dist/core/agents/AcpBackend.js.map +1 -0
  45. package/dist/core/agents/AgentBackend.d.ts +53 -0
  46. package/dist/core/agents/AgentBackend.d.ts.map +1 -0
  47. package/dist/core/agents/AgentBackend.js +18 -0
  48. package/dist/core/agents/AgentBackend.js.map +1 -0
  49. package/dist/core/agents/ClaudeAcpBackend.d.ts +13 -0
  50. package/dist/core/agents/ClaudeAcpBackend.d.ts.map +1 -0
  51. package/dist/core/agents/ClaudeAcpBackend.js +14 -0
  52. package/dist/core/agents/ClaudeAcpBackend.js.map +1 -0
  53. package/dist/core/agents/ClaudeSdkBackend.d.ts +26 -0
  54. package/dist/core/agents/ClaudeSdkBackend.d.ts.map +1 -0
  55. package/dist/core/agents/ClaudeSdkBackend.js +102 -0
  56. package/dist/core/agents/ClaudeSdkBackend.js.map +1 -0
  57. package/dist/core/agents/CodexAppServerBackend.d.ts +33 -0
  58. package/dist/core/agents/CodexAppServerBackend.d.ts.map +1 -0
  59. package/dist/core/agents/CodexAppServerBackend.js +168 -0
  60. package/dist/core/agents/CodexAppServerBackend.js.map +1 -0
  61. package/dist/core/agents/OpenAiAgentBackend.d.ts +39 -0
  62. package/dist/core/agents/OpenAiAgentBackend.d.ts.map +1 -0
  63. package/dist/core/agents/OpenAiAgentBackend.js +132 -0
  64. package/dist/core/agents/OpenAiAgentBackend.js.map +1 -0
  65. package/dist/core/agents/agentsMd.d.ts +2 -0
  66. package/dist/core/agents/agentsMd.d.ts.map +1 -0
  67. package/dist/core/agents/agentsMd.js +22 -0
  68. package/dist/core/agents/agentsMd.js.map +1 -0
  69. package/dist/core/agents/localTracing.d.ts +3 -0
  70. package/dist/core/agents/localTracing.d.ts.map +1 -0
  71. package/dist/core/agents/localTracing.js +42 -0
  72. package/dist/core/agents/localTracing.js.map +1 -0
  73. package/dist/core/agents/resolveBackend.d.ts +26 -0
  74. package/dist/core/agents/resolveBackend.d.ts.map +1 -0
  75. package/dist/core/agents/resolveBackend.js +27 -0
  76. package/dist/core/agents/resolveBackend.js.map +1 -0
  77. package/dist/core/agents/workerOutputSink.d.ts +4 -0
  78. package/dist/core/agents/workerOutputSink.d.ts.map +1 -0
  79. package/dist/core/agents/workerOutputSink.js +39 -0
  80. package/dist/core/agents/workerOutputSink.js.map +1 -0
  81. package/dist/core/config.d.ts +6 -0
  82. package/dist/core/config.d.ts.map +1 -1
  83. package/dist/core/config.js +4 -0
  84. package/dist/core/config.js.map +1 -1
  85. package/dist/core/intel/RuntimeSession.d.ts +16 -0
  86. package/dist/core/intel/RuntimeSession.d.ts.map +1 -0
  87. package/dist/core/intel/RuntimeSession.js +89 -0
  88. package/dist/core/intel/RuntimeSession.js.map +1 -0
  89. package/dist/core/intel/agentsConfig.d.ts +20 -0
  90. package/dist/core/intel/agentsConfig.d.ts.map +1 -0
  91. package/dist/core/intel/agentsConfig.js +68 -0
  92. package/dist/core/intel/agentsConfig.js.map +1 -0
  93. package/dist/core/intel/planStore.d.ts +23 -0
  94. package/dist/core/intel/planStore.d.ts.map +1 -0
  95. package/dist/core/intel/planStore.js +67 -0
  96. package/dist/core/intel/planStore.js.map +1 -0
  97. package/dist/core/intel/types.d.ts +86 -0
  98. package/dist/core/intel/types.d.ts.map +1 -0
  99. package/dist/core/intel/types.js +8 -0
  100. package/dist/core/intel/types.js.map +1 -0
  101. package/dist/core/memoryIngest.d.ts +18 -0
  102. package/dist/core/memoryIngest.d.ts.map +1 -0
  103. package/dist/core/memoryIngest.js +56 -0
  104. package/dist/core/memoryIngest.js.map +1 -0
  105. package/dist/core/memoryProvider.d.ts +63 -0
  106. package/dist/core/memoryProvider.d.ts.map +1 -0
  107. package/dist/core/memoryProvider.js +205 -0
  108. package/dist/core/memoryProvider.js.map +1 -0
  109. package/dist/core/skillStore.d.ts.map +1 -1
  110. package/dist/core/skillStore.js +2 -1
  111. package/dist/core/skillStore.js.map +1 -1
  112. package/dist/core/skills/SkillsManager.d.ts +38 -0
  113. package/dist/core/skills/SkillsManager.d.ts.map +1 -0
  114. package/dist/core/skills/SkillsManager.js +231 -0
  115. package/dist/core/skills/SkillsManager.js.map +1 -0
  116. package/dist/core/skills/distribution.d.ts +64 -0
  117. package/dist/core/skills/distribution.d.ts.map +1 -0
  118. package/dist/core/skills/distribution.js +269 -0
  119. package/dist/core/skills/distribution.js.map +1 -0
  120. package/dist/core/skills/index.d.ts +13 -0
  121. package/dist/core/skills/index.d.ts.map +1 -0
  122. package/dist/core/skills/index.js +13 -0
  123. package/dist/core/skills/index.js.map +1 -0
  124. package/dist/core/skills/types.d.ts +44 -0
  125. package/dist/core/skills/types.d.ts.map +1 -0
  126. package/dist/core/skills/types.js +9 -0
  127. package/dist/core/skills/types.js.map +1 -0
  128. package/dist/core/taskPrompts.d.ts +0 -12
  129. package/dist/core/taskPrompts.d.ts.map +1 -1
  130. package/dist/core/taskPrompts.js +0 -14
  131. package/dist/core/taskPrompts.js.map +1 -1
  132. package/dist/core/transcriptIngest.d.ts +37 -0
  133. package/dist/core/transcriptIngest.d.ts.map +1 -0
  134. package/dist/core/transcriptIngest.js +137 -0
  135. package/dist/core/transcriptIngest.js.map +1 -0
  136. package/dist/core/wiki/types.d.ts +282 -745
  137. package/dist/core/wiki/types.d.ts.map +1 -1
  138. package/dist/core/wiki/types.js +1 -1
  139. package/dist/core/wiki/types.js.map +1 -1
  140. package/dist/daemon/daemonClient.d.ts +6 -0
  141. package/dist/daemon/daemonClient.d.ts.map +1 -1
  142. package/dist/daemon/daemonClient.js.map +1 -1
  143. package/dist/daemon/sessionDaemon.d.ts.map +1 -1
  144. package/dist/daemon/sessionDaemon.js.map +1 -1
  145. package/dist/engines/SmartArrangeEngine.d.ts +75 -0
  146. package/dist/engines/SmartArrangeEngine.d.ts.map +1 -0
  147. package/dist/engines/SmartArrangeEngine.js +112 -0
  148. package/dist/engines/SmartArrangeEngine.js.map +1 -0
  149. package/dist/engines/StageEngine.d.ts +3 -17
  150. package/dist/engines/StageEngine.d.ts.map +1 -1
  151. package/dist/engines/StageEngine.js +13 -91
  152. package/dist/engines/StageEngine.js.map +1 -1
  153. package/dist/engines/smartarrange/AcpWorkerExec.d.ts +35 -0
  154. package/dist/engines/smartarrange/AcpWorkerExec.d.ts.map +1 -0
  155. package/dist/engines/smartarrange/AcpWorkerExec.js +71 -0
  156. package/dist/engines/smartarrange/AcpWorkerExec.js.map +1 -0
  157. package/dist/engines/smartarrange/cardSink.d.ts +29 -0
  158. package/dist/engines/smartarrange/cardSink.d.ts.map +1 -0
  159. package/dist/engines/smartarrange/cardSink.js +43 -0
  160. package/dist/engines/smartarrange/cardSink.js.map +1 -0
  161. package/dist/engines/smartarrange/runner.d.ts +24 -0
  162. package/dist/engines/smartarrange/runner.d.ts.map +1 -0
  163. package/dist/engines/smartarrange/runner.js +116 -0
  164. package/dist/engines/smartarrange/runner.js.map +1 -0
  165. package/dist/engines/smartarrange/screenshot.d.ts +5 -0
  166. package/dist/engines/smartarrange/screenshot.d.ts.map +1 -0
  167. package/dist/engines/smartarrange/screenshot.js +117 -0
  168. package/dist/engines/smartarrange/screenshot.js.map +1 -0
  169. package/dist/main.js +127 -92
  170. package/dist/main.js.map +1 -1
  171. package/dist/manager/worker-manager-impl.d.ts.map +1 -1
  172. package/dist/manager/worker-manager-impl.js +7 -0
  173. package/dist/manager/worker-manager-impl.js.map +1 -1
  174. package/dist/providers/ACPWorkerRuntime.d.ts +2 -0
  175. package/dist/providers/ACPWorkerRuntime.d.ts.map +1 -1
  176. package/dist/providers/ACPWorkerRuntime.js +1 -0
  177. package/dist/providers/ACPWorkerRuntime.js.map +1 -1
  178. package/dist/providers/LLMClient.d.ts +32 -0
  179. package/dist/providers/LLMClient.d.ts.map +1 -0
  180. package/dist/providers/LLMClient.js +108 -0
  181. package/dist/providers/LLMClient.js.map +1 -0
  182. package/dist/providers/MarkdownTaskBackend.d.ts.map +1 -1
  183. package/dist/providers/MarkdownTaskBackend.js +3 -2
  184. package/dist/providers/MarkdownTaskBackend.js.map +1 -1
  185. package/dist/providers/llm/chatTools.d.ts +11 -0
  186. package/dist/providers/llm/chatTools.d.ts.map +1 -0
  187. package/dist/providers/llm/chatTools.js +57 -0
  188. package/dist/providers/llm/chatTools.js.map +1 -0
  189. package/dist/providers/llm/codexAuth.d.ts +8 -0
  190. package/dist/providers/llm/codexAuth.d.ts.map +1 -0
  191. package/dist/providers/llm/codexAuth.js +57 -0
  192. package/dist/providers/llm/codexAuth.js.map +1 -0
  193. package/dist/providers/llm/codexModel.d.ts +14 -0
  194. package/dist/providers/llm/codexModel.d.ts.map +1 -0
  195. package/dist/providers/llm/codexModel.js +96 -0
  196. package/dist/providers/llm/codexModel.js.map +1 -0
  197. package/dist/providers/llm/localSubscription.d.ts +15 -0
  198. package/dist/providers/llm/localSubscription.d.ts.map +1 -0
  199. package/dist/providers/llm/localSubscription.js +66 -0
  200. package/dist/providers/llm/localSubscription.js.map +1 -0
  201. package/dist/providers/llm/modelFactory.d.ts +14 -0
  202. package/dist/providers/llm/modelFactory.d.ts.map +1 -0
  203. package/dist/providers/llm/modelFactory.js +22 -0
  204. package/dist/providers/llm/modelFactory.js.map +1 -0
  205. package/dist/providers/llm/monitorSkills.d.ts +6 -0
  206. package/dist/providers/llm/monitorSkills.d.ts.map +1 -0
  207. package/dist/providers/llm/monitorSkills.js +37 -0
  208. package/dist/providers/llm/monitorSkills.js.map +1 -0
  209. package/dist/providers/llm/probeTools.d.ts +7 -0
  210. package/dist/providers/llm/probeTools.d.ts.map +1 -0
  211. package/dist/providers/llm/probeTools.js +84 -0
  212. package/dist/providers/llm/probeTools.js.map +1 -0
  213. package/dist/providers/llm/providers.d.ts +26 -0
  214. package/dist/providers/llm/providers.d.ts.map +1 -0
  215. package/dist/providers/llm/providers.js +68 -0
  216. package/dist/providers/llm/providers.js.map +1 -0
  217. package/dist/providers/llm/skillTools.d.ts +4 -0
  218. package/dist/providers/llm/skillTools.d.ts.map +1 -0
  219. package/dist/providers/llm/skillTools.js +42 -0
  220. package/dist/providers/llm/skillTools.js.map +1 -0
  221. package/dist/providers/llm/workerTools.d.ts +9 -0
  222. package/dist/providers/llm/workerTools.d.ts.map +1 -0
  223. package/dist/providers/llm/workerTools.js +111 -0
  224. package/dist/providers/llm/workerTools.js.map +1 -0
  225. package/dist/providers/mcp/spsMcpServer.d.ts +15 -0
  226. package/dist/providers/mcp/spsMcpServer.d.ts.map +1 -0
  227. package/dist/providers/mcp/spsMcpServer.js +67 -0
  228. package/dist/providers/mcp/spsMcpServer.js.map +1 -0
  229. package/dist/providers/mcp/spsMcpStdio.d.ts +2 -0
  230. package/dist/providers/mcp/spsMcpStdio.d.ts.map +1 -0
  231. package/dist/providers/mcp/spsMcpStdio.js +32 -0
  232. package/dist/providers/mcp/spsMcpStdio.js.map +1 -0
  233. package/dist/providers/mcp/spsMcpStdioConfig.d.ts +11 -0
  234. package/dist/providers/mcp/spsMcpStdioConfig.d.ts.map +1 -0
  235. package/dist/providers/mcp/spsMcpStdioConfig.js +19 -0
  236. package/dist/providers/mcp/spsMcpStdioConfig.js.map +1 -0
  237. package/dist/server.d.ts +23 -0
  238. package/dist/server.d.ts.map +1 -1
  239. package/dist/server.js +23 -0
  240. package/dist/server.js.map +1 -1
  241. package/dist/services/ChatService.d.ts +10 -0
  242. package/dist/services/ChatService.d.ts.map +1 -1
  243. package/dist/services/ChatService.js +2 -0
  244. package/dist/services/ChatService.js.map +1 -1
  245. package/dist/services/LogService.d.ts +1 -1
  246. package/dist/services/LogService.d.ts.map +1 -1
  247. package/dist/services/LogService.js +3 -2
  248. package/dist/services/LogService.js.map +1 -1
  249. package/dist/services/ProjectService.d.ts +12 -2
  250. package/dist/services/ProjectService.d.ts.map +1 -1
  251. package/dist/services/ProjectService.js +1 -0
  252. package/dist/services/ProjectService.js.map +1 -1
  253. package/dist/services/SkillService.js +11 -13
  254. package/dist/services/SkillService.js.map +1 -1
  255. package/dist/services/SmartArrangeService.d.ts +12 -0
  256. package/dist/services/SmartArrangeService.d.ts.map +1 -0
  257. package/dist/services/SmartArrangeService.js +37 -0
  258. package/dist/services/SmartArrangeService.js.map +1 -0
  259. package/dist/services/SystemService.d.ts +20 -0
  260. package/dist/services/SystemService.d.ts.map +1 -1
  261. package/dist/services/SystemService.js +93 -0
  262. package/dist/services/SystemService.js.map +1 -1
  263. package/dist/services/WorkerService.d.ts +8 -0
  264. package/dist/services/WorkerService.d.ts.map +1 -1
  265. package/dist/services/WorkerService.js +73 -3
  266. package/dist/services/WorkerService.js.map +1 -1
  267. package/dist/services/container.d.ts +2 -0
  268. package/dist/services/container.d.ts.map +1 -1
  269. package/dist/services/container.js +2 -0
  270. package/dist/services/container.js.map +1 -1
  271. package/dist/shared/localTime.d.ts +8 -0
  272. package/dist/shared/localTime.d.ts.map +1 -0
  273. package/dist/shared/localTime.js +11 -0
  274. package/dist/shared/localTime.js.map +1 -0
  275. package/dist/shared/runtimePaths.d.ts +1 -1
  276. package/dist/shared/runtimePaths.d.ts.map +1 -1
  277. package/dist/shared/runtimePaths.js +2 -2
  278. package/dist/shared/runtimePaths.js.map +1 -1
  279. package/dist/shared/runtimeSchemas.d.ts +74 -245
  280. package/dist/shared/runtimeSchemas.d.ts.map +1 -1
  281. package/dist/shared/runtimeSchemas.js +2 -2
  282. package/dist/shared/runtimeSchemas.js.map +1 -1
  283. package/monitor-skills/probe-playbook/SKILL.md +32 -0
  284. package/monitor-skills/visual-rubric/SKILL.md +34 -0
  285. package/package.json +8 -8
  286. package/project-template/.claude/hooks/stop.sh +3 -1
  287. package/dist/console-assets/assets/index-BvWWj69G.js +0 -557
  288. package/dist/console-assets/assets/index-Eo4PuNPl.css +0 -10
  289. package/dist/interfaces/ACPClient.d.ts +0 -107
  290. package/dist/interfaces/ACPClient.d.ts.map +0 -1
  291. package/dist/interfaces/ACPClient.js +0 -17
  292. package/dist/interfaces/ACPClient.js.map +0 -1
  293. package/dist/interfaces/AgentRuntime.d.ts +0 -40
  294. package/dist/interfaces/AgentRuntime.d.ts.map +0 -1
  295. package/dist/interfaces/AgentRuntime.js +0 -17
  296. package/dist/interfaces/AgentRuntime.js.map +0 -1
  297. package/dist/manager/agentmemory.d.ts +0 -6
  298. package/dist/manager/agentmemory.d.ts.map +0 -1
  299. package/dist/manager/agentmemory.js +0 -73
  300. package/dist/manager/agentmemory.js.map +0 -1
  301. package/dist/models/acp.d.ts +0 -64
  302. package/dist/models/acp.d.ts.map +0 -1
  303. package/dist/models/acp.js +0 -17
  304. package/dist/models/acp.js.map +0 -1
  305. package/dist/providers/LocalACPClient.d.ts +0 -27
  306. package/dist/providers/LocalACPClient.d.ts.map +0 -1
  307. package/dist/providers/LocalACPClient.js +0 -26
  308. package/dist/providers/LocalACPClient.js.map +0 -1
  309. package/dist/providers/adapters/AcpSdkAdapter.d.ts +0 -24
  310. package/dist/providers/adapters/AcpSdkAdapter.d.ts.map +0 -1
  311. package/dist/providers/adapters/AcpSdkAdapter.js +0 -439
  312. package/dist/providers/adapters/AcpSdkAdapter.js.map +0 -1
  313. package/dist/providers/adapters/acp-fs-handlers.d.ts +0 -26
  314. package/dist/providers/adapters/acp-fs-handlers.d.ts.map +0 -1
  315. package/dist/providers/adapters/acp-fs-handlers.js +0 -61
  316. package/dist/providers/adapters/acp-fs-handlers.js.map +0 -1
  317. package/dist/providers/adapters/acp-permissions.d.ts +0 -42
  318. package/dist/providers/adapters/acp-permissions.d.ts.map +0 -1
  319. package/dist/providers/adapters/acp-permissions.js +0 -76
  320. package/dist/providers/adapters/acp-permissions.js.map +0 -1
  321. package/dist/providers/adapters/acp-session-accumulator.d.ts +0 -55
  322. package/dist/providers/adapters/acp-session-accumulator.d.ts.map +0 -1
  323. package/dist/providers/adapters/acp-session-accumulator.js +0 -133
  324. package/dist/providers/adapters/acp-session-accumulator.js.map +0 -1
  325. package/dist/providers/adapters/acp-terminal-manager.d.ts +0 -56
  326. package/dist/providers/adapters/acp-terminal-manager.d.ts.map +0 -1
  327. package/dist/providers/adapters/acp-terminal-manager.js +0 -127
  328. package/dist/providers/adapters/acp-terminal-manager.js.map +0 -1
  329. package/project-template/logs/.gitkeep +0 -0
  330. package/skills/architecture-decision-records/SKILL.md +0 -207
  331. package/skills/backend/SKILL.md +0 -62
  332. package/skills/backend/references/api-design.md +0 -168
  333. package/skills/backend/references/caching.md +0 -181
  334. package/skills/backend/references/data-access.md +0 -173
  335. package/skills/backend/references/layering.md +0 -181
  336. package/skills/backend/references/observability.md +0 -190
  337. package/skills/backend/references/resilience.md +0 -201
  338. package/skills/backend/references/security.md +0 -186
  339. package/skills/backend-architect/SKILL.md +0 -119
  340. package/skills/code-reviewer/SKILL.md +0 -143
  341. package/skills/coding-standards/SKILL.md +0 -60
  342. package/skills/coding-standards/references/clean-code.md +0 -258
  343. package/skills/coding-standards/references/code-review.md +0 -192
  344. package/skills/coding-standards/references/commits-and-prs.md +0 -226
  345. package/skills/coding-standards/references/error-strategy.md +0 -193
  346. package/skills/coding-standards/references/naming.md +0 -185
  347. package/skills/coding-standards/references/tdd.md +0 -171
  348. package/skills/database/SKILL.md +0 -53
  349. package/skills/database/references/indexing.md +0 -190
  350. package/skills/database/references/migrations.md +0 -199
  351. package/skills/database/references/nosql.md +0 -185
  352. package/skills/database/references/queries.md +0 -295
  353. package/skills/database/references/scaling.md +0 -203
  354. package/skills/database/references/schema.md +0 -191
  355. package/skills/database-optimizer/SKILL.md +0 -168
  356. package/skills/debugging-workflow/SKILL.md +0 -244
  357. package/skills/dev-worker/SKILL.md +0 -40
  358. package/skills/dev-worker/references/architect.md +0 -139
  359. package/skills/dev-worker/references/backend.md +0 -163
  360. package/skills/dev-worker/references/frontend.md +0 -122
  361. package/skills/dev-worker/references/fullstack.md +0 -179
  362. package/skills/dev-worker/references/optimizer.md +0 -151
  363. package/skills/dev-worker/references/phaser.md +0 -109
  364. package/skills/dev-worker/references/prototyper.md +0 -171
  365. package/skills/dev-worker/references/reviewer.md +0 -122
  366. package/skills/dev-worker/references/security.md +0 -154
  367. package/skills/dev-worker/references/senior.md +0 -155
  368. package/skills/dev-worker/references/typescript.md +0 -65
  369. package/skills/dev-worker/references/writer.md +0 -201
  370. package/skills/devops/SKILL.md +0 -55
  371. package/skills/devops/references/ci-cd.md +0 -204
  372. package/skills/devops/references/containers.md +0 -272
  373. package/skills/devops/references/deploy.md +0 -201
  374. package/skills/devops/references/iac.md +0 -252
  375. package/skills/devops/references/observability.md +0 -228
  376. package/skills/devops/references/secrets.md +0 -178
  377. package/skills/devops-automator/SKILL.md +0 -164
  378. package/skills/frontend/SKILL.md +0 -52
  379. package/skills/frontend/references/accessibility.md +0 -222
  380. package/skills/frontend/references/components.md +0 -206
  381. package/skills/frontend/references/performance.md +0 -219
  382. package/skills/frontend/references/routing.md +0 -209
  383. package/skills/frontend/references/state.md +0 -190
  384. package/skills/frontend/references/testing.md +0 -216
  385. package/skills/frontend-developer/SKILL.md +0 -115
  386. package/skills/git-workflow/SKILL.md +0 -355
  387. package/skills/golang/SKILL.md +0 -49
  388. package/skills/golang/references/concurrency.md +0 -284
  389. package/skills/golang/references/errors.md +0 -241
  390. package/skills/golang/references/idioms.md +0 -285
  391. package/skills/golang/references/testing.md +0 -238
  392. package/skills/java/SKILL.md +0 -50
  393. package/skills/java/references/concurrency.md +0 -194
  394. package/skills/java/references/idioms.md +0 -283
  395. package/skills/java/references/testing.md +0 -228
  396. package/skills/kotlin/SKILL.md +0 -47
  397. package/skills/kotlin/references/coroutines.md +0 -240
  398. package/skills/kotlin/references/idioms.md +0 -268
  399. package/skills/kotlin/references/testing.md +0 -219
  400. package/skills/mobile/SKILL.md +0 -50
  401. package/skills/mobile/references/architecture.md +0 -204
  402. package/skills/mobile/references/navigation.md +0 -158
  403. package/skills/mobile/references/performance.md +0 -152
  404. package/skills/mobile/references/platform.md +0 -166
  405. package/skills/mobile/references/state-and-data.md +0 -174
  406. package/skills/python/SKILL.md +0 -51
  407. package/skills/python/THIRD_PARTY.md +0 -14
  408. package/skills/python/references/async.md +0 -218
  409. package/skills/python/references/error-handling.md +0 -254
  410. package/skills/python/references/idioms.md +0 -279
  411. package/skills/python/references/packaging.md +0 -233
  412. package/skills/python/references/testing.md +0 -269
  413. package/skills/python/references/typing.md +0 -292
  414. package/skills/qa-tester/SKILL.md +0 -186
  415. package/skills/rust/SKILL.md +0 -50
  416. package/skills/rust/references/async.md +0 -224
  417. package/skills/rust/references/errors.md +0 -240
  418. package/skills/rust/references/ownership.md +0 -263
  419. package/skills/rust/references/testing.md +0 -274
  420. package/skills/rust/references/traits.md +0 -250
  421. package/skills/security-engineer/SKILL.md +0 -157
  422. package/skills/sps-memory/SKILL.md +0 -213
  423. package/skills/sps-pipeline/SKILL.md +0 -476
  424. package/skills/swift/SKILL.md +0 -48
  425. package/skills/swift/references/concurrency.md +0 -280
  426. package/skills/swift/references/idioms.md +0 -334
  427. package/skills/swift/references/testing.md +0 -229
  428. package/skills/tax-worker/SKILL.md +0 -150
  429. package/skills/tax-worker/references/account-codes.md +0 -165
  430. package/skills/typescript/SKILL.md +0 -51
  431. package/skills/typescript/references/async.md +0 -241
  432. package/skills/typescript/references/errors.md +0 -208
  433. package/skills/typescript/references/idioms.md +0 -246
  434. package/skills/typescript/references/testing.md +0 -225
  435. package/skills/typescript/references/tooling.md +0 -208
  436. package/skills/typescript/references/types.md +0 -259
  437. package/skills/wiki-update/SKILL.md +0 -300
@@ -1,155 +0,0 @@
1
- ---
2
- name: senior
3
- description: Senior developer for high-quality general-purpose implementation — use when the task doesn't fit a specialized skill or spans multiple concerns
4
- ---
5
-
6
- # Role
7
-
8
- You are a senior developer. You handle any implementation task with high quality — regardless of whether it's frontend, backend, infrastructure, or a mix. Use this skill when the task doesn't clearly fit a specialized profile (frontend/backend/fullstack), or when it spans concerns that cross boundaries.
9
-
10
- Your deliverables are working code, committed and pushed, with tests.
11
-
12
- # Standards
13
-
14
- - Read and understand existing code before making changes — match the project's conventions
15
- - TypeScript strict mode if the project uses TypeScript. Match language conventions otherwise
16
- - Explicit error handling at every level — never silently swallow errors
17
- - Validate inputs at system boundaries (API endpoints, CLI arguments, file parsers)
18
- - No hardcoded secrets, URLs, or environment-specific values
19
- - Functions under 50 lines, files under 400 lines
20
- - Immutable data patterns — return new objects, don't mutate in place
21
- - Self-test all changes — run existing tests, add tests for new behavior
22
- - Conventional commits: `feat:`, `fix:`, `refactor:`, `test:`, `docs:`
23
- - When multiple valid approaches exist, choose the simplest one that meets requirements
24
- - When the task description is ambiguous, choose the most conservative interpretation and document your assumption in a code comment
25
-
26
- # Architecture
27
-
28
- Follow the project's existing architecture. If no clear structure exists, default to:
29
-
30
- ```
31
- src/
32
- ├── [feature-a]/ # Group by feature/domain
33
- │ ├── index.ts # Public API of the module
34
- │ ├── types.ts # Types for this feature
35
- │ ├── service.ts # Business logic
36
- │ └── service.test.ts # Tests
37
- ├── [feature-b]/
38
- ├── shared/ # Cross-feature utilities and types
39
- │ ├── types.ts
40
- │ └── utils.ts
41
- └── config/ # Configuration
42
- ```
43
-
44
- - Prefer feature-based organization over type-based (group by domain, not by "controllers/", "models/", "services/")
45
- - Keep related code together — a feature's types, logic, and tests live in the same directory
46
- - Extract shared code only when it's used by 3+ features
47
-
48
- # Patterns
49
-
50
- ## Error Handling
51
-
52
- ```typescript
53
- class AppError extends Error {
54
- constructor(
55
- message: string,
56
- public readonly code: string,
57
- public readonly status: number = 500,
58
- ) {
59
- super(message);
60
- this.name = 'AppError';
61
- }
62
- }
63
-
64
- function notFound(resource: string, id: string): AppError {
65
- return new AppError(`${resource} not found: ${id}`, 'NOT_FOUND', 404);
66
- }
67
-
68
- function badRequest(message: string): AppError {
69
- return new AppError(message, 'BAD_REQUEST', 400);
70
- }
71
- ```
72
-
73
- ## Configuration Loading
74
-
75
- ```typescript
76
- import { z } from 'zod';
77
-
78
- const configSchema = z.object({
79
- DATABASE_URL: z.string().url(),
80
- PORT: z.coerce.number().default(3000),
81
- NODE_ENV: z.enum(['development', 'production', 'test']).default('development'),
82
- });
83
-
84
- // Fail fast at startup if config is invalid
85
- export const config = configSchema.parse(process.env);
86
- ```
87
-
88
- ## Immutable Updates
89
-
90
- ```typescript
91
- interface State {
92
- users: User[];
93
- selectedId: string | null;
94
- }
95
-
96
- // Never mutate — always return new object
97
- function addUser(state: State, user: User): State {
98
- return { ...state, users: [...state.users, user] };
99
- }
100
-
101
- function selectUser(state: State, id: string): State {
102
- return { ...state, selectedId: id };
103
- }
104
- ```
105
-
106
- ## Safe Async Operation
107
-
108
- ```typescript
109
- async function fetchWithRetry<T>(
110
- fn: () => Promise<T>,
111
- retries: number = 3,
112
- delay: number = 1000,
113
- ): Promise<T> {
114
- for (let attempt = 1; attempt <= retries; attempt++) {
115
- try {
116
- return await fn();
117
- } catch (error) {
118
- if (attempt === retries) throw error;
119
- await new Promise(r => setTimeout(r, delay * attempt));
120
- }
121
- }
122
- throw new Error('Unreachable');
123
- }
124
- ```
125
-
126
- # Testing
127
-
128
- - Default test runner: Vitest or Jest (match project convention)
129
- - Unit tests for business logic and utilities
130
- - Integration tests for API endpoints or module boundaries
131
- - Coverage target: 80%+
132
- - Test error paths, not just happy paths
133
- - Name tests descriptively: `it('returns 404 when user does not exist')`
134
-
135
- ```typescript
136
- describe('addUser', () => {
137
- it('returns new state with user added', () => {
138
- const state: State = { users: [], selectedId: null };
139
- const user = { id: '1', name: 'Alice' };
140
- const next = addUser(state, user);
141
- expect(next.users).toHaveLength(1);
142
- expect(next.users[0]).toBe(user);
143
- expect(next).not.toBe(state); // immutable — new object
144
- });
145
- });
146
- ```
147
-
148
- # Quality Metrics
149
-
150
- - All existing tests pass after changes
151
- - New code has test coverage for critical paths
152
- - No `any` types in TypeScript code
153
- - No hardcoded values that should be configuration
154
- - Error messages are actionable (tell the user what went wrong and how to fix it)
155
- - Code matches the project's existing style and conventions
@@ -1,65 +0,0 @@
1
- ---
2
- name: typescript
3
- description: TypeScript expert with strict typing, modern patterns, and Node.js best practices
4
- ---
5
-
6
- # Role
7
-
8
- You are a TypeScript expert. You write type-safe, maintainable code following modern TypeScript idioms. You leverage the type system to catch bugs at compile time rather than runtime.
9
-
10
- # Standards
11
-
12
- - TypeScript strict mode (`"strict": true` in tsconfig)
13
- - No `any` — use `unknown` + type guards when the type is truly unknown
14
- - No type assertions (`as`) unless absolutely necessary — prefer type narrowing
15
- - Prefer `interface` for object shapes, `type` for unions/intersections/mapped types
16
- - Use `readonly` for properties that should not change after construction
17
- - Explicit return types on exported functions
18
- - No non-null assertions (`!`) — handle null/undefined explicitly
19
-
20
- # Architecture
21
-
22
- - Separate types/interfaces into dedicated files when shared across modules
23
- - Use barrel exports (`index.ts`) sparingly — only for public API surfaces
24
- - Prefer composition over inheritance
25
- - Use discriminated unions for state machines and variant types:
26
- ```typescript
27
- type Result<T> = { ok: true; value: T } | { ok: false; error: Error };
28
- ```
29
-
30
- # Patterns
31
-
32
- ## Error Handling
33
- ```typescript
34
- // Use Result types instead of throwing
35
- function parseConfig(raw: string): Result<Config> {
36
- try {
37
- const data = JSON.parse(raw);
38
- return { ok: true, value: validateConfig(data) };
39
- } catch (err) {
40
- return { ok: false, error: err instanceof Error ? err : new Error(String(err)) };
41
- }
42
- }
43
- ```
44
-
45
- ## Type Guards
46
- ```typescript
47
- function isCard(value: unknown): value is Card {
48
- return typeof value === 'object' && value !== null
49
- && 'seq' in value && 'name' in value;
50
- }
51
- ```
52
-
53
- ## Immutable Updates
54
- ```typescript
55
- // Prefer spreading over mutation
56
- const updated = { ...state, count: state.count + 1 };
57
- const filtered = items.filter(item => item.active);
58
- ```
59
-
60
- # Testing
61
-
62
- - Use vitest or Node.js built-in test runner
63
- - Test types with `expectTypeOf` (vitest) or `tsd`
64
- - Mock external dependencies at module boundaries, not deep internals
65
- - Coverage target: 80%+
@@ -1,201 +0,0 @@
1
- ---
2
- name: writer
3
- description: Technical writer for producing README files, API documentation, PRDs, architecture guides, changelogs, and developer-facing documentation
4
- ---
5
-
6
- # Role
7
-
8
- You are a technical writer. You produce clear, accurate, developer-facing documentation. Your deliverables are documentation files — README, API reference, PRD, architecture guides, CHANGELOG — committed and pushed.
9
-
10
- You write documentation that developers actually read and use. Bad documentation is a product bug.
11
-
12
- # Standards
13
-
14
- - Code examples must be correct and runnable — test them before committing
15
- - No assumption of context — every doc stands alone or links to prerequisites explicitly
16
- - Second person ("you"), present tense, active voice
17
- - One concept per section — do not combine installation, configuration, and usage into one block
18
- - Lead with outcomes: "After this guide, you will have a working API endpoint" not "This guide covers API endpoints"
19
- - Be specific about errors: "If you see `Error: ENOENT`, ensure you're in the project directory"
20
- - Cut ruthlessly — if a sentence doesn't help the reader do something or understand something, delete it
21
- - Default format: Markdown. Follow existing project documentation format if one exists
22
- - Tables for configuration options (columns: Option, Type, Default, Description)
23
- - Headings for scanability — developers scan, they don't read top to bottom
24
-
25
- # Architecture
26
-
27
- Your output goes in the project's existing doc structure, or creates one:
28
-
29
- ```
30
- docs/
31
- ├── README.md # Project overview, quick start, installation
32
- ├── api/
33
- │ └── reference.md # API endpoint reference (or openapi.yaml)
34
- ├── guides/
35
- │ ├── getting-started.md # Step-by-step first-use tutorial
36
- │ └── deployment.md # Deployment guide
37
- ├── architecture/
38
- │ └── overview.md # System architecture for contributors
39
- ├── DECISIONS.md # Architecture decisions (SPS convention)
40
- └── CHANGELOG.md # Version history (SPS convention)
41
-
42
- # Root-level files
43
- README.md # Main project README
44
- CONTRIBUTING.md # How to contribute (if open source)
45
- ```
46
-
47
- # Patterns
48
-
49
- ## README Structure
50
-
51
- ```markdown
52
- # Project Name
53
-
54
- > One-sentence description of what this does and why it matters.
55
-
56
- ## Quick Start
57
-
58
- \`\`\`bash
59
- npm install
60
- cp .env.example .env # Fill in required values
61
- npm run dev # http://localhost:3000
62
- \`\`\`
63
-
64
- ## Installation
65
-
66
- **Prerequisites**: Node.js 18+, PostgreSQL 15+
67
-
68
- \`\`\`bash
69
- npm install
70
- npm run db:migrate
71
- \`\`\`
72
-
73
- ## Configuration
74
-
75
- | Variable | Required | Default | Description |
76
- |----------|----------|---------|-------------|
77
- | `DATABASE_URL` | Yes | — | PostgreSQL connection string |
78
- | `JWT_SECRET` | Yes | — | Secret for JWT signing |
79
- | `PORT` | No | `3000` | Server listen port |
80
-
81
- ## Usage
82
-
83
- ### Create a user
84
- \`\`\`bash
85
- curl -X POST http://localhost:3000/api/users \
86
- -H "Content-Type: application/json" \
87
- -d '{"email": "user@example.com", "name": "Alice", "password": "secure123"}'
88
- \`\`\`
89
-
90
- ## API Reference
91
-
92
- See [docs/api/reference.md](docs/api/reference.md)
93
-
94
- ## Contributing
95
-
96
- See [CONTRIBUTING.md](CONTRIBUTING.md)
97
-
98
- ## License
99
-
100
- MIT
101
- ```
102
-
103
- ## API Reference Entry
104
-
105
- ```markdown
106
- ### POST /api/users
107
-
108
- Create a new user account.
109
-
110
- **Authentication**: Required (Bearer token)
111
-
112
- **Request Body**:
113
- | Field | Type | Required | Description |
114
- |-------|------|----------|-------------|
115
- | `email` | string | Yes | Valid email address |
116
- | `name` | string | Yes | 1-100 characters |
117
- | `password` | string | Yes | Minimum 8 characters |
118
-
119
- **Response** (201):
120
- \`\`\`json
121
- {
122
- "success": true,
123
- "data": {
124
- "id": "abc123",
125
- "email": "user@example.com",
126
- "name": "Alice",
127
- "createdAt": "2026-03-26T12:00:00Z"
128
- }
129
- }
130
- \`\`\`
131
-
132
- **Errors**:
133
- | Status | Code | Description |
134
- |--------|------|-------------|
135
- | 400 | VALIDATION_ERROR | Invalid input (see message for details) |
136
- | 401 | UNAUTHORIZED | Missing or invalid auth token |
137
- | 409 | CONFLICT | Email already registered |
138
- ```
139
-
140
- ## CHANGELOG Entry
141
-
142
- ```markdown
143
- ## [1.2.0] — 2026-03-26
144
-
145
- ### Added
146
- - User registration endpoint (`POST /api/users`)
147
- - Email validation with confirmation flow
148
-
149
- ### Changed
150
- - Auth middleware now returns structured error responses
151
-
152
- ### Fixed
153
- - Token expiration check was off by one hour
154
- ```
155
-
156
- ## PRD Structure
157
-
158
- ```markdown
159
- # PRD: [Feature Name]
160
-
161
- ## Problem Statement
162
- [What user problem does this solve? Who is affected?]
163
-
164
- ## Proposed Solution
165
- [High-level description of the feature]
166
-
167
- ## User Stories
168
- - As a [role], I want [action] so that [benefit]
169
- - As a [role], I want [action] so that [benefit]
170
-
171
- ## Requirements
172
- ### Functional
173
- - [Requirement 1]
174
- - [Requirement 2]
175
-
176
- ### Non-Functional
177
- - Performance: [target]
178
- - Security: [requirements]
179
-
180
- ## Out of Scope
181
- - [What this feature explicitly does NOT include]
182
-
183
- ## Success Metrics
184
- - [How to measure if this feature achieved its goal]
185
- ```
186
-
187
- # Testing
188
-
189
- - Documentation is validated through accuracy checks, not automated tests
190
- - Every code example in the docs must be runnable
191
- - Every API endpoint documented must exist in the codebase
192
- - Every configuration option documented must match the actual code defaults
193
- - Cross-reference with source code to ensure nothing is outdated
194
-
195
- # Quality Metrics
196
-
197
- - README passes the 5-second test: reader knows what this is, why they should care, and how to start
198
- - All code examples run without modification
199
- - All configuration options documented with type, default, and description
200
- - No broken links in documentation
201
- - CHANGELOG follows Keep a Changelog format
@@ -1,55 +0,0 @@
1
- ---
2
- name: devops
3
- description: DevOps end skill — CI/CD, containers, infrastructure-as-code, secrets, observability. Tool-neutral (GitHub Actions / GitLab CI / Argo / Terraform patterns). Pair with `backend`, language skills, and `coding-standards`.
4
- origin: ecc-fork + original (https://github.com/affaan-m/everything-claude-code, MIT)
5
- ---
6
-
7
- # DevOps
8
-
9
- CI/CD, containers, infra-as-code, secrets, observability. **Tool-neutral** — patterns apply across GitHub Actions / GitLab CI / CircleCI, Terraform / Pulumi / CDK, Docker / OCI, Kubernetes / ECS / Cloud Run.
10
-
11
- ## When to load
12
-
13
- - Setting up or reviewing CI/CD
14
- - Containerization, image builds, multi-stage Dockerfiles
15
- - Infrastructure-as-code changes (Terraform, Pulumi, CloudFormation, CDK)
16
- - Secret management, rotation, access control
17
- - Observability at the platform level (metrics / logs / traces collection, alerting)
18
- - Deploy strategies (blue-green, canary, progressive delivery)
19
-
20
- ## Core principles
21
-
22
- 1. **Everything as code.** Infra, CI, secret policy, dashboards, alerts — in the repo, reviewed, versioned.
23
- 2. **Immutable artifacts.** The build produces one artifact (image, binary); the same artifact promotes through envs unchanged.
24
- 3. **Dev / staging / prod parity.** Same tooling, same topology, smaller. Differences are explicit (size, scaling, data), not accidental.
25
- 4. **Automate the path to prod.** Merges to main trigger deploy (with gates); humans click "promote", not "run these commands".
26
- 5. **Ephemeral infra, persistent data.** Nodes, pods, VMs — replaceable. Data — backed up, versioned, migrated.
27
- 6. **Least privilege by default.** CI, services, humans all get scoped credentials. Root access is an event, not a default.
28
- 7. **Fast feedback.** Build < 10 min on typical change, < 3 min on type/lint. Slow CI loses its purpose.
29
- 8. **Observability before features.** You can't fix what you can't see.
30
-
31
- ## How to use references
32
-
33
- | Reference | When to load |
34
- |---|---|
35
- | [`references/ci-cd.md`](references/ci-cd.md) | Pipelines, caching, parallelism, artifacts, gates, promotion |
36
- | [`references/containers.md`](references/containers.md) | Dockerfile, multi-stage, size, rootless, base images, image signing |
37
- | [`references/iac.md`](references/iac.md) | Terraform / Pulumi / CDK — structure, state, modules, reviews |
38
- | [`references/secrets.md`](references/secrets.md) | Secret managers, rotation, access control, pre-commit scanning |
39
- | [`references/deploy.md`](references/deploy.md) | Rolling / blue-green / canary / feature flags, rollback |
40
- | [`references/observability.md`](references/observability.md) | Log/metric/trace pipelines, alerting, on-call, runbooks |
41
-
42
- ## Forbidden patterns (auto-reject)
43
-
44
- - Secrets in code / Dockerfile / CI config / `.env` in git
45
- - CI pipelines that skip tests with `|| true` / `--continue-on-error`
46
- - Pushing latest tag only (no immutable version for rollback)
47
- - `curl | bash` from the internet in Dockerfile / install script without pinning
48
- - Running containers as root without documented reason
49
- - Terraform state on a local dev machine (no remote, no locking)
50
- - Manual prod changes (clicking in a console) not followed by IaC update
51
- - Deploy scripts that don't know how to roll back
52
- - Alerts that wake someone up without a runbook
53
- - Public S3 buckets / databases without explicit review
54
- - `:latest` base image tags in prod builds
55
- - Writing logs to the container filesystem (lost on restart)
@@ -1,204 +0,0 @@
1
- # CI / CD
2
-
3
- Pipelines, caching, parallelism, artifacts, gates.
4
-
5
- ## Pipeline stages — the standard shape
6
-
7
- ```
8
- ┌──────────┐ ┌───────┐ ┌──────┐ ┌──────┐ ┌──────────┐ ┌──────────┐
9
- │ checkout │▶│ lint │▶│ test │▶│ build│▶│ scan/sign│▶│ deploy │
10
- └──────────┘ └───────┘ └──────┘ └──────┘ └──────────┘ └──────────┘
11
-
12
- └─► parallel jobs where possible
13
- ```
14
-
15
- Order matters: cheap-and-fast first (lint, typecheck). Expensive and slow last (E2E, image build). Failing lint should fail the pipeline in under a minute.
16
-
17
- ## Keep CI fast
18
-
19
- Target: **< 10 min end-to-end on a typical change**. Slow CI punishes every commit.
20
-
21
- Levers:
22
-
23
- - **Cache dependencies.** Lockfile as cache key. `actions/cache` / equivalent.
24
- - **Parallelize independent jobs.** Lint + typecheck + unit tests can all run at once.
25
- - **Shard tests.** A 10-minute test suite split into 4 shards = 2.5 min each.
26
- - **Run integration / E2E on critical paths only**, or only on main.
27
- - **Test only what changed** for monorepos. `nx affected`, `turbo run --filter`, `bazel query`.
28
-
29
- ## Cache keys
30
-
31
- ```yaml
32
- # ✅ stable, invalidates only when deps change
33
- key: "${{ runner.os }}-node-${{ hashFiles('package-lock.json') }}"
34
-
35
- # ❌ too narrow — cache misses every run
36
- key: "${{ runner.os }}-node-${{ github.sha }}"
37
-
38
- # ❌ too broad — may return incompatible cache
39
- key: "${{ runner.os }}-node"
40
- ```
41
-
42
- Cache the right things:
43
- - `node_modules` / `pip wheels` / `cargo target` / `gradle caches` — big wins.
44
- - Build output (`.next`, `dist`) if subsequent jobs use it.
45
- - Don't cache test reports or transient artifacts.
46
-
47
- ## Build artifacts, promote them
48
-
49
- Build once. The same artifact flows dev → staging → prod.
50
-
51
- ```
52
- PR: build → test (no artifact published)
53
- main: build → test → publish (publish image:sha)
54
- deploy dev: pull image:sha → deploy
55
- deploy staging: pull image:sha → deploy (same image)
56
- deploy prod: pull image:sha → deploy (same image)
57
- ```
58
-
59
- Building again per environment re-runs tests and invites "it worked in staging" surprises when the new build differs (new dependency version, timestamp).
60
-
61
- ## Artifact tagging
62
-
63
- ```
64
- image: myapp:sha-abc1234 # immutable, references a commit
65
- image: myapp:v1.2.3 # semver release
66
- image: myapp:main # mutable — latest main
67
- image: myapp:latest # mutable — last push to whatever
68
- ```
69
-
70
- Deploy by immutable tag (`sha-abc1234` or `v1.2.3`). Mutable tags (`main`, `latest`) are convenient for humans but make rollbacks ambiguous.
71
-
72
- ## Gates and approvals
73
-
74
- Autodeploy to dev. Require a check/approval for staging → prod (or for sensitive envs).
75
-
76
- ```
77
- merge to main
78
- ▶ deploy dev (auto)
79
- ▶ deploy staging (auto, smoke tests)
80
- ▶ deploy prod (manual approval)
81
- ```
82
-
83
- Manual gate is the pause for "should this actually ship now?" — release freeze, cross-team sync.
84
-
85
- ## Required status checks
86
-
87
- On the PR branch, block merge unless:
88
- - Lint / typecheck pass
89
- - Unit tests pass
90
- - Coverage above threshold (if enforced)
91
- - Review approval received
92
-
93
- Configure in the VCS (GitHub branch protection, GitLab push rules).
94
-
95
- ## Secrets in CI
96
-
97
- - **Never** store secrets in CI config files or env files checked into the repo.
98
- - CI platforms have secret stores (GitHub Secrets, GitLab Variables, environment-scoped).
99
- - Scope per environment (`PROD_DB_URL`, not a shared one).
100
- - Prefer short-lived credentials (OIDC) over long-lived keys.
101
- ```
102
- # GitHub Actions → AWS via OIDC, no AWS_ACCESS_KEY stored in GitHub
103
- permissions: { id-token: write }
104
- - uses: aws-actions/configure-aws-credentials@v4
105
- with: { role-to-assume: arn:aws:iam::...:role/github-prod }
106
- ```
107
- - Mask secrets in logs (most CI tools do this automatically).
108
-
109
- ## Supply-chain security
110
-
111
- - **Pin** third-party actions / images by SHA, not version tag.
112
- ```yaml
113
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27796261f9... # v4.0.0
114
- ```
115
- Tags are mutable; an attacker who takes over the repo can repoint a tag.
116
- - **Dependency scanning**: Dependabot / Renovate for updates; Snyk / Trivy / Grype for vulnerabilities.
117
- - **SBOM generation**: produce one per build, store it.
118
- - **Image signing**: cosign + Sigstore; verify at deploy.
119
-
120
- ## Matrix builds
121
-
122
- For multi-version / multi-OS testing:
123
-
124
- ```yaml
125
- strategy:
126
- matrix:
127
- node: [18, 20, 22]
128
- os: [ubuntu-latest, macos-latest]
129
- ```
130
-
131
- Keep matrices narrow — `3 × 2 = 6` jobs, not 30. CI-minutes add up.
132
-
133
- ## Flaky tests — triage immediately
134
-
135
- One flaky test poisons the signal.
136
-
137
- - Tag the test as flaky, move to a separate job, investigate within a week.
138
- - A test that fails intermittently is ALWAYS a bug: race condition, shared state, timing assumption. Don't accept "just retry".
139
- - Quarantine + retry is a short-term fix only. Delete the test rather than leave it quarantined forever.
140
-
141
- ## Pull-request vs. main pipelines
142
-
143
- Different triggers, often different scopes:
144
-
145
- | Trigger | Run |
146
- |---|---|
147
- | PR | Lint, typecheck, unit, key integration |
148
- | PR (target main) | + E2E happy path |
149
- | Merge to main | + build, publish artifact, deploy dev / staging |
150
- | Tag / release | + prod deploy gate |
151
- | Scheduled | + full E2E, perf tests, security scans |
152
-
153
- Don't run everything on every PR. Keep PRs fast; save heavy tests for main.
154
-
155
- ## Monorepo considerations
156
-
157
- - **Change-aware testing**: don't rebuild / test the whole monorepo if only one package changed.
158
- - **Project graph tools**: Turborepo, Nx, Bazel, Pants.
159
- - **Shared cache**: remote cache (Turbo Cloud, Nx Cloud, BuildBuddy) pays for itself on larger teams.
160
-
161
- ## Deploy previews
162
-
163
- Ephemeral environments per PR:
164
-
165
- ```
166
- PR #123 → https://pr-123.preview.myapp.com
167
- ```
168
-
169
- Great for frontend, reasonable for APIs, expensive for heavy backends. Tear down on PR close.
170
-
171
- Tools: Vercel / Netlify / Cloudflare for frontends; Render / Fly / Kubernetes preview envs / Garden / Uffizzi for full-stack.
172
-
173
- ## Concurrency control
174
-
175
- Don't let two prod deploys race:
176
-
177
- ```yaml
178
- concurrency:
179
- group: deploy-prod
180
- cancel-in-progress: false
181
- ```
182
-
183
- For PR previews, cancel old runs when a new commit arrives:
184
-
185
- ```yaml
186
- concurrency:
187
- group: pr-${{ github.ref }}
188
- cancel-in-progress: true
189
- ```
190
-
191
- ## Anti-patterns
192
-
193
- | Anti-pattern | Fix |
194
- |---|---|
195
- | `|| true` to hide test failures | Fix or delete the test |
196
- | `:latest` tag in prod deploy manifest | Immutable tag |
197
- | Deploying code untested in staging | Dev → staging → prod, same artifact |
198
- | Secrets via commits / CI log | Secret store, masked |
199
- | 40-minute CI runs on every PR | Split; run heavy tests on main |
200
- | Tests that share mutable state | Isolate / reset per test |
201
- | Action pinned by tag only | Pin by SHA |
202
- | Deploying from a dev laptop | CI-only deploy path |
203
- | No automated rollback plan | See `deploy.md` |
204
- | Ignoring flaky tests | Quarantine + fix within a week; don't normalize |