Platform HUD

Replaced the static tagline with a live HUD of eight platform facts (D139), each value or unknown, colour-coded known/present-unwired/absent. Real reads for GEN/MEM/VRAM/NET; IP/FW present-probed pending confirmed signatures; TEMP/DISK honest placeholders. New sysinfo.c/.h; screen.c draws it and gains obs_screen_hud() for the serving build.

Conceded a wrong call: I had argued against the sensor fields because emulators fake them. The operator was right - the emulator NOT implementing them is exactly what obSCEne exists to surface, and unknown on screen is the forcing function. The only real constraint (D008 - confirmed signature to call) is preserved by present-probing rather than blind-calling.

Surprise


The GPU ISA surface census (D117). scripts/gen-gpu-surface.py generates docs/GPU_SURFACE.md - the AMD hardware's special math operations (SFU transcendentals, the IEEE division sequence, float decomposition, fmed3, the packing conversions) and how obSCEne reaches each, the GPU analogue of the CPU surface census. Establishes coverage as a checked claim: of 41 intrinsic ops, 33 exist on RDNA2, 8 covered today, 3 GLSL-reachable and not yet probed (frexp_mant/frexp_exp via GLSL frexp, cvt_pkrtz via packHalf2x16 - the next kernels to add), 22 hand-SPIR-V only (controlled-ISA workstream), 8 CDNA-only. Source of truth is the in-repo classification table; the .td is a cross-check that gates in verify.sh. It earned its keep at once: caught int_amdgcn_ldexp as stale (LLVM 18 moved it to the generic llvm.ldexp), which was corrected to base ISA.

Tool + GPU gates green: 115 tool tests, gen-gpu-surface.py --check, gen_shaders.py --check, GPU=1 build, all three targets, harness self-check, protocol, doccheck all pass.

Concurrent-edit note (the same surprise, from this side). Running the full verify.sh regenerated the stale corpus.h (which was build-broken by the sceVideoOut*2 collision above), which unblocked the build but rippled into the shared gates the video-out/corpus workstream owns: counts.py has since converged to green, but compat.py --check now reports the compatibility table drifted, because emulator reports regenerated externally today (ps5pcem, fpps4) reflect the changed census. Neither is GPU work; both are that workstream's to reconcile (compat.py --write), so I have left them. DECISIONS.md/WORKLOG.md are being appended by both sessions at once - edits here are surgical (match-exact) to avoid clobbering.