Monorepo for Aesthetic.Computer aesthetic.computer

Stop a cropped paste from dumping its whole sheet master

I had shipped fourteen brushes without looking at one of them. The first contact sheet showed Caterpillar drawing the letters B, C and A along its body: paste's fast integer-scale path checks angle, width, height and anchor but never crop, then blits from.width × from.height wholesale. Any paste(sheet, x, y, {scale: <integer 1..8>, crop}) pasted the entire atlas. It hid because the fast path is gated on a bounds check against the *sheet's* size, so it only misfired where the whole sheet happened to fit — cropped sprites looked correct near a canvas edge and dumped the atlas in the middle of the same stroke. Bubbles and Caterpillar were always wrong; Stamp was wrong only on the one angle in eight that came out zero. One word fixes it: the fast path declines anything cropped. Uncropped pastes keep it. Caterpillar is 0.03ms a frame after. toolchain/nopaint/contact-sheet.mjs is how I found it and how the next person looks: the proposal contracts are pure, so every brush renders to PNG with no browser and no runtime. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>