LHK
0%

Tooling

A catalog that keeps itself honest.

Ten thousand pieces is more than one person can check. So the checking is automated: four jobs that find new work, verify what's already there, correct it, and remove what shouldn't have been added — with no human review step anywhere in the loop.

That last part is why the rules below are written the way they are. Automation that can't be taken back is a decision you only get to make once, so everything destructive runs on strikes, keeps a log, and reverts.

These describe what each job does and the rules it runs under, not how it's built. The interesting part was never the implementation.

The Curator

Weekly

Works through the catalog most-valuable-first, re-verifying every piece's data, correcting what's wrong, filling what's missing, and removing what should never have been there. It runs with no human review step, which is the whole reason its safeguards look the way they do.

Principle
Quality over quantity — a smaller correct catalog beats a larger careless one. Being obscure is never a reason to remove a piece; being wrong is.
Safeguard
Two strikes before anything is deleted, and thirty days to undo it. Every change is logged, and an entire run can be reverted in one step.
Never
Touches a piece someone has actually rated. Real user data outranks the bot's judgement, always.
Care
A collection wrongly filed as a single piece is split into its members before the grouping is removed, so the content survives and only the bad record dies.
412 pieces reviewed
38 corrections applied
!6 flagged for a second look
3 duplicates collapsed

Discovery

Daily

Grows the catalog. It walks the public-domain library looking for pieces that aren't in the catalog yet, screening candidates cheapest-check-first so nothing expensive is ever spent on something a cheap test could have rejected.

Principle
Reject at the entrance rather than clean up afterwards. Anything that isn't a single solo piano piece never gets written in the first place.
Safeguard
Every rejection is remembered, so a title is never judged twice — and the reasoning behind a rejection stays available if it turns out to be wrong.
Resumable
Progress is recorded on the records themselves rather than a cursor, so a run that stops halfway picks up exactly where it left off and nothing can get skipped.
500 candidates screened
31 rejected at the gate
12 added to the catalog

Requests

On demand

Lets someone who searched for a piece and found nothing ask for it, with me in the middle. Approved titles go through every stage of the normal pipeline — an approval moves a request into the queue, it doesn't bypass the quality checks.

Principle
A request is a wish, and a meaningful share of wishes are typos, works that aren't in the public domain, or pieces that simply don't exist there. Review is what turns a list of wishes into a catalog decision.
Safeguard
A declined request keeps its row and keeps counting votes, so a piece twenty more people ask for comes back to my attention instead of being quietly re-declined forever.

What it replaced

The search box that recorded wishes

The first version logged every search that found nothing, automatically and silently. Within a day the list was mostly keyboard mashing — because a search box is where people fumble, and a silent recorder can't tell fumbling from wanting. Asking explicitly, and capping how often, turned noise into a signal worth acting on.

18 requests received
!7 not in the public domain
6 approved and queued

Performance matching

Daily

Attaches a recording to each piece. Rather than taking the first search result, it pulls several candidates and validates each one — length against the piece's own duration, whether it can actually be embedded, and whether the title describes the right work by the right composer.

Principle
An empty slot is better than a wrong video. If nothing passes, the piece keeps no recording at all and is retried later.
Safeguard
A runner-up is kept alongside the pick, so the player has somewhere to fall back to when a video is later deleted or made private.
Loop
The curator clears recordings that no longer match on its next pass, and this refills the gap the following morning. Attach and verify are two halves of one cycle.

What it replaced

The John Field problem

The old flow searched and attached the first result, blind. That is how one piece ended up playing a two-hour compilation by an entirely different composer. The fix wasn't a better search query — it was to stop trusting the first answer at all and validate every candidate before accepting one.

90 pieces looked up
74 recordings accepted
!16 left empty, retry queued

All four run behind Répertoire, which is where the catalog they maintain actually gets used.

See the catalog