Repository navigation
SuperSLM 1.7.1
SuperSLM 1.7.1
Released 2026-09-24.
SuperSLM 1.7.1 is a single fix: the engine library writes nothing to stdout. No token, ABI
surface, or measured figure changes from 1.7.0.
What changed
The engine library writes nothing to stdout. 1.7.0 wrote # adapter: <name> to stdout
whenever SSLM_GPU_ADAPTER_INDEX was set, so a certification run could confirm which GPU actually
ran (T-2116, tools/t2116_crossvendor/run_crossvendor.ps1). The write came from one call site,
Device::Init() in src/gpu/d3d12_harness.h, reached once per GPU context, plus once per
process the first time that process dispatches (prefill, decode, or sequence restore) under that
setting (TE-407 M3: context creation and model mapping alone never touch
harness::GetDevice()'s process-wide singleton; the calls that do are superslm_gpu.cpp's
dispatch, submit, restore, and bind functions) -- reached from both SslmGpuContext::device and,
on that first dispatch, the singleton. A host that writes its own data to stdout had that line
spliced into it -- semb query --device gpu's own
output was corrupted this way (TE-393, D-SLM7752). The line now goes to stderr, the channel
every other diagnostic in the same file already uses (the SSLM_GPU_ENABLE_DEBUG_LAYER messages,
the D3D12 validation callback, the HRESULT-failure macro). The information a certification run
needs is unchanged, but run_crossvendor.ps1 DID need a script fix, not none -- see
"Compatibility and required action" below.
Sweep. Every stdout write reachable from the shipped superslm and superslm_gpu libraries
in src/ and include/ was enumerated before any fix (printf, wprintf, puts, std::cout,
fwrite/fprintf to stdout, and equivalents). The one call site above was the only one found;
every other library call already wrote to stderr or wrote nothing. Tools and tests still print
to stdout freely -- this release constrains only the shipped libraries. That the libraries write
nothing to stdout is verified for this release by that sweep, repeated on the release candidate
over a wider set of forms by the code review (TE-409).
CI scan. tests/ci/check_no_library_stdout_write.py, run by the no-library-stdout-check job
in .github/workflows/tests.yml, refuses any src/ or include/ source that names a banned
stdout-writing identifier outside a comment or a string/char literal: stdout, cout, the
printf, puts and putchar families (MSVC's _printf_l/_printf_p family included), write,
WriteFile, WriteConsole, GetStdHandle, fdopen, and the rest of the list. The token-paste
operator ## is banned too. The complete list is defined in one place, the script's
_BANNED_IDENTIFIERS, _BANNED_IDENTIFIER_FAMILY and _BANNED_OPERATORS, and its module docstring
describes it. The scan is a tripwire for those spellings, not a proof: code that reaches stdout
without naming a listed identifier can pass it (TE-402 S3, TE-409 S1).
Compatibility and required action
GpuContextConfig, GpuResidencyConfig, every C ABI verb, and every SslmGpuStatus ordinal are
unchanged from 1.7.0. GPU sequence saves are unchanged (SLM5), and no model-artifact
reconversion is required. No arithmetic on the compute path changed: the fix touches only a
diagnostic print statement, gated the same way it always was (only when SSLM_GPU_ADAPTER_INDEX
is set), on Device::Init()'s existing early-return structure.
Required action: a host that reads the # adapter: label from stdout must read it from stderr
instead. A host that already merges the two streams needs a further check: Windows PowerShell
5.1 wraps each native stderr line reaching a 2>&1 capture in an ErrorRecord, and rendering that
record (Out-String) repeats the line's own text -- a naive merge on 5.1 sees the label twice,
once mangled, which breaks an exact-match reader (TE-402 C1). tools/t2116_crossvendor/ run_crossvendor.ps1 needed exactly this fix (both of its capture points now stringify the
pipeline, ForEach-Object { "$_" }, before parsing it). Verified by execution: the committed
per-cell capture-point expression, run directly against one rebuilt battery binary
(t2113_b1_context_smoke.exe), under both powershell.exe 5.1 and pwsh 7 -- see the build log
for the transcript. run_crossvendor.ps1 itself was not separately run under 5.1 in this round;
the enumeration capture point (the same fix, applied for consistency) was not exercised in
isolation. pwsh 7 alone was never affected. See tools/t2116_crossvendor/README.txt's "SHELL
COMPATIBILITY" section.
Files changed
src/gpu/d3d12_harness.h-- the one stdout write (Device::Init()) moved to stderr; its
header comment corrected to match (TE-402 M1).tools/t2116_crossvendor/run_crossvendor.ps1-- the 5.1 ErrorRecord-wrapping fix, both capture
points (TE-402 C1).tools/t2116_crossvendor/README.txt-- documents the shell hazard and its fix.tests/ci/check_no_library_stdout_write.py-- new: the CI scan for banned stdout-writing
identifiers (TE-402 S3, TE-409 S1)..github/workflows/tests.yml-- wires the scan in as a CI job.tests/test_main.cpp,tests/te399-stdout-red-suite/build.bat,
tests/te399-stdout-red-suite/build_test_main.bat,
tests/te399-stdout-red-suite/cell_gpu_pipeline_stdout_empty.cpp,
tests/te399-stdout-red-suite/run_cell.ps1,
tests/ci/test_te399_stdout_write_scan_commission.py-- TE-399's (Curie's) red suite for this
property, including its own fix-round additions (stderr-arrival pinning, the CI scan's
must-reject/must-accept/synthetic-mutant commissioning constructions).CMakeLists.txt,README.md,CHANGELOG.md,tests/install-consumer/CMakeLists.txt-- release
bookkeeping for 1.7.1.