Flips run/main_scene from TitleScreen to the GameFlow coordinator, so the
shipped boot path runs the real Title -> Creation -> Shell flow. Full suite
327/327 green headless; the human F5 smoke (ADR 0001 visual gate) is the
remaining acceptance step.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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>
- Add scripts/sync-version to sync root /VERSION into client/project.godot
- Add Version GDScript helper (reads application/config/version)
- Test coverage: 2 tests for Version.string() and footer()
- Synced config/version="0.01-alpha" to project.godot
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Keep the design/logical canvas at 1920x1080 (charter §16 / mockups) but add a
window-size override so the window opens at 1600x900 and doesn't fill the whole
screen; canvas_items + keep-aspect scales the canvas to fit.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Two root causes behind the blank F6 run:
1. project.godot had no display/stretch config (README mandates canvas_items
@ 1920x1080). Added [display] window size + stretch mode/aspect — the
project's canvas foundation, needed by every screen.
2. A root Control run directly (F6) is not sized to the viewport by full-rect
anchors — it collapses to (0,0), clipping the ScrollContainer and hiding all
content. Size the root to the viewport explicitly and track size_changed
(dropping the full-rect anchors, which conflict with setting size directly).
Faithful main-scene run now measures root = scroll = viewport = 1920x1080.
Suite 125/125.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>