docs(overhaul): bound final S4 c3a fix
This commit is contained in:
parent
01674bcc78
commit
8bd75ba312
1 changed files with 73 additions and 0 deletions
|
|
@ -1629,3 +1629,76 @@ release guide's ordinary `Status!=KnownFailure` filter and honestly returned
|
||||||
because it excluded TowerAscent, #458, and the six count rows. It was not
|
because it excluded TowerAscent, #458, and the six count rows. It was not
|
||||||
retried or rewritten: the separate inclusive artifact above is the required
|
retried or rewritten: the separate inclusive artifact above is the required
|
||||||
documented-set gate. No graphical client was launched.
|
documented-set gate. No graphical client was launched.
|
||||||
|
|
||||||
|
## 20. S4-c3a fix round 2 — retain authored metadata without a surface (lead, 2026-09-04; LAST ROUND)
|
||||||
|
|
||||||
|
The §19 retail re-review returned **FAIL** on candidate `eea5793d2`. The exact
|
||||||
|
authored-center formula, the paired-byte argument, all installed September
|
||||||
|
2013 content, and every original c3a invariant passed. One universal contract
|
||||||
|
edge did not: after `ReadParticleGfxInfo` successfully decodes a real GfxObj,
|
||||||
|
`ResolveParticleGfxInfo` replaces the complete result with
|
||||||
|
`ParticleGfxInfo.Default` whenever `SurfaceId == 0`. That discards the real
|
||||||
|
GfxObj's `SortCenter`, axes, bounds-derived visual center, and degrade mode.
|
||||||
|
Retail `CPhysicsPart::UpdateViewerDistance @ 0x0050E030` reads GfxObj
|
||||||
|
`sort_center` independently of surface/material presence. Packet §19.1 also
|
||||||
|
explicitly permits a zero authored center only for synthetic/default
|
||||||
|
billboards with no GfxObj. The existing production-path fixture supplied a
|
||||||
|
synthetic in-memory Surface and therefore did not exercise the bad branch.
|
||||||
|
|
||||||
|
The lens scanned the installed domain: 2,051 emitter records reference 360
|
||||||
|
distinct GfxObjs and every one has a nonzero first Surface DID. That lowers
|
||||||
|
current installed exposure to zero but does not make the implementation or
|
||||||
|
its universal claim correct. The same lens found one evidence-only wording
|
||||||
|
error: the in-memory `NoopDatReaderWriter` fixture is GfxObj-backed and drives
|
||||||
|
the real production path, but is not “real DAT-backed.”
|
||||||
|
|
||||||
|
### 20.1 F1 — decoded GfxObj metadata survives `SurfaceId == 0`
|
||||||
|
|
||||||
|
When a real GfxObj decodes successfully, preserve its complete
|
||||||
|
`ParticleGfxInfo` regardless of Surface presence. Acquire a texture slot only
|
||||||
|
when `SurfaceId != 0`; otherwise return the decoded record unchanged with its
|
||||||
|
unassigned slot. A missing/unreadable GfxObj or a descriptor with no GfxObj
|
||||||
|
may still use `ParticleGfxInfo.Default`. Do not synthesize a surface, change
|
||||||
|
procedural/untextured draw behavior, alter material/additive routing, or
|
||||||
|
special-case installed DIDs.
|
||||||
|
|
||||||
|
Extend the existing production-path GfxObj-backed CYpt fixture with a
|
||||||
|
no-surface row (or a separate equally real-path row): nonzero authored
|
||||||
|
SortCenter; vertex AABB center different from it; non-unit size and nonidentity
|
||||||
|
orientation; no Surface entry/DID. It must prove the same authored distance
|
||||||
|
and object/particle merge order while retaining the existing untextured visual
|
||||||
|
fallback. Restoring `SurfaceId == 0 ? ParticleGfxInfo.Default : ...` must first
|
||||||
|
fail a named authored-distance or cross-source-order assertion. Correct the
|
||||||
|
fixture comment to “production-path GfxObj-backed synthetic DAT records”; do
|
||||||
|
not call it installed or real DAT-backed.
|
||||||
|
|
||||||
|
### 20.2 Final-round production audit before return
|
||||||
|
|
||||||
|
This is c3a's second and last fix round. Before commit, re-read every §19 F2
|
||||||
|
path rather than relying only on the existing green tests: preparation must
|
||||||
|
hold no source payload; `Append` must reserve once; false and exception paths
|
||||||
|
must roll back the same tail exactly once; a rejected first-use source must
|
||||||
|
remain registered for reset; accepted tokens must remain stable; the first
|
||||||
|
3,000 candidates per list must be the only retained candidates; later row-2
|
||||||
|
immediate duplicates must still draw; flush/end/abort and next-preparation
|
||||||
|
cleanup must converge; the retained capacity and byte diagnostics must remain
|
||||||
|
bounded; the real warmed merge must remain 0 B. If that source audit exposes
|
||||||
|
any defect, fix and pin it inside this same round and record it explicitly in
|
||||||
|
the result—there is no later repair round.
|
||||||
|
|
||||||
|
### 20.3 Scope and return
|
||||||
|
|
||||||
|
Production edits are limited to `ParticleRenderer.cs`. Test edits are limited
|
||||||
|
to `Walk/WalkFrameDriverTests.cs`; this packet and the S4-c3a plan-ledger row
|
||||||
|
record the result. No other file changes without lead approval. AP-241/242/243,
|
||||||
|
queue/router/pipeline/shader/manifest/package behavior, and all installed
|
||||||
|
content remain unchanged.
|
||||||
|
|
||||||
|
Return one fix commit on top of `eea5793d2`: targeted no-surface positive and
|
||||||
|
mutation; the complete §19 95-test focused lane; AP boundary/count pin; both
|
||||||
|
real 0-B pins; shader/manifest lane; Release 0W/0E; `git diff --check`; honest
|
||||||
|
changed-file list and source-audit statement. The retail lens re-reviews the
|
||||||
|
no-surface branch and evidence wording first. Only PASS unlocks the sequential
|
||||||
|
production/gate-honesty lens over the complete c3a stack. Any further code,
|
||||||
|
test, register, or evidence correction would be a third fix round: stop the
|
||||||
|
chunk and write it up; do not land or graphically gate it.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue