Press Raven · Plan · Educational Game Design

Outstanding work

Six live avenues, 46 items. Five of them are pleasant and unbounded; one of them is the only thing that tests whether any of this works.

Source of truth is the Markdown: .claude/plans/educational-game-design.md — CodeRaven parses its checkboxes, so tick them there, not here. This rendering is for the review pass and will drift once items get checked off.

Where things stand

35Mechanics5 drafted · 30 seeds
57Themes8 drafted · 49 seeds
0Tested against the appno game category, no Swift

Decided: a game is one category parallel to manual and itinerary — one guide per game, game types as an authored games[] array, entries as content items whose fields arrive per-guide via applies_when. A game type is one mechanic × one theme × one subject. Theme sits at guide level, overridden per game type only where it diverges.

Not built: the game category, any Swift, and the machine export target.

Sequencing

The spine
A (game category + Drive Corps)  →  E (Swift)  →  F (Peregrine)
                                     ↑
B, C, D run alongside, any order  ───┘   (D feeds F, loosely)

The critical path is A. Everything in B, C, and D is genuinely useful and none of it unblocks anything — which is exactly why it will quietly absorb all available time if A doesn't go first.

The avenues

A · Prove the model

critical path10 items

The game category plus Drive Corps. Two game types is enough to exercise applies_when; eleven is the wrong first test.

  • Create categories/game/ — schema, and a brief carrying the gamification test plus Drive Corps's forbidden vocabulary
  • Create guides/drive-corps/ with theme: "military" and a games[] array for recon-sweep and intercept
  • Write per-game-type schema-extensions blocks from each mechanic's content contract, not invented
  • Migrate 54 signs (preserving concept as the scoring key) and 100 questions (adding the concept tagging the source bank never had)
  • File Intercept's 12 transmissions as class: flavor; decide where payloads live
  • Write the corpus → app export script
  • Verify the document renders and doesn't choke at ~154 entries (previous max: 144)
  • Verify applies_when shows only the right fields per game type
  • Round-trip one bank into Drive Corps unmodified

B · Mechanics — open questions

10 items

Cheap now, expensive later — every new entry gets shelved against unresolved axes.

  • Layers vs. containers — draft Boss Gauntlet and The Container; a layer will fail to say what one unit of content is
  • Discovering as a sixth motivator — grows to three entries or Rule Discovery returns to Building
  • Four merge questions carrying live doubt: Stream Go/No-Go (65), Minimum Evidence (70), Match the Tool (75), Call Then Execute (82)
  • Find the Pivot (62): mechanic or content lens?
  • Compress It (58): needs a runtime judge — that's the ceiling of authored-content-only
  • Chase The Half-Map, surfaced by the theme catalog and covered by nothing in the 35

C · Mechanics — drafting

4 items
  • Name the Trap (92) — cheapest high-value entry; Peregrine already ships the con taxonomy and Trap Atlas it needs
  • Inspection Budget (90), Build the Chain (90), Fault Sweep (88), Assemble to Order (85)
  • The entries the drafted themes lean on: Order From Constraints, Place the Mark, Infer the Rule
  • Close the response-mode gap — nothing built asks the player to locate or assemble. Fault Sweep is the cheapest test

D · Theme catalog

6 items
  • Draft mechanic fit for the seven fiction-written seeds
  • Normalize the 15 orphan role strings across both catalogs
  • Run the subtraction test on the overlap clusters — Detective / Crime Syndicate / Journalist / Courtroom, and three more
  • Decide the Horror split; decide Natural Disaster's fate
  • Themes reference sheet generator

E · App / Swift

5 items

Deliberately after A, so the layout contract is written against a real document rather than guessed at.

  • games: [GameTypeConfig]? on GuideConfig — the array survives in guide.json today, nothing reads it
  • case "game" in DocumentTemplates with a layout contract
  • Fix section ordering — both catalogs print alphabetically today
  • Implement the machine render target, replacing A's script
  • Decide whether family becomes an enum (means promoting to a real category)

F · Peregrine

5 items

The real test: eleven game types, ~40 mockups that function as the spec, and a pipeline already in place.

  • Create the guide with theme: "detective-noir" and eleven game types
  • Migrate the authored banks — vigilance-bank, Target Practice's 16 claims, Go Undercover's 8 rounds, Forensics' job pool
  • Script-validate index-pointer structure (break_idx) — the schema language can't express it
  • Decide where Press Raven sits against the existing Python pipeline
  • Split the guide past ~300 entries

Decisions only you can make

6 items
  • Theme↔game binding — migrate Drive Corps now, or wait for the theme id scheme? (Likely unblocked now that the catalog exists.)
  • Discovering as a sixth motivator
  • Whether layers and containers need a schema class, or stay visible as unplaced entries
  • The Horror split
  • Whether best_fit_mechanics stays curated-only — role overlap under-generates badly (Horror derives 1 against 4 curated)
  • Confirm build order follows asset tier, not enthusiasm — four document-tier themes share one pipeline and three pair with drafted mechanics

Known risks

Not tasks — things kept visible so they aren't rediscovered later.

The machine export gap.

Every downstream payoff of putting content in the corpus depends on a script nobody has written. Until then a game guide is a nicer place to author content that still has to be moved by hand.

Volume is proven only to 144.

Drive Corps at ~154 is a mild stress test. Peregrine is where it breaks.

Cross-guide refs are unvalidated by the app.

best_fit_mechanics → mechanic id and games[].mechanic → mechanic id are plain strings. A script checks them today; nothing in Press Raven does.

Both catalogs print alphabetically

until the template case lands, which makes the motivator and genre orders invisible on the page.

Scope gravity.

B, C, and D are pleasant and unbounded. A is the only avenue that tests whether the model works, and it is the one that will get postponed.