Phase 4b — Wolfman Jack on the Air: CEWL cover rollup
23 JUL AT 10:53 PM

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.

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.

The lightbox, as designed

Mockup of the CEWL cover lightbox showing a Tags section with four tag rows above a WebLinks section

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 $cewlTypes increment and the bi-tags arm; wiring one would leave tags-only posts buttonless on the other layout. Two states ship: bi-tags when tags are the only CEWL type, bi-three-dots when 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-tag spans are emitted for visible and hidden tag blocks — hidden blocks still feed the aggregate, matching the family pattern.
  • Dedup and the empty case. CountPostTags dedups by tag.ID and counts items, not blocks — an empty block yields zero, so no false button.
  • XSS: the lightbox builds rows via innerHTML; every tag field goes through esc().
  • 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.

American Graffiti — Tags as a Content Block (master)
American Graffiti — Tags as a Content Block (master)
Jul 23, 2026 American Graffiti
← Back to American Graffiti