docs(deferment): register fifth round — #559 closed (MQTT framing aligned with the fleet; backstop re-pinned as count relation); drift arc complete, no residual

This commit is contained in:
Joseph Doherty
2026-08-10 03:41:39 -04:00
parent 83f2cba20d
commit 481f4343c1
+36
View File
@@ -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`