You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Frame-style and bleed-edge attribute chips have zero CardTagVote rows, no substitute channel, and no wiring. The audit (PR #616) also measured that the votes are derivable from evidence already stored in the database, with no image fetch at all:
Chip
Derivable votes
Derivation from stored ImageEvidence
Modern Border
133,627
collector_line_collector_number non-empty
Old Border
9,006
illus_anchor_fired true, collector number empty
appropriate-bleed
2,786
bleed_class = "trimmed"
TOTAL
145,419
Cross-check: against ImageEvidence.artbox_frame_class the counts are 142,469 stored vs 142,633 derived. The 164-row gap is artbox_phash's own fetch failures, i.e. the derivation agrees with the independent classifier everywhere the classifier ran.
Why it matters
These chips are user-facing filter surfaces with nothing behind them. 145,419 votes' worth of signal is sitting in the DB unread.
Border-colour chips survived the same purge only by accident. Two separate identities compute border colour from the same classifier, so culling one left the other. Had that duplication been culled as redundancy, border colour would be at zero rows today too. The purge's selection criterion was not "is this signal available" — it was "does a second copy happen to exist". See OPS-CORR-0008 (identity-vs-channel purge).
It needs an evidence-reading caster, modelled on local_layout_class_cast: read ImageEvidence rows already in the DB, derive the chip, cast the vote.
It must not be the live-fetch pilot. Running run_pilot over the catalog to obtain these votes would re-fetch ~220,000 images to recompute facts that are already stored. That is the wrong instrument for this job.
This may be subsumed by the monolith: the owner's own scope statement includes "the pilot's relevant features", and carrying the pilot's chip casting into the monolith is precisely what re-wires these chips. If the monolith carries it, this issue closes as part of that work rather than as a separate backfill.
DECISION NEEDED (owner)
Authorise the chip re-derivation? It is a WRITE of 145,419 CardTagVote rows into the production database. Options:
(b) Defer, and carry the pilot's chip casting into the monolith so the votes fall out of the first full run.
(c) Neither — leave the chips at zero, with the consequence stated above.
Standing constraint: prod DB is read-only without an explicit poll.
What would close it
A caster that reads stored evidence (no fetch) and casts frame_style and bleed_edge votes, with the uniqueness/ignore-conflicts guard the other calculators use;
a dry-run whose would-cast counts reconcile against the 133,627 / 9,006 / 2,786 figures above;
an owner-tapped write poll;
non-zero row counts for all three chips afterwards.
LIVE vs LATENT
LIVE. The chips are at zero rows in production today.
What
Frame-style and bleed-edge attribute chips have zero
CardTagVoterows, no substitute channel, and no wiring. The audit (PR #616) also measured that the votes are derivable from evidence already stored in the database, with no image fetch at all:ImageEvidencecollector_line_collector_numbernon-emptyillus_anchor_firedtrue, collector number emptybleed_class = "trimmed"Cross-check: against
ImageEvidence.artbox_frame_classthe counts are 142,469 stored vs 142,633 derived. The 164-row gap isartbox_phash's own fetch failures, i.e. the derivation agrees with the independent classifier everywhere the classifier ran.Why it matters
run_pilot(local_identify_printing_tags.py:1790cast_frame_style_vote,:1807cast_bleed_edge_vote). Their other caller,image_evidence.extract_card_evidence, has zero production callers — see Border-color vote parity: bulk/streaming extraction paths do not cast the inline Stage C vote #510.What this needs — and what it must NOT be
It needs an evidence-reading caster, modelled on
local_layout_class_cast: readImageEvidencerows already in the DB, derive the chip, cast the vote.It must not be the live-fetch pilot. Running
run_pilotover the catalog to obtain these votes would re-fetch ~220,000 images to recompute facts that are already stored. That is the wrong instrument for this job.This may be subsumed by the monolith: the owner's own scope statement includes "the pilot's relevant features", and carrying the pilot's chip casting into the monolith is precisely what re-wires these chips. If the monolith carries it, this issue closes as part of that work rather than as a separate backfill.
DECISION NEEDED (owner)
Authorise the chip re-derivation? It is a WRITE of 145,419
CardTagVoterows into the production database. Options:Standing constraint: prod DB is read-only without an explicit poll.
What would close it
frame_styleandbleed_edgevotes, with the uniqueness/ignore-conflicts guard the other calculators use;LIVE vs LATENT
LIVE. The chips are at zero rows in production today.
Refs
extract_card_evidencehas no production callers), layout_class (borderless/black/white/silver) is computed by Stage C but never cast as a Tag vote #369 (layout_class computed but never cast — same defect shape, closed), Make the calculator roster a checkable contract: declare which tables each calculator writes, then verify it produces rows #577.