Stratos v0.0.18
⚠️ Superseded by v0.0.19v0.0.18 ships only a partial set of artefacts. The Windows binary smoke
(intentionally) blocked the release at thebinariesstep when the
entrypoint-guard fix didn't work, so:
- ✓
@cloudcdn/stratos@0.0.18did publish to npm (the fix code is
there; npm path doesn't involve the Bun binary)- ✓
ghcr.io/sebastienrousseau/stratos:0.0.18did publish (Docker
runs Node, not the Bun binary)⚠️ Nostratos-win-x64.exeattached here⚠️ Homebrew tap, Scoop bucket, winget all still point at v0.0.17⚠️ No SLSA L3 attestationv0.0.19 lands the correct fix end-to-end across every channel. Use
v0.0.19 or later.
Fixed
- Windows binary (
stratos-win-x64.exe) was silent on every invocation. v0.0.15 through v0.0.17 shipped abun --compile-built Windows binary that exited0while producing zero bytes of stdout for every command. Discovered by reproducingmicrosoft/winget-pkgs#382755— the reviewer @stephengillie's manual validation ofstratos --versionreturned empty output, and we narrowed the cause through two rounds of CI diagnostic (diag-windows-binary.yml,diag-windows-binary-2.yml).- Root cause: the script-entrypoint guard at the bottom of
stratos.mjsused the classic Node checkfileURLToPath(import.meta.url) === process.argv[1]. In a Bun-compiled standalone binary on Windows,process.argv[1]is the.exepath on disk (C:\…\stratos.exe) whileimport.meta.urlresolves into Bun's virtual$bunfsfilesystem (file:///$bunfs/root/…). These never match → guard false →main()never runs → silent zero-exit. Linux/macOS binaries happened to work because theirargv[1]/url comparison coincidentally passes, but the codepath was just as fragile. - Fix: detect compiled-binary context explicitly via
typeof Bun !== 'undefined' && Array.isArray(Bun.embeddedFiles) && Bun.embeddedFiles.length > 0and runmain()if either that OR the Node entrypoint check is true.Bun.embeddedFilesis non-empty only inside abun build --compileartefact, so importers ofstratos.mjsas a library (Node or Bun, from source) still seemain()not auto-run — the programmatic-API contract is preserved.
- Root cause: the script-entrypoint guard at the bottom of
- The release-pipeline binary smoke was a no-op gate.
shell: bash, ./<binary> versionwithset -esawexit 0from the silent binary and passed. Strengthened to assert the stdout matches^stratos v[0-9]explicitly — any future silent-zero-exit fails the release matrix at build time. smoke-verifymatrix now includesbinary-win-x64alongside the existingbinary-linux-x64andbinary-darwin-arm64cells. Mirrors what the winget reviewer's manual test did:curlthe.exefrom the release and verify the version banner. Closes the post-release verification gap that let v0.0.15..v0.0.17 ship a broken Windows binary unnoticed.
Background
PR microsoft/winget-pkgs#382755 was closed unmerged on 2026-06-13 by the Microsoft reviewer after manual validation. CloudCDN.Stratos couldn't be auto-resubmitted because (a) it's not yet in microsoft/winget-pkgs (so the auto-bump action skips by design) and (b) the underlying silent-output bug would have produced an identical failure for any new submission. v0.0.18 fixes the binary; a manual first-version PR for manifests/c/CloudCDN/Stratos/0.0.18/ (already pre-built and attached to the GitHub release as winget-manifests.tar.gz) is the next step to land CloudCDN.Stratos on winget.
Diagnostic workflows retained
diag-windows-binary.yml— round 1, walks the failure surface across shells and invocationsdiag-windows-binary-2.yml— round 2, discriminates Bun-build vs stratos.mjs vs stdio
Both are workflow_dispatch only — no auto-fire. Kept as record of the investigation and as ready-to-trigger probes if the silent-output class ever recurs.