Skip to content

ci: run Berd Call tests on macOS and Linux - #417

Open
johnmatthewtennant wants to merge 12 commits into
mainfrom
zack/berd-call-ci
Open

johnmatthewtennant wants to merge 12 commits into
mainfrom
zack/berd-call-ci

Conversation

@johnmatthewtennant

@johnmatthewtennant johnmatthewtennant commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Berd Call's tests are omitted from just tauri-test, so the Rust CI checks can pass while its unit and CLI integration tests fail. Add the complete berd-call package suite to the existing macOS and Linux jobs, and to local just ci. Clear Sherpa’s incomplete restored native-library cache on both Unix platforms before running tests. Tests explicitly ignored for native audio, installed voices, or downloaded models remain opt-in.

Includes fixes for four failures exposed by running the suite: two stale CLI usage assertions, a settings test missing its saved starting state, and a handoff race where provider expiry could end the session with a closed-runtime error instead of settling the handoff through the queued terminal event.

The input-cutover test coordinates the provider transcript with an explicit signal, so its pending-cutover assertion does not depend on CI scheduling within a fixed sleep.

Related issue

None found.

Testing

Exercised just tauri-test with a Cargo subprocess fixture: a failing Berd Call invocation makes the top-level recipe fail, so the existing Rust jobs cannot pass while that invocation fails.

The complete Linux package suite passes, including the CLI usage tests and the provider-expiry handoff integration test, which uses a local WebSocket provider and the real CLI subprocess. A macOS recipe fixture confirms the restored Sherpa directory is removed before Cargo starts. The changed CI recipe executed the complete package suite on macOS and Linux. The macOS saved-settings regression confirms that changing the Spokesperson voice preserves the saved agent voice and language.

johnmatthewtennant and others added 7 commits October 21, 2026 09:48
When the provider sent a session expiry immediately after a handoff, the
Spokesperson runtime had already closed by the time the host sent back the
accepted handoff tool output. The send failed with "Spokesperson runtime is
closed", which ended the session with that error instead of reporting that
the session expired before it could renew.

The runtime queues its terminal event before it closes, so ignore the closed
send and let that event settle the unresolved handoff.

Signed-off-by: John Tennant <jtennant@block.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The usage error output prints the help text, whose heading has been
"Usage:" since the help command was added. The management usage error test
still looked for lowercase "usage:", so it failed on every machine. CI does
not run the berd-call tests, so nothing caught it.

Signed-off-by: John Tennant <jtennant@block.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The usage error output prints the help text, whose heading has been
"Usage:" since the help command was added. The synthesis usage error test
still looked for lowercase "usage:", so it failed on every machine. CI does
not run the berd-call tests, so nothing caught it.

Signed-off-by: John Tennant <jtennant@block.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s from

Saving a live setting rereads the settings file under a lock and changes
only that setting. The Spokesperson voice test kept its starting settings
in memory and never wrote them, so the file started empty and the saved
arguments lost the voice and language. Save the starting settings first,
as the other saved settings tests do.

Signed-off-by: John Tennant <jtennant@block.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Zack <04f47b290b155b3b8b782b11501cdb15f1e21e82dfceefd01ff0ed405459d927@buzz.block.builderlab.xyz>
Signed-off-by: John Tennant <jtennant@block.xyz>
Co-authored-by: Zack <04f47b290b155b3b8b782b11501cdb15f1e21e82dfceefd01ff0ed405459d927@buzz.block.builderlab.xyz>
Signed-off-by: John Tennant <jtennant@block.xyz>
Co-authored-by: Zack <04f47b290b155b3b8b782b11501cdb15f1e21e82dfceefd01ff0ed405459d927@buzz.block.builderlab.xyz>
Signed-off-by: John Tennant <jtennant@block.xyz>
Co-authored-by: Zack <04f47b290b155b3b8b782b11501cdb15f1e21e82dfceefd01ff0ed405459d927@buzz.block.builderlab.xyz>
Signed-off-by: John Tennant <jtennant@block.xyz>
@johnmatthewtennant
johnmatthewtennant marked this pull request as ready for review October 21, 2026 16:17
@johnmatthewtennant
johnmatthewtennant requested a review from a team October 21, 2026 16:17
Keep the cancelled response inflight until its successor starts, so scheduled renewal cannot snapshot an incomplete conversation between transcript and response events. Include phase and session diagnostics when renewal fails.

Co-authored-by: Zack <04f47b290b155b3b8b782b11501cdb15f1e21e82dfceefd01ff0ed405459d927@buzz.block.builderlab.xyz>
Signed-off-by: John Tennant <jtennant@block.xyz>
@johnmatthewtennant
johnmatthewtennant marked this pull request as draft October 21, 2026 17:07
johnmatthewtennant and others added 2 commits October 21, 2026 13:08
Include a per-process sequence in temporary directory names so parallel fixtures cannot collide when SystemTime returns the same timestamp.

Co-authored-by: Zack <04f47b290b155b3b8b782b11501cdb15f1e21e82dfceefd01ff0ed405459d927@buzz.block.builderlab.xyz>
Signed-off-by: John Tennant <jtennant@block.xyz>
Co-authored-by: Aaron <f425b86c3b780d43f8d9cf1802429d04dd985bf92eac44fca9468b5ad3887c5e@buzz.block.builderlab.xyz>
Signed-off-by: John Tennant <jtennant@block.xyz>
johnmatthewtennant added a commit that referenced this pull request Oct 21, 2026
## Summary

Spoken agent names can be transcribed as homophones, preventing
name-based routing from selecting the intended agent. Add repeatable
`--stt-hint PHRASE` options to `start` and `session`, and pass them to
Apple SpeechAnalyzer as contextual strings before recognition starts.
Recognition restarts reuse the hints, and saved settings exclude them so
later conversations get their own vocabulary. Other speech backends
ignore them.

The companion Buzz plugin supplies the current conversation’s agent
names when the binary advertises this option.

### Related issue

N/A. The closest related work is
[#417](#417), which fixes existing
macOS package-test failures.

### Testing

In a live macOS Buzz call with conversation agent names supplied as
hints, John reported that transcription now recognizes the names well.
Previously, spoken “Zack” and “Aaron” had been transcribed as “Zach” and
“Erin,” preventing routing.

Automated coverage verifies that phrase hints preserve trimmed names,
reject empty or oversized input, and are excluded from settings
persisted for later calls. Live recognition after a recognizer restart
has not been measured.

---------

Signed-off-by: Nora <49aa1f65411fd096d2e2ec144f1e7aa36fdc76d1b907cfdf7be000c66f9d3b8e@buzz.block.builderlab.xyz>
Signed-off-by: John Tennant <jtennant@block.xyz>
Co-authored-by: Nora <49aa1f65411fd096d2e2ec144f1e7aa36fdc76d1b907cfdf7be000c66f9d3b8e@buzz.block.builderlab.xyz>
Co-authored-by: Aaron <f425b86c3b780d43f8d9cf1802429d04dd985bf92eac44fca9468b5ad3887c5e@buzz.block.builderlab.xyz>
@johnmatthewtennant
johnmatthewtennant marked this pull request as ready for review October 22, 2026 12:53

@morgmart morgmart left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤖 Automated code review

Recommend COMMENT. The runtime race fix and expanded Berd Call coverage are sound, and all supplied GitHub check runs completed successfully. One non-blocking issue remains: the new Sherpa cache cleanup does not honor the repository's supported custom Cargo target directory, so the added local test gate can still encounter the stale cache it intends to remove.

Deterministic publication result: 0 blocking and 1 non-blocking inline finding(s) publishable; 0 duplicate(s) suppressed; 0 blocking screenshot-evidence requirement(s) in this review body.

Comment thread justfile Outdated
Signed-off-by: Aaron <f425b86c3b780d43f8d9cf1802429d04dd985bf92eac44fca9468b5ad3887c5e@buzz.block.builderlab.xyz>

This branch has not been deployed

No deployments
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.

2 participants