oskiewar: the .ow package, fast level swaps, and one public room a course master
The .ow package (xbox/OW-FORMAT.md, xbox/live/ow.mjs): an oskiewar level, objects, or both in one object-lisp text with section banners, so the reader that reads an object reads it and an object section is byte-for- byte the .lisp it came from. Levels are `island` (the desert machine's numbers: home, radius/shore/sea/deep, dunes, supply rings), `arena` (the 2D map, ac.oskiewar.map v1 both ways) or a built-in course by name. The shipped levels/monowheel-desert.ow says exactly what the game's defaults say, and a test holds them equal. ow.mjs has no imports and rides inside the gameObjects block beside the compiler; `gameObjects.define` lets a package replace an object by name. xbox/tools/ow.mjs checks, packs and unpacks. Levels swap fast under the rider (swapCourse): the ground, supplies and room change; whatever they ride and hold comes with them — a go-kart only between 3D courses, a ridden monowheel never also set down loose. The pause menu's new `level` row steps through desert, the park, indoor, the half-pipe and the long park; the coach's workshop op `level` swaps a course or installs a .ow (`ow:` text) live; the web takes ?level= and ?ow=<url>; any host can set __oskiewarOw before boot. The desert reads its numbers from its level, so an island .ow reshapes and renames it. One public park room a course (desert1, park1, indoor1, pipe1, long1 — the speakable-id shape every host and the relay accept), so friends meet from the website and the Xbox without a link; a ?park= link or OSKIEWAR_ROOM is a private room and stays one through swaps, and a public room's link opens its course. oskiewar.com's front door is the game again (the /classic redirect is gone; classic stays at /classic). Suite: 201 of 380 fail, as before; the feedback suite 14 of 33, as before. Five new tests cover swaps, packages, and rooms. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>