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

The Day Bundle Is the Unit

~9 min · day-bundle, assembly-unit, date-shaped, scope

Level 0Cold Hearth
0 XP0/34 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"A draft is the assembled prose of one journal's one date. The day bundle — crumbs, media, draft — is the canonical unit."

Assembly Needs a Grain, and the Grain Is the Day

You can't assemble 'everything' — a projection needs a scope. Vesta's resolved answer is that the scope is the day: a draft is the assembled prose of one journal's one date, and the day bundle — that date's crumbs, its media, and its draft — is the canonical unit assembly works on. It's the direct inheritance of Waystone's Assemble Today. The draft is date-shaped, not query-shaped. You don't assemble 'all my crumbs about the garden across three years'; you assemble March 14th, in this journal, into a page.

Choosing the day as the grain is a real design decision, and it's the right one for a journal because the day is the boundary a person actually navigates. You think in days — 'what was that Saturday like?' — not in unbounded queries. A query-shaped draft ('everything about M.') has no natural edge: it could pull from anywhere, grows without bound, and never maps to a page you'd sit down and read. The day has a natural edge, a natural size, and a natural place in the timeline. It's the grain the whole product is already organized around.

Pick the unit your users already think in. A derivation's scope should match the boundary people navigate by, not the boundary that's easiest to query. For a journal that's the day; for a trip it was the trip-day; for something else it might be the project or the release. Match the grain to the mental model, and every projection lands where the reader expects it.

Weeks and Months Are Views, Not Bigger Units

Naturally you'll want to look at a week or a month. Those exist — as views, projections over a range of days — not as bigger assembly units that compete with the day. The day bundle stays primary. Larger assembly scales (a month in review, a year's retrospective) are a real future ring, and when they arrive they'll consume grounded per-day proposals as input while keeping the review status explicit — they won't displace the day bundle's primacy, they'll build on top of it. First the grain, then the aggregates that respect it.

Why Not Let the User Pick Any Scope?

It's tempting to make assembly fully freeform — 'assemble whatever crumbs you select'. But an unbounded, arbitrary scope quietly breaks the day bundle's clean shape: a draft that spans no particular date can't belong to a day, so it can't sit in the timeline, can't be the day's addressable draft, and reopens the sentinel-date problem from another angle. Keeping the canonical unit date-shaped is what lets every draft have a home on the axis. Freeform, query-shaped assembly can come later as a deliberate feature — but it will be built as a named thing on top of the day bundle, never by dissolving it.

Code

The day bundle — the canonical assembly unit·typescript
interface DayBundle {
  journal_id: string;
  target_date: string;   // the one date this bundle is about
  crumbs: Crumb[];       // every crumb filed to this journal + date
  media: MediaReference[];
  draft: Draft | null;   // the assembled page for this day, if any
}

// assembly reads ONE day bundle and proposes ONE date-shaped draft:
function assembleDay(bundle: DayBundle): Draft { /* ... */ }

// week / month are VIEWS over many bundles, not a bigger unit:
function weekView(bundles: DayBundle[]): DayBundle[] { return bundles; }

External links

Exercise

For a system you know that summarizes or rolls up data, name its assembly grain — the unit a single summary is 'about'. Is it the unit users actually navigate by, or one chosen for query convenience? Then decide which larger groupings should be views over that grain versus genuinely new units. Watch for the query-shaped output that floats free of any natural boundary.
Hint
The good grain is usually a noun users already say out loud — a day, a sprint, a release, an order. If your summaries are 'about' an arbitrary filter instead of a nameable unit, they'll be hard to place, hard to find, and prone to the same floating-scope problems as a sentinel date.

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.