port: apply the measured positional weights, keyed by byte size
ADV's three chunks map onto the Decoder's contexts exactly, each a declared byte_size plus the 60-byte RIFF header. authored/audio.json gains voice.stream_weights keyed by SIZE, and the exporter weights only when every kept stream matches, falling back to the divisor otherwise. The key is the check: two weeks ago these same sizes did not fit the region the resolver returned, which is how the 238-packet late start was found. Applied positionally the weights would have gone onto the wrong streams silently. S00A matches nothing and keeps the divisor. ADV mixes at 0.4142/0.2929/0.2929, -2.87. Unlooked-for confirmation: the filter folds chunks 0 and 2 from two live channels and chunk 1 from one, found independently by live_channels, matching their claim that ctx1 is the only stream with a silent channel. Also files an UNEXPLAINED regression: verify-menu-audio's dead-press check now reports DIFFER across three runs, diverging at 0.085 s with different durations. Not diagnosed, not the voice change, and left failing rather than silenced. The check's premise is cross-run bit-determinism, which is what made it strong and also what makes it brittle. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N7FiFFFwbvG2uxdcEh8HyF
This commit is contained in:
@@ -674,3 +674,25 @@ What would settle it: **any capture of a loading screen with the ring mid-expans
|
||||
The Decoder records these screens as unreachable from the title path, so this may
|
||||
never become answerable, and that is an acceptable outcome — the entry now says
|
||||
what is being withheld rather than implying the question is empty.
|
||||
|
||||
---
|
||||
|
||||
## `verify-menu-audio`'s dead-press check fails, cause unidentified
|
||||
|
||||
*Derived from HANDOFF `9ca1eb5`. Raised 2026-08-30 by the port. **Mine, not
|
||||
anybody else's** — filed here so it is not lost, not because it needs an answer
|
||||
from the Decoder.*
|
||||
|
||||
The check asserts that five presses bound to nothing (`left`, a measured no-op)
|
||||
produce a Master bus bit-identical to five waits. It now reports DIFFER across
|
||||
three consecutive runs: divergence at 0.085 s, 92 % of samples differing, and
|
||||
recording durations of 1.300 s against 1.207 s where they were previously equal.
|
||||
|
||||
🔴 Not diagnosed. Candidates not separated: `formats-pin-2026-08-30`, the
|
||||
plate-pulse draw path, the static-overlay clock. It is **not** the voice export
|
||||
change — neither control run plays a voice.
|
||||
|
||||
⚠️ The check's premise is **cross-run bit-determinism**, which is what made it a
|
||||
strong assertion with no threshold to tune, and also what makes it brittle:
|
||||
nothing in it verifies that startup is still deterministic. Left failing rather
|
||||
than silenced.
|
||||
|
||||
@@ -9,7 +9,7 @@ dies, which is what this file is for.
|
||||
|
||||
<!-- INDEX: generated by tools/port/index-decisions -- do not hand-edit -->
|
||||
|
||||
130 sections. Search this before re-deriving anything.
|
||||
132 sections. Search this before re-deriving anything.
|
||||
|
||||
* [P0 — the exporter, 2026-08-28](#p0--the-exporter-2026-08-28)
|
||||
* [P1 — Godot draws the screen, 2026-08-28](#p1--godot-draws-the-screen-2026-08-28)
|
||||
@@ -141,6 +141,8 @@ dies, which is what this file is for.
|
||||
* [The resolver starts late, and my "duplicate tail" was a real stream all along](#the-resolver-starts-late-and-my-duplicate-tail-was-a-real-stream-all-along)
|
||||
* [The export knew the voice was incomplete; the runtime did not say so](#the-export-knew-the-voice-was-incomplete-the-runtime-did-not-say-so)
|
||||
* [The voice export is complete — new pin, and the cause was a "within one bank" cap](#the-voice-export-is-complete--new-pin-and-the-cause-was-a-within-one-bank-cap)
|
||||
* [The positional weights are applied — keyed by byte size, so the key is a check](#the-positional-weights-are-applied--keyed-by-byte-size-so-the-key-is-a-check)
|
||||
* [🔴 Unexplained: `verify-menu-audio`'s dead-press check has started failing](#unexplained-verify-menu-audios-dead-press-check-has-started-failing)
|
||||
|
||||
<!-- /INDEX -->
|
||||
## P0 — the exporter, 2026-08-28
|
||||
@@ -7595,3 +7597,62 @@ crate — but it is a different asset than the one the fix was derived on, and t
|
||||
outcome was predicted before it was observed. Recorded as that and nothing more.
|
||||
|
||||
Oracle rows unmoved; MODDING rules pass.
|
||||
|
||||
## The positional weights are applied — keyed by byte size, so the key is a check
|
||||
|
||||
With the span fixed, `ADV`'s three chunks map onto the Decoder's contexts
|
||||
**exactly** — each is a declared `byte_size` plus the 60-byte RIFF header
|
||||
`to_xma_riffs` prepends:
|
||||
|
||||
| chunk | bytes | − 60 | context | position | weight |
|
||||
|---|---|---|---|---|---|
|
||||
| 0 | 1 294 396 | 1 294 336 | ctx0 | FL/FR | **0.4142** |
|
||||
| 1 | 1 118 268 | 1 118 208 | ctx1 | FC, LFE silent | **0.2929** |
|
||||
| 2 | 1 171 516 | 1 171 456 | ctx2 | BL/BR | **0.2929** |
|
||||
|
||||
`authored/audio.json` gains `voice.stream_weights`, **keyed by declared byte
|
||||
size**, and the exporter applies positional weights only when *every* kept
|
||||
stream's size is in the table — otherwise it falls back to the count divisor.
|
||||
|
||||
🔴 **The key is the check.** Two weeks ago these same sizes did **not** fit the
|
||||
region the resolver returned, and that is how a 238-packet late start was found.
|
||||
Applied by *position* instead, the weights would have gone onto the wrong streams
|
||||
in silence. `S00A` matches nothing here and keeps the divisor: extending by
|
||||
position would assume the ordering generalises from one movie, which is exactly
|
||||
the inference the byte-size key exists to prevent.
|
||||
|
||||
`ADV` now mixes at 0.4142 / 0.2929 / 0.2929 and lands at **−2.87 dBFS**.
|
||||
|
||||
### ✅ An unlooked-for structural confirmation
|
||||
|
||||
The generated filter folds chunks 0 and 2 from **two** live channels
|
||||
(`0.5*c0+0.5*c1`) and chunk 1 from **one** (`c0`). `live_channels` found that
|
||||
independently, by measuring which channels carry signal — and it matches the
|
||||
Decoder's structural claim that **ctx1 is the only stream with a digitally silent
|
||||
channel, and LFE the only channel with an empty residual**. Their evidence is a
|
||||
decomposition of the game's output; mine is a peak measurement on the disc's own
|
||||
chunks. Different sides, same structure.
|
||||
|
||||
## 🔴 Unexplained: `verify-menu-audio`'s dead-press check has started failing
|
||||
|
||||
Its first assertion — five presses bound to nothing produce a Master bus
|
||||
**bit-identical** to five waits — now reports DIFFER, reproducibly across three
|
||||
runs. The two recordings diverge at **0.085 s**, differ on 92 % of samples, and
|
||||
have different durations (1.300 s against 1.207 s) where they were previously
|
||||
identical.
|
||||
|
||||
⚠️ **I have not identified the cause and am not guessing at one.** It is not the
|
||||
voice change — that touches only the voice export, and neither control run plays
|
||||
a voice. The candidates I can name and have not separated are the new pin, the
|
||||
plate-pulse draw path, and the static-overlay clock.
|
||||
|
||||
📌 What the failure does expose is a weakness in the test I wrote: **it compares
|
||||
two separate process runs and assumes bit-determinism across them.** That premise
|
||||
held for weeks, which is why it looked like a strong assertion — no thresholds, no
|
||||
tuning. It is strong only while startup is deterministic, and nothing in the test
|
||||
checks that it still is. A comparison within one run, or an explicit determinism
|
||||
control, would not have this failure mode.
|
||||
|
||||
Filed rather than patched: silencing it would remove the only check that a dead
|
||||
press stays silent, and I would rather have a failing check than a passing one
|
||||
whose premise I have stopped believing.
|
||||
|
||||
Reference in New Issue
Block a user