vms-263: DCL Phase 2 facade-kill #1 — ASSIGN creates a REAL logical name - #316
Merged
Merged
Conversation
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
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
cmd_assign()(src/vmsdcl/dcl_cmd_io.c) no longer writes into the DCL symbol table (dcl_sym_set()); it now calls the reallnm_create()against the logical-name manager, mirroringcmd_define()'s existing LNM path — INV-DCL facade killed./PROCESS(default) and/SYSTEM /GROUP /JOBall route to the four well-known LNM tables;LNM$SYSTEM/GROUP/JOBare executive-resident and already load-bearing forDEFINE, soASSIGNnow wires to them instead of refusing./TABLE=name(arbitrary caller-named table) stays an honest%DCL-W-NOTIMPLrefusal — no table-by-name registry exists anywhere insrc/vmslnm.DEASSIGNalready called the reallnm_delete()(was independently REAL) — no change needed, now removes exactly what the fixedASSIGNcreates.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
tests/dcl/test_assign_real_lnm_veracity.sh— fails on the old symbol-facade, passes on the fix:ASSIGN BAR FOO→F$TRNLNM("FOO")/SHOW LOGICAL FOOshowBAR,SHOW SYMBOL FOOfinds nothing (%DCL-W-NOLCL, proving the symbol table was never touched),DEASSIGN FOOremoves it (SHOW LOGICAL FOO→%DCL-W-NOLOGafter).tests/dcl/test_facade_gate_phase0.sh: ASSIGN/SYSTEM canary → ASSIGN/TABLE canary (SYSTEM is now wired, TABLE still honestly refused).ctest -L dcl→ 100/100 (dcl-integration + dcl-harness-selftest + foreign_command_dispatch_gate).test_install_command/test_misc_commandsfailures seen under an ad-hocbash tests/dcl/run_dcl_tests.shinvocation (missingPATH) reproduce identically on baselinemain— not caused by this change; under the canonicalctestinvocation (correctPATH) all 100 DCL tests pass.🤖 Generated with Claude Code