Skip to content

docs: rehome the #618 zero-row ruling, with corrected corollaries - #720

Merged
WilfordGrimley merged 2 commits into
masterfrom
docs-zero-row-ruling
Aug 6, 2026
Merged

docs: rehome the #618 zero-row ruling, with corrected corollaries#720
WilfordGrimley merged 2 commits into
masterfrom
docs-zero-row-ruling

Conversation

@WilfordGrimley

Copy link
Copy Markdown

Summary

  • Rehomes the zero-row methodological ruling from issue Only 1 of 21 vote channels is reachable from the pooled runner, and it casts no votes: the full run's Stage D route is NOT ESTABLISHED #618's prose into 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.
  • Adds Corollary 1 (count by TAG, not by identity — a superseding caster writes under a new identity while the old one stays at zero forever; verified local-fallback-v1 reads 0 while frame-style-cast-v1 carries ~151,161 rows for the same conceptual channel).
  • Adds Corollary 2, corrected from an earlier draft that was pulled before landing: reads each channel's own docstring/design record before calling it defective, backed by the magnitude/exception split — local_fallback.compute_bleed_diff_mm runs unconditionally and persists the quantitative measurement to ImageEvidence.bleed_diff_mm (since migration 0087_imageevidence_bleed_diff_mm), while cast_bleed_edge_vote deliberately votes only on the exception (a confidently 'trimmed' reading) — verified directly against both docstrings and the migration file, not asserted.
  • Cross-references channel_report.py's existing "WHY ZERO GATES" / OPS-CORR-0008 principle 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

  • Docs-only change (one new markdown section, one docstring cross-reference comment) — no code paths modified, no new tests needed.
  • Every code claim in Corollary 2 verified against on-disk source before writing: local_fallback.cast_bleed_edge_vote docstring (negative-only design, 2026-07-15 supersession, moderator-co-sign rationale), local_art_edge.classify_art_edge_continuity docstring ("EVIDENCE-ONLY today"), image_evidence.py:1053 (fields["bleed_diff_mm"] = compute_bleed_diff_mm(image), unconditional), and migrations/0087_imageevidence_bleed_diff_mm.py.
  • Corollary 1's counts verified against production via read-only queries (grouped by anonymous_id): frame-style-cast-v1 151,161; bleed-edge-cast-v1 2,786; layout-class-cast-v1 228,914; ai-art-detector-v1 1,183; local-fallback-v1 0.
  • python3 .github/scripts/docs_lint.py — clean.
  • pre-commit run (ruff, isort, black, mypy, prettier) — passed on both touched files.
  • CI — not watched by this session per dispatch convention.

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).
@WilfordGrimley
WilfordGrimley merged commit 635ebeb into master Aug 6, 2026
14 checks passed
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