docs(render): AD-117 item 1 retired — the render-only destination-cell move is retail's own zero-sphere find_cell_list

CObjCell::find_cell_list (0x0052b4e0) with num_sphere == 0 adds only the
current cell — interior CELLARRAY::add_cell at 0x0052b563, outdoor
CLandCell::add_all_outside_cells (0x00533630, the arg2 <= 0 branch:
adjust_to_outside + gid_to_lcoord + add_outside_cell) — and skips the
portal transit walk (`arg4 != 0 && arg2 != 0` at 0x0052b576). So a shapeless
object's transition cell array is its destination cell alone, exactly what
RefreshPositionRows publishes. Not an adaptation; the register row keeps
its three residual readings, the S3 packet drops the capture request, and
the registry/test comments cite the verified function.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-09-03 01:18:50 +02:00
parent 3597c90446
commit 4b0b29e4cd
7 changed files with 21 additions and 17 deletions

View file

@ -36,9 +36,10 @@ register render-only instead of riding a deleted fallback.
| 2 | **Self-gate pixel diff:** Facility Hub's purple-lit wall panels went grey — they were MISSING statics (non-colliding, never registered), not a lighting change | both static publishers register non-colliding statics render-only | `CompletePublication_NonCollidingStaticRegistersRenderOnly` (App), `PublishStaticCollision_NonCollidingGfxObjStatic_RegistersRenderOnly` (Content) |
| 3 | Dual review (arch + retail lens): `Suspend` kept render rows; attach/detach invisible to staged commits; an attached child re-flooded on re-registration; landblock removal/retirement left retail rows (unbounded growth); render-only owners could never move; empty part array claimed cells; per-move closures; EnvCell shells aliasing the entity-id index; index predicate missing the id; dead per-cell scene indices | all fixed in the registry / scene | seven new Core pins + two `ArchRenderSceneTests` pins |
Register: AD-116 (chunk 5) and AD-117 (four residual Contract A/B readings, filed
tonight — the render-only destination-cell rule is the one a cdb trace should
retire at the capture session).
Register: AD-116 (chunk 5) and AD-117 (three residual Contract A/B readings, filed
tonight; its original item 1, the render-only destination-cell move rule, was
verified statically as retail's own zero-sphere `find_cell_list` mechanism and
dropped from the row).
## Owner checklist (the G2 gate, plan §10)
@ -88,7 +89,7 @@ layout sweeps (`LayoutImporterMediaBearingChildSweepTests`,
## After G2
1. The owner's ~1 h retail capture session (`tools/walk-oracle/oh/`, recon attach
first) — add a `CTransition` trace at `num_sphere == 0` to retire AD-117(1).
first) — the S3 packet §7 names the two traces S3 needs.
2. S3 Walk — the ownership packet is DRAFTED and waiting for the capture:
`docs/research/2026-09-01-overhaul/s3-walk-ownership-map.md` (§7 lists the
three exact things to capture).

View file

@ -709,7 +709,7 @@ lead-verified against the source before any edit).**
| A2 | `AttachChild`/`DetachChild` never advanced `_mutationRevision`, so a prepared SetPosition's wholesale cell-list install could drop an attached child's rows | both advance the revision | `AttachChild_AndDetachChild_AdvanceTheMutationRevision` |
| A3 | a re-registration of an attached child (appearance update) flooded it independently, overriding the inherited root array | `PublishRetailCellArray` short-circuits for an attached child: refresh `_childPartArrays`, `PublishChildEntries` | `RegisterMultiPart_OfAnAttachedChild_KeepsInheritingTheRootsCells` |
| A4/R4 | `RemoveLandblock` and the non-rooted `RetireOwnerFromLandblock` branch left every retail row behind (unbounded growth, stale membership); render-only statics were unreachable by the static-retirement loop | `RemoveRetailProductForPrefix` (rows for the prefix's cells, per-owner cell pruning, static/render-only owners end with the landblock); the retire branch prunes retail cells first and handles render-only owners | `RemoveLandblock_ClearsTheRetailProduct_IncludingRenderOnlyStatics`, `RetireOwnerFromLandblock_PrunesTheRetailRowsOfANonRootedOwner` |
| R3 | `RefreshPositionRows` (`.None`/keep-when-empty) republished from collision cells only → a render-only owner could never move | terminal branch republishes a render-only owner at its destination seed cell (AD-117 item 1) | `CommitSetPosition_None_MovesARenderOnlyOwnerToItsDestinationCell` |
| R3 | `RefreshPositionRows` (`.None`/keep-when-empty) republished from collision cells only → a render-only owner could never move | terminal branch republishes a render-only owner at its destination seed cell — retail's own zero-sphere `CObjCell::find_cell_list` 0x0052b4e0 (interior `add_cell` at 0x0052b563, outdoor `add_all_outside_cells` 0x00533630 `arg2 <= 0` branch, transit walk gated on `num_sphere != 0` at 0x0052b576), verified statically the same night; AD-117's item 1 was dropped | `CommitSetPosition_None_MovesARenderOnlyOwnerToItsDestinationCell` |
| A9 | `ReplaceMultiPartPayload` with a non-null EMPTY part array left a cell array with no rows and a permanent no-op on later moves | `partArray is { Count: > 0 }` | `ReplaceMultiPartPayload_WithAnEmptyPartArray_KeepsThePriorRows` |
| A7/A8 | `RemoveAll` closure per cell per move; LINQ `Where().ToArray()` in the staged capture | `RemoveOwnerPartRows` + `CollectOwnerRows`/`CollectOwnerPartRows` | existing suites |
| A5 | EnvCell shell projections carry their CELL id as `LocalEntityId`; dungeon cell ids alias the `0x8…` scenery namespace in `_byLocalEntityId` | shells are not indexed | `TryGetByLocalEntityId_IgnoresEnvCellShellRecords` |

View file

@ -134,12 +134,9 @@ Lead verifies every finding against the source before an edit (S2 precedent:
`logs/selfgate-20260903-010022-s2-review-fixes-3` — the per-region diff,
not the eye, is the verdict ([[feedback-deleted-fallback-carried-population]]).
## 7. Open questions for the capture session (ask for exactly these)
## 7. Open questions for the capture session (ask for exactly these two)
1. `LScape::calc_draw_order` sequence at each of the four poses (far-to-near
land cell order) — chunk 3's oracle.
2. Per-frame `outside_view.view_count` and the device-stamp advance count at
each pose — chunk 2's oracle for the re-arm gate.
3. `CTransition` at `num_sphere == 0` (a shapeless object's cell array on a
move) — retires AD-117 item 1 (S2 residual), unrelated to S3 but cheapest
to capture in the same session.