Skip to content

NODEOS-001: reproducible Haswell/Pascal appliance bootstrap - #1

Merged
Hazy142 merged 3 commits into
mainfrom
codex/nodeos-001-bootstrap
Sep 21, 2026
Merged

Hazy142 merged 3 commits into
mainfrom
codex/nodeos-001-bootstrap

Conversation

@Hazy142

@Hazy142 Hazy142 commented Sep 21, 2026

Copy link
Copy Markdown
Owner

NODEOS-001

Implements the first reproducible NodeOS appliance path for the i7-4770K + GTX 1070 Ti target.

Included

  • pinned Buildroot 2026.08 / verified release commit
  • x86_64 UEFI/GRUB2 disk-image profile
  • glibc + Linux 6.12.47 baseline
  • NodeOS BR2_EXTERNAL tree and custom node-agent package
  • direct-LAN baseline (192.168.77.2/30 ↔ 192.168.77.1/30)
  • CPU/RAM/NIC/NVIDIA PCI inventory
  • fail-closed DISCOVERED → READY state transition
  • physical CUDA smoke probe source for sm_61
  • digest-bound NVIDIA vendor-payload boundary
  • artifact SHA-256 evidence generation
  • NODEOS-001 bring-up/acceptance runbook
  • CI contract gate including a real Buildroot defconfig/olddefconfig validation

Claim boundary

This establishes a reproducible boot/build/control substrate. A physical NODEOS-001 PASS still requires booting the generated image on the Haswell/GTX 1070 Ti machine and supplying a verified proprietary NVIDIA driver/runtime payload so the sm_61 CUDA smoke gate can pass.

CI for the current head is green.

Copilot AI lite review requested due to automatic review settings September 21, 2026 14:23
@Hazy142
Hazy142 merged commit 73bc100 into main Sep 21, 2026
2 checks passed

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

The current payload verification and evidence-generation scripts have concrete correctness/security/performance issues (unmanifested payload files can slip through, large artifacts are hashed via full reads, and CUDA probe/version parsing can fail in non-actionable ways).

Get a fresh assessment by requesting another Copilot review.

Review effort: Lite
Findings: 1 High severity · 3 Medium severity

Open (4)
What changed in this PR

This PR establishes the first reproducible NodeOS “appliance bootstrap” path for the NODEOS-001 Haswell (i7‑4770K) + Pascal (GTX 1070 Ti) target, including a pinned Buildroot-based image build, a fail-closed CUDA readiness boundary, and CI contract checks to keep the substrate reproducible.

Changes:

  • Adds a pinned Buildroot 2026.08-based build workflow (defconfig + build script) that emits evidence-hashed artifacts.
  • Introduces a vendor-payload boundary for proprietary NVIDIA bits, plus a CUDA smoke probe and verification scripts.
  • Adds a NODEOS-001 bring-up runbook and a CI workflow gate validating layout/contracts and defconfig invariants.
File Description
vendor/​nvidia/​README.md Documents the proprietary NVIDIA payload boundary and expected overlay layout.
vendor/​nvidia/​manifest.example.json Example manifest format for digest-binding vendor payload contents.
tools/​cuda/​nodeos_cuda_probe.cu CUDA smoke probe source emitting JSON PASS/FAIL evidence.
scripts/​verify-nvidia-payload.py Verifies payload manifest schema/CC binding and file digests before overlaying.
scripts/​verify-layout.py CI gate ensuring required NODEOS-001 files exist and basic invariants hold.
scripts/​hash-artifacts.py Generates SHA-256 evidence JSON for produced build artifacts.
scripts/​build-nodeos.sh Builds the pinned Buildroot profile and emits artifacts/evidence.
scripts/​build-cuda-probe.sh Offline-build helper for the sm_61 CUDA probe binary.
README.md Updates top-level documentation to NODEOS-001 target + build instructions + CUDA boundary.
docs/​NODEOS-001-bringup.md NODEOS-001 acceptance/runbook checklist and direct-LAN baseline.
contracts/​nodeos-001-evidence-v1.schema.json Schema for build evidence JSON emitted by the build pipeline.
buildroot/​package/​nodeos-agent/​src/​nodeos-agent Minimal inventory/readiness agent emitting /run/nodeos/capability.json and /run/nodeos/ready.
buildroot/​package/​nodeos-agent/​nodeos-agent.mk Buildroot package definition for installing nodeos-agent.
buildroot/​package/​nodeos-agent/​Config.in Buildroot Kconfig entry for enabling nodeos-agent.
buildroot/​external.mk Includes external package .mk files for the BR2_EXTERNAL tree.
buildroot/​external.desc Declares the BR2_EXTERNAL tree name/description.
buildroot/​configs/​resonarch_haswell_gtx1070ti_defconfig Buildroot defconfig for the x86_64 EFI/GRUB2 disk image profile and required packages.
buildroot/​Config.in Top-level external-tree menu hooking in NodeOS package configs.
buildroot/​board/​resonarch/​haswell-gtx1070ti/​rootfs-overlay/​usr/​sbin/​nodeos-cuda-smoke Runtime CUDA readiness gate wrapper that records JSON output under /run/nodeos/.
buildroot/​board/​resonarch/​haswell-gtx1070ti/​rootfs-overlay/​etc/​nodeos/​nodeos.conf Default NodeOS config (static IP baseline, agent interval).
buildroot/​board/​resonarch/​haswell-gtx1070ti/​rootfs-overlay/​etc/​issue Appliance login banner text.
buildroot/​board/​resonarch/​haswell-gtx1070ti/​rootfs-overlay/​etc/​init.d/​S90nodeos-agent SysV init script launching the agent and maintaining a PID file.
buildroot/​board/​resonarch/​haswell-gtx1070ti/​rootfs-overlay/​etc/​init.d/​S20nodeos-net SysV init script configuring static IP or DHCP on first non-loopback interface.
buildroot/​board/​resonarch/​haswell-gtx1070ti/​post-build.sh Post-build hook that overlays vendor payload rootfs (if verified) and records manifest state.
buildroot/​board/​resonarch/​haswell-gtx1070ti/​linux-nodeos.fragment Kernel fragment enabling required modules/NICs and disabling nouveau.
.github/​workflows/​nodeos-001-contract.yml CI workflow validating repo layout/contracts, shell parsing, and defconfig olddefconfig gate.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +14 to +23
for entry in manifest.get("files", []):
path = root / entry["path"]
if not path.is_file():
raise SystemExit(f"payload file missing: {entry['path']}")
digest = hashlib.sha256(path.read_bytes()).hexdigest()
if digest != entry["sha256"]:
raise SystemExit(f"payload digest mismatch: {entry['path']}")
if not (root / "rootfs/usr/libexec/nodeos-cuda-probe").is_file():
raise SystemExit("payload must include rootfs/usr/libexec/nodeos-cuda-probe")
print("NODEOS NVIDIA payload: PASS")
Comment on lines +6 to +11
version_line="$(nvcc --version | grep 'release ' | tail -n1)"
major="$(printf '%s' "$version_line" | sed -n 's/.*release \([0-9][0-9]*\)\..*/\1/p')"
if [[ -z "$major" || "$major" -ge 13 ]]; then
echo "sm_61 offline compilation requires CUDA 12.x-or-older; found: $version_line" >&2
exit 1
fi
Comment thread scripts/hash-artifacts.py
Comment on lines +9 to +17
artifact_dir = Path(sys.argv[1]).resolve()
artifacts = []
for name in ("disk.img", "bzImage", "rootfs.ext2"):
path = artifact_dir / name
artifacts.append({
"name": name,
"bytes": path.stat().st_size,
"sha256": hashlib.sha256(path.read_bytes()).hexdigest(),
})
Comment on lines +35 to +40
const bool pass = host == 0x4e4f4445u;
std::printf(
"{\"schema\":\"resonarch.nodeos.cuda-smoke.v1\",\"status\":\"%s\","
"\"device\":\"%s\",\"compute_capability\":\"%d.%d\",\"word\":\"0x%08x\"}\n",
pass ? "PASS" : "FAIL", prop.name, prop.major, prop.minor, host);
return pass ? 0 : 1;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants