docs: contract #480 equipped publication and pin Rynthid destination

This commit is contained in:
Erik 2026-09-05 11:39:04 +02:00
parent 710cbb554c
commit 9556c17480
5 changed files with 202 additions and 5 deletions

View file

@ -47,11 +47,27 @@ effective part replacements and cleanup; do not manually inject membership.
Existing controller fixtures use empty Setups; registry fixtures inject
handmade child shapes, and selection tests inject visible parts directly.
Agent named-retail pointers (lead binary re-verification still owed before
any AC-specific repair contract): CPhysicsObj::add_shadows_to_cells recursively
visits children; CPartArray::AddPartsShadow visits every non-null visual part.
Named pseudo-C lines282819282901 and285933285955. No new retail claim is
accepted merely from a successful attachment log.
Lead independently verified the named-retail loops and paired executable:
CPhysicsObj::add_shadows_to_cells recursively visits children with the same
CELLARRAY; CPartArray::AddPartsShadow visits every non-null visual part.
Named pseudo-C lines282819282901 and285933285955. These establish expected
child/part publication, not the modern prepared-cache mechanism itself.
Paired `C:\Turbine\Asheron's Call\acclient.exe` SHA-256:
`006FFEADC5D679C871497112A5BD1F87714D0E273E2166BAE5052DDE369297B1`.
Lead mapped VAs using its PE image base/section table and hashed exact ranges:
| Function | VA / file offset / length | SHA-256 |
| --- | --- | --- |
| CPhysicsObj::add_shadows_to_cells | 00514AE0 / 00114AE0 / 307 bytes | E651AE6CC5C09374356B4389D44C2F5615DAF50BD2CADFFE8C4565A41C078388 |
| CPartArray::AddPartsShadow | 00517E40 / 00117E40 / 89 bytes | 63C6ACFF37CE039B6929EBD51A08889F6EB4904B53F29C77C0E162B19CE95C75 |
Verified call bytes: 00514BA2 `E8 99 32 00 00` targets00517E40;
00514BF7 `E8 E4 FE FF FF` recursively targets00514AE0. The part loop reads
parts[i], skips null, and calls the virtual add-part slot via `FF 55 00`
at00517E87 before increment/num_parts comparison. The pseudo-C's00517E76
annotation identifies the expression, not that native call instruction.
No new retail claim is accepted merely from a successful attachment log.
## #478 — distinguish local-light selection from High postprocessing

View file

@ -0,0 +1,50 @@
# #479 — Rynthid identity, before a transform diagnosis
2026-09-05, read-only lead investigation on production `de427d2c0`, docs
HEAD710cbb554. No fix or visual acceptance. The owner's hanging-structure
placement failure remains open; no owner PNG/exact affected part was captured.
## Verified destination
Rynthid Recall is spell6150/0x1806 (also present in the generated local
SpellId enum). The primary ACE world-data row is
[06150 Rynthid Recall.sql](https://github.com/ACEmulator/ACE-World-16PY-Patches/blob/master/Database/Patches/2%20SpellTableExtendedData/06150%20Rynthid%20Recall.sql).
Root fetched its exact Git blob `fd301a1f944e2585a823fa7a17bcb35926786e2e`
through the public GitHub API, without accessing server credentials or writing
the database. The row specifies cell3032001C, XYZ(83.3,89.2,133),
WXYZ(-0.642788,0,0,-0.766044). This is upstream ACE data, not a claim to have
queried this running server's database.
The owner's recorded reveal generation4 at3032001C,
XYZ(83.3,89.2,132.00499), therefore DOES corroborate the Rynthid visit.
The small Z difference is the observed settled pose, not evidence of the
reported structure displacement. No owner heading/affected-object identity
is recovered from this correlation alone.
Historical `tools/connected-r6-soak.route.txt` labels3032001C "Sawato" and
F6820033 "Rynthid". Those labels must NOT be used to identify the failed
scene. Keep old result/checkpoint identifiers traceable; this note corrects
their semantic use without rewriting historical evidence or changing route
coordinates. A coordinate-validity check supersedes a copied label.
## Installed-DAT candidates
Root ran the existing Release A8CellAudit read-only `buildings 30320000 1`
and `buildings 30320000 4` against Documents/Asheron's Call installed DATs.
Before execution, both AcDream.App/acclient were absent; ACE UDP9000 PID13340
was up. No graphical client was launched and no DAT was modified.
- 3032 itself has35 static objects and0 buildings: the recall encampment.
- The radius4 scan includes dense2D31 with535 objects and0 buildings; many
objects sit at Z205225, including Setups02001BEE/02001BF0/02001BF2 and
Gfx01004D3501004D3A. These are candidate elevated complex components,
NOT a proven match to the displaced part.
- The radius4 scan totals129 shell entities and0 registry buildings (shells
without portal cells count separately). Tool output was too large for the
model result and truncated; no whole-scan numerical/geometry PASS is claimed.
Wegener is doing a bounded read-only object/part/transform trace while #477
is tested. Next proof needs exact candidate Setup/GfxObj/part transforms from
the current static pipeline and the installed authored frames, then a stable
connected view after GPU repair. Do not assert rebase, quaternion, animation,
or DAT corruption as the cause without that evidence.

View file

@ -0,0 +1,101 @@
# #480 — publish equipped visual-part geometry before attachment
Lead contract2026-09-05. NOT IMPLEMENTED. Independent of the in-flight #477
native synchronization repair. The commit containing this contract is the
exact scratch base; production remains `de427d2c0` until reviewed integration.
## Evidence and objective
The owner sees no wielded hand items. `478-480-readonly-diagnosis.md` records
the lead-verified producer-to-consumer defect: the controller resolves GfxObj
availability through DAT but builds child render parts from an unpopulated
PhysicsDataCache. Cold parts can therefore attach with zero RetailPartEntry
rows and never reach the world walk. The ordinary materializer already uses
LiveCollisionAssetPublisher to publish the required prepared views/bounds.
The attached, Position-null route bypasses that ordinary materializer.
The note contains the lead's exact named-retail/paired-executable checks for
CPhysicsObj::add_shadows_to_cells and CPartArray::AddPartsShadow. Retail
recurses through attached children using the parent's CELLARRAY and publishes
their non-null parts. Repair the missing modern producer edge; do not change
those rules or infer success from an attachment log. The exact owner-item
cache state was not captured, so a real cold-cache regression is required.
## Scope and implementation contract
- EquippedChildRenderController: reuse the existing strict live collision
publisher to publish each DAT-resolved effective GfxObj before building
the child's render-part membership and before materializing/announcing its
new projection. BuildPartAvailability already visits those actual objects;
use that path or an equally narrow shared visit, not a second decoder.
- LivePresentationComposition: inject the SAME composition-owned publisher
used by ordinary live hydration. A required Action<uint,GfxObj> bound to
CacheGfxObj is acceptable to keep the public controller from exposing an
internal concrete type. No nullable/no-op production fallback or second
cache/source/publisher owner. Existing fixture constructor adaptations are
permitted in the two network-presentation suites and controller suite.
- Focused tests in the existing equipped-child controller fixture, plus at
most one narrowly scoped test file if separating the composed witness is
clearer. Reuse current scene/walk fixtures and prepared-source test support.
- Update the relevant architecture paragraph and this contract's outcome.
Every intentional deviation gets a register row in the same landing commit;
none is expected. Do not change unrelated register history.
Preserve effective AnimPartChanged IDs, part ordering, absent-DAT behavior,
Setup scale/holding-location/pose composition, exact entity/authority checks,
parent CELLARRAY inheritance and all detach/reparent/withdrawal sequencing.
Cache immutable asset data only; children still acquire NO independent
collision registration or flood. Do not repair the ignored AttachChild
Boolean by inventing a new rollback/lifetime protocol in this chunk.
If an actual required failure-path change emerges, report it before expanding.
Strict prepared-source failure must remain a truthful failure before a new
child projection/membership is published. Never manufacture bounds or silently
fall back to parsed collision, root-cell draw selection, parent mesh parts,
or an all-entities sweep. No changes to shaders, GPU code, Runtime authority,
lighting, capture timing, package format or streaming policy.
## Discriminating proof
1. Drive the REAL OnSpawn attached Position-null path with a nonempty child
Setup and real drawable GfxObj metadata, an initially empty PhysicsDataCache
and a recording IPreparedCollisionSource behind the REAL strict publisher.
Give the parent actual registered retail CELLARRAY membership and normal
materialized scene projection. Do not prepopulate child cache/rows manually.
2. Assert the child relation/materialization as a control, then exact child
local-ID, part indices and effective GfxObj identities in every inherited
cell. Feed the same registry and actual resulting projection into
WalkProductionWorldData; assert its EquippedChild record. The unfixed
producer must fail at the missing child rows, not fixture/setup failure.
3. Cover visual-only/no-physics-BSP geometry, a cold AnimPartChanged replacement
distinct from the original Setup ID, and repeat realization/reappearance
without duplicate rows or unnecessary prepared reads. Missing DAT parts
retain existing unavailable semantics. Missing prepared content must fail
before new projection/ready publication and must not publish graph-only data.
4. Detach/withdraw the exercised child through the real controller lifecycle;
its rows disappear without deleting the parent's rows or registering child
collision shapes. Preserve existing withdrawal/reparent/network tests.
5. Bind production composition to the actual shared publisher (existing
source/IL test idiom if needed); a fixture-only publisher call is not proof.
Two actual-production mutation checks: remove the new publication call;
then publish original Setup IDs instead of effective replacement IDs. The
corresponding cold-cache/replacement assertions must fail, not compilation.
Restore exact raw source hashes after each and finish Release/focused green.
No new test framework, detached model oracle, increased tolerances or skips.
## Workflow and closure
One OpenAI implementer in a fresh codex/s5-480-openai-impl scratch. No commits,
extra agents or graphical launch by the implementer. Check both AcDream.App
and retail acclient before EVERY build/test; neither may be running. Other
scratches are untouched. Root independently verifies the return and repeats
discriminating evidence; sequential retail/behavior and production/lifetime
review lenses follow, within the owner's ten-review limit.
Return exact changed files/hashes, commands, green Release/focused TRX paths,
mutation failures and raw restoration proof. Root commits/integrates and
updates the ledger. Coordinate graphics only after #477 validation is clean:
verify equipped hand objects in a connected client, preserve PNG paths and
label visual PASS provisional until owner inspection. This chunk cannot
close the overall failed owner gate or authorize a main merge.

View file

@ -4672,3 +4672,25 @@ Dispatch: contract commit `29730506c57b44cfa3ba454a8594e170c95d7233`, fresh
base verified clean. James implements only that contract; no agent graphical
launches or extra agents. Lead owns verification/review/integration and
unchanged production remains `de427d2c0` until accepted. No repair PASS yet.
## 50. Parallel bounded held-item repair; Rynthid identity correction
#477's three production dependency fixes are written in its scratch; James
is compiling/testing them, not yet returned or accepted. No second graphical
run until lead verification/review/integration. Both clients absent and
ACEUDP9000 PID13340 up at the lead's latest read-only DAT execution.
Lead independently re-verified #480's child/part retail loops against the
paired executable; range hashes/call bytes are in478-480-readonly-diagnosis.md.
`480-equipped-render-publication-contract.md` bounds the missing shared
prepared-publication edge, real cold-cache OnSpawn-to-walk proof, replacement
IDs, strict failure/withdrawal, and two actual-production mutations. It may
proceed in an independent fresh scratch while GPU testing continues; no
changes to GPU/lifetime policy, no fallback cell membership or new owner.
Implementation/visual PASS remain owed. Lead owns commits/integration.
Primary ACE spell6150 resolves to3032001C and matches the owner's generation4;
old route labels "Sawato"/"Rynthid" are unreliable identifiers. Evidence and
candidate elevated2D31 complex are in479-rynthid-location-evidence.md. A
read-only object/part trace is in progress; transform cause still unproven.
All #478/#481, #476, exact route, C1c/C2/full-G4 obligations in§49 remain open.