Structure & IA

Three questions I could settle from the data, the category framing as a decision, and what I'd build in what order.

31 July 2026 · higher-level pass · nothing committed

Already done — the lazy load you asked about

Found and fixed. The document was a plain VStack, so opening a guide built every entry view before anything appeared — 430 of them for Stellar, each walking a 75-field schema. Now a LazyVStack: rows build as they scroll into view. This is original code, not something I introduced.

Also made the mini-game roster tally counts in one pass instead of one filter per game.

Three things the data settles

List Two isn't misplaced — it's mislabelled

It has two contradictory definitions in the system. The app calls it "Things that make the world more legible — across all guides." The exporter's header says "List Two is the reject pile and never ships," and holds those entries back from every game build.

The data follows the exporter. All eight members are things set aside:

GuideOn List Two
washington-dcCarmine's · National Museum of Natural History · CityCenterDC · Blagden Alley · HipCityVeg
drive-corpsa held-back question
game-themesNatural Disaster (unused theme)
things-with-a-costone seed

The Natural History Museum makes sense the moment you read it as cut from the DC trip. The "makes the world more legible" copy is leftover from the Things With a Cost concept and has been describing the wrong thing ever since.

Recommend: rename it to what it is — Set Aside or Held Back — and demote it. It is per-guide meaningful (five cut DC stops) and cross-guide meaningless, so it belongs as a guide filter plus a dashboard line, not as a top-level destination sitting next to Dashboard.

Your Entry Body observation is exactly right, and it proves the category line

Catalog guideentriesbody filled
acrylics-field-guide144144 / 144
sat-traps810 / 81
game-themes570 / 57
game-mechanics420 / 42
game-registers130 / 13

One of these is not like the others, and it's the one you flagged. The four real catalogs never write prose — they carry structured fields consumed by other guides. Acrylics writes prose on every single entry, because a person reads it.

The sluggishness was never lazy-loading-related in the navigator

entries(for:) is a dictionary lookup and resolvedSchema is stored, so neither was the cost. It was the document building everything at once. Fixed above. Seed entries felt slow for the same reason — they're inside the same eager stack.

The categories — a sharper test than "resources vs informational"

Your instinct is right, and the body data gives it a hard edge. The question that separates them cleanly is:

Is this guide read by a person, or consumed by another guide?

CategoryDefinitionTestHolds
CatalogReference data other guides point at. Never read start to finish; looked up by id.Something else names its entries.mechanics, themes, registers, sat-traps
Field GuideInformational prose, read by lookup. Grouped by surface.A person reads an entry and is done.things-with-a-cost, + acrylics
ManualInformational prose, read in order. Authored chapters.Entry 12 assumes you read entry 11.the-field-manual
ItineraryTime and place. Days are authored objects.It has dates.asheville, washington-dc
GameContent projected into a running app. Internal, functional.It has a machine_target.stellar, drive-corps, peregrine

On Manual vs Field Guide — you were torn, but the templates already encode a real difference, and it isn't "more personal" or "more how-to." Manual groups by authored chapters[] and reads sequentially; Field Guide groups by surface and reads by lookup. Sequential vs referential is testable, and the two templates that exist already implement it.

On Game not needing style variation — I agree, and it's worth saying what it costs. The design tier (tokens → layout tokens → templates) is real machinery: a design sheet, a Design Packet export, a whole session type. For a guide whose output is Data/*.json, none of it does anything. Stellar currently declares outputs: ["print", "machine"], and print for a game may be vestigial — worth checking whether you have ever wanted it.

Decisions I need: (1) Move acrylics to Field Guide? It's a one-line category change, but it re-resolves its schema and template — I'd want to look at what it currently relies on first. (2) Adopt sequential-vs-referential as the Manual/Field Guide line? (3) Should Game drop the design tier entirely, and does Stellar really want a print output?

Suite cohesion — what CodeRaven has that this can have

Everything in your CodeRaven screenshot is reachable from data already on disk:

One real tension: "how long since I touched it"

That is the one thing not derivable from the corpus. Entries carry updated, but only to the day, and it records when content changed, not when you last looked. The app deliberately keeps no such state — window restoration is explicitly disabled with the comment "the corpus is the state."

My read: that principle is about content, and last-opened is about your session, not the guide. Keeping it in UserDefaults doesn't violate the Prime Directive — deleting the app still loses nothing. That also unlocks opening on the last guide you worked on, which is the right answer to "what should we open on."

Toolbars and export

The two menus you couldn't tell apart

You read them correctly, and one of them is misnamed rather than redundant:

Recommend: your suggestion, with one amendment — make the wand slot a + for a new seed as you said, move Export to project level, fold "clear filters" into the filter menu, and give sculpting an honest home (a labelled control, or cut it if you've never used it). I'd rather ask than quietly bury a working feature.

Export, consolidated

There are currently four export types scattered across three places — Session Packet (wand menu, File menu, guide context menu), Print HTML (⌘E), Mobile Guide (itinerary-only), and Export to App. Your proposal is right; it just needs a fifth row.

Shape: one Export dialog — pick guide(s), then type: Session (markdown, the JSON contract is inside it), Print, Web, To App. Types grey out per guide the way the File menu already does, so the dialog itself teaches which outputs a guide declares.

The beat ticks you'd forgotten

Each segment is one beat — a prose, list, or object field on that entry — filled or hollow. A column scan down the navigator is meant to be the completeness report. The number on the right is the confidence score. Neither is labelled anywhere.

Recommend: a legend at the top of the navigator, or a tooltip. If a thing needs a tooltip on every use, it may be the wrong encoding — but it costs nothing to label it first and see whether that's enough.

Proposed order

Cheapest and least contentious first. Nothing here is started.

  1. Sidebar parity — per-guide change badges, prominent +, last-opened, open on last guide. Mostly wiring existing data.
  2. Per-project commit — scope git add to selected guides. Fixes a real risk as well as your request.
  3. List Two — rename and demote.
  4. Toolbar cleanup — + for new seed, filter consolidation, ticks legend.
  5. Unified export — one dialog, guide × type.
  6. Category reframing — after you decide the three questions above. Moving acrylics wants a look at what it depends on first.
  7. Game de-styling — biggest and least reversible; last.

Items 1–5 are mechanical and I can take them straight through. Item 6 needs your answers. Item 7 I would want to scope properly before touching.

Prior docs · 2026-07-31-game-building-friction.html · 2026-07-31-game-friction-verification.html