The hint and Clear button were inside the scrolling bag list, so a long
Ctrl list scrolled them away. They now sit in a footer under the list, and
Clear is a full-width, highlighted "Clear selection" button.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Blowing out the last of a selected material removes it from the selection,
so an emptied selection picks up what you click again. Ctrl + wheel never
zooms the page and scrolls the bag list under the mouse. A bag click while
Ctrl is held adds to the selection even if the click lacks the Ctrl flag.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
With anything selected a drag takes only the selection; with nothing
selected it takes what you click. Right click blows the selected materials
in the bag. Holding Ctrl lists every material found so far under "Not in
bag". Selections stay when materials run out; Clear button, clicking the
only selected row, or gamepad B clears.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A drag takes only the material it starts on (Shift: everything). The blow
selection is the hand: click or Q/E for one material, Ctrl+click for a mix.
Empty materials leave the hand, an empty hand blows nothing, and a pickup
fills an empty hand. Removes the pick-up marks and the F vacuum menu.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Also: board rule to write tasks from chat in our own words, task
descriptions rewritten that way, and a note on lost web-board descriptions.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Pick-up takes everything unless something is marked; F with the Vacuum
(when nothing in reach can be used) or the card chips open a menu with
pick-up and blow toggles per material. The bag rows lose their buttons.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ctrl (replace) + W (fly) hits the browser's close-tab shortcut, which a page
cannot block. A beforeunload prompt now catches it. Autosave on hiding the
tab no longer depends on the audio context.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The short description row became a status row for the selected piece
(variant, Replace, ghosts, messages). Gamepad shows the selected tile's popup.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
carryColumn stops at the first blocked grain on a belt, so a heap whose front
is backed up (a screw tube taking less than the belt brings, or a wall) no
longer shears. New t_conveyors checks and a belt-heap screenshot scene.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bars no longer get thrown up into the furnace, and F is no longer needed to
collect them. Blocked bars wait in the trough; the short stub stays for the
next firing; F is optional upkeep (clean, chip slag, rake).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The browser tests and screenshot tools now work with plain python3 on a machine whose
system Python refuses pip installs: tools/use_venv.py re-runs them with the repo's .venv.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The game as of artifact version 24, ready for local development with
coding agents.
- Source split from three large files into 52 small ones under src/sim,
src/render and src/ui, joined in the order in src/manifest.json by
build.py. The joined code is unchanged apart from comments; every
headless suite gives the same output, and screenshots in both looks
are pixel-identical to before.
- Light tidying with no change in behaviour: one movement scan loop,
shared hazard-stripe and belt shader helpers, unused code removed, a
shared check helper for the test suites.
- World files can be exported as an ordinary download outside claude.ai.
- Tests: broken old scripts removed, experiments moved to tools/,
test/run_all.py added. Tools: shot.py (repeatable screenshots),
where.py, map.py.
- Docs: AGENTS.md, CLAUDE.md, NOTES.md (the owner's to-do inbox),
docs/PROJECT_MAP.md, DESIGN.md, TESTING.md, systems notes, the
owner's requests and an agent log.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K9kLmYADKSEjuwUN3rFxDA