//! **The reference FrameXML this client EXECUTES off the player's own patch chain**, rather than //! shipping a copy of it — the mechanism half of decision 1751. //! //! ## The rule //! //! The end state for the in-game interface is the stock 1.12 FrameXML, run off the file the player //! already owns. `assets/ui` is scaffolding: it retires file by file, and a migrated window means //! *its stock XML + Lua run off the chain and our counterpart file is deleted* (1751 §2). Fidelity //! by construction — the reference's text cannot drift from itself, and every frame name, id, //! template and stratum an addon reaches for is right because it **is** the reference's. //! //! What stays ours permanently: the glue screens (0068 §8 — GlueXML is a separate engine surface //! even in the real client), dev-only frames, and adapter shims only while a genuine engine //! difference forces one. //! //! ## Where the list lives — the manifest, not a second list in Rust //! //! Until 1751 this module carried its own `SOURCED` array and ran it *before* `assets/ui`, which //! was the only ordering a Lua-only mechanism could express. Sourcing **XML** needs a real //! position in the load order instead: stock `ContainerFrame.xml` inherits `ItemButtonTemplate`, //! `CooldownFrameTemplate`, `SmallMoneyFrameTemplate` and `UIPanelCloseButton`, so it has to load //! *after* the files that declare them. //! //! So there is exactly one ordered list of what loads and when, and it is `assets/ui/benilla.toc` //! — the manifest that already had that job. **A manifest entry carrying a path separator is //! sourced off the chain; a bare filename is a file we ship** ([`is_chain_entry`]). Our tree is //! flat, so the two can never be confused, and the migration reads as what it is: the line //! `BagFrame.xml` becomes `Interface\FrameXML\ContainerFrame.xml`, and `BagFrame.xml` is deleted. //! //! Everything else — the XML parse, `` / `