From 481f4343c19ca4b51482c0a3c0b6c1cbe2e50aef Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Mon, 10 Aug 2026 03:41:39 -0400 Subject: [PATCH] =?UTF-8?q?docs(deferment):=20register=20fifth=20round=20?= =?UTF-8?q?=E2=80=94=20#559=20closed=20(MQTT=20framing=20aligned=20with=20?= =?UTF-8?q?the=20fleet;=20backstop=20re-pinned=20as=20count=20relation);?= =?UTF-8?q?=20drift=20arc=20complete,=20no=20residual?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deferment.md | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/deferment.md b/deferment.md index 2227fc5c..7e832e58 100644 --- a/deferment.md +++ b/deferment.md @@ -1280,6 +1280,42 @@ drivers), 3 carried-open archreview findings led by 01/S-1 (`AddressSpaceApplier --- +### 2026-08-10 (fifth round) — #559 closed: MQTT joins the fleet's framing contract; the drift arc ends + +The fourth round's sole residual, one isolated-worktree Opus agent, fix `621a9e5d` merged to master. +Verification on the merged tree: clean build; 4 affected suites / 2,790 tests green (Mqtt 708, +AdminUI 1466, ControlPlane 261, FOCAS 355). + +- **#559 CLOSED** — both MQTT runtime mappers (`FromTagConfig`, `FromSparkplugTagConfig`) dropped + their untrimmed `|| tagConfig[0] != '{'` clause; `JsonDocument.Parse` + the root-`ValueKind` + check are the single framing authority, as in the six sibling drivers. The verdict changes ONLY + for whitespace-padded JSON objects (now earning their content's verdict); bare names, arrays, + numbers, strings and blanks are refused by the same mechanisms as before, and a caller sweep + confirmed nothing relied on the first byte (no name-vs-blob fallback exists in v3). `Inspect` + needed **no logic change** — since #556 it trims its own pre-filter and hands the RAW blob to + the mappers — but four comment sites claiming the padded-blob refusal was real were rewritten. +- **The #556 backstop lost its only vehicle, by design.** The padded blob was the one + production-reachable shape for "refused, but no DescribeRejection branch can name why"; after + the fix no vehicle exists (a union refusal with a topic requires a named strict-field failure; + without topic and without the Sparkplug tuple the no-address branch fires). The backstop stays + as defence-in-depth, re-pinned **FOCAS-style as a count relation** + (`A_rejected_config_always_draws_more_than_its_advisories_alone`), and the old flipped test was + replaced by the stronger parity form `Leading_whitespace_changes_neither_the_verdict_nor_the_inspection` + over the accepted AND rejected corpus with an anti-vacuity control proving the corpus carries + both verdicts. New runtime tests assert padded-vs-unpadded **definition equality**, not just the + accept bool. Falsification: each mapper sabotaged separately — exactly 5 (Plain) / 4 (Sparkplug) + tests reddened, all specific to the sabotaged mapper, nothing unrelated. +- **Honest coverage note:** the three padded entries added to the AdminUI parity corpus stayed + green under BOTH sabotages — `MqttTagConfigModel` consults the same union parse via + `TagConfigParseGate`, so authoring moves with runtime by construction. They pin a future + *divergence* (unwiring the parse-gate consult), not this defect; the load-bearing coverage is + driver-side. A parity test cannot detect a defect both sides share. + +**No residual filed.** The authoring-vs-deploy-gate drift arc (#549 → #550/#551 → #552/#553 → +#554/#555 → #556/#557/#558 → #559) is closed end to end. + +--- + ### 2026-08-10 (fourth round) — #556 + #557 + #558 closed: Inspect trims and classifies; the last alias and the last hand-list fall The three residuals of the #554/#555 round, three isolated-worktree Opus agents, merged `7482cf0c`