feat: add make safe lyric-strip pass and deploy the annotation-only site#5
Merged
Conversation
David Dodd licensed the annotations/essays but not the underlying song lyrics. Split the build into two: - `make dist` — the full site (annotations + lyrics), for local self-hosters with a lawful source. Unchanged. - `make safe` — runs the build, then a new standalone post-pass (scripts/safe_build.py) that strips each song's verbatim lyric block and links out to dead.net/songs in its place. The strip pass removes only the lyric <blockquote> between a song's credit line and the first annotation anchor; essays, and the public-domain poems / dictionary entries / reader emails quoted within them, are preserved. It is byte-preserving (latin-1 round-trip, matching build_site.py), idempotent (via a marker), and clamps every removal at the annotation seam so malformed 1990s markup (e.g. eleven.html's unclosed blockquote) never loses annotation content. CI and the Pages deploy now run `make safe`, so the public site at annotated.thedeadly.app keeps the annotations but omits the lyrics. Verified: 100 song pages stripped, 0 new broken links, all annotation content preserved. The mirror/ history rewrite is intentionally deferred (see PLAN.md); mirror/ remains the committed build source until then. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
mirror/ is committed, so a fresh clone needs no crawl; lead with `make all` as the single command to build + audit + serve the full site, and demote `make mirror` to a refresh-only step. Note how to preview the safe build and that a running server reflects `make safe` on refresh. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
ds17f
added a commit
that referenced
this pull request
Jun 5, 2026
…ite (#5) * feat: add make safe lyric-strip pass and deploy the annotation-only site David Dodd licensed the annotations/essays but not the underlying song lyrics. Split the build into two: - `make dist` — the full site (annotations + lyrics), for local self-hosters with a lawful source. Unchanged. - `make safe` — runs the build, then a new standalone post-pass (scripts/safe_build.py) that strips each song's verbatim lyric block and links out to dead.net/songs in its place. The strip pass removes only the lyric <blockquote> between a song's credit line and the first annotation anchor; essays, and the public-domain poems / dictionary entries / reader emails quoted within them, are preserved. It is byte-preserving (latin-1 round-trip, matching build_site.py), idempotent (via a marker), and clamps every removal at the annotation seam so malformed 1990s markup (e.g. eleven.html's unclosed blockquote) never loses annotation content. CI and the Pages deploy now run `make safe`, so the public site at annotated.thedeadly.app keeps the annotations but omits the lyrics. Verified: 100 song pages stripped, 0 new broken links, all annotation content preserved. The mirror/ history rewrite is intentionally deferred (see PLAN.md); mirror/ remains the committed build source until then. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * docs: clarify Quick start — clone is build-ready, make all is one-shot mirror/ is committed, so a fresh clone needs no crawl; lead with `make all` as the single command to build + audit + serve the full site, and demote `make mirror` to a refresh-only step. Note how to preview the safe build and that a running server reflects `make safe` on refresh. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Damian Silbergleith <14797221+ds17f@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Splits the build into full (local) and safe (public), so the hosted site keeps David Dodd's annotations but omits the song lyrics he wasn't able to license.
make dist— full site (annotations + lyrics), for local self-hosters with a lawful source. Unchanged.make safe— runs the build, then a new standalone post-pass (scripts/safe_build.py) that strips each song's verbatim lyric block and links out to dead.net/songs in its place.CI and the Pages deploy now run
make safe, so annotated.thedeadly.app serves the annotation-only site.How the strip pass works
Removes only the lyric
<blockquote>sitting between a song's credit line ("Words by … used by permission") and the first<a name=…>annotation anchor. Everything from that anchor onward — the essays, and the public-domain poems / dictionary entries / reader emails quoted within them — is preserved. Inline lyric fragments quoted for commentary in essays are intentionally left (permitted annotation / fair use); only full per-song reproductions are stripped.Properties: byte-preserving (latin-1 round-trip, matching
build_site.py), idempotent (via a<!-- lyrics-stripped -->marker), and it clamps every removal at the annotation seam so malformed 1990s markup (e.g.eleven.html's unclosed<blockquote>) never loses annotation content.Verification
make safeandmake auditboth exit 0althea(Lovelace poem kept),clem(editorial note between verses kept),brok(reader note kept),darkstar(non-titleanchor),eleven(malformed blockquote),appl(no lyric block, untouched),nonsense(essay with fragments, untouched)Not in this PR
The
mirror/history rewrite is intentionally deferred to the very end (seePLAN.md).mirror/remains the committed build source until then.🤖 Generated with Claude Code