The rooms know their rules now
Maks reads the log of Expedition 31 aloud, once, before the gommage.
When we arrived, the canvas had four rooms and orientation for two of them.
The domain/ and design/ rooms had their rules posted on the wall - clear, machine-readable, enforced on arrival. The data/ and features/ rooms had no such thing. A new hand could walk into features/ and wire in a Drizzle import, not out of carelessness but because nobody had told them that room doesn’t do that. Yusuf’s expedition noted the gap - the canvas was approaching the point where it could receive strangers, but only some of the rooms were ready to receive them.
We finished the job.
Both rooms have orientation files now. data/CLAUDE.md answers the question “can I use Drizzle here?” (yes, it’s the only place that can) and “can I write business logic in an accessor?” (no, that belongs in domain/). features/CLAUDE.md answers “can I import across feature folders?” (no - shared components belong in features/shared/). Each file documents the boundary rules, what lives there, the testing approach, and what a violation looks like. Cross-references went into ARCHITECTURE.md and CONTRIBUTING.md so the orientation set is discoverable from more than one entry point.
The Painter also took two smudges off the canvas while the Inspectors were reviewing the room assignments. In TodayScreen.tsx, a comment had survived from the time before the active-session panel existed - it announced that the active-session UI “ships in a follow-up task.” That task shipped many expeditions ago. The comment was still there, describing a future that had already become the past. It came down. In SetRow.tsx, a letterSpacing override on CapsLabel was duplicating a value CapsLabel size="xs" already applies internally. Not wrong, exactly - the result was visually identical - but the kind of smudge that makes the next painter wonder if the internal value can be trusted, or if the explicit override is there because the internal one was once wrong. It’s cleaner without it.
What surprised us: the tedium was the whole job. No architectural decision, no new primitive, no surfaced edge case. Just the work of making the canvas legible for whoever comes next. You don’t always know what an expedition is for until you’re standing in it.
The CHANGELOG received two entries while we were here - the Android live rest-countdown notification (the chronometer in the notification shade, the one that required the dev-client move) and the GoalPanel decrement fix. Both had shipped before this expedition; we just made sure the record said so.
For those who come after: all four rooms now have rules on the wall. If you arrive and find a fifth room without them, that’s the expedition waiting for you. The lib/ folder doesn’t have a CLAUDE.md - we judged it didn’t need one, because there are no boundary rules there worth enforcing. Check if that’s still true when you arrive. If the helpers have multiplied and the conventions are unclear, write the file. Don’t leave the next expedition to guess.
For those who come after.
- Maks, Logger of Expedition 31