agy-superpowers 5.2.2 → 5.2.4

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 (231) hide show
  1. package/README.md +47 -150
  2. package/package.json +1 -1
  3. package/template/agent/rules/CLAUDE.md +80 -0
  4. package/template/agent/rules/code-styles.md +31 -32
  5. package/template/agent/rules/debug-confirmation-policy.md +2 -0
  6. package/template/agent/rules/file-length-policy.md +2 -0
  7. package/template/agent/rules/git-policy.md +7 -0
  8. package/template/agent/rules/language-matching.md +2 -0
  9. package/template/agent/rules/scratch-scripts.md +39 -0
  10. package/template/agent/rules/superpowers.md +8 -51
  11. package/template/agent/skills/executing-plans/SKILL.md +17 -0
  12. package/template/agent/skills/systematic-debugging/SKILL.md +16 -0
  13. package/template/agent/skills/test-driven-development/SKILL.md +16 -0
  14. package/template/agent/skills/verification-before-completion/SKILL.md +22 -0
  15. package/template/agent/skills/writing-plans/SKILL.md +16 -0
  16. package/template/agent/skills/ai-integrated-product/SKILL.md +0 -57
  17. package/template/agent/skills/analytics-setup/SKILL.md +0 -51
  18. package/template/agent/skills/api-design/SKILL.md +0 -193
  19. package/template/agent/skills/app-store-optimizer/SKILL.md +0 -127
  20. package/template/agent/skills/auth-and-identity/SKILL.md +0 -167
  21. package/template/agent/skills/backend-developer/SKILL.md +0 -148
  22. package/template/agent/skills/bootstrapper-finance/SKILL.md +0 -55
  23. package/template/agent/skills/chrome-extension-developer/SKILL.md +0 -53
  24. package/template/agent/skills/community-manager/SKILL.md +0 -115
  25. package/template/agent/skills/content-marketer/SKILL.md +0 -111
  26. package/template/agent/skills/conversion-optimizer/SKILL.md +0 -142
  27. package/template/agent/skills/cto-architect/SKILL.md +0 -133
  28. package/template/agent/skills/customer-success-manager/SKILL.md +0 -126
  29. package/template/agent/skills/data-analyst/SKILL.md +0 -147
  30. package/template/agent/skills/devops-engineer/SKILL.md +0 -117
  31. package/template/agent/skills/email-infrastructure/SKILL.md +0 -164
  32. package/template/agent/skills/game-design/SKILL.md +0 -194
  33. package/template/agent/skills/game-developer/SKILL.md +0 -175
  34. package/template/agent/skills/growth-hacker/SKILL.md +0 -122
  35. package/template/agent/skills/idea-validator/SKILL.md +0 -55
  36. package/template/agent/skills/indie-legal/SKILL.md +0 -53
  37. package/template/agent/skills/influencer-marketer/SKILL.md +0 -141
  38. package/template/agent/skills/landing-page-builder/SKILL.md +0 -59
  39. package/template/agent/skills/launch-strategist/SKILL.md +0 -62
  40. package/template/agent/skills/market-researcher/SKILL.md +0 -53
  41. package/template/agent/skills/micro-saas-builder/SKILL.md +0 -56
  42. package/template/agent/skills/monetization-strategist/SKILL.md +0 -119
  43. package/template/agent/skills/paid-acquisition-specialist/SKILL.md +0 -119
  44. package/template/agent/skills/pricing-psychologist/SKILL.md +0 -58
  45. package/template/agent/skills/real-time-features/SKILL.md +0 -194
  46. package/template/agent/skills/retention-specialist/SKILL.md +0 -123
  47. package/template/agent/skills/rust-developer/SKILL.md +0 -281
  48. package/template/agent/skills/rust-developer/references/rust-rules/_sections.md +0 -231
  49. package/template/agent/skills/rust-developer/references/rust-rules/anti-clone-excessive.md +0 -124
  50. package/template/agent/skills/rust-developer/references/rust-rules/anti-collect-intermediate.md +0 -131
  51. package/template/agent/skills/rust-developer/references/rust-rules/anti-empty-catch.md +0 -132
  52. package/template/agent/skills/rust-developer/references/rust-rules/anti-expect-lazy.md +0 -95
  53. package/template/agent/skills/rust-developer/references/rust-rules/anti-format-hot-path.md +0 -141
  54. package/template/agent/skills/rust-developer/references/rust-rules/anti-index-over-iter.md +0 -125
  55. package/template/agent/skills/rust-developer/references/rust-rules/anti-lock-across-await.md +0 -127
  56. package/template/agent/skills/rust-developer/references/rust-rules/anti-over-abstraction.md +0 -120
  57. package/template/agent/skills/rust-developer/references/rust-rules/anti-panic-expected.md +0 -131
  58. package/template/agent/skills/rust-developer/references/rust-rules/anti-premature-optimize.md +0 -156
  59. package/template/agent/skills/rust-developer/references/rust-rules/anti-string-for-str.md +0 -122
  60. package/template/agent/skills/rust-developer/references/rust-rules/anti-stringly-typed.md +0 -167
  61. package/template/agent/skills/rust-developer/references/rust-rules/anti-type-erasure.md +0 -134
  62. package/template/agent/skills/rust-developer/references/rust-rules/anti-unwrap-abuse.md +0 -143
  63. package/template/agent/skills/rust-developer/references/rust-rules/anti-vec-for-slice.md +0 -121
  64. package/template/agent/skills/rust-developer/references/rust-rules/api-builder-must-use.md +0 -143
  65. package/template/agent/skills/rust-developer/references/rust-rules/api-builder-pattern.md +0 -187
  66. package/template/agent/skills/rust-developer/references/rust-rules/api-common-traits.md +0 -165
  67. package/template/agent/skills/rust-developer/references/rust-rules/api-default-impl.md +0 -177
  68. package/template/agent/skills/rust-developer/references/rust-rules/api-extension-trait.md +0 -163
  69. package/template/agent/skills/rust-developer/references/rust-rules/api-from-not-into.md +0 -146
  70. package/template/agent/skills/rust-developer/references/rust-rules/api-impl-asref.md +0 -142
  71. package/template/agent/skills/rust-developer/references/rust-rules/api-impl-into.md +0 -160
  72. package/template/agent/skills/rust-developer/references/rust-rules/api-must-use.md +0 -125
  73. package/template/agent/skills/rust-developer/references/rust-rules/api-newtype-safety.md +0 -162
  74. package/template/agent/skills/rust-developer/references/rust-rules/api-non-exhaustive.md +0 -177
  75. package/template/agent/skills/rust-developer/references/rust-rules/api-parse-dont-validate.md +0 -184
  76. package/template/agent/skills/rust-developer/references/rust-rules/api-sealed-trait.md +0 -168
  77. package/template/agent/skills/rust-developer/references/rust-rules/api-serde-optional.md +0 -182
  78. package/template/agent/skills/rust-developer/references/rust-rules/api-typestate.md +0 -199
  79. package/template/agent/skills/rust-developer/references/rust-rules/async-bounded-channel.md +0 -175
  80. package/template/agent/skills/rust-developer/references/rust-rules/async-broadcast-pubsub.md +0 -185
  81. package/template/agent/skills/rust-developer/references/rust-rules/async-cancellation-token.md +0 -203
  82. package/template/agent/skills/rust-developer/references/rust-rules/async-clone-before-await.md +0 -171
  83. package/template/agent/skills/rust-developer/references/rust-rules/async-join-parallel.md +0 -158
  84. package/template/agent/skills/rust-developer/references/rust-rules/async-joinset-structured.md +0 -195
  85. package/template/agent/skills/rust-developer/references/rust-rules/async-mpsc-queue.md +0 -171
  86. package/template/agent/skills/rust-developer/references/rust-rules/async-no-lock-await.md +0 -156
  87. package/template/agent/skills/rust-developer/references/rust-rules/async-oneshot-response.md +0 -191
  88. package/template/agent/skills/rust-developer/references/rust-rules/async-select-racing.md +0 -198
  89. package/template/agent/skills/rust-developer/references/rust-rules/async-spawn-blocking.md +0 -154
  90. package/template/agent/skills/rust-developer/references/rust-rules/async-tokio-fs.md +0 -167
  91. package/template/agent/skills/rust-developer/references/rust-rules/async-tokio-runtime.md +0 -169
  92. package/template/agent/skills/rust-developer/references/rust-rules/async-try-join.md +0 -172
  93. package/template/agent/skills/rust-developer/references/rust-rules/async-watch-latest.md +0 -189
  94. package/template/agent/skills/rust-developer/references/rust-rules/doc-all-public.md +0 -113
  95. package/template/agent/skills/rust-developer/references/rust-rules/doc-cargo-metadata.md +0 -147
  96. package/template/agent/skills/rust-developer/references/rust-rules/doc-errors-section.md +0 -122
  97. package/template/agent/skills/rust-developer/references/rust-rules/doc-examples-section.md +0 -161
  98. package/template/agent/skills/rust-developer/references/rust-rules/doc-hidden-setup.md +0 -149
  99. package/template/agent/skills/rust-developer/references/rust-rules/doc-intra-links.md +0 -138
  100. package/template/agent/skills/rust-developer/references/rust-rules/doc-link-types.md +0 -169
  101. package/template/agent/skills/rust-developer/references/rust-rules/doc-module-inner.md +0 -116
  102. package/template/agent/skills/rust-developer/references/rust-rules/doc-panics-section.md +0 -128
  103. package/template/agent/skills/rust-developer/references/rust-rules/doc-question-mark.md +0 -136
  104. package/template/agent/skills/rust-developer/references/rust-rules/doc-safety-section.md +0 -131
  105. package/template/agent/skills/rust-developer/references/rust-rules/err-anyhow-app.md +0 -179
  106. package/template/agent/skills/rust-developer/references/rust-rules/err-context-chain.md +0 -144
  107. package/template/agent/skills/rust-developer/references/rust-rules/err-custom-type.md +0 -152
  108. package/template/agent/skills/rust-developer/references/rust-rules/err-doc-errors.md +0 -145
  109. package/template/agent/skills/rust-developer/references/rust-rules/err-expect-bugs-only.md +0 -133
  110. package/template/agent/skills/rust-developer/references/rust-rules/err-from-impl.md +0 -152
  111. package/template/agent/skills/rust-developer/references/rust-rules/err-lowercase-msg.md +0 -124
  112. package/template/agent/skills/rust-developer/references/rust-rules/err-no-unwrap-prod.md +0 -115
  113. package/template/agent/skills/rust-developer/references/rust-rules/err-question-mark.md +0 -151
  114. package/template/agent/skills/rust-developer/references/rust-rules/err-result-over-panic.md +0 -130
  115. package/template/agent/skills/rust-developer/references/rust-rules/err-source-chain.md +0 -155
  116. package/template/agent/skills/rust-developer/references/rust-rules/err-thiserror-lib.md +0 -171
  117. package/template/agent/skills/rust-developer/references/rust-rules/lint-cargo-metadata.md +0 -138
  118. package/template/agent/skills/rust-developer/references/rust-rules/lint-deny-correctness.md +0 -107
  119. package/template/agent/skills/rust-developer/references/rust-rules/lint-missing-docs.md +0 -154
  120. package/template/agent/skills/rust-developer/references/rust-rules/lint-pedantic-selective.md +0 -118
  121. package/template/agent/skills/rust-developer/references/rust-rules/lint-rustfmt-check.md +0 -157
  122. package/template/agent/skills/rust-developer/references/rust-rules/lint-unsafe-doc.md +0 -133
  123. package/template/agent/skills/rust-developer/references/rust-rules/lint-warn-complexity.md +0 -131
  124. package/template/agent/skills/rust-developer/references/rust-rules/lint-warn-perf.md +0 -136
  125. package/template/agent/skills/rust-developer/references/rust-rules/lint-warn-style.md +0 -135
  126. package/template/agent/skills/rust-developer/references/rust-rules/lint-warn-suspicious.md +0 -122
  127. package/template/agent/skills/rust-developer/references/rust-rules/lint-workspace-lints.md +0 -172
  128. package/template/agent/skills/rust-developer/references/rust-rules/mem-arena-allocator.md +0 -168
  129. package/template/agent/skills/rust-developer/references/rust-rules/mem-arrayvec.md +0 -142
  130. package/template/agent/skills/rust-developer/references/rust-rules/mem-assert-type-size.md +0 -168
  131. package/template/agent/skills/rust-developer/references/rust-rules/mem-avoid-format.md +0 -147
  132. package/template/agent/skills/rust-developer/references/rust-rules/mem-box-large-variant.md +0 -158
  133. package/template/agent/skills/rust-developer/references/rust-rules/mem-boxed-slice.md +0 -139
  134. package/template/agent/skills/rust-developer/references/rust-rules/mem-clone-from.md +0 -147
  135. package/template/agent/skills/rust-developer/references/rust-rules/mem-compact-string.md +0 -149
  136. package/template/agent/skills/rust-developer/references/rust-rules/mem-reuse-collections.md +0 -174
  137. package/template/agent/skills/rust-developer/references/rust-rules/mem-smaller-integers.md +0 -159
  138. package/template/agent/skills/rust-developer/references/rust-rules/mem-smallvec.md +0 -138
  139. package/template/agent/skills/rust-developer/references/rust-rules/mem-thinvec.md +0 -142
  140. package/template/agent/skills/rust-developer/references/rust-rules/mem-with-capacity.md +0 -156
  141. package/template/agent/skills/rust-developer/references/rust-rules/mem-write-over-format.md +0 -172
  142. package/template/agent/skills/rust-developer/references/rust-rules/mem-zero-copy.md +0 -164
  143. package/template/agent/skills/rust-developer/references/rust-rules/name-acronym-word.md +0 -99
  144. package/template/agent/skills/rust-developer/references/rust-rules/name-as-free.md +0 -104
  145. package/template/agent/skills/rust-developer/references/rust-rules/name-consts-screaming.md +0 -94
  146. package/template/agent/skills/rust-developer/references/rust-rules/name-crate-no-rs.md +0 -78
  147. package/template/agent/skills/rust-developer/references/rust-rules/name-funcs-snake.md +0 -76
  148. package/template/agent/skills/rust-developer/references/rust-rules/name-into-ownership.md +0 -123
  149. package/template/agent/skills/rust-developer/references/rust-rules/name-is-has-bool.md +0 -127
  150. package/template/agent/skills/rust-developer/references/rust-rules/name-iter-convention.md +0 -129
  151. package/template/agent/skills/rust-developer/references/rust-rules/name-iter-method.md +0 -131
  152. package/template/agent/skills/rust-developer/references/rust-rules/name-iter-type-match.md +0 -142
  153. package/template/agent/skills/rust-developer/references/rust-rules/name-lifetime-short.md +0 -86
  154. package/template/agent/skills/rust-developer/references/rust-rules/name-no-get-prefix.md +0 -154
  155. package/template/agent/skills/rust-developer/references/rust-rules/name-to-expensive.md +0 -118
  156. package/template/agent/skills/rust-developer/references/rust-rules/name-type-param-single.md +0 -92
  157. package/template/agent/skills/rust-developer/references/rust-rules/name-types-camel.md +0 -65
  158. package/template/agent/skills/rust-developer/references/rust-rules/name-variants-camel.md +0 -101
  159. package/template/agent/skills/rust-developer/references/rust-rules/opt-bounds-check.md +0 -161
  160. package/template/agent/skills/rust-developer/references/rust-rules/opt-cache-friendly.md +0 -187
  161. package/template/agent/skills/rust-developer/references/rust-rules/opt-codegen-units.md +0 -142
  162. package/template/agent/skills/rust-developer/references/rust-rules/opt-cold-unlikely.md +0 -152
  163. package/template/agent/skills/rust-developer/references/rust-rules/opt-inline-always-rare.md +0 -141
  164. package/template/agent/skills/rust-developer/references/rust-rules/opt-inline-never-cold.md +0 -181
  165. package/template/agent/skills/rust-developer/references/rust-rules/opt-inline-small.md +0 -160
  166. package/template/agent/skills/rust-developer/references/rust-rules/opt-likely-hint.md +0 -171
  167. package/template/agent/skills/rust-developer/references/rust-rules/opt-lto-release.md +0 -130
  168. package/template/agent/skills/rust-developer/references/rust-rules/opt-pgo-profile.md +0 -167
  169. package/template/agent/skills/rust-developer/references/rust-rules/opt-simd-portable.md +0 -144
  170. package/template/agent/skills/rust-developer/references/rust-rules/opt-target-cpu.md +0 -154
  171. package/template/agent/skills/rust-developer/references/rust-rules/own-arc-shared.md +0 -141
  172. package/template/agent/skills/rust-developer/references/rust-rules/own-borrow-over-clone.md +0 -95
  173. package/template/agent/skills/rust-developer/references/rust-rules/own-clone-explicit.md +0 -135
  174. package/template/agent/skills/rust-developer/references/rust-rules/own-copy-small.md +0 -124
  175. package/template/agent/skills/rust-developer/references/rust-rules/own-cow-conditional.md +0 -135
  176. package/template/agent/skills/rust-developer/references/rust-rules/own-lifetime-elision.md +0 -134
  177. package/template/agent/skills/rust-developer/references/rust-rules/own-move-large.md +0 -134
  178. package/template/agent/skills/rust-developer/references/rust-rules/own-mutex-interior.md +0 -105
  179. package/template/agent/skills/rust-developer/references/rust-rules/own-rc-single-thread.md +0 -65
  180. package/template/agent/skills/rust-developer/references/rust-rules/own-refcell-interior.md +0 -97
  181. package/template/agent/skills/rust-developer/references/rust-rules/own-rwlock-readers.md +0 -122
  182. package/template/agent/skills/rust-developer/references/rust-rules/own-slice-over-vec.md +0 -119
  183. package/template/agent/skills/rust-developer/references/rust-rules/perf-black-box-bench.md +0 -153
  184. package/template/agent/skills/rust-developer/references/rust-rules/perf-chain-avoid.md +0 -136
  185. package/template/agent/skills/rust-developer/references/rust-rules/perf-collect-into.md +0 -133
  186. package/template/agent/skills/rust-developer/references/rust-rules/perf-collect-once.md +0 -120
  187. package/template/agent/skills/rust-developer/references/rust-rules/perf-drain-reuse.md +0 -137
  188. package/template/agent/skills/rust-developer/references/rust-rules/perf-entry-api.md +0 -134
  189. package/template/agent/skills/rust-developer/references/rust-rules/perf-extend-batch.md +0 -150
  190. package/template/agent/skills/rust-developer/references/rust-rules/perf-iter-lazy.md +0 -123
  191. package/template/agent/skills/rust-developer/references/rust-rules/perf-iter-over-index.md +0 -113
  192. package/template/agent/skills/rust-developer/references/rust-rules/perf-profile-first.md +0 -175
  193. package/template/agent/skills/rust-developer/references/rust-rules/perf-release-profile.md +0 -149
  194. package/template/agent/skills/rust-developer/references/rust-rules/proj-bin-dir.md +0 -142
  195. package/template/agent/skills/rust-developer/references/rust-rules/proj-flat-small.md +0 -133
  196. package/template/agent/skills/rust-developer/references/rust-rules/proj-lib-main-split.md +0 -148
  197. package/template/agent/skills/rust-developer/references/rust-rules/proj-mod-by-feature.md +0 -130
  198. package/template/agent/skills/rust-developer/references/rust-rules/proj-mod-rs-dir.md +0 -120
  199. package/template/agent/skills/rust-developer/references/rust-rules/proj-prelude-module.md +0 -155
  200. package/template/agent/skills/rust-developer/references/rust-rules/proj-pub-crate-internal.md +0 -139
  201. package/template/agent/skills/rust-developer/references/rust-rules/proj-pub-super-parent.md +0 -135
  202. package/template/agent/skills/rust-developer/references/rust-rules/proj-pub-use-reexport.md +0 -162
  203. package/template/agent/skills/rust-developer/references/rust-rules/proj-workspace-deps.md +0 -186
  204. package/template/agent/skills/rust-developer/references/rust-rules/proj-workspace-large.md +0 -162
  205. package/template/agent/skills/rust-developer/references/rust-rules/test-arrange-act-assert.md +0 -160
  206. package/template/agent/skills/rust-developer/references/rust-rules/test-cfg-test-module.md +0 -151
  207. package/template/agent/skills/rust-developer/references/rust-rules/test-criterion-bench.md +0 -171
  208. package/template/agent/skills/rust-developer/references/rust-rules/test-descriptive-names.md +0 -142
  209. package/template/agent/skills/rust-developer/references/rust-rules/test-doctest-examples.md +0 -168
  210. package/template/agent/skills/rust-developer/references/rust-rules/test-fixture-raii.md +0 -151
  211. package/template/agent/skills/rust-developer/references/rust-rules/test-integration-dir.md +0 -144
  212. package/template/agent/skills/rust-developer/references/rust-rules/test-mock-traits.md +0 -189
  213. package/template/agent/skills/rust-developer/references/rust-rules/test-mockall-mocking.md +0 -226
  214. package/template/agent/skills/rust-developer/references/rust-rules/test-proptest-properties.md +0 -161
  215. package/template/agent/skills/rust-developer/references/rust-rules/test-should-panic.md +0 -130
  216. package/template/agent/skills/rust-developer/references/rust-rules/test-tokio-async.md +0 -154
  217. package/template/agent/skills/rust-developer/references/rust-rules/test-use-super.md +0 -127
  218. package/template/agent/skills/rust-developer/references/rust-rules/type-enum-states.md +0 -154
  219. package/template/agent/skills/rust-developer/references/rust-rules/type-generic-bounds.md +0 -142
  220. package/template/agent/skills/rust-developer/references/rust-rules/type-never-diverge.md +0 -146
  221. package/template/agent/skills/rust-developer/references/rust-rules/type-newtype-ids.md +0 -160
  222. package/template/agent/skills/rust-developer/references/rust-rules/type-newtype-validated.md +0 -159
  223. package/template/agent/skills/rust-developer/references/rust-rules/type-no-stringly.md +0 -144
  224. package/template/agent/skills/rust-developer/references/rust-rules/type-option-nullable.md +0 -137
  225. package/template/agent/skills/rust-developer/references/rust-rules/type-phantom-marker.md +0 -188
  226. package/template/agent/skills/rust-developer/references/rust-rules/type-repr-transparent.md +0 -143
  227. package/template/agent/skills/rust-developer/references/rust-rules/type-result-fallible.md +0 -131
  228. package/template/agent/skills/saas-architect/SKILL.md +0 -139
  229. package/template/agent/skills/security-engineer/SKILL.md +0 -133
  230. package/template/agent/skills/seo-specialist/SKILL.md +0 -130
  231. package/template/agent/skills/solo-founder-ops/SKILL.md +0 -56
@@ -1,133 +0,0 @@
1
- # proj-flat-small
2
-
3
- > Keep small projects flat
4
-
5
- ## Why It Matters
6
-
7
- Over-organizing small projects adds navigation overhead without benefit. A project with 5-10 files doesn't need nested directories. Start flat, add structure only when complexity demands it.
8
-
9
- ## Bad
10
-
11
- ```
12
- src/
13
- ├── core/
14
- │ └── mod.rs # Just re-exports
15
- ├── domain/
16
- │ ├── mod.rs
17
- │ └── models/
18
- │ ├── mod.rs
19
- │ └── user.rs # 50 lines
20
- ├── infrastructure/
21
- │ ├── mod.rs
22
- │ └── database/
23
- │ ├── mod.rs
24
- │ └── connection.rs # 30 lines
25
- ├── application/
26
- │ ├── mod.rs
27
- │ └── services/
28
- │ └── mod.rs # Empty
29
- └── main.rs
30
- ```
31
-
32
- ## Good
33
-
34
- ```
35
- src/
36
- ├── main.rs
37
- ├── lib.rs
38
- ├── config.rs
39
- ├── database.rs
40
- ├── user.rs
41
- └── error.rs
42
- ```
43
-
44
- ## When to Add Structure
45
-
46
- | File Count | Structure |
47
- |------------|-----------|
48
- | < 10 files | Flat in `src/` |
49
- | 10-20 files | Group by feature |
50
- | 20+ files | Feature folders with submodules |
51
-
52
- ## Progressive Structuring
53
-
54
- ### Stage 1: Flat
55
-
56
- ```
57
- src/
58
- ├── main.rs
59
- ├── config.rs
60
- ├── user.rs
61
- └── database.rs
62
- ```
63
-
64
- ### Stage 2: Logical Groups
65
-
66
- ```
67
- src/
68
- ├── main.rs
69
- ├── config.rs
70
- ├── user.rs
71
- ├── order.rs # Getting bigger
72
- ├── order_item.rs # Related to order
73
- └── database.rs
74
- ```
75
-
76
- ### Stage 3: Feature Folders
77
-
78
- ```
79
- src/
80
- ├── main.rs
81
- ├── config.rs
82
- ├── user.rs
83
- ├── order/ # Now complex enough
84
- │ ├── mod.rs
85
- │ ├── model.rs
86
- │ └── item.rs
87
- └── database.rs
88
- ```
89
-
90
- ## Signs You Need More Structure
91
-
92
- - Files exceed 300-500 lines
93
- - Related files are hard to identify
94
- - You're adding `_` prefixes for grouping (`user_model.rs`, `user_service.rs`)
95
- - New team members get lost
96
- - Same concepts repeated in file names
97
-
98
- ## Signs of Over-Structure
99
-
100
- - Folders with 1-2 files
101
- - `mod.rs` files that only re-export
102
- - Deep nesting for simple concepts
103
- - More lines in module declarations than code
104
-
105
- ## Example: CLI Tool
106
-
107
- ```
108
- src/
109
- ├── main.rs # Argument parsing, entry point
110
- ├── commands.rs # CLI subcommands
111
- ├── config.rs # Configuration loading
112
- └── output.rs # Formatting, printing
113
- ```
114
-
115
- Not:
116
-
117
- ```
118
- src/
119
- ├── cli/
120
- │ └── commands/
121
- │ └── mod.rs
122
- ├── config/
123
- │ └── mod.rs
124
- └── presentation/
125
- └── output/
126
- └── mod.rs
127
- ```
128
-
129
- ## See Also
130
-
131
- - [proj-mod-by-feature](./proj-mod-by-feature.md) - Feature organization
132
- - [proj-lib-main-split](./proj-lib-main-split.md) - Lib/main separation
133
- - [proj-mod-rs-dir](./proj-mod-rs-dir.md) - Multi-file modules
@@ -1,148 +0,0 @@
1
- # proj-lib-main-split
2
-
3
- > Keep `main.rs` minimal, logic in `lib.rs`
4
-
5
- ## Why It Matters
6
-
7
- Putting your logic in `lib.rs` makes it testable, reusable, and keeps `main.rs` as a thin entry point. Integration tests can only access your library crate, not binary code in `main.rs`.
8
-
9
- ## Bad
10
-
11
- ```rust
12
- // src/main.rs - everything here
13
- fn main() {
14
- let args = parse_args();
15
- let config = load_config(&args.config_path).unwrap();
16
- let db = connect_database(&config.db_url).unwrap();
17
-
18
- // Hundreds of lines of application logic...
19
- // All untestable from integration tests!
20
- }
21
-
22
- fn parse_args() -> Args { /* ... */ }
23
- fn load_config(path: &str) -> Result<Config, Error> { /* ... */ }
24
- fn connect_database(url: &str) -> Result<Db, Error> { /* ... */ }
25
- // ... more functions that can't be tested
26
- ```
27
-
28
- ## Good
29
-
30
- ```rust
31
- // src/main.rs - thin entry point
32
- use my_app::{run, Config};
33
-
34
- fn main() -> anyhow::Result<()> {
35
- let config = Config::from_env()?;
36
- run(config)
37
- }
38
-
39
- // src/lib.rs - all the logic
40
- pub mod config;
41
- pub mod database;
42
- pub mod handlers;
43
-
44
- pub use config::Config;
45
-
46
- pub fn run(config: Config) -> anyhow::Result<()> {
47
- let db = database::connect(&config.db_url)?;
48
- let app = handlers::build_app(db);
49
- app.run()
50
- }
51
- ```
52
-
53
- ## With CLI Arguments
54
-
55
- ```rust
56
- // src/main.rs
57
- use clap::Parser;
58
- use my_app::{run, Args};
59
-
60
- fn main() -> anyhow::Result<()> {
61
- let args = Args::parse();
62
- run(args)
63
- }
64
-
65
- // src/lib.rs
66
- use clap::Parser;
67
-
68
- #[derive(Parser, Debug)]
69
- #[command(name = "myapp", version, about)]
70
- pub struct Args {
71
- #[arg(short, long)]
72
- pub config: PathBuf,
73
-
74
- #[arg(short, long, default_value = "info")]
75
- pub log_level: String,
76
- }
77
-
78
- pub fn run(args: Args) -> anyhow::Result<()> {
79
- // All application logic here - testable!
80
- }
81
- ```
82
-
83
- ## Project Structure
84
-
85
- ```
86
- my_app/
87
- ├── Cargo.toml
88
- ├── src/
89
- │ ├── main.rs # Entry point only
90
- │ ├── lib.rs # Library root, re-exports
91
- │ ├── config.rs # Configuration
92
- │ ├── database.rs # Database connection
93
- │ └── handlers/ # Request handlers
94
- │ ├── mod.rs
95
- │ └── users.rs
96
- └── tests/
97
- └── integration.rs # Can access lib.rs!
98
- ```
99
-
100
- ## Testing Benefits
101
-
102
- ```rust
103
- // tests/integration.rs - can test everything!
104
- use my_app::{Config, run, database};
105
-
106
- #[test]
107
- fn test_database_connection() {
108
- let config = Config::test_config();
109
- let db = database::connect(&config.db_url).unwrap();
110
- assert!(db.is_connected());
111
- }
112
-
113
- #[test]
114
- fn test_full_workflow() {
115
- let config = Config::test_config();
116
- // Test the actual run function
117
- assert!(my_app::run(config).is_ok());
118
- }
119
- ```
120
-
121
- ## Multiple Binaries
122
-
123
- ```rust
124
- // src/lib.rs - shared code
125
- pub mod core;
126
- pub mod utils;
127
-
128
- // src/bin/server.rs
129
- use my_app::core::Server;
130
-
131
- fn main() -> anyhow::Result<()> {
132
- Server::new()?.run()
133
- }
134
-
135
- // src/bin/cli.rs
136
- use my_app::core::Client;
137
-
138
- fn main() -> anyhow::Result<()> {
139
- let client = Client::new()?;
140
- client.execute_command()
141
- }
142
- ```
143
-
144
- ## See Also
145
-
146
- - [proj-bin-dir](proj-bin-dir.md) - Put multiple binaries in src/bin/
147
- - [proj-mod-by-feature](proj-mod-by-feature.md) - Organize modules by feature
148
- - [test-integration-dir](test-integration-dir.md) - Integration tests in tests/
@@ -1,130 +0,0 @@
1
- # proj-mod-by-feature
2
-
3
- > Organize modules by feature, not type
4
-
5
- ## Why It Matters
6
-
7
- Feature-based organization keeps related code together, making navigation intuitive and changes localized. Type-based organization (all handlers in one folder, all models in another) scatters related code across the codebase, making features harder to understand and modify.
8
-
9
- ## Bad
10
-
11
- ```
12
- src/
13
- ├── controllers/
14
- │ ├── user_controller.rs
15
- │ ├── order_controller.rs
16
- │ └── product_controller.rs
17
- ├── models/
18
- │ ├── user.rs
19
- │ ├── order.rs
20
- │ └── product.rs
21
- ├── services/
22
- │ ├── user_service.rs
23
- │ ├── order_service.rs
24
- │ └── product_service.rs
25
- └── repositories/
26
- ├── user_repository.rs
27
- ├── order_repository.rs
28
- └── product_repository.rs
29
- ```
30
-
31
- ## Good
32
-
33
- ```
34
- src/
35
- ├── user/
36
- │ ├── mod.rs # Re-exports public items
37
- │ ├── model.rs # User struct, types
38
- │ ├── repository.rs # Database operations
39
- │ ├── service.rs # Business logic
40
- │ └── handler.rs # HTTP handlers
41
- ├── order/
42
- │ ├── mod.rs
43
- │ ├── model.rs
44
- │ ├── repository.rs
45
- │ ├── service.rs
46
- │ └── handler.rs
47
- ├── product/
48
- │ ├── mod.rs
49
- │ ├── model.rs
50
- │ ├── repository.rs
51
- │ └── handler.rs
52
- └── lib.rs
53
- ```
54
-
55
- ## Benefits
56
-
57
- | Aspect | Type-Based | Feature-Based |
58
- |--------|------------|---------------|
59
- | Finding code | Search across folders | One folder per feature |
60
- | Adding feature | Touch 4+ folders | Create one folder |
61
- | Understanding feature | Jump between folders | Everything in one place |
62
- | Deleting feature | Hunt through codebase | Delete one folder |
63
- | Code ownership | Unclear | Clear feature owners |
64
-
65
- ## Module Structure
66
-
67
- ```rust
68
- // src/user/mod.rs
69
- mod model;
70
- mod repository;
71
- mod service;
72
- mod handler;
73
-
74
- // Re-export public API
75
- pub use model::{User, UserId, CreateUserRequest};
76
- pub use handler::router;
77
- pub(crate) use service::UserService;
78
- ```
79
-
80
- ## Shared Code
81
-
82
- ```
83
- src/
84
- ├── user/
85
- ├── order/
86
- ├── shared/ # Cross-cutting concerns
87
- │ ├── mod.rs
88
- │ ├── database.rs # Connection pool
89
- │ ├── error.rs # Common error types
90
- │ └── middleware.rs # Auth, logging
91
- └── lib.rs
92
- ```
93
-
94
- ## When to Flatten
95
-
96
- Small modules don't need deep nesting:
97
-
98
- ```
99
- src/
100
- ├── user/
101
- │ ├── mod.rs # Contains User struct + simple functions
102
- │ └── repository.rs # Only if complex enough
103
- ├── config.rs # Simple enough for single file
104
- └── lib.rs
105
- ```
106
-
107
- ## Hybrid Approach
108
-
109
- For larger features, nest further by concern:
110
-
111
- ```
112
- src/
113
- ├── billing/
114
- │ ├── mod.rs
115
- │ ├── invoice/
116
- │ │ ├── mod.rs
117
- │ │ ├── model.rs
118
- │ │ └── service.rs
119
- │ ├── payment/
120
- │ │ ├── mod.rs
121
- │ │ ├── model.rs
122
- │ │ └── processor.rs
123
- │ └── shared.rs
124
- ```
125
-
126
- ## See Also
127
-
128
- - [proj-flat-small](./proj-flat-small.md) - Keep small projects flat
129
- - [proj-pub-use-reexport](./proj-pub-use-reexport.md) - Clean public API
130
- - [proj-lib-main-split](./proj-lib-main-split.md) - Lib/main separation
@@ -1,120 +0,0 @@
1
- # proj-mod-rs-dir
2
-
3
- > Use mod.rs for multi-file modules
4
-
5
- ## Why It Matters
6
-
7
- Rust offers two styles for multi-file modules. The `mod.rs` style is clearer for larger modules and aligns with how most Rust projects are structured. Choose one style consistently.
8
-
9
- ## Two Styles
10
-
11
- ### Style 1: mod.rs (Recommended for larger modules)
12
-
13
- ```
14
- src/
15
- ├── user/
16
- │ ├── mod.rs # Module root
17
- │ ├── model.rs
18
- │ └── repository.rs
19
- └── lib.rs
20
- ```
21
-
22
- ```rust
23
- // src/lib.rs
24
- mod user; // Looks for user/mod.rs or user.rs
25
-
26
- // src/user/mod.rs
27
- mod model;
28
- mod repository;
29
- pub use model::User;
30
- ```
31
-
32
- ### Style 2: Adjacent file (Recommended for smaller modules)
33
-
34
- ```
35
- src/
36
- ├── user.rs # Module root
37
- ├── user/
38
- │ ├── model.rs
39
- │ └── repository.rs
40
- └── lib.rs
41
- ```
42
-
43
- ```rust
44
- // src/lib.rs
45
- mod user; // Looks for user.rs, then user/ for submodules
46
-
47
- // src/user.rs
48
- mod model;
49
- mod repository;
50
- pub use model::User;
51
- ```
52
-
53
- ## When to Use Each
54
-
55
- | Scenario | Recommendation |
56
- |----------|----------------|
57
- | Simple module (1-3 submodules) | Adjacent file (`user.rs` + `user/`) |
58
- | Complex module (4+ submodules) | `mod.rs` style (`user/mod.rs`) |
59
- | Deep nesting | `mod.rs` at each level |
60
- | Library with public modules | Consistent style throughout |
61
-
62
- ## mod.rs Benefits
63
-
64
- - Clear that `user/` is a module directory
65
- - All module code inside the folder
66
- - Easier to move/rename entire modules
67
- - Common in large codebases (tokio, serde)
68
-
69
- ## Adjacent File Benefits
70
-
71
- - Module declaration outside directory
72
- - Can see module's interface without entering folder
73
- - Matches Rust 2018+ default lint preference
74
- - Good for small modules with few submodules
75
-
76
- ## Example: Complex Module
77
-
78
- ```
79
- src/
80
- ├── database/
81
- │ ├── mod.rs # Main module, re-exports
82
- │ ├── connection.rs # Connection pool
83
- │ ├── migrations.rs # Schema migrations
84
- │ ├── queries/ # Sub-module for queries
85
- │ │ ├── mod.rs
86
- │ │ ├── user.rs
87
- │ │ └── order.rs
88
- │ └── error.rs
89
- └── lib.rs
90
- ```
91
-
92
- ```rust
93
- // src/database/mod.rs
94
- mod connection;
95
- mod migrations;
96
- mod queries;
97
- mod error;
98
-
99
- pub use connection::Pool;
100
- pub use error::DatabaseError;
101
- pub use queries::{UserQueries, OrderQueries};
102
- ```
103
-
104
- ## Consistency Rule
105
-
106
- Pick one style for your project and stick with it:
107
-
108
- ```rust
109
- // Cargo.toml or clippy.toml
110
- [lints.clippy]
111
- mod_module_files = "warn" # Enforces mod.rs style
112
- # OR
113
- self_named_module_files = "warn" # Enforces adjacent style
114
- ```
115
-
116
- ## See Also
117
-
118
- - [proj-flat-small](./proj-flat-small.md) - Keep small projects flat
119
- - [proj-mod-by-feature](./proj-mod-by-feature.md) - Feature organization
120
- - [proj-pub-use-reexport](./proj-pub-use-reexport.md) - Re-export patterns
@@ -1,155 +0,0 @@
1
- # proj-prelude-module
2
-
3
- > Create prelude module for common imports
4
-
5
- ## Why It Matters
6
-
7
- A `prelude` module collects the most commonly used types and traits for glob import. Users write `use my_crate::prelude::*` instead of many individual imports. This follows the pattern established by `std::prelude`.
8
-
9
- ## Bad
10
-
11
- ```rust
12
- // Users must import everything individually
13
- use my_crate::Client;
14
- use my_crate::Config;
15
- use my_crate::Error;
16
- use my_crate::Request;
17
- use my_crate::Response;
18
- use my_crate::traits::Handler;
19
- use my_crate::traits::Middleware;
20
- use my_crate::types::Method;
21
- ```
22
-
23
- ## Good
24
-
25
- ```rust
26
- // src/lib.rs
27
- pub mod prelude {
28
- pub use crate::{
29
- Client,
30
- Config,
31
- Error,
32
- Request,
33
- Response,
34
- };
35
- pub use crate::traits::{Handler, Middleware};
36
- pub use crate::types::Method;
37
- }
38
-
39
- // Users write:
40
- use my_crate::prelude::*;
41
- ```
42
-
43
- ## What to Include
44
-
45
- | Include | Don't Include |
46
- |---------|---------------|
47
- | Core types users always need | Rarely-used types |
48
- | Common traits | Implementation details |
49
- | Error types | Internal helpers |
50
- | Extension traits | Feature-gated items (usually) |
51
- | Type aliases | Everything |
52
-
53
- ## Example: Web Framework Prelude
54
-
55
- ```rust
56
- pub mod prelude {
57
- // Core request/response
58
- pub use crate::{Request, Response, Body};
59
-
60
- // Error handling
61
- pub use crate::Error;
62
-
63
- // Common traits
64
- pub use crate::traits::{FromRequest, IntoResponse};
65
-
66
- // Routing
67
- pub use crate::Router;
68
-
69
- // HTTP types
70
- pub use crate::http::{Method, StatusCode};
71
- }
72
- ```
73
-
74
- ## Example: Database Library Prelude
75
-
76
- ```rust
77
- pub mod prelude {
78
- // Connection and pool
79
- pub use crate::{Connection, Pool};
80
-
81
- // Query building
82
- pub use crate::query::{Query, Select, Insert, Update, Delete};
83
-
84
- // Traits for custom types
85
- pub use crate::traits::{FromRow, ToSql};
86
-
87
- // Error type
88
- pub use crate::Error;
89
- }
90
- ```
91
-
92
- ## Pattern: Tiered Preludes
93
-
94
- ```rust
95
- // Minimal prelude
96
- pub mod prelude {
97
- pub use crate::{Client, Config, Error};
98
- }
99
-
100
- // Full prelude for power users
101
- pub mod full_prelude {
102
- pub use crate::prelude::*;
103
- pub use crate::advanced::*;
104
- pub use crate::extensions::*;
105
- }
106
- ```
107
-
108
- ## Pattern: Feature-Gated Prelude Items
109
-
110
- ```rust
111
- pub mod prelude {
112
- pub use crate::{Client, Error};
113
-
114
- #[cfg(feature = "async")]
115
- pub use crate::async_client::AsyncClient;
116
-
117
- #[cfg(feature = "serde")]
118
- pub use crate::serde::{Serialize, Deserialize};
119
- }
120
- ```
121
-
122
- ## Guidelines
123
-
124
- 1. **Be conservative** - Only include truly common items
125
- 2. **Avoid conflicts** - Don't include names that might clash (e.g., `Error`)
126
- 3. **Document it** - List what's included in module docs
127
- 4. **Stay stable** - Removing items is breaking change
128
-
129
- ## Documenting the Prelude
130
-
131
- ```rust
132
- //! Common imports for convenient glob importing.
133
- //!
134
- //! # Usage
135
- //!
136
- //! ```
137
- //! use my_crate::prelude::*;
138
- //! ```
139
- //!
140
- //! # Contents
141
- //!
142
- //! This prelude re-exports:
143
- //! - [`Client`] - The main API client
144
- //! - [`Config`] - Client configuration
145
- //! - [`Error`] - Error type
146
- pub mod prelude {
147
- // ...
148
- }
149
- ```
150
-
151
- ## See Also
152
-
153
- - [proj-pub-use-reexport](./proj-pub-use-reexport.md) - Re-export patterns
154
- - [api-extension-trait](./api-extension-trait.md) - Extension traits
155
- - [doc-module-inner](./doc-module-inner.md) - Module documentation