Appearance
Live virtual-list themes — 2026-10-13
Accepted scoped milestone. The persistent InterfaceForge goal remains active.
The white engine scrollbar in the saved journal was inconsistent with InterfaceForge scrolling surfaces. Apply Theme to List View now applies the existing semantic colors and thickness to an ordinary engine List/Tile/Tree View. It updates the widget-owned reflected style and live Slate scrollbar; brush storage survives the call. Traversal stops at entry User Widgets so nested row scrollbars keep their own styling. Unsupported live structures return false. No list regeneration, model polling, game-specific subclass or gameplay dependency was introduced. IFScrollBox uses the same extracted brush styling logic; its behavior is retained.
WBP_FieldJournal adds Event On Theme Updated → the public node with JournalList and the event Theme. Existing initialization/source, close, theme buttons, custom-survey launch, selection and entry graphs are preserved. IFScreen emits the event initially and on player theme changes. The Blueprint decides when to supply a local override; the node itself does not subscribe plain List Views. Actual recipe.
Verification
36 current runtime reports: per installed engine, four journal source + four exact Development-package runs (1,000/10,000 models × default/enlarged), plus two source + two cooked custom Blueprint regressions. Win64 DX11, hidden offscreen, 1280×720/default and800×600/150%UI+text. Required markers prove initial saved event styling, live bar discovery, semantic color/thickness changes, persistent style across Slate tick, clamped local override without changing the global theme, original-theme restoration, stable realized entry objects/selection, notifications, far scrolling, recycling, stale-source isolation, clear/reset/repopulation and closing cleanup. Existing custom Blueprint/modal checks cover software input/focus, remapped prompts, data/actions, themes, lifetime and back restoration. No physical devices were connected or probed.
Tile/Tree tests configure their engine-owned styles before Slate construction; they are not complete playable tree/tile examples. Hover/drag brush assignments are checked, but this milestone does not claim a new physical scrollbar-drag test. Full-scene frame/producer timing remains descriptive, not an isolated performance guarantee.
| Actual engine | Editor build | Archive | Cook | Packages | Staged targets |
|---|---|---|---|---|---|
| 5.6.1-44394996+++UE5+Release-5.6 | 8.81s | 29.99s | 12.92s | 493 | 2663 |
| 5.7.4-51494982+++UE5+Release-5.7 | 43.56s | 50.90s | 13.37s | 495 | 2678 |
| 5.8.3-58210709+++UE5+Release-5.8 | 49.25s | 127.88s | 52.10s | 566 | 2341 |
All30Blueprint classes compile with0errors,0warnings,0failed loads on each engine. UE5.8 sample retains20C4305 color-conversion and2CS0618 include-order warnings; it is not warning-free. Fresh strict independent core Editor/Game Development/Shipping builds and isolated load/reflection checks pass (tool elapsed72.41/73.64/69.18s),23native types/16unique content packages, all63core files matching each host and optional gameplay/plugins absent. The new node is reflected and callable in every host.
Four actual renders were inspected and copied to Evidence/Visual/ListTheme-*.png: source and cooked live theme, source and cooked original-theme restoration at enlarged size. Colors/thickness are visibly applied; footer actions stay visible and the final row clips normally within the scrolling viewport. A previous CollectionScale PASS is rejected by the current strict verifier because it lacks the new required theme assertions; see ListTheme-NegativeControl.json.
Receipts and commands
ListTheme-VerificationSummary.json (local verification record) includes each verifier's exact arguments, engines, report scopes and package statistics. Candidate SourceReceipt and per-engine Boundary receipts match153source files/53original packages. Newer isolated short UE57-LT/UE58-LT copies match all source hashes except their explicitly changed EngineAssociation. BuildPlugin LT hosts match all63core files. Final UAT logs and FinalCopyWin64_UFSFiles manifests are preserved inside each archive before another engine run. No final cook/Blueprint/material/shader warning/error lines.
Commands: Tools/verify_engine_matrix.ps1 -Milestone LT; UE5.6 Editor Build.bat (initial/final logs retained); UnrealEditor-Cmd -run=pythonscript -script=Tools/theme_journal_list.py; CompileAllBlueprints with the30-class allowlist; Tools/run_entry_scale_reviews.ps1 -Prefix ListTheme56-Source; Tools/run_customization_reviews.ps1 -Prefix ListTheme56-CustomSource; serialized Tools/run_list_theme_matrix.ps1; python Evidence/collect_list_theme.py. Exact launched command lines appear in retained logs. No existing prefix/archive was overwritten.
Exactly7candidate paths changed from CollectionScale: core ScrollBox cpp/header, sample journal QA cpp/header, authoring cpp/header and original journal BP. No other asset, material, audio or settings change. Before-ListTheme source/asset snapshots retained. A default Windows encoding error truncated the journal documentation; the recipe was reconstructed against actual authoring graphs and prior runtime records with explicit UTF-8. No code/asset loss; this is recorded in PROGRESS.
Read-only reference check preserves HEADs, discovery modified-file hashes and all5,546UI package hashes. Sakura's full status is unchanged. GameMaster/MassForge have previously observed external modifications, so their full statuses are not unchanged; do not reset or rebaseline them. GameMaster visual design stays exclusive; Sakura center-origin tint/material/timing stays unchanged; deferred inventory remains excluded. No native app automation, hardware probe, commit or publication.
All launched milestone handles terminal; initial precontinuation build handle expired but its retained log confirms success, and no build was restarted because of that expiration. Physical controller/touch/listening, split-screen, translations/RTL/font coverage, full sample Shipping acceptance, custom exits, optional Mass adapter and remaining product gates stay distinct. This milestone is not release readiness.