Skip to content

tables-block-zero-cost's byte-identity half: replace the frozen pins with a comparison against a block-less emitter #331

Description

@gafferongames

tables-block-zero-cost has two halves. The grep half — no Table source carries one symbol of the block form — is a standing property and is fine. The byte-identity half compares 38 Table sources against frozen pins under testdata/golden/tables/, and its strength has always come from WHERE those pins were written, not from the comparison itself.

Present state. The pins were originally written by the pre-block compiler, so the comparison was against a build that could not emit a Block file at all — a proof rather than a restatement. Fourteen of them, the Table HEADERS, were re-pinned when the cook's read side landed (#323), because every Table header now carries the build version, the shared cook read runtime, one <Name>Open per table and §20.3's layout asserts. Those fourteen are therefore no longer a pre-block compiler's text; the .cpp pins still are. Git carries the provenance.

What this issue is for. A frozen pin cannot survive a legitimate Table-emitter change without being re-pinned, and each re-pin costs the half a little more of what made it a proof. The shape that gives it back is a MECHANICAL comparison: build a sabotaged emitter with the block form removed — exactly the way tables-block-layout-model-negative-control and the two cook-open controls already build sabotaged emitters through go build -overlay — generate the corpus from it, and require the Table sources to be byte-identical to the ordinary build's.

That is a standing gate: it survives any legitimate Table-emitter change, because both arms move together, and it goes red precisely when the block form leaks into a Table source. The frozen pins would then be redundant for this half and could stay as ordinary goldens for their own sake.

Why it is filed rather than done. It is a new gate, not a subtraction; it belongs with the emitters. Raised out of the Makefile comment in the contraction pass (#328) so the Makefile can state what the gate checks TODAY and cite this issue for the rest, per the present-state documentation doctrine.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions