acdream/docs/research/2026-07-25-slice-j3-3-exact-projection-store.md
Erik d9bf4c4960 docs(runtime): close J3.3 and hand off J3.4
Record exact projection-store ownership, automated and connected evidence, rollback chain, and the executor-ready canonical object-table plan. Reconcile milestones, roadmap, architecture, divergence pointers, AGENTS/CLAUDE, and durable handoff state.

Co-authored-by: Codex <codex@openai.com>
2026-07-25 22:29:34 +02:00

4.9 KiB

Modern runtime J3.3 exact projection-store closeout

Result

J3.3 is complete in two production commits:

  1. 420e5eea70fd2c29cf9c8614e6298a1f84d64045 — exact-key App projection store and presentation-owner cutover.
  2. e937cc36df39cf6ea1eaba2f9c0243d1929da702 — exact-key spatial residence, visibility, quiescence, rebucketing, and retirement correction.

The second commit is the final exact binary certified by the connected gate.

AcDream.Runtime.Entities.RuntimeEntityDirectory remains the sole owner of current server GUID, INSTANCE_TS incarnation, Runtime local ID, reverse lookup, accepted snapshot/timestamps, parent state, session epoch, tombstones, and per-GUID operation versions.

AcDream.App.World.LiveEntityProjectionStore now owns materialized graphical sidecars only. Its key is the complete RuntimeEntityKey:

Runtime local ID + INSTANCE_TS incarnation

There are three explicit states:

  1. canonical-only Runtime registration with no App sidecar;
  2. one materialized App sidecar under its exact key;
  3. retryable teardown retaining only the unfinished suffix for that exact key.

The temporary ActiveRecordView, _activeRecords, detached LiveEntityRecord(EntitySpawn) fixture path, and broad materialized/visible WorldEntity collection APIs are deleted. Consumers use focused borrowed queries or allocation-free exact-key record views.

Exact owner cutover

The following App owners now carry the exact key:

  • world projection and loaded/pending spatial residence;
  • spatial visibility transitions and world-generation quiescence;
  • hydration and recovery;
  • animation and spatial-animation schedules;
  • remote motion, remote teleport, and movement observations;
  • projectile and ordinary-root worksets;
  • entity effect profiles and moving lights;
  • equipped-child roots and render registrations;
  • render-scene journal identity;
  • radar, targeting, selection, liveness, and teardown lookups.

GpuWorldState preserves the exact key through loaded-to-loaded rebucketing, pending residence, landblock retirement/reload, persistent rescue, and full-origin recenter. A delayed visibility edge therefore cannot match a later incarnation that reused the same numeric local ID. DAT-static entities retain their existing non-Runtime path and are not assigned a fabricated server-live identity.

No asynchronous queue, copied gameplay world, extra input frame, local-ID allocation-order change, renderer order change, or gameplay behavior change was introduced.

Automated acceptance

At final commit e937cc36:

  • focused ownership/streaming tests: 104 passed;
  • App tests: 3,761 passed / 3 skipped;
  • complete Release solution: 8,444 passed / 5 skipped;
  • Release solution build: pass.

Coverage includes canonical-only registration, exact sidecar claim, same- incarnation refresh, factory/resource rollback, local-ID wrap and stale-key rejection, loaded/pending rebucketing, landblock detach/reload, origin recenter, reentrant visibility callbacks, GUID replacement, hydration, animation/effect/light/equipped-child ownership, and retryable teardown.

Source guards reject a GUID-keyed App LiveEntityRecord authority map and local-ID-only ownership in the materialized presentation/spatial worksets. The divergence-register audit found no new behavioral divergence: J3.3 changes ownership and identity plumbing only. AD-32's moved Runtime source pointers were refreshed without changing its scope.

Connected lifecycle acceptance

Raw evidence: logs/connected-world-gate-20260725-221008/report.json.

Result: PASS on exact commit e937cc36df39cf6ea1eaba2f9c0243d1929da702.

  • Two fresh processes/sessions completed.
  • Seven of seven checkpoints passed.
  • Both processes exited gracefully with exit code zero.
  • The report contains zero failures.
  • Every checkpoint has zero render-scene shadow mismatches.
  • Every checkpoint converged with zero pending render deltas.
  • The only warning is 25 expected world-edge landblock misses.

This certifies fresh login, outdoor/dungeon travel, same-location revisit, graceful logout, and fresh-process reconnect on the exact final binary.

Exact rollback

Revert newest first:

git revert e937cc36df39cf6ea1eaba2f9c0243d1929da702
git revert 420e5eea70fd2c29cf9c8614e6298a1f84d64045

Do not revert J3.2 unless canonical Runtime identity itself is also being rolled back.

Next slice

Start J3.4 in docs/plans/2026-07-25-modern-runtime-slice-j3.md. The executor-ready transfer prompt is docs/research/2026-07-25-slice-j3-3-complete-j3-4-handoff.md.

J3.4 moves the existing canonical ClientObjectTable and its placement/ container lifetime under one Runtime entity/object group. App remains a synchronous borrower for retained UI, item icons, paperdolls, grids, cooldown drawing, and interaction presentation. It must preserve object add/update/ remove, container replacement, optimistic move rollback, stack responses, GUID reuse, session clear, and press-time event ordering without adding a queue or copied inventory model.