Files
Phillip Tarrant 63cbc8c16e fix(creation-screen): the white text, the badge on top of the roll, and a window too big for the laptop
The human's first F6 run found four defects headless GUT could not see, all
now fixed and break-proven.

1. Fifteen Labels shipped invisible. _fonts() sets a default font and size but
   never a default font_color for the base Label type, so a Label with no
   type-variation inherited Godot's built-in default — WHITE — and rendered
   white-on-parchment: the four race names, four race blurbs, and seven calling
   names, every unreadable string on the sheet. New CardTitle / CardBody roles
   (mock #3a2f1c / #6a5a3a) fix it. NOT a global default Label colour: the Title
   screen has 12 bare Labels on a dark background that rely on white.

2. The PRIMARY badge covered the rolled value. The ability card is a
   PanelContainer, and a Container force-fits its children, so the badge's
   authored anchors were dead letters — it stretched to the card's full width
   and centred over the value. Nesting it under a plain Control (not a
   Container) restores absolute positioning. The badges also carried _flat()'s
   12/6 card padding; a new tight pill stylebox matches the mock's 2px 9px.

3. Race cards overflowed their own border (108px card, 114px of content). Bumped
   to 140. The CHOSEN badge on the calling card moved from centre to the mock's
   top-right, and the ability card got its own AbilityCard variation with 16px
   top headroom for the badge (ParchmentCard is shared with the shell).

4. The default window (1600x900) was larger than a 1600x900 laptop's usable
   area, so the WM clamped it to 1589x752 and the run came up pillarboxed.
   Default is now 1280x720, resizable; the 1920x1080 design canvas is unchanged
   (canvas_items + keep scales it, so no layout number moved).

Also closes M4-b's two open copy items: the cutpurse origin fragment (it
contradicted its own blurb) and the Hint label (it omitted the roll's floor of
8, now pinned to NewGame.roll_attributes).

Guards for 1-4 are new and each was re-broken and watched go red. The overflow
guard in 3 was FIRST WRITTEN AS A TAUTOLOGY — Godot clamps Control.size up to
its combined minimum, so `min <= size` is `x <= x` — and passed against the bug,
29/29, until it was rewritten to measure against the card that clips. That is
traps.md #17 and the thirteenth cannot-fail assertion this branch has caught.

319 client tests green, content build green, theme drift guard satisfied.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-14 19:56:09 -05:00
..
2026-07-09 11:17:54 -05:00

/content — authored game data

Cross-cutting authored writing, split by role in the data model (see the canon log spec in /docs):

roadmap.md The content track — Spine · Bill of Materials · Backlog. START HERE.
/lore      Authored Markdown bibles. THE SOURCE OF TRUTH; world/ + server/ are built from it.
/world     Static, ID-referenced game content. Identical every playthrough. BUILT.
  /locations   The map — towns, dungeons, points of interest (by id)
  /npcs        Per-NPC persona + knowledge lists (charter §6)
  /quests      Story skeletons and quest definitions (charter §17)
  /items       Item definitions — gear, consumables, cursed items (§7)
/server    Spoiler bodies + personas. API-only; excluded from the client export. BUILT.
/origins   Thin starting-state seeds. One per starting point. POC authors one.
/fallback  Authored degraded-DM text for every AI surface (charter §13)

roadmap.md governs what gets authored. Its rule: never author anything that is not in the Bill of Materials. Ideas that arrive go to its Backlog.

The three layers

  • world/ is static content the origin and the canon log reference by stable string id. Authored once; the same for every play.
  • origins/ are thin seeds — where the player starts, the situation, and disposition/quest/item/build seeds. Values, not maps. Increase replayability without multiplying authoring work.
  • fallback/ is not world content — it is degraded-DM prose (§13), consumed when the API is down. It sits outside world/ on purpose: nothing resolves an id against it.

At new-game, code constructs the runtime canon log from a chosen origin + world content + character creation. See /docs/canon-log.md (spec) — authored via the design under /docs/superpowers/specs.

Authoring notes

  • NPC knowledge lists are the whole design (§6). The only thing stopping the blacksmith from revealing the twist. Real authoring work — budget for it.
  • Fallback text is content, not error handling (§13). Every AI-dependent surface needs one before it ships.
  • Story skeletons are authored for now. AI-generated skeletons are v2 (§17).