Files
urm03/persistent-memory.md
T

7.1 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). Licensing (operator directive): copyrighted, licensed-for-use, NOT-for-export — fleet-internal only. Full trigger map at tools/retro-diffusion/lora-triggers.md.
  • [2026-08-15] M03 sprite-ideation exploration COMPLETE (2 batches) — pipeline proven, findings ratified to canon, exploration wrapped (operator). Key results (full record: tools/retro-diffusion/ FINDINGS.md): base rd_pixel_v14 alone renders M03 + mismatched eyes; style LoRAs kill the hero (object priors) → reserved for tiles/icons/env props; sprite budget 64px full-body / 48px bust / 32px blob. Booths m03-batch01 / m03-batch02 (ephemeral).
  • [2026-08-14] Art direction resolved (operator): watercolor backgrounds/scenery + pixel-art sprites. Watercolor scenery pipeline owned by waterland-dev (fleet peer). Pixel sprites = local RD base ideation. Ratified to advisor CONCEPT.md (§ Tech & art direction + decisions log + open-Q #2 sprite-grid struck) at 3eeeaf4. Ideation-grade — shipped art still human-authored, M03 ref stays locked syn02/syn04b. Loop-in waterland-dev when scenery work actually starts (no ask ripe yet).

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.
  • [2026-08-14] preload() of an imported texture in a code-created sprite breaks the WHOLE script at compile time if the other machine's import cache is stale (Mac editor after pull: black scene, no movement — preload can't resolve the not-yet-imported resource). Use runtime load() (null-degrades) for code-created sprites; fix 62e86f9. Recovery for a victim machine: quit editor, rm -rf .godot, pull, reopen, let reimport finish. Committed state was provably sound (fresh clone ran clean) — the bug was purely the consumer's stale cache.