Scouted makepad-internal branch rik2 (+537k lines vs dev: libs/game
blocks/dynamics/asset-ai, diffusion, ggml, llama, pbr_paint, XR loopback
suites). gamemaker itself differs only trivially; the treasure is
libs/game/blocks/src/car.rs — an audited Bullet-replacement raycast
vehicle (its header documents three real btRaycastVehicle defects).
Ported the 2D-relevant formulas into model.rs/board_view.rs:
- engine headroom: force tapers to zero at top speed
- reverse at half authority; one-pedal semantics (down = brake while
rolling, reverse once stopped; B stays explicit for 3-point turns)
- steering authority tapers above STEER_PEAK_SPEED (6 m/s): full lock
in the parking bay, calm wheel at road speed
13/13 engine tests green (clean-drive tape extended for the tapered
engine), UI smoke ALL GREEN on the rebuilt release binary.
Verified end-to-end on makepad dev HEAD under Xvfb + Mesa via the new
--remote control surface (PNG grabs + key injection):
- board renders (roundabout/island, arms, perimeter, bays 1-6, zebra,
STOP line + text, U-turn zone, W/N/E/S gates) — screenshots in-crate
- driving works at 40-50 km/h, indicator chips mirror the car's blinker
- the examiner caught a scripted illegal U-turn: toast + score 100->85,
exactly the penalty table; R-restart resets the sheet
- tools/ui_smoke.sh: 7-assertion remote-API suite, ALL GREEN in ~7s
Fixes found along the way:
- board text was invisible: DrawText renders nothing without a
font_family — set theme.font_bold in the widget DSL
- ring seams: arms now tuck under the ring band (gap rr+0.4*lw)
- patches/0003: upstream in-process hub gateway advertised port 0 to
child apps (STUDIO_HOST) + MAKEPAD_TEST_NO_HEADLESS_ENV opt-out while
the Linux headless build cfg is broken upstream; hub-driven UI tests
feature-gated (hub-ui-tests) since query routing still stalls at this
pin — ui_smoke.sh is the working equivalent
- setup_mtb.sh: copy (never symlink) the crate into examples/ —
CARGO_MANIFEST_DIR bakes resolved paths into test binaries