Skip to content

fix(ai): write the FR regressor registry as strict JSON - #2257

Merged
lusoris merged 3 commits into
masterfrom
fix/ai-training-registry-nonfinite
Oct 6, 2026
Merged

lusoris merged 3 commits into
masterfrom
fix/ai-training-registry-nonfinite

Conversation

@lusoris

@lusoris lusoris commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

Summary

Closes T-BUG048-PERF-RESTORATIONS-2026-09-26 (all four restorations were on master, the row stayed open) and fixes the registry half of T-BUG048-AI-SCRIPT-HELPERS-2026-09-26.

Reproducer

python3 -m pytest -q ai/tests/test_training_scripts_registry_nonfinite.py   # 16 passed; 12 fail on the old scripts
bash scripts/ci/check-state-md-rows.sh docs/state.md

Deliverables (ADR-0108)

  • Research digest — no digest needed: trivial.
  • Decision matrix — no alternatives: only-one-way fix (the helper exists for it).
  • AGENTS.md invariant note — no rebase-sensitive invariants.
  • Reproducer / smoke-test command — above.
  • CHANGELOG fragment — changelog.d/fixed/ai-training-registry-strict-json.md.
  • Rebase note — no rebase impact: four one-line call sites in fork-only training scripts.
  • Docs — no user-discoverable surface: training scripts write the same bytes for finite values.
  • State — one row closed, one updated in docs/state.md.

…acOS LTO keeps libc's close() (#2234)

* fix(feature): name the CPU extractors' close callbacks close_fex so macOS LTO keeps libc's close()

test_adm_coverage crashed with SIGSEGV on every macOS leg since #2208 gave
a case a stderr capture that calls close(). Under lldb on the hosted runner
the faulting function is an extractor's static close(VmafFeatureExtractor *)
called with the file descriptor; the debug build without LTO passes.

macOS's <unistd.h> declares close() with an assembler label, so in a
full-LTO link (the release default) the IR linker keeps the declaration and
a static close of another module apart without renaming the static, and both
emit as _close: every C-library close() in the merged module branches into
an extractor. The fdopen() failure paths of libvmaf.c, cambi.c and svm.cpp
make that call too. glibc has no label, so Linux never showed it.

The 17 callbacks are close_fex, the GPU twins' naming; nothing else changes.
test_libc_named_internal_functions refuses a static C function named after a
C library or POSIX function and reports the 17 on master.

* test(ci): stub node in test-dedupe-gate.sh to isolate governance sequence

test-dedupe-gate.sh verifies the standardsctl governance sequence and that dedupe scan failure is propagated by make verify-all. When verify-all gained the praetor documentation gates (docs-lint, docs-figures), make started executing node to lint all markdown files, causing timeouts and failures under host load. Stub node in the temporary directory alongside standardsctl so the unit contract test evaluates only the dedupe sequence.
* chore(tidy): make cert-err33-c a hard stop in .clang-tidy

ADR-0694 asked for cert-err33-c in WarningsAsErrors once its violations were
swept. The ADR-1142 cleanups did that sweep: a full run of the cpu, cuda, hip
and sycl lanes in the dev container (clang-tidy 22.1.8) reports no cert-err33-c
diagnostic, and the last arm64 report has none. The check is promoted now, so
a new unchecked fclose() or fputs() fails Tidy Changed instead of joining a
baseline. A planted fclose(f); gives exit 0 as a warning and exit 1 with the
promotion.

Closes T-CERT-ERR33-SWEEP.
* fix(ai): write the FR regressor registry as strict JSON

The four train_fr_regressor scripts wrote model/tiny/registry.json with a raw
json.dumps, which prints NaN and Infinity for a non-finite value and leaves a
file no strict JSON reader accepts. vmaf_train.registry.write_registry_json()
existed for this and had no production caller; the scripts use it now. A
registry of finite values is byte-identical to before.

Also moves T-BUG048-PERF-RESTORATIONS-2026-09-26 to Recently closed: all four
restorations (#1678, #1683, #1687, #1688) are on master, and the row stayed
open.
@github-actions github-actions Bot added the type:bug Something isn't working label Oct 6, 2026
@lusoris
lusoris force-pushed the fix/ai-training-registry-nonfinite branch from 0cb1451 to 0f0d8cc Compare October 6, 2026 11:23
@lusoris
lusoris merged commit 0f0d8cc into master Oct 6, 2026
5 of 46 checks passed
@lusoris
lusoris deleted the fix/ai-training-registry-nonfinite branch October 6, 2026 11:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type:bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant