Skip to content

vms-263: DCL Phase 2 facade-kill #1 — ASSIGN creates a REAL logical name - #316

Merged
baron-3dl merged 1 commit into
mainfrom
vms-263-assign-real-lnm
Aug 11, 2026
Merged

baron-3dl merged 1 commit into
mainfrom
vms-263-assign-real-lnm

Conversation

@baron-3dl

Copy link
Copy Markdown
Contributor

Summary

  • cmd_assign() (src/vmsdcl/dcl_cmd_io.c) no longer writes into the DCL symbol table (dcl_sym_set()); it now calls the real lnm_create() against the logical-name manager, mirroring cmd_define()'s existing LNM path — INV-DCL facade killed.
  • /PROCESS (default) and /SYSTEM /GROUP /JOB all route to the four well-known LNM tables; LNM$SYSTEM/GROUP/JOB are executive-resident and already load-bearing for DEFINE, so ASSIGN now wires to them instead of refusing. /TABLE=name (arbitrary caller-named table) stays an honest %DCL-W-NOTIMPL refusal — no table-by-name registry exists anywhere in src/vmslnm.
  • DEASSIGN already called the real lnm_delete() (was independently REAL) — no change needed, now removes exactly what the fixed ASSIGN creates.
  • Scoreboard (docs/dcl-verb-fidelity-scoreboard.md): ASSIGN moves PARTIAL → REAL (49 REAL / 3 PARTIAL / 1 FACADE / 1 STUB).

Clean-room (Rule 8)

ASSIGN's parameter order (equivalence-name THEN logical-name — opposite of DEFINE), default table (LNM$PROCESS), and qualifier set (/PROCESS /JOB /GROUP /SYSTEM /TABLE) are from the public OpenVMS DCL Dictionary's ASSIGN entry.

Test plan

  • New veracity gate tests/dcl/test_assign_real_lnm_veracity.sh — fails on the old symbol-facade, passes on the fix: ASSIGN BAR FOOF$TRNLNM("FOO")/SHOW LOGICAL FOO show BAR, SHOW SYMBOL FOO finds nothing (%DCL-W-NOLCL, proving the symbol table was never touched), DEASSIGN FOO removes it (SHOW LOGICAL FOO%DCL-W-NOLOG after).
  • Updated Phase 0 facade canary tests/dcl/test_facade_gate_phase0.sh: ASSIGN/SYSTEM canary → ASSIGN/TABLE canary (SYSTEM is now wired, TABLE still honestly refused).
  • Full DCL suite green: ctest -L dcl → 100/100 (dcl-integration + dcl-harness-selftest + foreign_command_dispatch_gate).
  • Verified pre-existing/unrelated: confirmed (via git stash + rebuild) that test_install_command/test_misc_commands failures seen under an ad-hoc bash tests/dcl/run_dcl_tests.sh invocation (missing PATH) reproduce identically on baseline main — not caused by this change; under the canonical ctest invocation (correct PATH) all 100 DCL tests pass.

🤖 Generated with Claude Code

cmd_assign() (src/vmsdcl/dcl_cmd_io.c) used to write its equivalence
string into the DCL SYMBOL table via dcl_sym_set() for every invocation,
including the /PROCESS default -- the wrong subsystem entirely. It now
calls the real lnm_create() against the logical-name manager, mirroring
cmd_define()'s existing LNM path:

- /PROCESS (default) and /SYSTEM /GROUP /JOB all route to the four
  well-known LNM tables. LNM$SYSTEM/GROUP/JOB are executive-resident
  (lnm_create() -> vms_kif -> /dev/vms) and already load-bearing for
  DEFINE, so ASSIGN now wires to them instead of refusing (INV-6: no
  per-process fallback, honest SS$_NOSUCHDEV/LNMFAIL with no executive).
- /TABLE=name (an arbitrary caller-named table) stays an honest
  %DCL-W-NOTIMPL/SS$_UNSUPPORTED refusal -- no table-by-name registry
  exists anywhere in src/vmslnm, for ASSIGN or DEFINE.
- DEASSIGN already called the real lnm_delete() (independently REAL,
  not part of the ASSIGN facade) and needed no change.

Clean-room (Rule 8): ASSIGN's parameter order (equivalence-name THEN
logical-name), default table (LNM$PROCESS), and qualifier set are the
public OpenVMS DCL Dictionary's ASSIGN entry.

New veracity gate tests/dcl/test_assign_real_lnm_veracity.sh fails on
the old symbol-facade and passes on the fix: ASSIGN BAR FOO makes
F$TRNLNM("FOO")/SHOW LOGICAL FOO show "BAR" while SHOW SYMBOL FOO finds
nothing (%DCL-W-NOLCL), and DEASSIGN FOO removes it. Updated the Phase 0
facade canary (test_facade_gate_phase0.sh) from ASSIGN/SYSTEM (now wired)
to ASSIGN/TABLE (still honestly refused). Scoreboard: ASSIGN moves
PARTIAL -> REAL (49 REAL / 3 PARTIAL / 1 FACADE / 1 STUB).

Full DCL suite green: 100/100 (ctest dcl-integration + harness-selftest
+ foreign_command_dispatch_gate).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@baron-3dl
baron-3dl merged commit ecdfff0 into main Aug 11, 2026
53 checks passed
baron-3dl added a commit that referenced this pull request Aug 11, 2026
…in diagnostics) (#321)

* vms-832: bump OVMX_PRODUCT_VERSION to V0.3-3

Third point release off tag 0.3-2, cut through the RE machinery
(vms-a84). Payload: conversational boot (#301), DCL Phase 2
facade-kills (ASSIGN->real logical names #316, STOP->real
sys$delprc #318, SET PASSWORD->real SYSUAF hash change #319), and
rejoin isolation diagnostics (#314/#317/#320). No test hardcodes the
version literal -- tests/libvms/test_identity.c and friends all
compare against the OVMX_PRODUCT_VERSION macro, so no de-hardcoding
was needed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* vms-832: generate V0.3-3 release notes (boot + DCL Phase 2 + rejoin diagnostics)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

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