NR's Message 17 on the joint inbox flagged that
TMessageBase.UpdateMessage returned False on every format because
no backend overrode DoUpdateMessage. Was blocking nr.linker's
Pass 4 (header-only reply-chain rewrite), the last holdout before
nr.msgbase.* retirement.
Shipped DoUpdateMessage on all eight backends -- not just the
three NR asked for:
JAM -> TJamBase.UpdateHeader (existing primitive)
Squish -> new TSquishBase.UpdateMsgHeader rewrites full
SqMsgHdr in place, preserves CtrlInfo + body
*.MSG -> TMsgFile.UpdateHeader rewrites 190-byte NetMail
Hudson -> UpdateHeader writes HudsonHdrRec at idx*siz
GoldBase -> UpdateHeader, ReplyTo/SeeAlsoNum map to
goldbase.prevreply/nextreply attrs
PCBoard -> UpdateHeaderAt rewrites PCBMsgRec block; RefNum
goes through LongToBSReal encoding on write
EzyCom -> UpdateHeader rewrites EzyMsgHdrRecord
Wildcat -> WC SDK UpdateMsgHeader via the vendored wrapper
Semantics (header-metadata only, documented in each override):
apply attrs from incoming TUniMessage to header slots, leave
body / CtrlInfo / SubFields / inline kludges alone. Callers
needing body changes should Delete + WriteMessage.
Adjacent fix: PCBoard DoOpen now auto-initialises an empty
128-byte PCBBaseRec + empty .IDX on momCreate so a base can be
created from scratch via mb.api. Previously needed pre-
population by another tool.
Tests: seven UpdateMessage regression tests in
test_consumer_round1 (one per backend that supports create from
scratch; Wildcat uses the vendored sample base at
tests/data/wildcat/). All 16 consumer tests pass across six
targets.