From 277ef5d032b3466a8aaa2a6deb703cb3b5de0d3c Mon Sep 17 00:00:00 2001 From: Erik Date: Sun, 2 Aug 2026 08:17:23 +0200 Subject: [PATCH] docs(physics): decompose C3 after the flip halted with findings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The first C3 implementation pass landed C3-1 (fe02c4f5) and correctly stopped on two structural gaps no planning document captured: the local player's first-entry circularity (the residence opens its placement at Create, submission needs a body, and only the zero-caller publication chain can attach one — resolvable by the campaign handoff's own route-1 order, but no driveable state machine exists) and the absence of any remote-creature body construction at Create time (retail builds physics in ACCObjectMaint::CreateObject; ours arrive with first motion). The plan now records the C3a (first-entry conductor, dormant) / C3b (retail-anchored remote body construction at Create, dormant — its contract must first resolve set_description's three FPU-elided friction/translucency gates from the PDB-paired binary) / C3c (the actual host flips + connected gates) decomposition. Co-Authored-By: Claude Fable 5 --- docs/plans/2026-08-02-placement-cutover.md | 40 ++++++++++++++++++---- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/docs/plans/2026-08-02-placement-cutover.md b/docs/plans/2026-08-02-placement-cutover.md index 625603dc..0917bfd5 100644 --- a/docs/plans/2026-08-02-placement-cutover.md +++ b/docs/plans/2026-08-02-placement-cutover.md @@ -114,13 +114,39 @@ same commit) → docs/handoff commit. No workarounds; no fused slices. comment-enforced; `IsCurrent(Operation)` remains available and a new reentrancy-spanning call site would silently inherit the tautology — its doc comment warns. -- **C3 — spawn-frequency cutover: routes 1 + 8.** Flip graphical AND - headless initial Create/login registration to - `RegisterEntityWithInitialResidence` + executor + placement receipts - together; `MaterializeProjection`/`BuildControllerAndCamera`/ - `SynchronizeLocalPlayer` become projection + acknowledgement only; - presentation-only rebucketing (`RebucketLiveEntity` loses `CommitRebucket`). - Gates add the exact lifecycle/reconnect connected route. +- **C3 — spawn-frequency cutover: routes 1 + 8 — DECOMPOSED 2026-08-02 + after the first implementation pass stopped with findings.** C3-1 (the + public executor-completion surface via + `RuntimePlacementProjectionChannel.TryGetInitialCreateCompletion`) + landed separately. Two structural gaps halted the flip, both real and + neither in the planning docs: + **(B)** the local player's residence lease opens its SetPosition + operation at Create time, but `SubmitPreparedPlacementCore` requires a + pre-existing canonical body that only the zero-caller publication chain + can attach — first-entry needs an explicit resumable sequence + (begin-placement → publication Prepare/Commit attaches the body → + authored-mover submit → Place receipt → Execute), which matches the + campaign handoff's route-1 required order but exists nowhere as a + driveable state machine; + **(C)** ordinary remote-creature Creates classify to `SetPosition` but + have NO production body-construction path at Create time (bodies arrive + with first motion today; retail constructs physics at CreateObject via + `ACCObjectMaint::CreateObject`/`set_description`, which our retail + notes fully document — the defaults come from the wire PhysicsDesc, + not invention). + Sub-slices, each with the standing contract/dual-review/gate + discipline: + - **C3a — Runtime first-entry sequencing (dormant):** the resumable + local-player entry transaction binding residence → publication + body-attach → mover submit → receipt → Execute, test-driven. + - **C3b — remote body construction at Create (dormant):** + retail-anchored body construction from the wire PhysicsSpawnData per + `set_description` order for residence-route remote/creature Creates. + - **C3c — the host flips (production):** both hosts onto the complete + machinery; seal the Controller setter; presentation-only + rebucketing; the connected lifecycle/reconnect + nine-stop gates + (harnesses: `tools/run-connected-world-lifecycle-gate.ps1`, + `tools/run-connected-r6-soak.ps1`). - **C4 — remaining routes: 2 (ForcePosition), 3 (portal, with the `RuntimeWorldTransitState` → `RuntimePortalPlacementAuthority` adapter), 4 (remote Create/Position; delete `RemoteTeleportController`/`Placement`