Files
urm03/persistent-memory.md
T
vh fc4fc59a2b feat: M2 run skeleton — belt, card draft, node fork, room sequencing, run tally
Belt (canon: charges are the cost, the belt is the ammo): cards are
CARD_TYPES indices consumed on play, next slides into the 2-slot hand;
belt cap 8; HUD shows hand glyphs + upcoming-card ticks. Card pool
grows to 4: SHOCKWAVE, HEATWAVE, DASH (impulse along held movement
direction — aimable while frozen, no aim input), IGNITE (nearest-enemy
heat spike past threshold). Rooms: spawn-budget waves (base 8 +4/room,
4 rooms/run); clear -> interstitial fork (CARD vs SCRAP +8) -> CARD
opens a 3-option draft + scrap decline (+4) -> next room; final clear
or mech destruction -> tally overlay (rooms/kills/scrap/chem) with
relaunch on 1. Interstitial owns the pause while active; the hand
yields input and time authority to it. Mech death now signals the run
manager instead of hard-reloading.

Chain semantics (same-tag surge / cross-tag chemistry trigger)
deliberately deferred to M3.

Smoke gate: belt consumption white-boxed in the card phase, _until
moved to process_frame (physics awaits deadlock under pause), run
phase covers clear->fork->draft->belt growth->room advance->tally.
3/3 green on nh3-dev headless 4.7.1.
2026-08-07 20:30:43 -07:00

4.2 KiB

Persistent memory — urm03 (U R M03)

Last updated: 2026-08-07

Always check for /tmp/m03-dev-handoff.md — if it exists and its Written: stamp is under an hour old, read it (it carries the in-flight handoff from the previous session), then delete it. Older than an hour: stale — delete it unread.

Repo purpose

Implementation repo for U R M03 (Godot 4.7.1): the strategy-forward mech auto-battler rogue-lite. Design canon lives in the advisor repo (see CLAUDE.md); this repo builds what canon ratifies. Current mission is the greybox falsifier (ROADMAP.md v1) that tests the design's three core bets.

Current state / in-flight

As of 2026-08-07 (post-falsifier):

  • Greybox build complete AND falsifier verdicts rendered (ROADMAP v1 target met through capability 6). Verdicts: bet 2 (card-freeze rhythm) CONFIRMED; bet 1 (positioning) shaky → salvage-pickup loop adopted and built; bet 3 (chemistry) inconclusive → in-card randomness parked to belt stage.
  • Post-falsifier loop built: charges generate on kills; kills drop scrap pickups (magnet radius, fade); collected scrap gates card levels 1→3 (thresholds + per-level radius/power scaling, HEAT L3 reaches one-cast threshold). Smoke gate green 4/4.
  • Canon amendments landed in the advisor repo at f12cb15 (local-only — that repo has NO git remote): Freeze charge ratified, kill-charges + salvage-gated levels decided, randomness parked.
  • Salvage loop playtested and KEPT (operator, 2026-08-07: "interesting mechanic, let's keep it and move on"). Everything remains knobs; no tuning pass done yet.
  • M1 (greybox falsifier) done, untagged — v1.0 reserved for the public RC (operator ruling 2026-08-07; internal milestones are 0.x).
  • M2 (run skeleton) BUILT 2026-08-07, operator playtest pending: belt (consume-on-play, draft refills), draft node (3 + scrap decline), CARD-vs-SCRAP fork between rooms, spawn-budget rooms (4/run), tally + relaunch, DASH + IGNITE greybox cards. Chain semantics deliberately deferred to M3.
  • Advisor repo remote WIRED 2026-08-07: git@gitea.phasefinal.com:vh/game-design-advisor.git (private, created via tea CLI with the vh token), main pushed — canon is backed up.

Recent decisions

  • [2026-08-06] Greybox discipline: direct implementation + headless smoke gate; contract/heid ceremony skipped — falsifier code's real review is the operator playtest.
  • [2026-08-07] Freeze charge meter adopted as the card-time variant for playtest (banded ladder, A/B vs unlimited toggle on M); canon ratification deferred pending playtest verdict — tracked at commit 73f84e7 + advisor repo CONCEPT.md § Open questions #0. → persistent-memory.d/2026-08-07-freeze-meter-variant.md
  • [2026-08-07] Detonations are symmetric — they damage enemies AND the mech in radius: one grammar on both sides; heat play prices standing close (1976149).
  • [2026-08-06] Placeholder tag hues: KINETIC pale steel-blue, HEAT orange — canon assigns no tag colors yet (naming/color pass parked post-greybox).
  • [2026-08-07] Falsifier verdicts + resulting design decisions live in advisor-repo CONCEPT.md (§ loop stack amendments, decisions-log rows, open-question #0 closure) at f12cb15 — design rationale is NOT duplicated here; that log owns it.

Tried and abandoned

  • [2026-08-07] Engine.time_scale = 0 as the freeze — fake: physics still steps with delta 0 on 4.7 (probed headless), so delta-independent logic (heat thresholds, contact callbacks) kept firing while "frozen". Freeze = SceneTree.paused + hand on PROCESS_MODE_ALWAYS; time_scale only for dilation > 0 (c340b7b).
  • [2026-08-07] Committing new scripts without their .uid sidecars — the Mac editor generated its own untracked copies and the next git pull refused to merge over them. Import headless before committing so .uid files ride the same commit as their scripts.
  • [2026-08-07] Spawning physics nodes (Area2D) directly inside a physics signal flush (projectile body_entered → death → spawn) — Godot blocks collision setup mid-flush. Spawn via add_child.call_deferred() from any death/hit signal path.