addons come alive: Bagnon draws, hovers and clicks

- Lua 5.0's generic-for and nested long strings are restored in a forked VM — 60 corpus addons stopped dying on one deleted opcode
- a day of demand-driven carving takes the 218-addon corpus from 24 addons surviving a session start to 114, with 144 loading without a single error
- Bagnon draws a real bag and answers real gestures — hover tooltip, pickup, use, drag — because our frames wear the reference's names, and the reference's own ContainerFrame.lua runs off the player's install instead of being transcribed
- the physics broad phase leaves: nothing in the client reads a contact, and it was measured at up to 41% of main-thread samples in real sessions

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Sam
2026-08-11 18:19:08 +07:00
co-authored by Claude Fable 5
parent b5bc569156
commit 251daa14c5
104 changed files with 14356 additions and 2306 deletions
@@ -352,11 +352,19 @@ fn the_two_tabs_fit_inside_the_window() {
for (label_width, expect_tab2) in [
// A short name: under the cap, so the tab is text + PAD + SIDES.
(121.0, 121.0 + PAD + SIDES),
// A long one: the reference's cap would give CAP + PAD + SIDES = 167, but the structural
// clamp is tighter here and wins at 164 — the room left between tab 1's right edge and the
// window's DRAWN edge (decision 1002). Pinned as the smaller of the two on purpose: the
// whole point of the clamp is that it, not the hand-tuned cap, is what holds the line.
(240.0, 164.0),
// A long one: the reference's cap binds at CAP + PAD + SIDES = 167, and the structural
// clamp does NOT — it measures 184 units of room (tab 2's left 160, the parent's right 384,
// less the 40-unit drawn-plate inset), which is looser.
//
// **This pinned 164 until geometry getters settled on demand.** The clamp reads
// `tab:GetLeft()`, and before that change the read could return a rect from BEFORE tab 1
// was resized — a stale left of 180, giving room 164 and making the clamp appear to be what
// held the line. It never was, for this window. The 3-unit difference was a stale read.
//
// The clamp is still the guarantee that matters, and it is asserted directly below rather
// than inferred from a width: tab 2's right edge must stay inside the DRAWN plate (unit
// 349, decision 1002's DXT3 alpha measurement), which 160 + 167 = 327 does.
(240.0, 167.0),
] {
assert!(
expect_tab2 <= CAP + PAD + SIDES,
@@ -396,6 +404,15 @@ fn the_two_tabs_fit_inside_the_window() {
"tab 1 is text − 15 + the end slices"
);
assert_eq!(w2, expect_tab2, "tab 2, label width {label_width}");
// The property the clamp exists for, checked outright: the tab ends inside the plate the
// player can actually see, not merely inside the 384-unit frame rect.
let tab2_right: f64 = s
.eval("return BenillaMacroFrameTab2:GetLeft() + BenillaMacroFrameTab2:GetWidth()")
.unwrap();
assert!(
tab2_right <= 349.0,
"tab 2 ends at {tab2_right}, past the drawn plate's last opaque column (349)"
);
assert!(
left1 + w1 + w2 <= 384.0,
"the tab row ({left1} + {w1} + {w2}) runs off the 384-wide window"