Files
urm03/persistent-memory.md

130 lines
7.1 KiB
Markdown

# 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.