test: replace composition source freezes

This commit is contained in:
Erik 2026-08-18 15:50:53 +02:00
parent caa5eb8b2b
commit 80c7b44457
8 changed files with 471 additions and 406 deletions

View file

@ -1208,3 +1208,60 @@ Verification:
attributed methods, and reduces total direct/helper source readers from 92
to 83 while direct readers remain 57. The remaining 83 reconcile to the 22
approved retained policies/contracts and 61 staged replacements.
## Batch Z composition-root source-freeze replacement
Batch Z converts 12 approved source-text readers across the seven graphical
composition-owner suites and removes one stale backend assertion. No product
source changes. The replacement tests use the built call graph, reflected
owner metadata, existing transactional fixtures, and typed composition results
instead of source fragments.
The exact decisions are:
- all seven phase-boundary tests now prove that `GameWindow` constructs exactly
one instance of the relevant composition phase and does not directly
construct the leaf owners that belong behind it. The phase and snapshot
types are also checked for the absence of a retained `GameWindow` owner;
- the platform prelude now verifies the compiled `OnLoad` route through
`AcquirePlatform` and `GameWindowCompositionPipeline.Run`, plus the single
`GameWindowPlatformAcquisition.Acquire` and host/input/camera phase edges;
- the prepared-asset contract follows the production factory, world phase,
`ObjectMeshManager`, `WbMeshAdapter`, and compiled shutdown manifest. It
proves one `IPreparedAssetSource` owner, no DAT-reader constructor seam in the
production mesh manager, prepared reads rather than live mesh building, and
mesh/prepared-source/DAT release order;
- the frame-root test follows the compiled construction order from render
resources and comparison state through the world/update roots, graph
publication, window publication, and final ownership transfers. The
lifecycle snapshot contract now verifies its exact `RenderFrameOutcome`
input and its typed live-entity, GPU-memory, profiler, and landblock metrics;
- the session phase follows the compiled streamer/start/reveal route and the
delegate target that constructs the request streamer. Its completion check
follows hydration, inbound routing, input/player mode, portal transfer,
session creation, command bindings, action attachment, and final publication
in order. Character selection now verifies the graphical selector option,
typed connect options, absence of automatic first-character selection, and
retained-UI runtime bindings;
- the interaction, live-presentation, and world-render boundaries retain their
existing behavioral phase fixtures while compiled metadata guards against
construction leaking back into `GameWindow`; and
- `PortalSpaceIsComposedOnBothBackendArms` is removed as stale. Campaign V
deleted the OpenGL backend, so a two-backend-arms source condition is no
longer an architectural contract; its negative assertion named an already
deleted null presentation. The valuable portal ownership rationale remains
in the live/session composition code, the compiled portal transfer order,
and the existing teleport/reveal behavior suites.
Verification:
- all 187 composition tests pass with zero skips or failures;
- the complete locked Release build covers all 44 projects with zero warnings
and zero errors;
- the no-retry complete hermetic Release gate passes 14,346/14,346 with zero
skips or failures across all 12 test assemblies. The one-case reduction is
the stale two-backend-arms assertion; and
- the regenerated 1,254-file inventory parses every file, reports 11,414
attributed methods, and reduces direct/total source readers from 57/83 to
44/70. The remaining 70 reconcile to the 22 approved retained
policies/contracts and 48 staged replacements.