@hivehub/rulebook 1.2.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 (379) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +539 -0
  3. package/dist/agents/claude-code.d.ts +69 -0
  4. package/dist/agents/claude-code.d.ts.map +1 -0
  5. package/dist/agents/claude-code.js +180 -0
  6. package/dist/agents/claude-code.js.map +1 -0
  7. package/dist/agents/cursor-agent.d.ts +184 -0
  8. package/dist/agents/cursor-agent.d.ts.map +1 -0
  9. package/dist/agents/cursor-agent.js +299 -0
  10. package/dist/agents/cursor-agent.js.map +1 -0
  11. package/dist/agents/gemini-cli.d.ts +69 -0
  12. package/dist/agents/gemini-cli.d.ts.map +1 -0
  13. package/dist/agents/gemini-cli.js +180 -0
  14. package/dist/agents/gemini-cli.js.map +1 -0
  15. package/dist/cli/commands.d.ts +57 -0
  16. package/dist/cli/commands.d.ts.map +1 -0
  17. package/dist/cli/commands.js +1370 -0
  18. package/dist/cli/commands.js.map +1 -0
  19. package/dist/cli/docs-prompts.d.ts +3 -0
  20. package/dist/cli/docs-prompts.d.ts.map +1 -0
  21. package/dist/cli/docs-prompts.js +45 -0
  22. package/dist/cli/docs-prompts.js.map +1 -0
  23. package/dist/cli/prompts.d.ts +6 -0
  24. package/dist/cli/prompts.d.ts.map +1 -0
  25. package/dist/cli/prompts.js +376 -0
  26. package/dist/cli/prompts.js.map +1 -0
  27. package/dist/core/agent-manager.d.ts +89 -0
  28. package/dist/core/agent-manager.d.ts.map +1 -0
  29. package/dist/core/agent-manager.js +546 -0
  30. package/dist/core/agent-manager.js.map +1 -0
  31. package/dist/core/auto-fixer.d.ts +14 -0
  32. package/dist/core/auto-fixer.d.ts.map +1 -0
  33. package/dist/core/auto-fixer.js +207 -0
  34. package/dist/core/auto-fixer.js.map +1 -0
  35. package/dist/core/changelog-generator.d.ts +44 -0
  36. package/dist/core/changelog-generator.d.ts.map +1 -0
  37. package/dist/core/changelog-generator.js +222 -0
  38. package/dist/core/changelog-generator.js.map +1 -0
  39. package/dist/core/cli-bridge.d.ts +113 -0
  40. package/dist/core/cli-bridge.d.ts.map +1 -0
  41. package/dist/core/cli-bridge.js +1094 -0
  42. package/dist/core/cli-bridge.js.map +1 -0
  43. package/dist/core/config-manager.d.ts +65 -0
  44. package/dist/core/config-manager.d.ts.map +1 -0
  45. package/dist/core/config-manager.js +266 -0
  46. package/dist/core/config-manager.js.map +1 -0
  47. package/dist/core/coverage-checker.d.ts +14 -0
  48. package/dist/core/coverage-checker.d.ts.map +1 -0
  49. package/dist/core/coverage-checker.js +176 -0
  50. package/dist/core/coverage-checker.js.map +1 -0
  51. package/dist/core/custom-templates.d.ts +27 -0
  52. package/dist/core/custom-templates.d.ts.map +1 -0
  53. package/dist/core/custom-templates.js +122 -0
  54. package/dist/core/custom-templates.js.map +1 -0
  55. package/dist/core/dependency-checker.d.ts +21 -0
  56. package/dist/core/dependency-checker.d.ts.map +1 -0
  57. package/dist/core/dependency-checker.js +247 -0
  58. package/dist/core/dependency-checker.js.map +1 -0
  59. package/dist/core/detector.d.ts +3 -0
  60. package/dist/core/detector.d.ts.map +1 -0
  61. package/dist/core/detector.js +1443 -0
  62. package/dist/core/detector.js.map +1 -0
  63. package/dist/core/docs-generator.d.ts +9 -0
  64. package/dist/core/docs-generator.d.ts.map +1 -0
  65. package/dist/core/docs-generator.js +531 -0
  66. package/dist/core/docs-generator.js.map +1 -0
  67. package/dist/core/generator.d.ts +16 -0
  68. package/dist/core/generator.d.ts.map +1 -0
  69. package/dist/core/generator.js +561 -0
  70. package/dist/core/generator.js.map +1 -0
  71. package/dist/core/gitignore-generator.d.ts +13 -0
  72. package/dist/core/gitignore-generator.d.ts.map +1 -0
  73. package/dist/core/gitignore-generator.js +307 -0
  74. package/dist/core/gitignore-generator.js.map +1 -0
  75. package/dist/core/health-scorer.d.ts +22 -0
  76. package/dist/core/health-scorer.d.ts.map +1 -0
  77. package/dist/core/health-scorer.js +395 -0
  78. package/dist/core/health-scorer.js.map +1 -0
  79. package/dist/core/logger.d.ts +116 -0
  80. package/dist/core/logger.d.ts.map +1 -0
  81. package/dist/core/logger.js +289 -0
  82. package/dist/core/logger.js.map +1 -0
  83. package/dist/core/merger.d.ts +6 -0
  84. package/dist/core/merger.d.ts.map +1 -0
  85. package/dist/core/merger.js +131 -0
  86. package/dist/core/merger.js.map +1 -0
  87. package/dist/core/migrator.d.ts +19 -0
  88. package/dist/core/migrator.d.ts.map +1 -0
  89. package/dist/core/migrator.js +102 -0
  90. package/dist/core/migrator.js.map +1 -0
  91. package/dist/core/minimal-scaffolder.d.ts +8 -0
  92. package/dist/core/minimal-scaffolder.d.ts.map +1 -0
  93. package/dist/core/minimal-scaffolder.js +51 -0
  94. package/dist/core/minimal-scaffolder.js.map +1 -0
  95. package/dist/core/modern-console-new.d.ts +81 -0
  96. package/dist/core/modern-console-new.d.ts.map +1 -0
  97. package/dist/core/modern-console-new.js +340 -0
  98. package/dist/core/modern-console-new.js.map +1 -0
  99. package/dist/core/modern-console.d.ts +99 -0
  100. package/dist/core/modern-console.d.ts.map +1 -0
  101. package/dist/core/modern-console.js +568 -0
  102. package/dist/core/modern-console.js.map +1 -0
  103. package/dist/core/openspec-manager.d.ts +133 -0
  104. package/dist/core/openspec-manager.d.ts.map +1 -0
  105. package/dist/core/openspec-manager.js +605 -0
  106. package/dist/core/openspec-manager.js.map +1 -0
  107. package/dist/core/openspec-migrator.d.ts +27 -0
  108. package/dist/core/openspec-migrator.d.ts.map +1 -0
  109. package/dist/core/openspec-migrator.js +255 -0
  110. package/dist/core/openspec-migrator.js.map +1 -0
  111. package/dist/core/task-manager.d.ts +65 -0
  112. package/dist/core/task-manager.d.ts.map +1 -0
  113. package/dist/core/task-manager.js +318 -0
  114. package/dist/core/task-manager.js.map +1 -0
  115. package/dist/core/test-task-manager.d.ts +49 -0
  116. package/dist/core/test-task-manager.d.ts.map +1 -0
  117. package/dist/core/test-task-manager.js +121 -0
  118. package/dist/core/test-task-manager.js.map +1 -0
  119. package/dist/core/validator.d.ts +21 -0
  120. package/dist/core/validator.d.ts.map +1 -0
  121. package/dist/core/validator.js +177 -0
  122. package/dist/core/validator.js.map +1 -0
  123. package/dist/core/version-bumper.d.ts +19 -0
  124. package/dist/core/version-bumper.d.ts.map +1 -0
  125. package/dist/core/version-bumper.js +180 -0
  126. package/dist/core/version-bumper.js.map +1 -0
  127. package/dist/core/watcher.d.ts +9 -0
  128. package/dist/core/watcher.d.ts.map +1 -0
  129. package/dist/core/watcher.js +22 -0
  130. package/dist/core/watcher.js.map +1 -0
  131. package/dist/core/workflow-generator.d.ts +10 -0
  132. package/dist/core/workflow-generator.d.ts.map +1 -0
  133. package/dist/core/workflow-generator.js +279 -0
  134. package/dist/core/workflow-generator.js.map +1 -0
  135. package/dist/index.d.ts +3 -0
  136. package/dist/index.d.ts.map +1 -0
  137. package/dist/index.js +159 -0
  138. package/dist/index.js.map +1 -0
  139. package/dist/mcp/handlers/archive-task.d.ts +17 -0
  140. package/dist/mcp/handlers/archive-task.d.ts.map +1 -0
  141. package/dist/mcp/handlers/archive-task.js +36 -0
  142. package/dist/mcp/handlers/archive-task.js.map +1 -0
  143. package/dist/mcp/handlers/create-task.d.ts +17 -0
  144. package/dist/mcp/handlers/create-task.d.ts.map +1 -0
  145. package/dist/mcp/handlers/create-task.js +56 -0
  146. package/dist/mcp/handlers/create-task.js.map +1 -0
  147. package/dist/mcp/handlers/list-tasks.d.ts +22 -0
  148. package/dist/mcp/handlers/list-tasks.d.ts.map +1 -0
  149. package/dist/mcp/handlers/list-tasks.js +42 -0
  150. package/dist/mcp/handlers/list-tasks.js.map +1 -0
  151. package/dist/mcp/handlers/show-task.d.ts +25 -0
  152. package/dist/mcp/handlers/show-task.d.ts.map +1 -0
  153. package/dist/mcp/handlers/show-task.js +43 -0
  154. package/dist/mcp/handlers/show-task.js.map +1 -0
  155. package/dist/mcp/handlers/update-task.d.ts +17 -0
  156. package/dist/mcp/handlers/update-task.d.ts.map +1 -0
  157. package/dist/mcp/handlers/update-task.js +35 -0
  158. package/dist/mcp/handlers/update-task.js.map +1 -0
  159. package/dist/mcp/handlers/validate-task.d.ts +15 -0
  160. package/dist/mcp/handlers/validate-task.d.ts.map +1 -0
  161. package/dist/mcp/handlers/validate-task.js +27 -0
  162. package/dist/mcp/handlers/validate-task.js.map +1 -0
  163. package/dist/mcp/rulebook-config.d.ts +22 -0
  164. package/dist/mcp/rulebook-config.d.ts.map +1 -0
  165. package/dist/mcp/rulebook-config.js +65 -0
  166. package/dist/mcp/rulebook-config.js.map +1 -0
  167. package/dist/mcp/rulebook-server.d.ts +4 -0
  168. package/dist/mcp/rulebook-server.d.ts.map +1 -0
  169. package/dist/mcp/rulebook-server.js +246 -0
  170. package/dist/mcp/rulebook-server.js.map +1 -0
  171. package/dist/types.d.ts +190 -0
  172. package/dist/types.d.ts.map +1 -0
  173. package/dist/types.js +2 -0
  174. package/dist/types.js.map +1 -0
  175. package/dist/utils/file-system.d.ts +9 -0
  176. package/dist/utils/file-system.d.ts.map +1 -0
  177. package/dist/utils/file-system.js +51 -0
  178. package/dist/utils/file-system.js.map +1 -0
  179. package/dist/utils/git-hooks.d.ts +8 -0
  180. package/dist/utils/git-hooks.d.ts.map +1 -0
  181. package/dist/utils/git-hooks.js +440 -0
  182. package/dist/utils/git-hooks.js.map +1 -0
  183. package/dist/utils/rulesignore.d.ts +9 -0
  184. package/dist/utils/rulesignore.d.ts.map +1 -0
  185. package/dist/utils/rulesignore.js +42 -0
  186. package/dist/utils/rulesignore.js.map +1 -0
  187. package/package.json +106 -0
  188. package/templates/cli/AIDER.md +49 -0
  189. package/templates/cli/AMAZON_Q.md +25 -0
  190. package/templates/cli/AUGGIE.md +32 -0
  191. package/templates/cli/CLAUDE.md +32 -0
  192. package/templates/cli/CLAUDE_CODE.md +35 -0
  193. package/templates/cli/CLINE.md +32 -0
  194. package/templates/cli/CODEBUDDY.md +20 -0
  195. package/templates/cli/CODEIUM.md +20 -0
  196. package/templates/cli/CODEX.md +21 -0
  197. package/templates/cli/CONTINUE.md +34 -0
  198. package/templates/cli/CURSOR_CLI.md +28 -0
  199. package/templates/cli/FACTORY.md +18 -0
  200. package/templates/cli/GEMINI.md +35 -0
  201. package/templates/cli/KILOCODE.md +18 -0
  202. package/templates/cli/OPENCODE.md +18 -0
  203. package/templates/cli/_GENERIC_TEMPLATE.md +29 -0
  204. package/templates/commands/rulebook-task-apply.md +67 -0
  205. package/templates/commands/rulebook-task-archive.md +70 -0
  206. package/templates/commands/rulebook-task-create.md +93 -0
  207. package/templates/commands/rulebook-task-list.md +42 -0
  208. package/templates/commands/rulebook-task-show.md +52 -0
  209. package/templates/commands/rulebook-task-validate.md +53 -0
  210. package/templates/core/AGENT_AUTOMATION.md +184 -0
  211. package/templates/core/DAG.md +304 -0
  212. package/templates/core/DOCUMENTATION_RULES.md +37 -0
  213. package/templates/core/QUALITY_ENFORCEMENT.md +68 -0
  214. package/templates/core/RULEBOOK.md +1874 -0
  215. package/templates/frameworks/ANGULAR.md +36 -0
  216. package/templates/frameworks/DJANGO.md +83 -0
  217. package/templates/frameworks/ELECTRON.md +147 -0
  218. package/templates/frameworks/FLASK.md +38 -0
  219. package/templates/frameworks/FLUTTER.md +55 -0
  220. package/templates/frameworks/JQUERY.md +32 -0
  221. package/templates/frameworks/LARAVEL.md +38 -0
  222. package/templates/frameworks/NESTJS.md +43 -0
  223. package/templates/frameworks/NEXTJS.md +127 -0
  224. package/templates/frameworks/NUXT.md +40 -0
  225. package/templates/frameworks/RAILS.md +66 -0
  226. package/templates/frameworks/REACT.md +38 -0
  227. package/templates/frameworks/REACT_NATIVE.md +47 -0
  228. package/templates/frameworks/SPRING.md +39 -0
  229. package/templates/frameworks/SYMFONY.md +36 -0
  230. package/templates/frameworks/VUE.md +36 -0
  231. package/templates/frameworks/ZEND.md +35 -0
  232. package/templates/git/CI_CD_PATTERNS.md +661 -0
  233. package/templates/git/GITHUB_ACTIONS.md +728 -0
  234. package/templates/git/GITLAB_CI.md +730 -0
  235. package/templates/git/GIT_WORKFLOW.md +1157 -0
  236. package/templates/git/SECRETS_MANAGEMENT.md +585 -0
  237. package/templates/hooks/COMMIT_MSG.md +530 -0
  238. package/templates/hooks/POST_CHECKOUT.md +546 -0
  239. package/templates/hooks/PREPARE_COMMIT_MSG.md +619 -0
  240. package/templates/hooks/PRE_COMMIT.md +414 -0
  241. package/templates/hooks/PRE_PUSH.md +601 -0
  242. package/templates/hooks/csharp-pre-commit.sh +23 -0
  243. package/templates/hooks/csharp-pre-push.sh +23 -0
  244. package/templates/hooks/dart-pre-commit.sh +30 -0
  245. package/templates/hooks/dart-pre-push.sh +25 -0
  246. package/templates/hooks/elixir-pre-commit.sh +32 -0
  247. package/templates/hooks/elixir-pre-push.sh +31 -0
  248. package/templates/hooks/erlang-pre-commit.sh +30 -0
  249. package/templates/hooks/erlang-pre-push.sh +37 -0
  250. package/templates/hooks/go-pre-commit.sh +40 -0
  251. package/templates/hooks/go-pre-push.sh +31 -0
  252. package/templates/hooks/haskell-pre-commit.sh +41 -0
  253. package/templates/hooks/haskell-pre-push.sh +37 -0
  254. package/templates/hooks/java-pre-commit.sh +34 -0
  255. package/templates/hooks/java-pre-push.sh +24 -0
  256. package/templates/hooks/kotlin-pre-commit.sh +32 -0
  257. package/templates/hooks/kotlin-pre-push.sh +16 -0
  258. package/templates/hooks/php-pre-commit.sh +36 -0
  259. package/templates/hooks/php-pre-push.sh +26 -0
  260. package/templates/hooks/python-pre-commit.sh +51 -0
  261. package/templates/hooks/python-pre-push.sh +25 -0
  262. package/templates/hooks/ruby-pre-commit.sh +33 -0
  263. package/templates/hooks/ruby-pre-push.sh +32 -0
  264. package/templates/hooks/rust-pre-commit.sh +30 -0
  265. package/templates/hooks/rust-pre-push.sh +30 -0
  266. package/templates/hooks/scala-pre-commit.sh +32 -0
  267. package/templates/hooks/scala-pre-push.sh +24 -0
  268. package/templates/hooks/swift-pre-commit.sh +25 -0
  269. package/templates/hooks/swift-pre-push.sh +23 -0
  270. package/templates/hooks/typescript-pre-commit.sh +37 -0
  271. package/templates/hooks/typescript-pre-push.sh +36 -0
  272. package/templates/ides/COPILOT.md +37 -0
  273. package/templates/ides/CURSOR.md +43 -0
  274. package/templates/ides/JETBRAINS_AI.md +35 -0
  275. package/templates/ides/REPLIT.md +36 -0
  276. package/templates/ides/TABNINE.md +29 -0
  277. package/templates/ides/VSCODE.md +40 -0
  278. package/templates/ides/WINDSURF.md +36 -0
  279. package/templates/ides/ZED.md +32 -0
  280. package/templates/languages/ADA.md +58 -0
  281. package/templates/languages/C.md +333 -0
  282. package/templates/languages/CPP.md +743 -0
  283. package/templates/languages/CSHARP.md +417 -0
  284. package/templates/languages/DART.md +332 -0
  285. package/templates/languages/ELIXIR.md +454 -0
  286. package/templates/languages/ERLANG.md +361 -0
  287. package/templates/languages/GO.md +645 -0
  288. package/templates/languages/HASKELL.md +177 -0
  289. package/templates/languages/JAVA.md +607 -0
  290. package/templates/languages/JAVASCRIPT.md +631 -0
  291. package/templates/languages/JULIA.md +97 -0
  292. package/templates/languages/KOTLIN.md +511 -0
  293. package/templates/languages/LISP.md +100 -0
  294. package/templates/languages/LUA.md +74 -0
  295. package/templates/languages/OBJECTIVEC.md +90 -0
  296. package/templates/languages/PHP.md +416 -0
  297. package/templates/languages/PYTHON.md +682 -0
  298. package/templates/languages/R.md +350 -0
  299. package/templates/languages/RUBY.md +421 -0
  300. package/templates/languages/RUST.md +477 -0
  301. package/templates/languages/SAS.md +73 -0
  302. package/templates/languages/SCALA.md +348 -0
  303. package/templates/languages/SOLIDITY.md +580 -0
  304. package/templates/languages/SQL.md +137 -0
  305. package/templates/languages/SWIFT.md +466 -0
  306. package/templates/languages/TYPESCRIPT.md +591 -0
  307. package/templates/languages/ZIG.md +265 -0
  308. package/templates/modules/ATLASSIAN.md +255 -0
  309. package/templates/modules/CONTEXT7.md +54 -0
  310. package/templates/modules/FIGMA.md +267 -0
  311. package/templates/modules/GITHUB_MCP.md +64 -0
  312. package/templates/modules/GRAFANA.md +328 -0
  313. package/templates/modules/NOTION.md +247 -0
  314. package/templates/modules/PLAYWRIGHT.md +90 -0
  315. package/templates/modules/RULEBOOK_MCP.md +156 -0
  316. package/templates/modules/SERENA.md +337 -0
  317. package/templates/modules/SUPABASE.md +223 -0
  318. package/templates/modules/SYNAP.md +69 -0
  319. package/templates/modules/VECTORIZER.md +63 -0
  320. package/templates/services/AZURE_BLOB.md +184 -0
  321. package/templates/services/CASSANDRA.md +239 -0
  322. package/templates/services/DYNAMODB.md +308 -0
  323. package/templates/services/ELASTICSEARCH.md +347 -0
  324. package/templates/services/GCS.md +178 -0
  325. package/templates/services/INFLUXDB.md +265 -0
  326. package/templates/services/KAFKA.md +341 -0
  327. package/templates/services/MARIADB.md +183 -0
  328. package/templates/services/MEMCACHED.md +242 -0
  329. package/templates/services/MINIO.md +201 -0
  330. package/templates/services/MONGODB.md +268 -0
  331. package/templates/services/MYSQL.md +358 -0
  332. package/templates/services/NEO4J.md +247 -0
  333. package/templates/services/ORACLE.md +290 -0
  334. package/templates/services/POSTGRESQL.md +326 -0
  335. package/templates/services/RABBITMQ.md +286 -0
  336. package/templates/services/REDIS.md +292 -0
  337. package/templates/services/S3.md +298 -0
  338. package/templates/services/SQLITE.md +294 -0
  339. package/templates/services/SQLSERVER.md +294 -0
  340. package/templates/workflows/codespell.yml +31 -0
  341. package/templates/workflows/cpp-lint.yml +47 -0
  342. package/templates/workflows/cpp-publish.yml +119 -0
  343. package/templates/workflows/cpp-test.yml +77 -0
  344. package/templates/workflows/dotnet-lint.yml +29 -0
  345. package/templates/workflows/dotnet-publish.yml +40 -0
  346. package/templates/workflows/dotnet-test.yml +41 -0
  347. package/templates/workflows/elixir-lint.yml +45 -0
  348. package/templates/workflows/elixir-publish.yml +49 -0
  349. package/templates/workflows/elixir-test.yml +54 -0
  350. package/templates/workflows/erlang-lint.yml +47 -0
  351. package/templates/workflows/erlang-test.yml +62 -0
  352. package/templates/workflows/go-lint.yml +39 -0
  353. package/templates/workflows/go-publish.yml +95 -0
  354. package/templates/workflows/go-test.yml +59 -0
  355. package/templates/workflows/java-lint.yml +60 -0
  356. package/templates/workflows/java-publish.yml +120 -0
  357. package/templates/workflows/java-test.yml +85 -0
  358. package/templates/workflows/kotlin-lint.yml +34 -0
  359. package/templates/workflows/kotlin-publish.yml +56 -0
  360. package/templates/workflows/kotlin-test.yml +48 -0
  361. package/templates/workflows/php-lint.yml +39 -0
  362. package/templates/workflows/php-publish.yml +50 -0
  363. package/templates/workflows/php-test.yml +54 -0
  364. package/templates/workflows/python-lint.yml +47 -0
  365. package/templates/workflows/python-publish.yml +91 -0
  366. package/templates/workflows/python-test.yml +59 -0
  367. package/templates/workflows/rust-lint.yml +54 -0
  368. package/templates/workflows/rust-publish.yml +66 -0
  369. package/templates/workflows/rust-test.yml +75 -0
  370. package/templates/workflows/solidity-lint.yml +41 -0
  371. package/templates/workflows/solidity-test.yml +47 -0
  372. package/templates/workflows/swift-lint.yml +32 -0
  373. package/templates/workflows/swift-publish.yml +58 -0
  374. package/templates/workflows/swift-test.yml +44 -0
  375. package/templates/workflows/typescript-lint.yml +61 -0
  376. package/templates/workflows/typescript-publish.yml +60 -0
  377. package/templates/workflows/typescript-test.yml +73 -0
  378. package/templates/workflows/zig-lint.yml +27 -0
  379. package/templates/workflows/zig-test.yml +40 -0
@@ -0,0 +1,350 @@
1
+ <!-- R:START -->
2
+ # R 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
+ Rscript -e 'styler::style_pkg(dry="on")' # Format check
11
+ Rscript -e 'lintr::lint_package()' # Linting
12
+ R CMD check . # Full check
13
+ Rscript -e 'devtools::test()' # All tests
14
+
15
+ # Security audit:
16
+ Rscript -e 'pak::pkg_deps_explain()' # Dependency check
17
+ ```
18
+
19
+ ## R Configuration
20
+
21
+ **CRITICAL**: Use R 4.2+ with modern package development tools.
22
+
23
+ - **Version**: R 4.2+
24
+ - **Recommended**: R 4.3+
25
+ - **Style Guide**: tidyverse style guide
26
+ - **Testing**: testthat 3.x
27
+ - **Documentation**: roxygen2
28
+
29
+ ### DESCRIPTION File Requirements
30
+
31
+ ```
32
+ Package: yourpackage
33
+ Type: Package
34
+ Title: Your Package Title
35
+ Version: 0.1.0
36
+ Author: Your Name
37
+ Maintainer: Your Name <you@example.com>
38
+ Description: A comprehensive description of what your package does.
39
+ License: MIT + file LICENSE
40
+ Encoding: UTF-8
41
+ LazyData: true
42
+ Roxygen: list(markdown = TRUE)
43
+ RoxygenNote: 7.2.3
44
+ Depends:
45
+ R (>= 4.2)
46
+ Imports:
47
+ dplyr (>= 1.1.0),
48
+ ggplot2 (>= 3.4.0)
49
+ Suggests:
50
+ testthat (>= 3.0.0),
51
+ knitr,
52
+ rmarkdown
53
+ VignetteBuilder: knitr
54
+ ```
55
+
56
+ ## Code Quality Standards
57
+
58
+ ### Mandatory Quality Checks
59
+
60
+ **CRITICAL**: After implementing ANY feature, you MUST run these commands in order.
61
+
62
+ **IMPORTANT**: These commands MUST match your GitHub Actions workflows to prevent CI/CD failures!
63
+
64
+ ```bash
65
+ # Pre-Commit Checklist (MUST match .github/workflows/*.yml)
66
+
67
+ # 1. Format check (matches workflow - use dry="on"!)
68
+ Rscript -e "styler::style_pkg(dry = 'on')"
69
+
70
+ # 2. Lint (MUST pass with no warnings - matches workflow)
71
+ Rscript -e "lintr::lint_package()"
72
+
73
+ # 3. Run all tests (MUST pass 100% - matches workflow)
74
+ Rscript -e "devtools::test()"
75
+
76
+ # 4. Check package (matches workflow - strict CRAN checks)
77
+ R CMD build .
78
+ R CMD check *.tar.gz --as-cran --no-manual
79
+
80
+ # 5. Check coverage (MUST meet threshold)
81
+ Rscript -e "covr::package_coverage()"
82
+
83
+ # 6. Build documentation (matches workflow)
84
+ Rscript -e "devtools::document()"
85
+
86
+ # If ANY fails: ❌ DO NOT COMMIT - Fix first!
87
+ ```
88
+
89
+ **If ANY of these fail, you MUST fix the issues before committing.**
90
+
91
+ **Why This Matters:**
92
+ - Running different commands locally than in CI causes "works on my machine" failures
93
+ - CI/CD workflows will fail if commands don't match
94
+ - Example: Using `styler::style_pkg()` locally but `dry='on'` in CI = failure
95
+ - Example: Missing `--as-cran` flag = CRAN submission fails
96
+ - Example: Skipping lintr locally = CI catches style violations
97
+
98
+ ### Formatting
99
+
100
+ - Use `styler` for consistent code style
101
+ - Based on tidyverse style guide
102
+ - Configuration in `.lintr` file
103
+
104
+ Example `.lintr`:
105
+ ```
106
+ linters: linters_with_defaults(
107
+ line_length_linter(100),
108
+ object_name_linter = NULL,
109
+ cyclocomp_linter(25)
110
+ )
111
+ exclusions: list(
112
+ "tests/testthat.R"
113
+ )
114
+ ```
115
+
116
+ ### Documentation
117
+
118
+ - Use roxygen2 for function documentation
119
+ - All exported functions must be documented
120
+ - Include examples in documentation
121
+
122
+ Example roxygen2 documentation:
123
+ ```r
124
+ #' Process Data
125
+ #'
126
+ #' This function processes input data and returns cleaned results.
127
+ #'
128
+ #' @param data A data.frame with input data
129
+ #' @param threshold Numeric threshold value (default: 0.5)
130
+ #' @param verbose Logical; if TRUE, print progress messages
131
+ #'
132
+ #' @return A data.frame with processed data
133
+ #' @export
134
+ #'
135
+ #' @examples
136
+ #' data <- data.frame(x = 1:10, y = rnorm(10))
137
+ #' result <- process_data(data, threshold = 0.7)
138
+ process_data <- function(data, threshold = 0.5, verbose = FALSE) {
139
+ if (!is.data.frame(data)) {
140
+ stop("data must be a data.frame")
141
+ }
142
+
143
+ if (verbose) {
144
+ message("Processing data...")
145
+ }
146
+
147
+ # Implementation
148
+ return(data)
149
+ }
150
+ ```
151
+
152
+ ### Testing
153
+
154
+ - **Framework**: testthat 3.x
155
+ - **Location**: `/tests/testthat` directory
156
+ - **Coverage**: Must meet threshold (80%+)
157
+ - **File naming**: `test-*.R` for test files
158
+
159
+ Example test structure:
160
+ ```r
161
+ # tests/testthat/test-process.R
162
+
163
+ test_that("process_data handles valid input", {
164
+ data <- data.frame(x = 1:5, y = 1:5)
165
+ result <- process_data(data)
166
+
167
+ expect_s3_class(result, "data.frame")
168
+ expect_equal(nrow(result), 5)
169
+ })
170
+
171
+ test_that("process_data errors on invalid input", {
172
+ expect_error(
173
+ process_data("not a dataframe"),
174
+ "data must be a data.frame"
175
+ )
176
+ })
177
+
178
+ test_that("process_data respects threshold parameter", {
179
+ data <- data.frame(x = 1:10, y = rnorm(10))
180
+ result <- process_data(data, threshold = 0.7)
181
+
182
+ expect_true(all(result$y >= 0.7 | result$y <= -0.7))
183
+ })
184
+ ```
185
+
186
+ ## Package Development
187
+
188
+ ### Package Structure
189
+
190
+ ```
191
+ yourpackage/
192
+ ├── DESCRIPTION # Package metadata
193
+ ├── NAMESPACE # Auto-generated by roxygen2
194
+ ├── LICENSE # License file
195
+ ├── README.md # Package overview
196
+ ├── NEWS.md # Changelog
197
+ ├── R/
198
+ │ ├── package.R # Package-level documentation
199
+ │ ├── data.R # Data documentation
200
+ │ └── functions.R # Function implementations
201
+ ├── man/ # Auto-generated documentation
202
+ ├── tests/
203
+ │ ├── testthat.R
204
+ │ └── testthat/
205
+ │ ├── test-functions.R
206
+ │ └── test-data.R
207
+ ├── data/ # Package data
208
+ ├── inst/ # Installed files
209
+ └── vignettes/ # Long-form documentation
210
+ ```
211
+
212
+ ### Development Workflow
213
+
214
+ ```r
215
+ # Load package for development
216
+ devtools::load_all()
217
+
218
+ # Run tests
219
+ devtools::test()
220
+
221
+ # Check package
222
+ devtools::check()
223
+
224
+ # Generate documentation
225
+ devtools::document()
226
+
227
+ # Build package
228
+ devtools::build()
229
+
230
+ # Install locally
231
+ devtools::install()
232
+ ```
233
+
234
+ ## Dependencies
235
+
236
+ ### CRAN vs GitHub Packages
237
+
238
+ ```r
239
+ # From CRAN
240
+ install.packages("dplyr")
241
+
242
+ # From GitHub
243
+ devtools::install_github("tidyverse/dplyr")
244
+
245
+ # Specify in DESCRIPTION:
246
+ Imports:
247
+ dplyr (>= 1.1.0)
248
+ Remotes:
249
+ github::tidyverse/dplyr@main
250
+ ```
251
+
252
+ ## Best Practices
253
+
254
+ ### DO's ✅
255
+
256
+ - **USE** tidyverse principles
257
+ - **DOCUMENT** all exported functions
258
+ - **TEST** all functionality
259
+ - **CHECK** inputs with `stopifnot()` or custom validation
260
+ - **RETURN** consistent types
261
+ - **NAMESPACE** use explicit `::` for external functions
262
+ - **VECTORIZE** operations when possible
263
+
264
+ ### DON'Ts ❌
265
+
266
+ - **NEVER** use `T` or `F` (use `TRUE` and `FALSE`)
267
+ - **NEVER** use `attach()` or `<<-` in packages
268
+ - **NEVER** modify global options
269
+ - **NEVER** use `library()` inside functions
270
+ - **NEVER** leave `browser()` or `print()` debug code
271
+ - **NEVER** assume working directory
272
+
273
+ Example code style:
274
+ ```r
275
+ # ✅ GOOD: Proper function structure
276
+ process_data <- function(data, threshold = 0.5) {
277
+ # Input validation
278
+ stopifnot(
279
+ is.data.frame(data),
280
+ is.numeric(threshold),
281
+ threshold >= 0, threshold <= 1
282
+ )
283
+
284
+ # Use explicit namespace
285
+ result <- dplyr::filter(data, value > threshold)
286
+
287
+ return(result)
288
+ }
289
+
290
+ # ❌ BAD: Poor practices
291
+ process_data <- function(data, threshold = 0.5) {
292
+ library(dplyr) # DON'T load packages in functions!
293
+ attach(data) # NEVER use attach()!
294
+
295
+ result <- filter(data, value > threshold) # Unclear where filter comes from
296
+ result <<- result # DON'T use global assignment!
297
+
298
+ print(result) # Don't print inside functions
299
+ }
300
+ ```
301
+
302
+ ## CI/CD Requirements
303
+
304
+ Must include GitHub Actions workflows:
305
+
306
+ 1. **Testing** (`r-test.yml`):
307
+ - Test on ubuntu-latest, windows-latest, macos-latest
308
+ - R versions: release, devel
309
+ - Use R CMD check --as-cran
310
+ - Upload coverage to Codecov
311
+
312
+ 2. **Linting** (`r-lint.yml`):
313
+ - Run lintr checks
314
+ - Check style with styler
315
+ - Verify roxygen2 documentation
316
+
317
+ 3. **CRAN Check** (`r-cran.yml`):
318
+ - R CMD check with --as-cran
319
+ - Verify no NOTEs, WARNINGs, or ERRORs
320
+
321
+ ## Publishing to CRAN
322
+
323
+ ### Pre-Submission Checklist
324
+
325
+ - ✅ All tests passing
326
+ - ✅ R CMD check --as-cran passes with 0 NOTEs
327
+ - ✅ Package documentation complete
328
+ - ✅ NEWS.md updated
329
+ - ✅ README.md current
330
+ - ✅ Examples run successfully
331
+ - ✅ Vignettes build correctly
332
+ - ✅ Valid LICENSE file
333
+ - ✅ No submission policy violations
334
+
335
+ ### Submission Process
336
+
337
+ ```r
338
+ # 1. Final check
339
+ devtools::check(cran = TRUE)
340
+
341
+ # 2. Build package
342
+ devtools::build()
343
+
344
+ # 3. Submit to CRAN
345
+ devtools::submit_cran()
346
+
347
+ # 4. Respond to CRAN feedback promptly
348
+ ```
349
+
350
+ <!-- R:END -->