diff --git a/docs/agents/CONTAINER-NOTES.md b/docs/agents/CONTAINER-NOTES.md index 3d933ae0..daf441f3 100644 --- a/docs/agents/CONTAINER-NOTES.md +++ b/docs/agents/CONTAINER-NOTES.md @@ -12,6 +12,17 @@ already went wrong once. * **The toolchain is real.** `tools/re-capture/rebuild_canary.sh` exists because the old box had no cmake/ninja/clang and only runtime sonames, so it hand- relinked object files. **Do not use it here.** Use `build-canary`. + 🔴 **But `build-canary` does not work in this container as it stands + (2026-08-29).** It builds `${PROJECT_DIR:-/work}/xenia-canary`, which **does + not exist here** — the Canary source is at **`/canary`** (`$XENIA_SRC`). The + warm 235 MB tree at `/sylph-home/re/canary-build` is configured with + `CMAKE_HOME_DIRECTORY=/work/xenia-canary`, also missing, and its + `build-Release.ninja` carries **no per-file rules** — it wants to re-run CMake + first, which would fail on the absent source root. **So any Canary change is a + full reconfigure against `/canary` plus a full compile**, not an incremental + one. Budget for that before starting: `SYLPH_JOBS=4`, and this box has been + sitting at **~700 MB free** with a documented history of full-parallel builds + OOM-killing the host. * **numpy and Pillow are installed.** `entities2.py`, `flight_probe.py` and the image oracles work. Their absence used to look like a logic bug. diff --git a/docs/re/audio-capture-channel-map-trap.md b/docs/re/audio-capture-channel-map-trap.md index ed4309f0..5b3a306c 100644 --- a/docs/re/audio-capture-channel-map-trap.md +++ b/docs/re/audio-capture-channel-map-trap.md @@ -199,12 +199,30 @@ below real time becomes a hole in the file, and the timebase is warped non-uniformly — deleting the silences does not repair it, it just compresses time unevenly. -❔ **The route that would work is an internal tap**, and it does not exist yet: -`SDLAudioDriver::SubmitFrame` sees every frame the guest actually produces, in -guest order, with no wall clock involved. A cvar-gated WAV writer there would be -the same shape as `xma_param_probe` — additive, default-off, read-only — and -`/canary` is writable with `build-canary` available. **Not attempted this -iteration.** +❔ **The route that would work is an internal tap**, and it does not exist yet. +`SDLAudioDriver::SubmitFrame(float* frame)` +(`/canary/src/xenia/apu/sdl/sdl_audio_driver.cc`) receives exactly `frame_size_` +bytes — `sizeof(float) × frame_channels_ × channel_samples_` — of the guest's own +frame, in guest order, with **no wall clock in the loop**. A cvar-gated WAV +writer there is the same shape as `xma_param_probe`: additive, default-off, +read-only. It would produce a gap-free recording however slowly the emulator +runs, because it records what the guest *produced* rather than what a device +*consumed*. + +🔴 **Blocked on the build, not on the change — and this is a container fact +worth knowing before anyone plans around it.** `build-canary` builds +`${PROJECT_DIR:-/work}/xenia-canary`, which does not exist here; the source is at +`/canary`. The warm 235 MB tree at `/sylph-home/re/canary-build` is configured +with `CMAKE_HOME_DIRECTORY=/work/xenia-canary` — also missing — and its +`build-Release.ninja` has no per-file rules, so it re-runs CMake first and that +reconfigure fails on the absent root. **Any Canary change is therefore a full +reconfigure plus a full compile**, at `SYLPH_JOBS=4` on a box sitting at ~700 MB +free with a documented history of parallel builds OOM-killing the host. + +**Not attempted, deliberately** — that is a whole session's risk for one probe, +and the rule here is not to improvise around a blocker. Recorded so the next +session can decide with the cost in front of it rather than discovering it +halfway through a build. ## 🔴 And a provenance number I got wrong