- `--surface` re-runs the comparison against the captured in-world global table on demand, and `--surface-dump` writes our raw side for any tool to join — a one-shot measurement stops drifting
- CreateFrame with an unresolvable template raises exactly as the client does, instead of handing back a bare frame; `inherits=` is one name, matched case-insensitively
- CreateFontString and CreateTexture honour their third argument — 49 corpus call sites were passing an inherit into the void
- the addon-message inbound byte map is corrected (a test had agreed with the wrong constants), and the group-loot roll template publishes under the reference's own name
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- every addon VM runs under an instruction bound, so a non-terminating loop becomes a report — and the bound promptly caught a landed fix that had been left switched off
- an unrecognised unit token raises the client's own "Unknown unit name" error instead of answering nil
- GetBindLocation answers from a real bind point, and RequestTimePlayed round-trips with TIME_PLAYED_MSG — both halves or neither
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- GetObjectType and IsObjectType land from the binary's own carve, with the client's exact inheritance answers
- the survey seats money and a quest log — sixteen addons call GetMoney, five walk the quest log, and none of those paths had ever run
- `date("*t")` returns its table form; the missing shape was an infinite loop for any addon walking days backwards
- unit tokens fold case like the client's resolver, and a FontString template carries the font object it inherits through the whole chain
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- benilla loads real 1.12 addons from Interface/AddOns — TOC, XML and Lua through one loader, with per-addon saved variables, Bindings.xml and the lifecycle events addons expect
- both AddOns screens are in: the character-select list with per-addon enable state, and the ESC menu's in-game list
- the API surface is measured, not guessed — a corpus harness runs hundreds of real 1.12 addons and ranks exactly which globals, templates and verbs they demand
- the Lua dialect is the client's own, read off the binary — 5.0 semantics with the 1.12 additions, and UI source files are bytes, not UTF-8
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- terrain draws per chunk now, and one authority culls everything outside: buildings, billboard cards, particle emitters
- the fps and memory creep on long flights is fixed twice over: material animations only tick what something draws, and far-away art is released by distance (with a 30 s dwell floor so fast cameras don't thrash it)
- the second crash ever reported (a cast racing a despawning unit at flight speed) is fixed, with a regression test that reproduces the exact panic
- every build now prints which commit it is, so a bug report can say exactly what it ran
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- The main menu bar's two empty recesses fill. The micro menu — the eight arched
buttons: character, spellbook, talents, quest log, socials, world map, main menu,
help — sits in the dark panel between the page arrows and the bags, transcribed
from the reference's own layout: the character button wears your portrait, a button
holds itself down while its panel is up, and the talent button appears at level 10.
The latency meter fills the one slot the bar art leaves transparent for exactly it,
tinted green/yellow/red on the reference's 300/600 ms thresholds and drawn UNDER
the bar art, seen through its window, the way 1.12 actually does it. The socials
and main-menu buttons find their panels one snapshot later; help still waits.
- The UI explains itself on hover: 1.12 ships its detailed two-line tooltips ON — a
FrameXML default, not the opt-in extra it is often remembered as — so the micro
buttons, your own portrait, the XP bar, the five bag buttons and the ping meter
all answer a hover with the reference's own explanations.
- The PvP flag, end to end: crossed swords on the player, target and party frames,
driven by the two descriptor bits the wire actually carries, and `/pvp` speaks —
the yellow toast plus the system chat line, the OFF sentence being the one that
warns the flag lingers for five minutes. It really does linger: turning it off
waits out the server's timer, which looks like a bug and is the reference.
- Quest markers stopped freezing. The grey `!` over a questgiver above your level
goes gold the moment you ding, an NPC re-entering view is asked afresh instead of
wearing a session-old answer, and the marker drops when the questgiver bit goes
off — the re-ask triggers mirror the reference's own set, plus one named addition
(your own level changing).
- Water and heights: swimming downhill no longer bounces between swim and fall ten
times a second — the surface line is a two-sided constraint, so the swimmer
settles with the river instead of being left behind by it. And collision height
is per-unit now, read from the unit's own model: a gnome used to swim with a
third of a yard of water over her head because five depth lines were quoting a
human's number.
- A round of pixel honesty in text and chat: the newest chat line no longer wears a
wider drop shadow than every line above it (shadows move in whole pixels now),
keeps its descenders, and hover boxes stop painting over the chat body. The chat
input's history browse survives programmatic edits, a failed script chunk warns
instead of vanishing, and recall deepens to 64 lines. Idle animation got honest
too: a model's idle is Stand resolved through its own lookup table — never
file order, which had the duel flag bobbing on its spawn clip — and an armed idle
is culled on the box its animation authors, not the bind pose, so the flag stops
vanishing at most camera angles.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>