acdream/src/AcDream.App/Streaming
Erik 2e8e09acd0 feat(physics): C4 route 4b-1 — remote placement infrastructure (dormant)
Builds the machinery route 4b-2 and 4b-3 will flip on, and changes no remote
behaviour: it has no production caller, so RemotePlacementDrivePendingCount is
provably 0 and IsConverged is unchanged.

Five pieces: a per-entity remote placement owner (RuntimeRemotePlacementDriveController),
a Position-time service-window guard with a Runtime interface plus BOTH host
implementations, N3's headless RetryPending pump, parked-count observability in
the ownership ledger, and the service-window optimisation that avoids parks we
can cheaply predict.

Landed alone because it is where the park-withdraws-the-entity failure was
decided; that decision is fixed at the source in the preceding commit and must
not share a review signal with a behaviour flip.

Two parts of route 2's controller are deliberately NOT ported, both verified
against retail rather than assumed. There is no ack: SendPositionEvent is called
only inside HandleReceivedPosition's local-player FORCE_POSITION gate
@0x0045400C-@0x00454091, and the remote arm @0x0045414D has no equivalent. There
is no re-issue funnel: retail never re-attempts a position it could not apply —
stale timestamps merely bump error_count @0x004542AC — and re-issuing packet N
after N+1 has merged would apply a pose the newer packet already superseded,
which is correct for a one-shot ForcePosition and wrong for a 5-10 Hz stream.

The service-window guard is an OPTIMISATION, not the correctness mechanism. The
original contract had it the other way round, justified by a claim that retail
cannot represent "arrived but not placeable" — false, and corrected in the
review findings: retail's GotoLostCell/reenter_visibility path represents it
exactly. A pre-flight guard also cannot be complete, because Core defers on the
entity's CURRENT cell, on the swept QueriedCellIds footprint spanning
neighbouring landblocks, and on residency evaluated after AdjustToOutside —
conditions only Core can see.

Review found and this commit fixes: DetachRoute cleared two maps of LIVE Core
operations without cancelling them (route 2's AbandonPending is the correct
mirror, not the first-entry controller) and its test asserted that blindness as
convergence; the headless predicate answered "can ever publish" rather than "is
published", and after the first fix still matched only 1 of the 9 landblocks
this host publishes; OwnsPlacement admitted remote top-level Creates until
gated on the Teleport flag as well as the disposition; Advance re-submitted
without re-checking the window; and four comments cited a report that did not
exist.

Contract item 6 is met by the structural proof, not the earlier test:
HasOldPrefixPlacementDebt refuses collision-prefix mutation permission before
ParkCollisionResidents is ever entered, so its overlap throw is unreachable.
That same mechanism is the unbounded stall filed as #310, which 4b-1 does not
bound — it only avoids widening it.

#311 files the remaining per-tick allocation in RetryPendingProjections; the
early-out for the empty-FIFO case landed via a new HasPendingReceipts accessor
so hosts still never touch .Placements. directly.

Gates: complete Release solution 10,973 passed / 4 skipped / 0 failed (baseline
10,938). Four review rounds; every fix discrimination-verified by revert.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-04 04:08:19 +02:00
..
DatSpawnClaimHydrationClassifier.cs refactor(app): compose session and player startup 2026-07-22 18:28:32 +02:00
DungeonStreamingGate.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
EntityVanishProbe.cs fix(streaming): #138-B avatar vanishes after teleporting out — don't relocate during PortalSpace 2026-06-24 12:30:20 +02:00
GpuLandblockRetirement.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
GpuWorldState.cs fix(streaming): stop replaying committed recenter retirements 2026-08-02 20:53:11 +02:00
GraphicalRemotePlacementServiceWindow.cs feat(physics): C4 route 4b-1 — remote placement infrastructure (dormant) 2026-08-04 04:08:19 +02:00
LandblockBuild.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
LandblockBuildFactory.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
LandblockBuildRequest.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
LandblockPhysicsPublisher.cs feat(runtime): atomically replace collision generations 2026-08-01 17:33:34 +02:00
LandblockPresentationPipeline.cs fix(streaming): stop replaying committed recenter retirements 2026-08-02 20:53:11 +02:00
LandblockPresentationRetirementOwner.cs feat(runtime): atomically replace collision generations 2026-08-01 17:33:34 +02:00
LandblockRenderPublisher.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
LandblockRetirementCoordinator.cs feat(runtime): atomically replace collision generations 2026-08-01 17:33:34 +02:00
LandblockStaticPresentationPublisher.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
LandblockStreamer.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
LandblockStreamJob.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
LandblockStreamResultCost.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
LandblockStreamTier.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
LocalPlayerTeleportController.cs refactor(runtime): unify generation reset for direct hosts 2026-07-27 00:43:26 +02:00
RuntimeTeleportDestinationAdapter.cs refactor(runtime): own teleport destination correlation 2026-07-26 17:52:34 +02:00
SealedDungeonCellClassifier.cs refactor(runtime): extract local teleport and player mode 2026-07-22 02:50:15 +02:00
StreamingCompletionQueue.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
StreamingController.cs fix(streaming): stop replaying committed recenter retirements 2026-08-02 20:53:11 +02:00
StreamingFrameController.cs refactor(runtime): close simulation ownership 2026-07-26 15:53:31 +02:00
StreamingMutationException.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
StreamingOriginRecenterCoordinator.cs fix(streaming): preserve portal destination ownership 2026-07-25 08:35:12 +02:00
StreamingRegion.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
StreamingWorkBudget.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
StreamingWorkBudgetOptions.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
TeleportLandblockTransition.cs fix(world): remove non-retail portal exit fade 2026-07-15 23:20:52 +02:00
TwoTierDiff.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
WorldGenerationQuiescence.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
WorldRevealCoordinator.cs refactor(runtime): unify generation reset for direct hosts 2026-07-27 00:43:26 +02:00
WorldRevealReadinessBarrier.cs perf(streaming): reserve destination reveal capacity 2026-07-24 19:39:23 +02:00