Skip to content

Commit 1cb5cbf

Browse files
authored
chore(14): generic-host rename — Pi as one example, not the default (#5)
Phase 14 of v1.2 (privacy / OSS hardening). The orchestrator now sells itself as a Linux-host deploy with Raspberry Pi positioned as one example target rather than the assumed default. Directory + file renames (git tracks as renames) - infra/pi-orchestrator/ -> infra/orchestrator/ - install/pi-install.sh -> install/install.sh - docs/deploy/pi.md -> docs/deploy/linux.md Script reframing - install/install.sh: banner becomes "VocalizeAI Linux Installer"; docstring lists Debian 12 / Ubuntu 22.04 / Raspberry Pi OS as tested targets; "Pi install complete" -> "Install complete". - infra/orchestrator/setup.sh, deploy.sh: rename `PI_HOST`/`PI_USER` args to `TARGET_HOST`/`TARGET_USER` (legacy PI_HOST / PI_USER still accepted as fallback env vars so existing operator muscle memory keeps working); rewrite banners + log lines + manual-steps copy to refer to "the remote host" instead of "the Pi"; both scripts pass `bash -n` and `shellcheck --severity=warning` clean. - infra/orchestrator/cloudflared-config.yml: header comments drop "on Pi" qualifier. Doc reframing (criterion #4 surfaces) - README.md, README.zh-CN.md: status line, file-tree comment, and cross-reference to deploy/linux.md all reframed to "Linux host (Raspberry Pi is one example target)". - CONTRIBUTING.md: reference to "live Pi orchestrator" becomes "Linux-host orchestrator". - docs/architecture.md: "Pi deployment assets" -> "Linux deployment assets"; Further Reading entry updated. - docs/deploy/local.md: env-table comments referring to "Pi" become generic ("orchestrator service port", "Linux-host orchestrator"). - docs/deploy/linux.md: full rewrite — intro, BOM, OS prep, Tailscale, Clone-and-Install, Environment Config, Cloudflare Tunnel, systemd, troubleshooting sections all reframed to "any modern Linux host with systemd"; the Pi-specific BOM + imaging + first-boot instructions are moved into a single "Hardware example: Raspberry Pi" subsection at the bottom. - infra/README.md: orchestrator entry reframed. - scripts/README.md: stability-driver description reframed. - CHANGELOG.md: v1.0.0 bullet reframed. - .github/ISSUE_TEMPLATE/bug_report.yml: OS examples include Debian 12; "Pi production" deployment mode becomes "Linux-host production"; journalctl hint refers to "a systemd-installed host" rather than Pi. Verification - `git grep -nIE "pi-orchestrator|pi-install|deploy/pi\.md" -- .` returns zero hits — all stale paths gone. - `shellcheck --severity=warning` clean on all three renamed shell scripts; `bash -n` clean too. - `pytest tests/test_app_startup_guards.py tests/test_pipeline.py` still pass (no production code touched; only path strings + docs). Phase: v1.2 / 14-generic-host-rename Requirements: SELF-LINUX-01..05
1 parent afc530c commit 1cb5cbf

18 files changed

Lines changed: 307 additions & 238 deletions

File tree

.github/ISSUE_TEMPLATE/bug_report.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,10 @@ body:
4949
label: "Environment"
5050
description: "Your setup details."
5151
placeholder: |
52-
- OS: macOS 15 / Ubuntu 24.04 / Raspberry Pi OS
52+
- OS: macOS 15 / Ubuntu 24.04 / Debian 12 / Raspberry Pi OS
5353
- Python version: 3.11.x
5454
- Node version: 20.x
55-
- Deployment mode: local dev / Pi production / other
55+
- Deployment mode: local dev / Linux-host production / other
5656
- VocalizeAI version / commit hash:
5757
validations:
5858
required: true
@@ -61,7 +61,7 @@ body:
6161
id: logs
6262
attributes:
6363
label: "Relevant logs"
64-
description: "Paste any relevant log output. Use `journalctl -u vocalize` on Pi, or the uvicorn terminal output locally."
64+
description: "Paste any relevant log output. Use `journalctl -u vocalize` on a systemd-installed host, or the uvicorn terminal output locally."
6565
render: shell
6666
validations:
6767
required: false

CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ cd frontend && npm run test:integration
3737
```
3838

3939
Note: `tests/integration/` release-audio cases require a physical audio setup
40-
(microphone + speaker) and a live Pi orchestrator. These are gated behind
40+
(microphone + speaker) and a live Linux-host orchestrator. These are gated behind
4141
`--release-audio` and do not run in PR CI.
4242

4343
All checks must pass on your PR before merge. CI runs lint (ruff + mypy + tsc),

README.md

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ across languages when needed.
1010

1111
## Current Status
1212

13-
**v1 ships** the universal phone-task engine, Web console, and Raspberry Pi
14-
orchestrator deployment. The backend 5-layer prompt architecture
13+
**v1 ships** the universal phone-task engine, Web console, and a Linux-host
14+
orchestrator deployment (Raspberry Pi was the original reference target;
15+
any modern Linux host with systemd works). The backend 5-layer prompt architecture
1516
(task_planner / preflight / merchant_agent / clarification_collector / relay)
1617
handles any phone task — restaurant bookings, service appointments, balance
1718
inquiries, status checks, and more. An OSS mirror is available at
@@ -91,12 +92,12 @@ VocalizeAI/
9192
│ ├── messages/ # next-intl zh/en bundles
9293
│ └── tests/ # vitest unit tests
9394
├── demos/ # runnable demos
94-
├── infra/ # deployment scripts (GPU node, Pi orchestrator)
95+
├── infra/ # deployment scripts (GPU node, Linux orchestrator)
9596
├── tests/ # pytest suite
9697
│ └── integration/ # Playwright laptop-loopback + AI-merchant harness
9798
├── install/ # one-shot install scripts
9899
│ ├── dev-install.sh # Mac/Linux local dev setup
99-
│ └── pi-install.sh # Raspberry Pi production deploy
100+
│ └── install.sh # Linux production deploy (Raspberry Pi is one example target)
100101
├── docs/ # architecture, deploy guides, release evidence
101102
├── scripts/ # smoke test and utility scripts
102103
│ └── smoke.sh # post-install end-to-end verification
@@ -117,13 +118,14 @@ VocalizeAI/
117118
See `.env.example` for the full env-var inventory including LLM, GPU service,
118119
and frontend build-time variables.
119120

120-
For the full production Pi deployment runbook, see [docs/deploy/pi.md](docs/deploy/pi.md).
121+
For the full Linux-host production deployment runbook (Raspberry Pi is one
122+
example target), see [docs/deploy/linux.md](docs/deploy/linux.md).
121123

122124
### GPU node requirements
123125

124126
SenseVoice (STT) and CosyVoice (TTS) run as separate GPU services and connect
125-
to the Pi orchestrator over Tailscale. GPU services are optional for local dev
126-
(the LLM path works without them). See [docs/deploy/pi.md](docs/deploy/pi.md)
127+
to the orchestrator host over Tailscale. GPU services are optional for local dev
128+
(the LLM path works without them). See [docs/deploy/linux.md](docs/deploy/linux.md)
127129
for the GPU node setup.
128130

129131
## Run the dev server

README.zh-CN.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,12 @@ VocalizeAI/
8585
│ ├── messages/ # next-intl zh/en bundles
8686
│ └── tests/ # vitest unit tests
8787
├── demos/ # runnable demos
88-
├── infra/ # deployment scripts (GPU node, Pi orchestrator)
88+
├── infra/ # 部署脚本(GPU 节点、Linux 编排器)
8989
├── tests/ # pytest suite
9090
│ └── integration/ # Playwright laptop-loopback + AI-merchant harness
9191
├── install/ # 一键安装脚本
9292
│ ├── dev-install.sh # Mac/Linux 本地开发环境安装
93-
│ └── pi-install.sh # 树莓派生产部署安装
93+
│ └── install.sh # Linux 生产部署安装(树莓派是一种受支持的目标)
9494
├── docs/ # 架构文档、部署指南、发布记录
9595
├── scripts/ # smoke 测试和工具脚本
9696
│ └── smoke.sh # 安装后端到端验证脚本
@@ -110,13 +110,13 @@ VocalizeAI/
110110

111111
完整环境变量清单(含 LLM、GPU 服务、前端构建变量)见 `.env.example`
112112

113-
完整的树莓派生产部署手册,见 [docs/deploy/pi.md](docs/deploy/pi.md)
113+
完整的树莓派生产部署手册,见 [docs/deploy/linux.md](docs/deploy/linux.md)
114114

115115
### GPU 节点要求
116116

117117
SenseVoice(STT)和 CosyVoice(TTS)作为独立 GPU 服务运行,通过 Tailscale
118118
与树莓派编排器连接。本地开发不需要 GPU(只需 LLM 路径即可运行)。GPU 节点配置见
119-
[docs/deploy/pi.md](docs/deploy/pi.md)
119+
[docs/deploy/linux.md](docs/deploy/linux.md)
120120

121121
## 跑开发服务器
122122

docs/architecture.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -556,7 +556,7 @@ See: `src/vocalize/server/ws.py`, `frontend/lib/audio*`, `frontend/components/Br
556556
| Env/config loading | `src/vocalize/config.py` |
557557
| Asyncio main pipeline | `src/vocalize/pipeline.py` |
558558
| Frontend (Next.js 14) | `frontend/` |
559-
| Pi deployment assets | `infra/pi-orchestrator/` |
559+
| Pi deployment assets | `infra/orchestrator/` |
560560
| GPU services setup | `infra/gpu-services/` |
561561
| Backend tests (pytest) | `tests/` |
562562
| Integration tests (Playwright) | `tests/integration/` |
@@ -611,5 +611,5 @@ See: `src/vocalize/server/ws.py`, `src/vocalize/server/sessions.py`
611611
## Further Reading
612612

613613
- **[docs/deploy/local.md](docs/deploy/local.md)** — Mac/Linux dev environment setup and env-var reference
614-
- **[docs/deploy/pi.md](docs/deploy/pi.md)** — End-to-end Pi production deployment runbook
614+
- **[docs/deploy/linux.md](docs/deploy/linux.md)** — End-to-end Pi production deployment runbook
615615
- **[CONTRIBUTING.md](../CONTRIBUTING.md)** — Contributor flow, code style, commit conventions
Lines changed: 84 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,62 @@
1-
# Deploying VocalizeAI on a Raspberry Pi
1+
# Deploying VocalizeAI on a Linux Host
22

3-
This runbook covers end-to-end production deployment of VocalizeAI on a
4-
Raspberry Pi: the orchestrator runs on the Pi; GPU services (SenseVoice STT +
5-
CosyVoice TTS) run on a separate machine reachable over Tailscale; a Cloudflare
6-
Tunnel fronts the Pi to the public internet.
3+
This runbook covers end-to-end production deployment of VocalizeAI on any
4+
modern Linux host with systemd: the orchestrator runs on this host, GPU
5+
services (SenseVoice STT + CosyVoice TTS) run on a separate machine reachable
6+
over Tailscale, and a Cloudflare Tunnel fronts the orchestrator host to the
7+
public internet.
8+
9+
Tested on **Debian 12**, **Ubuntu 22.04 / 24.04**, and **Raspberry Pi OS
10+
(Bookworm)**. A Raspberry Pi was the original reference target — see
11+
["Hardware example: Raspberry Pi"](#hardware-example-raspberry-pi) below for
12+
the BOM, OS imaging, and SSH bootstrap steps for that specific target.
713

814
---
915

10-
## Hardware Bill of Materials
16+
## Bill of Materials
1117

12-
**Raspberry Pi:**
13-
- Raspberry Pi 4 or Pi 5, **8 GB RAM recommended** (4 GB works for the orchestrator
14-
alone but is tight if other services run alongside)
15-
- 32 GB+ microSD card or USB SSD (SSD strongly recommended for production)
16-
- Reliable internet connection (Cloudflare Tunnel requires outbound HTTPS)
18+
**Orchestrator host:**
19+
- Any 64-bit Linux box with systemd, ≥ 2 GB RAM, ≥ 16 GB free disk.
20+
- Python 3.11 (installed by step 1 of `install/install.sh`).
21+
- Persistent internet connection (Cloudflare Tunnel requires outbound HTTPS).
1722

1823
**GPU node (separate machine):**
19-
- NVIDIA RTX-class GPU (GTX 1080 or better; RTX 30/40 series recommended)
20-
- Windows + WSL2 or Linux (PyTorch 2.7.1+cu128)
21-
- Reachable from the Pi over Tailscale on the configured `GPU_HOST` IP/hostname
24+
- NVIDIA RTX-class GPU (GTX 1080 or better; RTX 30/40 series recommended).
25+
- Windows + WSL2 or Linux (PyTorch 2.7.1+cu128).
26+
- Reachable from the orchestrator host over Tailscale on the configured
27+
`GPU_HOST` IP/hostname.
2228

2329
**Network:**
24-
- Tailscale account (free tier is sufficient) with both the Pi and GPU node enrolled
25-
- Cloudflare account with a domain pointed at Cloudflare DNS (free tier is sufficient)
30+
- Tailscale account (free tier is sufficient) with both the orchestrator host
31+
and the GPU node enrolled.
32+
- Cloudflare account with a domain pointed at Cloudflare DNS (free tier is
33+
sufficient).
2634

2735
---
2836

2937
## OS Preparation
3038

3139
```bash
32-
# Flash Raspberry Pi OS Lite (64-bit) to the SD card / SSD using Raspberry Pi Imager.
33-
# In Imager, pre-configure:
34-
# - hostname
35-
# - SSH enabled
36-
# - SSH public key (paste your ~/.ssh/id_ed25519.pub or generate one first)
37-
# - Wi-Fi credentials (if not using Ethernet)
38-
39-
# After first boot, SSH in and update the system:
40-
ssh pi@<pi-hostname>
40+
# On the orchestrator host (any modern 64-bit Linux with systemd):
41+
ssh <user>@<host>
4142
sudo apt-get update && sudo apt-get upgrade -y
4243

4344
# Ensure git and curl are present:
4445
sudo apt-get install -y git curl
4546
```
4647

48+
For the Raspberry Pi-specific imaging / first-boot steps, see
49+
["Hardware example: Raspberry Pi"](#hardware-example-raspberry-pi).
50+
4751
---
4852

4953
## Tailscale Setup
5054

51-
Tailscale provides the encrypted overlay network between the Pi and the GPU node.
55+
Tailscale provides the encrypted overlay network between the orchestrator
56+
host and the GPU node.
5257

5358
```bash
54-
# Install Tailscale on the Pi:
59+
# Install Tailscale on the orchestrator host:
5560
curl -fsSL https://tailscale.com/install.sh | sh
5661
sudo tailscale up
5762

@@ -66,28 +71,28 @@ tailscale status
6671

6772
Set `GPU_HOST` in `/opt/vocalize/.env` to the GPU node's Tailscale IP.
6873

69-
If the GPU services are not yet running, use `install/pi-install.sh --skip-gpu`
74+
If the GPU services are not yet running, use `install/install.sh --skip-gpu`
7075
to proceed with installation without the GPU-reachability check.
7176

7277
---
7378

7479
## Clone and Install
7580

7681
```bash
77-
# Clone the repository to the Pi:
82+
# Clone the repository to the orchestrator host:
7883
git clone https://github.com/DGPisces/VocalizeAI.git /opt/vocalize
7984
cd /opt/vocalize
8085

8186
# Dry-run first to preview all 7 steps:
82-
bash install/pi-install.sh --dry-run
87+
bash install/install.sh --dry-run
8388

8489
# Run the full installer:
85-
bash install/pi-install.sh
90+
bash install/install.sh
8691

8792
# Or run selectively:
88-
bash install/pi-install.sh --steps "1,2,6" # apt + venv + systemd only
89-
bash install/pi-install.sh --skip-gpu # skip GPU-reachability check in step 7
90-
bash install/pi-install.sh --skip-tunnel # skip step 5 (Cloudflare Tunnel info)
93+
bash install/install.sh --steps "1,2,6" # apt + venv + systemd only
94+
bash install/install.sh --skip-gpu # skip GPU-reachability check in step 7
95+
bash install/install.sh --skip-tunnel # skip step 5 (Cloudflare Tunnel info)
9196
```
9297

9398
**Installer steps:**
@@ -96,7 +101,7 @@ bash install/pi-install.sh --skip-tunnel # skip step 5 (Cloudflare Tunnel i
96101
|------|--------|
97102
| 1 | `apt-get install` python3.11 python3.11-venv python3-pip build-essential rsync |
98103
| 2 | Create `.venv` in `/opt/vocalize`, `pip install -e .` |
99-
| 3 | GPU services note (GPU lives on a separate host; no on-Pi install) |
104+
| 3 | GPU services note (GPU lives on a separate host; no on-orchestrator install) |
100105
| 4 | Tailscale presence check (warns if absent) |
101106
| 5 | Cloudflare Tunnel token-install instructions |
102107
| 6 | Copy `vocalize.service` to `/etc/systemd/system/`, copy `.env.template` to `/opt/vocalize/.env` if absent, `systemctl enable vocalize` |
@@ -124,9 +129,9 @@ sudo nano /opt/vocalize/.env
124129
| `GPU_HOST` | yes (if using GPU) | STT/TTS host — Tailscale IP of your GPU node |
125130
| `SENSEVOICE_WS_PORT` | default ok | STT port; default `8000` |
126131
| `COSYVOICE_WS_PORT` | default ok | TTS port; default `8001` |
127-
| `VOCALIZE_HOST` | default ok | uvicorn bind host; set to `0.0.0.0` for Pi production |
132+
| `VOCALIZE_HOST` | default ok | uvicorn bind host; set to `0.0.0.0` for production |
128133
| `VOCALIZE_PORT` | default ok | uvicorn bind port; default `8080` |
129-
| `ORCHESTRATOR_LISTEN_PORT` | default ok | Pi service port; default `8080` (legacy compatibility) |
134+
| `ORCHESTRATOR_LISTEN_PORT` | default ok | Orchestrator service port; default `8080` (legacy compatibility) |
130135
| `VOCALIZE_WS_BASE_URL` | **yes** | Public WS base URL; e.g. `wss://api.<your-domain>` — startup raises if missing in non-localhost mode |
131136
| `VOCALIZE_CORS_ORIGINS` | default ok | Comma-separated allowed CORS origins; default auto-picked from VOCALIZE_HOST |
132137
| `DEFAULT_LANGUAGE` | default ok | `zh` or `en`; default `zh` |
@@ -153,7 +158,7 @@ VOCALIZE_CORS_ORIGINS=https://<your-domain>
153158

154159
## Cloudflare Tunnel
155160

156-
The Cloudflare Tunnel connects the Pi to the public internet without exposing SSH
161+
The Cloudflare Tunnel connects the orchestrator host to the public internet without exposing SSH
157162
or opening firewall ports.
158163

159164
**Token-based install (recommended):**
@@ -163,15 +168,15 @@ or opening firewall ports.
163168
# Zero Trust -> Networks -> Tunnels -> [your tunnel] -> Configure
164169
# -> "Install and run a connector" -> Copy the displayed token
165170

166-
# Install the tunnel service on the Pi:
171+
# Install the tunnel service on the orchestrator host:
167172
sudo cloudflared service install <TUNNEL_TOKEN>
168173

169174
# Verify the service is running:
170175
sudo systemctl status cloudflared
171176
```
172177

173178
The reference ingress shape for this project is documented in
174-
`infra/pi-orchestrator/cloudflared-config.yml` (maps
179+
`infra/orchestrator/cloudflared-config.yml` (maps
175180
`vocalize-api.<your-tunnel-name>``http://localhost:8080` and
176181
`vocalize.<your-tunnel-name>``http://localhost:3000`). Configure
177182
the actual public hostname routing in the Cloudflare dashboard under
@@ -186,7 +191,7 @@ tunnel name; tunnels are account-specific.
186191

187192
### vocalize.service
188193

189-
The `vocalize.service` unit file is at `infra/pi-orchestrator/vocalize.service`
194+
The `vocalize.service` unit file is at `infra/orchestrator/vocalize.service`
190195
and is copied to `/etc/systemd/system/vocalize.service` by step 6 of the installer.
191196

192197
```ini
@@ -240,7 +245,7 @@ sudo systemctl restart vocalize
240245
After the installer completes (step 7 runs this automatically), verify the deployment:
241246

242247
```bash
243-
# Smoke test against the Pi's local port:
248+
# Smoke test against the orchestrator's local port:
244249
VOCALIZE_API_BASE=http://127.0.0.1:8080 bash scripts/smoke.sh
245250
# Exit 0 = working deployment
246251

@@ -251,7 +256,7 @@ VOCALIZE_API_BASE=https://api.<your-domain> bash scripts/smoke.sh
251256
The smoke script exercises 6 round-trips: `GET /health`, `POST /api/sessions`,
252257
`POST /api/sessions/{id}/task`, WS upgrade + send/recv, `DELETE /api/sessions/{id}`.
253258

254-
Note: the local smoke on the Pi uses port 8080 (production port), not 8000 (dev
259+
Note: the local smoke uses port 8080 (production port), not 8000 (dev
255260
port). Make sure `VOCALIZE_API_BASE` is set accordingly.
256261

257262
---
@@ -311,3 +316,39 @@ Common causes:
311316
**Port conflicts:**
312317
- `VOCALIZE_PORT` defaults to 8080. If another service occupies that port, change
313318
`VOCALIZE_PORT` in `.env` and update the Cloudflare Tunnel ingress rule accordingly.
319+
320+
---
321+
322+
## Hardware example: Raspberry Pi
323+
324+
The Raspberry Pi was the original reference target for this runbook. None of
325+
the steps above are Pi-specific; this section just captures the bits that
326+
differ when the orchestrator host happens to be a Pi.
327+
328+
### BOM
329+
330+
- Raspberry Pi 4 or Pi 5, **8 GB RAM recommended** (4 GB works for the
331+
orchestrator alone but is tight if other services run alongside).
332+
- 32 GB+ microSD card or USB SSD (SSD strongly recommended for production).
333+
- Reliable internet connection (Cloudflare Tunnel requires outbound HTTPS).
334+
335+
### Imaging and first boot
336+
337+
```bash
338+
# Flash Raspberry Pi OS Lite (64-bit) to the SD card / SSD using Raspberry
339+
# Pi Imager. In Imager, pre-configure:
340+
# - hostname
341+
# - SSH enabled
342+
# - SSH public key (paste your ~/.ssh/id_ed25519.pub or generate one first)
343+
# - Wi-Fi credentials (if not using Ethernet)
344+
345+
# After first boot, SSH in and update the system:
346+
ssh pi@<pi-hostname>
347+
sudo apt-get update && sudo apt-get upgrade -y
348+
349+
# Ensure git and curl are present:
350+
sudo apt-get install -y git curl
351+
```
352+
353+
From here on, the rest of this runbook (Tailscale, install, Cloudflare
354+
Tunnel, smoke) applies unchanged.

docs/deploy/local.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,12 @@ $EDITOR .env
7272
| `OPENAI_API_KEY` | **yes** | LLM authentication — any OpenAI-compatible provider (OpenAI, DeepSeek, Qwen, etc.) |
7373
| `OPENAI_BASE_URL` | default ok | LLM endpoint; default `https://api.deepseek.com/v1` |
7474
| `OPENAI_MODEL` | default ok | Model name; default `deepseek-chat` |
75-
| `GPU_HOST` | only if using GPU | STT/TTS host; use `localhost` for single-machine dev, Tailscale IP for Pi deployment |
75+
| `GPU_HOST` | only if using GPU | STT/TTS host; use `localhost` for single-machine dev, Tailscale IP for remote-GPU deployment (e.g. Raspberry Pi orchestrator → GPU node) |
7676
| `SENSEVOICE_WS_PORT` | default ok | SenseVoice STT WebSocket port; default `8000` |
7777
| `COSYVOICE_WS_PORT` | default ok | CosyVoice TTS WebSocket port; default `8001` |
7878
| `VOCALIZE_HOST` | default ok | uvicorn bind host; `127.0.0.1` for local dev, `0.0.0.0` for production |
7979
| `VOCALIZE_PORT` | default ok | uvicorn bind port; default `8080` (note: dev `main.py` defaults to 8000) |
80-
| `ORCHESTRATOR_LISTEN_PORT` | default ok | Pi service port; default `8080` (legacy; mirrors `VOCALIZE_PORT`) |
80+
| `ORCHESTRATOR_LISTEN_PORT` | default ok | Orchestrator service port; default `8080` (legacy; mirrors `VOCALIZE_PORT`) |
8181
| `VOCALIZE_WS_BASE_URL` | required when non-localhost | Public WS base URL (e.g. `wss://api.example.com`); startup raises if missing in non-localhost mode (D-11) |
8282
| `VOCALIZE_CORS_ORIGINS` | default ok | Comma-separated allowed CORS origins; auto-picked from VOCALIZE_HOST in dev mode |
8383
| `DEFAULT_LANGUAGE` | default ok | Session default language; `zh` or `en`; default `zh` |
@@ -178,7 +178,7 @@ cd frontend && npm run test:integration
178178
```
179179

180180
Note: `tests/integration/` release-audio cases require a physical audio setup
181-
(microphone + speaker) and a live Pi orchestrator. These are gated behind
181+
(microphone + speaker) and a live Linux-host orchestrator. These are gated behind
182182
`--release-audio` and do not run in PR CI. The standard integration test suite
183183
(`npm run test:integration`) runs the 8 text-bypass AI-merchant scenarios and
184184
does not require physical hardware.

0 commit comments

Comments
 (0)