Skip to content

Restore the airplay-search and playlist-archive listener surfaces - #233

Merged
jakebromberg merged 1 commit into
mainfrom
feat/restore-d3-listener-surfaces
Sep 8, 2026
Merged

Restore the airplay-search and playlist-archive listener surfaces#233
jakebromberg merged 1 commit into
mainfrom
feat/restore-d3-listener-surfaces

Conversation

@jakebromberg

Copy link
Copy Markdown
Member

Restores the two D3 listener surfaces pulled off main on 2026-08-26, now that the dj_name scrub they were blocked on has run.

Closes #232.

Why this is safe to restore now

WXYC/Backend-Service#2281 ran to completion against production on 2026-09-08: 1,103,206 rows rewritten, clean exit, zero lock waits. That removes Cohort A (the auth_user.name era) and Cohort B (the tubafrenzy DJ_NAME era) from flowsheet.dj_name — the two classes that took these pages down.

Cohort C remains by design — real names DJs themselves typed into tubafrenzy's free-text DJ_HANDLE field. The scrub's README is explicit that name-shaped residue after the run is expected, not a failed run. What was missing was evidence about whether that residue was ever actually public.

It was. Verified against the oldest retained tubafrenzy backup (wxycmusic-2025-10-13.sql) and the final pre-turndown dump (wxycmusic-2026-09-07.sql.gz), comparing each residual value against tubafrenzy's public DJ_HANDLE column rather than its private DJ_NAME column:

shows
Value is the public DJ_HANDLE 994
DJ_HANDLE empty — name only in private DJ_NAME 1

So restoring these pages re-publishes names that tubafrenzy itself published on those same shows. It does not expose anything that was private. Combined with the 1.1M rows the scrub removed, this is a large net reduction in exposure relative to the pages' pre-2026-08-26 state.

The analysis was done in SHA-256 hashes and counts throughout; no name was printed, and the derived hash files were deleted. Backups were read in place and never copied.

The one exception is excluded. legacy_show_id 168503 had an empty upstream DJ_HANDLE, so its name was never displayed on that show. Its shows.legacy_dj_name and the 29 carrying flowsheet rows (27 track + show_start + show_end) were nulled in a targeted transaction; the 6 talkset and 3 breakpoint rows on that show were already NULL and were not touched. That DJ's name remains public as their handle on 17 other shows, so the marginal exposure was near zero either way — excluded on principle rather than necessity.

What changed

Both pages are re-added whole from their revert parents — this is a re-add, not a rewrite. The reverts deliberately left the data layer in place (lib/flowsheetSearch.js, lib/flowsheetRange.js, components/OrganizingArchive.js), all confirmed still present.

  • pages/airplay-search.jsx + __tests__/airplaySearch.test.jsx — from 43c433dc^
  • pages/playlists/archive.jsx + __tests__/archivePlaylists.test.jsx — from 90643dc1^
  • content/page/programming.mdx — both links restored
  • __tests__/wxycInfoLinks.test.js — deliberate-gap note removed, the two programming.mdx link assertions and the three-route resolvePage case restored. The wxyc.info turndown guard itself stays and still passes.
  • README.md — both page sections restored in their original positions

Two corrections folded in rather than restored verbatim:

  • "back to 2009" → 2004. Restore the two reverted D3 listener surfaces once the dj_name scrub lands (deferred past the turndown) #232 flags this: flowsheet history reaches back to at least 2004-11-01, and the README sections and the page clamp already said 2004. The programming.mdx copy was the outlier.
  • Cutover date kept at 2026-09-07. e089f9c corrected these strings from 2026-08-31 after the reverts landed, so a plain checkout of the pre-revert wxycInfoLinks.test.js silently reverted that fix. Re-applied, and the README sections are phrased in the past tense now that the cutover has happened.

No backend work was required: GET /flowsheet/range and GET /flowsheet/search are live and CORS-cleared for wxyc.org via PUBLIC_READ_ORIGINS. This deliberately does not route through FRONTEND_SOURCE, which would grant credentialed access org-wide (the WXYC/Backend-Service#1107 hazard).

Note on #232's acceptance criteria

One criterion as written is unreachable and should be read as superseded:

Re-sampling historical weeks through /flowsheet/range finds no real-name-shaped values on marker rows or show headings.

Cohort C guarantees a non-zero count forever — that is the design, not a failure. The meaningful check is differential: Cohort A and B residue is gone, and every remaining hit resolves to a known Cohort C value that was publicly displayed as a handle. That is what the verification above establishes. See the discussion on #232.

Related

Both pages were reverted off main on 2026-08-26 (43c433d, 90643dc) because they render historical DJ identity that could hold real names. WXYC/Backend-Service#2281 ran against production on 2026-09-08 and rewrote 1,103,206 rows, removing Cohort A (the auth_user.name era) and Cohort B (the tubafrenzy DJ_NAME era) from flowsheet.dj_name.

Cohort C remains by design — names DJs typed into tubafrenzy's own free-text DJ_HANDLE field. Verified against the oldest retained backup (wxycmusic-2025-10-13) and the final pre-turndown dump (wxycmusic-2026-09-07) that 994 of the 995 affected shows carried that value in tubafrenzy's public DJ_HANDLE column rather than its private DJ_NAME column, so restoring re-publishes what tubafrenzy itself published on those shows. The single exception, legacy_show_id 168503, had an empty upstream handle and was nulled out separately.

Pages and their tests are re-added whole from the revert parents; the reverts left lib/flowsheetRange.js, lib/flowsheetSearch.js and components/OrganizingArchive.js in place, so no data-layer work was needed. The wxyc.info turndown guard in wxycInfoLinks.test.js stays and still passes — only the deliberate-gap note and the suppressed assertions come out.

Two corrections folded in rather than restored verbatim: programming.mdx said the archive reaches back to 2009 when flowsheet history runs to at least 2004-11-01, and a plain checkout of the pre-revert wxycInfoLinks.test.js would have silently undone e089f9c's 2026-08-31 to 2026-09-07 cutover-date fix.

Closes #232.
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.

Restore the two reverted D3 listener surfaces once the dj_name scrub lands (deferred past the turndown)

1 participant