Skip to content

vms-dfa: RMS fills XABFHC/XABALL from the real ODS-2 FAT (facade-risk -> real) - #1049

Merged
baron-3dl merged 1 commit into
mainfrom
work/xab-fhc-all
Sep 2, 2026
Merged

vms-dfa: RMS fills XABFHC/XABALL from the real ODS-2 FAT (facade-risk -> real)#1049
baron-3dl merged 1 commit into
mainfrom
work/xab-fhc-all

Conversation

@baron-3dl

Copy link
Copy Markdown
Contributor

What

Compat register facade-risk → real for rms$xab_silent_unsupported (RMS, tier-1), plus xab$fhc / xab$all absent → implemented/real. A program chaining an XABFHC (file-header characteristics) or XABALL (allocation) onto its FAB and calling $OPEN/$DISPLAY got silence: rms_impl_display walked XABKEY/XABDAT/XABPRO and left any other cod untouched — so XAB$C_FHC (29) / XAB$C_ALL (20) returned the caller's zero-init struct while RMS reported RMS$_NORMAL. The structs weren't even defined.

Fix (INV-6 — from the real header over the executive ACP)

  • Define struct XABFHC / struct XABALL (+ cc$rms_xabfhc / cc$rms_xaball) in rms/xab.h, OVMX-native layout like the existing XABs.
  • Retain the FAT on the open handle at $OPEN: rms_acp_seed_handle now stores rfm/rat/lrl/ebk/ffb/mrz/dxq/gbc/verlimit/bkz alongside eof/hiblk, decoding at->recattr (the 32-byte ATR$C_RECATTR FAT) via struct ods2_recattr — exactly as rms_file_attr already does for DIRECTORY/F$FILE_ATTRIBUTES.
  • $DISPLAY fills the XABs from the retained handle fields — XABFHC (rfm, atr, lrl, hbk=hiblk, ebk, ffb, bkz, mrz, dxq, gbc, verlimit) and XABALL (alq=hiblk, bkz, deq). Driven by the open handle, not a POSIX stat, so it's correct on the ACP path. Create-time XABALL input controls (aop/aln/loc) are left 0 — honest, no on-disk source. The arm only matches FHC/ALL cod, so existing XABDAT/XABPRO handling is untouched.

Ground-source (tests/qemu/test_syssvc_rms_acp.c, real /dev/vms)

Open the FIX file created earlier, chain XABFHC+XABALL, $OPEN + $DISPLAY, assert xab$b_rfm == FAB$C_FIX (read from the FAT, not the zero-init silent skip), xab$l_ebk >= 1, xab$l_hbk >= xab$l_ebk, XABALL xab$l_alq == hiblk. A regression to the silent skip leaves xab$b_rfm == 0 and reddens the first assertion — teeth. Runs in the Kernel Executive shard.

Register

xab$fhc/xab$all: absent → implemented/real; rms$xab_silent_unsupported: facade-risk → real; sys$display note updated. Surface regenerated. No test chained XABFHC/XABALL before (zero hits), so no golden baseline changes. Off-cluster, self-contained.

🤖 Generated with Claude Code

… -> real)

Compat register facade-risk row rms$xab_silent_unsupported (rms-api, tier-1): a
program chaining an XABFHC (file-header characteristics) or XABALL (allocation)
onto its FAB and calling $OPEN/$DISPLAY got SILENCE -- rms_impl_display walked
XABKEY/XABDAT/XABPRO and left any other cod untouched (no fill, no error), so
XAB$C_FHC (29) / XAB$C_ALL (20) requests returned the caller's zero-init struct
while RMS reported RMS$_NORMAL. The structs were not even defined (XAB$C_FHC/ALL
were bare #defines).

Fix (INV-6, from the real header over the executive ACP):
- Define struct XABFHC and struct XABALL (+ cc$rms_xabfhc / cc$rms_xaball) in
  rms/xab.h, OVMX-native layout like XABKEY/XABDAT/XABPRO.
- Retain the file-header characteristics decoded from the ODS-2 FAT
  (ATR$C_RECATTR) on the open handle at $OPEN: rms_acp_seed_handle now stores
  rfm/rat/lrl/ebk/ffb/mrz/dxq/gbc/verlimit/bkz alongside eof/hiblk, decoding
  at->recattr via struct ods2_recattr exactly as rms_file_attr already does.
- $DISPLAY (rms_impl_display) fills a chained XABFHC (rfm, atr, lrl, hbk=hiblk,
  ebk, ffb, bkz, mrz, dxq, gbc, verlimit) and XABALL (alq=hiblk, bkz, deq) from
  the retained handle fields -- driven by the open handle, not a POSIX stat, so
  it is correct on the ACP path. Create-time XABALL input controls (aop/aln/loc)
  are left 0 (honest -- no on-disk source).

Ground-source (tests/qemu/test_syssvc_rms_acp.c, real /dev/vms): open the FIX
file created earlier, chain XABFHC+XABALL, $OPEN + $DISPLAY, and assert
xab$b_rfm == FAB$C_FIX (read from the FAT, not the zero-init silent-skip),
xab$l_ebk >= 1, xab$l_hbk >= xab$l_ebk, XABALL xab$l_alq == hiblk. A regression
to the silent skip leaves xab$b_rfm == 0 and reddens the first assertion.

Register: xab$fhc / xab$all absent -> implemented/real; rms$xab_silent_unsupported
facade-risk -> real; sys$display note updated. Surface regenerated. Only tests
chaining XABFHC/XABALL are new (zero existed), so no golden baseline changes.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@baron-3dl
baron-3dl merged commit 9eb8879 into main Sep 2, 2026
127 checks passed
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