Skip to content

Echo matching knows the hosts' names, however they are transcribed - #52

Merged
ralyodio merged 1 commit into
mainfrom
fix/echo-matching-knows-the-hosts-names
Nov 5, 2026
Merged

ralyodio merged 1 commit into
mainfrom
fix/echo-matching-knows-the-hosts-names

Conversation

@ralyodio

@ralyodio ralyodio commented Nov 5, 2026

Copy link
Copy Markdown
Contributor

Third and last one from the episode 8 post-mortem, found by rehearsing on the merged #51 leg.

riotcoder said:   "I'm RiotCoder, Anthony's AI assistant and co-host, and this is a rehearsal..."
cha0spunk heard:  riotcoder (other agent): Anthony's AI assistant and cohost.    ✓
                  room: I'm Riot Coder.                                          ✗ still riotcoder

Our TTS says "RiotCoder" as one word; the transcriber writes "Riot Coder" as two. echoesFloor() tokenizes on whitespace, so riot and coder are both absent from a bag built around the single token riotcoder. On a line that short the overlap falls to 1/3 — under the half it needs — and a host introducing itself arrives as the guest, at the top of the show, which is exactly where episode 8 started coming apart.

NAME_ALIASES already lists the spellings transcription actually produces ('riot coder', 'chaos punk', 'kaos punk', …), so echoesFloor() now collapses them to one token on both sides and reads 0 as o.

Only the multi-word aliases. The same lists contain single generic words — 'security', 'chaos', 'sales', 'cfo' — and collapsing those would merge words the guest is entitled to use himself. Swallowing the guest is the failure this code path already had once (episode 7's deaf hosts), so the rule stays narrow: only adjacent word pairs that spell an agent's name.

Tests cover both hosts' split spellings, the 0/o form, "Can you hear me?" still getting through, and a guest saying "security" not matching a line about rootkey. bun test 109 pass / 0 fail, tsc --noEmit clean.

🤖 Generated with Claude Code

Rehearsal on the merged #51 leg:

  riotcoder said:  "I'm RiotCoder, Anthony's AI assistant and co-host, ..."
  cha0spunk heard: riotcoder (other agent): Anthony's AI assistant and cohost.
                   room: I'm Riot Coder.                 <- still riotcoder

Our TTS says "RiotCoder" as one word and the transcriber writes "Riot Coder" as
two, so neither token is in the bag the floor claim built from "riotcoder". The
overlap on that short line fell to 1/3, under the half it needs, and a host
introducing itself arrived as the guest - at the top of the show, which is where
episode 8 started coming apart.

NAME_ALIASES already lists the spellings transcription produces ("riot coder",
"chaos punk", "kaos punk"), so echoesFloor now collapses them to one token on
both sides, and reads 0 as o. Only the MULTI-WORD aliases: collapsing single
generic ones like "security" or "chaos" would merge words the guest is entitled
to use himself, and swallowing the guest is the failure this code path already
had once.

109 pass, 0 fail; tsc clean.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@ralyodio
ralyodio merged commit a6c94bc into main Nov 5, 2026
3 checks passed
@ralyodio
ralyodio deleted the fix/echo-matching-knows-the-hosts-names branch November 5, 2026 17:29
ralyodio added a commit that referenced this pull request Nov 5, 2026
GROUPCALL_STATUS_URL was set nowhere, so every Off The Record leg ran blind in
two ways.

followRoom never started. The room already labels every line by caller ID -
{"who":"Anthony","kind":"person","trusted":true} next to {"who":"cha0spunk",
"kind":"agent"} - and the leg had none of it, so it fell back to its own
speech-to-text and had to guess from audio which voice was its co-host. That
guess is what #50, #51 and #52 were repairing; with the room's transcript it is
not a guess at all.

And roomWatch fell through to its no-status-URL branch, "twenty quiet minutes",
instead of "everyone else left" after a minute with no person in the room. So
when the guest hung up the hosts stayed: episodes 8 and 9 each left two legs
dialled into an empty room, one of them with an hour of its cap still to run,
until they were killed by hand.

A joined leg can work this out on its own - the room code is on the command line
and the worker key is in worker.env - so it now does, and an explicitly passed
value still wins.

111 pass, 0 fail; tsc clean.

Co-authored-by: riotcoder <riotcoder@profullstack.com>
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