Faces cut into loose piles collapse outward instead of draining column by column (t93)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -5,6 +5,59 @@ 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 reopened, vacuum-cut faces drain in columns (Codex)
|
||||
|
||||
- Read AGENTS, the t93 task/log and 807217b; inspected both new owner screenshots.
|
||||
The remaining reproduced cause is straight-down movement taking priority over outward
|
||||
fall: an exposed edge stays a descending column, blocking the next column's diagonal
|
||||
exits. This is a movement/scan-order bottleneck, not lost wakes in this reproduction.
|
||||
`setCell` wakes the cut; worker wakes merge each checkerboard pass. A radius-6 vacuum,
|
||||
one call per tick into a settled 60-grain RSTONE heap, leaves a 39-grain cliff; after
|
||||
120 ticks it is still 18, with exactly the same series when all chunks are forced awake.
|
||||
RSTONE already has STICK=1. Inline and actual Node helpers agree, bot near or far.
|
||||
- Added outward downward movement only for a falling exposed vertical face backed by
|
||||
supported powder. Retain one downward step per tick, occupancy, parts, barriers and
|
||||
burning-grain guard. Resting heaps do not enter this path. `POWDER_FAN` goes to workers
|
||||
and is disabled during the existing legacy worldgen settle to preserve all seed hashes.
|
||||
Rejected a horizontal-step experiment (forced-awake creep) and a broad falling-edge
|
||||
rule (spread free-falling blocks too far); no old test expectation was changed.
|
||||
- New shared `test/pile-cut.js`: two 60-grain triangular heaps, 600 settling ticks,
|
||||
stone and stone/copper ore/iron ore/dirt, then actual radius-6 vacuum strokes.
|
||||
New Node suite passes 40 checks: cuts inline/2 helpers, near/far bot, conservation,
|
||||
exact inline/helper material bytes, initially stable heaps and 600 forced-awake
|
||||
stable ticks afterward. Browser suite uses isolated HTTP, real NVIDIA Blackwell GPU,
|
||||
real frame loop and two helpers with confirmed dispatch (small fixture forces dispatch).
|
||||
Verdict is recorded at exactly tick 180. Control with face spreading disabled:
|
||||
cliff stone/mixed 33/32 at cut end, 14/13 at 120, 8/5 at 180; browser assertion fails.
|
||||
Fixed browser reaches <=2 by 120 and passes at 180. Earlier Node red run fails eight
|
||||
collapse checks (its mixed fixture included clay); existing clay collapse checks pass.
|
||||
- Full `python3 test/run_all.py --browser`: ALL PASSED, 34 headless + 9 browser suites,
|
||||
including collapse 17, threads 12, vacuum 40, gameplay 361 and browser vacuum 1.
|
||||
Log: `/tmp/t93b-all-browser.log`. No existing test was weakened. Browser regression
|
||||
is included in the suite runner. Original seed hashes and liquid-sinking checks pass.
|
||||
- Saved and inspected `shots/t93b-before.png` (control at cut end) and
|
||||
`shots/t93b-after.png` (fixed after 180 ticks): vertical cut faces become slopes.
|
||||
Fixed series: `shots/t93b-time-{0,60,120,180}.png`; matching control series:
|
||||
`shots/t93b-control-time-{0,60,120,180}.png`. Browser control log:
|
||||
`/tmp/t93b-browser-matching-control.log`. Small initial browser passes stayed inline
|
||||
despite a pool existing; final regression requires actual `simPool.activeMax > 0`.
|
||||
- Requested idle profile, real GPU, no concurrent tests:
|
||||
`python3 tools/perf.py --scenes settled,heat --looks pixel --zooms 6 --compare tools/perf-after-t88.json`.
|
||||
Rule-disabled control -> final total ms/tick: settled 1.9855 -> 2.0226 (+1.9%),
|
||||
heat 2.7027 -> 2.7734 (+2.6%). Against historical t88: +12.0%/+5.7%.
|
||||
Movement ms/tick 0.9639 -> 0.9818 / 1.3481 -> 1.3885; unchanged heat work also
|
||||
varies 0.9412 -> 0.9593 / 1.2724 -> 1.3019. End awake counts identical, 425/494.
|
||||
These timings show small run-to-run differences, not exact equality; historical settled
|
||||
time remains over the profiler's 10% comparison threshold. Evidence:
|
||||
`/tmp/t93b-idle-control.json`, `/tmp/t93b-idle-final.json`, `/tmp/t93b-idle-summary.log`.
|
||||
An earlier control profile overlapped headless checks and was excluded from this comparison.
|
||||
- Files: `src/sim/cells.js`, `src/sim/workers.js`, `src/sim/worldgen.js`,
|
||||
`test/pile-cut.js`, `test/t_vacuum_collapse.js`, `test/t_vacuum_collapse.py`,
|
||||
`test/run_all.py`, `docs/DESIGN.md`, `docs/TESTING.md`, generated project map,
|
||||
t93 task and this log. No commit. Owner playtesting of their larger worlds remains open.
|
||||
|
||||
|
||||
## 2026-10-28: t92 keep pass-through, restore original loose-grain behaviour (Codex)
|
||||
|
||||
- Read the 7293787 then dadf62a t92 history and original drill in 90f2d3f. Restored the
|
||||
|
||||
Reference in New Issue
Block a user