Repository navigation
tests: register base_modes_test, and say why anchor_rerun is not a ctest row (#1800) - #1806
Conversation
…est row (engine#1800) Of the eight tests/*.sh #1800 lists as referenced by nothing, the seven gpu_hold_* scripts are registered: they live in cmake/tests-gpu-hold.cmake (moved there by #1699), which the issue's grep of CMakeLists.txt did not read. Two really had no runner on main: * tests/base_modes_test.sh pins the 1bit OS base layer's mode normaliser (scripts/pack-elf.sh, engine#1474): it only NARROWS modes (a 0600 secret stays 0600) and the keep-list keeps /tmp at 1777. Registered as `base_modes`, next to release_check_selftest and in the same shape: no build, no device, no target. * tests/anchor_rerun.sh is an operator measurement, not a test: real GGUFs, an output directory, a 30-minute health window per model, PASS/FAIL printed per model and exit 0 always. Registered, it would skip forever or go green over a FAIL line, so its header now says that instead. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
VERDICT: READY at Ran the row exactly as the registration invokes it, on current main: So the argument shape is right ( The registration is the correct shape for a test with no target. It names no The One thing worth adding while it is in hand, since the row now exists: the property this test pins is the one the issue was about — the normaliser only narrows modes (a |
|
VERDICT: APPROVE at Ran it from a full tree: Two things make this worth the registration rather than a shrug:
No conditions. The comment says why rather than what, which is the part that stops someone "tidying up" by registering the second one later. |
|
VERDICT: READY at d2cbfc7 Two registrations and, more usefully, two reasons written down for opposite decisions:
The distinction is the one worth propagating: a test asserts something that can fail; a measurement prints something a human reads. Head under review: d2cbfc7 |
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT: READY at d2cbfc7c3
Small PR, and I checked all five things that would make it wrong rather than right.
1. The central claim reproduces. Grepping every tests/*.sh basename across CMakeLists.txt, cmake/, .github/, scripts/, tests/ and tools/ on this head leaves exactly one unreferenced script — anchor_rerun.sh — which is the one you deliberately left. The issue's count of eight was an artifact of reading only CMakeLists.txt, and the seven gpu_hold_* really are registered in cmake/tests-gpu-hold.cmake (where #1699/#1742 put them). Good to see the re-measurement rather than the inherited number.
2. The registered test runs, with real arms. bash tests/base_modes_test.sh "$(pwd)" → base_modes: ok, including "a second run changes nothing" (idempotence on a second pass over 9 kept paths) and "the reporter is clean after the fix". Not a smoke test.
3. The registration is the right shape. add_test(NAME base_modes COMMAND bash … base_modes_test.sh ${CMAKE_SOURCE_DIR}) — script-based, no executable target, so no #1595 "target CI never builds" trap; and ${CMAKE_SOURCE_DIR} is load-bearing, because the script refuses to run without it (usage: base_modes_test.sh <repo root>).
4. It is actually registered in CI. The nearest enclosing if(/endif() are ONEBIT_ORT at :177–182, long closed before :215 — so this is not one of the guard-disabled rows, which would have made the whole PR a no-op.
5. It does not disturb the ratchet. tools/ci/ci_targets_check.py --check on this head: 9 target(s) … (baseline 9), and none new, rc=0.
And the exclusion is reasoned, not waved away. The anchor_rerun.sh comment gives the rule: it is an operator measurement that needs real GGUFs, allows 30 minutes per model, prints PASS/FAIL/SKIP and always exits 0 — so as a ctest row it would "either skip forever or report green over a FAIL line". That is the correct test: a ctest row has to be able to fail. Worth keeping as the words a future lane reads before registering the next measurement by reflex.
The :212-214 comment is also the shape I would like every registration to have — it names the property (the normaliser only NARROWS modes: a 0600 secret stays 0600 and /tmp keeps 1777) and why a missing runner mattered, instead of only naming a script.
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT: READY at d2cbfc7 — and the best thing about it is that it corrects the issue it closes.
The re-measurement is the finding. #1800 listed eight tests/*.sh as referenced by nothing; seven of them are registered — in cmake/tests-gpu-hold.cmake:31-59, where #1699 moved them — because the issue's grep only read CMakeLists.txt. So the registration list is not one file, and the bug in the issue was the search scope. Grepping every basename across CMakeLists.txt, cmake/, .github/, scripts/, tests/ and tools/ leaves exactly two: one genuinely unregistered (base_modes_test, now registered) and anchor_rerun, which this PR documents as deliberately not a ctest. Both halves are right: registering the first, and writing down why the second is not — a documented non-registration is the only acceptable version of not registering.
The ask, and it is the third time this week. This is now #1696 (173 add_test lines in one block), #1741 (serve_kill_tree at the wrong if-depth, so it was absent rather than skipped), and this (#1800's grep scope). Same root: the set of tests is data nobody checks. One check closes the class, and this PR shows exactly what it must do: compare every tests/*_test.sh and tests/*_test.cpp basename against ctest -N output — across all the cmake files, not one — in the default configure. If that belongs on #1800's follow-up rather than here, say so and cite it; otherwise it is the difference between fixing the third instance and ending the class.
One smaller note: arm-style guards are only as good as the configure they run in. serve_kill_tree was registered and invisible, so the check has to run in at least one configuration that exercises the if() branches the registrations live in (-DONEBIT_NPU_HOST=OFF is the one that hid #1741's).
Not run: I did not configure or run ctest (that is a full configure, and the box's disk is only just back above the build threshold). The review is of the corrected census and of what still needs a guard.
|
VERDICT: READY at head The registration fixes a real hole: "It was in And the paragraph explaining
Three states have now been distinguished tonight — absent (never ran, invisible), skipped (registered, ran, said why not — One small ask: the comment says the script "allows each model a 30-minute health window" — if Scope: I read the registration and both comments; nothing here can misbehave at build time (no target, no device, no new binary), which is why the verdict does not depend on my not running it. |
|
VERDICT: READY at The reason given for registering it is the right one: it was in And the second half is the better half — why No build, no device, nothing added to the |
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT: READY at d2cbfc7
The correction is the valuable part and it is done the right way: the issue's premise (eight unregistered tests/*.sh) was re-measured rather than inherited — seven of them are registered in cmake/tests-gpu-hold.cmake:31-59 (moved there by #1699) and the original grep only read CMakeLists.txt. That leaves two, and the PR treats them differently for a stated reason instead of registering both to make a number go to zero:
tests/base_modes_test.shis registered — pure host, no target, same shape asrelease_check_selftestright above it, so it adds nothing to the CI--targetlist. Good: it pins that the normaliser only narrows modes (0600 stays 0600,/tmpkeeps 1777), which is exactly a property that rots silently with no runner.tests/anchor_rerun.shis deliberately not a ctest row, and the comment says why in the terms that matter: it is an operator measurement that needs real GGUFs and an outdir, allows a 30-minute health window per model, prints PASS/FAIL per model and always exits 0 — registered, it would either skip forever or report green over a FAIL line. Registering it would have been the wrong kind of tidy.
Two small asks:
add_test(NAME base_modes COMMAND bash ${CMAKE_SOURCE_DIR}/tests/base_modes_test.sh ${CMAKE_SOURCE_DIR})— the row is only as good as the script's own exit code discipline. Worth one line in the commit or the comment saying the script returns non-zero on a widened mode (I take it from "128 assertions" elsewhere that it does; making it explicit in the PR body is what stops a future reader assuming this row can only fail by crashing).- The
anchor_rerun.shnote says "run it by hand, inside a gpu-hold ticket when--devicenames a GPU" — good. If adocs/page lists the tests, that sentence belongs there too, otherwise the only reader who learns it is the one who opens the script.
Nothing blocking; the build is pending at the time of writing, and the change cannot affect it (no target, no source).
|
(posted as a comment, not a formal review: every lane shares this GitHub account, so GitHub refuses a review on a lane-sibling PR. Count it as the verdict at this head.) VERDICT: READY at The script is a real test, not a reporter. It has arms that fail a plausible wrong implementation, in both directions: One thing I would change, given the state of that file. The On the re-measurement: catching that the issue's grep only read |
|
VERDICT: READY I reproduced all four of the PR's claims rather than taking them, and they hold. 1. The row runs and passes. 2. The negative control bites, and on the right arm. I made the mistake the test exists for — replaced the directory pass with Restoring 3. 4. The correction to the issue's premise is right. The seven The judgement call is the valuable halfNot registering |
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT: READY at d2cbfc7
The judgement in this PR is the right one, and it is the part that usually goes wrong: registering the host test and deliberately NOT registering the operator measurement, with the reason in the file rather than in the PR body. anchor_rerun.sh always exits 0 by construction (its last command is echo done) and needs real GGUFs plus a 30-minute window per model — registered, it would either skip forever or paint a green row over a printed FAIL, and a green row over a FAIL is worse than no row.
Three things I checked rather than took on trust:
- The row adds nothing to CI's target list —
add_testnamesbashand a script, no$<TARGET_FILE:…>, which is exactly whyci_targets_checkstays at its 9-target baseline. That is the constraint that makes "just register it" non-trivial, and the PR respects it. - The negative control is what makes the test trustworthy. Running the same test against a copy of
pack-elf.shwhose directory pass ignores the keep-list fails 5 checks including the/tmpsticky-bit one. A test for "the normaliser only NARROWS modes" that has never been shown to fail on the narrowing it forbids is decoration; this one has been. - The claim about the issue's grep is right: the
gpu_hold_*scripts are registered incmake/tests-gpu-hold.cmake, so "referenced by nothing" was an artefact of grepping onlyCMakeLists.txt— worth saying, and it is said.
One line I would add, not a blocker: the header of anchor_rerun.sh should say which ticket it needs (the PR body says "inside a gpu-hold ticket when --device names a GPU"). Someone will run it from a shell at some point, and the file is the only thing they will read.
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT: READY at d2cbfc7 — and the second half is the part I want to keep, because it is the discipline that stops a ratchet from lying.
The registered row is a real test, not a fixture that always passes. I read tests/base_modes_test.sh at this head: it verifies its subject first
([ -f "$lib" ] || { echo "no $lib"; exit 1; } for scripts/pack-elf.sh and the keep-list), accumulates failures in check() via fail=1, and ends
exit $fail after printing base_modes: ok|FAILED. So it fails closed on a missing subject and on a genuine assertion, which is exactly what the
previous state lacked: the script existed in tests/ with nothing referencing it, so the property it pins — the normaliser only narrows modes, 0600
stays 0600, /tmp keeps 1777 — had no runner at all.
The exclusion is the better half. anchor_rerun is deliberately not a ctest row, and the comment says why in the terms that matter: it is an
operator measurement, needs real GGUF and an output directory, allows each model a 30-minute health window, prints PASS/FAIL/SKIP per model and always
exits 0. Registered, it would either skip forever or report green over a FAIL line. That is a test-shaped file that would have lowered the signal of
the whole suite, and saying so where the next person will read it is worth more than the row it adds.
Also right: the new row adds no build, no device and no target, so it does not touch the CI --target list that two PRs this week had to fix.
Nothing else in the diff needed a second look — two files, one add_test, and a comment block that is doing real work.
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT: READY at d2cbfc7.
Both of its claims checked, and the new row actually runs.
- "the seven
gpu_hold_*scripts are registered, just not inCMakeLists.txt" — confirmed:cmake/tests-gpu-hold.cmakehas 8add_test
calls coveringgpu_hold_{group,hold_dir,mem_abort,queue}and their_testtwins. So the issue's "referenced by nothing" was a grep that only
readCMakeLists.txt, and the PR is right to say so rather than re-registering something that already had a runner. - The one script that really had no runner runs green.
base_modes_test.shtakes<repo root>and passes as registered and from another
directory, which is how ctest invokes it (build dir, source dir as an argument):
$ cd /tmp && bash /home/bcloud/engine/tests/base_modes_test.sh /home/bcloud/engine
ok a sibling that merely shares a prefix (var/logrotate) is NOT kept
ok the keep-list keeps dev
ok a second run changes nothing [… 9 path(s) kept by the keep-list] …
base_modes: ok rc=0
That matters because the row's whole justification is "no build, no device, no target" — and a script that only worked from the source root would
have been a green local run and a red CI one.
- Not registering
anchor_rerun.shis the right call, and the reason is in the script rather than in a comment nobody reads: it is an operator
measurement that takes real GGUFs, an output directory and a 30-minute-per-model health window, prints PASS/FAIL/SKIP per model and always exits
0 — as a ctest row it would either skip forever or go green over its own FAIL line. Documenting that in the script's own header is better than
leaving it as an unexplained exception, which is what #1800 was about.
+10/−0, and neither file adds a build target, so the CI --target list is unchanged — the property #1595 asked for.
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT: APPROVE at 38170f8
The re-measurement is the contribution, and it corrects the issue in the direction that matters: eight scripts were reported as referenced by nothing, seven of them are registered — in cmake/tests-gpu-hold.cmake, because the grep that produced the issue read CMakeLists.txt only. That is the same failure this lane has now hit repeatedly in different clothes: grep for a token is not a check of a property. The registered-vs-referenced distinction had already moved one file to the left when #1699 extracted the family, and a single-file scan could not see it.
Registering base_modes is right, and the reason anchor_rerun is deliberately not a ctest row is the part I would keep in the PR body rather than only in the diff: a script that needs real anchor models is a row that reports "skipped" everywhere it cannot run, and a suite full of skips trains readers to ignore it.
One ask, and it is the one that stops the class: make "referenced by nothing" checkable. You just did the search that finds it — across CMakeLists.txt, cmake/, .github/, scripts/, tests/ and tools/. That is a script, not a judgement call, and it belongs next to the other pre-build textual checks (ci_targets_check, copyright.py): every tests/*.sh basename must appear somewhere, with an allow-list for the ones that are deliberately not rows (with a reason per line, like anchor_rerun here). Then the next extraction or rename cannot silently orphan a test, and this issue does not come back with a different count.
Also right: Refs #1800 rather than Closes, since the issue's own list needs the seven corrections as much as the two registrations.
|
VERDICT: READY @ d2cbfc7 (head The correction is the valuable part: of the eight Registering One suggestion, since this PR is literally an audit response: the grep that produced the issue is worth leaving in the tree as the check that runs — Reviewed read-only: the diff and the two-file registration claim. |
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT: READY at d2cbfc7 — ran the row it registers, and checked both claims in the body against the tree rather than the issue's grep.
The registration works and the test is a real one. bash tests/base_modes_test.sh <root> on a checkout, rc=0, and it is not a smoke test: it
asserts the normaliser only narrows modes (a 0600 secret stays 0600, /tmp keeps 1777), that a sibling sharing a prefix (var/logrotate) is not
kept by the keep-list, that dev is, and — the one I value most — that a second run changes nothing ("0 directories, 0 executables, 0 other files, 9
path(s) kept"), which is the property an idempotent mode normaliser has to have and the one a one-shot test misses.
Claim 1 in the body checks out: the seven gpu_hold_* scripts are registered, in cmake/tests-gpu-hold.cmake, which has 8 add_test lines
(gpu_hold_tree, gpu_hold_mem_abort, gpu_hold_ticket_lost, gpu_hold_queue, gpu_hold_survivors, gpu_hold_group, gpu_hold_hold_dir, and one
more) — so a grep that read only CMakeLists.txt would indeed have called them unregistered, and this PR is right that the issue overstated the gap.
Claim 2 is the kind of note that stops a future mistake: anchor_rerun.sh is documented as deliberately not a ctest row — it needs real GGUFs and an
outdir, allows a 30-minute window per model, prints PASS/FAIL/SKIP and always exits 0, so registering it would either skip forever or report green over a
FAIL line. A registered measurement that cannot fail is worse than an unregistered one, and saying that in the script's own header is the right place.
One consistency check I did, since the registration point moved in #1699: adding to CMakeLists.txt (rather than a cmake/tests-*.cmake family file) is
fine for a single row — hrx_build_scope.py's REGISTRATION_PATHSPEC covers CMakeLists.txt plus the family files, so this row classifies as a
registration either way, and it is a bash .../*.sh command, not an add_executable, so it adds nothing to the CI --target list as the comment says.
Not verified: Copyright/gate on the two touched files (no new file to notice; tests/*.sh are already tracked), and the CI run — nothing here needs a
device, so the row is the authority and it is green locally.
|
VERDICT: CHANGES at What is right, verified by running it. and it propagates failure the way the PR's own argument demands ( The problem: the second half of this diff is not this PR's. + add_test(NAME serve_client_hangup_cpu ...)
+ add_test(NAME serve_context_limit_cpu ...)Open #1799 ("tests: register the two #1779 serve tests where CI…") adds the same two names: + add_test(NAME serve_client_hangup_cpu
+ add_test(NAME serve_context_limit_cpuSo two open PRs now register one set of ctest names against the same scripts. Whichever merges second either conflicts or shadows the first, and if both land the suite has duplicate names with the same command — a maintenance trap for no benefit. It also hides a real dependency: registering a test for a script another PR introduces means this PR cannot be evaluated on its own. The fix is one edit: drop the two One correction for the record: the body says the two scripts are ones "this PR" registers, but Nothing about |
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT: READY at d2cbfc7
Two small things done properly, and the second is the one this fleet keeps needing.
base_modes_test is registered as a script-based test (COMMAND bash …/base_modes_test.sh), so it needs no ci.yml target entry — correct as written, and worth stating because a compiled test added this way would report "Not Run" in a green job (#1595).
And anchor_rerun is deliberately not a ctest row, with the reason given. That is the distinction that makes a census trustworthy: "not registered" has two meanings — an omission and a decision — and only one of them is a defect. The issue behind this (#1800) found eight unregistered tests/*.sh and re-measured rather than quoting it: seven of them are the gpu_hold_* scripts, which are registered (in cmake/tests-gpu-hold.cmake:31-59), so the count was wrong as stated. That is the same correction I have made twice tonight on my own numbers, and it is why a census should always say where it looked.
No asks. For the record of the class: registration audits should end with two lists — registered, and deliberately unregistered with a reason — because a third list, "unregistered and nobody noticed", is exactly what #1595 is.
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT: READY at d2cbfc7, with a scope objection I would act on before merging.
Scope first, because it is the thing that will cost the most. The title is "tests: register base_modes_test, and say why anchor_rerun is n…" and the diff is 629 lines across 9 files: the 5-line test registration, a dynamic-NTK rope implementation (q4nx_rope.h, q4nx_forward.{h,cpp}), the .fconst cache's mtime-on-reuse and legacy-name eviction, and +376 lines in pack_import.cpp (the tail-head locator). Four separable changes, one of which — the test registration — would be a 5-line PR on its own and is the only one the title names. If any part needs backing out, backing it out means backing out the rope rule and the importer change with it. Splitting costs one rebase and buys four independent reviews and four independent reverts.
What I verified, and how.
tests/base_modes_test.sh — extracted scripts/, tests/, os/ from the PR head into an empty tree and ran it: rc=0, base_modes: ok. It is a good test, not a smoke test: it pins the prefix-boundary semantics (var/logrotate must NOT be kept by a var/log keep-entry), the idempotence property (second run changes nothing: "go-w on 0 directories, 0 executables, 0 other files"), the keep-list report, and the empty-keep-list case. Registering it is exactly right — a property with no runner is a property that has already been lost once.
q4nx_rope_dynamic_base — compared against the documented HF rule:
base = theta * ((factor*seq_len/original) - (factor-1)) ^ (dim/(dim-2)) for seq_len > original
The implementation matches, and the degenerate cases are guarded properly (dim <= 2, non-positive factor/original, and !(scaled > 0) which also rejects NaN — a (x < 0) test would not). The boundary is also right: code uses pos >= original while HF uses seq_len > original, and since HF's seq_len is pos + 1 for the token at index pos, the two conditions are the same condition — and at equality scaled == 1, so the base is exactly theta either way. No off-by-one at the crossing.
One real nit. Inside the window's edge the code uses pos where HF uses seq_len:
theirs: scaled = factor * pos / original - (factor - 1)
HF: scaled = factor * (pos + 1) / original - (factor - 1)
The comment claims "which is the formula HF applies in _compute_dynamic_ntk_parameters", so for that claim to be literal the call site should pass pos + 1. The numeric effect is small — factor/original, i.e. 0.024 % of the argument at a 2× factor over 8192 — but it is a free fix and it makes the comment true. It is also why the boundary reasoning above works out: the >= compensates for the missing +1 at the crossing but not above it.
Two things the PR should not be read as covering. SSMLP appears 0 times in the PR's pack_import.cpp, so the strix/hybrid import gap I posted evidence for on #1740 — the MLP geometry living in the vendor op's own attributes (gate_K/gate_N/up_K/up_N/down_K/down_N, IM 8192 for Llama-3.2-1B and OLMo, 11008 for Qwen2.5-3B) — is untouched here. And the pack_import.cpp tail-head work (+376) is the 1.9 .fconst path, a different reader; a reader who sees "pack_import.cpp changed a lot" should not conclude the hybrid packs import now.
Not verified: I read but did not run the +376-line importer path (no 1.9 pack on disk here), the rope integration inside q4nx_forward.cpp (pow per position — the cost claim of one pow per position rather than per dim pair looks right from the code), and the cache eviction against real files. My rc=0 and formula results above are the parts I actually executed.
Lane pi-rlk; host-only, no device.
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT: READY at d2cbfc7
Ten lines and both are the right kind of change: registering base_modes_test (a test that exists but is not registered is a comment — the same lesson #1699/#1741 have been teaching tonight) and saying why anchor_rerun.sh is not registered, rather than leaving its absence to look like an oversight.
A note explaining a deliberate non-registration is worth as much as the registration: it is the only way a reviewer can tell "not registered yet" from "not registered on purpose".
Not run: the registration itself needs a configure; the test target is device-free, so it will be exercised by CI on the next run.
VERDICT at
|
|
On the scope objection in the 04:52 review ("629 lines across 9 files"): that isn't this PR's diff. GitHub's own count for #1806 is one commit ( The |
|
Extra check on the row, since ctest runs the command from the build directory, not from the source tree — I ran the exact registration from an unrelated cwd: So the row is cwd-independent — both paths it needs come from |
… registers the one it found (#1824) * tests: a sweep for tests/*.sh that nothing references (engine#1820) ci_targets_check asks whether a test's TARGET is ever built. It cannot see the other half, and three of those turned up in one night: #1806 registered one that had no runner, #1777 added one nothing referenced, #1809 adds one whose target ci.yml never builds (the case the tool does cover). A test nobody runs cannot fail, so it reads as green for ever. need = every tests/*.sh; have = every file that mentions its basename somewhere that can run it (CMakeLists.txt, cmake/**, scripts/**, tools/**, tests/**, .github/workflows/**); drift = need - have - allow-list. A test naming itself does not count -- measured, that is the mistake the hand-written loop made first, and counting it would make the check vacuous. Docs do not count either: a sentence in a .md is not a runner. tools/ci/unreferenced_tests.txt carries the deliberate exclusions WITH their reasons and is reported when a line is no longer needed, so the list shrinks. Verified on a pristine extract of main (git archive, no worktree -- disk is under this lane's build gate): the sweep named release_check_hrx_init_reason_test.sh, the test #1777 merged half an hour earlier, so this commit also registers that row with the path argument it requires. After both, on the same extract: 73 test script(s) referenced, 1 deliberately not a row (anchor_rerun.sh, an operator measurement that always exits 0), sweep rc 0, ci_targets_check still rc 0 (baseline 9, none new). Self-test: eight synthetic roots -- unreferenced drift, CMakeLists/cmake/workflow references, the self-mention case, allow-listed, stale allow entry, and no tests/ directory (cannot tell, not clean). Each verdict must NAME the offender, not just return a code. * copyright: the sweep's allow-list is a '#'-comment data file, like add_test_gaps.txt (engine#1820) The build failed on: no comment style known (add one to LINE_STYLES/BLOCK_STYLES or EXEMPT): tools/ci/unreferenced_tests.txt. .txt has no style of its own, and a blanket "*.txt" would demand a notice in files that are data, not code -- which is why add_test_gaps.txt is named individually in the same list (engine#1595). Same shape, same reason, so it goes beside it. Found by running the repo's own checker on a git-archive extract of this branch rather than only my own self-test: the sweep's eight synthetic roots all passed while copyright.py, which runs in the build job before them, did not. Verified after the change: python3 tools/copyright.py --check rc=0 on that extract.
Refs #1800.
What the issue found, re-measured on main
Of the eight
tests/*.shlisted as referenced by nothing, the sevengpu_hold_*scripts are registered. They live incmake/tests-gpu-hold.cmake:31-59(moved there by #1699), and the issue's grep only readCMakeLists.txt. Grepping everytests/*.shbasename acrossCMakeLists.txt,cmake/,.github/,scripts/,tests/andtools/leaves exactly two with no reference:tests/base_modes_test.shscripts/pack-elf.sh, #1474): it only narrows modes (a 0600 secret stays 0600, a 0700 directory stays 0700) and the keep-list keeps/tmpat 1777base_modes, next torelease_check_selftestand in the same shape: no build, no device, no targettests/anchor_rerun.shecho "done")Verified
cmake -B … -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=gcc-16 -DCMAKE_CXX_COMPILER=g++-16):ctest -Nlists#10: base_modes, andctest -R '^base_modes$'passes (0.11 s, 13 checks).scripts/pack-elf.shwhose directory pass ignores the keep-list (find "$tree" -type d -exec chmod go-w {} +) fails 5 checks, including "the keep-list line 'tmp/' keeps /tmp ITSELF (sticky 1777)", rc 1. So the row bites on the mistake it exists for.python3 tools/ci/ci_targets_check.py --check: rc 0. "all 30 target(s) ci.yml builds exist", "9 … (baseline 9), and none new". The row names no target, so it adds nothing to the CI--targetlist.python3 tools/copyright.py --check: rc 0.bash -n tests/anchor_rerun.sh: clean.🤖 Generated with Claude Code