Skip to content

vms-c1f: stage DECNETD.EXE so the DECnet CTERM auth proof hard-gates VAX + Alpha - #1099

Merged
baron-3dl merged 2 commits into
mainfrom
work/vms-c1f
Sep 10, 2026
Merged

vms-c1f: stage DECNETD.EXE so the DECnet CTERM auth proof hard-gates VAX + Alpha#1099
baron-3dl merged 2 commits into
mainfrom
work/vms-c1f

Conversation

@baron-3dl

Copy link
Copy Markdown
Contributor

Summary

  • Stages DECNETD.EXE onto the VAX sysvol (tests/lab-vax/stage_sysvol.sh + run-boot.sh's build_boot_image_set, which now cross-builds it via cmake --target decnetd_exe) and the Alpha boot image (tools/cross-alpha/build-alpha-bootimage.sh), matching how x86_64 already ships it (distro/Dockerfile.bootable).
  • Flips the shared DCL/SHOW acceptance battery's DECnet CTERM (vms-f40) and NETACP isolation (vms-9ab) sections from "emit a note, assert nothing" to a HARD GATE (bad, not note) on all three rails when DECNETD.EXE is absent — closes an INV-6 hole (a shipped facility whose runtime couldn't prove it).
  • Corrects the stale distro/Dockerfile.bootable comment claiming DECNETD.EXE "needs the netbsd-vax userspace port" — its datalink goes only through src/libdatalink's scs_datalink_* abstraction, which already ships both the AF_PACKET (x86_64/Alpha) and NetBSD bpf(4) (VAX) backends.
  • Adds DECNETD.EXE to both rails' hard content gates (mastered-volume presence checks) for defense in depth.
  • FAL's own auth proof (--fal-accept-test, vms-8c2/vms-8c2: DECnet Phase IV file COPY (FAL/DAP) — object-17 server + DAP codec + COPY client #1096) is not yet in the battery — vms-8c2: DECnet Phase IV file COPY (FAL/DAP) — object-17 server + DAP codec + COPY client #1096 had not merged as of this PR. Left a scope-note comment: once it lands, a FAL section needs no rail-staging work of its own (DECNETD.EXE is already staged everywhere) — just follow the same bad-not-note shape.

Proof-run evidence (rd vms-c1f DONE-VERIFY, ground-source, no mock)

Fired gh workflow run ci.yml --ref work/vms-c1f (plain workflow_dispatch — runs every heavy-emulator-tier job including vax-dcl-acceptance and alpha-dcl-acceptance, which only run on schedule || workflow_dispatch, never on pull_request). Run numbers and the VAX/Alpha CTERM verdict will be added as a PR comment once the run completes (vax-dcl-acceptance: 180min timeout; alpha-dcl-acceptance: 120min timeout).

Test plan

  • vax-dcl-acceptance job: DECnet CTERM section asserts PASS (real $CREPRC/LOGINOUT/RTAn: auth proof over the booted SIMH VAX rail) — or reds honestly with the exact substrate gap if one exists.
  • alpha-dcl-acceptance job: same, over qemu-system-alpha.
  • Both rails' mastered-volume content gates confirm DECNETD.EXE present.
  • No PR-tier (fast) job regresses.

Do not merge — the release-conductor reaps on green.

🤖 Generated with Claude Code

https://claude.ai/code/session_01T4csyFSMUsS8k1D2MgMxk2

@baron-3dl

Copy link
Copy Markdown
Contributor Author

Alpha proof-run result (rd vms-c1f DONE-VERIFY)

Fired gh workflow run ci.yml --ref work/vms-c1f → run 34411832875.

alpha-dcl-acceptance (job 102667831318): DECnet CTERM + NETACP isolation sections PASSED CLEAN on the booted qemu-system-alpha rail —

DECNETD-I-CTERMACCEPT, 13 passed, 0 failed
DECNETD-CTERM-ACCEPT: PASS
DECNETD-I-ISOLATION, 4 passed, 0 failed
DECNETD-ISOLATION: PASS

An inbound SET HOST to object 42 reached an AUTHENTICATED LOGINOUT via $CREPRC on an executive-minted RTAn: over Alpha's real /dev/vms executive, every bad credential set was refused (unknown account, wrong password, DISUSER-with-correct-password), and the A2/A8 NETACP privileged-path isolation seam held. This is the target proof of vms-c1f, hard-gated and green.

The job's overall exit code is still 1 — but from an unrelated, pre-existing gate: golden_diff vax-show-cpu (tests/qemu/lib/dcl_acceptance_battery.sh:952, landed in #952/fffce3d4, predates this PR) hard-fails with "surface/tooling not found" on every rail whose name isn't vax, because it never checks the oracle surface's own ARCH=vax field before treating an arch-scoped surface as globally required. Filed as vms-e70 (not fixed here — out of scope for vms-c1f, and this PR touches none of that code).

vax-dcl-acceptance is still running (SIMH boot + full battery, up to 180min cap) — will report separately when it concludes.

🤖 Generated with Claude Code

@baron-3dl

Copy link
Copy Markdown
Contributor Author

VAX proof-run result — BOTH target rails now confirmed green

vax-dcl-acceptance (job 102673953977, real SIMH boot of OVMX/NetBSD-vax): DECnet CTERM + NETACP isolation PASSED CLEAN, matching Alpha —

DECNETD-I-CTERMACCEPT, 13 passed, 0 failed
DECNETD-CTERM-ACCEPT: PASS
DECNETD-I-ISOLATION, 4 passed, 0 failed
DECNETD-ISOLATION: PASS

DECNETD.EXE cross-built (cmake --target decnetd_exe under the vax toolchain) and staged onto the mastered sysvol; the inbound SET HOST reached an AUTHENTICATED LOGINOUT via $CREPRC on an executive-minted RTAn: over the real SIMH VAX substrate, every bad credential was refused, and the A2/A8 isolation seam held. Both target rails (VAX + Alpha) now hard-gate green — x86_64 was already green pre-PR.

The job's overall exit code is still 1, from 7 unrelated, pre-existing battery assertions — all one root cause: the shared battery hardcodes the device name VDA0: (assuming virtio-style naming universally), but the real SIMH VAX rail's faithful native disk name is DUA0: — confirmed directly from the executive's own SHOW DEVICES output in this run: DUA0: Mounted 0 OVMXSYS 127870 0 1 (genuinely mounted, real free-block count). The device naming is correct and faithful; the battery's hardcoded expectation is wrong for this rail. Filed as vms-c8d — not fixed here, out of scope for vms-c1f, unrelated to DECnet.

Summary

Rail CTERM (vms-f40) NETACP isolation (vms-9ab)
x86_64 ✅ (pre-existing) ✅ (pre-existing)
Alpha ✅ confirmed this run ✅ confirmed this run
VAX ✅ confirmed this run ✅ confirmed this run

Two unrelated pre-existing gaps found and filed while proving this (not fixed here): vms-e70 (golden_diff vax-show-cpu has no arch guard, reds alpha-dcl-acceptance) and vms-c8d (battery hardcodes VDA0: device name, wrong on the VAX rail's native DUA0: naming).

Ready for the release-conductor to reap.

🤖 Generated with Claude Code

baron-3dl and others added 2 commits September 10, 2026 02:46
…proof hard-gates all three rails

The DCL/SHOW acceptance battery's DECnet CTERM (vms-f40) and NETACP
isolation (vms-9ab) sections were an honest "emits a note, asserts
nothing" gap on the VAX and Alpha rails: DECNETD.EXE was in the x86_64
shipped image set and the vax ovmx-images CMake aggregate, but was
never staged onto the runtimes those two rails actually boot for
acceptance, so the auth proof never ran there.

- tests/lab-vax/stage_sysvol.sh: DECNETD.EXE joins the VAX sysvol's
  BOOT_IMAGES list.
- tests/lab-vax/run-boot.sh: build_boot_image_set() (feeds
  stage_sysvol.sh for the acceptance/sysboot-single runtime) now also
  cross-builds DECNETD.EXE via `cmake --build --target decnetd_exe`
  under the vax toolchain, and master_system_volume()'s hard content
  gate now requires it on the mastered volume.
- tools/cross-alpha/build-alpha-bootimage.sh: DECNETD.EXE joins the
  Alpha boot image's staged SYSEXE set and its mastered-ODS-2 content
  gate (it already cross-builds via the unconditional vmsdecnet CMake
  subdirectory; Alpha is Linux-ABI, so it links against libdatalink's
  AF_PACKET backend, same as x86_64).
- distro/Dockerfile.bootable: corrected the stale ~line-636 comment
  claiming DECNETD.EXE "needs the netbsd-vax userspace port" -- its
  datalink goes only through src/libdatalink's scs_datalink_*
  abstraction, which already ships both backends this facility needs.
- tests/qemu/lib/dcl_acceptance_battery.sh: flipped both sections'
  "DECNETD.EXE absent" branch from `note` (asserts nothing) to `bad`
  (hard FAIL) on all three rails -- the note path is now unreachable
  in normal operation; if a staging regression ever drops the image
  off a rail again, the battery reds instead of silently passing
  (INV-6). Left a scope note that FAL's auth proof (#1096, not yet
  merged) needs no rail-staging work of its own once it lands.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T4csyFSMUsS8k1D2MgMxk2
…TD.EXE stage-list add

stage_sysvol.sh's BOOT_IMAGES now requires DECNETD.EXE (previous commit),
which broke two callers that fed it an images-dir without one:

- tests/integration/test_sysvol_master_vax.sh: the host ctest synthesizes
  stand-in .EXE images and never included DECNETD.EXE, so stage_sysvol.sh
  died "boot image missing from images dir" (caught by CI: Build & Test
  -> sysvol_master_vax FAILED). Added a DECNETD.EXE stand-in + its
  round-trip/byte-exact assertions, matching the other four.
- tests/lab-vax/run-boot.sh build_vax_images() (the install mode's
  VAX_IMAGES_DIR, feeding stage_sysvol.sh --distribution for the
  distribution volume): added DECNETD.EXE to both the `need` list and the
  copied-out image set from the ovmx-images cmake aggregate, which already
  builds it.

Verified locally: built vmsfs_master via `cmake --build --target
vmsfs_master`, ran test_sysvol_master_vax.sh directly -- ALL PASS.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T4csyFSMUsS8k1D2MgMxk2
@baron-3dl
baron-3dl merged commit ef44708 into main Sep 10, 2026
229 of 244 checks passed
@baron-3dl
baron-3dl deleted the work/vms-c1f branch September 10, 2026 04:59
baron-3dl added a commit that referenced this pull request Sep 10, 2026
…cated SET HOST (hard-gated x86_64+Alpha+VAX)

Version bump (identity + os-release in step, INV-1 SSOT gate). V0.6-13 ships:
- DECnet Phase IV file COPY (FAL/DAP): object-17 FAL server + DAP codec + COPY
  client, authenticated against the real SYSUAF/Purdy with RMS-over-ACP transfer,
  byte-verified both directions (#1096, vms-8c2).
- The authenticated inbound SET HOST -> LOGINOUT proof is now a HARD GATE on all
  three rails: DECNETD.EXE staged onto the VAX sysvol + Alpha boot image, so
  DECNETD-CTERM-ACCEPT + DECNETD-ISOLATION assert+PASS on x86_64 + Alpha + VAX —
  the login frontier is substrate-agnostic (#1099, vms-c1f).
- DECnet Phase IV configuration + usage guide (#1097, vms-30e).
- Compatibility-register honesty: cluster-dlm evidence repointed off deleted
  src/vmsscs paths to the executive-resident src/kernel-core, and the 4 cluster-dlm
  rows whose multi-node /dev/vms proof was retired in #1052 downgraded
  verified->implemented (#1100/#1101; multi-node proof re-establishment gated in
  vms-1ee).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018q4jvj6GCkdbYjRvpy7Vwu
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.

1 participant