# HANDOFF — J3.3 complete; start J3.4 canonical object-table ownership ## Outcome Stop here. J3.3 is complete and certified. Final code commits: 1. `420e5eea70fd2c29cf9c8614e6298a1f84d64045` — App projection sidecars and presentation worksets use exact `RuntimeEntityKey`. 2. `e937cc36df39cf6ea1eaba2f9c0243d1929da702` — spatial residence, visibility, quiescence, rebucketing, retirement, and origin recenter preserve that same exact key. Do not reopen J3.3 unless a reproducible gate fails. The next slice is J3.4. ## Read in this order 1. `AGENTS.md` 2. `docs/plans/2026-07-25-modern-runtime-slice-j3-object-table.md` 3. `docs/plans/2026-07-25-modern-runtime-slice-j3.md` 4. `docs/research/2026-07-25-slice-j3-3-exact-projection-store.md` 5. `claude-memory/project_modern_runtime_architecture.md` 6. `claude-memory/project_live_entity_runtime.md` 7. `docs/architecture/acdream-architecture.md` 8. `docs/architecture/code-structure.md` The first plan is the authoritative J3.4 execution plan. The parent plan defines J3.5/J3.6 and final acceptance. ## Current architecture - `RuntimeEntityDirectory` is the only server-GUID/incarnation/local-ID authority. - `RuntimeEntityRecord` is presentation-free. - `LiveEntityProjectionStore` is the only materialized App sidecar store. - Every App materialized owner uses exact `RuntimeEntityKey`. - `GpuWorldState` retains the exact key across all spatial lifetime changes. - `LiveEntityRuntime` is an App projection/lifecycle host, not canonical identity. - No queue, copied gameplay world, extra frame, or rendering behavior change was introduced. The remaining J3.4 split is visible in two places: - `LiveEntityRuntime` still constructs `RuntimeEntityDirectory`. - `GameWindow` still constructs the live `ClientObjectTable`. J3.4 replaces those two independent construction points with one presentation-free Runtime entity/object lifetime-group root, then makes all App controllers and Runtime session routing borrow its exact instances. ## Required behavior Preserve verbatim: - canonical create acceptance before object-table CreateObject mutation; - `CreateIntegrationVersion` revalidation after synchronous callbacks; - logical DeleteObject mutation before App projection teardown; - pickup/parent leave-world without object-table deletion; - optimistic move, authoritative confirm, and rejection rollback; - ViewContents/container replacement and nullable unknown-object move notices; - current pre-Connect subscription order; - object-table clear before graphical projection reset; - synchronous press-time UI and controller reads. Do not move retained UI, item icons, paperdolls, grids, cooldown drawing, selection presentation, or higher-level inventory transactions into Runtime in J3.4. Those are borrowers now and later J4 work. ## Baseline and gates Final J3.3 baseline: - focused exact ownership/streaming: 104 passed; - App: 3,761 passed / 3 skipped; - complete Release: 8,444 passed / 5 skipped; - Release build: pass; - connected report: `logs/connected-world-gate-20260725-221008/report.json`; - connected result: two sessions, seven checkpoints, both graceful exit code zero, zero failures, zero render-shadow mismatches, zero pending deltas. Standard commands: ```powershell dotnet build AcDream.slnx -c Release --no-restore dotnet test AcDream.slnx -c Release --no-build ``` Run the focused Runtime/Core/App matrix listed in the J3.4 plan before the full suite. Commit the J3.4 code before running the connected gate so the report identifies one immutable binary. Use credentials supplied by the user/session; never write them into source or documentation. ## Worktree cautions These tracked paths can appear modified from Windows metadata/line-ending behavior while remaining content-identical to the index: - `src/AcDream.App/Interaction/PlayerInteractionMovementSink.cs` - `src/AcDream.App/Rendering/LiveAnimationPresentationContext.cs` - `src/AcDream.Core/Physics/CellArray.cs` - `src/AcDream.Core/Vfx/ParticleSystem.cs` - `tests/AcDream.Core.Tests/Vfx/ParticleSystemTests.cs` Do not stage or rewrite them unless `git diff -- ` shows a real task change. `.test-out/`, nested `.test-out/`, and `logs/` contain local test/evidence artifacts, including very large prepared packages. Do not stage them and do not recursively delete them without first verifying the exact absolute target. ## Exact rollback If J3.3 itself must be rolled back, revert newest first: ```text git revert e937cc36df39cf6ea1eaba2f9c0243d1929da702 git revert 420e5eea70fd2c29cf9c8614e6298a1f84d64045 ``` For a J3.4 failure, revert only the new J3.4 commit. Do not use the J3.3 rollback as a shortcut. ## Final J3 goal J3.4 establishes one Runtime entity/object ownership root. J3.5 publishes one ordered per-session entity/object delta stream consumed by graphical and direct hosts without a second queue or mirror. J3.6 proves failure recovery, no-window lifecycle, multiple-instance isolation, exact teardown convergence, Release parity, and the connected route. The J3 campaign is complete only when J3.6 proves zero leaked canonical records, tombstones, App projections, resources, container entries, parent candidates, deltas, and subscriptions. That is the next clean boundary before J4 gameplay-state services and later Slice K Linux/headless multi-session work.