C.W.K.
Stream
Lesson 04 of 04 · published

A Shelf Is Not a Container

~9 min · all-entries, projection, orthogonal-axes, no-tradeoff

Level 0Cold Hearth
0 XP0/34 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"All Entries is the cross-journal aggregate projection."

All Entries Reads Across; It Doesn't Own

Sooner or later you want to see everything at once, regardless of which journal it's in. That's All Entries — and it's important to be precise about what it is. All Entries is a cross-journal aggregate projection: a single view that reads across every journal's timeline at once. It is not a super-journal that owns the crumbs. The crumbs still belong to their individual journals — Daily, Quotes, Travel — and All Entries simply reads over the whole shelf and shows you the merged stream. Ownership stays put; the view reaches across.

This is the same 'one canonical state, many projections' rule you met with Log, Calendar, and Map, applied to the journal axis. Each journal is a partition of the crumb store; All Entries is the projection that ignores the partition and reads the union. If it owned the crumbs, you'd have two sources of truth for which journal a crumb lives in — the crumb's own journal_id and All Entries' claim — and they'd drift. Keeping it a pure projection means there's exactly one answer to 'which journal owns this crumb', and All Entries never contradicts it.

An aggregate view is a projection, not an owner. When you add a 'see everything' view over partitioned data, make it read across the partitions rather than becoming a container above them. A view that owns is a second source of truth; a view that projects is just a lens. The crumbs have exactly one home each, and every 'across' view is a way of looking, never a place things live.

Organization and Openness Are Not a Tradeoff

Here's the quiet payoff of the whole track, and the reason the shelf was worth adding. In most systems, getting more organized means giving up some freedom — more folders means more fences, more structure means more walls. Vesta escapes that tradeoff because its two axes are orthogonal. The journal axis is categorical; the date axis is temporal; they don't touch. So you can be maximally organized on one axis — keep as many journals as you like — while staying maximally open on the other — every one of those journals runs endlessly in both directions. Structure on the category axis costs you nothing on the time axis, because adding a journal never puts an end on a timeline.

The Whole Shape, in One Sentence

Put the whole track together and you get Dad's framing, now fully earned: Vesta is Waystone with one journey of infinite bounds, and the shelf is several such infinite timelines side by side, readable one at a time or all at once. The container was removed on the time axis and never smuggled back; the organization you'd have used a container for lives on the orthogonal category axis instead, as a shelf of partitions with a projection across them. Open where it must be open, organized where it helps — and never trading one for the other.

Code

All Entries — a projection over the shelf, owning nothing·typescript
// crumbs each have exactly ONE home (journal_id)
// All Entries reads ACROSS homes; it never owns

function allEntries(crumbs: Crumb[]): Crumb[] {
  return [...crumbs].sort(byTargetDateDesc); // union of every journal
}

function oneJournal(crumbs: Crumb[], jid: string): Crumb[] {
  return crumbs.filter(c => c.journal_id === jid); // a single partition
}

// two orthogonal axes, no tradeoff between them:
//   category axis: many journals   (as organized as you like)
//   time axis:     unbounded each  (as open as it ever was)
// adding a journal never puts an end on any timeline

External links

Exercise

Find a system where getting organized cost you openness — more folders meant more rigid boundaries, more structure meant more walls. Ask whether the organizing axis and the constrained axis were actually the same axis, or whether they could be made orthogonal. Sketch a redesign where you organize on one axis and stay open on the other, so structure stops costing freedom.
Hint
The tradeoff usually comes from organizing and constraining on the SAME axis — folders that are both your categories and your boundaries. Split them: put organization on a categorical axis and leave the other axis (time, scope, membership) open. Orthogonal axes let you have both at full strength.

Progress

Progress is local-only — sign in to sync across devices.
Spotted a bug or have feedback on this page?Report an Issue

Comments 0

🔔 Reply notifications (sign in)
Sign inPlease sign in to comment.

No comments yet — be the first.