fix(decoder): give the container its database and its instrumented oracle #64
Reference in New Issue
Block a user
Delete Branch "fix/decoder-db-mount"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The Decoder agent could not reach either of the two things a static-RE brief asks it for. Three separate defects, each of which fails quietly.
1. No database
SYLPHEED_DB=/xenia-rs/sylpheed.dbnamed a path that no longer exists. Thexenia-rsrepo was retired by the consolidation, its clone was deleted, and the/xenia-rsmount was removed in #61 because it pointed at nothing — but the env var stayed. Sozq.pyand/sylph-discould not run at all.Now bind-mounted read-only at the container's repo root, which is where
zq.pylooks when$SYLPHEED_DBis unset — no variable left to drift out of step with the mount, which was the whole bug. Read-only is deliberate: DuckDB takes an exclusive write lock, and two agents plus the human sharing one file would corrupt it.2. The wrong Canary
run-canarylooked inRelease/thenDebug/, neverChecked/. Both of those exist on this box — Aug 28 and Jul 19 builds. They boot the game perfectly well and carry noaudit_61branch probe, so a probe run against either returns zero hits that read as a finding about the game rather than as a stale binary.Configuration is now the outer loop and location the inner one, so a
Checkedbuild anywhere beats aReleasebuild anywhere.$XENIA_BINstill overrides everything. The launcher also now names any missing instrumentation before the run rather than leaving an empty log to interpret afterwards.Measured here with
strings:audit_61_branch_probe_pcsRE-DRAWCheckedReleaseDebug3.
build-canarycould not build oneIt built
$PROJECT_DIR/xenia-canary, which does not exist in this container — the source is bind-mounted at/canaryand the launcher already exportsXENIA_SRC=/canary.CONTAINER-NOTES.mdhas carried this since 2026-08-29 as a symlink workaround plus a warning to remember to delete the symlink afterwards. It reads$XENIA_SRCfirst now, so there is nothing to remember. Its default configuration movesRelease→Checkedto match whatrun-canarypicks; the old default spent a full build on a binary nothing would run.Two documented blockers refuted, not deleted
Kept with their history, because the sequence of wrong readings is what makes the right one checkable:
/canary;upstream-baseline.md's "version.his never generated" —CMakeLists.txtgenerates it at configure time now, with a stub fallback.decoder-loop.mdclaimed the oracle lived atLinux/Release/and that the probe was on two side branches. Both were true when written; neither is now (fork PR #2 brought the probe ontosylpheed-re).What to look at
Pass:
run-canaryin the decoder container picksChecked/, prints no ⚠ instrumentation warning, andzq.py fn 0x824609C8returnsPak_FindEntryByName.Fail: it picks an August binary, or warns that
audit_61_branch_probe_pcsis absent.Verification
zq.pyagainst the real agent image: DB mounted, no env var set,fn 0x824609C8→Pak_FindEntryByName,classeslists RTTI.stringson all three real binaries (table above).pick_bincases run against the function body extracted from the script, so the test cannot drift from it: stale-container-Release-vs-fresh-repo-Checked, containerCheckedwinning within its config, fallback toRelease, fallback to repoDebug, and$XENIA_BINoverride.Not verified: no Canary was actually launched. Judging an emulator run started from a shell here is against the standing rule, so the first real probe run is a human's.
🤖 Generated with Claude Code