Content as the first EntryDimension #1
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What to build
The tracer slice for ADR 0002.
MoodEntrystops carryingContentas a field;Contentbecomes a self-containedEntryDimensionwith its own module, table, port, and mapper, composed onto the entry at read time.This slice's real deliverable is the pattern, not the feature — every dimension after this one copies it. Get the composition layer right here and the rest are mechanical.
Reads must batch-load a dimension across a whole page of entries, not per entry. The existing entry hydration already does this for side tables; the composer generalises it so adding a dimension does not widen an existing function's signature.
The wire format is a kind-keyed map (ADR 0002, and the SPA's Zod schemas are hand-written, so a discriminated union covers it). The server dispatches by kind to a typed parser — a new dimension is a new module plus one registration line, never an edit to existing dimension code.
Acceptance criteria
MoodEntryno longer has acontentfield orset_contentContenthas its own domain module, table, port, and mapperContent's module or toMoodEntryBlocked by
None - can start immediately.