Every car on the strip is tuned to the same station — Wolfman Jack, broadcasting over the whole town. The CEWL cover rollup is that broadcast: one button on the post cover that gathers everything the post carries. Phase 4b made tags a CEWL type, exactly like contacts, events, weblinks, and locations — counted, deduped by tag.ID, lighting the cover button, and rolled into the lightbox as a Tags section whose row Browse action drives straight to 4a's /tags/{slug}. A pure mirror of the four existing types — no new mechanism.
Phase 4b — Wolfman Jack on the Air: CEWL cover rollup
0 LOVES
2 VIEWS
The broadcast that rolls it all up: tags became a CEWL cover type — counted and deduped, lighting the cover button in both hero branches, with a Tags section in the lightbox whose Browse action drives to /tags/{slug}. Shipped 2026-06-10.
The lightbox, as designed
The CEWL lightbox with the new Tags section — four deduped tags with their group facets, stacked above WebLinks. Each row carries a Browse action to /tags/{slug}; the ... opens the per-tag more sheet.
Wired in both branches — the audit catches
- The hero logic is duplicated — an identical single-type icon chain in the cover branch AND the no-cover placeholder. Both got the
$cewlTypesincrement and thebi-tagsarm; wiring one would leave tags-only posts buttonless on the other layout. Two states ship:bi-tagswhen tags are the only CEWL type,bi-three-dotswhen mixed. - Visible blocks emit spans too. The other CEWL types scrape visible content from the DOM; tag pills can't be scraped that way, so
data-cewl-tagspans are emitted for visible and hidden tag blocks — hidden blocks still feed the aggregate, matching the family pattern. - Dedup and the empty case.
CountPostTagsdedups bytag.IDand counts items, not blocks — an empty block yields zero, so no false button. - XSS: the lightbox builds rows via
innerHTML; every tag field goes throughesc(). - The second action surface. The per-row Browse was wired — and the "…" more-sheet (Browse / Copy link / Share) was a second surface missed on the first pass, caught and fixed. All destinations resolve via
data-base-path, same-tab.
Proof: 7 Go tests plus the full suite green; a real-click smoke covering both button states, the Tags section, Browse, Copy, and Share.