Resting faces steeper than the angle of repose topple: blown sand towers collapse (t93)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-28 23:07:30 -04:00
co-authored by Claude Opus 5.5
parent 84dd8b8d0a
commit bd22e453ca
10 changed files with 264 additions and 24 deletions
+45
View File
@@ -6,6 +6,51 @@ open or not verified. Keep each entry short; the git history has the details.
## 2026-10-28: t93 round 3, nozzle-built resting sand faces (Codex)
- Reproduced the owner's continuous straight-up radius-6 sand nozzle recipe, not a
vacuum cut: 1200 toolBlow ticks under open sky. Matching original-code Node and real
pixel frame-loop browser controls fail the new regression. Browser, NVIDIA RTX 5070,
two active helpers: 79-grain cliff at blow end, still 61 after 480 idle ticks. Active
chunks remain; neither sticky rolls (sand already has STICK=1) nor missing wakes explain it.
- Cause: landFlyer/depositNear stack grains at or above impact, while supported exposed
grains only slide a single diagonal cell. The earlier fan rule requires empty space below
and misses the resting face. Simply extending the initial spill leaves the falling layer
blocking further release. Tall bodies now release from rest and carry a bounded outward
fall through the newly unsupported column; contact below cancels that motion. Cohesive
grains retain their existing release and do not inherit it. A continuous 32-grain backing
column eight grains inward distinguishes towers from short feeds. Read reach <=24,
write reach <=8, no per-grain allocation, existing worldgen switch retained.
- New shared nozzle fixture and headless/browser regressions cover the actual tool, direct
supported-face release, cross-chunk cleats, conservation, 0/1/2/8 helpers, exact material
and motion-flag bytes, and forced-awake stability. Larger equal-mass clay/sand check:
7200 grains, final heights 90/75. Rejected broad release and persistent motion on contact
experiments after they changed small heaps, clay or transport checks; no old test weakened.
- Final headless suite passes. Served pixel browser nozzle check passes at exactly 480 idle
ticks: cliff 32 -> 1, all 40000 grains retained in bag/flight/pile, final pile sleeps.
Saved and inspected shots/t93c-before.png and shots/t93c-after.png; matching old-rule
captures are shots/t93c-control-{before,after}.png. Final full
python3 test/run_all.py --browser: ALL PASSED, 35 headless and 10 browser suites,
including nozzle 25, collapse 17, vacuum 44, threads 12, gameplay 361, both browser
collapse regressions, original worldgen hashes and liquids. Log: /tmp/t93c-all-browser.log.
Ticked round-3 feedback with a report and moved t93 to Review. Owner playtesting
remains open. No commit.
- Isolated real-GPU requested profile, no concurrent tests: original-code control -> final
total ms/tick: settled 1.9359 -> 1.9413 (+0.3%), heat 2.6679 -> 2.7080 (+1.5%).
Versus historical tools/perf-after-t88.json: +7.5%/+3.2%; the control already measures
+7.2%/+1.7%. Awake counts match (425/494). Movement ms/tick 0.9520 -> 0.9570 and
1.3460 -> 1.3850; unchanged heat work 0.9060 -> 0.9067 and 1.2425 -> 1.2424.
Logs/JSON: /tmp/t93c-perf-{control,final}.{log,json}. Some real-loop frame-tail timings
are noisier and exceed the profiler's 10% marker; the requested isolated simulation
tick averages are within a few percent of the matching control.
- Files: src/sim/cells.js, src/sim/material-tables.js, test/pile-blow.js,
test/t_blow_collapse.{js,py}, test/run_all.py, docs/DESIGN.md, docs/TESTING.md,
regenerated docs/PROJECT_MAP.md, t93 task and this log. Further evidence:
/tmp/t93c-red.log, /tmp/t93c-browser-red.log, /tmp/t93c-browser-final.log,
/tmp/t93c-final-headless2.log.
## 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.