For agents, on top of README.md, which they read first.
- Never edit
BUCK. ChangeCargo.toml,reindeer.tomlor a fixup and re-run buckify. - A new crate with a
build.rsmakes buckify warn that its fixup "does not say what to do". Answer it infixups/<crate>/fixups.tomlwithbuildscript.run = trueorfalse- read the build script to decide; most only probe rustc features and needtrue. cargo_env = trueinreindeer.tomlis load-bearing:serde_coreandthiserrorreadCARGO_PKG_VERSION_PATCHviaenv!()and fail to compile without it. It must sit above[vendor]: TOML keys after a table header belong to that table.jgenesis/is excluded from this manifest's workspace on purpose. Left in, cargo resolves jgenesis'sworkspace = truekeys against THIS manifest and fails with "workspace.package.version was not defined".jgenesis/carries two patches over upstream d19ee94f:SnesEmulator::wram()(commit "jgenesis: expose work RAM from snes-core") andSnesEmulator::wram_mut()(commit "jgenesis: let a host write work RAM", for the zbanks bot, which writes its cheats into RAM each frame). Aftergit subtree pull --prefix=third-party/rust/jgenesis, confirm both survived:grep -n "pub fn wram" third-party/rust/jgenesis/backend/snes-core/src/api.rs(two hits).- jgenesis needs a Rust newer than nixpkgs 26.05 ships (it uses
float_algebraic); the devshell's fenix toolchain is why it builds. - Build scripts run inside the buck2 DAEMON's environment, not the calling
shell's. After adding something a build script needs to the devshell
(
pkg-config, a library), runbuck2 killfrom the new shell first; until then the script fails as if the package were missing (measured 2026-09-20:alsa-syscould not findpkg-configthat the shell itself could run). alsa-sysis the one crate here that links a system library at build time. Everything the window needs (wayland, xkbcommon, X11, Vulkan, GL) is dlopened at startup instead, which is whatLD_LIBRARY_PATHinflake.nixis for.jevcrates/is a git submodule of ~/jevcrates (jev-protocol,jev-client,jev-http), path dependencies inCargo.toml; they werepackages/jevandpackages/jev-httpuntil 2026-10-01. Never edit inside it here: change ~/jevcrates, then move the gitlink. Its URL in.gitmodulesis relative (../jevcrates.git) so a clone from the lmjtfy site finds it beside this one; do not make it absolute, or a clone from the site points at private GitHub and fails.git submodule update --initchecks it out.