Skip to content

feat: 100 consecutive voice cycles with zero stalls and zero silent d…#118

Closed
andriypolanski wants to merge 1 commit into
GeniePod:mainfrom
andriypolanski:feat/100-cycle-soak
Closed

feat: 100 consecutive voice cycles with zero stalls and zero silent d…#118
andriypolanski wants to merge 1 commit into
GeniePod:mainfrom
andriypolanski:feat/100-cycle-soak

Conversation

@andriypolanski
Copy link
Copy Markdown
Contributor

@andriypolanski andriypolanski commented May 19, 2026

Summary

Adds a reproducible M1 soak harness under tests/voice/ that drives (or analyzes) 100 end-to-end voice cycles on Jetson hardware, records per-cycle latency and failure signals, and emits a single pass/fail summary plus a JSON ledger for the
closing PR.

Closes #109
Related: M1 roadmap in README

Changes

  • Add tests/voice/100-cycle-soak.sh with run (tee genie-core --voice stderr) and analyze (parse log → JSON ledger + exit code).

Real Behavior Proof

  • I have built and run the affected code locally (or noted why I could not).
  • I have verified the change end-to-end on Jetson hardware OR explained the equivalent verification path I used.

What I ran

cd /path/to/genie-claw
cargo build -p genie-core --release

# Jetson Orin Nano Super 8 GB — full stack via deploy scripts
export GENIEPOD_CONFIG=/opt/geniepod/config/geniepod.toml
./deploy/scripts/start_all.sh   # or equivalent systemd stack

# 100-cycle soak (interactive wake / push-to-talk)
./tests/voice/100-cycle-soak.sh run --cycles 100

# Optional: re-analyze a saved log
./tests/voice/100-cycle-soak.sh analyze tests/voice/out/soak-<timestamp>.log \
  --expect-cycles 100

Test plan

  • shellcheck --severity=warning tests/voice/100-cycle-soak.sh
  • cargo build -p genie-core --release
  • ./tests/voice/100-cycle-soak.sh analyze on a short sample log (unit-style smoke)
  • Jetson (required for M1 close): ./tests/voice/100-cycle-soak.sh run --cycles 100 → PASS, ledger attached
  • Confirm 0 silent drops: every non-empty transcript has a GeniePod: line in the same cycle
  • Confirm 0 stalls: 100 Total cycle lines, each under max-cycle budget

Acceptance criteria

  • 100 / 100 cycles complete without stall (timeout-bounded)
  • 0 silent drops (every cycle has either a real reply or a logged error)
  • Reproducible from a clean Jetson Orin Nano Super 8 GB on genie-ai-runtime v1
  • Ledger artifact attached to this PR

Notes for reviewers

  • The harness parses stderr markers already emitted by voice_loop.rs (Total cycle, You said, GeniePod). It does not yet inject canned WAV clips; cycles are operator-driven on hardware (wake word or push-to-talk).
  • Silent TTS (Piper produced no audio) is tracing-only today; extend markers in a follow-up if ledger needs audio-out confirmation without a microphone loopback.
  • VAD is not in the live capture path yet; soak measures fixed-window record → STT → LLM → TTS as shipped.
  • CI runs shellcheck on the script but does not execute a 100-cycle hardware soak.

@ai-hpc
Copy link
Copy Markdown
Member

ai-hpc commented May 21, 2026

Closing this as not intended for #109.

The plan for issue #109 is to test the voice loop with a real human on hardware, not by shell command.

Thanks @andriypolanski

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.

M1 exit: 100 human-tested voice-session cycles pass with zero stalls and zero silent drops

2 participants