Handoff — 2026-08-07¶
Where the XMSG/COSMOS work stands, what changed today, and the one thing that needs Ronny.
Suite: 720 green across 9 projects. Build clean, no XML doc warnings.
Branch: 5000x. Everything committed.
1. The one thing waiting on you¶
SUPERSEDED 2026-08-08 — do not act on this section. It asks for a command that DOES NOT EXIST: there is no
DEFINE-LINK/DEFINE-SYSTEM-LINKanywhere in the COSMOS guides. The real answer was the opposite of adding something — an ADJACENT system (one on the far end of your own cable) needs aDEFINE-REMOTE-NAMEand no route at all; only NON-adjacent systems get aDEFINE-SYSTEM-ROUTE(COSMOS Operator Guide ND-30.025.02 section 2.5.4).With that applied, both D100 and D103 now reach our node (
A: *->19999), and theINNAKstill arrives and turns out to be harmless — it was never the blocker this section assumed it was.DEFINE-FRIEND-SYSTEMis not the gate either: both machines report* No friend exists *and D100 accepts INITs anyway.Read
DOC/SUBTYPE-17-INIT-REJECT-2026-08-07.mdsteps 7, 8 and 9 instead. Section 4 below is kept only as the elimination record.
Original text, wrong, kept for the record:
Define or start a LINK toward our system on D100 (and/or D103). Not a route — a link.
Both machines refuse our network initialisation with INNAK, and every other explanation has been
eliminated (section 4). DEFINE-SYSTEM-ROUTE told them "to reach 19999, go this way"; nothing has
told them "19999 is the machine on the other end of this line". That is the only surviving
hypothesis and the test changes a real machine's configuration, so it was left alone.
Also still yours, unchanged: the HDLC defects in nd100x and RetroCore reported earlier
(oversized-frame handling, silent drops, the odd-Displacement byte/word mismatch in RetroCore).
2. What works now that did not this morning¶
| Thing | State |
|---|---|
| Relay carries transit | PROVEN. Two datagrams D100 → D103 crossed our node, re-marked and forwarded out the correct link. |
XFGSM (MON 200B fn 47) |
Implemented. Was recorded for months as "blocked on evidence"; it is documented in the version-L manual, just not in Appendix A. |
XSLIN, XSECS/XSDCS |
Request builders + XmsgLinkInformation reply model. |
| All 256 SINTRAN error codes | Imported with ND's text and disposition. |
| XMSG/XROUT error dispositions | Imported from NDIX — retry/give-up per code. |
| 23 generation variables | Decoded from the parity-encoded file, then CONFIRMED against the live kernel. |
| X-MESSAGE 210373L manual | OCR'd and imported to Installation/Installation-Description/ND-210373L-EN.md. |
Bugs fixed today, in rough order of severity:
BadRequestwas SINTRAN error 3 = "END OF FILE". A client refused mid-read was told the file ended normally — its read loop would stop and report success. Silent data loss, and it was live. All three chosen FA status codes were wrong; now 129 / 211 / 97.XmsgFrameBuilder.Build()never computed header word 6 — the seventh site of the fabrication that once killed D100 withERROR CODE 24. It fabricated by omission, which is why the sweep missed it. Test-only exposure, but a loaded gun.- The relay never announced itself, so neither peer registered us at the XMSG level even with the link Active. Then the announce was once-only, so a link bounce left us permanently unknown.
- A stale topology route put node 103 on both relay links;
AddLinkre-points duplicates at whichever registered last, so D103 traffic would have gone out of the D100 link. - Malformed XML in a doc comment (unbalanced
<para>), invisible because test projects generate no documentation file.
3. Machine state as I left it¶
STALE as of 2026-08-08. A Windows reboot wiped both machines' XMSG kernel tables (system table down to the local entry, zero links) — the XROUT NAME table survived, so
LIST-NAMESlooks healthy while nothing works. Since then D100'sRetroCore.inihas had its two HDLC listen ports SWAPPED (HDLC 1 now on 10364, HDLC 2 on 10362; originals commented in place, backupRetroCore.ini.bak-2026-08-08) and D100 was restarted, so D102 has lost its line to D100. Relay command: usetopology-d19999-relay.json, NOTtopology-d19999.json— the latter advertises node 103 as "via 100" and makes D100 report*Loop suspected*.
- D100 (
F:\RC\RonnyTest\HDLC1, terminal 9010) and D102 (HDLC2, 9102) — running, untouched except the routes below. - D103 (
HDLC3, 9003) — running. ItsRetroCore.iniHDLC line was changed to--connect=localhost:10366so it dials OUR relay instead of D100. The old line is commented out directly above it. - Routes added by
DEFINE-SYSTEM-ROUTEon both D100 and D103, pointing at 19999. These persist. - Ethernet is dead on all three — every config says
--net=tcp:127.0.0.1:5010and nothing listens on 5010. Unrelated to today's work, but worth knowing: a node must be--net=listen:5010. - Nothing of mine is running. No relay, no capture, no .NET hosts.
Relay command, for reference:
Xmsg.Live.Runner --config topology-d19999.json --relay-listen 10366 --relay-inbound-node 103 127.0.0.1 10364 19999 <seconds>
4. The open investigation: why INIT is refused¶
Full detail in DOC/SUBTYPE-17-INIT-REJECT-2026-08-07.md. Summary of what is settled:
- Our reachability announce is
INITin SINTRAN's own vocabulary; the reply, subtype0x17, isINNAK— an initialisation negative acknowledgement. Both names come from theNettypecolumn ofLIST-FRAMESon the live machine. - Also new: the
Nettypevocabulary itself —INIT,INNAK,ACK,* <->. Nothing here modelled it.
Eliminated, in order:
- Frame contents — markers, subtype, Flags 1, Flags 2 all identical to a real ACCEPTED INIT.
- Node number — re-ran the whole relay as 101; both machines NAKed identically.
- LAPB layer — address, control byte and sequence numbers identical to the accepted exchange
(
N(S)=0 N(R)=0out,N(S)=0 N(R)=1back). - Carving — neither the XMSG kernel (23552 words) nor XROUT (39943 words) contains
SAA -3, literal177775,0x21FEor0x0017. The frame is assembled arithmetically; there is nothing to find.
So the peers answer at the right moment, in the right LAPB position, to a byte-perfect frame — and refuse it. What is left is peer-side knowledge, which is section 1.
Groundwork ready if carving resumes: DOC/COSMOS-RE/carve/XMSG-KERNEL-L03_flat.bin, base
0120000 VERIFIED (file word 9347 = address 142203 = XHINI), and 30 XH* handler symbols
extracted from XMSG-SYMBOL-L03.SYMB.
5. Still blocked on a capture, unchanged¶
- FA
0x01/0x04/0x0D— no wire layout. The carve route is CLOSED: that1eadtable is a command-NAME parser, not handler addresses. Only a capture will do it, and no client we know emits them. CreateFile0x0A— served, never driven live.COPY-FILEdoes not send it.XFWRT(fn 43) — the last XMSG function with no source at all. A server calls it, so no terminal session will produce it.- The post-close
XEIMA(task #18) — partly explained: ND classify itSIII_RETRY, so it means "that conversation is already gone", which fits transfers being byte-correct despite it.
DOC/PLAN-CAPTURE-SESSION-2026-08-07.md has the ordered plan, including which operator command
drives which service — the version-L manual supplied that mapping.
6. Two lessons worth more than the findings¶
Ask the machine before carving it. Two binary carves failed to identify INNAK; one
LIST-FRAMES did it in about a minute. The machine is authoritative about its own traffic and
answering is free.
A number matching a constant is not proof the constant produced it. I identified Flags2 =
0xFFFD as XENIR by name-matching, downgraded it when the carve found the value in neither binary,
then had it confirmed by the machine's own label. The downgrade was correct at the time even though
the conclusion survived — the evidence, not the answer, is what was wrong.
7. Task list¶
| # | State | |
|---|---|---|
| 18 | open | post-close XEIMA — needs a capture including the close |
| 23 | open | FA 0x01/0x04/0x0D + live CreateFile — needs a capture |
| 27 | open | why INIT is NAKed — needs the link definition in section 1 |
| 19, 20, 21, 22, 24, 25, 26 | done |