Skip to content

feat: add make safe lyric-strip pass and deploy the annotation-only site#5

Merged
ds17f merged 2 commits into
mainfrom
feat/safe-publish-pass
Jun 4, 2026
Merged

feat: add make safe lyric-strip pass and deploy the annotation-only site#5
ds17f merged 2 commits into
mainfrom
feat/safe-publish-pass

Conversation

@ds17f
Copy link
Copy Markdown
Owner

@ds17f ds17f commented Jun 4, 2026

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

  • 100 song pages stripped, 102 lyric blocks removed
  • 0 new broken links introduced (audit improved 35→32 preserved-source anchor issues)
  • make safe and make audit both exit 0
  • Spot-checked: althea (Lovelace poem kept), clem (editorial note between verses kept), brok (reader note kept), darkstar (non-title anchor), 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 (see PLAN.md). mirror/ remains the committed build source until then.

🤖 Generated with Claude Code

ds17f and others added 2 commits June 4, 2026 11:24
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 ds17f merged commit fd7db20 into main Jun 4, 2026
1 check passed
@ds17f ds17f deleted the feat/safe-publish-pass branch June 4, 2026 19:10
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>
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.

1 participant