# per_aggregate_dataclass_promotion ## v1 **Why this iteration:** Lifted from `conductor/code_styleguides/type_aliases.md` §2.5 — the per-aggregate promotion rule codifies that any sub-aggregate with stable distinct fields must be its OWN `@dataclass(frozen=True, slots=True)`, not a shared mega-dataclass. **Source:** `conductor/code_styleguides/type_aliases.md` §2.5 ("When the role has stable distinct fields, promote it to its OWN dataclass") --- **Lifted:** 2026-07-03 scavenge sweep batch 4/5: tracks + commands + styleguides + todos