docs(ssh): record Linux floor evidence

Co-authored-by: Orca <help@stably.ai>
This commit is contained in:
Jinwoo-H
2026-07-14 20:01:11 -04:00
co-authored by Orca
parent 0cb3f7510b
commit 3973e68d77
3 changed files with 343 additions and 14 deletions
@@ -21,14 +21,19 @@ complete a box.
## Active work
- [ ] **WP2 — Prove oldest supported baselines and native trust.**
- Session checkpoint: a local x64 Rocky 8 build now passes two complete offline builds, exact
equality, archive/tree verification, PTY/watcher smoke, and the glibc 2.28/libstdc++ 6.0.25
userland verifier. This is supplemental local emulation evidence, not a qualifying native cell.
- Local focused tests pass 100/100; typecheck, lint, max-lines, formatting, and diff checks pass.
- Artifact-only implementation commit: `0cb3f7510` (`build(ssh): prove Linux runtime floor`).
- All six target-native artifact, smoke, equality, SBOM, license, provenance, toolchain, and
prohibited-content cells pass in
[run 29373507297](https://github.com/stablyai/orca/actions/runs/29373507297); every downloaded
payload passed direct audit.
- No tuple is enabled: the artifacts still need execution on each declared oldest OS/libc/kernel
baseline and target-native signing/trust proof.
- Next gate: add the purpose-named baseline verification capability and GitHub-runner cells that
can qualify, while keeping unavailable snapshot/trust cells explicit and disabled.
- Next gate: run the corrected builder on native GitHub x64/arm64 runners. Kernel 4.18, macOS
13.5, and native signing/trust remain explicit open cells.
## Work packages, in required order
@@ -55,6 +60,8 @@ complete a box.
Linux, macOS, and Windows on x64 and arm64.
- [x] Prove exact clean-build equality and exact runtime-tree closure on all six runner families.
- [x] Complete the all-six SBOM, license, provenance, toolchain, and prohibited-content audit.
- [ ] Rebuild both Linux artifacts in the digest-pinned glibc 2.28/libstdc++ 6.0.25 userland on
native x64/arm64 runners; smoke and compare them there.
- [ ] Prove each candidate on its oldest supported OS/libc/kernel baseline.
- [ ] Sign macOS and Windows bytes and verify native trust on the target OS.
- [ ] Merge draft PR [#8741](https://github.com/stablyai/orca/pull/8741).
@@ -9,6 +9,7 @@ work; keep exact commands, runner identities, hashes, metrics, and residual gaps
Date created: 2026-07-14<br>
Last updated: 2026-07-14<br>
Current phase: Milestone 3 / Work Package 2 oldest-supported-baseline and native-trust proof — **In progress — 2026-07-14, Codex implementation owner**; exact-head run [29373507297](https://github.com/stablyai/orca/actions/runs/29373507297) passes all six target-native build, smoke, exact clean-build equality, upload, SBOM, license, provenance, runner/toolchain, and prohibited-content cells, and direct inspection of every downloaded payload passes exact archive/subject hashes, archive-scoped SPDX identity, one-owner-per-file, dependency, commit/run/builder/runner, tool-version/hash, and closure assertions (E-M3-METADATA-CI-001); Windows x64/arm64 record strict `MSVC 14.44.35207` identities and distinct exact linker SHA-256 values despite the Git-for-Windows PATH collision; the all-six metadata/provenance gate is closed, while oldest-baseline execution, native signing/trust, cross-family remotes, and measured legacy baselines remain open; production/default behavior and every tuple state remain unchanged; no bundled-runtime path is enabled and no artifact is published<br>
Session checkpoint: **In progress — 2026-07-14, Codex implementation owner** — artifact-only implementation commit `0cb3f7510` packages the correction after E-M3-LINUX-BASELINE-LOCAL-GREEN-001 proved the Linux x64 builder through two complete offline Rocky 8 builds, exact output equality, archive/tree verification, bundled PTY/watcher smoke, and the glibc 2.28/libstdc++ 6.0.25 userland verifier; this local Docker Desktop x64-emulation cell is supplemental only, so exact-head native GitHub x64/arm64 repetitions, exact kernel 4.18, macOS 13.5, and native-trust cells remain open; no tuple is enabled or published.<br>
Primary design: [SSH relay GitHub Release plan](./2026-07-14-ssh-relay-github-release-plan.html)<br>
Motivating issues: [#8450](https://github.com/stablyai/orca/issues/8450), [#1693](https://github.com/stablyai/orca/issues/1693)
@@ -657,6 +658,15 @@ runner, static symbol scan, or container may add evidence but cannot silently st
unavailable qualifying snapshot. Every tuple remains disabled and no production consumer is
connected.
**Baseline correction — 2026-07-14, Codex implementation owner:**
E-M3-LINUX-BASELINE-LOCAL-RED-001 proves the existing Linux x64 candidate cannot load its patched
`node-pty` on Rocky 8.9/glibc 2.28 because the Ubuntu 24.04 producer emitted references to
`GLIBC_2.32` and `GLIBC_2.34`. This exposes a producer flaw, not permission to weaken the declared
floor. The Linux jobs must compile and smoke native modules inside the digest-pinned oldest
glibc/libstdc++ userland on native x64/arm64 runners, repeat exact clean-build equality and metadata
gates for the new bytes, and retain the exact kernel 4.18 cell as an explicit residual gap. A newer
host build followed by container execution is not qualifying evidence.
**Active sub-gate — 2026-07-14, Codex implementation owner:** exact-head run 29345126283 proves all
six target-native artifact/executable jobs, including normal Windows x64/arm64 settlement and
unpublished upload. E-M3-REPRODUCIBILITY-LOCAL-001 proves the bounded comparator requires two
@@ -825,16 +835,16 @@ Each runtime must contain only the executable closure required by the relay.
### Per-tuple build and executable proof
| Runtime tuple | Build/provenance | Bundled Node | `node-pty` load + real PTY | Watcher events | Oldest baseline | Native trust | Evidence |
| ----------------- | ---------------- | ------------ | -------------------------- | -------------- | --------------- | ------------ | ----------------------------------- |
| linux-x64-glibc | [x] | [x] | [x] | [x] | [ ] | [ ] | E-M3-CI-001 |
| linux-arm64-glibc | [x] | [x] | [x] | [x] | [ ] | [ ] | E-M3-RUNTIME-LOCAL-001; E-M3-CI-001 |
| linux-x64-musl | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | — |
| linux-arm64-musl | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | — |
| darwin-x64 | [x] | [x] | [x] | [x] | [ ] | [ ] | E-M3-CI-001 |
| darwin-arm64 | [x] | [x] | [x] | [x] | [ ] | [ ] | E-M3-CI-001 |
| win32-x64 | [x] | [x] | [x] | [x] | [ ] | [ ] | E-M3-WINDOWS-CI-001 |
| win32-arm64 | [x] | [x] | [x] | [x] | [ ] | [ ] | E-M3-WINDOWS-CI-001 |
| Runtime tuple | Build/provenance | Bundled Node | `node-pty` load + real PTY | Watcher events | Oldest baseline | Native trust | Evidence |
| ----------------- | ---------------- | ------------ | -------------------------- | -------------- | --------------- | ------------ | ---------------------------------------------------------- |
| linux-x64-glibc | [ ] | [x] | [ ] | [ ] | [ ] | [ ] | E-M3-CI-001; E-M3-LINUX-BASELINE-LOCAL-RED-001 |
| linux-arm64-glibc | [ ] | [x] | [ ] | [ ] | [ ] | [ ] | E-M3-RUNTIME-LOCAL-001; E-M3-CI-001; floor rebuild pending |
| linux-x64-musl | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | — |
| linux-arm64-musl | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | — |
| darwin-x64 | [x] | [x] | [x] | [x] | [ ] | [ ] | E-M3-CI-001 |
| darwin-arm64 | [x] | [x] | [x] | [x] | [ ] | [ ] | E-M3-CI-001 |
| win32-x64 | [x] | [x] | [x] | [x] | [ ] | [ ] | E-M3-WINDOWS-CI-001 |
| win32-arm64 | [x] | [x] | [x] | [x] | [ ] | [ ] | E-M3-WINDOWS-CI-001 |
Rules:
@@ -6995,6 +7005,297 @@ bounded version line: <empty>`. The PE lookup returned successfully but the `Fil
- Follow-up: implement and run purpose-named oldest-supported-baseline checks, then prove native
signing/trust before connecting any artifact consumer or enabling any tuple.
### E-M3-LINUX-BASELINE-LOCAL-RED-001 — Ubuntu-built Linux candidate fails the glibc 2.28 floor
- Date: 2026-07-14
- Owner: Codex implementation owner
- Source artifact: exact-head Actions run
[29373507297](https://github.com/stablyai/orca/actions/runs/29373507297), unpublished
`linux-x64-glibc` artifact `8327034796`, archive SHA-256
`177ad16222b08beb972bf66910bbafd32bf1e820deb007fef3304057cb6a01b8`, content ID
`960546cd96c67fcf9bb0a61e96ecdbecbffd9104d3a495578f8bb19dd810649a`.
- Runner/environment: local macOS arm64 controller, Docker 29.2.1, native artifact architecture
executed through Docker Desktop's bounded `linux/amd64` VM; container
`docker.io/library/rockylinux@sha256:2d05a9266523bbf24f33ebc3a9832e4d5fd74b973c220f2204ca802286aa275d`
(Rocky Linux 8.9, glibc 2.28, libstdc++.so.6.0.25). This is local red evidence only; native
GitHub x64/arm64 repetition remains required.
- Remote and transport: no SSH remote; read-only bind-mounted unpublished runtime, container
networking disabled, all capabilities dropped, `no-new-privileges`, 128 PIDs, 1 GiB memory, two
CPUs, and a 64 MiB `/tmp` tmpfs.
- Commands:
```bash
tar -xJf orca-ssh-relay-runtime-v1-linux-x64-glibc-960546cd….tar.xz -C "$runtime"
docker run --rm --platform linux/amd64 --network none --read-only --cap-drop all \
--security-opt no-new-privileges --pids-limit 128 --memory 1g --cpus 2 \
--tmpfs /tmp:rw,nosuid,size=64m \
--mount "type=bind,src=$PWD,dst=/workspace,readonly" \
--mount "type=bind,src=$runtime,dst=/runtime,readonly" \
--workdir /workspace "$image" \
/runtime/bin/node config/scripts/ssh-relay-runtime-smoke-child.cjs /runtime
docker run --rm --platform linux/amd64 --network none --read-only --cap-drop all \
--security-opt no-new-privileges --pids-limit 128 --memory 1g --cpus 2 \
--tmpfs /tmp:rw,nosuid,size=64m \
--mount "type=bind,src=$runtime,dst=/runtime,readonly" "$image" \
/runtime/bin/node -e "require('/runtime/node_modules/node-pty/build/Release/pty.node')"
```
- Result: expected RED. The complete smoke stops before PTY/watcher evidence because patched
`node-pty` cannot load. Direct loading reports `/lib64/libc.so.6: version 'GLIBC_2.34' not found`;
`ldd` additionally reports `GLIBC_2.32` missing. The file exists and is the identity-authenticated
x64 ELF, so this is an ABI-floor mismatch rather than a missing archive entry.
- Verifier defect exposed: the first baseline CLI run also rejected with `Runtime baseline did not
resolve one bounded libstdc++ ABI library`; inspection found its filename parser accidentally
removed the SONAME `6` from `libstdc++.so.6.0.25`. This is
E-M3-BASELINE-VERIFIER-LOCAL-RED-001 and requires a focused parser test/correction before CI.
- Oracle proved: Ubuntu 24.04 producer smoke and target-native architecture alone do not prove the
declared Linux ABI floor; current Linux candidate bytes are ineligible.
- Does not prove: native x64 timing, Linux arm64 behavior, kernel 4.18, SSH transfer/install, native
trust, or any enabled tuple.
- Follow-up: build both Linux tuples in the digest-pinned Rocky 8.9 userland on native runners,
correct the bounded libstdc++ filename parser, repeat smoke/baseline/equality/metadata gates, and
keep kernel 4.18 explicitly open.
### E-M3-LINUX-BUILDER-PYTHON-LOCAL-RED-001 — Rocky 8 default Python is too old for node-gyp 12
- Date: 2026-07-14
- Owner: Codex implementation owner
- Source: uncommitted local WP2 correction at Git HEAD
`775f2cbcc7f66f6e728fa06ae2d6822edd50f7b0`; no artifact was emitted or published.
- Runner/environment: local macOS arm64 controller, Docker 29.2.1, `linux/amd64` Docker Desktop
emulation; builder base
`docker.io/library/rockylinux@sha256:2d05a9266523bbf24f33ebc3a9832e4d5fd74b973c220f2204ca802286aa275d`
(Rocky Linux 8.9, glibc 2.28, libstdc++.so.6.0.25), derived local builder image ID
`sha256:1f06eda13b33be5d30aa1b256895516b322d329753f9743614a5c8ebf1286291`.
- Remote and transport: no SSH remote; workflow-equivalent local container with networking
disabled, read-only root, all capabilities dropped, `no-new-privileges`, 512 PIDs, 6 GiB memory,
four CPUs, and a 1 GiB `/tmp` tmpfs.
- Command:
```bash
docker run --rm --platform linux/amd64 --network none --read-only --cap-drop all \
--security-opt no-new-privileges --pids-limit 512 --memory 6g --cpus 4 \
--tmpfs /tmp:rw,nosuid,size=1g <builder> \
/usr/bin/node config/scripts/ssh-relay-runtime-linux-build-evidence.mjs \
--tuple linux-x64-glibc --inputs-directory /evidence/inputs \
--output-root /evidence/native-output --work-directory /evidence/native-work \
--evidence-directory /evidence/verified-output \
--source-date-epoch 1784069324 \
--git-commit 775f2cbcc7f66f6e728fa06ae2d6822edd50f7b0
```
- Result: expected RED. The evidence driver stopped during the first `node-pty` native build before
creating or copying any candidate. node-gyp 12.3.0 selected `/usr/bin/python3` version 3.6.8 and
failed parsing its own `if flags := ...` syntax. The container capability probe then proved
distro package `python39-3.9.25-2.module+el8.10.0+40046+11e46e10` installs as
`/usr/bin/python3.9` without changing the glibc/libstdc++ floor.
- Correction: the digest-pinned prepared builder installs `python39`, asserts Python 3.9, and sets
`NODE_GYP_FORCE_PYTHON=/usr/bin/python3.9`; the focused workflow contract passes 4/4. Package
installation remains in the networked preparation phase, while both native builds remain
network-disabled.
- Oracle proved: the earlier builder definition could not build the artifact and failed before
output; a modern build controller is compatible with the old runtime ABI userland when installed
before the isolated compilation phase.
- Does not prove: a complete x64 build, x64 reproducibility/smoke/baseline, native arm64, kernel
4.18, SSH transfer/install, signing/trust, or any enabled tuple.
- Follow-up: repeat the full two-build x64 evidence command with the corrected builder, run the
purpose-named Linux userland verifier over its verified output, then repeat on native GitHub x64
and arm64 runners.
### E-M3-LINUX-BUILDER-GCC-LOCAL-RED-001 — Rocky GCC 8 rejects Node v24's final C++20 spelling
- Date: 2026-07-14
- Owner: Codex implementation owner
- Source: uncommitted local WP2 correction at Git HEAD
`775f2cbcc7f66f6e728fa06ae2d6822edd50f7b0`; no artifact was emitted or published.
- Runner/environment: the same local macOS arm64/Docker `linux/amd64` emulation and digest-pinned
Rocky 8.9 base as E-M3-LINUX-BUILDER-PYTHON-LOCAL-RED-001; corrected builder selected Python
3.9.25 and retained glibc 2.28/libstdc++.so.6.0.25.
- Command: the E-M3-LINUX-BUILDER-PYTHON-LOCAL-RED-001 two-build evidence command, repeated with
`NODE_GYP_FORCE_PYTHON=/usr/bin/python3.9` in the corrected builder.
- Result: expected RED after 36.42 seconds, 148,564 KiB peak RSS. node-gyp 12.3.0 successfully
selected Python 3.9.25, then GCC 8.5.0 rejected Node v24's generated `-std=gnu++20` argument and
suggested its supported draft spelling, `-std=gnu++2a`. The evidence driver removed the failed
first output and copied no candidate.
- Correction: the Linux-only build now replaces exactly one `'-std=gnu++20',` entry with
`'-std=gnu++2a',` in the already signature/hash-verified extracted Node `common.gypi`; zero or
multiple matches fail closed and non-Linux inputs are unchanged. The extracted headers are build
inputs only, so bundled official Node bytes remain unchanged. Four focused compatibility tests
cover replace, non-Linux preservation, and both rejected counts.
- Oracle proved: the oldest declared GCC/libstdc++ toolchain cannot consume the unmodified Node v24
header spelling; silently selecting a newer compiler could narrow the libstdc++ floor.
- Does not prove: successful native compilation with the corrected flag, runtime smoke, exact
equality, x64/arm64 native runners, kernel 4.18, SSH transfer/install, signing/trust, or an enabled
tuple.
### E-M3-LINUX-BUILDER-TOOLCHAIN-LOCAL-RED-001 — Minimal builder cannot record its compiler
- Date: 2026-07-14
- Owner: Codex implementation owner
- Source and environment: the same uncommitted source, base digest, local controller, and bounded
offline container as E-M3-LINUX-BUILDER-GCC-LOCAL-RED-001.
- Command: the same two-build evidence command after the exact Linux C++ flag correction.
- Result: expected RED after 1 minute 40.14 seconds, 694,188 KiB peak RSS. The first native module
compiled and the runtime reached metadata collection, but the minimal Rocky image lacked the
`which` locator used by the fail-closed toolchain collector. It therefore refused to claim a
compiler identity and removed the incomplete output. The collector would also have probed
generic `python3` instead of the exact forced node-gyp interpreter.
- Correction: the prepared builder explicitly installs distro-signed `which`, and Linux provenance
resolves and hashes `NODE_GYP_FORCE_PYTHON` (`/usr/bin/python3.9`) rather than a generic alias.
The focused toolchain/workflow suite passes 15/15 and asserts both contracts.
- Oracle proved: artifact compilation alone is insufficient; missing or inaccurate toolchain
identity fails the build before any candidate is copied.
- Does not prove: a complete first build, a second equal build, runtime smoke, baseline execution,
native runner behavior, kernel 4.18, or any enabled tuple.
### E-M3-LINUX-BASELINE-LOCAL-GREEN-001 — Corrected x64 bytes pass the oldest Linux userland
- Date: 2026-07-14
- Owner: Codex implementation owner
- Source: uncommitted local WP2 correction at Git HEAD
`775f2cbcc7f66f6e728fa06ae2d6822edd50f7b0`; the artifact-affecting correction was subsequently
committed as `0cb3f7510`, while later fail-closed artifact-selection, `ldd` stderr, and test-cleanup
hardening did not change built bytes. This remains unpublished local evidence only.
- Runner/environment: local macOS arm64 controller, Docker 29.2.1, Docker Desktop bounded
`linux/amd64` emulation. Build base and separate baseline image:
`docker.io/library/rockylinux@sha256:2d05a9266523bbf24f33ebc3a9832e4d5fd74b973c220f2204ca802286aa275d`;
corrected builder image
`sha256:9c32993d7a91557657593ae8258568a71f9832b0ce7c8824a1229b939ef49968`.
Compilation used glibc 2.28, libstdc++.so.6.0.25, GCC 8.5.0, Python 3.9.25, GNU Make 4.2.1,
GNU strip 2.30, distro Node 20.20.2 as controller, and verified bundled Node v24.18.0.
- Build command:
```bash
repo=$PWD
root=/private/tmp/orca-8450-linux-floor-build-v6
docker run --rm --platform linux/amd64 --network none --read-only --cap-drop all \
--security-opt no-new-privileges --pids-limit 512 --memory 6g --cpus 4 \
--tmpfs /tmp:rw,nosuid,size=1g \
--mount type=bind,src=/private/tmp/orca-8450-linux-floor-build/workspace,dst=/workspace \
--mount type=bind,src=$repo/node_modules,dst=/workspace/node_modules,readonly \
--mount type=bind,src=$repo/config/scripts,dst=/workspace/config/scripts,readonly \
--mount type=bind,src=/private/tmp/orca-8450-linux-floor-build/inputs,dst=/inputs,readonly \
--mount type=bind,src=$root,dst=/evidence \
--workdir /workspace orca-ssh-relay-linux-builder:local-x64-python39 \
/usr/bin/time -v /usr/bin/node \
config/scripts/ssh-relay-runtime-linux-build-evidence.mjs \
--tuple linux-x64-glibc --inputs-directory /inputs \
--output-root /evidence/output --work-directory /evidence/work \
--evidence-directory /evidence/verified --source-date-epoch 1784069324 \
--git-commit 775f2cbcc7f66f6e728fa06ae2d6822edd50f7b0
```
- Build result: PASS in 6 minutes 48.16 seconds with 694,196 KiB peak RSS. Both complete builds
produced content ID `fc63ca342a5990f460ec6d72262a8542173dab20ce03c9b9cfb755b1c6057e6d`
and byte-identical 29,268,776-byte archive SHA-256
`8f9095d1017fda387d66762ca6ccdd10a05d0138ff1b4ca6835d4b2a6eb7be83`.
Reproducibility compared 54 entries, 38 files, and 154,157,598 bytes. First/second build durations
were 256,687.12/127,672.46 ms; verifier durations were 9,541.30/5,525.82 ms. Both smokes reported
Node v24.18.0, modules ABI 137, PTY exit 23 after resize to 101x37, the required five watcher
events, 377.22/378.81 ms smoke duration, and 58,380,288/58,052,608 RSS bytes.
- Verified metadata SHA-256 values: identity
`edc57658e5d245b4652f4418a70f0b8a519d287ab570ceac582ba6ead0221715`, SPDX
`a7b58dc14ea671c60d5111eb9ade8141e502a4562161ed540b4de75f9703346b`, and provenance
`c19086b3fb511cca04a31311d6677df58f47d0f10d91e30b180b88b6775b839d`.
- Separate boundary/baseline commands:
```bash
repo=$PWD
root=/private/tmp/orca-8450-linux-floor-build-v6
runtime=$root/baseline-runtime
archive=orca-ssh-relay-runtime-v1-linux-x64-glibc-fc63ca342a5990f460ec6d72262a8542173dab20ce03c9b9cfb755b1c6057e6d.tar.xz
identity=orca-ssh-relay-runtime-linux-x64-glibc.identity.json
mkdir $runtime
tar -xJf $root/verified/$archive -C $runtime
docker run --rm --platform linux/amd64 --network none --read-only --cap-drop all \
--security-opt no-new-privileges --pids-limit 128 --memory 1g --cpus 2 \
--tmpfs /tmp:rw,nosuid,size=64m \
--mount type=bind,src=$repo/config/scripts,dst=/workspace/config/scripts,readonly \
--mount type=bind,src=$repo/node_modules,dst=/workspace/node_modules,readonly \
--mount type=bind,src=$root/verified,dst=/evidence,readonly \
--mount type=bind,src=$runtime,dst=/runtime,readonly \
--workdir /workspace orca-ssh-relay-linux-builder:local-x64-python39 \
/runtime/bin/node config/scripts/verify-ssh-relay-runtime.mjs \
--runtime-directory /runtime --identity /evidence/$identity --archive /evidence/$archive
image=docker.io/library/rockylinux@sha256:2d05a9266523bbf24f33ebc3a9832e4d5fd74b973c220f2204ca802286aa275d
docker run --rm --platform linux/amd64 --network none --read-only --cap-drop all \
--security-opt no-new-privileges --pids-limit 128 --memory 1g --cpus 2 \
--tmpfs /tmp:rw,nosuid,size=64m \
--mount type=bind,src=$repo/config/scripts,dst=/workspace/config/scripts,readonly \
--mount type=bind,src=$runtime,dst=/runtime,readonly --workdir /workspace $image \
/runtime/bin/node config/scripts/ssh-relay-runtime-smoke-child.cjs /runtime
docker run --rm --platform linux/amd64 --network none --read-only --cap-drop all \
--security-opt no-new-privileges --pids-limit 128 --memory 1g --cpus 2 \
--tmpfs /tmp:rw,nosuid,size=64m \
--mount type=bind,src=$repo/config/scripts,dst=/workspace/config/scripts,readonly \
--mount type=bind,src=$runtime,dst=/runtime,readonly --workdir /workspace $image \
/runtime/bin/node config/scripts/ssh-relay-runtime-baseline.mjs \
--tuple linux-x64-glibc --scope linux-userland --runtime-directory /runtime
```
- Boundary/baseline result: PASS. Fresh archive/tree verification matched 49 entries, 34 files,
124,846,430 expanded bytes, and the exact content ID; smoke took 280.64 ms at 58,208,256 RSS
bytes. The separate unmodified Rocky base smoke took 438.55 ms at 58,908,672 RSS bytes. The
baseline evaluator returned `qualified: true` for platform x64, glibc 2.28, and libstdc++ 6.0.25,
with explicit residual gap `kernel`: observed shared Docker kernel 6.12.72-linuxkit versus required
4.18.
- Oracle proved: corrected x64 artifacts can be built twice without egress in the oldest declared
Linux userland, remain byte-identical, pass archive/tree/Node/PTY/watcher checks, and execute in an
unmodified glibc 2.28/libstdc++ 6.0.25 userland.
- Does not prove: a target-native x64 runner, native arm64, exact kernel 4.18, SSH transfer/install,
native trust, release aggregation, packaged desktop use, fallback, performance against legacy, or
an enabled tuple.
- Follow-up: push the exact correction to draft PR #8741, require the native x64 and arm64 build and
supplemental userland cells to pass, audit the downloaded artifacts, and retain the kernel 4.18
and native-trust blockers.
### E-M3-LINUX-BUILDER-LOCAL-VALIDATION-001 — Corrected WP2 source gates pass locally
- Date: 2026-07-14
- Owner: Codex implementation owner
- Source: the same uncommitted WP2 source and Git HEAD as
E-M3-LINUX-BASELINE-LOCAL-GREEN-001.
- Commands:
```bash
pnpm exec vitest run --config config/vitest.config.ts config/scripts/ssh-relay-*.test.mjs
pnpm run typecheck
pnpm run lint
pnpm run check:max-lines-ratchet
pnpm exec oxfmt --check \
.github/workflows/ssh-relay-runtime-artifacts.yml \
config/ssh-relay-runtime-linux-builder.Containerfile \
config/scripts/build-ssh-relay-runtime.mjs \
config/scripts/ssh-relay-linux-node-gyp-compiler.mjs \
config/scripts/ssh-relay-linux-node-gyp-compiler.test.mjs \
config/scripts/ssh-relay-runtime-baseline.mjs \
config/scripts/ssh-relay-runtime-baseline.test.mjs \
config/scripts/ssh-relay-runtime-compatibility.mjs \
config/scripts/ssh-relay-runtime-linux-build-evidence.mjs \
config/scripts/ssh-relay-runtime-linux-build-evidence.test.mjs \
config/scripts/ssh-relay-runtime-toolchain.mjs \
config/scripts/ssh-relay-runtime-toolchain.test.mjs \
config/scripts/ssh-relay-runtime-tree.mjs \
config/scripts/ssh-relay-runtime-workflow.test.mjs \
docs/reference/plans/2026-07-14-ssh-relay-github-release-implementation-checklist-summary.md \
docs/reference/plans/2026-07-14-ssh-relay-github-release-implementation-checklist.md \
docs/reference/plans/2026-07-14-ssh-relay-github-release-plan.html
git diff --check
```
- Result: PASS. The expanded focused suite passed 22 files/100 tests. Typecheck passed. Lint passed
with only existing unrelated repository warnings; its reliability, max-lines, bundled-skill,
localization-catalog, and localization-coverage sub-gates all passed. The direct max-lines ratchet
passed with 355 grandfathered suppressions and no new bypass. Focused formatting and
`git diff --check` passed.
- Runner detail: local macOS arm64 shell used Node v26.0.0 and pnpm 10.24.0, which emitted the
expected package-engine warning because repository CI requires Node 24. Draft-PR jobs install
exact Node 24.18.0 and remain the qualifying contract cells.
- Does not prove: GitHub workflow parsing/execution, native x64/arm64 builds, oldest kernel 4.18,
native signing/trust, SSH transfer/install, or any enabled tuple.
- Follow-up: commit this evidence update, push both reviewable commits, and audit every draft-PR job
and downloaded artifact before closing any runner-backed cell.
## Accepted Gaps
No product gap is accepted merely because it appears in this list. Each entry requires explicit
@@ -1137,6 +1137,25 @@
Rosetta SSH cell. These are selector eligibility constraints, not tuple enablement;
every candidate still needs the complete two-layer evidence.
</p>
<p>
Implementation evidence on 2026-07-14 rejected Linux native modules built directly on
Ubuntu 24.04: the resulting <code>pty.node</code> required <code>GLIBC_2.32</code> and
<code>GLIBC_2.34</code> and could not load in the declared glibc 2.28 userland. Linux
native modules must therefore be compiled and smoked in the digest-pinned oldest
glibc/libstdc++ userland on the tuple-native architecture. A later baseline-container
test cannot repair bytes built against a newer ABI, and that userland proof still
leaves the exact kernel 4.18 cell open.
</p>
<p>
The prepared Rocky 8 builder pins Python 3.9 because node-gyp 12 cannot run under the
distribution's default Python 3.6. GCC 8 uses the draft spelling
<code>gnu++2a</code> for the C++20 mode requested by Node v24's build headers, so the
Linux-only build step must replace exactly one <code>-std=gnu++20</code> occurrence in
the already verified, extracted <code>common.gypi</code> and fail closed on any other
count. This build-header compatibility step never changes bundled Node bytes, does not
apply to macOS or Windows, and avoids introducing a newer libstdc++ dependency;
complete native-module smoke and ABI inspection remain mandatory proof.
</p>
<p>
Windows target-native native-module builds use three immutable inputs authenticated by
that same signed checksum document: the tuple's official Node ZIP, the exact-version
@@ -1777,8 +1796,10 @@
<article class="risk">
<strong>Linux baseline mismatch</strong>
<p>
Build against the oldest supported glibc and libstdc++ baseline; run on that exact
baseline before promotion.
Build native modules in the oldest supported glibc and libstdc++ userland on the
tuple-native architecture; run the complete runtime there, then separately run on
the exact oldest kernel before promotion. Reject newer-userland producer output even
when it smokes successfully on the producer runner.
</p>
</article>
<article class="risk">