@hivehub/rulebook 5.1.2 → 5.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (406) hide show
  1. package/.claude/commands/continue.md +33 -33
  2. package/.claude/commands/ralph-config.md +112 -112
  3. package/.claude/commands/ralph-history.md +110 -110
  4. package/.claude/commands/ralph-init.md +72 -72
  5. package/.claude/commands/ralph-pause-resume.md +105 -105
  6. package/.claude/commands/ralph-run.md +101 -101
  7. package/.claude/commands/ralph-status.md +76 -76
  8. package/.claude/commands/rulebook-decision-create.md +55 -55
  9. package/.claude/commands/rulebook-decision-list.md +15 -15
  10. package/.claude/commands/rulebook-knowledge-add.md +41 -41
  11. package/.claude/commands/rulebook-knowledge-list.md +15 -15
  12. package/.claude/commands/rulebook-learn-capture.md +48 -48
  13. package/.claude/commands/rulebook-learn-list.md +13 -13
  14. package/.claude/commands/rulebook-memory-save.md +48 -48
  15. package/.claude/commands/rulebook-memory-search.md +47 -47
  16. package/.claude/commands/rulebook-task-apply.md +67 -67
  17. package/.claude/commands/rulebook-task-archive.md +94 -94
  18. package/.claude/commands/rulebook-task-create.md +93 -93
  19. package/.claude/commands/rulebook-task-list.md +42 -42
  20. package/.claude/commands/rulebook-task-show.md +52 -52
  21. package/.claude/commands/rulebook-task-validate.md +53 -53
  22. package/.claude-plugin/marketplace.json +28 -28
  23. package/.claude-plugin/plugin.json +8 -8
  24. package/README.md +4 -0
  25. package/dist/cli/commands.d.ts.map +1 -1
  26. package/dist/cli/commands.js +39 -8
  27. package/dist/cli/commands.js.map +1 -1
  28. package/dist/core/agent-template-engine.d.ts.map +1 -1
  29. package/dist/core/agent-template-engine.js +36 -30
  30. package/dist/core/agent-template-engine.js.map +1 -1
  31. package/dist/core/complexity-detector.d.ts.map +1 -1
  32. package/dist/core/complexity-detector.js +109 -29
  33. package/dist/core/complexity-detector.js.map +1 -1
  34. package/dist/core/decision-manager.d.ts.map +1 -1
  35. package/dist/core/decision-manager.js +2 -7
  36. package/dist/core/decision-manager.js.map +1 -1
  37. package/dist/core/generator.d.ts.map +1 -1
  38. package/dist/core/generator.js +28 -28
  39. package/dist/core/generator.js.map +1 -1
  40. package/dist/core/indexer/background-indexer.d.ts +1 -0
  41. package/dist/core/indexer/background-indexer.d.ts.map +1 -1
  42. package/dist/core/indexer/background-indexer.js +107 -19
  43. package/dist/core/indexer/background-indexer.js.map +1 -1
  44. package/dist/core/indexer/indexer-types.d.ts +2 -0
  45. package/dist/core/indexer/indexer-types.d.ts.map +1 -1
  46. package/dist/core/knowledge-manager.d.ts.map +1 -1
  47. package/dist/core/knowledge-manager.js +1 -1
  48. package/dist/core/knowledge-manager.js.map +1 -1
  49. package/dist/core/learn-manager.d.ts.map +1 -1
  50. package/dist/core/learn-manager.js +1 -1
  51. package/dist/core/learn-manager.js.map +1 -1
  52. package/dist/core/rule-engine.d.ts.map +1 -1
  53. package/dist/core/rule-engine.js +1 -3
  54. package/dist/core/rule-engine.js.map +1 -1
  55. package/dist/core/task-manager.d.ts.map +1 -1
  56. package/dist/core/task-manager.js +24 -24
  57. package/dist/core/task-manager.js.map +1 -1
  58. package/dist/index.js +23 -7
  59. package/dist/index.js.map +1 -1
  60. package/dist/mcp/rulebook-server.d.ts.map +1 -1
  61. package/dist/mcp/rulebook-server.js +18 -6
  62. package/dist/mcp/rulebook-server.js.map +1 -1
  63. package/dist/memory/hnsw-index.d.ts.map +1 -1
  64. package/dist/memory/hnsw-index.js +12 -4
  65. package/dist/memory/hnsw-index.js.map +1 -1
  66. package/dist/memory/memory-store.d.ts.map +1 -1
  67. package/dist/memory/memory-store.js +136 -107
  68. package/dist/memory/memory-store.js.map +1 -1
  69. package/dist/types.d.ts +7 -0
  70. package/dist/types.d.ts.map +1 -1
  71. package/package.json +22 -21
  72. package/templates/agents/accessibility-reviewer.md +43 -43
  73. package/templates/agents/api-designer.md +42 -42
  74. package/templates/agents/architect.md +51 -51
  75. package/templates/agents/build-engineer.md +36 -36
  76. package/templates/agents/code-reviewer.md +47 -47
  77. package/templates/agents/compiler/codegen-debugger.md +34 -34
  78. package/templates/agents/compiler/stdlib-engineer.md +28 -28
  79. package/templates/agents/compiler/test-coverage-guardian.md +31 -31
  80. package/templates/agents/context-intelligence.md +52 -52
  81. package/templates/agents/database-architect.md +41 -41
  82. package/templates/agents/devops-engineer.md +42 -42
  83. package/templates/agents/docs-writer.md +38 -38
  84. package/templates/agents/game-engine/cpp-core-expert.md +35 -35
  85. package/templates/agents/game-engine/render-engineer.md +22 -22
  86. package/templates/agents/game-engine/shader-engineer.md +38 -38
  87. package/templates/agents/game-engine/systems-integration.md +43 -43
  88. package/templates/agents/generic/code-reviewer.md +41 -41
  89. package/templates/agents/generic/docs-writer.md +25 -25
  90. package/templates/agents/generic/project-manager.md +36 -36
  91. package/templates/agents/generic/researcher.md +34 -34
  92. package/templates/agents/generic/test-engineer.md +41 -41
  93. package/templates/agents/i18n-engineer.md +42 -42
  94. package/templates/agents/implementer.md +42 -42
  95. package/templates/agents/migration-engineer.md +42 -42
  96. package/templates/agents/mobile/platform-specialist.md +22 -22
  97. package/templates/agents/mobile/ui-engineer.md +22 -22
  98. package/templates/agents/performance-engineer.md +49 -49
  99. package/templates/agents/refactoring-agent.md +41 -41
  100. package/templates/agents/researcher.md +38 -38
  101. package/templates/agents/security-reviewer.md +40 -40
  102. package/templates/agents/team-lead.md +37 -37
  103. package/templates/agents/tester.md +48 -48
  104. package/templates/agents/ux-reviewer.md +43 -43
  105. package/templates/agents/web-app/api-designer.md +22 -22
  106. package/templates/agents/web-app/backend-engineer.md +30 -30
  107. package/templates/agents/web-app/database-engineer.md +22 -22
  108. package/templates/agents/web-app/frontend-engineer.md +29 -29
  109. package/templates/agents/web-app/security-reviewer.md +32 -32
  110. package/templates/ci/rulebook-review.yml +26 -26
  111. package/templates/cli/AIDER.md +49 -49
  112. package/templates/cli/AMAZON_Q.md +25 -25
  113. package/templates/cli/AUGGIE.md +32 -32
  114. package/templates/cli/CLAUDE.md +117 -117
  115. package/templates/cli/CLINE.md +99 -99
  116. package/templates/cli/CODEBUDDY.md +20 -20
  117. package/templates/cli/CODEIUM.md +20 -20
  118. package/templates/cli/CODEX.md +21 -21
  119. package/templates/cli/CONTINUE.md +34 -34
  120. package/templates/cli/CURSOR_CLI.md +62 -62
  121. package/templates/cli/FACTORY.md +18 -18
  122. package/templates/cli/GEMINI.md +35 -35
  123. package/templates/cli/KILOCODE.md +18 -18
  124. package/templates/cli/OPENCODE.md +18 -18
  125. package/templates/cli/_GENERIC_TEMPLATE.md +29 -29
  126. package/templates/commands/rulebook-decision-create.md +55 -55
  127. package/templates/commands/rulebook-decision-list.md +15 -15
  128. package/templates/commands/rulebook-knowledge-add.md +41 -41
  129. package/templates/commands/rulebook-knowledge-list.md +15 -15
  130. package/templates/commands/rulebook-learn-capture.md +48 -48
  131. package/templates/commands/rulebook-learn-list.md +13 -13
  132. package/templates/commands/rulebook-memory-save.md +48 -48
  133. package/templates/commands/rulebook-memory-search.md +47 -47
  134. package/templates/commands/rulebook-task-apply.md +67 -67
  135. package/templates/commands/rulebook-task-archive.md +94 -94
  136. package/templates/commands/rulebook-task-create.md +93 -93
  137. package/templates/commands/rulebook-task-list.md +42 -42
  138. package/templates/commands/rulebook-task-show.md +52 -52
  139. package/templates/commands/rulebook-task-validate.md +53 -53
  140. package/templates/core/AGENTS_LEAN.md +25 -25
  141. package/templates/core/AGENTS_OVERRIDE.md +16 -16
  142. package/templates/core/AGENT_AUTOMATION.md +296 -296
  143. package/templates/core/DAG.md +304 -304
  144. package/templates/core/DECISIONS.md +38 -38
  145. package/templates/core/DOCUMENTATION_RULES.md +36 -36
  146. package/templates/core/KNOWLEDGE.md +49 -49
  147. package/templates/core/MULTI_AGENT.md +74 -74
  148. package/templates/core/PLANS.md +28 -28
  149. package/templates/core/QUALITY_ENFORCEMENT.md +68 -68
  150. package/templates/core/RALPH.md +471 -471
  151. package/templates/core/RULEBOOK.md +1947 -1947
  152. package/templates/core/TIER1_PROHIBITIONS.md +154 -154
  153. package/templates/core/TOKEN_OPTIMIZATION.md +49 -49
  154. package/templates/frameworks/ANGULAR.md +36 -36
  155. package/templates/frameworks/DJANGO.md +83 -83
  156. package/templates/frameworks/ELECTRON.md +147 -147
  157. package/templates/frameworks/FLASK.md +38 -38
  158. package/templates/frameworks/FLUTTER.md +55 -55
  159. package/templates/frameworks/JQUERY.md +32 -32
  160. package/templates/frameworks/LARAVEL.md +38 -38
  161. package/templates/frameworks/NESTJS.md +43 -43
  162. package/templates/frameworks/NEXTJS.md +127 -127
  163. package/templates/frameworks/NUXT.md +40 -40
  164. package/templates/frameworks/RAILS.md +66 -66
  165. package/templates/frameworks/REACT.md +38 -38
  166. package/templates/frameworks/REACT_NATIVE.md +47 -47
  167. package/templates/frameworks/SPRING.md +39 -39
  168. package/templates/frameworks/SYMFONY.md +36 -36
  169. package/templates/frameworks/VUE.md +36 -36
  170. package/templates/frameworks/ZEND.md +35 -35
  171. package/templates/git/CI_CD_PATTERNS.md +661 -661
  172. package/templates/git/GITHUB_ACTIONS.md +728 -728
  173. package/templates/git/GITLAB_CI.md +730 -730
  174. package/templates/git/GIT_WORKFLOW.md +1192 -1192
  175. package/templates/git/SECRETS_MANAGEMENT.md +585 -585
  176. package/templates/hooks/COMMIT_MSG.md +530 -530
  177. package/templates/hooks/POST_CHECKOUT.md +546 -546
  178. package/templates/hooks/PREPARE_COMMIT_MSG.md +619 -619
  179. package/templates/hooks/PRE_COMMIT.md +414 -414
  180. package/templates/hooks/PRE_PUSH.md +601 -601
  181. package/templates/ides/CONTINUE_RULES.md +16 -16
  182. package/templates/ides/COPILOT.md +37 -37
  183. package/templates/ides/COPILOT_INSTRUCTIONS.md +23 -23
  184. package/templates/ides/CURSOR.md +43 -43
  185. package/templates/ides/GEMINI_RULES.md +17 -17
  186. package/templates/ides/JETBRAINS_AI.md +35 -35
  187. package/templates/ides/REPLIT.md +36 -36
  188. package/templates/ides/TABNINE.md +29 -29
  189. package/templates/ides/VSCODE.md +40 -40
  190. package/templates/ides/WINDSURF.md +36 -36
  191. package/templates/ides/WINDSURF_RULES.md +14 -14
  192. package/templates/ides/ZED.md +32 -32
  193. package/templates/ides/cursor-mdc/go.mdc +24 -24
  194. package/templates/ides/cursor-mdc/python.mdc +24 -24
  195. package/templates/ides/cursor-mdc/quality.mdc +25 -25
  196. package/templates/ides/cursor-mdc/ralph.mdc +39 -39
  197. package/templates/ides/cursor-mdc/rulebook.mdc +38 -38
  198. package/templates/ides/cursor-mdc/rust.mdc +24 -24
  199. package/templates/ides/cursor-mdc/typescript.mdc +25 -25
  200. package/templates/languages/C.md +333 -333
  201. package/templates/languages/CPP.md +743 -743
  202. package/templates/languages/CSHARP.md +417 -417
  203. package/templates/languages/ELIXIR.md +454 -454
  204. package/templates/languages/ERLANG.md +361 -361
  205. package/templates/languages/GO.md +645 -645
  206. package/templates/languages/HASKELL.md +177 -177
  207. package/templates/languages/JAVA.md +607 -607
  208. package/templates/languages/JAVASCRIPT.md +631 -631
  209. package/templates/languages/JULIA.md +97 -97
  210. package/templates/languages/KOTLIN.md +511 -511
  211. package/templates/languages/LISP.md +100 -100
  212. package/templates/languages/LUA.md +74 -74
  213. package/templates/languages/OBJECTIVEC.md +90 -90
  214. package/templates/languages/PHP.md +416 -416
  215. package/templates/languages/PYTHON.md +682 -682
  216. package/templates/languages/RUBY.md +421 -421
  217. package/templates/languages/RUST.md +477 -477
  218. package/templates/languages/SAS.md +73 -73
  219. package/templates/languages/SCALA.md +348 -348
  220. package/templates/languages/SOLIDITY.md +580 -580
  221. package/templates/languages/SQL.md +137 -137
  222. package/templates/languages/SWIFT.md +466 -466
  223. package/templates/languages/TYPESCRIPT.md +591 -591
  224. package/templates/languages/ZIG.md +265 -265
  225. package/templates/modules/ATLASSIAN.md +255 -255
  226. package/templates/modules/CONTEXT7.md +54 -54
  227. package/templates/modules/FIGMA.md +267 -267
  228. package/templates/modules/GITHUB_MCP.md +64 -64
  229. package/templates/modules/GRAFANA.md +328 -328
  230. package/templates/modules/MEMORY.md +126 -126
  231. package/templates/modules/NOTION.md +247 -247
  232. package/templates/modules/PLAYWRIGHT.md +90 -90
  233. package/templates/modules/RULEBOOK_MCP.md +156 -156
  234. package/templates/modules/SERENA.md +337 -337
  235. package/templates/modules/SUPABASE.md +223 -223
  236. package/templates/modules/SYNAP.md +69 -69
  237. package/templates/modules/VECTORIZER.md +63 -63
  238. package/templates/modules/sequential-thinking.md +42 -42
  239. package/templates/ralph/ralph-history.bat +4 -4
  240. package/templates/ralph/ralph-history.sh +5 -5
  241. package/templates/ralph/ralph-init.bat +5 -5
  242. package/templates/ralph/ralph-init.sh +5 -5
  243. package/templates/ralph/ralph-pause.bat +5 -5
  244. package/templates/ralph/ralph-pause.sh +5 -5
  245. package/templates/ralph/ralph-run.bat +5 -5
  246. package/templates/ralph/ralph-run.sh +5 -5
  247. package/templates/ralph/ralph-status.bat +4 -4
  248. package/templates/ralph/ralph-status.sh +5 -5
  249. package/templates/rules/follow-task-sequence.md +36 -36
  250. package/templates/rules/git-safety.md +29 -29
  251. package/templates/rules/incremental-tests.md +29 -29
  252. package/templates/rules/no-deferred.md +31 -31
  253. package/templates/rules/no-shortcuts.md +30 -30
  254. package/templates/rules/research-first.md +30 -30
  255. package/templates/rules/sequential-editing.md +21 -21
  256. package/templates/rules/session-workflow.md +24 -24
  257. package/templates/rules/task-decomposition.md +32 -32
  258. package/templates/services/AZURE_BLOB.md +184 -184
  259. package/templates/services/CASSANDRA.md +239 -239
  260. package/templates/services/DATADOG.md +26 -26
  261. package/templates/services/DOCKER.md +124 -124
  262. package/templates/services/DOCKER_COMPOSE.md +168 -168
  263. package/templates/services/DYNAMODB.md +308 -308
  264. package/templates/services/ELASTICSEARCH.md +347 -347
  265. package/templates/services/GCS.md +178 -178
  266. package/templates/services/HELM.md +194 -194
  267. package/templates/services/INFLUXDB.md +265 -265
  268. package/templates/services/KAFKA.md +341 -341
  269. package/templates/services/KUBERNETES.md +208 -208
  270. package/templates/services/MARIADB.md +183 -183
  271. package/templates/services/MEMCACHED.md +242 -242
  272. package/templates/services/MINIO.md +201 -201
  273. package/templates/services/MONGODB.md +268 -268
  274. package/templates/services/MYSQL.md +358 -358
  275. package/templates/services/NEO4J.md +247 -247
  276. package/templates/services/OPENTELEMETRY.md +25 -25
  277. package/templates/services/ORACLE.md +290 -290
  278. package/templates/services/PINO.md +24 -24
  279. package/templates/services/POSTGRESQL.md +326 -326
  280. package/templates/services/PROMETHEUS.md +33 -33
  281. package/templates/services/RABBITMQ.md +286 -286
  282. package/templates/services/REDIS.md +292 -292
  283. package/templates/services/S3.md +298 -298
  284. package/templates/services/SENTRY.md +23 -23
  285. package/templates/services/SQLITE.md +294 -294
  286. package/templates/services/SQLSERVER.md +294 -294
  287. package/templates/services/WINSTON.md +30 -30
  288. package/templates/skills/cli/aider/SKILL.md +59 -59
  289. package/templates/skills/cli/amazon-q/SKILL.md +35 -35
  290. package/templates/skills/cli/auggie/SKILL.md +42 -42
  291. package/templates/skills/cli/claude/SKILL.md +42 -42
  292. package/templates/skills/cli/cline/SKILL.md +42 -42
  293. package/templates/skills/cli/codebuddy/SKILL.md +30 -30
  294. package/templates/skills/cli/codeium/SKILL.md +30 -30
  295. package/templates/skills/cli/codex/SKILL.md +31 -31
  296. package/templates/skills/cli/continue/SKILL.md +44 -44
  297. package/templates/skills/cli/cursor-cli/SKILL.md +38 -38
  298. package/templates/skills/cli/factory/SKILL.md +28 -28
  299. package/templates/skills/cli/gemini/SKILL.md +45 -45
  300. package/templates/skills/cli/kilocode/SKILL.md +28 -28
  301. package/templates/skills/cli/opencode/SKILL.md +28 -28
  302. package/templates/skills/core/agent-automation/SKILL.md +194 -194
  303. package/templates/skills/core/dag/SKILL.md +314 -314
  304. package/templates/skills/core/documentation-rules/SKILL.md +46 -46
  305. package/templates/skills/core/quality-enforcement/SKILL.md +78 -78
  306. package/templates/skills/core/rulebook/SKILL.md +176 -176
  307. package/templates/skills/dev/accessibility/SKILL.md +17 -17
  308. package/templates/skills/dev/api-design/SKILL.md +15 -15
  309. package/templates/skills/dev/architect/SKILL.md +17 -17
  310. package/templates/skills/dev/build-fix/SKILL.md +17 -17
  311. package/templates/skills/dev/db-design/SKILL.md +15 -15
  312. package/templates/skills/dev/debug/SKILL.md +16 -16
  313. package/templates/skills/dev/deploy/SKILL.md +17 -17
  314. package/templates/skills/dev/docs/SKILL.md +17 -17
  315. package/templates/skills/dev/migrate/SKILL.md +15 -15
  316. package/templates/skills/dev/perf/SKILL.md +17 -17
  317. package/templates/skills/dev/refactor/SKILL.md +17 -17
  318. package/templates/skills/dev/research/SKILL.md +14 -14
  319. package/templates/skills/dev/review/SKILL.md +18 -18
  320. package/templates/skills/dev/security-audit/SKILL.md +17 -17
  321. package/templates/skills/frameworks/angular/SKILL.md +46 -46
  322. package/templates/skills/frameworks/django/SKILL.md +93 -93
  323. package/templates/skills/frameworks/electron/SKILL.md +157 -157
  324. package/templates/skills/frameworks/flask/SKILL.md +48 -48
  325. package/templates/skills/frameworks/flutter/SKILL.md +65 -65
  326. package/templates/skills/frameworks/jquery/SKILL.md +42 -42
  327. package/templates/skills/frameworks/laravel/SKILL.md +48 -48
  328. package/templates/skills/frameworks/nestjs/SKILL.md +53 -53
  329. package/templates/skills/frameworks/nextjs/SKILL.md +137 -137
  330. package/templates/skills/frameworks/nuxt/SKILL.md +50 -50
  331. package/templates/skills/frameworks/rails/SKILL.md +76 -76
  332. package/templates/skills/frameworks/react/SKILL.md +48 -48
  333. package/templates/skills/frameworks/react-native/SKILL.md +57 -57
  334. package/templates/skills/frameworks/spring/SKILL.md +49 -49
  335. package/templates/skills/frameworks/symfony/SKILL.md +46 -46
  336. package/templates/skills/frameworks/vue/SKILL.md +46 -46
  337. package/templates/skills/frameworks/zend/SKILL.md +45 -45
  338. package/templates/skills/ides/copilot/SKILL.md +47 -47
  339. package/templates/skills/ides/cursor/SKILL.md +53 -53
  340. package/templates/skills/ides/jetbrains-ai/SKILL.md +45 -45
  341. package/templates/skills/ides/replit/SKILL.md +46 -46
  342. package/templates/skills/ides/tabnine/SKILL.md +39 -39
  343. package/templates/skills/ides/vscode/SKILL.md +50 -50
  344. package/templates/skills/ides/windsurf/SKILL.md +46 -46
  345. package/templates/skills/ides/zed/SKILL.md +42 -42
  346. package/templates/skills/languages/c/SKILL.md +343 -343
  347. package/templates/skills/languages/cpp/SKILL.md +753 -753
  348. package/templates/skills/languages/csharp/SKILL.md +427 -427
  349. package/templates/skills/languages/elixir/SKILL.md +464 -464
  350. package/templates/skills/languages/erlang/SKILL.md +371 -371
  351. package/templates/skills/languages/go/SKILL.md +655 -655
  352. package/templates/skills/languages/haskell/SKILL.md +187 -187
  353. package/templates/skills/languages/java/SKILL.md +617 -617
  354. package/templates/skills/languages/javascript/SKILL.md +641 -641
  355. package/templates/skills/languages/julia/SKILL.md +107 -107
  356. package/templates/skills/languages/kotlin/SKILL.md +521 -521
  357. package/templates/skills/languages/lisp/SKILL.md +110 -110
  358. package/templates/skills/languages/lua/SKILL.md +84 -84
  359. package/templates/skills/languages/objectivec/SKILL.md +100 -100
  360. package/templates/skills/languages/php/SKILL.md +426 -426
  361. package/templates/skills/languages/python/SKILL.md +692 -692
  362. package/templates/skills/languages/ruby/SKILL.md +431 -431
  363. package/templates/skills/languages/rust/SKILL.md +487 -487
  364. package/templates/skills/languages/sas/SKILL.md +83 -83
  365. package/templates/skills/languages/scala/SKILL.md +358 -358
  366. package/templates/skills/languages/solidity/SKILL.md +590 -590
  367. package/templates/skills/languages/sql/SKILL.md +147 -147
  368. package/templates/skills/languages/swift/SKILL.md +476 -476
  369. package/templates/skills/languages/typescript/SKILL.md +302 -302
  370. package/templates/skills/languages/zig/SKILL.md +275 -275
  371. package/templates/skills/modules/atlassian/SKILL.md +265 -265
  372. package/templates/skills/modules/context7/SKILL.md +64 -64
  373. package/templates/skills/modules/figma/SKILL.md +277 -277
  374. package/templates/skills/modules/github-mcp/SKILL.md +74 -74
  375. package/templates/skills/modules/grafana/SKILL.md +338 -338
  376. package/templates/skills/modules/memory/SKILL.md +73 -73
  377. package/templates/skills/modules/notion/SKILL.md +257 -257
  378. package/templates/skills/modules/playwright/SKILL.md +100 -100
  379. package/templates/skills/modules/rulebook-mcp/SKILL.md +166 -166
  380. package/templates/skills/modules/serena/SKILL.md +347 -347
  381. package/templates/skills/modules/supabase/SKILL.md +233 -233
  382. package/templates/skills/modules/synap/SKILL.md +79 -79
  383. package/templates/skills/modules/vectorizer/SKILL.md +73 -73
  384. package/templates/skills/services/azure-blob/SKILL.md +194 -194
  385. package/templates/skills/services/cassandra/SKILL.md +249 -249
  386. package/templates/skills/services/dynamodb/SKILL.md +318 -318
  387. package/templates/skills/services/elasticsearch/SKILL.md +357 -357
  388. package/templates/skills/services/gcs/SKILL.md +188 -188
  389. package/templates/skills/services/influxdb/SKILL.md +275 -275
  390. package/templates/skills/services/kafka/SKILL.md +351 -351
  391. package/templates/skills/services/mariadb/SKILL.md +193 -193
  392. package/templates/skills/services/memcached/SKILL.md +252 -252
  393. package/templates/skills/services/minio/SKILL.md +211 -211
  394. package/templates/skills/services/mongodb/SKILL.md +278 -278
  395. package/templates/skills/services/mysql/SKILL.md +368 -368
  396. package/templates/skills/services/neo4j/SKILL.md +257 -257
  397. package/templates/skills/services/oracle/SKILL.md +300 -300
  398. package/templates/skills/services/postgresql/SKILL.md +336 -336
  399. package/templates/skills/services/rabbitmq/SKILL.md +296 -296
  400. package/templates/skills/services/redis/SKILL.md +302 -302
  401. package/templates/skills/services/s3/SKILL.md +308 -308
  402. package/templates/skills/services/sqlite/SKILL.md +304 -304
  403. package/templates/skills/services/sqlserver/SKILL.md +304 -304
  404. package/templates/skills/workflows/ralph/SKILL.md +309 -309
  405. package/templates/skills/workflows/ralph/install.sh +87 -87
  406. package/templates/skills/workflows/ralph/manifest.json +158 -158
@@ -1,645 +1,645 @@
1
- <!-- GO:START -->
2
- # Go Project Rules
3
-
4
- ## Agent Automation Commands
5
-
6
- **CRITICAL**: Execute these commands after EVERY implementation (see AGENT_AUTOMATION module for full workflow).
7
-
8
- ```bash
9
- # Complete quality check sequence:
10
- gofmt -l . # Format check (should be empty)
11
- golangci-lint run # Linting
12
- go vet ./... # Static analysis
13
- go test ./... -v -race -coverprofile=coverage.out # Tests + race detection
14
- go tool cover -func=coverage.out # Coverage (95%+ required)
15
- go build ./... # Build verification
16
-
17
- # Security audit:
18
- go list -json -m all | nancy sleuth # Vulnerability scan
19
- go list -u -m all # Check outdated deps
20
- ```
21
-
22
- ## Go Version
23
-
24
- **CRITICAL**: Use Go 1.21+ for modern features and performance.
25
-
26
- - **Minimum Version**: Go 1.21+
27
- - **Recommended**: Go 1.22+
28
- - **Module System**: Go modules enabled
29
-
30
- ### Formatting
31
-
32
- - Use `gofmt` or `goimports` for code formatting
33
- - Standard Go formatting is non-negotiable
34
- - Format before committing: `gofmt -w .`
35
- - CI must check formatting: `gofmt -l . | wc -l` should be 0
36
-
37
- ### Linting
38
-
39
- - Use `golangci-lint` with recommended linters
40
- - Configuration in `.golangci.yml`
41
- - Must pass with no issues
42
- - Enable linters: govet, errcheck, staticcheck, gosimple, unused
43
-
44
- Example `.golangci.yml`:
45
- ```yaml
46
- linters:
47
- enable:
48
- - govet
49
- - errcheck
50
- - staticcheck
51
- - gosimple
52
- - unused
53
- - gosec
54
- - gocyclo
55
- - gofmt
56
- - goimports
57
-
58
- linters-settings:
59
- gocyclo:
60
- min-complexity: 15
61
- govet:
62
- check-shadowing: true
63
-
64
- issues:
65
- exclude-use-default: false
66
- ```
67
-
68
- ### Testing
69
-
70
- - **Framework**: Standard testing package
71
- - **Location**: `*_test.go` files in same package
72
- - **Coverage**: Must meet project threshold (default 95%)
73
- - **Table-Driven Tests**: Use for multiple test cases
74
- - **Subtests**: Use `t.Run()` for organized tests
75
-
76
- Example test structure:
77
- ```go
78
- package mypackage
79
-
80
- import (
81
- "testing"
82
- )
83
-
84
- func TestMyFunction(t *testing.T) {
85
- tests := []struct {
86
- name string
87
- input string
88
- want string
89
- wantErr bool
90
- }{
91
- {"valid input", "test", "TEST", false},
92
- {"empty input", "", "", true},
93
- }
94
-
95
- for _, tt := range tests {
96
- t.Run(tt.name, func(t *testing.T) {
97
- got, err := MyFunction(tt.input)
98
- if (err != nil) != tt.wantErr {
99
- t.Errorf("MyFunction() error = %v, wantErr %v", err, tt.wantErr)
100
- return
101
- }
102
- if got != tt.want {
103
- t.Errorf("MyFunction() = %v, want %v", got, tt.want)
104
- }
105
- })
106
- }
107
- }
108
- ```
109
-
110
- ### Test Categories: S2S and Slow Tests
111
-
112
- **CRITICAL**: Tests must be categorized based on execution time and dependencies.
113
-
114
- #### Test Time Limits
115
-
116
- - **Fast Tests**: Must complete in ≤ 10-20 seconds
117
- - **Slow Tests**: Any test taking > 10-20 seconds must be marked as slow
118
- - **S2S Tests**: Tests requiring active server/database must be isolated and run on-demand
119
-
120
- #### S2S (Server-to-Server) Tests
121
-
122
- **Tests that require active servers, databases, or external services must be isolated using build tags.**
123
-
124
- **Implementation**:
125
-
126
- 1. **Use build tags to isolate S2S tests**:
127
- ```go
128
- // +build s2s
129
-
130
- package mypackage
131
-
132
- import (
133
- "testing"
134
- "os"
135
- )
136
-
137
- func TestDatabaseConnection(t *testing.T) {
138
- // Requires active database server
139
- if os.Getenv("RUN_S2S_TESTS") == "" {
140
- t.Skip("S2S tests disabled. Set RUN_S2S_TESTS=1 to enable.")
141
- }
142
- db := connectToDatabase()
143
- // ... test implementation
144
- }
145
-
146
- func TestAPIIntegration(t *testing.T) {
147
- // Requires active API server
148
- if os.Getenv("RUN_S2S_TESTS") == "" {
149
- t.Skip("S2S tests disabled. Set RUN_S2S_TESTS=1 to enable.")
150
- }
151
- client := createAPIClient()
152
- // ... test implementation
153
- }
154
- ```
155
-
156
- 2. **Regular tests (without build tag)**:
157
- ```go
158
- // Regular fast test (always runs)
159
- package mypackage
160
-
161
- import "testing"
162
-
163
- func TestLocalComputation(t *testing.T) {
164
- // Fast test, no external dependencies
165
- result := computeLocally("input")
166
- if result != "expected" {
167
- t.Errorf("Expected 'expected', got %v", result)
168
- }
169
- }
170
- ```
171
-
172
- 3. **Run tests**:
173
- ```bash
174
- # Regular tests (excludes S2S)
175
- go test ./...
176
-
177
- # Include S2S tests (requires active servers)
178
- RUN_S2S_TESTS=1 go test -tags s2s ./...
179
-
180
- # Run only S2S tests
181
- RUN_S2S_TESTS=1 go test -tags s2s ./... -run TestDatabase
182
- ```
183
-
184
- #### Slow Tests
185
-
186
- **Tests that take > 10-20 seconds must be marked and run separately.**
187
-
188
- **Implementation**:
189
-
190
- 1. **Use build tags for slow tests**:
191
- ```go
192
- // +build slow
193
-
194
- package mypackage
195
-
196
- import (
197
- "testing"
198
- "time"
199
- )
200
-
201
- func TestHeavyComputation(t *testing.T) {
202
- // Takes 30+ seconds
203
- start := time.Now()
204
- result := processLargeDataset()
205
- duration := time.Since(start)
206
-
207
- if result == nil {
208
- t.Error("Expected result, got nil")
209
- }
210
- t.Logf("Test completed in %v", duration)
211
- }
212
-
213
- func TestLargeFileProcessing(t *testing.T) {
214
- // Processes large files, takes > 20 seconds
215
- result := processFile("large_file.dat")
216
- if !result.Success {
217
- t.Error("File processing failed")
218
- }
219
- }
220
- ```
221
-
222
- 2. **Alternative: Use environment variable**:
223
- ```go
224
- package mypackage
225
-
226
- import (
227
- "os"
228
- "testing"
229
- )
230
-
231
- func TestHeavyComputation(t *testing.T) {
232
- if os.Getenv("RUN_SLOW_TESTS") == "" {
233
- t.Skip("Slow tests disabled. Set RUN_SLOW_TESTS=1 to enable.")
234
- }
235
- // Heavy computation test
236
- }
237
- ```
238
-
239
- 3. **Run tests**:
240
- ```bash
241
- # Regular tests (excludes slow and S2S)
242
- go test ./...
243
-
244
- # Include slow tests
245
- RUN_SLOW_TESTS=1 go test -tags slow ./...
246
-
247
- # Run both S2S and slow tests
248
- RUN_S2S_TESTS=1 RUN_SLOW_TESTS=1 go test -tags "s2s slow" ./...
249
- ```
250
-
251
- 4. **Add Makefile targets**:
252
- ```makefile
253
- .PHONY: test test-s2s test-slow test-all
254
-
255
- test:
256
- go test ./...
257
-
258
- test-s2s:
259
- RUN_S2S_TESTS=1 go test -tags s2s ./...
260
-
261
- test-slow:
262
- RUN_SLOW_TESTS=1 go test -tags slow ./...
263
-
264
- test-all:
265
- RUN_S2S_TESTS=1 RUN_SLOW_TESTS=1 go test -tags "s2s slow" ./...
266
- ```
267
-
268
- 5. **Set timeouts in test functions**:
269
- ```go
270
- func TestWithTimeout(t *testing.T) {
271
- done := make(chan bool)
272
- go func() {
273
- // Long-running test
274
- result := heavyOperation()
275
- done <- (result != nil)
276
- }()
277
-
278
- select {
279
- case success := <-done:
280
- if !success {
281
- t.Error("Test failed")
282
- }
283
- case <-time.After(60 * time.Second):
284
- t.Fatal("Test timeout after 60 seconds")
285
- }
286
- }
287
- ```
288
-
289
- #### Best Practices
290
-
291
- - ✅ **Always run fast tests** in CI/CD by default
292
- - ✅ **Isolate S2S tests** - never run them in standard test suite
293
- - ✅ **Mark slow tests** - prevent CI/CD timeouts
294
- - ✅ **Document requirements** - specify which servers/services are needed for S2S tests
295
- - ✅ **Use build tags** - `// +build s2s` and `// +build slow`
296
- - ✅ **Use environment variables** - Check `RUN_S2S_TESTS` and `RUN_SLOW_TESTS`
297
- - ✅ **Set timeouts** - Use `time.After()` or `context.WithTimeout()` for long-running tests
298
- - ✅ **Skip conditionally** - Use `t.Skip()` when services are unavailable
299
- - ❌ **Never mix** fast and slow/S2S tests in same test run
300
- - ❌ **Never require** external services for standard test suite
301
- - ❌ **Never exceed** 10-20 seconds for regular tests
302
-
303
- ## Dependency Management
304
-
305
- **CRITICAL**: Use Go modules for dependency management.
306
-
307
- ### go.mod and go.sum
308
-
309
- ```bash
310
- # Initialize module
311
- go mod init github.com/username/project
312
-
313
- # Add dependency
314
- go get github.com/package/name@latest
315
-
316
- # Update dependencies
317
- go get -u ./...
318
- go mod tidy
319
-
320
- # Verify dependencies
321
- go mod verify
322
- ```
323
-
324
- ### Dependency Guidelines
325
-
326
- 1. **Check for latest versions**:
327
- - Use Context7 MCP tool if available
328
- - Check pkg.go.dev for documentation
329
- - Review changelog for breaking changes
330
-
331
- 2. **Version Selection**:
332
- - ✅ Use latest stable versions
333
- - ✅ Pin to specific versions for reproducibility
334
- - ✅ Keep dependencies updated regularly
335
- - ✅ Use `go mod tidy` to remove unused
336
- - ❌ Don't use deprecated packages
337
- - ❌ Don't vendor unless necessary
338
-
339
- ## Error Handling
340
-
341
- - Always return errors, don't panic
342
- - Use custom error types with `fmt.Errorf`
343
- - Wrap errors with context: `fmt.Errorf("operation failed: %w", err)`
344
- - Check all errors, never ignore
345
- - Use `errors.Is()` and `errors.As()` for error checking
346
-
347
- Example:
348
- ```go
349
- package mypackage
350
-
351
- import (
352
- "errors"
353
- "fmt"
354
- )
355
-
356
- var (
357
- ErrInvalidInput = errors.New("invalid input")
358
- ErrNotFound = errors.New("not found")
359
- )
360
-
361
- func ProcessData(input string) (string, error) {
362
- if input == "" {
363
- return "", fmt.Errorf("process data: %w", ErrInvalidInput)
364
- }
365
-
366
- result, err := doSomething(input)
367
- if err != nil {
368
- return "", fmt.Errorf("failed to process: %w", err)
369
- }
370
-
371
- return result, nil
372
- }
373
- ```
374
-
375
- ## Documentation
376
-
377
- - **Package docs**: Use package comments
378
- - **Function docs**: Document all exported functions
379
- - **Examples**: Include in doc comments (will run as tests)
380
- - **Run godoc**: `go doc -all`
381
-
382
- Example:
383
- ```go
384
- // Package auth provides authentication and authorization utilities.
385
- //
386
- // This package implements JWT-based authentication following OAuth 2.0
387
- // standards. All functions are thread-safe.
388
- package auth
389
-
390
- // Authenticate verifies user credentials and returns a JWT token.
391
- //
392
- // The token is valid for 24 hours and includes the user's ID and roles.
393
- //
394
- // Example:
395
- //
396
- // token, err := Authenticate("user@example.com", "password")
397
- // if err != nil {
398
- // log.Fatal(err)
399
- // }
400
- // fmt.Println("Token:", token)
401
- //
402
- // Returns an error if credentials are invalid or database is unreachable.
403
- func Authenticate(email, password string) (string, error) {
404
- // Implementation
405
- return "", nil
406
- }
407
- ```
408
-
409
- ## Project Structure
410
-
411
- ```
412
- project/
413
- ├── go.mod # Module definition
414
- ├── go.sum # Dependency checksums (commit this)
415
- ├── README.md # Project overview (allowed in root)
416
- ├── CHANGELOG.md # Version history (allowed in root)
417
- ├── AGENTS.md # AI assistant rules (allowed in root)
418
- ├── LICENSE # Project license (allowed in root)
419
- ├── CONTRIBUTING.md # Contribution guidelines (allowed in root)
420
- ├── CODE_OF_CONDUCT.md # Code of conduct (allowed in root)
421
- ├── SECURITY.md # Security policy (allowed in root)
422
- ├── cmd/
423
- │ └── myapp/
424
- │ └── main.go # Application entry point
425
- ├── internal/ # Private packages
426
- │ └── module/
427
- │ ├── module.go
428
- │ └── module_test.go
429
- ├── pkg/ # Public packages
430
- │ └── api/
431
- │ ├── api.go
432
- │ └── api_test.go
433
- ├── tests/ # Integration tests
434
- └── docs/ # Documentation
435
- ```
436
-
437
- ## Concurrency
438
-
439
- - Use goroutines for concurrent operations
440
- - Use channels for communication
441
- - Use `sync.WaitGroup` for synchronization
442
- - Use context for cancellation and timeouts
443
- - Avoid shared memory, prefer channels
444
-
445
- Example:
446
- ```go
447
- func ProcessConcurrently(items []string) ([]Result, error) {
448
- ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
449
- defer cancel()
450
-
451
- results := make(chan Result, len(items))
452
- errors := make(chan error, len(items))
453
-
454
- var wg sync.WaitGroup
455
- for _, item := range items {
456
- wg.Add(1)
457
- go func(item string) {
458
- defer wg.Done()
459
-
460
- select {
461
- case <-ctx.Done():
462
- errors <- ctx.Err()
463
- return
464
- default:
465
- result, err := processItem(item)
466
- if err != nil {
467
- errors <- err
468
- return
469
- }
470
- results <- result
471
- }
472
- }(item)
473
- }
474
-
475
- wg.Wait()
476
- close(results)
477
- close(errors)
478
-
479
- // Collect results
480
- var finalResults []Result
481
- for r := range results {
482
- finalResults = append(finalResults, r)
483
- }
484
-
485
- // Check for errors
486
- for err := range errors {
487
- if err != nil {
488
- return nil, err
489
- }
490
- }
491
-
492
- return finalResults, nil
493
- }
494
- ```
495
-
496
- ## CI/CD Requirements
497
-
498
- Must include GitHub Actions workflows for:
499
-
500
- 1. **Testing** (`go-test.yml`):
501
- - Test on ubuntu-latest, windows-latest, macos-latest
502
- - Test on Go 1.21, 1.22
503
- - Upload coverage reports
504
-
505
- 2. **Linting** (`go-lint.yml`):
506
- - Format check: `gofmt -l .`
507
- - Lint: `golangci-lint run`
508
- - Vet: `go vet ./...`
509
-
510
- 3. **Build** (`go-build.yml`):
511
- - Build: `go build ./...`
512
- - Verify binaries work
513
-
514
- ## Module Publication
515
-
516
- ### Publishing Go Modules
517
-
518
- Go modules are published via Git tags and automatically indexed by pkg.go.dev.
519
-
520
- **Prerequisites:**
521
- 1. Public Git repository (GitHub, GitLab, etc.)
522
- 2. Proper go.mod configuration
523
- 3. Semantic versioning tags
524
-
525
- **go.mod Configuration:**
526
-
527
- ```go
528
- module github.com/your-org/your-module
529
-
530
- go 1.22
531
-
532
- require (
533
- github.com/example/dependency v1.2.3
534
- )
535
- ```
536
-
537
- **Publishing Workflow:**
538
-
539
- 1. Ensure go.mod is correct:
540
- ```bash
541
- go mod tidy
542
- go mod verify
543
- ```
544
-
545
- 2. Run quality checks:
546
- ```bash
547
- go fmt ./...
548
- go vet ./...
549
- golangci-lint run
550
- go test -v -race ./...
551
- ```
552
-
553
- 3. Create semantic version tag:
554
- ```bash
555
- git tag v1.0.0
556
- git push origin v1.0.0
557
- ```
558
-
559
- 4. pkg.go.dev automatically indexes the module
560
- 5. Verify at: `https://pkg.go.dev/github.com/your-org/your-module@v1.0.0`
561
-
562
- **Publishing Checklist:**
563
-
564
- - ✅ All tests passing (`go test ./...`)
565
- - ✅ No race conditions (`go test -race ./...`)
566
- - ✅ Code formatted (`go fmt ./...`)
567
- - ✅ No vet warnings (`go vet ./...`)
568
- - ✅ golangci-lint passes
569
- - ✅ go.mod is tidy (`go mod tidy`)
570
- - ✅ README.md with examples
571
- - ✅ LICENSE file present
572
- - ✅ Semantic version tag (v1.0.0)
573
- - ✅ CHANGELOG.md updated
574
-
575
- **Semantic Versioning:**
576
-
577
- Go uses semantic versioning strictly:
578
-
579
- - **v1.0.0** - First stable release
580
- - **v1.1.0** - New features (backwards compatible)
581
- - **v1.0.1** - Bug fixes
582
- - **v2.0.0** - Breaking changes (requires /v2 in module path)
583
-
584
- **Major Version Updates (v2+):**
585
-
586
- For v2 and above, update module path:
587
-
588
- ```go
589
- // go.mod
590
- module github.com/your-org/your-module/v2
591
-
592
- go 1.22
593
- ```
594
-
595
- **Module Documentation:**
596
-
597
- Write godoc-compatible comments:
598
-
599
- ```go
600
- // Package yourmodule provides functionality for X, Y, and Z.
601
- //
602
- // Basic usage:
603
- //
604
- // import "github.com/your-org/your-module"
605
- //
606
- // result, err := yourmodule.Process("input")
607
- // if err != nil {
608
- // log.Fatal(err)
609
- // }
610
- package yourmodule
611
-
612
- // Process handles the input and returns a result.
613
- //
614
- // Example:
615
- //
616
- // result, err := Process("hello")
617
- // if err != nil {
618
- // return err
619
- // }
620
- // fmt.Println(result)
621
- func Process(input string) (string, error) {
622
- // Implementation
623
- }
624
- ```
625
-
626
- **GOPROXY:**
627
-
628
- Go modules are automatically cached in public proxies:
629
- - https://proxy.golang.org (default)
630
- - https://goproxy.io
631
- - https://goproxy.cn
632
-
633
- No manual publication needed!
634
-
635
- **Retraction:**
636
-
637
- To retract a published version:
638
-
639
- ```go
640
- // go.mod
641
- retract v1.0.5 // Critical bug in processing
642
- ```
643
-
644
- <!-- GO:END -->
645
-
1
+ <!-- GO:START -->
2
+ # Go Project Rules
3
+
4
+ ## Agent Automation Commands
5
+
6
+ **CRITICAL**: Execute these commands after EVERY implementation (see AGENT_AUTOMATION module for full workflow).
7
+
8
+ ```bash
9
+ # Complete quality check sequence:
10
+ gofmt -l . # Format check (should be empty)
11
+ golangci-lint run # Linting
12
+ go vet ./... # Static analysis
13
+ go test ./... -v -race -coverprofile=coverage.out # Tests + race detection
14
+ go tool cover -func=coverage.out # Coverage (95%+ required)
15
+ go build ./... # Build verification
16
+
17
+ # Security audit:
18
+ go list -json -m all | nancy sleuth # Vulnerability scan
19
+ go list -u -m all # Check outdated deps
20
+ ```
21
+
22
+ ## Go Version
23
+
24
+ **CRITICAL**: Use Go 1.21+ for modern features and performance.
25
+
26
+ - **Minimum Version**: Go 1.21+
27
+ - **Recommended**: Go 1.22+
28
+ - **Module System**: Go modules enabled
29
+
30
+ ### Formatting
31
+
32
+ - Use `gofmt` or `goimports` for code formatting
33
+ - Standard Go formatting is non-negotiable
34
+ - Format before committing: `gofmt -w .`
35
+ - CI must check formatting: `gofmt -l . | wc -l` should be 0
36
+
37
+ ### Linting
38
+
39
+ - Use `golangci-lint` with recommended linters
40
+ - Configuration in `.golangci.yml`
41
+ - Must pass with no issues
42
+ - Enable linters: govet, errcheck, staticcheck, gosimple, unused
43
+
44
+ Example `.golangci.yml`:
45
+ ```yaml
46
+ linters:
47
+ enable:
48
+ - govet
49
+ - errcheck
50
+ - staticcheck
51
+ - gosimple
52
+ - unused
53
+ - gosec
54
+ - gocyclo
55
+ - gofmt
56
+ - goimports
57
+
58
+ linters-settings:
59
+ gocyclo:
60
+ min-complexity: 15
61
+ govet:
62
+ check-shadowing: true
63
+
64
+ issues:
65
+ exclude-use-default: false
66
+ ```
67
+
68
+ ### Testing
69
+
70
+ - **Framework**: Standard testing package
71
+ - **Location**: `*_test.go` files in same package
72
+ - **Coverage**: Must meet project threshold (default 95%)
73
+ - **Table-Driven Tests**: Use for multiple test cases
74
+ - **Subtests**: Use `t.Run()` for organized tests
75
+
76
+ Example test structure:
77
+ ```go
78
+ package mypackage
79
+
80
+ import (
81
+ "testing"
82
+ )
83
+
84
+ func TestMyFunction(t *testing.T) {
85
+ tests := []struct {
86
+ name string
87
+ input string
88
+ want string
89
+ wantErr bool
90
+ }{
91
+ {"valid input", "test", "TEST", false},
92
+ {"empty input", "", "", true},
93
+ }
94
+
95
+ for _, tt := range tests {
96
+ t.Run(tt.name, func(t *testing.T) {
97
+ got, err := MyFunction(tt.input)
98
+ if (err != nil) != tt.wantErr {
99
+ t.Errorf("MyFunction() error = %v, wantErr %v", err, tt.wantErr)
100
+ return
101
+ }
102
+ if got != tt.want {
103
+ t.Errorf("MyFunction() = %v, want %v", got, tt.want)
104
+ }
105
+ })
106
+ }
107
+ }
108
+ ```
109
+
110
+ ### Test Categories: S2S and Slow Tests
111
+
112
+ **CRITICAL**: Tests must be categorized based on execution time and dependencies.
113
+
114
+ #### Test Time Limits
115
+
116
+ - **Fast Tests**: Must complete in ≤ 10-20 seconds
117
+ - **Slow Tests**: Any test taking > 10-20 seconds must be marked as slow
118
+ - **S2S Tests**: Tests requiring active server/database must be isolated and run on-demand
119
+
120
+ #### S2S (Server-to-Server) Tests
121
+
122
+ **Tests that require active servers, databases, or external services must be isolated using build tags.**
123
+
124
+ **Implementation**:
125
+
126
+ 1. **Use build tags to isolate S2S tests**:
127
+ ```go
128
+ // +build s2s
129
+
130
+ package mypackage
131
+
132
+ import (
133
+ "testing"
134
+ "os"
135
+ )
136
+
137
+ func TestDatabaseConnection(t *testing.T) {
138
+ // Requires active database server
139
+ if os.Getenv("RUN_S2S_TESTS") == "" {
140
+ t.Skip("S2S tests disabled. Set RUN_S2S_TESTS=1 to enable.")
141
+ }
142
+ db := connectToDatabase()
143
+ // ... test implementation
144
+ }
145
+
146
+ func TestAPIIntegration(t *testing.T) {
147
+ // Requires active API server
148
+ if os.Getenv("RUN_S2S_TESTS") == "" {
149
+ t.Skip("S2S tests disabled. Set RUN_S2S_TESTS=1 to enable.")
150
+ }
151
+ client := createAPIClient()
152
+ // ... test implementation
153
+ }
154
+ ```
155
+
156
+ 2. **Regular tests (without build tag)**:
157
+ ```go
158
+ // Regular fast test (always runs)
159
+ package mypackage
160
+
161
+ import "testing"
162
+
163
+ func TestLocalComputation(t *testing.T) {
164
+ // Fast test, no external dependencies
165
+ result := computeLocally("input")
166
+ if result != "expected" {
167
+ t.Errorf("Expected 'expected', got %v", result)
168
+ }
169
+ }
170
+ ```
171
+
172
+ 3. **Run tests**:
173
+ ```bash
174
+ # Regular tests (excludes S2S)
175
+ go test ./...
176
+
177
+ # Include S2S tests (requires active servers)
178
+ RUN_S2S_TESTS=1 go test -tags s2s ./...
179
+
180
+ # Run only S2S tests
181
+ RUN_S2S_TESTS=1 go test -tags s2s ./... -run TestDatabase
182
+ ```
183
+
184
+ #### Slow Tests
185
+
186
+ **Tests that take > 10-20 seconds must be marked and run separately.**
187
+
188
+ **Implementation**:
189
+
190
+ 1. **Use build tags for slow tests**:
191
+ ```go
192
+ // +build slow
193
+
194
+ package mypackage
195
+
196
+ import (
197
+ "testing"
198
+ "time"
199
+ )
200
+
201
+ func TestHeavyComputation(t *testing.T) {
202
+ // Takes 30+ seconds
203
+ start := time.Now()
204
+ result := processLargeDataset()
205
+ duration := time.Since(start)
206
+
207
+ if result == nil {
208
+ t.Error("Expected result, got nil")
209
+ }
210
+ t.Logf("Test completed in %v", duration)
211
+ }
212
+
213
+ func TestLargeFileProcessing(t *testing.T) {
214
+ // Processes large files, takes > 20 seconds
215
+ result := processFile("large_file.dat")
216
+ if !result.Success {
217
+ t.Error("File processing failed")
218
+ }
219
+ }
220
+ ```
221
+
222
+ 2. **Alternative: Use environment variable**:
223
+ ```go
224
+ package mypackage
225
+
226
+ import (
227
+ "os"
228
+ "testing"
229
+ )
230
+
231
+ func TestHeavyComputation(t *testing.T) {
232
+ if os.Getenv("RUN_SLOW_TESTS") == "" {
233
+ t.Skip("Slow tests disabled. Set RUN_SLOW_TESTS=1 to enable.")
234
+ }
235
+ // Heavy computation test
236
+ }
237
+ ```
238
+
239
+ 3. **Run tests**:
240
+ ```bash
241
+ # Regular tests (excludes slow and S2S)
242
+ go test ./...
243
+
244
+ # Include slow tests
245
+ RUN_SLOW_TESTS=1 go test -tags slow ./...
246
+
247
+ # Run both S2S and slow tests
248
+ RUN_S2S_TESTS=1 RUN_SLOW_TESTS=1 go test -tags "s2s slow" ./...
249
+ ```
250
+
251
+ 4. **Add Makefile targets**:
252
+ ```makefile
253
+ .PHONY: test test-s2s test-slow test-all
254
+
255
+ test:
256
+ go test ./...
257
+
258
+ test-s2s:
259
+ RUN_S2S_TESTS=1 go test -tags s2s ./...
260
+
261
+ test-slow:
262
+ RUN_SLOW_TESTS=1 go test -tags slow ./...
263
+
264
+ test-all:
265
+ RUN_S2S_TESTS=1 RUN_SLOW_TESTS=1 go test -tags "s2s slow" ./...
266
+ ```
267
+
268
+ 5. **Set timeouts in test functions**:
269
+ ```go
270
+ func TestWithTimeout(t *testing.T) {
271
+ done := make(chan bool)
272
+ go func() {
273
+ // Long-running test
274
+ result := heavyOperation()
275
+ done <- (result != nil)
276
+ }()
277
+
278
+ select {
279
+ case success := <-done:
280
+ if !success {
281
+ t.Error("Test failed")
282
+ }
283
+ case <-time.After(60 * time.Second):
284
+ t.Fatal("Test timeout after 60 seconds")
285
+ }
286
+ }
287
+ ```
288
+
289
+ #### Best Practices
290
+
291
+ - ✅ **Always run fast tests** in CI/CD by default
292
+ - ✅ **Isolate S2S tests** - never run them in standard test suite
293
+ - ✅ **Mark slow tests** - prevent CI/CD timeouts
294
+ - ✅ **Document requirements** - specify which servers/services are needed for S2S tests
295
+ - ✅ **Use build tags** - `// +build s2s` and `// +build slow`
296
+ - ✅ **Use environment variables** - Check `RUN_S2S_TESTS` and `RUN_SLOW_TESTS`
297
+ - ✅ **Set timeouts** - Use `time.After()` or `context.WithTimeout()` for long-running tests
298
+ - ✅ **Skip conditionally** - Use `t.Skip()` when services are unavailable
299
+ - ❌ **Never mix** fast and slow/S2S tests in same test run
300
+ - ❌ **Never require** external services for standard test suite
301
+ - ❌ **Never exceed** 10-20 seconds for regular tests
302
+
303
+ ## Dependency Management
304
+
305
+ **CRITICAL**: Use Go modules for dependency management.
306
+
307
+ ### go.mod and go.sum
308
+
309
+ ```bash
310
+ # Initialize module
311
+ go mod init github.com/username/project
312
+
313
+ # Add dependency
314
+ go get github.com/package/name@latest
315
+
316
+ # Update dependencies
317
+ go get -u ./...
318
+ go mod tidy
319
+
320
+ # Verify dependencies
321
+ go mod verify
322
+ ```
323
+
324
+ ### Dependency Guidelines
325
+
326
+ 1. **Check for latest versions**:
327
+ - Use Context7 MCP tool if available
328
+ - Check pkg.go.dev for documentation
329
+ - Review changelog for breaking changes
330
+
331
+ 2. **Version Selection**:
332
+ - ✅ Use latest stable versions
333
+ - ✅ Pin to specific versions for reproducibility
334
+ - ✅ Keep dependencies updated regularly
335
+ - ✅ Use `go mod tidy` to remove unused
336
+ - ❌ Don't use deprecated packages
337
+ - ❌ Don't vendor unless necessary
338
+
339
+ ## Error Handling
340
+
341
+ - Always return errors, don't panic
342
+ - Use custom error types with `fmt.Errorf`
343
+ - Wrap errors with context: `fmt.Errorf("operation failed: %w", err)`
344
+ - Check all errors, never ignore
345
+ - Use `errors.Is()` and `errors.As()` for error checking
346
+
347
+ Example:
348
+ ```go
349
+ package mypackage
350
+
351
+ import (
352
+ "errors"
353
+ "fmt"
354
+ )
355
+
356
+ var (
357
+ ErrInvalidInput = errors.New("invalid input")
358
+ ErrNotFound = errors.New("not found")
359
+ )
360
+
361
+ func ProcessData(input string) (string, error) {
362
+ if input == "" {
363
+ return "", fmt.Errorf("process data: %w", ErrInvalidInput)
364
+ }
365
+
366
+ result, err := doSomething(input)
367
+ if err != nil {
368
+ return "", fmt.Errorf("failed to process: %w", err)
369
+ }
370
+
371
+ return result, nil
372
+ }
373
+ ```
374
+
375
+ ## Documentation
376
+
377
+ - **Package docs**: Use package comments
378
+ - **Function docs**: Document all exported functions
379
+ - **Examples**: Include in doc comments (will run as tests)
380
+ - **Run godoc**: `go doc -all`
381
+
382
+ Example:
383
+ ```go
384
+ // Package auth provides authentication and authorization utilities.
385
+ //
386
+ // This package implements JWT-based authentication following OAuth 2.0
387
+ // standards. All functions are thread-safe.
388
+ package auth
389
+
390
+ // Authenticate verifies user credentials and returns a JWT token.
391
+ //
392
+ // The token is valid for 24 hours and includes the user's ID and roles.
393
+ //
394
+ // Example:
395
+ //
396
+ // token, err := Authenticate("user@example.com", "password")
397
+ // if err != nil {
398
+ // log.Fatal(err)
399
+ // }
400
+ // fmt.Println("Token:", token)
401
+ //
402
+ // Returns an error if credentials are invalid or database is unreachable.
403
+ func Authenticate(email, password string) (string, error) {
404
+ // Implementation
405
+ return "", nil
406
+ }
407
+ ```
408
+
409
+ ## Project Structure
410
+
411
+ ```
412
+ project/
413
+ ├── go.mod # Module definition
414
+ ├── go.sum # Dependency checksums (commit this)
415
+ ├── README.md # Project overview (allowed in root)
416
+ ├── CHANGELOG.md # Version history (allowed in root)
417
+ ├── AGENTS.md # AI assistant rules (allowed in root)
418
+ ├── LICENSE # Project license (allowed in root)
419
+ ├── CONTRIBUTING.md # Contribution guidelines (allowed in root)
420
+ ├── CODE_OF_CONDUCT.md # Code of conduct (allowed in root)
421
+ ├── SECURITY.md # Security policy (allowed in root)
422
+ ├── cmd/
423
+ │ └── myapp/
424
+ │ └── main.go # Application entry point
425
+ ├── internal/ # Private packages
426
+ │ └── module/
427
+ │ ├── module.go
428
+ │ └── module_test.go
429
+ ├── pkg/ # Public packages
430
+ │ └── api/
431
+ │ ├── api.go
432
+ │ └── api_test.go
433
+ ├── tests/ # Integration tests
434
+ └── docs/ # Documentation
435
+ ```
436
+
437
+ ## Concurrency
438
+
439
+ - Use goroutines for concurrent operations
440
+ - Use channels for communication
441
+ - Use `sync.WaitGroup` for synchronization
442
+ - Use context for cancellation and timeouts
443
+ - Avoid shared memory, prefer channels
444
+
445
+ Example:
446
+ ```go
447
+ func ProcessConcurrently(items []string) ([]Result, error) {
448
+ ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
449
+ defer cancel()
450
+
451
+ results := make(chan Result, len(items))
452
+ errors := make(chan error, len(items))
453
+
454
+ var wg sync.WaitGroup
455
+ for _, item := range items {
456
+ wg.Add(1)
457
+ go func(item string) {
458
+ defer wg.Done()
459
+
460
+ select {
461
+ case <-ctx.Done():
462
+ errors <- ctx.Err()
463
+ return
464
+ default:
465
+ result, err := processItem(item)
466
+ if err != nil {
467
+ errors <- err
468
+ return
469
+ }
470
+ results <- result
471
+ }
472
+ }(item)
473
+ }
474
+
475
+ wg.Wait()
476
+ close(results)
477
+ close(errors)
478
+
479
+ // Collect results
480
+ var finalResults []Result
481
+ for r := range results {
482
+ finalResults = append(finalResults, r)
483
+ }
484
+
485
+ // Check for errors
486
+ for err := range errors {
487
+ if err != nil {
488
+ return nil, err
489
+ }
490
+ }
491
+
492
+ return finalResults, nil
493
+ }
494
+ ```
495
+
496
+ ## CI/CD Requirements
497
+
498
+ Must include GitHub Actions workflows for:
499
+
500
+ 1. **Testing** (`go-test.yml`):
501
+ - Test on ubuntu-latest, windows-latest, macos-latest
502
+ - Test on Go 1.21, 1.22
503
+ - Upload coverage reports
504
+
505
+ 2. **Linting** (`go-lint.yml`):
506
+ - Format check: `gofmt -l .`
507
+ - Lint: `golangci-lint run`
508
+ - Vet: `go vet ./...`
509
+
510
+ 3. **Build** (`go-build.yml`):
511
+ - Build: `go build ./...`
512
+ - Verify binaries work
513
+
514
+ ## Module Publication
515
+
516
+ ### Publishing Go Modules
517
+
518
+ Go modules are published via Git tags and automatically indexed by pkg.go.dev.
519
+
520
+ **Prerequisites:**
521
+ 1. Public Git repository (GitHub, GitLab, etc.)
522
+ 2. Proper go.mod configuration
523
+ 3. Semantic versioning tags
524
+
525
+ **go.mod Configuration:**
526
+
527
+ ```go
528
+ module github.com/your-org/your-module
529
+
530
+ go 1.22
531
+
532
+ require (
533
+ github.com/example/dependency v1.2.3
534
+ )
535
+ ```
536
+
537
+ **Publishing Workflow:**
538
+
539
+ 1. Ensure go.mod is correct:
540
+ ```bash
541
+ go mod tidy
542
+ go mod verify
543
+ ```
544
+
545
+ 2. Run quality checks:
546
+ ```bash
547
+ go fmt ./...
548
+ go vet ./...
549
+ golangci-lint run
550
+ go test -v -race ./...
551
+ ```
552
+
553
+ 3. Create semantic version tag:
554
+ ```bash
555
+ git tag v1.0.0
556
+ git push origin v1.0.0
557
+ ```
558
+
559
+ 4. pkg.go.dev automatically indexes the module
560
+ 5. Verify at: `https://pkg.go.dev/github.com/your-org/your-module@v1.0.0`
561
+
562
+ **Publishing Checklist:**
563
+
564
+ - ✅ All tests passing (`go test ./...`)
565
+ - ✅ No race conditions (`go test -race ./...`)
566
+ - ✅ Code formatted (`go fmt ./...`)
567
+ - ✅ No vet warnings (`go vet ./...`)
568
+ - ✅ golangci-lint passes
569
+ - ✅ go.mod is tidy (`go mod tidy`)
570
+ - ✅ README.md with examples
571
+ - ✅ LICENSE file present
572
+ - ✅ Semantic version tag (v1.0.0)
573
+ - ✅ CHANGELOG.md updated
574
+
575
+ **Semantic Versioning:**
576
+
577
+ Go uses semantic versioning strictly:
578
+
579
+ - **v1.0.0** - First stable release
580
+ - **v1.1.0** - New features (backwards compatible)
581
+ - **v1.0.1** - Bug fixes
582
+ - **v2.0.0** - Breaking changes (requires /v2 in module path)
583
+
584
+ **Major Version Updates (v2+):**
585
+
586
+ For v2 and above, update module path:
587
+
588
+ ```go
589
+ // go.mod
590
+ module github.com/your-org/your-module/v2
591
+
592
+ go 1.22
593
+ ```
594
+
595
+ **Module Documentation:**
596
+
597
+ Write godoc-compatible comments:
598
+
599
+ ```go
600
+ // Package yourmodule provides functionality for X, Y, and Z.
601
+ //
602
+ // Basic usage:
603
+ //
604
+ // import "github.com/your-org/your-module"
605
+ //
606
+ // result, err := yourmodule.Process("input")
607
+ // if err != nil {
608
+ // log.Fatal(err)
609
+ // }
610
+ package yourmodule
611
+
612
+ // Process handles the input and returns a result.
613
+ //
614
+ // Example:
615
+ //
616
+ // result, err := Process("hello")
617
+ // if err != nil {
618
+ // return err
619
+ // }
620
+ // fmt.Println(result)
621
+ func Process(input string) (string, error) {
622
+ // Implementation
623
+ }
624
+ ```
625
+
626
+ **GOPROXY:**
627
+
628
+ Go modules are automatically cached in public proxies:
629
+ - https://proxy.golang.org (default)
630
+ - https://goproxy.io
631
+ - https://goproxy.cn
632
+
633
+ No manual publication needed!
634
+
635
+ **Retraction:**
636
+
637
+ To retract a published version:
638
+
639
+ ```go
640
+ // go.mod
641
+ retract v1.0.5 // Critical bug in processing
642
+ ```
643
+
644
+ <!-- GO:END -->
645
+