docs(physics): plan the placement production cutover
The continuation executor (5db3de3c) completed the dormant residence
mechanism; the cutover is the campaign leg that makes it production truth.
The committed 8-route inventory maps every duplicate placement authority in
both hosts with exact call chains, confirms the placement-receipt observer
seam is fully built but unattached, and surfaces five pre-cutover gaps the
shipped mechanism cannot yet express (executor-to-channel bridge, atomic
controller/body publication, the 1,880 B/op activation budget, Runtime-side
live-input derivation, the portal-authority adapter). The plan decomposes
the cutover into C0-C5 bisectable slices under the campaign's standing
contract/dual-review/gate discipline, ending at the connected routes and
the user visual matrix that retire AP-1/AD-1.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
9ad590dcc7
commit
27e05b99e4
2 changed files with 1131 additions and 0 deletions
89
docs/plans/2026-08-02-placement-cutover.md
Normal file
89
docs/plans/2026-08-02-placement-cutover.md
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
# Placement production cutover — campaign plan (2026-08-02)
|
||||
|
||||
The final leg of the remaining physics-divergence campaign before AP-22 and
|
||||
AD-10: route graphical AND headless production placement through the
|
||||
residence + continuation-executor owner (`38fd4b8d` / `30012361` /
|
||||
`5db3de3c`), delete the legacy duplicate authorities, and retire AP-1/AD-1
|
||||
behind connected + user-visual gates.
|
||||
|
||||
**Inputs (read in order):**
|
||||
1. [`2026-08-02-runtime-continuation-executor-handoff.md`](../research/2026-08-02-runtime-continuation-executor-handoff.md)
|
||||
— the completed dormant mechanism and its cutover notes.
|
||||
2. [`2026-08-02-cutover-route-inventory.md`](../research/2026-08-02-cutover-route-inventory.md)
|
||||
— the full 8-route, both-host call-chain inventory with exact file:line
|
||||
for every duplicate authority to remove. THE map for all slices below.
|
||||
3. [`2026-07-31-remaining-physics-campaign-handoff.md`](../research/2026-07-31-remaining-physics-campaign-handoff.md)
|
||||
— the original per-route requirements and prerequisite definitions.
|
||||
|
||||
**Standing discipline per slice:** pinned contract → single implementer →
|
||||
independent retail-conformance + architecture/adversarial reviews (both must
|
||||
PASS on the final diff) → focused + complete Runtime + Release build +
|
||||
complete solution gates → bisectable behavior commit (register rows in the
|
||||
same commit) → docs/handoff commit. No workarounds; no fused slices.
|
||||
|
||||
## Confirmed pre-cutover gaps (from the inventory)
|
||||
|
||||
- The executor publishes only generic entity deltas; nothing bridges its
|
||||
completion to `RuntimePlacementProjectionChannel`, so no host can learn
|
||||
"my initial placement committed" through the built observer seam.
|
||||
- No atomic controller/body publication owner exists (prerequisite C);
|
||||
App and headless hand-write divergent `PlayerMovementController`
|
||||
construction, and `SubmitPreparedPlacement` requires a canonical
|
||||
`PhysicsBody` that nothing currently publishes atomically.
|
||||
- The dormant placement path's 1,880 B/operation (2,048 cap) allocation
|
||||
remains the activation blocker for frame-frequency routes.
|
||||
- `Execute`'s live inputs (`UsePositionFromServer`, `PlayerDistance`) are
|
||||
computed by no host; they must derive from Runtime's own character-option
|
||||
and local-player owners.
|
||||
- `RuntimePortalPlacementAuthority` has zero producing call sites; the
|
||||
adapter from `RuntimeWorldTransitState` does not exist.
|
||||
- The exact-Setup mover chain (`PrepareMover` /
|
||||
`RuntimeSetPositionMoverPreparer.TryBuild` /
|
||||
`IPreparedCollisionSource.ReadSetupCollision`) exists piecewise, unwired.
|
||||
- Route-6 split-recovery creates need an effect-replay suppression signal;
|
||||
route-7 needs `TryCommitParent`/`CommitWithdrawal` cancellation-symmetry
|
||||
fixes and host-visible cancellation receipts; headless lacks any
|
||||
parent-realize sequence (pre-existing, adjacent).
|
||||
|
||||
## Slices
|
||||
|
||||
- **C0 — Runtime bridge + live inputs (dormant).** Publish executor
|
||||
adoption/completion through `Placements` as the receipt stream hosts
|
||||
consume; derive `UsePositionFromServer`/`PlayerDistance` inside Runtime
|
||||
from its own owners (no host-supplied gameplay inputs); wire the
|
||||
exact-Setup mover chain end-to-end for the initial-Create placement; fix
|
||||
the route-7 cancellation asymmetries. Still no production caller.
|
||||
- **C1 — atomic controller/body publication (prerequisite C).** One
|
||||
Runtime-owned transaction publishing the exact same canonical body to
|
||||
graphical and no-window controllers, prepared off-canonical, committed
|
||||
atomically, respected by every body writer/binding/clock-epoch/teardown
|
||||
path. The rejected snapshot-lease design stays rejected. Adversarial-gate
|
||||
heavy (the campaign handoff's full list).
|
||||
- **C2 — placement allocation budget.** Pool or eliminate the operation/
|
||||
projection envelope allocations on the accepted placement path (root
|
||||
cause, not a raised cap), or obtain explicit user approval for a measured
|
||||
budget. Re-measure; the regression gate keeps the ceiling.
|
||||
- **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.
|
||||
- **C4 — remaining routes: 2 (ForcePosition), 3 (portal, with the
|
||||
`RuntimeWorldTransitState` → `RuntimePortalPlacementAuthority` adapter),
|
||||
4 (remote Create/Position; delete `RemoteTeleportController`/`Placement`
|
||||
and the inline MoveOrTeleport duplicate), 5 (projectile authoritative),
|
||||
6 (drops + split-recovery marking), 7 (residual pickup/parent/delete
|
||||
polish).** May land as more than one commit if a route proves large;
|
||||
each sub-landing keeps the full review discipline.
|
||||
- **C5 — legacy deletion + closeout gates.** Delete every superseded legacy
|
||||
path; parity tests; exact lifecycle/reconnect + canonical nine-stop
|
||||
connected routes; two-client observation; **user visual matrix** (the
|
||||
campaign's stopping point for user acceptance). Retire AP-1, AD-1,
|
||||
AP-131, AD-60's legacy half, and close #275. Update register/roadmap/
|
||||
milestones/architecture/memory + successor handoff.
|
||||
|
||||
After C5: AP-22 (authored collision shapes), then AD-10 (remote
|
||||
contact-plane projection), then the campaign's final matrix and ledger
|
||||
closeout; vendor Slice 5 resumes.
|
||||
1042
docs/research/2026-08-02-cutover-route-inventory.md
Normal file
1042
docs/research/2026-08-02-cutover-route-inventory.md
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue