FB-12 point 3: the declared-extended files are deliberately outside the
byte comparison, so nothing reported when upstream changed them. Two of
three were touched between v0.1.1 and v0.3.1 and it only surfaced because
someone thought of it.
Two checks added to the script that already owns the subject, rather than
a second script beside it:
* completeness — every vendored file belongs to exactly one class.
check_harvest.py and judge.py were adopted byte-for-byte during the
upgrade and never entered the pair list; nothing compared them.
* reconciliation — if upstream touched an extended file between the
previous and the current baseline, ABGLEICH.tsv of the new baseline
must acknowledge it.
The acknowledgement lives in its own file on purpose. The first draft
searched HERKUNFT.md's prose for the filename, which is always there in
the inventory table: strict-looking and inert. Its selftest missed that
because the fixture was an unrealistically empty note; the counterfactual
against real history caught it.
Ten assertions, twelve deliberate breaks, none uncovered. Two of the
breaks exposed two useless assertions.