feat(director): the clock names the day, not just the hour [spec 04] - #191
Merged
Conversation
The grounding that landed in #165 tells the host the local time to the minute. It still could not tell a Monday from a Saturday: the six-hour scene bucket cannot, and neither could a bare "2:28 pm". `formatClock` now renders the weekday and the zero-padded date before the 12-hour local time, so every prompt that speaks aloud knows which day it is. Spec 04 §3.4 records the field's shape. Taken from #162 by Eis4TY, whose diagnosis this is. Its other half — the on-air track's played/remaining seconds — is left out on purpose: self- initiated beats are composed two deep ahead of air (spec 04 §3.3), so a countdown stamped at compose time is already false by the time it is spoken, and works against the anti-fabrication rules #165 added. Co-authored-by: Zach Guo <fawinell@gmail.com> Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DnTSsRfAnvPPhcbipAMrgW
This was referenced Sep 2, 2026
Closed
wine-fall
added a commit
that referenced
this pull request
Sep 4, 2026
"Say real things" shipped: the off-loop topic pool, weighted by the listener's spoken language and their timezone, landed via #201 and #203. The file's own rule is that a delivered line is deleted rather than archived, so the row and its section go, and spec 13 becomes the record — its two pointers into the deleted section are retargeted at itself. What survives the line is tracked elsewhere: #202 joins the by-ear list, and #44 closes on that issue's first box. Line 0's other half is resolved too, though not the way the file predicted. It called for the parallel clock and grounding work to be reconciled into one change; what actually happened is that #165 landed the grounding, #191 then landed only the weekday-and-date half of #162, and the play-progress half was deliberately dropped because the look-ahead makes a countdown false by the time it airs. Recorded as a decision, not a merge, so nobody re-proposes the progress fields. What is left of line 0 is the dropped first line, unchanged. Two cross-references pointed at the deleted line. #98's eval track is the sharper of them: line 2 shipped a prompt whose whole job is stochastic, and the only thing that caught its first draft getting that wrong was a person reading a dev log — so the eval is overdue, not upcoming. Claude-Session: https://claude.ai/code/session_018KVNGUoCkDfWFdLwkGWsAi Co-authored-by: Claude Opus 5 (1M context) <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.
Implements specs/spec04/04-no-dead-air.md §3.4 (the clock beside the bucket).
Closes #162 — this PR carries the half of it that still stands after #165, with @Eis4TY as the commit author.
What
The grounding that landed in #165 tells the host the local time to the minute. It still could not tell a Monday from a Saturday: the six-hour scene bucket cannot, and neither could a bare
2:28 pm.formatClocknow renders the weekday and the zero-padded date before the 12-hour local time —Monday 2026-08-31, 2:28 pm— so every prompt that speaks aloud knows which day it is. Same ICU-free hand-rolling as before, so the prompt text stays byte-stable across machines.What is left out, and why
#162 also proposed stamping the on-air track's played/remaining seconds on the prompt (
2:10 of 4:05 played, about 1:55 left). Dropped on purpose: self-initiated beats are composed two deep ahead of air (spec 04 §3.3,TALK_LOOKAHEAD = 2), so a countdown stamped at compose time is already false when the beat is spoken — and #165's red lines tell the model to say nothing that turns false when the music changes. Feeding it a precise, stale countdown works against that rule. Progress on the immediate reply path alone would be accurate, but is a separate, smaller change if it is ever wanted.Where
src/scene.ts—formatClockgains the weekday and date.specs/spec04/04-no-dead-air.md— §3.4 design note records the field's shape.test/scene.test.ts,test/prompts.test.ts,test/director-music.test.ts— the new shape pinned with injected clock values; the live-clock regex updated.Verification
pnpm test: the three test files above green; the full suite shows the same sixconfig/appfailures as cleanmain(a local-only isolation gap — the tests read the real~/.murmur/voice.json; CI has no such file).pnpm run typecheckandoxlint: clean.AI coding brief
Original request. The user asked whether they had recently opened PRs fixing the radio host "talking fake". Two open PRs fixed the same fabrication bug: #165 (the user's own) and #162 (a stranger's, from a fork, opened four hours earlier the same day). Both edited the same lines. The user asked to merge both; then, on learning #162 was from someone they did not know, asked whether just the weekday/date part could be taken in a way that still credits its author.
Manual interventions. (1) The agent initially reported both PRs as the user's — wrong; the user's question exposed that #162 had a different author. (2) A first reconciliation carried #162's progress numbers onto all four prompts; the agent's own review against the look-ahead buffer showed those numbers go stale on the beat path, and the user chose to keep only the clock half. (3) Pushing to the contributor's fork was blocked by permissions, so credit is carried by commit authorship (the contributor's GitHub noreply address, which links to their account) instead of updating #162 in place.
Retro. Check PR authorship before summarising "your PRs" — a
gh pr list --json authorup front would have saved a round. When reconciling two PRs that fix the same bug, evaluate each feature against the runtime's timing (here the look-ahead buffer) before merging, not after.🤖 Generated with Claude Code
https://claude.ai/code/session_01DnTSsRfAnvPPhcbipAMrgW