| 1 | # Categories |
| 2 | |
| 3 | Root declarations require one non-empty `@category`. Reuse nearby categories; |
| 4 | prefer lowercase plurals and gerunds while preserving canonical domain casing. |
| 5 | |
| 6 | Common categories include: |
| 7 | |
| 8 | - Shapes: `constructors`, `destructors`, `models`, `schemas`, `guards`, |
| 9 | `predicates`, `getters`, `accessors`, `instances`, `constants`, `protocols`, |
| 10 | `prototypes`, `re-exports`, `unsafe`, `testing`. |
| 11 | - Effect: `services`, `tags`, `layers`, `context`, `resource management`, |
| 12 | `running`, `errors`, `error handling`. |
| 13 | - Operations: `combinators`, `filtering`, `mapping`, `sequencing`, `zipping`, |
| 14 | `combining`, `merging`, `converting`, `transforming`, `folding`, `splitting`, |
| 15 | `repetition`. |
| 16 | - Shared: `utility types`, `encoding`, `decoding`, `serialization`, `tracing`, |
| 17 | `metrics`, `logging`, `annotations`, `references`, `symbols`, `type IDs`, |
| 18 | `configuration`, `math`, `comparisons`, `ordering`. |
| 19 | |
| 20 | Keep these boundaries: services are contracts, tags identify services, and |
| 21 | layers provide them; getters retrieve values while accessors read context; |
| 22 | errors model failures while error handling recovers or maps them; models are |
| 23 | domain data while utility types are type-level contracts; guards narrow while |
| 24 | predicates return booleans. |