Corrections Brief — RE-verify the cos-file-tra / cos-xftra analyses against the binary¶
To: the LLM that produced COS-FILE-TRA-E02-XMSG-Analysis.md, COS-XFTRA-E02-Analysis.md,
CosFileTraE02.cs, CosXftraE02.cs.
From: the cos-conn-to / cos-fa-serv analysis session.
Why: an independent line-by-line review of the sibling reconstruction (CosConnToE02.cs)
found a class of errors that are methodological, not typos — so your four deliverables are
very likely to contain the same error class. Please re-verify them against the Ghidra DB and the
measured specs. This brief gives the root-cause rules, the specific checks to run, and the new
[BIN]-verified facts to reconcile.
Authoritative sources (do not "improve" from memory — trace/measure):
- Wire truth: …\SINTRAN\XMSG\DOC\XMSG-PROTOCOL.md, …\SINTRAN\TAD\TAD-Message-Formats.md, the pcap decode report.
- Symbols: F:\ND\SINTRAN-K05-XMSG-2026\XMSG-Symb\* (XF codes, XM* offsets, msg-type codes).
- Binaries in the Ghidra project: cos-file-tra-e02.prog, cos-xftra-e02.prog.
1. Root-cause rules (the review found all errors reduce to these)¶
- Decode the byte, don't infer it. Every wire field must come from a specific
SBYT/LBYTinstruction with an explicit byte index (SAX n/AAXchain) and the constant it writes/reads. If you cannot point at the instruction, the field isUNKNOWN— never a plausible constant. (In the sibling file this produced a fabricatedTTYP = 01 08— actually the FBSI class pasted into the wrong builder — and an off-by-one field offset that contradicted its own analysis doc.) - Decode tag/opcode values, not just names. Naming an op from a command string is not a wire spec. You need the numeric opcode constant and the param tag bytes.
- Keep the "type" fields separate with one glossary: SINTRAN-header Subtype (0x0E=Data…),
XMSG msg-type return code (XMTNO1/XMROU2/XMTHI3/XMTRE4/XMKIK5/XMTPS6), TAD opcode,
FA request-op, FA param-tag, FA entry-type. A
==Ncompare must be attributed to the right field. (Sibling error: labelled amsg-type==3compare "Data" — it is XMTHI = high-priority.) - Preserve confidence tags (
VERIFIED/INFERRED/CANDIDATE) from the measured docs into the.cs/.md. The binary corroborates; it does not upgrade a CANDIDATE to fact. - State the layer boundary loudly. These binaries are application-level, above
MON 200B. The envelope (seed/Counter/channel), secure-ACK closed form, odd-length LAPB address, and the ≤2-datagram flow-control window are kernel-invisible in these binaries. Your.csexplains the app's intent; it can never be a transport build-spec, and a node built from it alone will crash the real machine the way the early probes did. Put this caveat at the top of both.mdfiles. - Apply your own findings. If the disasm shows an append-into-one-buffer-then-flush builder,
the
.csmust not send each field as a separate datagram.
2. Specific checks to run on YOUR files¶
2a. The typed-param tags are PROGRAM-SPECIFIC — do NOT assume a shared table¶
CORRECTED 2026-07-07 after the file-tra/xftra session verified this against its binaries.
The cos-fa-serv emit tag bytes are 0x92=INT16 / 0x94=INT32 / 0xA2=classA / 0xF2=classF
[BIN-VERIFIED, fa-serv only]. They do NOT appear in cos-file-tra or cos-xftra (SAA 0x92/0x94
= 0 hits in both — verified by the file-tra/xftra session). My earlier suggestion that the family
shares this tag set was itself an inference and is wrong — the exact "don't infer" error.
- cos-xftra / cos-file-tra use a different, letter-indexed scheme: (typeByte & 0x7F) − 0x41
→ 6-way jump on codes 0x41..0x46 (A–F) → a common XFWRI/XFREA accessor (decode_param_value
file-tra @~0x640a). So each program encodes typed params its own way; publish each program's tag
scheme separately, both [BIN-VERIFIED].
2b. Field offsets¶
For every message field your .cs/.md names (opcode position, length position, param positions,
XD-block fields XDHAC/XDDST/XDSNA/XDREF, etc.), verify the offset against the actual SBYT/LBYT
index in the binary. Any field you cannot anchor to an instruction → mark UNKNOWN.
2c. Opcodes¶
- file-tra's only confirmed on-wire send is the XROUT query with baked opcode
0x0845(byte10x45= XSGNI). That is solid[BIN+SYM]. But confirm the reply payload is markedUNKNOWN(needs a live capture) and not invented. - The file-transfer data commands (Transfer/Append-batch/Compress) had no traced send edge —
make sure the
.md/.cssay so explicitly rather than implying a wire format for them. - Re-check
op = -0x64,B & msg_opcode_mask(file-tra) against the actual mask constant.
2d. The msg-type / high-priority knob¶
Check every == N compare on an XFRCV/receive return. If either binary compares the returned
msg-type to 3, that means XMTHI (high-priority) traffic (kernel-local, invisible in pcap) — a
real [BIN]-only fact worth recording, but label it XMTHI, not "Data".
2e. Confidence + layer tags¶
Sweep both .md and both .cs: restore VERIFIED/INFERRED/CANDIDATE on every opcode/field/name,
and add the app-layer caveat (rule 5) at the top.
3. New [BIN]-verified facts to reconcile into your files¶
- FA/QFORM param tags:
0x92=INT16,0x94=INT32,0xA2=classA,0xF2=classF (per §2a). - msg-type
3= XMTHI (high-priority); a receive filter of==3means the program only accepts high-priority messages → its traffic is sent withXFHIP. - Ghidra fragment inflation: in dense/garbled regions Ghidra mis-splits one routine into many
phantom
FUN_ram_*. Don't count or name fragments as distinct functions; verify a function's decompile isn't a byte-identical tail of its neighbour. - PLANC name-strings mark the END of a routine, not the start — re-check any "the string before the RADD names this routine" assumption.
4. Deliverable¶
For each of your four files: a corrected version where every wire fact is anchored to a decoded
byte (cite the SBYT/LBYT address in a comment), unknowns are tagged UNKNOWN, the type-field
glossary is applied, and confidence + layer tags are restored. Same discipline being applied to
CosConnToE02.cs and CosFaServerE04.cs on this side.