diff --git a/crates/benilla-app/assets/ui/benilla.toc b/crates/benilla-app/assets/ui/benilla.toc index 5ee18e5d..0fe1a559 100644 --- a/crates/benilla-app/assets/ui/benilla.toc +++ b/crates/benilla-app/assets/ui/benilla.toc @@ -1,1285 +1,187 @@ -# benilla.toc — the built-in interface, as an ordinary addon manifest. -# -# The reference's own interface ships as `FrameXML.toc`; ours was a hand-ordered Rust array until -# decision 1178. It is parsed by the same `.toc` parser any third-party addon will be -# (`benilla-ui/src/toc.rs`), and that is the point: a privileged built-in UI is how addon support -# rots. If our own interface loads through the addon path, the addon path works — it is exercised -# by every single run. If it keeps a private door, that path is untested by construction. -# -# The order is LOAD order and it is load-bearing: a template must be defined before the frame that -# inherits it, and a later file paints on top of an earlier one. Every entry's comment is why it -# sits where it sits; those comments are knowledge, not decoration. -# -# The FIRST entry is the font-object registry, and the loader splits there: it alone loads at -# startup, ahead of the glue screens that share our one glyph atlas, and everything after it -# materializes on entering the world (decision 1051). -# -# ── TWO STORES, ONE LIST (decision 1751) ────────────────────────────────────────────────────── -# A **bare filename** is a file we ship, from `assets/ui` (compiled into the binary, 1175). -# A **path** — `Interface\FrameXML\ContainerFrame.xml` — is the reference's OWN file, executed off -# the player's installed patch chain. Nothing of Blizzard's is copied here; the player runs the -# file they already own, and it cannot drift from itself. -# -# That is the end state for this interface: the stock 1.12 FrameXML, off the player's chain, and -# `assets/ui` is scaffolding that retires window by window. Migrating one is one line here changing -# from ours to theirs, plus the deletion of our copy — which is why the two stores share ONE -# ordered list instead of the reference getting a private "load everything first" pass. It could -# not have that pass: stock `ContainerFrame.xml` inherits `ItemButtonTemplate`, -# `CooldownFrameTemplate`, `SmallMoneyFrameTemplate` and `UIPanelCloseButton`, so it has to sit -# after the files that declare them, exactly like any other entry. -# -# Order still decides every collision, in both directions. A reference file sourced ABOVE ours has -# its colliding globals overwritten by ours (that is why `PaperDollFrame.lua` is where it is); a -# reference file sourced AT the position of the window it replaces owns its names outright, which -# is what migrating a window means. `ui_script::reference_ui` is the rule; this list is the order. +# The built-in interface, parsed like any addon's `.toc`. Entries load in order: a bare filename +# is ours, from `assets/ui`; a path is the reference's own file, off the player's patch chain. +# The list loads on entering the world, then third-party addons. Deviation: entry 0, Fonts.xml, +# loads alone at Startup, because the glue screens share its glyph atlas. +# A frame built at load resolves `inherits=`, `parent=` and a named `relativeTo=` against names +# declared above; a missing one only warns (the template is skipped, the parent falls back to the +# enclosing frame). +# On a collision a later Lua global or template replaces the earlier one, but a named frame +# publishes its global only while the name is free. +# A stock `.xml` that does not `