You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Closing pass over the opening prologue (user reframe: 'not whether visuals are
missing — whether things are out of phase / not rendered faithfully / a logic
approximation that should be closed'). The intro is verified 1:1 modulo the one
deferred book-arrow phase:
- Render: iv1_1 ALIGNED (0 divergent); iv1_2 = 4 benign batched + 1 inert b494
(0 px) via orv3_draws --material — NO retail-only effect texture, so the
anger-marks/radial-lines 'gap' is NOT a render gap (ledger row resolved).
- Phase: in-phase in the visible window (dialogue +121/+156, blink 21/85/149 on
both); the only difference is invisible (conv-pose producer debt, under the
load overlay).
- Stale gaps closed: text-fade-on-dismiss = already ported (user); iv1_1->iv1_2
is a plain fade-to-black-and-back, NOT a shatter/melt grid (user ground-truth;
the RE'd FUN_0045281c shatter is a different transition — corrected).
- NEXT (queued): the shop customer selling loop — user recorded the tutorial
trace runs/recordings/rec-20260617-051426.raw.jsonl.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: docs/findings/confirmed-parity-ledger.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -94,8 +94,8 @@
94
94
| **Skip-prompt `savewindow.tga` banner + text ~−1 LSB — RESOLVED 2026-06-05 (root-caused, fixed, user-confirmed box 1:1)** | The ~−1 LSB on the gold (`[237,200,52]` vs retail `[238,201,52]`) and the text edges was **NOT** TGA/colour precision — it was a **wrong COLOROP**. `FUN_0043537e` draws the banner+text under `D3DTOP_ADDSIGNED` (=8, ≈ pass-through at the 0x7f7f7f vertex colour); the port used `D3DTOP_MODULATE2X` (=5, `texel·0.996` = 1 LSB darker) — `8` had been mis-labelled "MODULATE2X" (which is enum 5). The banner verts/UVs/diffuse were **bit-identical** port↔retail (decoded from `--d3d-trace-verts`), ruling out scale/phase/TGA. The text halo was a second facet: retail keeps ADDSIGNED through the prompt+Yes/No (resets to MODULATE only at the end) and draws them at 0x7f7f7f; the port reset early and drew full-white under MODULATE. Fix (`src/choice_box.c`): ADDSIGNED for the banner, hold it through the text @0x7f7f7f, reset after → box+text+cursor region **0 px** vs retail (both caps). engine-quirks §104. | user-flagged 2026-06-05; box+text confirmed 1:1 by user 2026-06-05 after fix. Residual full-frame delta = prologue bg §85 phase only. |
95
95
| **LOAD-GAME picker: rotated clock day-hand ±1 LSB** | The picker's settled-frame residual (947 px ≤4 LSB, max Δ8, bbox x[138-224] y[171-230]) is **entirely the rotated gold clock needle + its hub** — the clock face, ring, pie segments, parchment cards, and 0.8 stat text are all **0 px**. **This is NOT the "scaling-filter" class.** The day-hand quad's *vertices/UVs/diffuse are bit-identical* port↔retail (decoded from `--d3d-trace-verts`, frame 120: both v0(149.175,152.23)…v3(212.256,247.77), u 0.4541→0.4834, diffuse 0xff7f7f7f), so the port's rotation math is exact. The delta is the **rasterizer bilinear-sampling a ROTATED quad**: every pixel hits a diagonal sub-texel position whose 4-texel blend weight differs by ≤1 LSB between the port's GPU and the retail (`cutestation.soy`) GPU — axis-aligned scaled quads sample grid-aligned and agree (→0 px), only the diagonal one disagrees. Not a port logic fix (POINT would diverge from retail's bilinear hand). **Also found:** retail draws **3** rotated quads on this frame, the port **2** — the port is missing one *off-screen* (x≈−875, alpha 0xc8) hand instance, likely a paged-off slot's needle (off-screen → no pixel effect, but a genuine structural gap). | user-confirmed "it's the clock hand" 2026-06-05. Evidence: `picker-residual-crop` feed push + `render_diff`-decoded strip verts. Distinct mechanism from the box-edge-halo row above (that's axis-aligned, suspected TGA/colour-precision; this is rotated-bilinear). |
96
96
|~~**iv1_2 opening: Recette look-up + blink**~~ — **RESOLVED → 1:1, 2026-06-17 (user-confirmed)**| the look-up + conversation-pose blink IS ported (the CONV_POSE driver) — `CONV_POSE_BLINK` fires ×5 in the iv1_2 v3 window and pairs port↔retail in the join, and the user confirmed the `intro-iv2-v3 win-0-300` window "bit exact and synchronized" (the only residual = the book-arrow next-line anim). The 2026-06-02 flag predated the v3 verification (the retail side couldn't be captured at iv1_2 until the occurrence-aware arm `869375f`). See the CONFIRMED-1:1 "iv1_2 prologue cutscene" row. | resolved 2026-06-17; the v3 join (279/299, paired frames pixel-1:1) was unblocked by the occurrence-aware retail arm. |
97
-
|**iv1_2 opening: Tear angry pose + radial-lines**| same window — retail plays Tear an angry pose with a billboard radial-lines (manga anger-marks) effect; port absent. | user-flagged 2026-06-02. Same `intro-iv2-gap` zoom frames both Recette + Tear. opening-prologue.md #4(b). |
98
-
|**Dialogue text fade-to-transparent on dismiss**| when a line is dismissed retail fades the glyph text out as the box closes; the port pops it off. | user-flagged 2026-06-02. `intro-iv2-gap` captures the dismiss window. Box-close alpha on the text in `FUN_0046c9a2`. opening-prologue.md #5. |
97
+
| ~~**iv1_2 opening: Tear angry pose + radial-lines**~~ — **RESOLVED → NOT A RENDER GAP, 2026-06-17 (user-confirmed)** | The 2026-06-02 flag (a billboard radial-lines / manga anger-marks effect near Tear) does not hold up under v3. **(a) Render verdict:** `orv3_draws --material` over the WHOLE iv1_2 opening (`intro-iv2-v3`, every probed offset) shows the only render-program divergence is the **inert `b494` HOUSE draw (80 tris, ALPHATEST-α0 + ZWRITE=0 ⇒ 0 px) + benign HOUSE-3D batching** — there is **NO retail-only effect texture** (an anger-marks billboard would appear as one; it does not). **(b) User ground-truth:** the user, playing retail, reports there is **no melt/anger effect between the two intro dialogues — "it just fades to black and back".** So this was a pre-v3 / mis-armed-capture artifact (the conv-pose blink + RNG-phase wing-sparkle, both resolved under pinning), not a missing render. | resolved 2026-06-17 — material verdict + user. The `--material` flag (`164eae5`) is what surfaced this past the 88-vs-115 batching swamp. |
98
+
|~~**Dialogue text fade-to-transparent on dismiss**~~ — **RESOLVED → already ported, 2026-06-17 (user-confirmed)**| the box-close glyph fade IS ported — user (playing retail + port): "the glyph gradient to transparent is already ported". The 2026-06-02 flag is stale. | resolved 2026-06-17. |
99
99
|**Recette idle animation phase**| idle pose **slightly off** at `house-movement`**cap_00 (first frame, idle free-roam)** — while her **walking is confirmed 1:1** (cap_01/02). **Narrowed 2026-06-04:**`phase_probe house-idle --window 120,80` shows the player idle anim cycle (`p.aframe/counter/anim/oct`) **machine-verified bit-exact** vs retail once `{phasepin}` normalizes the origin (now covers actor 0) → the idle anim *law* is 1:1; the visible cap_00 diff is the load-dependent phase ORIGIN (harness-normalized, not re-seeded per the shipped game), **plus** a separate idle-only RNG over-consumption (see Deferred) that can shift idle sparkle/effect phase. | user, 2026-06-01. NOT position (pure-black once moving) and NOT an anim-counter logic bug. Chase the visible residual via the idle-RNG gate + a phasepin'd idle pixel-diff; do NOT hand-wave as jitter. ([[project_next_char_controller]]) |
100
100
| ~~**Tear (companion) appearance**~~ — **RESOLVED → 1:1, 2026-06-05 (user-confirmed "yes that is 1:1")** | The "persistent" Tear free-roam residual (drift bbox x[522-567] y[370-441] at `house-idle-npc-drift` cap_00, ~2000px@mean0.95, present even +2 post-`{phasepin}`) was **entirely RNG-phase noise**, NOT position, NOT anim-phase, NOT a render bug. The `house-idle-npc-drift` scenario trace carries `{phasepin}` but **no `{rngseed}`**, so the wing-sparkle particles (type-0x1f, RNG-jittered) spawned at a different LCG origin port↔retail and the whole Tear region lit up. **`phase_probe house-idle-npc-drift` (auto-adds `{rngseed}`) verdict: ✅ PHASE-CLEAN** — companion `cframe/ccnt/coct/canim` AND raw LCG (`rng`/`rngcalls`) all **bit-exact** vs retail at every frame +2…+258. Pinned pixel-diff: Tear crop cap_00 14.59%/mean0.77 → **0.55%/mean0.00**; cap_05 (+258, furthest from pin) **0.05%**; **FULL frame 0.04%/mean0.00 = bit-1:1** (diff panel black, feed-verified). So the companion sprite anim, wing-glow, AND wing-sparkle particles are all 1:1 given phase+RNG pinning. Supersedes the earlier "spring-follow-position and/or wing-flap+particle phase divergence" — the spring-follow position is also 1:1 (the body silhouette already overlapped pre-RNG-pin). | resolved 2026-06-05; method = `phase_probe` (one-command phase+RNG verdict). NB §73 "wing-sparkle renderer unported / invisible today" is **stale** — the particles render and match. ([[project_next_char_controller]]) |
101
101
|~~**Recette RENDERED walk cell**~~ — **RESOLVED → 1:1, 2026-06-04**| was flagged as a "different walk cell" on ~18% of frames; root cause was a **capture-tooling off-by-one** (Frida watch read one sim-tick before the render, mislabeling screenshots), NOT an engine divergence. Fixed (715b74c) + user-confirmed 1:1. See the CONFIRMED-1:1 row above + `scene1-recette-walk-cell.md`. | resolved 2026-06-04 |
0 commit comments