diff --git a/docs/plans/2026-09-01-campaign-overhaul-world-solidity.md b/docs/plans/2026-09-01-campaign-overhaul-world-solidity.md index 0f75d02ac..d26f4c638 100644 --- a/docs/plans/2026-09-01-campaign-overhaul-world-solidity.md +++ b/docs/plans/2026-09-01-campaign-overhaul-world-solidity.md @@ -717,6 +717,14 @@ Update immediately when a slice changes state. Chat is not the ledger. --- +**S5 current supplement (2026-09-05, packet§50):** #477 patch written in its +scratch, compiling/testing; no accepted return or new client run. Lead verified +#480's retail/paired-binary child publication and contracted the separate +shared prepared-cache fix in480-equipped-render-publication-contract.md. +Rynthid Recall6150→3032001C corroborates owner generation4; historical route +labels are not location evidence (479-rynthid-location-evidence.md). #479 +transform cause remains unproven. No change to G4 FAIL or the open obligations. + ## 14. Risk register (condensed) - **R1 second scene graph.** Graph records own only topology/membership facts; diff --git a/docs/research/2026-09-01-overhaul/478-480-readonly-diagnosis.md b/docs/research/2026-09-01-overhaul/478-480-readonly-diagnosis.md index 7e79bbc61..0749e6d2f 100644 --- a/docs/research/2026-09-01-overhaul/478-480-readonly-diagnosis.md +++ b/docs/research/2026-09-01-overhaul/478-480-readonly-diagnosis.md @@ -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 lines282819–282901 and285933–285955. 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 lines282819–282901 and285933–285955. 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 diff --git a/docs/research/2026-09-01-overhaul/479-rynthid-location-evidence.md b/docs/research/2026-09-01-overhaul/479-rynthid-location-evidence.md new file mode 100644 index 000000000..2163614ec --- /dev/null +++ b/docs/research/2026-09-01-overhaul/479-rynthid-location-evidence.md @@ -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 Z205–225, including Setups02001BEE/02001BF0/02001BF2 and + Gfx01004D35–01004D3A. 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. diff --git a/docs/research/2026-09-01-overhaul/480-equipped-render-publication-contract.md b/docs/research/2026-09-01-overhaul/480-equipped-render-publication-contract.md new file mode 100644 index 000000000..fedf4d553 --- /dev/null +++ b/docs/research/2026-09-01-overhaul/480-equipped-render-publication-contract.md @@ -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 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. diff --git a/docs/research/2026-09-01-overhaul/s5-consumers-material-closeout-packet.md b/docs/research/2026-09-01-overhaul/s5-consumers-material-closeout-packet.md index 299087aee..27a96f2b1 100644 --- a/docs/research/2026-09-01-overhaul/s5-consumers-material-closeout-packet.md +++ b/docs/research/2026-09-01-overhaul/s5-consumers-material-closeout-packet.md @@ -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.