Skip to content

Confirm on a real client that build-time UI Transforms render correctly #304

Open

Description

@Mathih13

Expected. A Package should describe small build-time edits to the Operator's own baseline FrameXML, GlueXML and TOC files, with overlapping or ambiguous edits failing loudly and no extracted Blizzard bytes ever committed to the repo.

Actual (at 87109e3c). Built and unit-tested. compose_ui_transforms (importer/src/pack_client.rs#L287) reads baseline files live out of the Operator's own client archives through open_ui_baseline_chain (importer/src/dbc.rs#L129), never writes them back into the repo, and the generated output records only the baseline and transform-source hashes (importer/src/ui_transform.rs#L214). Two disjoint edits compose deterministically; overlapping edits, ambiguous anchors, and a whole-file override mixed with a transform on the same path all fail and name the Packages and path involved. cargo test -p lyracore-importer passes (332 tests). What has not run is the generated FrameXML and GlueXML against a real, unmodified build 5875 client.

How to check. Author a Package with a UI Transform against a real client install, run lyracore client sync, and load the result in-game: confirm the transformed frame behaves and renders correctly, and that the rest of the stock UI is unaffected.

Done when. The client-side result is recorded here, with the client build and the commit.

Activity

  1. added
    enhancementNew feature or request
    P3someday / nice-to-have
    ready-for-humanNeeds a maintainer: a decision, a maintainer's Realm, or coordination
    on Aug 24, 2026
  2. Mathih13 commented on Sep 1, 2026

    @Mathih13
    ContributorAuthor

    This was generated by AI during triage.

    Split decision (maintainer, 2026-09-01): the build-time transform engine and tracer are agent work — the existing brief above is the contract. Only the final FrameXML/GlueXML behavior check needs a human on a real 1.12.1 client, so this moves to ready-for-agent and the needs-live-eyeball label holds it open until that confirmation. One boundary from #303's settled decisions applies here: transform outputs are baseline-derived and therefore never enter a distributable artifact — they exist only in the operator's own client via client sync, and client pack refuses them by provenance.

  3. added
    ready-for-agentComplete enough to build from the issue alone, by a person or their agent
    and removed
    ready-for-humanNeeds a maintainer: a decision, a maintainer's Realm, or coordination
    on Sep 1, 2026
  4. Mathih13 commented on Sep 2, 2026

    @Mathih13
    ContributorAuthor

    Verified the agent half against core PR #392 (feat(packages): client pack artifact and UI Transforms, merged at f186f1b, importer/src/ui_transform.rs and importer/src/pack_client.rs). This does not close the real-client check — see below.

    • [~] The tracer changes a stock FrameXML file on an unmodified 1.12.1 client without committing its baseline contents. Mechanism verified: compose_ui_transforms reads the baseline live out of the operator's own client archives (dbc::open_ui_baseline_chain), never writes it back into the repo, and the generated header records only its hash. What is NOT verified here is running this against a real, unmodified 1.12.1 client — that needs the live-eyeball check below.
    • Two disjoint edits to one baseline file compose deterministically. Proven by ui_transform::tests::compose_two_disjoint_edits_are_order_independent.
    • Overlapping edits, ambiguous anchors, and full-file conflicts fail with Package names and target path. Proven by compose_refuses_overlapping_edits_naming_both_packages, compose_refuses_an_ambiguous_anchor_naming_package_and_path, compose_refuses_identical_anchors_as_an_overlap, and pack_client::tests::an_override_of_a_transformed_path_refuses_and_writes_nothing (whole-file override vs. transform, names both Packages and the path).
    • Generated output records the baseline and transform-source hashes. ui_transform::record_header writes both baseline=<hash> and transforms=<hash> into the generated file's own comment syntax. Proven by record_header_uses_each_files_own_comment_syntax, transforms_hash_changes_when_an_edit_changes, transforms_hash_is_independent_of_input_order.
    • FrameXML and GlueXML behavior is verified separately on a real client. Not verified here; this needs a human on a real 1.12.1 client, per the issue's own scope split. Stays open.
    • No executable patching is introduced. No code path in ui_transform.rs or pack_client.rs touches the client executable; the feature is a build-time text transform against archived Lua/XML/TOC only.

    Ran cargo test -p lyracore-importer in the core checkout: 332 passed, 0 failed, 2 ignored (both live-client targets, unrelated to this issue).

    This closes out the agent-verifiable half: engine, conflict detection, hash recording, and the absence of executable patching. The needs-live-eyeball label and the FrameXML/GlueXML-on-a-real-client box are exactly right to keep this open — leaving it open, not closing.

    Verified by Claude (model claude-sonnet-5) via Claude Code subagent.

  5. changed the title [-]packages client: author native UI changes from baseline Lua and XML[/-] [+]Confirm on a real client that build-time UI Transforms render correctly[/+] on Oct 8, 2026
  6. added
    ready-for-humanNeeds a maintainer: a decision, a maintainer's Realm, or coordination
    and removed
    ready-for-agentComplete enough to build from the issue alone, by a person or their agent
    on Oct 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P3someday / nice-to-haveenhancementNew feature or requestready-for-humanNeeds a maintainer: a decision, a maintainer's Realm, or coordination

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions