Skip to content

docs(v2): record the standard-coverage debt as Tier 5 - #229

Merged
s2x merged 1 commit into
v2from
v2-tier5-roadmap
Sep 3, 2026
Merged

docs(v2): record the standard-coverage debt as Tier 5#229
s2x merged 1 commit into
v2from
v2-tier5-roadmap

Conversation

@s2x

@s2x s2x commented Sep 3, 2026

Copy link
Copy Markdown
Member

Seven pieces of standard that a generator in the Shipped table does not
implement were tracked only in conversation. This makes them a tier.

They are collected rather than filed against their own entries because they
share a shape: each encoder was finished against what the round trip could
prove, and these are what the round trip never asked about. None of them is a
wrong symbol — each either costs modules a standard-complete encoder would not
spend, or refuses a payload the symbology could have carried.

Ordered by what it costs to leave alone:

  1. FfiEncoder intermittently reads a garbage size and the suite segfaults (present on main) #201 — the extension pass segfaults on roughly half of all CI runs and
    is continue-on-error: true, so a real extension regression would look
    exactly like the crash that is already there. The only defect on the list
    and the only one that hides other failures. Undiagnosed.
  2. QR chooses no modeEncoder.php passes Mode::Byte twice and nothing
    else, while DataEncoder implements numeric, alphanumeric and Kanji
    compaction that nothing reaches. Widest gap in ordinary use: eight bits a
    digit where the standard spends three and a third. The work is
    segmentation, not compaction.
  3. Data Matrix is ASCII only — no C40, Text, X12, EDIFACT or Base256.
    Digits are already optimal; text costs a third more than it should and
    binary goes through ASCII upshift.
  4. PDF417 has no ECI header and no macro block — the macro block is the
    one with a capability behind it: without it a payload over one symbol does
    not fit rather than taking two.
  5. Aztec has no FLG(n) — the one entry whose fix adds a symbology rather
    than shrinking a symbol. FLG(0) is FNC1, so gs1-aztec is that plus the
    FNC1 placement rule the GS1 layer already has.
  6. MaxiCode mode 5 — kept open for the reason Tier 3 already gave: its
    interleaving is not the plain mode's, nothing available writes one, and
    thirty candidate splits produced nothing the reader accepts.
  7. DataBar Expanded's fourteen variable-measure compaction methods — last
    on purpose. Narrowest set of inputs, fourteen field layouts to get wrong,
    one or two symbol characters saved.

Tier 6's opening paragraph claimed 5 was being left free for a symbology tier.
It now says what 5 holds.

Every claim in the new section was checked against the source rather than
recalled: Encoder.php:145/:222 for the QR modes, the absence of
Mode::Numeric/Alphanumeric/Kanji anywhere outside DataEncoder, the
AsciiEncodation docblock, the "not implemented" notes already in
Encoding\Aztec\HighLevelEncoder and Encoding\Pdf417\HighLevelEncoder, the
missing case 5 in Encoding\MaxiCode\Mode, and ci.yml:194-200.

Docs only — no source, tests or fixtures touched. composer lint:kb ok.

Seven pieces of standard that a shipped generator does not implement were
tracked only in conversation. They are now a tier, ordered by what it costs to
leave each one alone rather than by when it was written:

  * #201, the extension pass segfaulting under continue-on-error, first
    because it is the only defect here and it masks other failures;
  * QR calling the data encoder with Mode::Byte and nothing else, while
    numeric, alphanumeric and Kanji compaction sit implemented and unreached;
  * Data Matrix having ASCII and none of C40, Text, X12, EDIFACT or Base256;
  * PDF417 emitting no ECI header and no macro block, so a payload over one
    symbol does not fit rather than taking two;
  * Aztec having no FLG(n) -- the one entry whose fix adds a symbology, since
    FLG(0) is FNC1 and gs1-aztec is that plus the existing placement rule;
  * MaxiCode mode 5, kept open for the reason Tier 3 gave rather than a new
    one: nothing available writes one to measure against;
  * DataBar Expanded's fourteen variable-measure compaction methods, last
    because the risk-to-modules ratio is the worst in the tier.

Tier 6's opening claimed 5 was being left free for a symbology tier; it now
says what 5 actually holds.
@s2x
s2x merged commit 0f02ecf into v2 Sep 3, 2026
5 checks passed
@s2x
s2x deleted the v2-tier5-roadmap branch September 3, 2026 18:55
s2x added a commit that referenced this pull request Sep 3, 2026
docs(v2): record the standard-coverage debt as Tier 5
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant