diff --git a/CHANGELOG.md b/CHANGELOG.md index 19ac47f..5301f86 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,38 @@ Tags below the 0.5 line were placed retroactively on 2026-04-19. The corresponding commit messages carry the canonical release notes; this file is a quick index. +## 0.5.2 -- 2026-04-19 (FTS-conformance fixes from NR hpt-compare suite) + +Two consumer-surfaced interop bugs in `mb.kludge`, both caught by +NetReader's hpt-vs-nr byte-diff harness. Real-world impact: +previous `BuildKludgePrefix` output failed to round-trip through +HPT / fmail / NR for FLAGS kludges, and previous `SplitKludgeBlob` +leaked the FTS-0004 AREA: envelope into on-disk bodies. + +- **`BuildKludgePrefix` FLAGS emission** used a colon separator + (`^AFLAGS: DIR`), but FTS-4001 §4 specifies a space (`^AFLAGS DIR`) + and every downstream parser (NR's ParseKludges, HPT's getFlags, + fmail's getKludge) expects no colon. Symptom: FLAGS DIR / IMM + routing silently fell through to normal routing because consumers + didn't recognise the kludge at all. Fix: one-line drop of the + colon from the emit template. `MSGID:` / `REPLY:` / `PID:` / + `CHRS:` / `TZUTC:` keep their colons per their respective specs. + Commit: `cd2cc90`. +- **`ParseKludgeLine` AREA: recognition.** FTS-0004 puts + `AREA:` at the head of a packet-message body with no SOH + prefix, same shape as the `SEEN-BY:` / `PATH:` trailing control + lines the parser already handled. Without AREA: in the trail- + control list, `SplitKludgeBlob` left the envelope in PlainBody, + so msgbase writers stored `AREA:BINECHO` as the first ~12 bytes + of the on-disk message body. Symptom (NR): UUE decode output + inflated by the envelope length per section. Fix: add `AREA:` + to the isTrailControl list and dispatch `'area':` into + `A.SetValue('area', ...)` -- same attribute slot 0.5.0 already + populates from `MessageBaseOpen`'s area-tag argument on reads. + Commit: `ee0f1ca`. + +Thanks to NR for catching both via the hpt-compare harness. + ## 0.5.1 -- 2026-04-19 (security-hardening round) Retroactive tagging discipline established. Before this release, diff --git a/README.md b/README.md index dce8fe7..1df7f89 100644 --- a/README.md +++ b/README.md @@ -114,9 +114,9 @@ Unit-name convention follows the Fimail style: `ma...pas` Early development. APIs may move until 1.0. -**Current: 0.5.1** — see [`CHANGELOG.md`](CHANGELOG.md) for the full +**Current: 0.5.2** — see [`CHANGELOG.md`](CHANGELOG.md) for the full release history. Downstream consumers should pin by tag -(`v0.5.1`), not commit hash. +(`v0.5.2`), not commit hash. **0.2 is a breaking change vs 0.1.** `TUniMessage` lost its 13 named fields (WhoFrom/WhoTo/Subject/MsgNum/Attr/etc.) in favour of a strict diff --git a/src/mb.version.pas b/src/mb.version.pas index 4bf8faf..ec2d03b 100644 --- a/src/mb.version.pas +++ b/src/mb.version.pas @@ -17,8 +17,8 @@ interface const MB_VERSION_MAJOR = 0; MB_VERSION_MINOR = 5; - MB_VERSION_PATCH = 1; - MB_VERSION = '0.5.1'; + MB_VERSION_PATCH = 2; + MB_VERSION = '0.5.2'; implementation