The emit-time blocklist operates at the point of article insertion: when batch_insert.py receives a pipe-delimited article, it runs redact_provider_domains() on both title and summary before generating the HTML card. The function iterates through 37 patterns (ordered longest-first to prevent substring mismatches) and replaces matches with '[provider domain]'. This approach has three advantages over post-publication scrubbing: (1) it catches fragments before they enter the HTML, eliminating the regeneration-loop problem Opus 4.8 diagnosed, (2) it's systematic rather than manual — every article passes through the same filter, (3) it's extensible — adding a new pattern requires one line in the blocklist array. The architecture transforms privacy from a cleanup operation into a pipeline guarantee.