fix: reconcile the ledger with what is actually on GitHub - #27
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Three repos went private on GitHub while the ledger still believed they were public, so every visitor who clicked "코드 보기" on Studio Apartment, YouTube Rhythm Game or Unclog LA landed on a GitHub 404. Setting the private flag is enough: the Private rule already withholds the URL and keeps the demo link, and youtube-rhythm-game correctly falls out of the sitemap now that the repo link was the only place it had to go. toolsmith had drifted the other way — flagged private while the repo is public under MIT, so the site withheld a link GitHub already advertises back at this very page. minddump's tombstone pointed at a Vercel deployment that now 404s. The tombstone still carries supersededBy: kindling, which is where a visitor should go anyway. These were found by resolving every link in the ledger rather than trusting it. Worth repeating whenever repo visibility changes — a unit test cannot see a 404. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LaydoxAZ4eaqqPNKrmWLbt
Two substantial projects had been shipping outside the ledger. til-shorts is a seven-stage production pipeline that turns subjects with a recorded engineering setback into English-language shorts. Assets come from the studios factory and are referenced by id — the repo never copies one — and every stage sits behind a gate: two sources and a fact-check table before research closes, a three-second average cut and -14 LUFS before review, and a human press for production approval. The channel URL is deliberately not linked here. mv-analyzer quantitatively compares hit and buried music videos entirely locally, and is the rarer thing: it reversed one of its own findings when a within-channel matched reanalysis killed the premiere-release effect, and publishes the reversal. Both are private with no public destination, so both are thin pages the sitemap correctly skips. The home page's ALL WORK grouping moves to lib as HOME_GROUPS, because it fails silently in both directions — it drops a slug it cannot resolve and never renders a project nobody listed, with no error either way. Nothing but a test catches that, and a test needs it importable without React. Verified by mutation: dropping a slug, inventing one, and duplicating one each fail exactly one of the three new assertions. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LaydoxAZ4eaqqPNKrmWLbt
writingdeveloper
force-pushed
the
fix/ledger-drift
branch
from
August 19, 2026 19:33
674aac4 to
3607644
Compare
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.
Two of the recent pushes changed things the portfolio was still describing the old way. Found by resolving every link in the ledger instead of trusting it.
Links that 404'd for visitors
supersededBy: kindlingalready routes the visitortoolsmithdrifted the opposite way from the rest: GitHub's About URL already points at/projects/toolsmith, so the link was one-way for nothing.Two projects that were shipping outside the ledger
til-shorts — a seven-stage production pipeline for English-language shorts. Assets come from the studios factory by id (the repo never copies one), and every stage sits behind a gate: two sources plus a fact-check table before research closes, a three-second average cut and −14 LUFS before review, and a human press for production approval. The channel URL is deliberately not linked.
mv-analyzer — local quantitative comparison of hit vs. buried music videos. Notable for reversing one of its own findings: a within-channel matched reanalysis killed the premiere-release effect, and the project publishes the reversal.
Both are private with no public destination, so both are thin pages the sitemap correctly skips.
The silent failure underneath
The home page's ALL WORK grouping was a slug list in the page component, resolved with
.filter(Boolean). It fails silently in both directions — a slug that stops resolving just disappears, and a project nobody listed never renders — with no error, warning, or visibly broken page. Adding two projects today would have hit exactly that.Moved to
HOME_GROUPSinsrc/lib/projects.ts(next toAPP_CATEGORYandPROJECT_SHOWCASE, same shape, same reason) so a test can import it without pulling in React. Three assertions now cover it, verified by mutation: dropping a slug, inventing one, and duplicating one each fail exactly one of them.Verification
toolsmithshows the repo link and no Private badge; the three reverted projects show the badge and no code link; TOOLS renders 18 with the intended six visibletil-shorts/mv-analyzer/youtube-rhythm-gamecorrectly absent,unclog-la/studio-apartment/toolsmithcorrectly present in both localesprojects.jsonandgraveyard.jsonre-resolved anonymously: all 200🤖 Generated with Claude Code
https://claude.ai/code/session_01LaydoxAZ4eaqqPNKrmWLbt