WIP: fix(probe): ignore packed NaNs without hiding finite channel jumps #832

Draft
NitnekLeBorgne wants to merge 1 commit from NitnekLeBorgne/Longshot-contributions:fix/probe-packed-nan-20261115 into main
First-time contributor

Type: fix · Risk: low · Tested on: Linux, authored Python fixtures; GPU irrelevant · Needs: full required suite; Windows manual replay

WIP; private prepared commit 9aaf62c332, base a00c485c71. Observed main aa95d35f3d is not the base: equal relevant blobs/modes is not a rebase or refreshed-main qualification. No public branch claimed.

Why

Packed RGB NaNs can cause false brightness jumps in the offline probe. Finite channels must remain observable. Retained search: 193 open issues, no matching specific issue; no closing claim.

How to reproduce

Seen on: Linux, synthetic packed RGB; GPU irrelevant.
Settings and switches: Authored integer bit patterns, no game settings.
Steps: Replay the extended tests/test_probe_half_nan.py on pinned-base and candidate scripts/probe.py.
Expected: Ignore NaN-only changes; detect finite green jumps with red NaN.
Actual: Base produces false NaN jumps; four methods affected.

What changed

Decode packed exponent 31 with nonzero mantissa as math.nan. Per-channel comparison skips only NaN components, without hiding finite jumps.

  • scripts/probe.py, uf: two added lines; retain the historical 1e30 infinity sentinel, not a general infinity fix.
  • tests/test_probe_half_nan.py: five new methods plus three unchanged methods; 157 NaN payloads (63 red, 63 green, 31 blue), 15 controls and mixed-channel behavior. Authored integer bits, not float NaN conversions.

Measurements

Verdict: Retained regression proof passes on candidate; no new execution or performance benchmark.
Hardware: Author's Linux, Python standard library; GPU/driver irrelevant; CPU/RAM not recorded.
Scene: Authored packed RGB fixtures, no game capture.
Method: Original final baseline/candidate receipts; methods, subtest events and CLI calls counted separately; no timing/median.
How to reproduce: python -I -B tests/test_probe_half_nan.py against each source export.

Check Before: main @ a00c485c71 After: this PR @ 9aaf62c332
Methods 8: 4 passing, 4 affected 8 passing
Failure/subtest events 158 0
Candidate CLI invocations Not claimed 179: 174 exit 0, 5 expected exit 1

179 invocations are not 179 tests or successful exits. Initial RED preceded the edit; final replay retains full fixture text. Original evidence: roles/probe-packed-nan-author/evidence/final-baseline-* and final-green-*. No product test or review replay here.

Flags and settings

None.

Testing

Tested: Retained author's Linux CLI regressions, independently reviewed without replay. All 157 NaN payloads and 15 controls pass; finite green jumps remain detectable with red NaN. Existing half-NaN and malformed-input checks remain.
Not tested: Full required suite, newer-main context, Windows, GPU execution or game captures. Offline Python diagnostic, not rendering; no GPU/game gate invented.
Must be tested:

  • Linux, by hand: run python -I -B tests/run_all.py, expecting required checks to pass or baseline failures/skips named before merge.
  • Windows, by hand, GPU irrelevant: run python -I -B tests/test_probe_half_nan.py from a UTF-8 path, expecting all eight methods to pass, malformed-input rejection and finite-channel detection.

Risks

What could break: Interpretation of packed NaN diagnostics; finite channels and infinity sentinel preserved.
Turning it off: Revert the commit; no new switch.
Compatibility: No save/options/cache/vk ABI or game-output changes. Only offline packed-NaN interpretation changes; handwritten GPL-3.0-or-later fixtures, no copied or game-derived material.

Checklist

Everyone

  • One topic.
  • The title is a Conventional Commit (type(scope): description) of the status line's type.
  • Why gives the reason plainly and links the issues that fit (the tracker searched).
  • Measurements has a verdict, or one line saying why there is nothing to measure.
  • Testing names what was tested, what wasn't, and what must still be tested, where and how.
  • Rebased on current main.
  • python -I -B tests/run_all.py passes (any failure that also fails on main is named).
  • No game files, dumps, build output or generated files.
  • third_party/ untouched (a new folder with a PROVENANCE.md instead).
  • The license is OK: GPL-3.0-or-later, nothing incompatible and nothing decompiled.

When it applies

  • AI assistance recorded with Assisted-by: / Co-Authored-By: trailers.
  • A game-free test added for the fix, failing on main and passing here.
  • A check under tests/ that reads changed source updated in this PR, not weakened.
**Type:** fix · **Risk:** low · **Tested on:** Linux, authored Python fixtures; GPU irrelevant · **Needs:** full required suite; Windows manual replay WIP; private prepared commit 9aaf62c3321e95f3f3ce234fd1890bf4d2651d67, base a00c485c71f50d3e698985d91a3f72edfb1ea020. Observed main aa95d35f3d021b27328b6d68109666a46c340aee is not the base: equal relevant blobs/modes is not a rebase or refreshed-main qualification. No public branch claimed. ## Why Packed RGB NaNs can cause false brightness jumps in the offline probe. Finite channels must remain observable. Retained search: 193 open issues, no matching specific issue; no closing claim. ## How to reproduce **Seen on:** Linux, synthetic packed RGB; GPU irrelevant. **Settings and switches:** Authored integer bit patterns, no game settings. **Steps:** Replay the extended `tests/test_probe_half_nan.py` on pinned-base and candidate `scripts/probe.py`. **Expected:** Ignore NaN-only changes; detect finite green jumps with red NaN. **Actual:** Base produces false NaN jumps; four methods affected. ## What changed Decode packed exponent 31 with nonzero mantissa as `math.nan`. Per-channel comparison skips only NaN components, without hiding finite jumps. - `scripts/probe.py`, `uf`: two added lines; retain the historical `1e30` infinity sentinel, not a general infinity fix. - `tests/test_probe_half_nan.py`: five new methods plus three unchanged methods; 157 NaN payloads (63 red, 63 green, 31 blue), 15 controls and mixed-channel behavior. Authored integer bits, not float NaN conversions. ## Measurements **Verdict:** Retained regression proof passes on candidate; no new execution or performance benchmark. Hardware: Author's Linux, Python standard library; GPU/driver irrelevant; CPU/RAM not recorded. Scene: Authored packed RGB fixtures, no game capture. Method: Original final baseline/candidate receipts; methods, subtest events and CLI calls counted separately; no timing/median. How to reproduce: `python -I -B tests/test_probe_half_nan.py` against each source export. | Check | Before: main @ a00c485c71f50d3e698985d91a3f72edfb1ea020 | After: this PR @ 9aaf62c3321e95f3f3ce234fd1890bf4d2651d67 | |---|---|---| | Methods | 8: 4 passing, 4 affected | 8 passing | | Failure/subtest events | 158 | 0 | | Candidate CLI invocations | Not claimed | 179: 174 exit 0, 5 expected exit 1 | 179 invocations are not 179 tests or successful exits. Initial RED preceded the edit; final replay retains full fixture text. Original evidence: `roles/probe-packed-nan-author/evidence/final-baseline-*` and `final-green-*`. No product test or review replay here. ### Flags and settings None. ## Testing **Tested:** Retained author's Linux CLI regressions, independently reviewed without replay. All 157 NaN payloads and 15 controls pass; finite green jumps remain detectable with red NaN. Existing half-NaN and malformed-input checks remain. **Not tested:** Full required suite, newer-main context, Windows, GPU execution or game captures. Offline Python diagnostic, not rendering; no GPU/game gate invented. **Must be tested:** - Linux, by hand: run `python -I -B tests/run_all.py`, expecting required checks to pass or baseline failures/skips named before merge. - Windows, by hand, GPU irrelevant: run `python -I -B tests/test_probe_half_nan.py` from a UTF-8 path, expecting all eight methods to pass, malformed-input rejection and finite-channel detection. ## Risks **What could break:** Interpretation of packed NaN diagnostics; finite channels and infinity sentinel preserved. **Turning it off:** Revert the commit; no new switch. **Compatibility:** No save/options/cache/vk ABI or game-output changes. Only offline packed-NaN interpretation changes; handwritten GPL-3.0-or-later fixtures, no copied or game-derived material. ## Checklist ### Everyone - [x] One topic. - [x] The title is a Conventional Commit (`type(scope): description`) of the status line's type. - [x] Why gives the reason plainly and links the issues that fit (the tracker searched). - [x] Measurements has a verdict, or one line saying why there is nothing to measure. - [x] Testing names what was tested, what wasn't, and what must still be tested, where and how. - [ ] Rebased on current `main`. - [ ] `python -I -B tests/run_all.py` passes (any failure that also fails on `main` is named). - [x] No game files, dumps, build output or generated files. - [x] `third_party/` untouched (a new folder with a `PROVENANCE.md` instead). - [x] The license is OK: GPL-3.0-or-later, nothing incompatible and nothing decompiled. ### When it applies - [x] AI assistance recorded with `Assisted-by:` / `Co-Authored-By:` trailers. - [x] A game-free test added for the fix, failing on `main` and passing here. - [x] A check under `tests/` that reads changed source updated in this PR, not weakened.
fix(probe): ignore packed NaNs without hiding finite channel jumps
Some checks failed
PR description / Description follows the template (pull_request_target) Successful in 6s
CI / Conventional Commit title (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been cancelled
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been cancelled
CI / Workflow lint (actionlint) (pull_request) Has been cancelled
Guide screenshots / Guide images and local UI source review (pull_request) Has been cancelled
Third-party parts / As their notes say (pull_request) Has been cancelled
Third-party parts / The same as upstream (pull_request) Has been cancelled
9aaf62c332
Decode B10G11R11 exponent31/nonzero mantissa as NaN for per-channel comparison.
Retain the existing infinity sentinel and finite decoding behavior.
Cover every packed NaN payload with authored CLI fixtures and finite controls.

Assisted-by: Hermes Agent (OpenAI GPT-6.1-sol)
Co-Authored-By: Claudia (OpenAI GPT-6.1-sol)
HumanBean force-pushed fix/probe-packed-nan-20261115 from 9aaf62c332
Some checks failed
PR description / Description follows the template (pull_request_target) Successful in 6s
CI / Conventional Commit title (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been cancelled
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been cancelled
CI / Workflow lint (actionlint) (pull_request) Has been cancelled
Guide screenshots / Guide images and local UI source review (pull_request) Has been cancelled
Third-party parts / As their notes say (pull_request) Has been cancelled
Third-party parts / The same as upstream (pull_request) Has been cancelled
to dbe36235af
Some checks failed
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been skipped
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been skipped
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been skipped
Third-party parts / The same as upstream (pull_request) Has been skipped
Website / Website on Cloudflare (pull_request) Has been skipped
PR description / Description follows the template (pull_request_target) Successful in 4s
CI / Conventional Commit title (pull_request) Successful in 3s
CI / Workflow lint (actionlint) (pull_request) Successful in 4s
Guide screenshots / Guide images and local UI source review (pull_request) Failing after 5s
Third-party parts / As their notes say (pull_request) Successful in 7s
2026-11-15 18:43:05 +00:00
Compare
Owner

Rebased onto main @ bbe6fdf: no conflicts. No tests were run here; the test boxes stay yours.

Rebased onto `main` @ bbe6fdf: no conflicts. No tests were run here; the test boxes stay yours.
Some checks failed
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been skipped
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been skipped
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been skipped
Third-party parts / The same as upstream (pull_request) Has been skipped
Website / Website on Cloudflare (pull_request) Has been skipped
PR description / Description follows the template (pull_request_target) Successful in 4s
CI / Conventional Commit title (pull_request) Successful in 3s
CI / Workflow lint (actionlint) (pull_request) Successful in 4s
Guide screenshots / Guide images and local UI source review (pull_request) Failing after 5s
Third-party parts / As their notes say (pull_request) Successful in 7s
This pull request is marked as a work in progress.
This branch is out-of-date with the base branch
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u 'fix/probe-packed-nan-20261115:NitnekLeBorgne-fix/probe-packed-nan-20261115'
git switch 'NitnekLeBorgne-fix/probe-packed-nan-20261115'
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
MagicBeanDev/Longshot!832
No description provided.