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