Skip to main content

has_implicit_subgroup_id_mode

Function has_implicit_subgroup_id_mode 

Source
const fn has_implicit_subgroup_id_mode(draft: DraftVersion) -> bool
Expand description

Whether this draft defines a subgroup ID is the first object’s ID stream type.

Nine drafts do: every one from 11 on. Drafts 07-10 always carry the subgroup ID explicitly, so eliding index 0 there redefines nothing.

The two wordings are worth telling apart, because reading only the later one makes the earlier drafts look as though they lack the mode. Drafts 11 through 15 state it as a property of the type value — draft-15 Section 10.4.2: “the Subgroup ID is either 0 (for Types 0x10-11 and 0x18-19) or the Object ID of the first object transmitted in this subgroup (for Types 0x12-13 and 0x1A-1B)” — while drafts 16 through 20 name a SUBGROUP_ID_MODE field and give mode 1 the sentence “The Subgroup ID field is absent and the Subgroup ID is the Object ID of the first Object transmitted in this Subgroup”. Different prose, one stream: 0x12 on both sides of the change.

Draft-15’s absence here was not a narrower guard but a silent one. Skipping the block admitted the elide instead of refusing it, so a hook removing index 0 of a draft-15 first-object stream handed the receiver a stream whose subgroup ID had become the second object’s. The draft list the tests sweep carried the same omission, so no run ever asked.

Nothing that checks this list may read it. Two places state the same partition independently and are what a narrowing here contradicts: the a_first_object_carrier_exists in this module’s tests, which names every draft in an exhaustive match, and the copy in tests/action_matrix.rs, transcribed from the drafts and driving end-to-end probes. Both cuts have been run — dropping draft-15, and narrowing to 17-19 — and each is caught by both. A test that took the fact from here instead passed under both.

The restatement discipline above and the exhaustive match below answer two different failures and neither substitutes for the other: restatement catches this list saying the wrong thing about a draft it names, and exhaustiveness catches it saying nothing about a draft that has just been added. As a matches! a fifteenth draft would silently take the drafts 07-10 answer.