Skip to content

By-ear + real-API pass: does the pick actually stop repeating? (spec 03-01 §2.3) #149

Description

@wine-fall

What it is

PR #148 shipped two changes aimed at one complaint — the pick task kept landing on the same handful of famous songs (Bon Iver's Holocene was the running example). Half of it is verified at the real seam; half of it could not be run on this machine.

Verified (real brain, real yt-dlp, one MusicProgrammer, no restart): the listener-owned $MURMUR_HOME/music-policy.md steers a live pick. The seeded default policy picked Clairo — Bags; rewriting the file mid-run to "only Cantonese songs released before 2000" made the very next pick 陳慧嫻 — 千千闋歌.

Not verified: the similar_music happy path. No Last.fm key exists on this machine (.env* and the environment both checked), so the only real-endpoint evidence is the failure path: https://ws.audioscrobbler.com/2.0/ accepts our URL shape and rejects a bad key with HTTP 403, surfaced cleanly through LastfmSimilar (src/lastfm.ts:88) — which in the tool becomes {ok: false, error} and costs the pick a turn, not the song. Whether artist.getsimilar / track.getsimilar return usable names, and whether the brain actually widens on them instead of ignoring them, is untested against the live API.

Unblocking it is a free key from https://www.last.fm/api/account/create (no listening account) exported as MURMUR_LASTFM_API_KEY. With no key the tool is absent from the tool list and discovery is exactly its pre-#148 self, so nothing is broken while this sits.

The anti-repeat depth also went 8 → 32 in the same PR. Whether the rotation actually feels wider is a by-ear judgment, and it shares this pass.

Spec

specs/spec03/03-01-brain-harness.md §2.3 (the 2026-08-25 extension) — the two-halves instruction, the key-gated similar_music tool, and acceptance criteria 6 and 7.

Done when

  • With MURMUR_LASTFM_API_KEY set, a real run shows similar_music returning real names (the tool result, or the music.* lines in .dev/dev.log).
  • At least one pick demonstrably came from a similar_music result rather than a first-guess search query.
  • Over a real listening stretch, the rotation feels less repetitive than before — no artist returning every other evening.
  • The policy file survives contact with a listener who actually rewrites it: an edit mid-broadcast reaches the next song, and a policy that ignores the built-in advice still produces a track with a spoken announce.

A "no" on any box becomes its own follow-up issue rather than reopening the spec contract.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    by-earUser-run sensory acceptance; not assertable in a test

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions