For agents, on top of README.md, which they read first.
- No window, socket or clock in here: it compiles for wasm. What is specific to one host (the MCP panel, since only the native app has a server) lives in that app.
Confidencecannot hold a value outside 0..=1; build one withConfidence::newand handle theNone.- The pad is laid out in its own coordinates and scaled to the width it is
given. Move a button by changing its
Part, not the painter calls. - Every panel here must survive its value being absent or empty. The bot has no tasks at a menu and no goals before it has seen a screen; say so in the panel rather than drawing an empty one.
layout.rshas the layout invariant as a test — equal side panels, an exact 4:3 picture cell, and (since the replay scrubber landed) ascrubberrect spanning the picture's own width, directly between it and the pad. A panel that wants more room asks the app for a different cell; it never widens itself. Runbuck2 test //packages/panels:testafter anything that touches sizing.replay.rstakes plain data too, the same shape asbot.rs/jev.rs:packages/replayis native-only (it writes files) and this crate compiles for wasm, so nothing from that crate -Tree,BranchMeta,FrameEntry- may appear in this file's public API. The app converts.- Colours live in
palette.rsand nowhere else. A colour literal in a panel file is a meaning nobody can look up. bot.rstakes plain data, neverzbankstypes.zbankslinks C and is native-only; this crate compiles for wasm.jev.rstakes plain data too, with one deliberate exception: the request sent to Jev stays aserde_json::Valuerather than being pre-formatted to aString, so pretty-printing it happens only inside a history row'sCollapsingHeaderbody - which egui calls only while that row is open - instead of on every row on every frame.serde_jsonhas no I/O and already compiles for wasm, so this is not the same kind of exceptionzbanks/decisionstypes would be.- Keep
-Csave-temps=true/-Clink-dead-codeinBUCK. They are what lettools/hotpatch/patch.shfold a panels edit into a hot patch; without them it skips this crate and the patch silently keeps the old panels code.