Skip to content

vms-f16: define missing conformance constants (TRUE/FALSE + 28 others) - #424

Merged
baron-3dl merged 1 commit into
mainfrom
vms-f16-conformance-constants
Aug 13, 2026
Merged

baron-3dl merged 1 commit into
mainfrom
vms-f16-conformance-constants

Conversation

@baron-3dl

Copy link
Copy Markdown
Contributor

Closes the missing_constant gap from docs/conformance-gap-report.md §3.3 (vms-801.4 baseline): $-namespaced constants the Eight-Cubed VMS C corpus assumes ambient but OVMX defined nowhere. TRUE/FALSE alone touch 24 corpus programs; the full set unblocks the constant dimension for the 28 programs the report tracks (most also carry other blockers — missing functions/headers — so this closes the constant errors, not necessarily run-pass).

30 constants defined across 8 headers

Header Constants
ssdef.h TRUE/FALSE (guarded) + 13 SS$_ SYSTEM-facility codes
rmsdef.h RMS$_ACC_RUJ, RMS$_JNLNOTAUTH
rms/xab.h XAB$C_ITM, XAB$K_ITMLEN, XAB$K_SETMODE (+ XAB$K_SENSEMODE)
chpdef.h CHP$M_OBSERVE, CHP$M_ALTER
issdef.h ISS$C_ID_NATURAL
prcdef.h SYI$_MAX_CPUS, SYI$_ACTIVE_CPU_BITMAP, SYI$_AVAIL_CPU_BITMAP
rms/fab.h FAB$M_ASY, FAB$M_RU, FAB$M_UFO
ossdef.h OSS$M_RELCTX

Grounding (clean-room Rule 8)

Every VMS-authentic value was pinned by assembling the public $SSDEF/$RMSDEF/$XABDEF/$XABITMDEF/$CHPDEF/$ISSDEF macros as a module of GLOBAL symbols and reading the exact defined longword out of the object's GSD with ANALYZE/OBJECT/GSD — documented tool output, no disassembly. SS$_ (11 codes), RMS$_, XAB$, CHP$M, ISS$C from OpenVMS VAX V7.3 (lab-2 node VAX1); SS$_EXITFORCED and SS$_LOWPREC (absent in VAX V7.3 $SSDEF) from OpenVMS Alpha V8.4 (lab-Alpha node ALPHA1). Anchors SS$_NORMAL=1, SS$_ACCVIO=12, RMS$_EOF=98938, XAB$C_KEY=21 verified in the same dumps; SS$_ACCVIO=12 matched on both architectures (SYSTEM facility is architecture-invariant). Each value is cited in-comment.

The oracle showed SYI$_ item codes, FAB$L_FOP mask bits, and OSS$M_ flags already use OVMX-private numbering in the existing headers, so authentic values would collide with existing OVMX bits. Those three families are defined as OVMX-private continuations and labeled as design choices, not VMS-authentic values.

Test

tests/libvms/test_conformance_constants.c pins every value with compile-time _Static_asserts (drift fails the build), mirroring vms-982's test_lock_flag_bits.c. Registered as ctest test_libvms_conformance_constants.

Full ctest: 161/161 pass, exit 0 (the flaky env_identity_census / userspace_service_register self-recovered on retry; known vms-3f9).

Deferred (not invented — empirical-not-gate)

  • LIB$M_CLI_CTRLT: defined only in the DEC C <libclidef.h> header (VSI source); not present in the MACRO-32 definition libraries the oracle can dump (STARLET.MLB has no match; neither $LIBCLIDEF nor $LIBDEF emits it), and copying it from the .H is not permitted under Rule 8. Documented in libclidef.h.
  • SIGUSR1: a POSIX signal from <signal.h> (confirmed available), not a VMS macro; corpus sys_sigprc.c merely omits #include <signal.h>. Not an OVMX header gap.

Finding (out of scope, needs a separate bead)

The RMS$_ oracle dump shows several existing rmsdef.h values disagree with real VMS V7.3: RMS$_ACC is 114690 (not 98826), RMS$_CRE 114698, RMS$_RNF 98994, RMS$_RTB 98728. Flagged in rmsdef.h; correcting them has blast radius across RMS callers.

🤖 Generated with Claude Code

Closes the missing_constant gap from docs/conformance-gap-report.md §3.3:
constants the Eight-Cubed VMS C corpus assumes but OVMX defined nowhere.

30 constants defined across 8 headers:
  - ssdef.h:  TRUE/FALSE (DEC C convention) + 13 SS$_ SYSTEM-facility codes
  - rmsdef.h: RMS$_ACC_RUJ, RMS$_JNLNOTAUTH (journaling)
  - rms/xab.h: XAB$C_ITM, XAB$K_ITMLEN, XAB$K_SETMODE (+ XAB$K_SENSEMODE)
  - chpdef.h: CHP$M_OBSERVE, CHP$M_ALTER (alias READ/WRITE)
  - issdef.h: ISS$C_ID_NATURAL
  - prcdef.h: SYI$_MAX_CPUS, SYI$_ACTIVE_CPU_BITMAP, SYI$_AVAIL_CPU_BITMAP
  - rms/fab.h: FAB$M_ASY, FAB$M_RU, FAB$M_UFO (FAB$L_FOP)
  - ossdef.h: OSS$M_RELCTX

GROUNDING (clean-room Rule 8): every VMS-authentic value was pinned by
assembling the public $SSDEF/$RMSDEF/$XABDEF/$CHPDEF/$ISSDEF macros as GLOBAL
symbols and reading the exact defined longword from the object GSD via
ANALYZE/OBJECT/GSD -- documented tool output, no disassembly. SS$_ (11 codes),
RMS$_, XAB$, CHP$M, ISS$C from OpenVMS VAX V7.3 (lab-2); SS$_EXITFORCED and
SS$_LOWPREC (absent on VAX) from OpenVMS Alpha V8.4 (lab-Alpha). Anchors
SS$_NORMAL=1, SS$_ACCVIO=12, RMS$_EOF=98938, XAB$C_KEY=21 verified in the same
dumps; SS$_ACCVIO=12 matched on both architectures.

The oracle showed SYI$_/FAB$L_FOP/OSS$M_ already use OVMX-PRIVATE numbering in
the existing headers, so the authentic values would collide with existing OVMX
bits; those three families are defined as OVMX-private continuations and
labeled as design choices, NOT VMS-authentic values.

Test: tests/libvms/test_conformance_constants.c pins every value with
compile-time _Static_asserts (drift fails the build), mirroring vms-982's
test_lock_flag_bits.c. Full ctest: 161/161 pass, exit 0.

DEFERRED (not invented, per empirical-not-gate):
  - LIB$M_CLI_CTRLT: defined only in the DEC C <libclidef.h> header (VSI
    source); not in the MACRO-32 libraries the oracle can dump, and copying it
    from the .H is not permitted under Rule 8. Documented in libclidef.h.
  - SIGUSR1: a POSIX signal from <signal.h>, not a VMS macro; corpus program
    sys_sigprc.c merely omits #include <signal.h>. Not an OVMX header gap.

FINDING (not fixed here, out of scope): the RMS$_ oracle dump shows several
EXISTING rmsdef.h values are wrong vs real VMS V7.3 (RMS$_ACC=114690 not 98826,
RMS$_CRE=114698, RMS$_RNF=98994, RMS$_RTB=98728). Noted in rmsdef.h; needs a
separate correction bead (blast radius across RMS callers).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@baron-3dl
baron-3dl merged commit 7901d31 into main Aug 13, 2026
60 checks passed
baron-3dl added a commit that referenced this pull request Aug 13, 2026
…#433)

The RMS$_ error/success/info condition values in rmsdef.h had been
synthesised as arithmetic +8 sequences and never grounded to a VMS
oracle -- a vms-purity (Rule 10/11) violation. 74 of the 83 defines
disagreed with real OpenVMS VAX V7.3.

Independently verified and corrected against the authoritative oracle:
lab-2 replica vaxlab-2 (node vax1, OpenVMS VAX V7.3). Method (clean-room
Rule 8, exactly as vms-f16 #424): assemble the PUBLIC $RMSDEF macro as a
module of GLOBAL symbols (MACRO/OBJECT) and read each defined longword
out of the object GSD with ANALYZE/OBJECT/GSD (ANALYZ V07-04, documented
tool output -- no disassembly). 267 RMS$_ symbols were dumped.

The four values named in the item, confirmed in the dump:
  RMS$_ACC 98826->114690 (%X'0001C002')
  RMS$_CRE 98834->114698 (%X'0001C00A')
  RMS$_RNF 98986->98994  (%X'000182B2')
  RMS$_RTB 99108->98728  (%X'000181A8')
plus 70 more (BKZ, BLN, BUG, CCR, CHG, COD, CRE_STM, CREATED, CUR, DAC,
DAN, DEL, DIR, DME, DNF, DUP, ESS, EXT, FAB, FAC, FEX, FILEPURGED, FLK,
FNM, IAN, IFI, IMX, IOP, ISI, KEY, KRF, KSZ, MKD, MRN, NAM, NEF, NMF,
OK_ALK/DEL/DUP/LIM/NOP/RLK/RRL/WAT, ORG, PLG, PRV, RAB, RAC, RAT, RER,
REX, RFM, RLK, RNL, RPL, RSS, RSZ, SEQ, SHR, SIZ, SUPERSEDE, SYN, TNS,
TRE, TYP, WCC, WER, WPL). Wrong aliases were split to their distinct
oracle values (KEY!=EOF, DNF!=RNL, SHR!=WER, RAB!=NAM, PLG!=WPL).

Anchors NORMAL=65537, EOF=98938, FNF=98962 matched the existing header
in the same dump. Success/failure parity (bit 0) is preserved for all
74 -- no RMS$SUCCESS/RMS$FAILURE control flow changes.

Two symbols absent from the V7.3 $RMSDEF dump -- RMS$_BSZ (98858) and
RMS$_OK_RRV (98865) -- are left unchanged and labelled UNGROUNDED.

Blast radius: every RMS consumer in the tree uses the SYMBOL, not a
literal; no code hardcodes any of the old numeric values (swept whole
tree). All corrected values are now pinned at compile time by 81
_Static_asserts in test_conformance_constants.c (plus 2 drift-guards
for the ungrounded pair).

Tests: full ctest 165/165 pass, 0 fail. Native-link graph
(OVMX_LINK_NATIVE, x86_64 musl) reproduced: 9 LINK.EXE artifacts, all
EM_X86_64, zero DT_NEEDED.

Co-authored-by: alice <alice@workspace.local>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
baron-3dl added a commit that referenced this pull request Aug 13, 2026
#445)

Bump OVMX_PRODUCT_VERSION V0.4 → V0.4-1. 24 PRs / 32 commits since V0.4,
packed across dimensions (point release toward the 0.5 milestone):

  self-host (R7)  #409 lib$tparse · #411 CLI$ compiled-CLD · #413 sys$setddir
                  #414 lib$get_foreign · #415 sys$filescan (RTL foundation)
                  #418 parse_tables.mar→C (spine #2) · #429 LIBRARIAN.EXE+.OLB (spine #3)
                  #435 shareable-vector freeze (GSMATCH stability)
  authenticity    #421 veracity rubric (Q1 oracle-source/Q2 real-inject) · #424 30 oracle-pinned constants
                  #433 rmsdef.h 74 fabricated RMS codes → oracle
  UX/DCL/RMS      #422 SHOW CLUSTER real membership · #441 DCL per-@-level local scope
                  #442 RMS XAB dates → VMS 1858-epoch quadword
  networking      #419 virtio NIC (user-mode default + opt-in tap/bridge)
  docs            #423 clustering release train
  + swept: other threads' merged work on main since V0.4

Clustering config-authoring UX (vms-098) + its public-manual grounding gate
remain 0.5 (minor) deliverables — not triggered by this point cut.

Co-authored-by: alice <alice@workspace.local>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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