Files
urm03/persistent-memory.md
T
vh 4ae0876e34 feat: salvage-pickup loop — kill-fed charges, scrap drops, salvage-gated card levels
Per canon decisions 2026-08-07 (advisor CONCEPT.md f12cb15, falsifier
response): charges now generate on kills (kills_per_charge, chemistry
chain kills feed the hand; per-hit generation removed). Kills drop
scrap as physical pickups (amber diamond, magnet radius 70, drift to
mech, 20s fade; grunt 1 / burster 3) — collection is the positioning
reward gradient. Cumulative collected scrap gates card levels 1-3
(thresholds 12/30; per-level radius x1.25/x1.5 and power x1.15/x1.5 —
HEAT L3 hits one-cast detonation threshold). HUD: level notches under
slots + scrap counter. Salvage spawn is call_deferred: death can fire
inside a physics signal flush where Area2D setup is blocked.

Smoke gate: charge accrual now kill-fed, salvage drop + collection +
level gating phases added, heat-target selection made retry-tolerant.
4/4 green on nh3-dev headless 4.7.1.
2026-08-07 12:46:59 -07:00

74 lines
3.6 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.
- Everything is knobs; operator says "everything needs tuning" — no
tuning pass done yet. v1.0 cut not yet made (operator sign-off
needed; ROADMAP v1 target arguably met).
## 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.