Skip to content

ear: thread tail + own-id in every pass — addressee judgment was blind - #11

Merged
Octember merged 1 commit into
mainfrom
claude/why-did-she-say-this-68db0b
Jul 31, 2026
Merged

ear: thread tail + own-id in every pass — addressee judgment was blind#11
Octember merged 1 commit into
mainfrom
claude/why-did-she-say-this-68db0b

Conversation

@Octember

Copy link
Copy Markdown
Owner

Why

Live 2026-07-30 (thread): Bevelina answered Noah's browserstack offer that was aimed at Pedro. The ledger chain:

  1. An ear pass whose entire batch was one mid-thread line ("LMK if you wanna get in on browserstack") ran in a fresh session with no parent, no earlier replies, and no way to look — and recorded the ask as hers (open_ask: "noah is asking whether you want access to browserstack").
  2. The next pass even attributed Pedro's "thanks! nice catch!" to her ("your thanks and nice catch did not answer noah's question") — the ear judges over raw <@U…> ids and didn't know which one is her own.
  3. 44 minutes later a new thread message woke her on the stale debt, and the wake's why-line became her first read of the room, so she answered a question that was never hers.

The ear design already mandates the missing context — "each pass reads only the delta past ear_cursor plus the live threads that delta touches" — the implementation dropped the second half. The soul's guidance ("a question aimed at another teammate is that person's to answer") was right; it just couldn't be applied blind.

What

Prompt-only, no new tools, no schema:

  • threadTailBefore (inbox.ts): the already-heard tail of a thread at or before the ear cursor, root included via its own-ts match (same convention as threads.ts). Speaker + text only.
  • runEarPass prepends one already heard block per thread the batch touches, so who-is-talking-to-whom is visible again.
  • composeEarInstructions names her principal id ("In the room she is <@…>"), so a mention of her is distinguishable from someone else's voice.

Tests: two new §-style rows in test/ear.test.ts (one reconstructs the incident shape). Full bun run check green — 384 pass.

🤖 Generated with Claude Code

Live 2026-07-30: an ear pass whose whole batch was one mid-thread line
("LMK if you wanna get in on browserstack") had no parent, no earlier
replies, and no id map, so it read noah's offer to a teammate as aimed
at her, recorded the debt, and the next wake had her answer a question
that was never hers (C0AUG2ZGVC5 thread=1785455500.025059).

The ear design already mandates the context ("each pass reads only the
delta past ear_cursor plus the live threads that delta touches") — the
implementation dropped the second half. Prompt-only fix, no new tools:

- threadTailBefore (inbox.ts): the already-heard tail of a thread at or
  before the ear cursor, root included via its own-ts match (threads.ts
  convention). Speaker + text only — all a context line needs.
- runEarPass prepends one 'already heard' block per thread the batch
  touches, so who-is-talking-to-whom is visible again.
- composeEarInstructions now names her principal id, so the ear can
  tell a mention of her from someone else's voice (it attributed
  pedro's reply to her at 00:12 for lack of this).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Octember
Octember merged commit 7a616e2 into main Jul 31, 2026
1 check passed
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