memory: snapshot — greybox build complete, playtest pending
First /snapshot: seeds persistent-memory.md (+ one detail file for the freeze-meter variant decision), amends CLAUDE.md with the persistent- memory pointer section.
This commit is contained in:
@@ -4,6 +4,25 @@ Godot 4 game project. Science-fiction rogue-lite: strategy-forward
|
|||||||
mech auto-battler with a light action layer and a nurturing
|
mech auto-battler with a light action layer and a nurturing
|
||||||
base-builder meta.
|
base-builder meta.
|
||||||
|
|
||||||
|
## Persistent memory
|
||||||
|
|
||||||
|
`persistent-memory.md` at the repo root captures durable intent and
|
||||||
|
supporting evidence (goals, decisions, foot-gun warnings, in-flight
|
||||||
|
state) across context resets. Read it at session start; treat it as
|
||||||
|
one input alongside this CLAUDE.md and the auto-memory system, not
|
||||||
|
as the single source of truth.
|
||||||
|
|
||||||
|
It is a lean **index**: the dated log sections keep each over-threshold
|
||||||
|
entry's full body in `persistent-memory.d/<slug>.md`. Pull a detail
|
||||||
|
file only when its index line is relevant to your work — never
|
||||||
|
bulk-read `persistent-memory.d/`.
|
||||||
|
|
||||||
|
When you commit, include any pending `persistent-memory.md` and
|
||||||
|
`persistent-memory.d/` updates in the same commit (stage them
|
||||||
|
alongside whatever else is being committed). Never leave them as a
|
||||||
|
floating uncommitted change while shipping other work — durable memory
|
||||||
|
that lags the code defeats its own purpose.
|
||||||
|
|
||||||
## Design canon (read before designing anything)
|
## Design canon (read before designing anything)
|
||||||
|
|
||||||
The design documents are canonical and live in the advisor repo,
|
The design documents are canonical and live in the advisor repo,
|
||||||
|
|||||||
@@ -0,0 +1,58 @@
|
|||||||
|
# 2026-08-07 — Freeze charge meter adopted as the card-time playtest variant
|
||||||
|
|
||||||
|
**Status: playtest variant, NOT canon.** Ratification into the advisor
|
||||||
|
repo's CONCEPT.md is deferred until the operator's falsification-playtest
|
||||||
|
verdict — tracked at commit `73f84e7` (whose message records the pending
|
||||||
|
state) and the advisor repo's CONCEPT.md § Open questions #0 (the greybox
|
||||||
|
work tracker).
|
||||||
|
|
||||||
|
## The mechanic
|
||||||
|
|
||||||
|
A "Freeze" charge (meter) grows while the hand is closed, drains while
|
||||||
|
open. Its level maps to bands, best to worst:
|
||||||
|
|
||||||
|
- **FROZEN** (level ≥ 45%): true pause (`SceneTree.paused`).
|
||||||
|
- **THAW** (≥ 18%): slow-mo ramping back to full speed as it drains, on
|
||||||
|
an acceleration curve (`thaw_curve` 2.2 — hangs slow, then rushes).
|
||||||
|
- **REALTIME** (≥ 10%): hand open, world at full speed.
|
||||||
|
- **UNAVAILABLE** (below): the hand will not open at all; a drained-open
|
||||||
|
hand force-closes.
|
||||||
|
|
||||||
|
Opening with a full meter buys the whole ladder (~1.65s freeze → ~0.8s
|
||||||
|
thaw → ~0.5s realtime at defaults: cap 3.0s, drain 1.0/s, regen 0.4/s).
|
||||||
|
Closing the hand spools time back up over `release_thaw_s` (0.5s) instead
|
||||||
|
of snapping. All rates/bands are `@export` knobs; M flips live to the
|
||||||
|
original unlimited-toggle variant for A/B.
|
||||||
|
|
||||||
|
## Why (KB-grounded pressure test, 2026-08-07)
|
||||||
|
|
||||||
|
- **Kills a latent dominant strategy**: unlimited freeze made "open the
|
||||||
|
hand as a free tactical pause" always-optimal (Schell: rework rules so
|
||||||
|
a dominant strategy stops being dominant; aligns with CONCEPT.md's
|
||||||
|
anti-dominant-strategy posture). The empty-meter lockout also closes
|
||||||
|
the Space-spam refreeze exploit found during the pressure test.
|
||||||
|
- **Tension cycle**: freeze→thaw→realtime is Schell's
|
||||||
|
rising-tension-then-release loop in miniature, inside every hand-open.
|
||||||
|
- **Temporal triangularity**: play one card early (safe) vs chain deeper
|
||||||
|
into the thaw (greedy) — stacks with belt-depth pricing post-greybox.
|
||||||
|
- **Difficulty/accessibility axis**: meter size / regen / thaw length are
|
||||||
|
one-scalar difficulty knobs that never touch enemy content — can't
|
||||||
|
collide with the invincibility laws. Generous-to-infinite freeze is the
|
||||||
|
accessibility floor.
|
||||||
|
- **Honesty note**: the KB surfaced nothing directly on decision timers /
|
||||||
|
time pressure (retrieval miss) — grounding is flow/tension/triangularity/
|
||||||
|
dominant-strategy material, adjacent but not a direct verdict.
|
||||||
|
|
||||||
|
## Canon tension to watch in playtest
|
||||||
|
|
||||||
|
"Attention is spent ON cards, not during them" (pillar 1, gentlest action
|
||||||
|
skill): a tight freeze window would turn the hand into a reflex test. The
|
||||||
|
generous default + continuous thaw (never a cliff) is the mitigation; the
|
||||||
|
ramp prices dithering and deep chains, not basic use.
|
||||||
|
|
||||||
|
## Evidence chain
|
||||||
|
|
||||||
|
Pressure test + operator "A for now" directive: session 2026-08-07.
|
||||||
|
Implementation: `73f84e7` (meter + bands), `3d2410c` (release ramp +
|
||||||
|
thaw curve). Operator early verdict: "that DOES feel very good", "ramp
|
||||||
|
feels good too… starting to feel game-like".
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
# 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.
|
||||||
|
|
||||||
|
## Tools and conventions
|
||||||
|
|
||||||
|
- Smoke gate: `~/bin/godot --headless --path . res://tests/smoke.tscn`
|
||||||
|
(exit 0 pass / 1 fail; run 3x to catch flakes). After adding new
|
||||||
|
scenes/assets, import first: `~/bin/godot --headless --import --path .`
|
||||||
|
- New GDScript files: run the headless import BEFORE committing so
|
||||||
|
Godot's `.uid` sidecars land in the SAME commit as their scripts (see
|
||||||
|
Tried and abandoned, 2026-08-07).
|
||||||
|
|
||||||
|
## Current state / in-flight
|
||||||
|
|
||||||
|
_As of 2026-08-07:_
|
||||||
|
|
||||||
|
- **Greybox build COMPLETE** at `1976149`, pushed to gitea (vh/urm03) —
|
||||||
|
all five build capabilities live: arena + positioning-only piloting,
|
||||||
|
auto-fire KINETIC weapon, cards + Freeze-charge meter + thaw/release
|
||||||
|
ramps, KINETIC+HEAT chemistry row with authorship-loud feedback stack
|
||||||
|
(hitstop + hues meeting + `_ph` sting), grunt swarm + self-heating
|
||||||
|
burster. Headless smoke gate green 3/3.
|
||||||
|
- **Awaiting the falsification playtest** (ROADMAP capability 6):
|
||||||
|
operator verdicts on the three bets — positioning↔build interaction,
|
||||||
|
card-freeze rhythm, chemistry delight. Early signal on bet 2 is
|
||||||
|
positive: freeze meter + release ramp "feels very good" / "starting to
|
||||||
|
feel game-like" (operator, 2026-08-07). Tuning everywhere still open.
|
||||||
|
- Operator hit a pull conflict on the Mac (untracked `.uid` files vs
|
||||||
|
`1976149`) — fix being applied this session; an operator-surfaced
|
||||||
|
issue is expected next.
|
||||||
|
- After verdicts: draft the CONCEPT.md canon entries in the advisor repo
|
||||||
|
(freeze-meter ratification + whatever else the playtest settles).
|
||||||
|
|
||||||
|
## 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).
|
||||||
|
|
||||||
|
## 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.
|
||||||
Reference in New Issue
Block a user