Four interlocking fixes that NR's 16-year archive load through
the library surfaced. See CHANGELOG.md#0.6.1 for the full
per-bug writeup with JAM-001 / FTSC references.
1. ParseKludgeLine: first-wins on singleton kludges (msgid /
reply / pid / tid / flags / chrs / tzutc / intl / fmpt / topt
/ area). Quoted SOH-preserving body lines can no longer
overwrite the prefix kludges -- stops tossers flagging
legitimate messages as dupes of the quoted parent.
2. SplitKludgeBlob + BuildKludgePrefix added to Hudson, GoldBase,
PCBoard, EzyCom, Wildcat uni adapters (all five were previously
doing u.Body := native.Body verbatim, so msgid / pid / seen-by
/ path / chrs / tzutc / intl / vendor X-* kludges were all
getting dropped on Read AND Write through those formats).
3. JAM-001 spec compliance:
- TJamBase.CalcMsgIdCRC (new); JamFromUni auto-computes
MsgIdCRC and ReplyCRC per message so external readers can
walk reply chains (was writing 0 everywhere, collapsed
threading on GoldED / MsgEd / hptlink).
- PasswordCRC / ReplyCRC default to 0xFFFFFFFF sentinel, not
0 (which is indistinguishable from a real CRC match).
- InitHeader: DateCreated := Now, BaseMsgNum := 1,
PasswordCRC := 0xFFFFFFFF (was all zeros).
- JamFromUni appends trailing CR to body (FTS-0001 requires
CR-terminated lines; PKT-sourced bodies have it, manually-
built bodies may not -- library now ensures it).
- CHRS and TID emitted as JAM_FTSKLUDGE subfields (were
being dropped entirely; CHRS is load-bearing for non-ASCII
display).
- OADDRESS/DADDRESS no longer emitted (spec-valid but adds
34 bytes/msg; HPT/fmail/GoldED don't; callers that need
them can set jam.subfield.0 / .1 explicitly).
- .jlr not created on base-init (HPT creates lazily on first
lastread write; matching removes a file-tree diff).
4. Tests:
- test_fuzz_kludge gains F-KL-4 (quoted ^AMSGID in body
doesn't clobber prefix) and F-KL-5 (SOH mid-line is body
text, enforcing the position-0 rule).
- test_consumer_round1 gains TestJamCrcComputed,
TestJamBodyTrailingCR, TestJamChrsTidRoundTrip,
TestHudsonKludgeRoundTrip, TestGoldBaseKludgeRoundTrip.
- test_roundtrip_attrs updated: Hudson now advertises
msgid/seen-by via the new round-trip path.
All 21 consumer tests pass; 6-target build clean.