Skip to content

nx-ci-docs (2026-10-26): CI workflow, symptom index, reference, title notes, GPU regression tests

Branch claude/nx-ci-docs-2026-10-26-nx. From the nxnative review items T1, T2, T3, T6. Only new files plus an append to THIRD_PARTY_NOTICES.md.

What changed

  • T2 .github/workflows/tests.yml (release.yml, pages.yml untouched): jobs docs (ubuntu), rust (cargo test --workspace --locked), native (input, audio, frontend tests; gfx lib+adapter+all tests built; gfx Metal run non-blocking; runtime test test-services), studio (swift test), ios-smoke (libopus + tools/build_ios.sh for the Simulator, non-blocking, see below).
  • T1 docs/symptoms.md (about 30 rows: Symptom, Cause, Fix, Found on), docs/reference.md (per-subsystem code, tests, debug env vars), tools/check_docs.py (links, anchors, 4-cell symptom rows, title notes exist; runs in the docs job).
  • T6 docs/titles/<id>.md for LAS, SMO, ACNH, MK8D plus docs/titles/README.md (in-place build recipe).
  • T3 gfx/tests/nvn_harness.h and t_clear_tex, t_clear_ds, t_depth16, t_feedback, t_copy_alias, t_present_snap, t_pso_archive (all picked up by make -C gfx test). KNOWN(cond, ...) skips with a message (fails under T_STRICT=1) for behaviour that is open.

Findings from the new tests (open bugs, all in ac-render's files, not fixed here)

  • do_clear_tex (mtl_replay.m) ignores the region and the channel mask ((void)mask): a sub-rectangle clear clears the whole texture.
  • Clears are folded into the next pass; a copy/readback of that target before any draw does not flush them, so a clear after a readback reads stale (t_clear_ds, t_feedback).
  • Depth clear with depth mask 0 passes; Depth16 clears agree between both paths; aliasing textures on one pool range works; presented-frame snapshot works.

Verified (fresh copy of the tree, scripted)

cargo test --workspace --locked, make input/audio/frontend test, gfx lib adapter tests and make -C gfx test (ALL TESTS PASSED, incl. 7 new, 4 KNOWN skips), runtime test test-services, swift test --package-path studio, check_docs.py: all rc 0. iOS smoke: link FAILS on main (undefined _a32_*: build_ios.sh lacks runtime/src/a32, fixed on claude/ios-sim-2026-10-25-titles), so that job is non-blocking. Not verified: the workflow on a real GitHub runner (yaml parses; macos-26 runners may lack a usable Metal device: that is why the gfx run is non-blocking).