The letterhead is the point: one business, two documents, same masthead, so the job sheet and the invoice read as a pair of papers off the same outfit's printer rather than two game screens. DESIGN.md has opened with "you run a small landscaping outfit" since day one and it has never been on the glass. tools/jobsheet/ — paste-ready for Lane A between CUT markers, purely additive (.card/.row/.ledger untouched), rendered to four PNGs before handover, each state addressable as ?v=. The ledger already WAS an invoice; it just never said so. The line worth keeping is .void: a bonus that was on the job sheet and didn't survive the night, struck through in the same column as the money that did — a bonus you never watch fail is one you never learn to protect. Two design calls left as A's with the reasoning beside them, same as the carport's $180: the business name (proposal: HARD YARDS) and the ABN (sequential digits on purpose — a plausible one could be a real business's). bike_kid_01.glb — 1.15 x 0.33 x 0.74 m, 700 tris, lean baked in because a bike doesn't stand up on its own. Two bugs caught by LOOKING at the render, neither catchable by the existing suite: a comment claiming a step-through above a diamond frame, and a fork with negative rake that drew head tube and fork as one pole through the front wheel. Both passed the Blender verify — a bounding box can't answer "is this the right shape". The lean is an export-time axis fact (+Y in Blender is -Z in three.js), so e.test.js now pins it in browser coords. Proved the assert fails: rebuilt at lean=0 and Blender still said PASS while the selftest went red. selftest 299/0/0. 32/32 GLBs byte-identical across three full factory runs.
150 KiB
1480x1760px
150 KiB
1480x1760px