用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/fossasia/voxbento --skill architecture-review命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
Use this skill to review pull requests for VoxBento. Covers correctness, security, architecture compliance, and testing.
Ask which skill or flow fits your situation. A router over the user-invoked skills in this repo.
Shared vocabulary for designing deep modules. Use when the user wants to design or improve a module's interface, find deepening opportunities, decide where a seam goes, make code more testable or AI-navigable, or when another skill needs the deep-module vocabulary.
基于 SOC 职业分类
| name | architecture-review |
| description | Use this skill to evaluate proposed architecture changes against VoxBento's design principles. |
Use this skill to evaluate proposed architecture changes against VoxBento's design principles.
BoothRegistry.set_active_interpreter) and MediaMTX (overridePublisher: yes).BoothRegistry is module-level in portal/booth_state.py. No external state store yet (see TD-03 in TECHNICAL_DEBT_REPORT.md).| Component | Does | Does NOT do |
|---|---|---|
| FastAPI portal | Routes, auth, admin, WS coordination, DB queries | Audio processing, transcoding, media relay |
| MediaMTX | WHIP ingest, WHEP playback, RTSP for ffmpeg | Auth, coordination, UI |
| Jitsi Meet | Floor session monitoring (receive-only iframe) | Audio ingest, interpreter publishing |
| Browser JS | WebRTC/WHIP, WebSocket, Jitsi iframe, mic meter | Server-side logic, DB access |
| ffmpeg (spawned) | PCM extraction from RTSP for transcription | Anything else |
| Transcription providers | Text from PCM audio | Media relay, broadcast, DB write |
pyproject.toml.uv add {pkg} (not pip); never edit uv.lock manually.portal/transcription/ subsystem..github/instructions/js.instructions.md for JavaScript conventions.portal/models.py with proper Mapped typing.alembic/versions/.batch_alter_table in the migration (see migration 008 as reference).static/js/interpreter-booth.js — both files must change together.portal/websockets/manager.py ws_booth loop + _handle_* function.session.granted_role, never from client data['role'].session_token, user_token, admin_token). Do not conflate.settings.effective_jwt_secret.Session.granted_role.| Proposal | Risk |
|---|---|
| "Add a WebSocket message to send audio data" | Violates browser-first principle |
| "Use Redis for real-time booth state" | Valid but requires careful migration of BoothRegistry |
| "Add a REST endpoint that returns the JWT secret" | Security violation |
| "Encode the role in the WebSocket join message and trust it" | Violates role trust model |
| "Store all session data in a cookie" | Risk of cookie size limits + replay attacks |
| "Add Vue for the admin panel" | Violates no-framework constraint |
| "Use aiortc for SFU" | Explicitly forbidden in invariants |
| "Proxy WHIP through FastAPI" | Breaks browser-first media architecture |
safe_redirect(url) — validates redirects to prevent open redirect attacks. Use it for all redirects._ensure_mediamtx_path(channel_id) — creates alwaysAvailable paths. Call before returning WHIP URL.asyncio.Lock in BoothRegistry — all booth mutations serialized. Prevents race conditions._get_engine() in portal/database.py defers connection until first use.from __future__ import annotations — deferred evaluation prevents circular import issues.MultiFernet.