Skip to content

fix(prompts): the clock is bearings, not a line [spec 04] - #201

Merged
wine-fall merged 1 commit into
mainfrom
zachg-0903--time-is-bearings
Sep 4, 2026
Merged

fix(prompts): the clock is bearings, not a line [spec 04]#201
wine-fall merged 1 commit into
mainfrom
zachg-0903--time-is-bearings

Conversation

@wine-fall

Copy link
Copy Markdown
Owner

Relates to specs/spec04/04-no-dead-air.md §3.4 (the scene / clock cue) — a bugfix on the prompt rendering; the spec is not changed.

What

The clock is bearings, not a line. sceneLine rendered formatClock's "Monday 2026-08-31, 2:28 pm" bare, with no word on what it was for, while the scene cue right beside it came with guidance. The model did the obvious thing and read the date and minute out on every beat (by-ear: deliberate, stiff). The clock now arrives with its usage — mention the hour or day only when it lands in what is already being said, or when the listener asks outright; never as an announcement, a time-check, or an opener. One source line serves both talk builders and the reply path's status block.

Profile bookkeeping stays in the file. profileBlock injected profile.md verbatim, [seen YYYY-MM-DD] / [stable] tags included (spec 05-01 §3.3's fading ledger), and nothing told the model these were bookkeeping. MEMORY_GROUNDING guards against invented dates, not real ones read out. The trailing tag sequence is stripped at injection; fadeFacts reads the file and is untouched; the recall block's dates are deliberate and stay.

Tests

test/prompts.test.ts: the clock line carries its usage on every path that shows it (talk, batched talk, reply); the profile block has no tags on all three paths; tag-shaped text inside a fact is left alone.

Peer review

Peer review (codex gpt-5.6-sol): 3 findings, 3 applied, 0 dismissed — the reply path now allows a listener asking the time outright; tag stripping is anchored to the line end; comments state the invariant, not the history.

By-ear

Owed, folded into the spec-13 by-ear issue opened by the next PR: the host stops reciting the date, and answers "what time is it" when asked.

AI coding brief

Original request: two sequential PRs from a finished design; this is the first — a bugfix tagged spec 04, no spec change. The why: the listener heard the date read out on every beat and profile dates surfacing as content.

Manual interventions: none in this session; the design was pinned in the dispatching session (usage text, strip-at-injection, recall dates untouched).

Retro: the brief named the exact lines and the two seams, which made the fix a two-function change. The codex round caught the "listener asks the time" hole the brief did not name — worth stating the reply-path exception up front next time.

🤖 Generated with Claude Code

https://claude.ai/code/session_018KVNGUoCkDfWFdLwkGWsAi

The talk and reply prompts rendered the clock bare ("It's Monday
2026-08-31, 2:28 pm.") with no word on what it was for, so the host read
the date and minute out on every beat. It now arrives with its usage:
bearings, mentioned only when the hour or day lands in what is already
being said, never as an opener or a time-check. Same source line for the
talk builders and the reply status block.

The profile block also injected the fading ledger's [seen YYYY-MM-DD] /
[stable] tags verbatim, which the host read as content ("you told me on
the 31st"). They are stripped at injection; the file keeps them, and the
recall block's dates stay — those are deliberate.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018KVNGUoCkDfWFdLwkGWsAi
@wine-fall
wine-fall merged commit 52efd8a into main Sep 4, 2026
3 checks passed
@wine-fall
wine-fall deleted the zachg-0903--time-is-bearings branch September 4, 2026 05:33
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>
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