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

Waystone Had a Container; Vesta Removed It

~11 min · open-timeline, divergence, container, domain-modeling

Level 0Cold Hearth
0 XP0/34 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"Vesta is Waystone with exactly one journey whose bounds are ±∞."

The Journey Was the Container

Waystone's core noun is the Journey: a bounded container with a departure, a return, and days that live inside it. That boundary is load-bearing. Every dated view in Waystone — the map, the day page, the plan-versus-actual layers — can assume it lives inside a journey, and can ask questions scoped to that journey: which days does this trip have? what's the first and last date? what belongs to this journey and nothing else? The container gives every projection a floor and a ceiling.

Vesta inherited almost everything from Waystone — the crumb, the outbox, the composer, the assembly consultation — and then removed exactly one thing: the container. There is no journey above the date. The date itself is the first-class axis, and nothing sits over it. Dad's own framing captures it perfectly: Vesta is Waystone with exactly one journey whose bounds are plus and minus infinity.

Identify the load-bearing container before you remove it. When you fork a design and drop a central boundary, that boundary was probably holding up more than it looked. Removing it isn't a deletion — it's a promise that everything the boundary supported can now stand on what remains. Name what it was supporting before you cut it.

Why Removal Is the Hard Direction

Adding a container is a local change: you wrap some things in a new scope and the rest of the system barely notices. Removing one is global. Every projection that quietly assumed 'there is a journey here' now has to be re-examined and re-proven against the bare date axis. Does the map still make sense with no trip to scope it? Does 'the first day' still mean anything when there is no departure? Does assembly know what 'a day' is without a journey to sit inside? Each of those was free under Waystone's container and has to be re-earned under Vesta's open axis.

That's the deep lesson of this track: subtracting structure costs more design than adding it. A boundary is an assumption every downstream reader gets to lean on. Take it away and you're paying back every lean at once.

What Replaces the Container: Nothing Above, One Thing Below

So what holds the shape once the journey is gone? The date axis alone — unbounded in both directions — plus, later, a categorical shelf of journals that sits beside the axis rather than above it (that's Track 5). The crucial discipline is that Vesta forbids re-introducing a bounded time container by reflex. If a future need seems to call for one, that's a decision to make on purpose and record, never a quiet return to the shape Waystone had.

Code

The shape that changed: container vs open axis·typescript
// Waystone — the journey is the container; days live inside it
interface Journey {
  id: string;
  departure: string;   // the boundary
  return: string;      // the boundary
  days: Day[];         // scoped by the journey above them
}

// Vesta — no container above the date; the axis is the first thing
interface Crumb {
  id: string;          // ULID
  target_date: string; // the owning day — the axis is unbounded
  // ...there is no `journey` field, and nothing sits above the date
}

// Dad's framing: Vesta === Waystone with one journey whose bounds are ±∞

External links

Exercise

Find a container in a data model you know — a project that holds tasks, an album that holds photos, an order that holds line items. Imagine removing it so the child items live on a single flat axis instead. List three things that were 'free' because of the container (a scope, a first/last, a belongs-to) that you'd now have to re-prove. That list is the true cost of removal.
Hint
The container's gifts are usually invisible until you remove it: 'all items in THIS thing', 'the first/last item', 'this item belongs to exactly one parent'. Each becomes a question you must answer another way once the parent is gone.

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.