Files
urm03/persistent-memory.md
T

6.0 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. (Distinct repo from vh/urm03 — operator briefly read the new name as a rename; clarified 2026-08-08.)
  • [2026-08-08] Operator is building asset tools offline (his side — likely the Aseprite/Retro Diffusion pixel pipeline from the advisor notes) and will loop this project in when ready. M2 playtest verdict still pending; no repo work blocked on it.
  • [2026-08-14] Aseprite 1.3.18.2 built from source on nh3-dev (operator-licensed) at ~/bin/aseprite; headless gen_sprites.lua run verified pixel-identical with preview.py (see CLAUDE.md Engine notes). Sprite work remains _ph ideation — greybox stays art-free.
  • [2026-08-15] Retro Diffusion local weights wired into Arbo's ComfyUI (irv-ml1, /storetank/arbo/models, comfy-dev thread 01M01PKJ5EAR…): base pixel-art checkpoints (rd_pixel/palettegen/ micro_v14) + VAE (comfy-dev repaired its key prefixes — derived file, not a symlink) + 5 controlnets + 11 LECO sliders VERIFIED working. Render at 512 and downscale — 128 direct is below the model's floor (validated A/B on booth rd-validation).
  • [2026-08-15] Style LoRAs recovered — operator decrypted all 24 himself (with permission); now live in ComfyUI. Genuine SD1.5 LoRAs (kohya, 792 tensors each), symlinked models/loras/rd/, enumerated by LoraLoader. Validation step 2 passes (rd/topdown @1.0, delta 41.7 vs baseline; booth rd-loras). Licensing (operator directive): weights are copyrighted, licensed-for-use, NOT-for-export — fleet-internal only, no redistribution/publish/ serve. Ideation output stays _ph per asset policy regardless. Trigger words are per-LoRA and non-guessable (gameboy64, gba64, pixelflat64, …) — 20 of 24 carry one; full map catalogued on comfy-dev, requested for local record. First ideation batch (M03 sprite-grid 32/48px @512-downscaled, grunt/burster) gated on operator go.

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.