@hivehub/rulebook 5.5.2 → 5.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (834) 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-learn-capture.md +41 -48
  8. package/.claude/commands/rulebook-learn-list.md +13 -13
  9. package/.claude/commands/rulebook-memory-save.md +48 -48
  10. package/.claude/commands/rulebook-memory-search.md +47 -47
  11. package/.claude/commands/rulebook-task-apply.md +67 -67
  12. package/.claude/commands/rulebook-task-archive.md +94 -94
  13. package/.claude/commands/rulebook-task-create.md +93 -93
  14. package/.claude/commands/rulebook-task-list.md +42 -42
  15. package/.claude/commands/rulebook-task-show.md +52 -52
  16. package/.claude/commands/rulebook-task-validate.md +53 -53
  17. package/.claude-plugin/marketplace.json +28 -28
  18. package/.claude-plugin/plugin.json +8 -8
  19. package/README.md +418 -394
  20. package/dist/cli/commands/claude.d.ts +17 -0
  21. package/dist/cli/commands/claude.d.ts.map +1 -0
  22. package/dist/cli/commands/claude.js +56 -0
  23. package/dist/cli/commands/claude.js.map +1 -0
  24. package/dist/cli/commands/context-intelligence.d.ts +0 -1
  25. package/dist/cli/commands/context-intelligence.d.ts.map +1 -1
  26. package/dist/cli/commands/context-intelligence.js +12 -33
  27. package/dist/cli/commands/context-intelligence.js.map +1 -1
  28. package/dist/cli/commands/index.d.ts +4 -7
  29. package/dist/cli/commands/index.d.ts.map +1 -1
  30. package/dist/cli/commands/index.js +4 -7
  31. package/dist/cli/commands/index.js.map +1 -1
  32. package/dist/cli/commands/init.d.ts.map +1 -1
  33. package/dist/cli/commands/init.js +58 -83
  34. package/dist/cli/commands/init.js.map +1 -1
  35. package/dist/cli/commands/mcp.d.ts +0 -1
  36. package/dist/cli/commands/mcp.d.ts.map +1 -1
  37. package/dist/cli/commands/mcp.js +1 -7
  38. package/dist/cli/commands/mcp.js.map +1 -1
  39. package/dist/cli/commands/memory.d.ts +7 -1
  40. package/dist/cli/commands/memory.d.ts.map +1 -1
  41. package/dist/cli/commands/memory.js +51 -57
  42. package/dist/cli/commands/memory.js.map +1 -1
  43. package/dist/cli/commands/misc.d.ts +1 -15
  44. package/dist/cli/commands/misc.d.ts.map +1 -1
  45. package/dist/cli/commands/misc.js +36 -215
  46. package/dist/cli/commands/misc.js.map +1 -1
  47. package/dist/cli/commands/plans.d.ts +0 -6
  48. package/dist/cli/commands/plans.d.ts.map +1 -1
  49. package/dist/cli/commands/plans.js +9 -77
  50. package/dist/cli/commands/plans.js.map +1 -1
  51. package/dist/cli/commands/skills.js +6 -6
  52. package/dist/cli/commands/skills.js.map +1 -1
  53. package/dist/cli/commands/task.js +4 -4
  54. package/dist/cli/commands/task.js.map +1 -1
  55. package/dist/cli/commands/update.d.ts.map +1 -1
  56. package/dist/cli/commands/update.js +128 -53
  57. package/dist/cli/commands/update.js.map +1 -1
  58. package/dist/cli/prompts.d.ts +13 -0
  59. package/dist/cli/prompts.d.ts.map +1 -1
  60. package/dist/cli/prompts.js +107 -78
  61. package/dist/cli/prompts.js.map +1 -1
  62. package/dist/core/{claude-mcp.d.ts → claude/claude-mcp.d.ts} +9 -0
  63. package/dist/core/claude/claude-mcp.d.ts.map +1 -0
  64. package/dist/core/{claude-mcp.js → claude/claude-mcp.js} +33 -3
  65. package/dist/core/claude/claude-mcp.js.map +1 -0
  66. package/dist/core/claude/claude-md-generator.d.ts.map +1 -0
  67. package/dist/core/{claude-md-generator.js → claude/claude-md-generator.js} +2 -2
  68. package/dist/core/claude/claude-md-generator.js.map +1 -0
  69. package/dist/core/{claude-settings-manager.d.ts → claude/claude-settings-manager.d.ts} +12 -0
  70. package/dist/core/claude/claude-settings-manager.d.ts.map +1 -0
  71. package/dist/core/{claude-settings-manager.js → claude/claude-settings-manager.js} +81 -22
  72. package/dist/core/claude/claude-settings-manager.js.map +1 -0
  73. package/dist/core/{cli-bridge.d.ts → console/cli-bridge.d.ts} +2 -2
  74. package/dist/core/console/cli-bridge.d.ts.map +1 -0
  75. package/dist/core/{cli-bridge.js → console/cli-bridge.js} +3 -3
  76. package/dist/core/console/cli-bridge.js.map +1 -0
  77. package/dist/core/{detector.d.ts → detect/detector.d.ts} +16 -1
  78. package/dist/core/detect/detector.d.ts.map +1 -0
  79. package/dist/core/detect/detector.js +766 -0
  80. package/dist/core/detect/detector.js.map +1 -0
  81. package/dist/core/detect/library-registry.d.ts +40 -0
  82. package/dist/core/detect/library-registry.d.ts.map +1 -0
  83. package/dist/core/detect/library-registry.js +239 -0
  84. package/dist/core/detect/library-registry.js.map +1 -0
  85. package/dist/core/docs/docs-generator.d.ts.map +1 -0
  86. package/dist/core/{docs-generator.js → docs/docs-generator.js} +1 -1
  87. package/dist/core/docs/docs-generator.js.map +1 -0
  88. package/dist/core/docs/mcp-reference-generator.d.ts.map +1 -0
  89. package/dist/core/{mcp-reference-generator.js → docs/mcp-reference-generator.js} +2 -2
  90. package/dist/core/docs/mcp-reference-generator.js.map +1 -0
  91. package/dist/core/{generator.d.ts → generators/generator.d.ts} +3 -4
  92. package/dist/core/generators/generator.d.ts.map +1 -0
  93. package/dist/core/{generator.js → generators/generator.js} +42 -157
  94. package/dist/core/generators/generator.js.map +1 -0
  95. package/dist/core/{gitignore-generator.d.ts → generators/gitignore-generator.d.ts} +1 -1
  96. package/dist/core/generators/gitignore-generator.d.ts.map +1 -0
  97. package/dist/core/{gitignore-generator.js → generators/gitignore-generator.js} +1 -1
  98. package/dist/core/generators/gitignore-generator.js.map +1 -0
  99. package/dist/core/generators/minimal-scaffolder.d.ts.map +1 -0
  100. package/dist/core/{minimal-scaffolder.js → generators/minimal-scaffolder.js} +2 -2
  101. package/dist/core/generators/minimal-scaffolder.js.map +1 -0
  102. package/dist/core/{rules-generator.d.ts → generators/rules-generator.d.ts} +2 -6
  103. package/dist/core/generators/rules-generator.d.ts.map +1 -0
  104. package/dist/core/{rules-generator.js → generators/rules-generator.js} +41 -2
  105. package/dist/core/generators/rules-generator.js.map +1 -0
  106. package/dist/core/{workflow-generator.d.ts → generators/workflow-generator.d.ts} +1 -1
  107. package/dist/core/generators/workflow-generator.d.ts.map +1 -0
  108. package/dist/core/{workflow-generator.js → generators/workflow-generator.js} +2 -3
  109. package/dist/core/generators/workflow-generator.js.map +1 -0
  110. package/dist/core/{multi-tool-generator.d.ts → ide/multi-tool-generator.d.ts} +1 -1
  111. package/dist/core/ide/multi-tool-generator.d.ts.map +1 -0
  112. package/dist/core/{multi-tool-generator.js → ide/multi-tool-generator.js} +1 -1
  113. package/dist/core/ide/multi-tool-generator.js.map +1 -0
  114. package/dist/core/ide/opencode-generator.d.ts +72 -0
  115. package/dist/core/ide/opencode-generator.d.ts.map +1 -0
  116. package/dist/core/ide/opencode-generator.js +450 -0
  117. package/dist/core/ide/opencode-generator.js.map +1 -0
  118. package/dist/core/merger.d.ts +1 -1
  119. package/dist/core/merger.d.ts.map +1 -1
  120. package/dist/core/merger.js +5 -5
  121. package/dist/core/merger.js.map +1 -1
  122. package/dist/core/migrator.d.ts +0 -1
  123. package/dist/core/migrator.d.ts.map +1 -1
  124. package/dist/core/migrator.js +4 -29
  125. package/dist/core/migrator.js.map +1 -1
  126. package/dist/core/quality/coverage-checker.d.ts.map +1 -0
  127. package/dist/core/{coverage-checker.js → quality/coverage-checker.js} +2 -2
  128. package/dist/core/quality/coverage-checker.js.map +1 -0
  129. package/dist/core/quality/dependency-checker.d.ts.map +1 -0
  130. package/dist/core/{dependency-checker.js → quality/dependency-checker.js} +1 -1
  131. package/dist/core/quality/dependency-checker.js.map +1 -0
  132. package/dist/core/quality/doctor.d.ts.map +1 -0
  133. package/dist/core/{doctor.js → quality/doctor.js} +1 -67
  134. package/dist/core/quality/doctor.js.map +1 -0
  135. package/dist/core/quality/validator.d.ts.map +1 -0
  136. package/dist/core/{validator.js → quality/validator.js} +1 -1
  137. package/dist/core/quality/validator.js.map +1 -0
  138. package/dist/core/{skills-manager.d.ts → skills/skills-manager.d.ts} +1 -1
  139. package/dist/core/skills/skills-manager.d.ts.map +1 -0
  140. package/dist/core/{skills-manager.js → skills/skills-manager.js} +1 -25
  141. package/dist/core/skills/skills-manager.js.map +1 -0
  142. package/dist/core/{config-manager.d.ts → state/config-manager.d.ts} +1 -1
  143. package/dist/core/state/config-manager.d.ts.map +1 -0
  144. package/dist/core/{config-manager.js → state/config-manager.js} +2 -61
  145. package/dist/core/state/config-manager.js.map +1 -0
  146. package/dist/core/state/override-manager.d.ts.map +1 -0
  147. package/dist/core/{override-manager.js → state/override-manager.js} +1 -1
  148. package/dist/core/state/override-manager.js.map +1 -0
  149. package/dist/core/{state-writer.d.ts → state/state-writer.d.ts} +2 -3
  150. package/dist/core/state/state-writer.d.ts.map +1 -0
  151. package/dist/core/{state-writer.js → state/state-writer.js} +6 -9
  152. package/dist/core/state/state-writer.js.map +1 -0
  153. package/dist/core/state/version-bumper.d.ts.map +1 -0
  154. package/dist/core/{version-bumper.js → state/version-bumper.js} +1 -1
  155. package/dist/core/state/version-bumper.js.map +1 -0
  156. package/dist/core/{decision-manager.d.ts → tasks/decision-manager.d.ts} +1 -1
  157. package/dist/core/tasks/decision-manager.d.ts.map +1 -0
  158. package/dist/core/{decision-manager.js → tasks/decision-manager.js} +1 -1
  159. package/dist/core/tasks/decision-manager.js.map +1 -0
  160. package/dist/core/{knowledge-manager.d.ts → tasks/knowledge-manager.d.ts} +1 -1
  161. package/dist/core/tasks/knowledge-manager.d.ts.map +1 -0
  162. package/dist/core/{knowledge-manager.js → tasks/knowledge-manager.js} +1 -1
  163. package/dist/core/tasks/knowledge-manager.js.map +1 -0
  164. package/dist/core/{learn-manager.d.ts → tasks/learn-manager.d.ts} +1 -3
  165. package/dist/core/tasks/learn-manager.d.ts.map +1 -0
  166. package/dist/core/{learn-manager.js → tasks/learn-manager.js} +1 -39
  167. package/dist/core/tasks/learn-manager.js.map +1 -0
  168. package/dist/core/tasks/plans-manager.d.ts.map +1 -0
  169. package/dist/core/{plans-manager.js → tasks/plans-manager.js} +1 -1
  170. package/dist/core/tasks/plans-manager.js.map +1 -0
  171. package/dist/core/tasks/task-manager.d.ts.map +1 -0
  172. package/dist/core/{task-manager.js → tasks/task-manager.js} +2 -2
  173. package/dist/core/tasks/task-manager.js.map +1 -0
  174. package/dist/core/workspace/project-worker.d.ts +6 -6
  175. package/dist/core/workspace/project-worker.d.ts.map +1 -1
  176. package/dist/core/workspace/project-worker.js +6 -6
  177. package/dist/core/workspace/project-worker.js.map +1 -1
  178. package/dist/index.d.ts +1 -1
  179. package/dist/index.d.ts.map +1 -1
  180. package/dist/index.js +31 -176
  181. package/dist/index.js.map +1 -1
  182. package/dist/mcp/rulebook-server.d.ts.map +1 -1
  183. package/dist/mcp/rulebook-server.js +16 -960
  184. package/dist/mcp/rulebook-server.js.map +1 -1
  185. package/dist/memory/file-search.d.ts +43 -0
  186. package/dist/memory/file-search.d.ts.map +1 -0
  187. package/dist/memory/file-search.js +228 -0
  188. package/dist/memory/file-search.js.map +1 -0
  189. package/dist/memory/file-store.d.ts +99 -0
  190. package/dist/memory/file-store.d.ts.map +1 -0
  191. package/dist/memory/file-store.js +615 -0
  192. package/dist/memory/file-store.js.map +1 -0
  193. package/dist/memory/legacy-migrator.d.ts +27 -0
  194. package/dist/memory/legacy-migrator.d.ts.map +1 -0
  195. package/dist/memory/legacy-migrator.js +185 -0
  196. package/dist/memory/legacy-migrator.js.map +1 -0
  197. package/dist/memory/memory-manager.d.ts +25 -24
  198. package/dist/memory/memory-manager.d.ts.map +1 -1
  199. package/dist/memory/memory-manager.js +97 -140
  200. package/dist/memory/memory-manager.js.map +1 -1
  201. package/dist/memory/memory-types.d.ts +1 -1
  202. package/dist/memory/memory-types.d.ts.map +1 -1
  203. package/dist/types.d.ts +20 -118
  204. package/dist/types.d.ts.map +1 -1
  205. package/package.json +23 -27
  206. package/templates/agents/accessibility-reviewer.md +43 -43
  207. package/templates/agents/api-designer.md +42 -42
  208. package/templates/agents/architect.md +51 -51
  209. package/templates/agents/build-engineer.md +36 -36
  210. package/templates/agents/code-reviewer.md +47 -47
  211. package/templates/agents/compiler/codegen-debugger.md +34 -34
  212. package/templates/agents/compiler/stdlib-engineer.md +28 -28
  213. package/templates/agents/compiler/test-coverage-guardian.md +31 -31
  214. package/templates/agents/context-intelligence.md +50 -52
  215. package/templates/agents/database-architect.md +41 -41
  216. package/templates/agents/devops-engineer.md +42 -42
  217. package/templates/agents/docs-writer.md +38 -38
  218. package/templates/agents/game-engine/cpp-core-expert.md +35 -35
  219. package/templates/agents/game-engine/render-engineer.md +22 -22
  220. package/templates/agents/game-engine/shader-engineer.md +38 -38
  221. package/templates/agents/game-engine/systems-integration.md +43 -43
  222. package/templates/agents/generic/code-reviewer.md +41 -41
  223. package/templates/agents/generic/docs-writer.md +25 -25
  224. package/templates/agents/generic/project-manager.md +36 -36
  225. package/templates/agents/generic/researcher.md +34 -34
  226. package/templates/agents/generic/test-engineer.md +41 -41
  227. package/templates/agents/i18n-engineer.md +42 -42
  228. package/templates/agents/implementer.md +42 -42
  229. package/templates/agents/migration-engineer.md +42 -42
  230. package/templates/agents/mobile/platform-specialist.md +22 -22
  231. package/templates/agents/mobile/ui-engineer.md +22 -22
  232. package/templates/agents/performance-engineer.md +49 -49
  233. package/templates/agents/project-manager.md +215 -0
  234. package/templates/agents/quality-gatekeeper.md +205 -0
  235. package/templates/agents/refactoring-agent.md +41 -41
  236. package/templates/agents/researcher.md +38 -38
  237. package/templates/agents/security-reviewer.md +40 -40
  238. package/templates/agents/team-lead.md +37 -37
  239. package/templates/agents/tester.md +48 -48
  240. package/templates/agents/ux-reviewer.md +43 -43
  241. package/templates/agents/web-app/api-designer.md +22 -22
  242. package/templates/agents/web-app/backend-engineer.md +30 -30
  243. package/templates/agents/web-app/database-engineer.md +22 -22
  244. package/templates/agents/web-app/frontend-engineer.md +29 -29
  245. package/templates/agents/web-app/security-reviewer.md +32 -32
  246. package/templates/ci/rulebook-review.yml +26 -26
  247. package/templates/claude-workflows/bugfix.js +94 -0
  248. package/templates/claude-workflows/feature-pipeline.js +88 -0
  249. package/templates/claude-workflows/release-gate.js +64 -0
  250. package/templates/claude-workflows/review-fanout.js +118 -0
  251. package/templates/claude-workflows/rulebook-driver.js +343 -0
  252. package/templates/claude-workflows/spec-author.js +133 -0
  253. package/templates/cli/AIDER.md +49 -49
  254. package/templates/cli/AMAZON_Q.md +25 -25
  255. package/templates/cli/AUGGIE.md +32 -32
  256. package/templates/cli/CLAUDE.md +117 -117
  257. package/templates/cli/CLINE.md +99 -99
  258. package/templates/cli/CODEBUDDY.md +20 -20
  259. package/templates/cli/CODEIUM.md +20 -20
  260. package/templates/cli/CODEX.md +21 -21
  261. package/templates/cli/CONTINUE.md +34 -34
  262. package/templates/cli/CURSOR_CLI.md +62 -62
  263. package/templates/cli/FACTORY.md +18 -18
  264. package/templates/cli/GEMINI.md +35 -35
  265. package/templates/cli/KILOCODE.md +18 -18
  266. package/templates/cli/OPENCODE.md +85 -18
  267. package/templates/cli/_GENERIC_TEMPLATE.md +29 -29
  268. package/templates/commands/rulebook-decision-create.md +55 -55
  269. package/templates/commands/rulebook-decision-list.md +15 -15
  270. package/templates/commands/rulebook-knowledge-add.md +41 -41
  271. package/templates/commands/rulebook-knowledge-list.md +15 -15
  272. package/templates/commands/rulebook-learn-capture.md +41 -48
  273. package/templates/commands/rulebook-learn-list.md +13 -13
  274. package/templates/commands/rulebook-memory-save.md +48 -48
  275. package/templates/commands/rulebook-memory-search.md +47 -47
  276. package/templates/commands/rulebook-task-apply.md +67 -67
  277. package/templates/commands/rulebook-task-archive.md +94 -94
  278. package/templates/commands/rulebook-task-create.md +93 -93
  279. package/templates/commands/rulebook-task-list.md +42 -42
  280. package/templates/commands/rulebook-task-show.md +52 -52
  281. package/templates/commands/rulebook-task-validate.md +53 -53
  282. package/templates/compact-context/_default.md +23 -23
  283. package/templates/compact-context/cpp.md +26 -26
  284. package/templates/compact-context/go.md +26 -26
  285. package/templates/compact-context/python.md +26 -26
  286. package/templates/compact-context/rust.md +28 -28
  287. package/templates/compact-context/typescript.md +29 -29
  288. package/templates/core/AGENTS_LEAN.md +0 -14
  289. package/templates/core/AGENTS_OVERRIDE.md +16 -16
  290. package/templates/core/AGENT_AUTOMATION.md +296 -296
  291. package/templates/core/CLAUDE_MD_v2.md +90 -90
  292. package/templates/core/DAG.md +304 -304
  293. package/templates/core/DECISIONS.md +38 -38
  294. package/templates/core/DOCUMENTATION_RULES.md +36 -36
  295. package/templates/core/KNOWLEDGE.md +49 -49
  296. package/templates/core/MULTI_AGENT.md +74 -74
  297. package/templates/core/PLANS.md +28 -28
  298. package/templates/core/QUALITY_ENFORCEMENT.md +68 -68
  299. package/templates/core/RULEBOOK.md +1947 -1947
  300. package/templates/core/TIER1_PROHIBITIONS.md +154 -154
  301. package/templates/core/TOKEN_OPTIMIZATION.md +49 -49
  302. package/templates/git/CI_CD_PATTERNS.md +661 -661
  303. package/templates/git/GITHUB_ACTIONS.md +728 -728
  304. package/templates/git/GITLAB_CI.md +730 -730
  305. package/templates/git/GIT_WORKFLOW.md +1192 -1192
  306. package/templates/git/SECRETS_MANAGEMENT.md +585 -585
  307. package/templates/hooks/COMMIT_MSG.md +530 -530
  308. package/templates/hooks/POST_CHECKOUT.md +546 -546
  309. package/templates/hooks/PREPARE_COMMIT_MSG.md +619 -619
  310. package/templates/hooks/PRE_COMMIT.md +414 -414
  311. package/templates/hooks/PRE_PUSH.md +601 -601
  312. package/templates/hooks/check-context-and-handoff.sh +24 -16
  313. package/templates/hooks/enforce-pre-tool.sh +70 -0
  314. package/templates/hooks/terse-mode-tracker.sh +146 -143
  315. package/templates/hooks/update-check.ps1 +84 -0
  316. package/templates/hooks/update-check.sh +103 -0
  317. package/templates/ides/CONTINUE_RULES.md +16 -16
  318. package/templates/ides/COPILOT_INSTRUCTIONS.md +23 -23
  319. package/templates/ides/GEMINI_RULES.md +17 -17
  320. package/templates/ides/OPENCODE.md +63 -0
  321. package/templates/ides/WINDSURF_RULES.md +14 -14
  322. package/templates/languages/C.md +333 -333
  323. package/templates/languages/CPP.md +743 -743
  324. package/templates/languages/CSHARP.md +417 -417
  325. package/templates/languages/ELIXIR.md +454 -454
  326. package/templates/languages/ERLANG.md +361 -361
  327. package/templates/languages/GO.md +645 -645
  328. package/templates/languages/HASKELL.md +177 -177
  329. package/templates/languages/JAVA.md +607 -607
  330. package/templates/languages/JAVASCRIPT.md +631 -631
  331. package/templates/languages/JULIA.md +97 -97
  332. package/templates/languages/KOTLIN.md +511 -511
  333. package/templates/languages/LISP.md +100 -100
  334. package/templates/languages/LUA.md +74 -74
  335. package/templates/languages/OBJECTIVEC.md +90 -90
  336. package/templates/languages/PHP.md +416 -416
  337. package/templates/languages/PYTHON.md +682 -682
  338. package/templates/languages/RUBY.md +421 -421
  339. package/templates/languages/RUST.md +477 -477
  340. package/templates/languages/SAS.md +73 -73
  341. package/templates/languages/SCALA.md +348 -348
  342. package/templates/languages/SOLIDITY.md +580 -580
  343. package/templates/languages/SQL.md +137 -137
  344. package/templates/languages/SWIFT.md +466 -466
  345. package/templates/languages/TYPESCRIPT.md +591 -591
  346. package/templates/languages/ZIG.md +265 -265
  347. package/templates/libraries/go/ECHO.md +18 -0
  348. package/templates/libraries/go/GIN.md +18 -0
  349. package/templates/libraries/go/GORM.md +18 -0
  350. package/templates/libraries/python/DJANGO.md +18 -0
  351. package/templates/libraries/python/FASTAPI.md +18 -0
  352. package/templates/libraries/python/FLASK.md +17 -0
  353. package/templates/libraries/python/PYDANTIC.md +17 -0
  354. package/templates/libraries/python/PYTEST.md +17 -0
  355. package/templates/libraries/python/SQLALCHEMY.md +17 -0
  356. package/templates/libraries/rust/ACTIX.md +17 -0
  357. package/templates/libraries/rust/AXUM.md +18 -0
  358. package/templates/libraries/rust/SERDE.md +16 -0
  359. package/templates/libraries/rust/SQLX.md +17 -0
  360. package/templates/libraries/rust/TOKIO.md +16 -0
  361. package/templates/libraries/typescript/ANGULAR.md +17 -0
  362. package/templates/libraries/typescript/DRIZZLE.md +16 -0
  363. package/templates/libraries/typescript/EXPRESS.md +17 -0
  364. package/templates/libraries/typescript/HEROUI.md +16 -0
  365. package/templates/libraries/typescript/JEST.md +17 -0
  366. package/templates/libraries/typescript/NESTJS.md +17 -0
  367. package/templates/libraries/typescript/NEXT.md +18 -0
  368. package/templates/libraries/typescript/PRISMA.md +16 -0
  369. package/templates/libraries/typescript/RADIX.md +16 -0
  370. package/templates/libraries/typescript/REACT.md +18 -0
  371. package/templates/libraries/typescript/SHADCN.md +16 -0
  372. package/templates/libraries/typescript/SVELTE.md +16 -0
  373. package/templates/libraries/typescript/TAILWIND.md +16 -0
  374. package/templates/libraries/typescript/TRPC.md +16 -0
  375. package/templates/libraries/typescript/VITEST.md +17 -0
  376. package/templates/libraries/typescript/VUE.md +17 -0
  377. package/templates/libraries/typescript/ZOD.md +17 -0
  378. package/templates/modules/ATLASSIAN.md +255 -255
  379. package/templates/modules/CONTEXT7.md +54 -54
  380. package/templates/modules/FIGMA.md +267 -267
  381. package/templates/modules/GITHUB_MCP.md +64 -64
  382. package/templates/modules/GRAFANA.md +328 -328
  383. package/templates/modules/MEMORY.md +126 -126
  384. package/templates/modules/NOTION.md +247 -247
  385. package/templates/modules/PLAYWRIGHT.md +90 -90
  386. package/templates/modules/RULEBOOK_MCP.md +208 -208
  387. package/templates/modules/SERENA.md +337 -337
  388. package/templates/modules/SUPABASE.md +223 -223
  389. package/templates/modules/SYNAP.md +69 -69
  390. package/templates/modules/VECTORIZER.md +63 -63
  391. package/templates/modules/sequential-thinking.md +42 -42
  392. package/templates/rules/consult-analysis-before-implementing.md +23 -23
  393. package/templates/rules/cpp.md +46 -46
  394. package/templates/rules/csharp.md +44 -44
  395. package/templates/rules/diagnostic-first.md +39 -39
  396. package/templates/rules/fail-twice-escalate.md +46 -46
  397. package/templates/rules/follow-task-sequence.md +36 -36
  398. package/templates/rules/git-safety.md +29 -29
  399. package/templates/rules/go.md +40 -40
  400. package/templates/rules/incremental-implementation.md +56 -56
  401. package/templates/rules/incremental-tests.md +29 -29
  402. package/templates/rules/java.md +43 -43
  403. package/templates/rules/javascript.md +39 -39
  404. package/templates/rules/knowledge-base-usage.md +41 -41
  405. package/templates/rules/multi-agent-teams.md +75 -75
  406. package/templates/rules/no-deferred.md +31 -31
  407. package/templates/rules/no-shortcuts.md +30 -30
  408. package/templates/rules/python.md +43 -43
  409. package/templates/rules/research-first.md +30 -30
  410. package/templates/rules/respect-handoff-trigger.md +41 -41
  411. package/templates/rules/rust.md +40 -40
  412. package/templates/rules/sequential-editing.md +21 -21
  413. package/templates/rules/session-workflow.md +24 -24
  414. package/templates/rules/task-decomposition.md +32 -32
  415. package/templates/rules/typescript.md +40 -40
  416. package/templates/skills/cli/aider/SKILL.md +59 -59
  417. package/templates/skills/cli/amazon-q/SKILL.md +35 -35
  418. package/templates/skills/cli/auggie/SKILL.md +42 -42
  419. package/templates/skills/cli/claude/SKILL.md +42 -42
  420. package/templates/skills/cli/cline/SKILL.md +42 -42
  421. package/templates/skills/cli/codebuddy/SKILL.md +30 -30
  422. package/templates/skills/cli/codeium/SKILL.md +30 -30
  423. package/templates/skills/cli/codex/SKILL.md +31 -31
  424. package/templates/skills/cli/continue/SKILL.md +44 -44
  425. package/templates/skills/cli/cursor-cli/SKILL.md +38 -38
  426. package/templates/skills/cli/factory/SKILL.md +28 -28
  427. package/templates/skills/cli/gemini/SKILL.md +45 -45
  428. package/templates/skills/cli/kilocode/SKILL.md +28 -28
  429. package/templates/skills/cli/opencode/SKILL.md +82 -28
  430. package/templates/skills/core/agent-automation/SKILL.md +194 -194
  431. package/templates/skills/core/dag/SKILL.md +314 -314
  432. package/templates/skills/core/documentation-rules/SKILL.md +46 -46
  433. package/templates/skills/core/quality-enforcement/SKILL.md +78 -78
  434. package/templates/skills/core/rulebook/SKILL.md +176 -176
  435. package/templates/skills/core/rulebook-terse/SKILL.md +116 -116
  436. package/templates/skills/core/rulebook-terse-commit/SKILL.md +96 -96
  437. package/templates/skills/core/rulebook-terse-review/SKILL.md +112 -112
  438. package/templates/skills/dev/accessibility/SKILL.md +17 -17
  439. package/templates/skills/dev/analysis/SKILL.md +19 -19
  440. package/templates/skills/dev/api-design/SKILL.md +15 -15
  441. package/templates/skills/dev/architect/SKILL.md +17 -17
  442. package/templates/skills/dev/build-fix/SKILL.md +17 -17
  443. package/templates/skills/dev/db-design/SKILL.md +15 -15
  444. package/templates/skills/dev/debug/SKILL.md +16 -16
  445. package/templates/skills/dev/deploy/SKILL.md +17 -17
  446. package/templates/skills/dev/docs/SKILL.md +17 -17
  447. package/templates/skills/dev/handoff/SKILL.md +27 -27
  448. package/templates/skills/dev/migrate/SKILL.md +15 -15
  449. package/templates/skills/dev/perf/SKILL.md +17 -17
  450. package/templates/skills/dev/refactor/SKILL.md +17 -17
  451. package/templates/skills/dev/research/SKILL.md +14 -14
  452. package/templates/skills/dev/review/SKILL.md +18 -18
  453. package/templates/skills/dev/security-audit/SKILL.md +17 -17
  454. package/templates/skills/dev/spec/SKILL.md +65 -0
  455. package/templates/skills/ides/copilot/SKILL.md +47 -47
  456. package/templates/skills/ides/cursor/SKILL.md +53 -53
  457. package/templates/skills/ides/jetbrains-ai/SKILL.md +45 -45
  458. package/templates/skills/ides/replit/SKILL.md +46 -46
  459. package/templates/skills/ides/tabnine/SKILL.md +39 -39
  460. package/templates/skills/ides/vscode/SKILL.md +50 -50
  461. package/templates/skills/ides/windsurf/SKILL.md +46 -46
  462. package/templates/skills/ides/zed/SKILL.md +42 -42
  463. package/templates/skills/languages/c/SKILL.md +343 -343
  464. package/templates/skills/languages/cpp/SKILL.md +753 -753
  465. package/templates/skills/languages/csharp/SKILL.md +427 -427
  466. package/templates/skills/languages/elixir/SKILL.md +464 -464
  467. package/templates/skills/languages/erlang/SKILL.md +371 -371
  468. package/templates/skills/languages/go/SKILL.md +655 -655
  469. package/templates/skills/languages/haskell/SKILL.md +187 -187
  470. package/templates/skills/languages/java/SKILL.md +617 -617
  471. package/templates/skills/languages/javascript/SKILL.md +641 -641
  472. package/templates/skills/languages/julia/SKILL.md +107 -107
  473. package/templates/skills/languages/kotlin/SKILL.md +521 -521
  474. package/templates/skills/languages/lisp/SKILL.md +110 -110
  475. package/templates/skills/languages/lua/SKILL.md +84 -84
  476. package/templates/skills/languages/objectivec/SKILL.md +100 -100
  477. package/templates/skills/languages/php/SKILL.md +426 -426
  478. package/templates/skills/languages/python/SKILL.md +692 -692
  479. package/templates/skills/languages/ruby/SKILL.md +431 -431
  480. package/templates/skills/languages/rust/SKILL.md +487 -487
  481. package/templates/skills/languages/sas/SKILL.md +83 -83
  482. package/templates/skills/languages/scala/SKILL.md +358 -358
  483. package/templates/skills/languages/solidity/SKILL.md +590 -590
  484. package/templates/skills/languages/sql/SKILL.md +147 -147
  485. package/templates/skills/languages/swift/SKILL.md +476 -476
  486. package/templates/skills/languages/typescript/SKILL.md +302 -302
  487. package/templates/skills/languages/zig/SKILL.md +275 -275
  488. package/templates/skills/modules/atlassian/SKILL.md +265 -265
  489. package/templates/skills/modules/context7/SKILL.md +64 -64
  490. package/templates/skills/modules/figma/SKILL.md +277 -277
  491. package/templates/skills/modules/github-mcp/SKILL.md +74 -74
  492. package/templates/skills/modules/grafana/SKILL.md +338 -338
  493. package/templates/skills/modules/memory/SKILL.md +73 -73
  494. package/templates/skills/modules/notion/SKILL.md +257 -257
  495. package/templates/skills/modules/playwright/SKILL.md +100 -100
  496. package/templates/skills/modules/rulebook-mcp/SKILL.md +166 -166
  497. package/templates/skills/modules/serena/SKILL.md +347 -347
  498. package/templates/skills/modules/supabase/SKILL.md +233 -233
  499. package/templates/skills/modules/synap/SKILL.md +79 -79
  500. package/templates/skills/modules/vectorizer/SKILL.md +73 -73
  501. package/.claude/commands/ralph-config.md +0 -112
  502. package/.claude/commands/ralph-history.md +0 -110
  503. package/.claude/commands/ralph-init.md +0 -72
  504. package/.claude/commands/ralph-pause-resume.md +0 -105
  505. package/.claude/commands/ralph-run.md +0 -101
  506. package/.claude/commands/ralph-status.md +0 -76
  507. package/dist/agents/ralph-parser.d.ts +0 -91
  508. package/dist/agents/ralph-parser.d.ts.map +0 -1
  509. package/dist/agents/ralph-parser.js +0 -415
  510. package/dist/agents/ralph-parser.js.map +0 -1
  511. package/dist/cli/commands/analysis.d.ts +0 -8
  512. package/dist/cli/commands/analysis.d.ts.map +0 -1
  513. package/dist/cli/commands/analysis.js +0 -78
  514. package/dist/cli/commands/analysis.js.map +0 -1
  515. package/dist/cli/commands/compress.d.ts +0 -18
  516. package/dist/cli/commands/compress.d.ts.map +0 -1
  517. package/dist/cli/commands/compress.js +0 -100
  518. package/dist/cli/commands/compress.js.map +0 -1
  519. package/dist/cli/commands/ralph.d.ts +0 -45
  520. package/dist/cli/commands/ralph.d.ts.map +0 -1
  521. package/dist/cli/commands/ralph.js +0 -694
  522. package/dist/cli/commands/ralph.js.map +0 -1
  523. package/dist/cli/docs-prompts.d.ts +0 -3
  524. package/dist/cli/docs-prompts.d.ts.map +0 -1
  525. package/dist/cli/docs-prompts.js +0 -45
  526. package/dist/cli/docs-prompts.js.map +0 -1
  527. package/dist/core/agent-manager.d.ts +0 -69
  528. package/dist/core/agent-manager.d.ts.map +0 -1
  529. package/dist/core/agent-manager.js +0 -476
  530. package/dist/core/agent-manager.js.map +0 -1
  531. package/dist/core/agent-template-engine.d.ts +0 -51
  532. package/dist/core/agent-template-engine.d.ts.map +0 -1
  533. package/dist/core/agent-template-engine.js +0 -291
  534. package/dist/core/agent-template-engine.js.map +0 -1
  535. package/dist/core/analysis-manager.d.ts +0 -56
  536. package/dist/core/analysis-manager.d.ts.map +0 -1
  537. package/dist/core/analysis-manager.js +0 -218
  538. package/dist/core/analysis-manager.js.map +0 -1
  539. package/dist/core/auto-fixer.d.ts +0 -14
  540. package/dist/core/auto-fixer.d.ts.map +0 -1
  541. package/dist/core/auto-fixer.js +0 -207
  542. package/dist/core/auto-fixer.js.map +0 -1
  543. package/dist/core/changelog-generator.d.ts +0 -44
  544. package/dist/core/changelog-generator.d.ts.map +0 -1
  545. package/dist/core/changelog-generator.js +0 -222
  546. package/dist/core/changelog-generator.js.map +0 -1
  547. package/dist/core/claude-mcp.d.ts.map +0 -1
  548. package/dist/core/claude-mcp.js.map +0 -1
  549. package/dist/core/claude-md-generator.d.ts.map +0 -1
  550. package/dist/core/claude-md-generator.js.map +0 -1
  551. package/dist/core/claude-settings-manager.d.ts.map +0 -1
  552. package/dist/core/claude-settings-manager.js.map +0 -1
  553. package/dist/core/cli-bridge.d.ts.map +0 -1
  554. package/dist/core/cli-bridge.js.map +0 -1
  555. package/dist/core/compact-context-manager.d.ts +0 -34
  556. package/dist/core/compact-context-manager.d.ts.map +0 -1
  557. package/dist/core/compact-context-manager.js +0 -60
  558. package/dist/core/compact-context-manager.js.map +0 -1
  559. package/dist/core/complexity-detector.d.ts +0 -36
  560. package/dist/core/complexity-detector.d.ts.map +0 -1
  561. package/dist/core/complexity-detector.js +0 -334
  562. package/dist/core/complexity-detector.js.map +0 -1
  563. package/dist/core/compress/compressor.d.ts +0 -60
  564. package/dist/core/compress/compressor.d.ts.map +0 -1
  565. package/dist/core/compress/compressor.js +0 -232
  566. package/dist/core/compress/compressor.js.map +0 -1
  567. package/dist/core/compress/discover.d.ts +0 -19
  568. package/dist/core/compress/discover.d.ts.map +0 -1
  569. package/dist/core/compress/discover.js +0 -100
  570. package/dist/core/compress/discover.js.map +0 -1
  571. package/dist/core/compress/validator.d.ts +0 -47
  572. package/dist/core/compress/validator.d.ts.map +0 -1
  573. package/dist/core/compress/validator.js +0 -131
  574. package/dist/core/compress/validator.js.map +0 -1
  575. package/dist/core/config-manager.d.ts.map +0 -1
  576. package/dist/core/config-manager.js.map +0 -1
  577. package/dist/core/coverage-checker.d.ts.map +0 -1
  578. package/dist/core/coverage-checker.js.map +0 -1
  579. package/dist/core/cursor-mdc-generator.d.ts +0 -30
  580. package/dist/core/cursor-mdc-generator.d.ts.map +0 -1
  581. package/dist/core/cursor-mdc-generator.js +0 -98
  582. package/dist/core/cursor-mdc-generator.js.map +0 -1
  583. package/dist/core/decision-manager.d.ts.map +0 -1
  584. package/dist/core/decision-manager.js.map +0 -1
  585. package/dist/core/dependency-checker.d.ts.map +0 -1
  586. package/dist/core/dependency-checker.js.map +0 -1
  587. package/dist/core/detector.d.ts.map +0 -1
  588. package/dist/core/detector.js +0 -1763
  589. package/dist/core/detector.js.map +0 -1
  590. package/dist/core/docs-generator.d.ts.map +0 -1
  591. package/dist/core/docs-generator.js.map +0 -1
  592. package/dist/core/doctor.d.ts.map +0 -1
  593. package/dist/core/doctor.js.map +0 -1
  594. package/dist/core/generator.d.ts.map +0 -1
  595. package/dist/core/generator.js.map +0 -1
  596. package/dist/core/github-issues-importer.d.ts +0 -82
  597. package/dist/core/github-issues-importer.d.ts.map +0 -1
  598. package/dist/core/github-issues-importer.js +0 -161
  599. package/dist/core/github-issues-importer.js.map +0 -1
  600. package/dist/core/gitignore-generator.d.ts.map +0 -1
  601. package/dist/core/gitignore-generator.js.map +0 -1
  602. package/dist/core/health-scorer.d.ts +0 -61
  603. package/dist/core/health-scorer.d.ts.map +0 -1
  604. package/dist/core/health-scorer.js +0 -638
  605. package/dist/core/health-scorer.js.map +0 -1
  606. package/dist/core/iteration-tracker.d.ts +0 -85
  607. package/dist/core/iteration-tracker.d.ts.map +0 -1
  608. package/dist/core/iteration-tracker.js +0 -295
  609. package/dist/core/iteration-tracker.js.map +0 -1
  610. package/dist/core/knowledge-manager.d.ts.map +0 -1
  611. package/dist/core/knowledge-manager.js.map +0 -1
  612. package/dist/core/learn-manager.d.ts.map +0 -1
  613. package/dist/core/learn-manager.js.map +0 -1
  614. package/dist/core/mcp-reference-generator.d.ts.map +0 -1
  615. package/dist/core/mcp-reference-generator.js.map +0 -1
  616. package/dist/core/minimal-scaffolder.d.ts.map +0 -1
  617. package/dist/core/minimal-scaffolder.js.map +0 -1
  618. package/dist/core/modern-console.d.ts +0 -98
  619. package/dist/core/modern-console.d.ts.map +0 -1
  620. package/dist/core/modern-console.js +0 -556
  621. package/dist/core/modern-console.js.map +0 -1
  622. package/dist/core/multi-tool-generator.d.ts.map +0 -1
  623. package/dist/core/multi-tool-generator.js.map +0 -1
  624. package/dist/core/override-manager.d.ts.map +0 -1
  625. package/dist/core/override-manager.js.map +0 -1
  626. package/dist/core/plans-manager.d.ts.map +0 -1
  627. package/dist/core/plans-manager.js.map +0 -1
  628. package/dist/core/prd-generator.d.ts +0 -48
  629. package/dist/core/prd-generator.d.ts.map +0 -1
  630. package/dist/core/prd-generator.js +0 -233
  631. package/dist/core/prd-generator.js.map +0 -1
  632. package/dist/core/ralph-manager.d.ts +0 -163
  633. package/dist/core/ralph-manager.d.ts.map +0 -1
  634. package/dist/core/ralph-manager.js +0 -555
  635. package/dist/core/ralph-manager.js.map +0 -1
  636. package/dist/core/ralph-parallel.d.ts +0 -55
  637. package/dist/core/ralph-parallel.d.ts.map +0 -1
  638. package/dist/core/ralph-parallel.js +0 -201
  639. package/dist/core/ralph-parallel.js.map +0 -1
  640. package/dist/core/ralph-plan-checkpoint.d.ts +0 -58
  641. package/dist/core/ralph-plan-checkpoint.d.ts.map +0 -1
  642. package/dist/core/ralph-plan-checkpoint.js +0 -154
  643. package/dist/core/ralph-plan-checkpoint.js.map +0 -1
  644. package/dist/core/ralph-scripts.d.ts +0 -12
  645. package/dist/core/ralph-scripts.d.ts.map +0 -1
  646. package/dist/core/ralph-scripts.js +0 -50
  647. package/dist/core/ralph-scripts.js.map +0 -1
  648. package/dist/core/review-manager.d.ts +0 -74
  649. package/dist/core/review-manager.d.ts.map +0 -1
  650. package/dist/core/review-manager.js +0 -371
  651. package/dist/core/review-manager.js.map +0 -1
  652. package/dist/core/rules-generator.d.ts.map +0 -1
  653. package/dist/core/rules-generator.js.map +0 -1
  654. package/dist/core/skills-manager.d.ts.map +0 -1
  655. package/dist/core/skills-manager.js.map +0 -1
  656. package/dist/core/state-writer.d.ts.map +0 -1
  657. package/dist/core/state-writer.js.map +0 -1
  658. package/dist/core/task-manager.d.ts.map +0 -1
  659. package/dist/core/task-manager.js.map +0 -1
  660. package/dist/core/telemetry.d.ts +0 -29
  661. package/dist/core/telemetry.d.ts.map +0 -1
  662. package/dist/core/telemetry.js +0 -57
  663. package/dist/core/telemetry.js.map +0 -1
  664. package/dist/core/validator.d.ts.map +0 -1
  665. package/dist/core/validator.js.map +0 -1
  666. package/dist/core/version-bumper.d.ts.map +0 -1
  667. package/dist/core/version-bumper.js.map +0 -1
  668. package/dist/core/watcher.d.ts +0 -9
  669. package/dist/core/watcher.d.ts.map +0 -1
  670. package/dist/core/watcher.js +0 -22
  671. package/dist/core/watcher.js.map +0 -1
  672. package/dist/core/workflow-generator.d.ts.map +0 -1
  673. package/dist/core/workflow-generator.js.map +0 -1
  674. package/dist/hooks/terse-activate.d.ts +0 -59
  675. package/dist/hooks/terse-activate.d.ts.map +0 -1
  676. package/dist/hooks/terse-activate.js +0 -149
  677. package/dist/hooks/terse-activate.js.map +0 -1
  678. package/dist/hooks/terse-config.d.ts +0 -51
  679. package/dist/hooks/terse-config.d.ts.map +0 -1
  680. package/dist/hooks/terse-config.js +0 -130
  681. package/dist/hooks/terse-config.js.map +0 -1
  682. package/dist/hooks/terse-mode-tracker.d.ts +0 -78
  683. package/dist/hooks/terse-mode-tracker.d.ts.map +0 -1
  684. package/dist/hooks/terse-mode-tracker.js +0 -213
  685. package/dist/hooks/terse-mode-tracker.js.map +0 -1
  686. package/dist/memory/hnsw-index.d.ts +0 -68
  687. package/dist/memory/hnsw-index.d.ts.map +0 -1
  688. package/dist/memory/hnsw-index.js +0 -544
  689. package/dist/memory/hnsw-index.js.map +0 -1
  690. package/dist/memory/memory-cache.d.ts +0 -33
  691. package/dist/memory/memory-cache.d.ts.map +0 -1
  692. package/dist/memory/memory-cache.js +0 -85
  693. package/dist/memory/memory-cache.js.map +0 -1
  694. package/dist/memory/memory-search.d.ts +0 -42
  695. package/dist/memory/memory-search.d.ts.map +0 -1
  696. package/dist/memory/memory-search.js +0 -180
  697. package/dist/memory/memory-search.js.map +0 -1
  698. package/dist/memory/memory-store.d.ts +0 -84
  699. package/dist/memory/memory-store.d.ts.map +0 -1
  700. package/dist/memory/memory-store.js +0 -566
  701. package/dist/memory/memory-store.js.map +0 -1
  702. package/dist/memory/memory-vectorizer.d.ts +0 -29
  703. package/dist/memory/memory-vectorizer.d.ts.map +0 -1
  704. package/dist/memory/memory-vectorizer.js +0 -199
  705. package/dist/memory/memory-vectorizer.js.map +0 -1
  706. package/templates/core/RALPH.md +0 -471
  707. package/templates/frameworks/ANGULAR.md +0 -36
  708. package/templates/frameworks/DJANGO.md +0 -83
  709. package/templates/frameworks/ELECTRON.md +0 -147
  710. package/templates/frameworks/FLASK.md +0 -38
  711. package/templates/frameworks/FLUTTER.md +0 -55
  712. package/templates/frameworks/JQUERY.md +0 -32
  713. package/templates/frameworks/LARAVEL.md +0 -38
  714. package/templates/frameworks/NESTJS.md +0 -43
  715. package/templates/frameworks/NEXTJS.md +0 -127
  716. package/templates/frameworks/NUXT.md +0 -40
  717. package/templates/frameworks/RAILS.md +0 -66
  718. package/templates/frameworks/REACT.md +0 -38
  719. package/templates/frameworks/REACT_NATIVE.md +0 -47
  720. package/templates/frameworks/SPRING.md +0 -39
  721. package/templates/frameworks/SYMFONY.md +0 -36
  722. package/templates/frameworks/VUE.md +0 -36
  723. package/templates/frameworks/ZEND.md +0 -35
  724. package/templates/hooks/enforce-mcp-for-tasks.sh +0 -31
  725. package/templates/hooks/enforce-no-deferred.sh +0 -21
  726. package/templates/hooks/enforce-no-shortcuts.sh +0 -31
  727. package/templates/ides/COPILOT.md +0 -37
  728. package/templates/ides/CURSOR.md +0 -43
  729. package/templates/ides/JETBRAINS_AI.md +0 -35
  730. package/templates/ides/REPLIT.md +0 -36
  731. package/templates/ides/TABNINE.md +0 -29
  732. package/templates/ides/VSCODE.md +0 -40
  733. package/templates/ides/WINDSURF.md +0 -36
  734. package/templates/ides/ZED.md +0 -32
  735. package/templates/ides/cursor-mdc/go.mdc +0 -24
  736. package/templates/ides/cursor-mdc/python.mdc +0 -24
  737. package/templates/ides/cursor-mdc/quality.mdc +0 -25
  738. package/templates/ides/cursor-mdc/ralph.mdc +0 -39
  739. package/templates/ides/cursor-mdc/rulebook.mdc +0 -38
  740. package/templates/ides/cursor-mdc/rust.mdc +0 -24
  741. package/templates/ides/cursor-mdc/typescript.mdc +0 -25
  742. package/templates/ralph/ralph-history.bat +0 -4
  743. package/templates/ralph/ralph-history.sh +0 -5
  744. package/templates/ralph/ralph-init.bat +0 -5
  745. package/templates/ralph/ralph-init.sh +0 -5
  746. package/templates/ralph/ralph-pause.bat +0 -5
  747. package/templates/ralph/ralph-pause.sh +0 -5
  748. package/templates/ralph/ralph-run.bat +0 -5
  749. package/templates/ralph/ralph-run.sh +0 -5
  750. package/templates/ralph/ralph-status.bat +0 -4
  751. package/templates/ralph/ralph-status.sh +0 -5
  752. package/templates/services/AZURE_BLOB.md +0 -184
  753. package/templates/services/CASSANDRA.md +0 -239
  754. package/templates/services/DATADOG.md +0 -26
  755. package/templates/services/DOCKER.md +0 -124
  756. package/templates/services/DOCKER_COMPOSE.md +0 -168
  757. package/templates/services/DYNAMODB.md +0 -308
  758. package/templates/services/ELASTICSEARCH.md +0 -347
  759. package/templates/services/GCS.md +0 -178
  760. package/templates/services/HELM.md +0 -194
  761. package/templates/services/INFLUXDB.md +0 -265
  762. package/templates/services/KAFKA.md +0 -341
  763. package/templates/services/KUBERNETES.md +0 -208
  764. package/templates/services/MARIADB.md +0 -183
  765. package/templates/services/MEMCACHED.md +0 -242
  766. package/templates/services/MINIO.md +0 -201
  767. package/templates/services/MONGODB.md +0 -268
  768. package/templates/services/MYSQL.md +0 -358
  769. package/templates/services/NEO4J.md +0 -247
  770. package/templates/services/OPENTELEMETRY.md +0 -25
  771. package/templates/services/ORACLE.md +0 -290
  772. package/templates/services/PINO.md +0 -24
  773. package/templates/services/POSTGRESQL.md +0 -326
  774. package/templates/services/PROMETHEUS.md +0 -33
  775. package/templates/services/RABBITMQ.md +0 -286
  776. package/templates/services/REDIS.md +0 -292
  777. package/templates/services/S3.md +0 -298
  778. package/templates/services/SENTRY.md +0 -23
  779. package/templates/services/SQLITE.md +0 -294
  780. package/templates/services/SQLSERVER.md +0 -294
  781. package/templates/services/WINSTON.md +0 -30
  782. package/templates/skills/frameworks/angular/SKILL.md +0 -46
  783. package/templates/skills/frameworks/django/SKILL.md +0 -93
  784. package/templates/skills/frameworks/electron/SKILL.md +0 -157
  785. package/templates/skills/frameworks/flask/SKILL.md +0 -48
  786. package/templates/skills/frameworks/flutter/SKILL.md +0 -65
  787. package/templates/skills/frameworks/jquery/SKILL.md +0 -42
  788. package/templates/skills/frameworks/laravel/SKILL.md +0 -48
  789. package/templates/skills/frameworks/nestjs/SKILL.md +0 -53
  790. package/templates/skills/frameworks/nextjs/SKILL.md +0 -137
  791. package/templates/skills/frameworks/nuxt/SKILL.md +0 -50
  792. package/templates/skills/frameworks/rails/SKILL.md +0 -76
  793. package/templates/skills/frameworks/react/SKILL.md +0 -48
  794. package/templates/skills/frameworks/react-native/SKILL.md +0 -57
  795. package/templates/skills/frameworks/spring/SKILL.md +0 -49
  796. package/templates/skills/frameworks/symfony/SKILL.md +0 -46
  797. package/templates/skills/frameworks/vue/SKILL.md +0 -46
  798. package/templates/skills/frameworks/zend/SKILL.md +0 -45
  799. package/templates/skills/services/azure-blob/SKILL.md +0 -194
  800. package/templates/skills/services/cassandra/SKILL.md +0 -249
  801. package/templates/skills/services/dynamodb/SKILL.md +0 -318
  802. package/templates/skills/services/elasticsearch/SKILL.md +0 -357
  803. package/templates/skills/services/gcs/SKILL.md +0 -188
  804. package/templates/skills/services/influxdb/SKILL.md +0 -275
  805. package/templates/skills/services/kafka/SKILL.md +0 -351
  806. package/templates/skills/services/mariadb/SKILL.md +0 -193
  807. package/templates/skills/services/memcached/SKILL.md +0 -252
  808. package/templates/skills/services/minio/SKILL.md +0 -211
  809. package/templates/skills/services/mongodb/SKILL.md +0 -278
  810. package/templates/skills/services/mysql/SKILL.md +0 -368
  811. package/templates/skills/services/neo4j/SKILL.md +0 -257
  812. package/templates/skills/services/oracle/SKILL.md +0 -300
  813. package/templates/skills/services/postgresql/SKILL.md +0 -336
  814. package/templates/skills/services/rabbitmq/SKILL.md +0 -296
  815. package/templates/skills/services/redis/SKILL.md +0 -302
  816. package/templates/skills/services/s3/SKILL.md +0 -308
  817. package/templates/skills/services/sqlite/SKILL.md +0 -304
  818. package/templates/skills/services/sqlserver/SKILL.md +0 -304
  819. package/templates/skills/workflows/ralph/SETUP.md +0 -228
  820. package/templates/skills/workflows/ralph/SKILL.md +0 -309
  821. package/templates/skills/workflows/ralph/install.sh +0 -87
  822. package/templates/skills/workflows/ralph/manifest.json +0 -158
  823. /package/dist/core/{claude-md-generator.d.ts → claude/claude-md-generator.d.ts} +0 -0
  824. /package/dist/core/{docs-generator.d.ts → docs/docs-generator.d.ts} +0 -0
  825. /package/dist/core/{mcp-reference-generator.d.ts → docs/mcp-reference-generator.d.ts} +0 -0
  826. /package/dist/core/{minimal-scaffolder.d.ts → generators/minimal-scaffolder.d.ts} +0 -0
  827. /package/dist/core/{coverage-checker.d.ts → quality/coverage-checker.d.ts} +0 -0
  828. /package/dist/core/{dependency-checker.d.ts → quality/dependency-checker.d.ts} +0 -0
  829. /package/dist/core/{doctor.d.ts → quality/doctor.d.ts} +0 -0
  830. /package/dist/core/{validator.d.ts → quality/validator.d.ts} +0 -0
  831. /package/dist/core/{override-manager.d.ts → state/override-manager.d.ts} +0 -0
  832. /package/dist/core/{version-bumper.d.ts → state/version-bumper.d.ts} +0 -0
  833. /package/dist/core/{plans-manager.d.ts → tasks/plans-manager.d.ts} +0 -0
  834. /package/dist/core/{task-manager.d.ts → tasks/task-manager.d.ts} +0 -0
@@ -1,682 +1,682 @@
1
- <!-- PYTHON:START -->
2
- # Python 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
- ruff format --check . # Format check
11
- ruff check . # Linting
12
- mypy . # Type checking
13
- pytest # All tests (100% pass required)
14
- pytest --cov # Coverage check (95%+ required)
15
-
16
- # Security audit:
17
- pip-audit # Vulnerability scan
18
- pip list --outdated # Check outdated deps
19
- ```
20
-
21
- ## Python Version
22
-
23
- **CRITICAL**: Use Python 3.11+ for modern features and performance.
24
-
25
- - **Minimum Version**: Python 3.11+
26
- - **Recommended**: Python 3.12+
27
- - **Type Hints**: Required for all public APIs
28
-
29
- ### Formatting
30
-
31
- - Use `ruff format` (fast, modern) or `black` (traditional)
32
- - Line length: 100 characters (configurable)
33
- - Consistent formatting across entire project
34
- - Format before committing
35
-
36
- Configuration in `pyproject.toml`:
37
- ```toml
38
- [tool.ruff]
39
- line-length = 100
40
- target-version = "py311"
41
-
42
- [tool.ruff.format]
43
- quote-style = "double"
44
- indent-style = "space"
45
- ```
46
-
47
- ### Linting
48
-
49
- - Use `ruff check` (fast, comprehensive) or `ruff` + `flake8`
50
- - Fix all linting errors before committing
51
- - Document any disabled rules with justification
52
-
53
- Configuration in `pyproject.toml`:
54
- ```toml
55
- [tool.ruff.lint]
56
- select = ["E", "F", "I", "N", "W", "UP", "B", "A", "C4", "SIM"]
57
- ignore = ["E501"] # Line too long (handled by formatter)
58
-
59
- [tool.ruff.lint.per-file-ignores]
60
- "tests/*" = ["S101"] # Allow assert in tests
61
- ```
62
-
63
- ### Type Checking
64
-
65
- - Use `mypy` for static type checking
66
- - All public APIs must have type hints
67
- - Use `typing` module for complex types
68
- - Gradual typing allowed for legacy code
69
-
70
- Configuration in `pyproject.toml`:
71
- ```toml
72
- [tool.mypy]
73
- python_version = "3.11"
74
- strict = true
75
- warn_return_any = true
76
- warn_unused_configs = true
77
- disallow_untyped_defs = true
78
- ```
79
-
80
- Example:
81
- ```python
82
- from typing import Optional, List, Dict, Any
83
-
84
- def process_data(
85
- input_data: str,
86
- options: Optional[Dict[str, Any]] = None
87
- ) -> List[str]:
88
- """Process input data and return results."""
89
- # Implementation
90
- return []
91
- ```
92
-
93
- ### Testing
94
-
95
- - **Framework**: pytest
96
- - **Location**: `/tests` directory
97
- - **Coverage**: Must meet project threshold (default 95%)
98
- - **Fixtures**: Use pytest fixtures for setup/teardown
99
- - **Parametrize**: Use `@pytest.mark.parametrize` for multiple test cases
100
-
101
- Example test structure:
102
- ```python
103
- import pytest
104
- from mymodule import process_data
105
-
106
- @pytest.fixture
107
- def sample_data():
108
- """Provide sample data for tests."""
109
- return "test input"
110
-
111
- def test_process_data_valid_input(sample_data):
112
- """Test process_data with valid input."""
113
- result = process_data(sample_data)
114
- assert result == ["expected"]
115
-
116
- @pytest.mark.parametrize("input_val,expected", [
117
- ("hello", ["HELLO"]),
118
- ("world", ["WORLD"]),
119
- ])
120
- def test_process_data_parametrized(input_val, expected):
121
- """Test multiple input cases."""
122
- result = process_data(input_val)
123
- assert result == expected
124
- ```
125
-
126
- ### Test Categories: S2S and Slow Tests
127
-
128
- **CRITICAL**: Tests must be categorized based on execution time and dependencies.
129
-
130
- #### Test Time Limits
131
-
132
- - **Fast Tests**: Must complete in ≤ 10-20 seconds
133
- - **Slow Tests**: Any test taking > 10-20 seconds must be marked as slow
134
- - **S2S Tests**: Tests requiring active server/database must be isolated and run on-demand
135
-
136
- #### S2S (Server-to-Server) Tests
137
-
138
- **Tests that require active servers, databases, or external services must be isolated using pytest markers.**
139
-
140
- **Implementation**:
141
-
142
- 1. **Mark S2S tests with pytest markers**:
143
- ```python
144
- import pytest
145
- import os
146
-
147
- # Regular fast test (always runs)
148
- def test_local_computation():
149
- """Fast test, no external dependencies."""
150
- result = compute_locally("input")
151
- assert result == "expected"
152
-
153
- # S2S test (only runs with -m s2s)
154
- @pytest.mark.s2s
155
- def test_database_connection():
156
- """Requires active database server."""
157
- db = connect_to_database()
158
- # ... test implementation
159
-
160
- @pytest.mark.s2s
161
- def test_api_integration():
162
- """Requires active API server."""
163
- client = create_api_client()
164
- # ... test implementation
165
- ```
166
-
167
- 2. **Configure `pytest.ini` or `pyproject.toml`**:
168
- ```ini
169
- # pytest.ini
170
- [pytest]
171
- markers =
172
- s2s: Server-to-server tests requiring active services
173
- slow: Slow tests taking > 20 seconds
174
- ```
175
-
176
- Or in `pyproject.toml`:
177
- ```toml
178
- [tool.pytest.ini_options]
179
- markers = [
180
- "s2s: Server-to-server tests requiring active services",
181
- "slow: Slow tests taking > 20 seconds",
182
- ]
183
- ```
184
-
185
- 3. **Run tests**:
186
- ```bash
187
- # Regular tests (excludes S2S)
188
- pytest
189
-
190
- # Include S2S tests (requires active servers)
191
- pytest -m s2s
192
-
193
- # Run all tests including S2S
194
- pytest -m "not slow" # Fast + S2S, excludes slow
195
- ```
196
-
197
- #### Slow Tests
198
-
199
- **Tests that take > 10-20 seconds must be marked and run separately.**
200
-
201
- **Implementation**:
202
-
203
- 1. **Mark slow tests with pytest markers**:
204
- ```python
205
- import pytest
206
-
207
- # Fast test (always runs)
208
- def test_quick_operation():
209
- """Completes in < 1 second."""
210
- result = quick_compute("input")
211
- assert result == "expected"
212
-
213
- # Slow test (only runs with -m slow)
214
- @pytest.mark.slow
215
- def test_heavy_computation():
216
- """Takes 30+ seconds."""
217
- # Heavy processing, large dataset, etc.
218
- result = process_large_dataset()
219
- assert result is not None
220
-
221
- @pytest.mark.slow
222
- def test_large_file_processing():
223
- """Processes large files, takes > 20 seconds."""
224
- result = process_file("large_file.dat")
225
- assert result.success
226
- ```
227
-
228
- 2. **Run tests**:
229
- ```bash
230
- # Regular tests (excludes slow and S2S)
231
- pytest -m "not slow and not s2s"
232
-
233
- # Include slow tests
234
- pytest -m slow
235
-
236
- # Run all tests
237
- pytest -m "" # Empty marker means all tests
238
- ```
239
-
240
- 3. **Add pytest configuration for timeouts**:
241
- ```python
242
- # conftest.py
243
- import pytest
244
-
245
- @pytest.fixture(autouse=True)
246
- def configure_timeouts(request):
247
- """Configure timeouts based on test markers."""
248
- if 'slow' in request.keywords:
249
- request.node.add_marker(pytest.mark.timeout(300)) # 5 minutes
250
- elif 's2s' in request.keywords:
251
- request.node.add_marker(pytest.mark.timeout(60)) # 1 minute
252
- else:
253
- request.node.add_marker(pytest.mark.timeout(20)) # 20 seconds
254
- ```
255
-
256
- 4. **Add scripts in `pyproject.toml` or `setup.py`**:
257
- ```toml
258
- [tool.poetry.scripts]
259
- test = "pytest -m 'not slow and not s2s'"
260
- test-s2s = "pytest -m s2s"
261
- test-slow = "pytest -m slow"
262
- test-all = "pytest"
263
- ```
264
-
265
- #### Best Practices
266
-
267
- - ✅ **Always run fast tests** in CI/CD by default
268
- - ✅ **Isolate S2S tests** - never run them in standard test suite
269
- - ✅ **Mark slow tests** - prevent CI/CD timeouts
270
- - ✅ **Document requirements** - specify which servers/services are needed for S2S tests
271
- - ✅ **Use timeouts** - Set appropriate timeouts: `@pytest.mark.timeout(60)`
272
- - ✅ **Use pytest markers** - `@pytest.mark.s2s` and `@pytest.mark.slow`
273
- - ✅ **Skip conditionally** - `@pytest.mark.skipif(not os.getenv('RUN_S2S_TESTS'), reason='S2S tests disabled')`
274
- - ❌ **Never mix** fast and slow/S2S tests in same test run
275
- - ❌ **Never require** external services for standard test suite
276
- - ❌ **Never exceed** 10-20 seconds for regular tests
277
-
278
- ## Dependency Management
279
-
280
- **CRITICAL**: Use modern dependency management tools.
281
-
282
- ### Recommended: Poetry
283
-
284
- ```toml
285
- [tool.poetry]
286
- name = "myproject"
287
- version = "0.1.0"
288
- description = ""
289
- authors = ["Your Name <you@example.com>"]
290
-
291
- [tool.poetry.dependencies]
292
- python = "^3.11"
293
- requests = "^2.31.0"
294
-
295
- [tool.poetry.group.dev.dependencies]
296
- pytest = "^7.4.0"
297
- mypy = "^1.5.0"
298
- ruff = "^0.1.0"
299
- ```
300
-
301
- Commands:
302
- ```bash
303
- poetry install # Install dependencies
304
- poetry add requests # Add dependency
305
- poetry add --group dev pytest # Add dev dependency
306
- poetry update # Update dependencies
307
- ```
308
-
309
- ### Alternative: pip-tools
310
-
311
- ```
312
- # requirements.in
313
- requests>=2.31.0
314
- pydantic>=2.0.0
315
-
316
- # requirements-dev.in
317
- -r requirements.in
318
- pytest>=7.4.0
319
- mypy>=1.5.0
320
- ```
321
-
322
- Commands:
323
- ```bash
324
- pip-compile requirements.in
325
- pip-compile requirements-dev.in
326
- pip-sync requirements-dev.txt
327
- ```
328
-
329
- ### Dependency Guidelines
330
-
331
- 1. **Check for latest versions**:
332
- - Use Context7 MCP tool if available
333
- - Check PyPI: `pip index versions <package>`
334
- - Review changelog for breaking changes
335
-
336
- 2. **Version pinning**:
337
- - ✅ Pin exact versions in applications
338
- - ✅ Use ranges in libraries (`>=1.0,<2.0`)
339
- - ✅ Keep dependencies updated regularly
340
- - ❌ Don't use outdated packages with security issues
341
-
342
- ## Error Handling
343
-
344
- - Use specific exception types
345
- - Create custom exceptions when needed
346
- - Document exceptions in docstrings
347
- - Never use bare `except:`
348
-
349
- Example:
350
- ```python
351
- class ValidationError(Exception):
352
- """Raised when data validation fails."""
353
-
354
- def __init__(self, message: str, field: str):
355
- super().__init__(message)
356
- self.field = field
357
-
358
- def validate_data(data: dict[str, Any]) -> None:
359
- """
360
- Validate input data.
361
-
362
- Args:
363
- data: The data to validate
364
-
365
- Raises:
366
- ValidationError: If validation fails
367
- """
368
- if not isinstance(data, dict):
369
- raise ValidationError("Data must be a dictionary", "data")
370
- ```
371
-
372
- ## Documentation
373
-
374
- - **Docstrings**: Google or NumPy style
375
- - **Type hints**: Required for public APIs
376
- - **README**: Include installation and usage
377
- - **API docs**: Consider Sphinx for large projects
378
-
379
- Example (Google style):
380
- ```python
381
- def process_data(input_data: str, options: dict[str, Any] | None = None) -> list[str]:
382
- """
383
- Process input data and return results.
384
-
385
- Args:
386
- input_data: The input string to process
387
- options: Optional processing options
388
-
389
- Returns:
390
- A list of processed strings
391
-
392
- Raises:
393
- ValidationError: If input_data is empty
394
-
395
- Examples:
396
- >>> process_data("hello")
397
- ['HELLO']
398
- >>> process_data("world", {"lowercase": True})
399
- ['world']
400
- """
401
- # Implementation
402
- return []
403
- ```
404
-
405
- ## Project Structure
406
-
407
- ```
408
- project/
409
- ├── pyproject.toml # Project metadata and dependencies
410
- ├── README.md # Project overview (allowed in root)
411
- ├── CHANGELOG.md # Version history (allowed in root)
412
- ├── AGENTS.md # AI assistant rules (allowed in root)
413
- ├── LICENSE # Project license (allowed in root)
414
- ├── CONTRIBUTING.md # Contribution guidelines (allowed in root)
415
- ├── CODE_OF_CONDUCT.md # Code of conduct (allowed in root)
416
- ├── SECURITY.md # Security policy (allowed in root)
417
- ├── src/
418
- │ └── mypackage/
419
- │ ├── __init__.py
420
- │ ├── module.py
421
- │ └── py.typed # PEP 561 marker for type hints
422
- ├── tests/ # Test files
423
- │ ├── __init__.py
424
- │ └── test_module.py
425
- └── docs/ # Documentation
426
- ```
427
-
428
- ## Async Programming
429
-
430
- - Use `asyncio` for async code
431
- - Type hints: `async def func() -> Coroutine`
432
- - Testing: Use `pytest-asyncio`
433
-
434
- Example:
435
- ```python
436
- import asyncio
437
- from typing import List
438
-
439
- async def fetch_data(url: str) -> dict[str, Any]:
440
- """Fetch data asynchronously."""
441
- # Implementation
442
- return {}
443
-
444
- async def main() -> None:
445
- """Main async function."""
446
- results = await asyncio.gather(
447
- fetch_data("url1"),
448
- fetch_data("url2"),
449
- )
450
- print(results)
451
-
452
- if __name__ == "__main__":
453
- asyncio.run(main())
454
- ```
455
-
456
- ## CI/CD Requirements
457
-
458
- Must include GitHub Actions workflows for:
459
-
460
- 1. **Testing** (`python-test.yml`):
461
- - Test on ubuntu-latest, windows-latest, macos-latest
462
- - Test on Python 3.11, 3.12
463
- - Upload coverage reports
464
-
465
- 2. **Linting** (`python-lint.yml`):
466
- - Format check: `ruff format --check .`
467
- - Lint: `ruff check .`
468
- - Type check: `mypy .`
469
-
470
- 3. **Security** (`python-security.yml`):
471
- - Check for vulnerabilities: `pip-audit`
472
- - Scan dependencies: `safety check`
473
-
474
- ## Package Publication
475
-
476
- ### Publishing to PyPI
477
-
478
- **Prerequisites:**
479
- 1. Create account at https://pypi.org
480
- 2. Enable 2FA for security
481
- 3. Configure trusted publishing (recommended) or create API token
482
- 4. For trusted publishing: Add GitHub as publisher in PyPI settings
483
-
484
- **pyproject.toml Configuration:**
485
-
486
- ```toml
487
- [build-system]
488
- requires = ["setuptools>=68.0", "wheel"]
489
- build-backend = "setuptools.build_meta"
490
-
491
- [project]
492
- name = "your-package-name"
493
- version = "1.0.0"
494
- description = "A short description of your package"
495
- readme = "README.md"
496
- requires-python = ">=3.11"
497
- license = {text = "MIT"}
498
- authors = [
499
- {name = "Your Name", email = "your.email@example.com"}
500
- ]
501
- keywords = ["your", "keywords"]
502
- classifiers = [
503
- "Development Status :: 4 - Beta",
504
- "Intended Audience :: Developers",
505
- "License :: OSI Approved :: MIT License",
506
- "Programming Language :: Python :: 3",
507
- "Programming Language :: Python :: 3.11",
508
- "Programming Language :: Python :: 3.12",
509
- ]
510
- dependencies = [
511
- "requests>=2.31.0",
512
- ]
513
-
514
- [project.optional-dependencies]
515
- dev = [
516
- "pytest>=7.4.0",
517
- "pytest-cov>=4.1.0",
518
- "ruff>=0.1.0",
519
- "mypy>=1.7.0",
520
- "black>=23.12.0",
521
- ]
522
-
523
- [project.urls]
524
- Homepage = "https://github.com/your-org/your-package"
525
- Documentation = "https://your-package.readthedocs.io"
526
- Repository = "https://github.com/your-org/your-package"
527
- "Bug Tracker" = "https://github.com/your-org/your-package/issues"
528
-
529
- [tool.setuptools.packages.find]
530
- where = ["src"]
531
-
532
- [tool.setuptools.package-data]
533
- your_package = ["py.typed"]
534
- ```
535
-
536
- ### PEP 625 Package Naming Convention
537
-
538
- **CRITICAL**: Package names must be normalized according to PEP 625.
539
-
540
- PyPI requires source distribution filenames to use normalized package names (underscores instead of hyphens).
541
-
542
- **Naming Rules:**
543
-
544
- 1. **Package name in `pyproject.toml`**: Use underscores (`_`)
545
- ```toml
546
- [project]
547
- name = "my_package_name" # Correct
548
- # NOT: name = "my-package-name" # Will cause deprecation warning
549
- ```
550
-
551
- 2. **Package directory**: Must match with underscores
552
- ```
553
- src/
554
- └── my_package_name/ # Correct
555
- ├── __init__.py
556
- └── ...
557
- ```
558
-
559
- 3. **Import statement**: Uses underscores
560
- ```python
561
- import my_package_name
562
- from my_package_name import something
563
- ```
564
-
565
- 4. **Distribution filename**: Will be `my_package_name-1.0.0.tar.gz` ✅
566
-
567
- **Common Issue:**
568
-
569
- If you use hyphens in the package name, PyPI will reject new uploads:
570
- ```toml
571
- # ❌ WRONG - Will fail PEP 625 compliance
572
- [project]
573
- name = "my-package-name"
574
-
575
- # Result: my-package-name-1.0.0.tar.gz (non-compliant)
576
- # PyPI Error: "Filename does not contain normalized project name"
577
- ```
578
-
579
- **Correct Approach:**
580
- ```toml
581
- # ✅ CORRECT - PEP 625 compliant
582
- [project]
583
- name = "my_package_name"
584
-
585
- # Result: my_package_name-1.0.0.tar.gz (compliant)
586
- # PyPI: Accepts upload without warnings
587
- ```
588
-
589
- **Migration from Hyphenated Names:**
590
-
591
- If you previously published with hyphens:
592
-
593
- 1. Update `pyproject.toml` and `setup.py` to use underscores
594
- 2. Existing uploads remain on PyPI (no action needed)
595
- 3. Future uploads will use normalized name
596
- 4. PyPI will automatically redirect:
597
- - `pip install my-package-name` → works (auto-normalized)
598
- - `pip install my_package_name` → works (canonical form)
599
- 5. Import statement unchanged: `import my_package_name`
600
-
601
- **Reference**: [PEP 625 - File name of a Source Distribution](https://peps.python.org/pep-0625/)
602
-
603
- **Publishing Workflow:**
604
-
605
- 1. Update version in pyproject.toml
606
- 2. Update CHANGELOG.md
607
- 3. Run quality checks:
608
- ```bash
609
- ruff check .
610
- ruff format --check .
611
- mypy .
612
- pytest
613
- ```
614
- 4. Build package:
615
- ```bash
616
- python -m build
617
- twine check dist/*
618
- ```
619
- 5. Test on Test PyPI (optional):
620
- ```bash
621
- twine upload --repository testpypi dist/*
622
- ```
623
- 6. Create git tag: `git tag v1.0.0 && git push --tags`
624
- 7. GitHub Actions automatically publishes to PyPI
625
- 8. Or manual publish: `twine upload dist/*`
626
-
627
- **Publishing Checklist:**
628
-
629
- - ✅ All tests passing (`pytest`)
630
- - ✅ Type checking passes (`mypy .`)
631
- - ✅ Linting passes (`ruff check .`)
632
- - ✅ Code formatted (`ruff format .`)
633
- - ✅ Version updated in pyproject.toml
634
- - ✅ CHANGELOG.md updated
635
- - ✅ README.md up to date
636
- - ✅ LICENSE file present
637
- - ✅ **Package name uses underscores (PEP 625 compliant)**
638
- - ✅ `py.typed` marker for type hints
639
- - ✅ Package builds successfully (`python -m build`)
640
- - ✅ Package checks pass (`twine check dist/*`)
641
- - ✅ Manifest complete (`check-manifest`)
642
- - ✅ **Verify dist filename**: `my_package-1.0.0.tar.gz` (underscores) ✅
643
-
644
- **Trusted Publishing (Recommended):**
645
-
646
- PyPI trusted publishing eliminates the need for API tokens:
647
-
648
- 1. Go to PyPI → Your Account → Publishing
649
- 2. Add a new pending publisher:
650
- - PyPI Project Name: `your-package-name`
651
- - Owner: `your-github-org`
652
- - Repository: `your-repo-name`
653
- - Workflow: `python-publish.yml`
654
- - Environment: `release` (optional)
655
-
656
- 3. GitHub Actions will authenticate automatically using OIDC
657
-
658
- **Versioning:**
659
-
660
- Use semantic versioning and consider:
661
- - **Automated versioning**: Use tools like `bump2version` or `setuptools_scm`
662
- - **Version from git tags**: Configure `setuptools_scm` in pyproject.toml:
663
-
664
- ```toml
665
- [build-system]
666
- requires = ["setuptools>=68.0", "setuptools_scm>=8.0"]
667
-
668
- [tool.setuptools_scm]
669
- version_file = "src/your_package/_version.py"
670
- ```
671
-
672
- **Type Hints:**
673
-
674
- Include `py.typed` marker for PEP 561 compliance:
675
- ```bash
676
- touch src/your_package/py.typed
677
- ```
678
-
679
- This tells type checkers your package includes type information.
680
-
681
- <!-- PYTHON:END -->
682
-
1
+ <!-- PYTHON:START -->
2
+ # Python 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
+ ruff format --check . # Format check
11
+ ruff check . # Linting
12
+ mypy . # Type checking
13
+ pytest # All tests (100% pass required)
14
+ pytest --cov # Coverage check (95%+ required)
15
+
16
+ # Security audit:
17
+ pip-audit # Vulnerability scan
18
+ pip list --outdated # Check outdated deps
19
+ ```
20
+
21
+ ## Python Version
22
+
23
+ **CRITICAL**: Use Python 3.11+ for modern features and performance.
24
+
25
+ - **Minimum Version**: Python 3.11+
26
+ - **Recommended**: Python 3.12+
27
+ - **Type Hints**: Required for all public APIs
28
+
29
+ ### Formatting
30
+
31
+ - Use `ruff format` (fast, modern) or `black` (traditional)
32
+ - Line length: 100 characters (configurable)
33
+ - Consistent formatting across entire project
34
+ - Format before committing
35
+
36
+ Configuration in `pyproject.toml`:
37
+ ```toml
38
+ [tool.ruff]
39
+ line-length = 100
40
+ target-version = "py311"
41
+
42
+ [tool.ruff.format]
43
+ quote-style = "double"
44
+ indent-style = "space"
45
+ ```
46
+
47
+ ### Linting
48
+
49
+ - Use `ruff check` (fast, comprehensive) or `ruff` + `flake8`
50
+ - Fix all linting errors before committing
51
+ - Document any disabled rules with justification
52
+
53
+ Configuration in `pyproject.toml`:
54
+ ```toml
55
+ [tool.ruff.lint]
56
+ select = ["E", "F", "I", "N", "W", "UP", "B", "A", "C4", "SIM"]
57
+ ignore = ["E501"] # Line too long (handled by formatter)
58
+
59
+ [tool.ruff.lint.per-file-ignores]
60
+ "tests/*" = ["S101"] # Allow assert in tests
61
+ ```
62
+
63
+ ### Type Checking
64
+
65
+ - Use `mypy` for static type checking
66
+ - All public APIs must have type hints
67
+ - Use `typing` module for complex types
68
+ - Gradual typing allowed for legacy code
69
+
70
+ Configuration in `pyproject.toml`:
71
+ ```toml
72
+ [tool.mypy]
73
+ python_version = "3.11"
74
+ strict = true
75
+ warn_return_any = true
76
+ warn_unused_configs = true
77
+ disallow_untyped_defs = true
78
+ ```
79
+
80
+ Example:
81
+ ```python
82
+ from typing import Optional, List, Dict, Any
83
+
84
+ def process_data(
85
+ input_data: str,
86
+ options: Optional[Dict[str, Any]] = None
87
+ ) -> List[str]:
88
+ """Process input data and return results."""
89
+ # Implementation
90
+ return []
91
+ ```
92
+
93
+ ### Testing
94
+
95
+ - **Framework**: pytest
96
+ - **Location**: `/tests` directory
97
+ - **Coverage**: Must meet project threshold (default 95%)
98
+ - **Fixtures**: Use pytest fixtures for setup/teardown
99
+ - **Parametrize**: Use `@pytest.mark.parametrize` for multiple test cases
100
+
101
+ Example test structure:
102
+ ```python
103
+ import pytest
104
+ from mymodule import process_data
105
+
106
+ @pytest.fixture
107
+ def sample_data():
108
+ """Provide sample data for tests."""
109
+ return "test input"
110
+
111
+ def test_process_data_valid_input(sample_data):
112
+ """Test process_data with valid input."""
113
+ result = process_data(sample_data)
114
+ assert result == ["expected"]
115
+
116
+ @pytest.mark.parametrize("input_val,expected", [
117
+ ("hello", ["HELLO"]),
118
+ ("world", ["WORLD"]),
119
+ ])
120
+ def test_process_data_parametrized(input_val, expected):
121
+ """Test multiple input cases."""
122
+ result = process_data(input_val)
123
+ assert result == expected
124
+ ```
125
+
126
+ ### Test Categories: S2S and Slow Tests
127
+
128
+ **CRITICAL**: Tests must be categorized based on execution time and dependencies.
129
+
130
+ #### Test Time Limits
131
+
132
+ - **Fast Tests**: Must complete in ≤ 10-20 seconds
133
+ - **Slow Tests**: Any test taking > 10-20 seconds must be marked as slow
134
+ - **S2S Tests**: Tests requiring active server/database must be isolated and run on-demand
135
+
136
+ #### S2S (Server-to-Server) Tests
137
+
138
+ **Tests that require active servers, databases, or external services must be isolated using pytest markers.**
139
+
140
+ **Implementation**:
141
+
142
+ 1. **Mark S2S tests with pytest markers**:
143
+ ```python
144
+ import pytest
145
+ import os
146
+
147
+ # Regular fast test (always runs)
148
+ def test_local_computation():
149
+ """Fast test, no external dependencies."""
150
+ result = compute_locally("input")
151
+ assert result == "expected"
152
+
153
+ # S2S test (only runs with -m s2s)
154
+ @pytest.mark.s2s
155
+ def test_database_connection():
156
+ """Requires active database server."""
157
+ db = connect_to_database()
158
+ # ... test implementation
159
+
160
+ @pytest.mark.s2s
161
+ def test_api_integration():
162
+ """Requires active API server."""
163
+ client = create_api_client()
164
+ # ... test implementation
165
+ ```
166
+
167
+ 2. **Configure `pytest.ini` or `pyproject.toml`**:
168
+ ```ini
169
+ # pytest.ini
170
+ [pytest]
171
+ markers =
172
+ s2s: Server-to-server tests requiring active services
173
+ slow: Slow tests taking > 20 seconds
174
+ ```
175
+
176
+ Or in `pyproject.toml`:
177
+ ```toml
178
+ [tool.pytest.ini_options]
179
+ markers = [
180
+ "s2s: Server-to-server tests requiring active services",
181
+ "slow: Slow tests taking > 20 seconds",
182
+ ]
183
+ ```
184
+
185
+ 3. **Run tests**:
186
+ ```bash
187
+ # Regular tests (excludes S2S)
188
+ pytest
189
+
190
+ # Include S2S tests (requires active servers)
191
+ pytest -m s2s
192
+
193
+ # Run all tests including S2S
194
+ pytest -m "not slow" # Fast + S2S, excludes slow
195
+ ```
196
+
197
+ #### Slow Tests
198
+
199
+ **Tests that take > 10-20 seconds must be marked and run separately.**
200
+
201
+ **Implementation**:
202
+
203
+ 1. **Mark slow tests with pytest markers**:
204
+ ```python
205
+ import pytest
206
+
207
+ # Fast test (always runs)
208
+ def test_quick_operation():
209
+ """Completes in < 1 second."""
210
+ result = quick_compute("input")
211
+ assert result == "expected"
212
+
213
+ # Slow test (only runs with -m slow)
214
+ @pytest.mark.slow
215
+ def test_heavy_computation():
216
+ """Takes 30+ seconds."""
217
+ # Heavy processing, large dataset, etc.
218
+ result = process_large_dataset()
219
+ assert result is not None
220
+
221
+ @pytest.mark.slow
222
+ def test_large_file_processing():
223
+ """Processes large files, takes > 20 seconds."""
224
+ result = process_file("large_file.dat")
225
+ assert result.success
226
+ ```
227
+
228
+ 2. **Run tests**:
229
+ ```bash
230
+ # Regular tests (excludes slow and S2S)
231
+ pytest -m "not slow and not s2s"
232
+
233
+ # Include slow tests
234
+ pytest -m slow
235
+
236
+ # Run all tests
237
+ pytest -m "" # Empty marker means all tests
238
+ ```
239
+
240
+ 3. **Add pytest configuration for timeouts**:
241
+ ```python
242
+ # conftest.py
243
+ import pytest
244
+
245
+ @pytest.fixture(autouse=True)
246
+ def configure_timeouts(request):
247
+ """Configure timeouts based on test markers."""
248
+ if 'slow' in request.keywords:
249
+ request.node.add_marker(pytest.mark.timeout(300)) # 5 minutes
250
+ elif 's2s' in request.keywords:
251
+ request.node.add_marker(pytest.mark.timeout(60)) # 1 minute
252
+ else:
253
+ request.node.add_marker(pytest.mark.timeout(20)) # 20 seconds
254
+ ```
255
+
256
+ 4. **Add scripts in `pyproject.toml` or `setup.py`**:
257
+ ```toml
258
+ [tool.poetry.scripts]
259
+ test = "pytest -m 'not slow and not s2s'"
260
+ test-s2s = "pytest -m s2s"
261
+ test-slow = "pytest -m slow"
262
+ test-all = "pytest"
263
+ ```
264
+
265
+ #### Best Practices
266
+
267
+ - ✅ **Always run fast tests** in CI/CD by default
268
+ - ✅ **Isolate S2S tests** - never run them in standard test suite
269
+ - ✅ **Mark slow tests** - prevent CI/CD timeouts
270
+ - ✅ **Document requirements** - specify which servers/services are needed for S2S tests
271
+ - ✅ **Use timeouts** - Set appropriate timeouts: `@pytest.mark.timeout(60)`
272
+ - ✅ **Use pytest markers** - `@pytest.mark.s2s` and `@pytest.mark.slow`
273
+ - ✅ **Skip conditionally** - `@pytest.mark.skipif(not os.getenv('RUN_S2S_TESTS'), reason='S2S tests disabled')`
274
+ - ❌ **Never mix** fast and slow/S2S tests in same test run
275
+ - ❌ **Never require** external services for standard test suite
276
+ - ❌ **Never exceed** 10-20 seconds for regular tests
277
+
278
+ ## Dependency Management
279
+
280
+ **CRITICAL**: Use modern dependency management tools.
281
+
282
+ ### Recommended: Poetry
283
+
284
+ ```toml
285
+ [tool.poetry]
286
+ name = "myproject"
287
+ version = "0.1.0"
288
+ description = ""
289
+ authors = ["Your Name <you@example.com>"]
290
+
291
+ [tool.poetry.dependencies]
292
+ python = "^3.11"
293
+ requests = "^2.31.0"
294
+
295
+ [tool.poetry.group.dev.dependencies]
296
+ pytest = "^7.4.0"
297
+ mypy = "^1.5.0"
298
+ ruff = "^0.1.0"
299
+ ```
300
+
301
+ Commands:
302
+ ```bash
303
+ poetry install # Install dependencies
304
+ poetry add requests # Add dependency
305
+ poetry add --group dev pytest # Add dev dependency
306
+ poetry update # Update dependencies
307
+ ```
308
+
309
+ ### Alternative: pip-tools
310
+
311
+ ```
312
+ # requirements.in
313
+ requests>=2.31.0
314
+ pydantic>=2.0.0
315
+
316
+ # requirements-dev.in
317
+ -r requirements.in
318
+ pytest>=7.4.0
319
+ mypy>=1.5.0
320
+ ```
321
+
322
+ Commands:
323
+ ```bash
324
+ pip-compile requirements.in
325
+ pip-compile requirements-dev.in
326
+ pip-sync requirements-dev.txt
327
+ ```
328
+
329
+ ### Dependency Guidelines
330
+
331
+ 1. **Check for latest versions**:
332
+ - Use Context7 MCP tool if available
333
+ - Check PyPI: `pip index versions <package>`
334
+ - Review changelog for breaking changes
335
+
336
+ 2. **Version pinning**:
337
+ - ✅ Pin exact versions in applications
338
+ - ✅ Use ranges in libraries (`>=1.0,<2.0`)
339
+ - ✅ Keep dependencies updated regularly
340
+ - ❌ Don't use outdated packages with security issues
341
+
342
+ ## Error Handling
343
+
344
+ - Use specific exception types
345
+ - Create custom exceptions when needed
346
+ - Document exceptions in docstrings
347
+ - Never use bare `except:`
348
+
349
+ Example:
350
+ ```python
351
+ class ValidationError(Exception):
352
+ """Raised when data validation fails."""
353
+
354
+ def __init__(self, message: str, field: str):
355
+ super().__init__(message)
356
+ self.field = field
357
+
358
+ def validate_data(data: dict[str, Any]) -> None:
359
+ """
360
+ Validate input data.
361
+
362
+ Args:
363
+ data: The data to validate
364
+
365
+ Raises:
366
+ ValidationError: If validation fails
367
+ """
368
+ if not isinstance(data, dict):
369
+ raise ValidationError("Data must be a dictionary", "data")
370
+ ```
371
+
372
+ ## Documentation
373
+
374
+ - **Docstrings**: Google or NumPy style
375
+ - **Type hints**: Required for public APIs
376
+ - **README**: Include installation and usage
377
+ - **API docs**: Consider Sphinx for large projects
378
+
379
+ Example (Google style):
380
+ ```python
381
+ def process_data(input_data: str, options: dict[str, Any] | None = None) -> list[str]:
382
+ """
383
+ Process input data and return results.
384
+
385
+ Args:
386
+ input_data: The input string to process
387
+ options: Optional processing options
388
+
389
+ Returns:
390
+ A list of processed strings
391
+
392
+ Raises:
393
+ ValidationError: If input_data is empty
394
+
395
+ Examples:
396
+ >>> process_data("hello")
397
+ ['HELLO']
398
+ >>> process_data("world", {"lowercase": True})
399
+ ['world']
400
+ """
401
+ # Implementation
402
+ return []
403
+ ```
404
+
405
+ ## Project Structure
406
+
407
+ ```
408
+ project/
409
+ ├── pyproject.toml # Project metadata and dependencies
410
+ ├── README.md # Project overview (allowed in root)
411
+ ├── CHANGELOG.md # Version history (allowed in root)
412
+ ├── AGENTS.md # AI assistant rules (allowed in root)
413
+ ├── LICENSE # Project license (allowed in root)
414
+ ├── CONTRIBUTING.md # Contribution guidelines (allowed in root)
415
+ ├── CODE_OF_CONDUCT.md # Code of conduct (allowed in root)
416
+ ├── SECURITY.md # Security policy (allowed in root)
417
+ ├── src/
418
+ │ └── mypackage/
419
+ │ ├── __init__.py
420
+ │ ├── module.py
421
+ │ └── py.typed # PEP 561 marker for type hints
422
+ ├── tests/ # Test files
423
+ │ ├── __init__.py
424
+ │ └── test_module.py
425
+ └── docs/ # Documentation
426
+ ```
427
+
428
+ ## Async Programming
429
+
430
+ - Use `asyncio` for async code
431
+ - Type hints: `async def func() -> Coroutine`
432
+ - Testing: Use `pytest-asyncio`
433
+
434
+ Example:
435
+ ```python
436
+ import asyncio
437
+ from typing import List
438
+
439
+ async def fetch_data(url: str) -> dict[str, Any]:
440
+ """Fetch data asynchronously."""
441
+ # Implementation
442
+ return {}
443
+
444
+ async def main() -> None:
445
+ """Main async function."""
446
+ results = await asyncio.gather(
447
+ fetch_data("url1"),
448
+ fetch_data("url2"),
449
+ )
450
+ print(results)
451
+
452
+ if __name__ == "__main__":
453
+ asyncio.run(main())
454
+ ```
455
+
456
+ ## CI/CD Requirements
457
+
458
+ Must include GitHub Actions workflows for:
459
+
460
+ 1. **Testing** (`python-test.yml`):
461
+ - Test on ubuntu-latest, windows-latest, macos-latest
462
+ - Test on Python 3.11, 3.12
463
+ - Upload coverage reports
464
+
465
+ 2. **Linting** (`python-lint.yml`):
466
+ - Format check: `ruff format --check .`
467
+ - Lint: `ruff check .`
468
+ - Type check: `mypy .`
469
+
470
+ 3. **Security** (`python-security.yml`):
471
+ - Check for vulnerabilities: `pip-audit`
472
+ - Scan dependencies: `safety check`
473
+
474
+ ## Package Publication
475
+
476
+ ### Publishing to PyPI
477
+
478
+ **Prerequisites:**
479
+ 1. Create account at https://pypi.org
480
+ 2. Enable 2FA for security
481
+ 3. Configure trusted publishing (recommended) or create API token
482
+ 4. For trusted publishing: Add GitHub as publisher in PyPI settings
483
+
484
+ **pyproject.toml Configuration:**
485
+
486
+ ```toml
487
+ [build-system]
488
+ requires = ["setuptools>=68.0", "wheel"]
489
+ build-backend = "setuptools.build_meta"
490
+
491
+ [project]
492
+ name = "your-package-name"
493
+ version = "1.0.0"
494
+ description = "A short description of your package"
495
+ readme = "README.md"
496
+ requires-python = ">=3.11"
497
+ license = {text = "MIT"}
498
+ authors = [
499
+ {name = "Your Name", email = "your.email@example.com"}
500
+ ]
501
+ keywords = ["your", "keywords"]
502
+ classifiers = [
503
+ "Development Status :: 4 - Beta",
504
+ "Intended Audience :: Developers",
505
+ "License :: OSI Approved :: MIT License",
506
+ "Programming Language :: Python :: 3",
507
+ "Programming Language :: Python :: 3.11",
508
+ "Programming Language :: Python :: 3.12",
509
+ ]
510
+ dependencies = [
511
+ "requests>=2.31.0",
512
+ ]
513
+
514
+ [project.optional-dependencies]
515
+ dev = [
516
+ "pytest>=7.4.0",
517
+ "pytest-cov>=4.1.0",
518
+ "ruff>=0.1.0",
519
+ "mypy>=1.7.0",
520
+ "black>=23.12.0",
521
+ ]
522
+
523
+ [project.urls]
524
+ Homepage = "https://github.com/your-org/your-package"
525
+ Documentation = "https://your-package.readthedocs.io"
526
+ Repository = "https://github.com/your-org/your-package"
527
+ "Bug Tracker" = "https://github.com/your-org/your-package/issues"
528
+
529
+ [tool.setuptools.packages.find]
530
+ where = ["src"]
531
+
532
+ [tool.setuptools.package-data]
533
+ your_package = ["py.typed"]
534
+ ```
535
+
536
+ ### PEP 625 Package Naming Convention
537
+
538
+ **CRITICAL**: Package names must be normalized according to PEP 625.
539
+
540
+ PyPI requires source distribution filenames to use normalized package names (underscores instead of hyphens).
541
+
542
+ **Naming Rules:**
543
+
544
+ 1. **Package name in `pyproject.toml`**: Use underscores (`_`)
545
+ ```toml
546
+ [project]
547
+ name = "my_package_name" # Correct
548
+ # NOT: name = "my-package-name" # Will cause deprecation warning
549
+ ```
550
+
551
+ 2. **Package directory**: Must match with underscores
552
+ ```
553
+ src/
554
+ └── my_package_name/ # Correct
555
+ ├── __init__.py
556
+ └── ...
557
+ ```
558
+
559
+ 3. **Import statement**: Uses underscores
560
+ ```python
561
+ import my_package_name
562
+ from my_package_name import something
563
+ ```
564
+
565
+ 4. **Distribution filename**: Will be `my_package_name-1.0.0.tar.gz` ✅
566
+
567
+ **Common Issue:**
568
+
569
+ If you use hyphens in the package name, PyPI will reject new uploads:
570
+ ```toml
571
+ # ❌ WRONG - Will fail PEP 625 compliance
572
+ [project]
573
+ name = "my-package-name"
574
+
575
+ # Result: my-package-name-1.0.0.tar.gz (non-compliant)
576
+ # PyPI Error: "Filename does not contain normalized project name"
577
+ ```
578
+
579
+ **Correct Approach:**
580
+ ```toml
581
+ # ✅ CORRECT - PEP 625 compliant
582
+ [project]
583
+ name = "my_package_name"
584
+
585
+ # Result: my_package_name-1.0.0.tar.gz (compliant)
586
+ # PyPI: Accepts upload without warnings
587
+ ```
588
+
589
+ **Migration from Hyphenated Names:**
590
+
591
+ If you previously published with hyphens:
592
+
593
+ 1. Update `pyproject.toml` and `setup.py` to use underscores
594
+ 2. Existing uploads remain on PyPI (no action needed)
595
+ 3. Future uploads will use normalized name
596
+ 4. PyPI will automatically redirect:
597
+ - `pip install my-package-name` → works (auto-normalized)
598
+ - `pip install my_package_name` → works (canonical form)
599
+ 5. Import statement unchanged: `import my_package_name`
600
+
601
+ **Reference**: [PEP 625 - File name of a Source Distribution](https://peps.python.org/pep-0625/)
602
+
603
+ **Publishing Workflow:**
604
+
605
+ 1. Update version in pyproject.toml
606
+ 2. Update CHANGELOG.md
607
+ 3. Run quality checks:
608
+ ```bash
609
+ ruff check .
610
+ ruff format --check .
611
+ mypy .
612
+ pytest
613
+ ```
614
+ 4. Build package:
615
+ ```bash
616
+ python -m build
617
+ twine check dist/*
618
+ ```
619
+ 5. Test on Test PyPI (optional):
620
+ ```bash
621
+ twine upload --repository testpypi dist/*
622
+ ```
623
+ 6. Create git tag: `git tag v1.0.0 && git push --tags`
624
+ 7. GitHub Actions automatically publishes to PyPI
625
+ 8. Or manual publish: `twine upload dist/*`
626
+
627
+ **Publishing Checklist:**
628
+
629
+ - ✅ All tests passing (`pytest`)
630
+ - ✅ Type checking passes (`mypy .`)
631
+ - ✅ Linting passes (`ruff check .`)
632
+ - ✅ Code formatted (`ruff format .`)
633
+ - ✅ Version updated in pyproject.toml
634
+ - ✅ CHANGELOG.md updated
635
+ - ✅ README.md up to date
636
+ - ✅ LICENSE file present
637
+ - ✅ **Package name uses underscores (PEP 625 compliant)**
638
+ - ✅ `py.typed` marker for type hints
639
+ - ✅ Package builds successfully (`python -m build`)
640
+ - ✅ Package checks pass (`twine check dist/*`)
641
+ - ✅ Manifest complete (`check-manifest`)
642
+ - ✅ **Verify dist filename**: `my_package-1.0.0.tar.gz` (underscores) ✅
643
+
644
+ **Trusted Publishing (Recommended):**
645
+
646
+ PyPI trusted publishing eliminates the need for API tokens:
647
+
648
+ 1. Go to PyPI → Your Account → Publishing
649
+ 2. Add a new pending publisher:
650
+ - PyPI Project Name: `your-package-name`
651
+ - Owner: `your-github-org`
652
+ - Repository: `your-repo-name`
653
+ - Workflow: `python-publish.yml`
654
+ - Environment: `release` (optional)
655
+
656
+ 3. GitHub Actions will authenticate automatically using OIDC
657
+
658
+ **Versioning:**
659
+
660
+ Use semantic versioning and consider:
661
+ - **Automated versioning**: Use tools like `bump2version` or `setuptools_scm`
662
+ - **Version from git tags**: Configure `setuptools_scm` in pyproject.toml:
663
+
664
+ ```toml
665
+ [build-system]
666
+ requires = ["setuptools>=68.0", "setuptools_scm>=8.0"]
667
+
668
+ [tool.setuptools_scm]
669
+ version_file = "src/your_package/_version.py"
670
+ ```
671
+
672
+ **Type Hints:**
673
+
674
+ Include `py.typed` marker for PEP 561 compliance:
675
+ ```bash
676
+ touch src/your_package/py.typed
677
+ ```
678
+
679
+ This tells type checkers your package includes type information.
680
+
681
+ <!-- PYTHON:END -->
682
+