docs(physics): decompose C3 after the flip halted with findings

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 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-08-02 08:17:23 +02:00
parent fe02c4f56d
commit 277ef5d032

View file

@ -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`