Loose walls slump to a natural slope instead of eroding layer by layer (t93)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-28 18:58:40 -04:00
co-authored by Claude Opus 5.5
parent dadf62a28d
commit 807217b22c
7 changed files with 146 additions and 3 deletions
+44
View File
@@ -5,6 +5,50 @@ note or request it was for, what changed, the files touched, the tests run, and
open or not verified. Keep each entry short; the git history has the details.
## 2026-10-28: t93 loose faces slump without sticky-step stalls (Codex)
- Inspected the owner's screenshot and traced `powder`, `enterFree`, `move`, `moveChunk`,
waking and checkerboard worker passes. Movement-only 40x20 walls on a flat floor, with
normal sleep countdown and the bot far away: sand reaches a <=1-grain surface step in
44 ticks; rubble (stone/copper ore/iron ore/dirt) in 89; 20% clay never reaches it through
2400 ticks (2-grain ledge). Always-awake control reaches it in 249 ticks, pure clay in 585;
STICK=1 takes 44 for every mix. Cause: probabilistic sticky diagonal steps throttle face
release, and three-tick chunk sleep can strand a legal step after missed rolls. Bottom-up
scan and stamps still allow sand to collapse; empty destinations are accepted before the
target-stamp check. No scheduler or stamp changes were needed.
- Added a fallback only after a missed sticky roll: an open diagonal with another empty cell
below releases immediately; a legal shallow step wakes its chunk to retry. Retained the
original fast path, density/displacement rolls, built-surface sliding, sealed corners,
occupancy, transport and cleat checks, one-step stamps and per-chunk streams. Burning
grains/supports retain their tuned behavior: extending the fallback into burning beds
failed vent-fed furnace cleanliness. A shared-loop rewrite was also rejected after profiling.
- New `t_pile_collapse` has 17 checks: all 800 grains retained; sand, mixed rubble and
20% clay faces <=2-grain surface steps by 180 ticks at offsets 0 and 17; cohesive pure
clay <=3. After 1200 forced-awake settling ticks, another 600 leave all heap material bytes
unchanged and chunks sleep afterward. Settled clay is 27 high versus sand 23. Exact final
test against original cells.js fails three collapse checks; final code passes. Added a
clay/rubble face spanning chunk rows to the real 0/1/2/8-worker/reversed-pass hash fixture.
- Final `python3 test/run_all.py --browser` exited 0, ALL PASSED: 33 headless suites,
including furnace 9, collapse 17 and threads 12; browser gameplay 361, smooth 28,
console 18, caps 7, GPU 15, goldens 28, light 71 and Firefox 2. Evidence:
`/tmp/t93-final-browser.log`. Earlier full browser run also passed. Diff whitespace check passes.
- Final isolated hardware profile, NVIDIA Blackwell, requested command:
`python3 tools/perf.py --scenes settled,heat --looks pixel --zooms 6 --compare tools/perf-after-t88.json`.
Original-code control -> final total ms/tick: settled 2.0179 -> 1.9790 (-1.9%),
heat 2.7255 -> 2.7650 (+1.5%). Against historical t88: 1.8056 -> 1.9790 (+9.6%),
2.6231 -> 2.7650 (+5.4%). Final movement costs 0.9715/1.3816 ms/tick versus control
0.9951/1.3647. Earlier profiles varied, including unchanged heat work; final run had no
concurrent tests. Evidence: `/tmp/t93-perf-fast.json`, `/tmp/t93-idle-control.json`,
`/tmp/t93-red-exact.log`, `/tmp/t93-collapse-final.log`.
- Captured and inspected pixel `shots/t93-before.png` and final `shots/t93-after.png`:
three 40x20 walls become sloped heaps after 180 full simulation ticks. Reproduce with
`tools/scenes/t93-pile-collapse.js`, `--ticks 0` / `--ticks 180`, `--zoom 3 --no-light --freeze`.
No page errors. Rendering code unchanged; smooth screenshot not taken.
- Files: `src/sim/cells.js`, `test/t_pile_collapse.js`, `test/t_threads.js`,
`tools/scenes/t93-pile-collapse.js`, `docs/DESIGN.md`, generated `docs/PROJECT_MAP.md`,
t93 records and this log. All subtasks ticked; t93 moved to Review with a completion
report and game checks. No commit. Owner playtesting remains open.
## 2026-10-28: t92 follow-up, visible dust and a botward channel through rubble (Codex)
- Traced shake events through `drainEvents` to `spawnDebris` and `drawParticles`. Events were