CARVE ANSWER (V8) - LOAD is a real command; dispatch is data-driven; the arg-type fork is in the descriptor/executor layer¶
Answers the "wrong-path routing CONFIRMED" follow-up (relayed 2026-07-18). Builds on
CARVE-ANSWER-LINKER-LOAD-ERROR52-V7.md.
Binary: D:\ND\500\nd-linker\linker-b01.dom (+ .dom.asm). ND-500 VAs (hex).
Addressing: PSEG file = VA - 0xB0000000 + 0x1000; DSEG file = VA - 0xB0000000 + 0x57800.
Tags: [V] = read from these bytes; [I] = inferred; [OPEN] = not proven.
TL;DR¶
Your runtime proof (LOAD never touches the object-open subtree; dies in the B003Cxxx symbol/spec
resolver at B0040C3C) is accepted. New static facts this round:
- LOAD IS a real, first-class command (not unrecognized). The DSEG carries the command-name
tables; a restricted set exactly matches your session's commands. So the fork is NOT "LOAD
unrecognized -> treated as symbol"; LOAD is dispatched as a command, and its argument is what's
being sent to the wrong (symbol/spec) parser. [V]
- Your dispatch corrections are confirmed and my earlier 0xB00530BC/B004ACD9 model is dead
(poisoned prior, deleted). The real dispatch is data-driven + indirect (jumpg/CPS), which is
why static caller-tracing saturates. [V]
- I mapped the command NAME tables but not yet the handler table; the file-vs-symbol routing lives
one layer deeper, in the per-command descriptor handed to executor B002EF7F. That layer is
faster for you to read live than for me to decode statically - see the probe.
1. LOAD is a real command - the DSEG command tables [V]¶
The command-name strings live in the DSEG (not in the .asm; data part starts at file 0x58000).
Packed, alphabetical full set at file 0x88a54 (APPEND-DOMAIN, ... LOAD, ... SPECIAL-LOAD,
MULTI-DOMAIN-HANDLER). LOAD is at file 0x88b52. [V]
A restricted command set is at file 0x88cf4: CLOSE EXIT LIST-DOMAINS LIST-ENTRIES
LIST-STATUS LOAD OPEN-DOMAIN SET-ADVANCED-MODE - exactly the commands your session used
(OPEN-DOMAIN, LOAD). Its lookup table is at file 0x88c94, 8 entries of {name_VA:4, 0:4,
name_len:4}; all 8 verified (len = full name length):
CLOSE ->name 0xB00314F4 len5 EXIT ->0xB00314F9 len4 LIST-DOMAINS ->0xB00314FD len12
LIST-ENTRIES ->0xB0031509 len12 LIST-STATUS ->0xB0031515 len11
LOAD ->name 0xB0031520 len4 OPEN-DOMAIN ->0xB0031524 len11 SET-ADVANCED-MODE ->0xB003152F len16
2. Dispatch is data-driven + CPS - why static tracing failed [V]¶
- The command executor uses a shared prologue at
B0031504-B003152B: it builds a context block in0xB003DFE4-0xB003DFF8(writes a continuation0xB0031531to0xB003DFE4atB0031504, savesb/tos), thenjumpg $0xB003DFE8to a common dispatcher. [V] - The continuation
B0031531runs the actual command:w test 0xB003E3F0 ... w bmove 0xB003EE90, r.0x14 ; call B002EF7F(B0031540-B0031549). So a command DESCRIPTOR at0xB003EE90is handed to executorB002EF7F. [V] - Control flow throughout is indirect
jumpgthrough saved pointers (b.0xD0,b.0x120,0xB003DFE8, ...). Direct-call caller-tracing therefore cannot reconstruct the dispatch - matches your live finding thatB004ACD9/0xB00530BCare never reached. The0xB00530BCkeyword-table model is retracted. [V]
3. Where the file-vs-symbol fork must be [I, from the structure]¶
LOAD is dispatched as a command; it dies parsing its ARGUMENT B:NRF in the symbol/spec resolver
(B003CFDA cluster -> B0040C3C). The argument-type decision is made by the command
descriptor/executor layer (B002EF7F + a per-command descriptor like 0xB003EE90). Two shapes fit,
and only a live dump distinguishes them:
- (a) LOAD's descriptor says "arg = file spec", and your run mis-reads it / a shared field is wrong,
so the arg goes to the symbol parser; or
- (b) LOAD's descriptor legitimately sends the arg through the symbol/spec resolver FIRST (e.g. to
allow LOAD (symbol) forms), and on real HW that resolver ACCEPTS B:NRF (returns without error)
whereas your B0040C3C errors 52 - i.e. we are back to a B0040C3C-internal difference, but reached
legitimately.
I cannot choose between (a) and (b) statically without decoding the descriptor format + B002EF7F.
[OPEN]
4. Probes (yours - far faster live than my static decode)¶
- Find LOAD's handler + descriptor. Break where the matched command index is turned into a
handler (right after the keyword match in
B0047535's flow), and dump the handler address and the descriptor pointer it loads (analogous to0xB003EE90). Do the SAME forOPEN-DOMAIN(works) and diff the two descriptors - the differing field is the arg-type selector. - Dump the context block
0xB003DFE4-0xB003DFF8for LOAD vs OPEN-DOMAIN at thejumpg 0xB003DFE8dispatch - shows the continuation/handler each takes. - Break at
B002EF7Fentry for LOAD and read its descriptor arg (r.0x14<-0xB003EE90-style)- that descriptor encodes how the argument is parsed. Compare to OPEN-DOMAIN's.
- If (b) is true (LOAD legitimately calls the symbol resolver): break at the
B003CFDA/B0040C3Centry on a KNOWN-GOOD real-HW LOAD and capture what descriptor/mode word it is passed - that mode is what makes the same parser acceptB:NRFthere.
Honest status / recommendation¶
This is round ~5. Confirmed, compounding progress: K-flag -> parse-stage gate -> DEABF-output
disproven -> wrong-subsystem routing -> LOAD is a real command whose ARGUMENT is mis-parsed, in a
data-driven/CPS dispatch. The remaining fork lives in the per-command descriptor + executor
B002EF7F, a layer your live rig can dump in one break but that costs me several static layers
(DSEG descriptor format + CPS executor) to decode. Recommend: you run probe 1/3 (dump LOAD's vs
OPEN-DOMAIN's descriptor) and relay the diff; I decode B002EF7F + the descriptor format against
that. That splits the work where each side is fastest.
Evidence register¶
- DSEG command names file 0x88a54 (full set) / 0x88cf4 (restricted set); LOAD file 0x88b52 & 0x88d20.
- Restricted lookup table file 0x88c94, 8x
{name_VA,0,len}, all verified. - Executor prologue
B0031504-B003152B(raw1acf b003 1531 c4b0 03df e4 ... b4c4 b003 dfe8); continuationB0031531-B0031549(... fe79 c4b0 03ee 90 8503 / c3 b0 02 ef 7f 00= call B002EF7F). - (Retracted)
0xB00530BCkeyword-table model;B004ACD9never reached (your live break count 0). - (From V7) object OPEN
B004E874/B004E80F; error subtreeB003CFDA->B0040C3C.