You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(doctor): nvcc's unreachable back-end, and the post-release verification that found it (#560)
* docs(accel): record the post-release verification, and remove an emoji from a comment
Section 14 was written when the engine-side change was merged but not yet
released. Section 15 records what the released 2026.9.5.1 was measured to do:
six criteria run against the published binary in a fresh subos, and a control
establishing that the driver becomes reachable because of the index package
rather than because of host leakage.
It also records that the first run of those criteria was a false green. The
script was correct; the invocation removed its first line, which was
`set -euo pipefail`, in order to work around a quoting problem. Every
assertion then became advisory and the closing banner printed regardless. The
rule this yields is that assertions must not rest on `set -e` alone.
The comment added to the runtime.artifacts whitelist carried a warning emoji.
Emphasis is carried by a capitalised phrase instead.
* feat(doctor): report when nvcc cannot reach its own back-end
Verifying the release inside a sandbox found the CUDA example failing where
it succeeds on the host. The difference is one line: nvcc runs cicc, cudafe++,
ptxas and fatbinary as bare names on a PATH it prepends itself from an
`nvcc.profile` beside its binary, Debian-family packaging makes that profile a
symlink into /etc, and a sandbox that replaces /etc removes it. nvcc then
keeps the ambient PATH and reports `sh: 1: cicc: not found`, which names
neither nvcc nor the profile. Nothing about the toolkit is missing, so every
obvious check passes.
The plan is asked for rather than assumed. `nvcc --dryrun` prints the stages
and the PATH nvcc will use without compiling anything; parse_dryrun reads that
plan, and the doctor resolves each bare name against the path nvcc states,
reporting the first that does not resolve. A dryrun that yields no plan --
there is no nvcc, or the output is not one -- produces no finding, on the same
principle as the host-compiler bound: a probe that reaches no answer must not
invent one.
Measured on both sides, because a check that is always silent and a check that
is always loud look alike from one run. With a working nvcc the warning does
not appear; with nvcc copied to a directory holding no profile it appears and
names `cicc` -- the same stage the real failure names, because Debian ships
cudafe++, ptxas and fatbinary in /usr/bin and cicc only in the toolkit's own
directory.
No e2e accompanies this. It would need nvcc, which CI does not have, and a
`# requires: nvcc` script skips and exits 0 on every shard. The coverage is
five unit tests over two real dryrun transcripts differing in exactly that
PATH line, plus the two-sided control recorded in the design's section 15.7.
* docs(accel): note the new check in the stage table
* docs(accel): why L1/L2 stops at one index package, measured
---------
Co-authored-by: speak-agent <248744407+speak-agent@users.noreply.github.com>
0 commit comments