Files
claude-checkpoint-tooling 1c64dd4967 Fix broken main_menu.gd on main + land Play->Back session persistence
Two things, found together while investigating a stuck blocker task:

1. URGENT: main_menu.gd currently fails to parse at all on main
   ("Identifier '_dob_edit' not declared in the current scope"). PR #44
   (hide-all-fields-on-auth-success) and PR #45 (DOBEdit -> Over18Check
   checkbox) each merged cleanly on their own -- Gitea's merge reported
   mergeable:true for both -- but together they left a reference to the
   old _dob_edit var on a line neither PR's diff touched, so no conflict
   was ever flagged. Same failure mode in smoke_test_main_menu_full_flow.gd
   (dob_edit, would have failed to even parse in the checkpoint suite).
   Fixed both to reference _over_18_check / over_18_check.

2. Lands the Play -> Back session-persistence fix (PR #43, task
   28357bca192d) that was stuck behind review the whole time main didn't
   have it yet: signal auth_state_ready, _show_authenticated() /
   _reset_to_logged_out() helpers, and _ready() restoring the
   authenticated UI (not resetting it) when ApiClient already holds a
   valid token. Plus the real fix a review round caught on top of that
   (task 9186405a6373): _show_authenticated() was hiding AuthPanel while
   claiming the welcome label inside it was visible -- a no-op UI-wise,
   since WelcomeLabel.visible=true does nothing once its parent is
   hidden. AuthPanel now stays visible; the regression test
   (smoke_test_main_menu_back.gd, new) asserts is_visible_in_tree(), not
   just .visible, so this class of bug can't pass silently again.

Verified against a live backend: 61/61 pytest, 7/7 Godot smoke tests
(including the new smoke_test_main_menu_back.gd, 12/12).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M6rUEynmv2QmweocAQYARN
2026-08-20 18:15:32 +00:00
..

Testing at Package Checkpoints

A Package Checkpoint (PC1, PC2, ...) is a periodic review point — every few real milestones, the client and server builds get packaged together and independently reviewed before anyone calls anything actually done. See project_agp in Claude's memory, or ask, for the full definition; this doc is just the mechanical "how do I run the tests" part of that review.

Running the suite

python scripts/run_checkpoint_tests.py

Brings up a throwaway Postgres, runs Alembic migrations against it, runs the backend pytest suite, starts the backend server, and runs every Godot headless smoke test (scripts/smoke_test_*.gd) against it. Tears the Postgres container down afterward (--keep-postgres to skip that if you want to poke at the DB after a failure).

If port 5432 is already taken on the machine, pass --postgres-port with something else.

Exit code is 0 only if everything that actually ran passed — suites with nothing to run yet (no Godot binary found, no smoke test scripts yet) are reported SKIPPED, not treated as a failure.

What this does and doesn't prove

Passing this script means: migrations apply cleanly to a genuinely empty database, the backend's unit-level logic is correct, and whatever Godot smoke tests exist actually round-trip against a live backend. It does not mean full endpoint/integration coverage exists — see test_inventory.md for the current, honest list of what's tested and what isn't. A checkpoint review should still involve reading the actual diffs for anything this script's current coverage doesn't reach, not just running green and calling it done.

Growing this over time

As real integration tests get added (endpoint tests hitting the FastAPI app, more Godot smoke coverage beyond health_check), they should land under backend/tests/ / scripts/smoke_test_*.gd respectively — this script picks up new files automatically, nothing to register by hand. Update test_inventory.md's tables when you do, so the inventory stays a source of truth instead of quietly going stale.

Eventual goal (not implemented yet): gate merges to main on this script passing, the same way a real CI pipeline would. For now it's a manual step run at checkpoint review time.