docs: rehome the #618 zero-row ruling, with corrected corollaries - #720
Merged
Conversation
Adds the methodological ruling from issue #618's prose to docs/identification-pipeline.md so it survives that issue's closure: a zero-row channel is evidence we never ran it, not evidence it is unnecessary. Two corollaries: - Corollary 1: a zero-row IDENTITY is not a zero-row CHANNEL. Count by tag, not identity - local-fallback-v1 reads 0 while frame-style-cast-v1 carries the same conceptual channel's ~151,161 rows. - Corollary 2: read a channel's own docstring/design record before calling it defective, and check for a companion evidence column carrying the magnitude a vote channel deliberately narrows to an exception (bleed_diff_mm vs. the appropriate-bleed vote). Cross-referenced from channel_report.py's WHY ZERO GATES section, which states a related but distinct claim (instrument must not stay silent about a silent channel, vs. how to read a zero once surfaced).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
docs/identification-pipeline.md(new "Reading a zero-row channel" section) so it survives that issue's closure: a zero-row channel is evidence we never ran it, not evidence it is unnecessary; nothing is culled without a positive reason.local-fallback-v1reads 0 whileframe-style-cast-v1carries ~151,161 rows for the same conceptual channel).local_fallback.compute_bleed_diff_mmruns unconditionally and persists the quantitative measurement toImageEvidence.bleed_diff_mm(since migration0087_imageevidence_bleed_diff_mm), whilecast_bleed_edge_votedeliberately votes only on the exception (a confidently'trimmed'reading) — verified directly against both docstrings and the migration file, not asserted.channel_report.py's existing "WHY ZERO GATES" /OPS-CORR-0008principle from the new section (and back), stating explicitly that it is a different claim: that one is about the reporting instrument failing to notice a real silent channel; this ruling is about correctly interpreting a zero once the instrument has already surfaced it.Test plan
local_fallback.cast_bleed_edge_votedocstring (negative-only design, 2026-07-15 supersession, moderator-co-sign rationale),local_art_edge.classify_art_edge_continuitydocstring ("EVIDENCE-ONLY today"),image_evidence.py:1053(fields["bleed_diff_mm"] = compute_bleed_diff_mm(image), unconditional), andmigrations/0087_imageevidence_bleed_diff_mm.py.anonymous_id):frame-style-cast-v1151,161;bleed-edge-cast-v12,786;layout-class-cast-v1228,914;ai-art-detector-v11,183;local-fallback-v10.python3 .github/scripts/docs_lint.py— clean.pre-commit run(ruff, isort, black, mypy, prettier) — passed on both touched files.