{
  "run_id": "vr000m--pipecat-local-tts-server-claude-haiku-5-5-1793158843144487154",
  "date": "2026-10-28T03:42:46.006618+00:00",
  "repo": "vr000m/pipecat-local-tts-server",
  "kind": "repo",
  "source": "https://github.com/vr000m/pipecat-local-tts-server",
  "commit": "3bb043029b8cbfc8f2b5e2c205d59e5286cb6520",
  "model": "claude-haiku-5-5",
  "model_version": "claude-haiku-5-5",
  "test_version": "readme-c03644542c69939a9374958136a8b3431f7456269d3fb4b3c433785f59cfd637",
  "pass": true,
  "outcome": "pass",
  "time_to_working_s": 97.1892502749979,
  "total_s": 122.86210370063782,
  "steps": [
    "cd <guest-path> && pwd && ls -la && git status 2>&1 | head -3; python3 --version; id -u; cat /etc/os-release | head -2",
    "cd <guest-path> && cat README.md 2>/dev/null | head -c 7000",
    "cd <guest-path> && grep -n '^#' README.md; grep -n -i 'linux\\|tone\\|--once\\|--now\\|cron\\|webhook\\|schedul' README.md | head -60",
    "cd <guest-path> && sed -n 199,275p README.md",
    "cd <guest-path> && sed -n 338,366p README.md; echo ----; sed -n 721,760p README.md",
    "cd <guest-path> && grep -n 'requires-python\\|^name\\|^version' pyproject.toml | head; which uv; uv --version 2>&1; python3 -m pip --version; ls .coldpass; echo \"CDP: $CDP_URL\"; curl -sS -m 10 \"$CDP_URL/json/version\"; echo \" rc=$?\"",
    "cd <guest-path> && timeout 900 uv sync --extra client 2>&1 | tail -15; echo \"rc=${PIPESTATUS[0]}\"",
    "mkdir -p <guest-path> && cd <guest-path> && (setsid nohup uv run python -m tts_server serve --backend tone --socket-path <guest-path> > <guest-path> 2>&1 &) ; sleep 6; cat <guest-path>; ls -la <guest-path>",
    "cd <guest-path> && uv run python -m tts_server status --socket-path <guest-path>; echo rc=$?; sed -n 1,40p examples/reference_client.py",
    "mkdir -p <guest-path> && cd <guest-path> && uv run python examples/reference_client.py --socket-path <guest-path> --text \"Hello from the local server.\" --out <guest-path>; echo rc=$?; ls -la <guest-path>; python3 -I -c \"import wave,sys; w=wave.open('<guest-path>'); print(w.getframerate(), w.getnchannels(), w.getsampwidth(), round(w.getnframes()/w.getframerate(),2))\"",
    "cd <guest-path> && rm -f <guest-path> && grep -n 'writes the reassembled audio to a WAV\\|exits non-zero if no\\|(none (synthetic sine)\\|synthetic sine\\|Useful$\\|advertised rate\\|Unix domain socket (recommended' README.md",
    "cd <guest-path> && grep -rn -i 'cron\\|schedul\\|--once\\|--now\\|while True\\|call_later\\|interval' tts_server/*.py | head -20; ls tts_server; grep -n 'def main\\|add_parser\\|add_argument(\"--' tts_server/cli.py 2>/dev/null | head -30",
    "cd <guest-path> && cat > probe.json <<'EOF'\n{\"kind\":\"cli\",\"argv\":[\"uv\",\"run\",\"python\",\"examples/reference_client.py\",\"--socket-path\",\"<guest-path>\",\"--text\",\"Hello from the local server.\",\"--out\",\"<guest-path>\"],\"cwd\":\"<guest-path>\",\"expected_text\":\"wrote <guest-path> (24000 Hz, 1ch, 14400 bytes)\"}\nEOF\ncat > claims.json <<'EOF'\n[{\"kind\":\"claim\",\"claim\":\"The reference client speaks the wire protocol and writes the synthesized audio to a WAV file\",\"source\":\"the wire protocol directly and writes the reassembled audio to a WAV.\",\"input\":\"Hello from the local server.\",\"expected\":\"a WAV file is written at the --out path at 24000 Hz\",\"probe_kind\":\"cli\",\"argv\":[\"uv\",\"run\",\"python\",\"examples/reference_client.py\",\"--socket-path\",\"<guest-path>\",\"--text\",\"Hello from the local server.\",\"--out\",\"<guest-path>\"],\"expected_text\":\"wrote <guest-path> (24000 Hz, 1ch, 14400 bytes)\",\"cwd\":\"<guest-path>\"},{\"kind\":\"claim\",\"claim\":\"The server advertises an exact, stable audio rate of 24000 Hz\",\"source\":\"1. **An exact, stable advertised rate.** `server.hello.audio.rate` is the true\",\"input\":\"status against the running tone server\",\"expected\":\"status reports pcm16 at 24000 Hz\",\"probe_kind\":\"cli\",\"argv\":[\"uv\",\"run\",\"python\",\"-m\",\"tts_server\",\"status\",\"--socket-path\",\"<guest-path>\"],\"expected_text\":\"audio: pcm16 @ 24000 Hz / 1ch\",\"cwd\":\"<guest-path>\"}]\nEOF\ncat > cycles.json <<'EOF'\n{\"detected\":false,\"reason\":\"Entry points inspected: README and tts_server CLI (serve, status, prefetch) contain no cron, schedule, --once or --now trigger. The server runs a per-connection request loop that synthesizes only when a client sends input_text.commit, so there is no product cycle to trigger.\",\"checks\":[]}\nEOF\npython3 -I -c \"import json;[json.load(open(f)) for f in ['probe.json','claims.json','cycles.json']];print('json ok')\"",
    "cd <guest-path> && cat > examples.json <<'EOF'\n[{\"kind\":\"example\",\"claim\":\"Synthesize text through the running server with the documented reference client and write a WAV\",\"source\":\"README.md Examples: examples/reference_client.py\",\"input\":\"--text Hello from the local server.\",\"expected\":\"WAV written at 24000 Hz\",\"argv\":[\"uv\",\"run\",\"python\",\"examples/reference_client.py\",\"--socket-path\",\"<guest-path>\",\"--text\",\"Hello from the local server.\",\"--out\",\"<guest-path>\"],\"cwd\":\"<guest-path>\",\"expected_text\":\"wrote <guest-path> (24000 Hz, 1ch, 14400 bytes)\"},{\"kind\":\"example\",\"claim\":\"Check server health with the documented status command\",\"source\":\"README.md Checking server health\",\"input\":\"--socket-path <guest-path>\",\"expected\":\"status prints backend tone and the advertised rate\",\"argv\":[\"uv\",\"run\",\"python\",\"-m\",\"tts_server\",\"status\",\"--socket-path\",\"<guest-path>\"],\"cwd\":\"<guest-path>\",\"expected_text\":\"backend: tone (model: None)\"}]\nEOF\npython3 -I -c \"import json;json.load(open('examples.json'));print('ok')\"; cd <guest-path> && <env-var>=<guest-path> timeout 900 python3 -I <guest-path> --validate --replay 2>&1 | tail -60; echo rc=$?",
    "cd <guest-path> && cat > report.json <<'EOF'\n{\"outcome\":\"working\",\"fault_owner\":null,\"operation\":\"Start the local WebSocket TTS server with the tone backend, check its status, and synthesize speech to a WAV file through the documented reference client\",\"operation_scope\":\"Linux x86_64 guest, Ubuntu 24.04, Python 3.12.3, uv 0.13.5. Only the base tone backend (synthetic sine, no model weights) was exercised. Kokoro, Voxtral, Pocket, dia, Qwen3, Fish and Phonon need Apple Silicon mlx-audio and were not run. The macOS menu bar app and launchd recipes were not run. Server was on a Unix socket at <guest-path> and is left running until guest teardown.\",\"steps\":[\"uv sync --extra client\",\"uv run python -m tts_server serve --backend tone --socket-path <guest-path>\",\"uv run python -m tts_server status --socket-path <guest-path>\",\"uv run python examples/reference_client.py --socket-path <guest-path> --text \\\"Hello from the local server.\\\" --out <guest-path>\"],\"deviations\":[\"Checked CDP_URL/json/version first: HTTP 200 with Chrome/155 JSON. The product needs no browser, so nothing else was done with it.\",\"Used the README's uv-based client install (uv sync --extra client) instead of Apple Silicon extras; kokoro and other mlx backends are unsupported on this Linux guest.\",\"The git pin step (git init, remote add, fetch PINNED_COMMIT, reset) was not run: the workspace has no .git and no command needed Git metadata. The snapshot was used as delivered; the pin was not verified.\",\"Ran the server by hand with the README serve command so the CLI probes could reach it; the checker did not start it.\",\"Used uv run python for the reference client as the README's run-through-uv rule requires.\"],\"stuck_step\":null,\"main_blocker\":null,\"plain_failure\":null,\"suggested_fix\":\"No fix needed for the tested path. To verify the Apple Silicon backends, run this on a Mac with the kokoro extra.\"}\nEOF\npython3 -I -c \"import json;print(json.load(open('report.json'))['outcome'])\"; ls -la <guest-path>; ls <guest-path> 2>&1 | tail -1",
    "cd <guest-path> && <env-var>=<guest-path> timeout 900 python3 -I <guest-path> --validate --replay 2>&1 | python3 -I -c \"import json,sys; d=json.load(sys.stdin); print('valid=',d['valid'],'problems=',d['problems'],'replay=',d['replay']['status'])\"; echo rc=$?"
  ],
  "stuck_step": null,
  "error_excerpt": null,
  "what_it_did": "Start the local WebSocket TTS server with the tone backend, check its status, and synthesize speech to a WAV file through the documented reference client",
  "suggested_fix": null,
  "tokens_in": 346370,
  "tokens_out": 11978,
  "cost_usd": 0.015927939999999998,
  "usage_complete": true,
  "checks": [
    {
      "check": "operation",
      "status": "PASS",
      "details": {
        "working": true,
        "argv": [
          "uv",
          "run",
          "python",
          "examples/reference_client.py",
          "--socket-path",
          "<guest-path>",
          "--text",
          "Hello from the local server.",
          "--out",
          "<guest-path>"
        ],
        "kind": "cli",
        "returncode": 0,
        "stdout": "wrote <guest-path> (24000 Hz, 1ch, 14400 bytes)",
        "stderr": "hello: backend={'name': 'tone', 'model': None} rate=24000 caps={'streaming': False, 'binary_audio': False, 'text_formats': ['plain'], 'languages': ['en'], 'voice_count': 1, 'extras': ['speed'], 'ideal_words': 40, 'max_text_chars': 2000}\ndone: response_id=resp_8c101909f03d4b13 frames=15 bytes=14400 (~300 ms)",
        "needs_credentials": false,
        "needs_browser": false,
        "scope": "product operation"
      }
    }
  ],
  "safety": {
    "version": "z2x-1",
    "rules_version": "z2x-1",
    "summary": "Review signals: 175 known vulnerability.",
    "expected": "Reviewed as expected for a test run: attempted writes that failed, so nothing was written.",
    "findings": [
      {
        "kind": "known-vulnerability",
        "count": 175,
        "note": "OSV reports a known vulnerability in this dependency version.",
        "location_count": 11
      }
    ],
    "context": [],
    "limitations": [
      "A short run cannot establish that code is safe.",
      "Connections show IP addresses; proxies can hide the final hostname.",
      "Tracing covers dispatched commands and their children, not the whole OS; guest root can interfere with tracing."
    ],
    "static": {
      "dependency_note": "OSV scanned supported lockfiles; unpinned dependencies and unsupported formats are outside this check."
    },
    "evidence_url": "/safety/?run=vr000m--pipecat-local-tts-server-claude-haiku-5-5-1793158843144487154",
    "evidence_file": "/data/safety/vr000m--pipecat-local-tts-server-claude-haiku-5-5-1793158843144487154.json.gz"
  },
  "agent_execution": "native_agent",
  "agent_runtime": "claude-code",
  "agent_runtime_version": "2.1.310 (Claude Code)",
  "tool_transport": "mcp-assigned-vm",
  "platform": "linux",
  "reasoning": "low",
  "service_tier": null,
  "resources": {
    "cpus": 2,
    "memory_mib": 4096,
    "disk_mib": 32768
  },
  "native_tool_calls": 16,
  "native_bundle": null,
  "architecture": null,
  "backend": "hyperv",
  "platform_details": {
    "backend": "hyperv",
    "os": "linux"
  },
  "platform_conflicts": null,
  "sandbox_source": null,
  "source_pin": {
    "commit": "3bb043029b8cbfc8f2b5e2c205d59e5286cb6520",
    "url": "https://github.com/vr000m/pipecat-local-tts-server"
  },
  "purpose": "initial",
  "profile": {
    "model": "claude-haiku-5-5",
    "reasoning": "low"
  },
  "fault": {
    "owner": null,
    "status": "resolved",
    "reason": null
  },
  "fix_id": null,
  "verifies_run_id": null,
  "hosting": null,
  "operation_scope": "product operation",
  "tool_calls": 16,
  "guest_setup": null,
  "runtime": null,
  "runtime_version": null,
  "runtime_revision": null,
  "source_revision": null,
  "evidence_version": null,
  "failure_origin": null,
  "evidence_strength": "readme_checked",
  "works": "yes",
  "install_s": null,
  "first_use_s": null,
  "mcp": "none",
  "needs": [],
  "needs_which": null,
  "agent_interface": [
    "cli"
  ],
  "license": "BSD-2-Clause",
  "repo_url": "https://github.com/vr000m/pipecat-local-tts-server",
  "cost_to_try": "free",
  "hardware": null,
  "what_failed": null,
  "local_or_hosted": "local",
  "cycle_checks": [
    {
      "kind": "cycle",
      "claim": "Scheduled or looping main behavior",
      "source": "repository entry points",
      "input": "source inspection",
      "expected": "identify the product trigger",
      "verdict": "yes",
      "outcome": "Entry points inspected: README and tts_server CLI (serve, status, prefetch) contain no cron, schedule, --once or --now trigger. The server runs a per-connection request loop that synthesizes only when a client sends input_text.commit, so there is no product cycle to trigger.",
      "evidence": "Entry points inspected: README and tts_server CLI (serve, status, prefetch) contain no cron, schedule, --once or --now trigger. The server runs a per-connection request loop that synthesizes only when a client sends input_text.commit, so there is no product cycle to trigger.",
      "command": ""
    }
  ],
  "claims": [
    {
      "kind": "claim",
      "claim": "The reference client speaks the wire protocol and writes the synthesized audio to a WAV file",
      "source": "the wire protocol directly and writes the reassembled audio to a WAV.",
      "input": "Hello from the local server.",
      "expected": "a WAV file is written at the --out path at 24000 Hz",
      "command": "uv run python examples/reference_client.py --socket-path <guest-path> --text 'Hello from the local server.' --out <guest-path>",
      "verdict": "yes",
      "outcome": "Real input produced the expected result: wrote <guest-path> (24000 Hz, 1ch, 14400 bytes)",
      "evidence": "wrote <guest-path> (24000 Hz, 1ch, 14400 bytes)\nhello: backend={'name': 'tone', 'model': None} rate=24000 caps={'streaming': False, 'binary_audio': False, 'text_formats': ['plain'], 'languages': ['en'], 'voice_count': 1, 'extras': ['speed'], 'ideal_words': 40, 'max_text_chars': 2000}\ndone: response_id=resp_1c6504ab26594512 frames=15 bytes=14400 (~300 ms)\n",
      "returncode": 0,
      "source_checked": true,
      "source_file": "README.md"
    },
    {
      "kind": "claim",
      "claim": "The server advertises an exact, stable audio rate of 24000 Hz",
      "source": "1. **An exact, stable advertised rate.** `server.hello.audio.rate` is the true",
      "input": "status against the running tone server",
      "expected": "status reports pcm16 at 24000 Hz",
      "command": "uv run python -m tts_server status --socket-path <guest-path>",
      "verdict": "yes",
      "outcome": "Real input produced the expected result: audio: pcm16 @ 24000 Hz / 1ch",
      "evidence": "\u2026audio: pcm16 @ 24000 Hz / 1ch\n  capabilities: streaming=False binary_audio=False voice_count=1\n  session_id: session_f000b09756904a70\n  queue_depth: 0\n  voices (1): tone\n  buffered_chars: 0\n  session_uptime: 0.0s\n  pid: 2257\n",
      "returncode": 0,
      "source_checked": true,
      "source_file": "README.md"
    }
  ],
  "claims_note": null,
  "example_checks": [
    {
      "kind": "example",
      "claim": "Synthesize text through the running server with the documented reference client and write a WAV",
      "source": "README.md Examples: examples/reference_client.py",
      "input": "--text Hello from the local server.",
      "command": "uv run python examples/reference_client.py --socket-path <guest-path> --text 'Hello from the local server.' --out <guest-path>",
      "evidence": "wrote <guest-path> (24000 Hz, 1ch, 14400 bytes)\nhello: backend={'name': 'tone', 'model': None} rate=24000 caps={'streaming': False, 'binary_audio': False, 'text_formats': ['plain'], 'languages': ['en'], 'voice_count': 1, 'extras': ['speed'], 'ideal_words': 40, 'max_text_chars': 2000}\ndone: response_id=resp_cd6bd8128d0f4c02 frames=15 bytes=14400 (~300 ms)",
      "deferred": false,
      "expected": "WAV written at 24000 Hz",
      "returncode": 0,
      "verdict": "yes",
      "outcome": "command completed successfully"
    },
    {
      "kind": "example",
      "claim": "Check server health with the documented status command",
      "source": "README.md Checking server health",
      "input": "--socket-path <guest-path>",
      "command": "uv run python -m tts_server status --socket-path <guest-path>",
      "evidence": "tts_server: ok\n  protocol_version: 0.1\n  backend: tone (model: None)\n  audio: pcm16 @ 24000 Hz / 1ch\n  capabilities: streaming=False binary_audio=False voice_count=1\n  session_id: session_692e72f3d7cd46fd\n  queue_depth: 0\n  voices (1): tone\n  buffered_chars: 0\n  session_uptime: 0.0s\n  pid: 2257",
      "deferred": false,
      "expected": "status prints backend tone and the advertised rate",
      "returncode": 0,
      "verdict": "yes",
      "outcome": "command completed successfully"
    }
  ],
  "does_what_it_says": "yes",
  "maintenance": {
    "last_commit_at": "2026-10-28T00:04:35Z",
    "commits_90d": 210,
    "merged_prs_90d": 12,
    "open_issues": 0,
    "open_prs": 0,
    "reply_share": null,
    "reply_threads": 0,
    "median_reply_hours": null,
    "last_release_at": "2026-10-28T00:10:00Z",
    "archived": false,
    "verdict": "maintained",
    "note": "actively maintained: last commit 0 days ago; 210 commits and 12 merged PRs in 90 days; 0 open issues, 0 open PRs; latest release 2026-10-28"
  },
  "maintenance_verdict": "maintained",
  "maintenance_note": "actively maintained: last commit 0 days ago; 210 commits and 12 merged PRs in 90 days; 0 open issues, 0 open PRs; latest release 2026-10-28",
  "maintained": "active",
  "maintained_note": "last commit 0 days ago; 0 open issues, 2 answered or closed",
  "last_commit_at": "2026-10-28T00:09:58Z",
  "last_release_at": "2026-10-28T00:10:00Z",
  "open_issues": 0,
  "answered_issues": 2,
  "platforms_claimed": [
    "mac"
  ],
  "topic": "creative",
  "agent_interfaces": [
    {
      "interface": "cli",
      "evidence": "independent checker",
      "observed": true,
      "operation_checked": true
    }
  ],
  "agent_interfaces_note": "README metadata is a discovery hint, not pinned documentation proof. Observed interfaces were exercised in this run. An empty list means unknown.",
  "mcp_context": null,
  "tested_at": "2026-10-28T03:42:46.006618+00:00",
  "tested_commit": "3bb043029b8cbfc8f2b5e2c205d59e5286cb6520",
  "tested_with": {
    "agent": "claude-code",
    "agent_version": "2.1.310 (Claude Code)",
    "model": "claude-haiku-5-5",
    "model_route": "claude-haiku-5-5",
    "reasoning": "low",
    "os": "linux",
    "backend": "hyperv",
    "transport": "mcp-assigned-vm"
  },
  "setup_identity": {
    "repo": "vr000m/pipecat-local-tts-server",
    "source": "https://github.com/vr000m/pipecat-local-tts-server",
    "commit": "3bb043029b8cbfc8f2b5e2c205d59e5286cb6520",
    "source_revision": null,
    "os": "linux",
    "architecture": null,
    "backend": "hyperv",
    "model": "claude-haiku-5-5",
    "model_version": "claude-haiku-5-5",
    "agent_execution": "native_agent",
    "agent_runtime": "claude-code",
    "agent_runtime_version": "2.1.310 (Claude Code)",
    "tool_transport": "mcp-assigned-vm",
    "runtime": null,
    "runtime_version": null,
    "runtime_revision": null,
    "sandbox_source": null,
    "guest_setup": null,
    "source_pin": {
      "commit": "3bb043029b8cbfc8f2b5e2c205d59e5286cb6520",
      "url": "https://github.com/vr000m/pipecat-local-tts-server"
    },
    "platform_details": {
      "os": "linux",
      "backend": "hyperv"
    },
    "platform_conflicts": null,
    "reasoning": "low",
    "service_tier": null,
    "resources": {
      "cpus": 2,
      "memory_mib": 4096,
      "disk_mib": 32768
    },
    "operation": "Start the local WebSocket TTS server with the tone backend, check its status, and synthesize speech to a WAV file through the documented reference client",
    "operation_scope": "product operation",
    "hosting": null,
    "kind": "repo",
    "test_version": "readme-c03644542c69939a9374958136a8b3431f7456269d3fb4b3c433785f59cfd637",
    "evidence_version": null
  },
  "other_model": null,
  "other_run_id": null,
  "models_agree": null,
  "furthest_model": null,
  "transcript_url": "/transcripts/vr000m--pipecat-local-tts-server-claude-haiku-5-5-1793158843144487154.txt",
  "report_url": "/reports/vr000m--pipecat-local-tts-server-claude-haiku-5-5-1793158843144487154.json"
}
