Appearance
Notification interaction checkpoint — 2026-10-06
Latest accepted revision: NotificationSlice-LiveFeedback, with four source notification runs, four exact cooked notification runs and two cooked enlarged regressions passed. The latest20BP compile is Create-RPGLiveFeedback-Ready-Blueprints-UE56.log. Earlier HostRefresh/Final archives and failures below document the repair history; the Live feedback repair subsection is authoritative for current example presentation.
Product change and ownership
The public IFNotificationSubsystem owns a bounded local-player FIFO. IFNotificationLayer presents one passive IFEntry body through the public root. Post/update/dismiss/scope cleanup, overflow, duration validation and live class/host refresh are Blueprint APIs. The root advances visible reading time while gameplay is paused; a modal or stack transition suppresses presentation and freezes that reading time. Scope references are weak. Cleanup removes records before callbacks and rejects reentrant posts during clear/capacity trimming.
Saved WBP_ForgeNotification uses ordinary IFText/IFSurface and public refresh/release graphs. WBP_ForgeRoot and WBP_EmberRoot choose the same body with different dock positions. The example controllers expose Root Class. Outpost's completed patrol/recruit and Emberwatch's accepted Ward/hearth completion post real results from their separate adapters. Returning calls Dismiss Scope. Ward's tooltip now correctly states six seconds of protection; twelve seconds is its cooldown. No gameplay rule changed.
All twenty sample Widget Blueprints compile with 0 errors / 0 warnings in Logs/Create-RPGLiveFeedback-Ready-Blueprints-UE56.log (latest example layout) and earlier clean authoring logs. No Game Master design, reference tree, material, art or code was copied. Reference projects remain read-only; inventory mechanics remain excluded. Blueprint workflow names the actual public nodes and lifecycle.
Source runtime
Installed UE5.6.1 CL44394996, Win64 Development, DX11 real rendering with RenderOffscreen. Each final run uses its own log and exits. The canonical example project's UnrealEditor.exe command is:
<UE5.6>/Engine/Binaries/Win64/UnrealEditor.exe <ForgeExamples.uproject> /Game/Maps/ForgeOutpost -game -RenderOffscreen -dx11 -Windowed -ForceRes -ResX=1280 -ResY=720 -unattended -nosplash -ddc=InstalledNoZenLocalFallback -IFVerifyNotifications -abslog=<unique log>
For RPG use /Game/Maps/ForgePilgrimage. For the enlarged case request 800×600 and add -IFVerifyNotificationsEnlarged; the fixture previews 150% UI and text size and cancels its preference transaction at exit. The cache graph is an existing engine per-process option, not a machine/project configuration change.
| HostRefresh source revision log in Logs | Measured viewport/preferences | Result |
|---|---|---|
| NotificationReview-HostRefresh-Source-RTS-Normal-UE56.log | 1280×720, defaults | Pass |
| NotificationReview-HostRefresh-Source-RTS-Enlarged-UE56.log | 800×600, 150% UI/text | Pass |
| NotificationReview-HostRefresh-Source-RPG-Normal-UE56.log | 1280×720, defaults | Pass |
| NotificationReview-HostRefresh-Source-RPG-Enlarged-UE56.log | 800×600, 150% UI/text | Pass |
The dev-only review actor activates the actual saved Patrol or Ward control through synthetic Slate Shift intent, focus assignment and a 120ms-held Enter. It waits for the real backend result, verifies supplies=280 or party vitality=100%, the expected result model and saved body, and command focus retained. It checks rendered root bounds and the reserved HUD lane, keyed update/GUID preservation/old subscription release, live Notify Data Changed, reduced-motion opacity, finite capacity/oldest-pending overflow/current preservation, host refresh/unbind/reconstruction, and replacement of the live default body class after a modal closes.
The fixture opens the actual confirmation screen, verifies collapsed presentation and frozen reading time, then sends Slate Escape Back. It checks exactly-once dismissal, FIFO promotion, scope isolation, destroyed actor cleanup while the world is actually paused, native entry override, expiration through UI time during pause, reentrant clear rejection, adapter return-to-menu cleanup, capacity-one rejection, and root removal/unregistration. Assertions operate on the public queue/root/entry APIs, not a parallel test implementation.
Tools/verify_notification_review.py requires one complete PASS, the exact measured viewport/genre/enlargement, current host/class/lane checks and no fatal/error/ensure/Accessed None markers. Logs/NotificationVerifier-NegativeControl.json demonstrates rejection of a retained failed enlarged run whose engine process nevertheless returned zero. Individual current source verifications also pass. Synthetic Slate input plus programmatic API checks are not physical-device evidence.
Visual review and failures retained
Initial stack-card captures fit the viewport but covered adjacent enlarged HUD text. The example now uses a compact horizontal ribbon, semantic theme roles, a nonwrapping short title and wrapping body. Public root defaults set width600, bounded by 80% of the player area. Outpost reserves Y=0.28–0.46; Emberwatch reserves Y=0.36–0.54 and moves both action and context areas below it. A two-line body at maximum tested size stays in that lane. The extra reserved space reduces the scrolling panels' height; command focus/reveal and RPG context bounds need the current cooked regression below.
Initial/Ready/Final/TwoLine source logs and captures remain in Logs and the sample Saved/NotificationChecks. Ready/Final enlarged logs failed the added lane assertion; the tests were not weakened. The nonwrapping-title repair fixed the actual Ward result, and the larger lane accommodated the longer live-update body. Only HostRefresh logs are the latest source acceptance for this slice. Public host refresh also repairs an empty-body edge when changing a registered host; the queue checks a model/class replacement occurring during entry initialization before retaining that newly initialized body.
Build logs retain initial C4458 local Slot shadowing, invalid QuietNaN helper use, and the editor authoring GeneratedClass TSubclassOf pointer deduction error. Their repaired builds pass. The first Ember root creation reports two expected missing-package warnings; subsequent final authoring runs report zero errors/warnings. No reference file or machine setting was changed to make these pass.
Cooked archive, regressions and independent core
The preliminary Packages/NotificationSlice archive passed build/cook/stage in24.38s but predates the live host refresh repair. NotificationSlice-HostRefresh passed in23.71s and its four notification runs passed, but its enlarged RPG regression found7.75px of unavailable-reason clipping. Both are retained as prior revisions.
The saved RPG action Scroll Box now uses the engine Navigation Destination = Bottom or Right, keeping the action label/reason reachable when a tall card exceeds the reduced viewport. The source regression Notification-RPGReveal-Source-Enlarged-UE56.log passes; reason ends at565px, its button/scroll end at570px. Bounds assertions remain unchanged. The upper part of a tall card and status may scroll; this is an explicit example layout policy, not a claim that every enlarged element is simultaneously visible.
The next retained archive is Packages/NotificationSlice-Final, built/cooked/staged in13.37s, cook3.96s/477packages,0errors/0warnings. Its saved AutomationToolLog.txt and FinalCopyWin64_UFSFiles.txt belong to that run. Runtime invokes Windows/ForgeExamples/Binaries/Win64/ForgeExamples.exe, the same maps/renderer/viewport/fixture flags above, omitting the editor project/-game/cache arguments.
| Retained Final-revision cooked log in Logs | Actual viewport/preferences | Result |
|---|---|---|
| Packaged-NotificationFinal-RTS-Normal-UE56.log | 1280×720, defaults | Pass |
| Packaged-NotificationFinal-RTS-Enlarged-UE56.log | 800×600, 150% UI/text | Pass |
| Packaged-NotificationFinal-RPG-Normal-UE56.log | 1280×720, defaults | Pass |
| Packaged-NotificationFinal-RPG-Enlarged-UE56.log | 800×600, 150% UI/text | Pass |
The Final archive's cooked enlarged RTS command/production/focus/lifetime regression and RPG initial-focus/reason/party/objective/tooltip/modal regression pass in Packaged-NotificationFinal-RTSRegression-Enlarged-UE56.log and Packaged-NotificationFinal-RPGRegression-Enlarged-UE56.log. Visual review then found that live Ward feedback, unlike the initially unavailable Approach feedback, could still grow past the scroll edge. This archive is therefore retained as a prior layout revision; the latest LiveFeedback runs below supersede it. Notification runs cancel their preview sessions and remove their roots. No native desktop focus or input was taken.
Live feedback repair
WBP_EmberActionButton now uses public OnAppearanceUpdated/NavigationFocused, Sequence, Delay Until Next Tick, Has Focused Descendants, CommonUI Find Parent Widget Of Type, Cast To ScrollBox, Force Layout Prepass and Scroll Widget Into View with BottomOrRight/4-unit padding. Existing appearance remains immediate. A dev runtime assertion measures the actual live Ward reason inside its scroll viewport after activation. A first compiler run pruned the parent lookup because its execution pin was unwired; Create-RPGLiveFeedback-Blueprints-UE56.log and Refine-RPGLiveFeedback-ExecRepair-UE56.log retain that warning. The repaired Create-RPGLiveFeedback-Ready-Blueprints-UE56.log compiles20BPs with0errors/0warnings. No core source changed for this presentation repair, so the strict independent core matrix above remains current.
NotificationReview-LiveFeedback-Source-RTS/RPG-Normal/Enlarged-UE56.log all pass the full current fixture. Actual enlarged Ward feedback is Y=140.4–167.6 within a196.8-unit scroll viewport; normal is192–211 within307.2. Source Result-RPG-Enlarged00005.png was inspected and shows the complete Recovering caption. Earlier HostRefresh source logs establish the prior queue/customization revision and lack this new Ward measurement.
Latest archive: Packages/NotificationSlice-LiveFeedback. Build/cook/stage19.88s, cook3.95s/477packages,0errors/0warnings. Its exact cooked logs below pass the stricter current verifier, including live Ward feedback bounds; all processes exit0. Runtime uses the executable below that archive's Windows/ForgeExamples/Binaries/Win64, not an earlier staged or archived binary.
| Exact latest cooked log in Logs | Actual viewport/preferences | Result |
|---|---|---|
| Packaged-NotificationLiveFeedback-RTS-Normal-UE56.log | 1280×720, defaults | Pass |
| Packaged-NotificationLiveFeedback-RTS-Enlarged-UE56.log | 800×600, 150% UI/text | Pass |
| Packaged-NotificationLiveFeedback-RPG-Normal-UE56.log | 1280×720, defaults | Pass |
| Packaged-NotificationLiveFeedback-RPG-Enlarged-UE56.log | 800×600, 150% UI/text | Pass |
| Packaged-NotificationLiveFeedback-RTSRegression-Enlarged-UE56.log | 800×600, 150% UI/text, IFVerifyRTS + IFVerifyRTSEnlarged | Pass |
| Packaged-NotificationLiveFeedback-RPGRegression-Enlarged-UE56.log | 800×600, 150% UI/text, IFVerifyRPGLayout + IFVerifyRPGTooltips + IFVerifyRPGLayoutScreenshot | Pass |
The latest RTS regression exercises selection/commands/movement/pause/reward/production/nested navigation/invalid actors/unbinding in the smaller panel. RPG regression measures full Approach reason/party/objective bounds and tooltip/focus/modal cleanup; the allocated reason ends at the570px scroll edge and remains fully inside it. This is narrower than a complete RPG gameplay/native input regression.
Actual result captures are preserved as Visual/Notification-Source-RTS/RPG-Normal/Enlarged.png and Notification-Cooked-RTS/RPG-Normal/Enlarged.png. All four latest cooked result frames were inspected; the enlarged live Ward caption and result ribbon are fully visible. Notification-RPG-Cooked-Reason-Reveal.png preserves the current Approach fixture. These are actual play-interface results over original primitive scenes; tooltip and scrolled passive-context overlap remain wider layout-polish work. No static screenshot is used as the interaction pass.
Fresh initial UE56/57/58-Notifications strict hosts passed Editor Development/Game Development/Shipping in43/51/43s. They loaded19 reflected types and10 original plugin assets with0errors/warnings, independent of examples/inventory/Mass. The latest UE56/57/58-NotificationHostRefresh hosts pass all three targets in39/44/42s and isolated19type/10asset/API loads with0errors/warnings. Exact logs/reports are in ENGINE_COMPATIBILITY.md. These are independent core compilation/reflection checks, not full example/runtime compatibility on5.7/5.8. Earlier settings automation remains scoped to its prior revision and was not rerun for notification-only changes.
Final boundary verification passes114source files/37own asset packages against5546reference hashes and2631staging targets, including both root assets and the custom result body. Exact UFS manifest SHA256: ed1f7454673e95f6f18057f2e5b48d35889d7f6248115ab1dc8f60121c409e80. GameMaster/Sakura/Mass HEAD/status/changed files and inspected UI assets remain unchanged. This check detects exact copies and membership/dependency errors; it does not certify transformed-copy absence, visual originality or legal clearance. No commit or publication.
Limits and next gates
Only brief English local results and the recorded Win64 resolutions/preferences are covered. No notification-history product, interactive toast, remote notification transport, network authority, split-screen proof, arbitrary localization/long text/safe-area guarantee or physical gamepad/touch proof follows. Underlying status/action scroll regions and tooltip overlap still need broader product polish; the result ribbon's bounds/lane proof does not certify the whole HUD. Primitive example scenes also remain provisional. Physical switching/disconnect/drift/jitter, audio audibility, native complete-flow regression, complete Blueprint theme/transition/provider replacement, loading/world-space/optional Mass/performance and full engine/platform gates remain open. The persistent product goal stays ACTIVE.