Monorepo for Aesthetic.Computer aesthetic.computer

Halve the OSKIEWAR frame and round out what it draws master

Measured on the console over seven cycles, 1412 frames per experiment: the frame falls from 17.48ms to 9.00ms and its worst frame from 86.7ms to 13.7ms. Three changes, none of them the one that was predicted. The `triangles3d` batch is reverted. The host call it replaced measures 0.047ms -- the boundary crossing was never the cost. Filling the Float32Array was: twelve typed-array writes per face cost far more in the interpreter than twelve arguments to one C call, so submission ran 5.60ms batched against 0.90ms per face. Dropping the `...color` rest array from the disc, capsule, ring and rect helpers saves more than the revert does, and had nothing to do with either. The spectator QR now coalesces its dark modules into horizontal runs the way the error card already did, keeping the code on screen for 328 fewer faces. Discs size their silhouette to their radius against a precomputed ring table. A head was the same ten-gon as a three-pixel limb cap and showed its corners; it now spends 22 faces where the cap spends 4, so heads read round and the scene draws fewer faces than before. Bots press buttons the way hands do. Every synthetic press goes through one door that holds it for a chosen span and releases it cleanly, so double-tap detection still reads dash, ultra jump and sink. The jump was a single frame, which the new jump cut turned into a permanent short hop -- the bot could not reach the platform the camera work had lowered, while the same merge added sink logic assuming it could. Presses also now route through the pad each fighter feels, so they light in the command stream instead of vanishing behind an unplugged controller. Self play labels itself BOT 1 against BOT 2 rather than flying a handle nobody is holding, and rolls rounds over unattended, so a measurement harness can stop patching the piece to get a match. The pal wheel drops the panel behind each fighter and grows the cards; the dummy takes the default slot, because it stands still and lets you learn the buttons. Y had no key at all in the browser, so the item action shipped unreachable; it is bound on both pads and a test now asserts every combat button is reachable. The round intro names what each button does, reading the fighter rather than a fixed map, so X announces itself as WHIP or BASH when a hand is carrying something. App.cpp carries two more overflow fixes of the clock defect that caused four separate failures today, and the GDK port gains a compiled platform interface, a PC backend and a Windows CI workflow. That work also retired its own largest portability claim: Xbox GDK has no Direct2D, no DirectWrite and no D3D11, so the renderer is a D3D12 rewrite rather than something that crosses untouched.