docs(domain G): v2 — связь/телефон (Connectivity+Phone), после adversarial-ревью (15 находок) + кросс-док
Новый домен G: Connectivity-core (WiFi/LTE/tethering + BT-адаптер/паринг) + Phone-ап (HFP-звонки/контакты). Многоагентный adversarial-ревью: 24 находки, 15 подтверждено (default-refute; tech-измерение — 0, техника устояла), все применены. Ключевое из ревью: - BT-шов резолвнут двунаправленно: владелец BlueZ — Connectivity-core (G §3 ↔ H §6/§15 ✅). - Граница голоса: только HFP спаренного телефона; встроенный модем — data-only (VoLTE/eCall вне скоупа). - SIM PIN/PUK-флоу (sim_locked/no_sim) + captive-portal детект (portal/limited, не ложный online) — модем v1. - Connectivity поднимается на Stage 2 (синхр. с architecture §6). - Мультипаринг: ровно один active-телефон для HFP/PBAP (Dial/CallStateChanged однозначны). - SCO-loss mid-call → CallState=audio_lost + снятие роли phone_call → H раскорчивает медиа (не залипает). - Входящий-оверлей не перекрывает реверс-вид (z-order overlay-слота → C); tethering-петля AP+tether запрещена. - PBAP-синк фоновый; отказ-пути паринга/no_service симметрично J/H. Кросс-док: H §6/§15 (BlueZ ✅) + якоря D §147/§148→§10; architecture §3 (Connectivity+BT) /§6 (Stage 2); ipc §3 (Type+tether, State enum, CallState=audio_lost); security-privacy §7 (контакты/журнал/SMS local-first); hardware §4 (Bluetooth); tech-stack (NM/MM/BlueZ); C §11 (z-order overlay). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -78,7 +78,7 @@ capture-нода не «дакает» вывод; дакает медиа им
|
||||
intra-role, состояние для UI) — компонент Media-апа, подписан на `Assistant.StateChanged`/`Phone`/`Nav`/
|
||||
`Power` (ipc §3–4). До Media-апа (v1) хватает статической политики + ролей ассистента.
|
||||
|
||||
## 4. AEC и loopback-референс *(резолв D §147)*
|
||||
## 4. AEC и loopback-референс *(резолв D §10)*
|
||||
|
||||
- H **публикует monitor/loopback-tap смешанного выхода** как референс для эхоподавления (без него
|
||||
wake-word во время воспроизведения и barge-in невозможны).
|
||||
@@ -86,8 +86,8 @@ capture-нода не «дакает» вывод; дакает медиа им
|
||||
пути capture микрофона; референс — monitor-порты выхода. **Не внутри ассистента** (D потребляет уже
|
||||
очищенную capture-ноду). *(`module-echo-cancel` — отдельный модуль PipeWire, не `module-filter-chain`:
|
||||
последний — иной механизм (граф LADSPA/LV2/builtin), пригоден лишь для опц. кастомного денойза.)*
|
||||
→ закрывает «место AEC (в audio-plane vs внутри ассистента)» из D §147 в пользу audio-plane.
|
||||
- Beamforming/денойз салона (D §148) — отдельно (mic-массив, hardware); AEC ≠ денойз.
|
||||
→ закрывает «место AEC (в audio-plane vs внутри ассистента)» из D §10 в пользу audio-plane.
|
||||
- Beamforming/денойз салона (D §10) — отдельно (mic-массив, hardware); AEC ≠ денойз.
|
||||
|
||||
## 5. Локальное аудио
|
||||
|
||||
@@ -113,7 +113,8 @@ capture-нода не «дакает» вывод; дакает медиа им
|
||||
**cork/пауза транспорта + auto-resume по реконнекту**, не крэш, видимая индикация.
|
||||
- **Шов с G/Connectivity:** BT-адаптер, паринг и профиль **HFP** (звонок) — **не H** (домен G/Connectivity).
|
||||
H цепляет A2DP/AVRCP к уже спаренному устройству. Сосуществование A2DP↔HFP на одном устройстве — через
|
||||
политику (§3): входящий `phone_call` корчит A2DP-`media`. Владелец BlueZ — ◻️ (§15, с G).
|
||||
политику (§3): входящий `phone_call` корчит A2DP-`media`. Владелец BlueZ-адаптера/паринга —
|
||||
Connectivity-core (домен G, резолв G §3); сосуществование A2DP↔HFP — политика §3.
|
||||
- **Проекция (CarPlay/Android Auto)** несёт свои медиа+звонок — её аудио идёт ролями `projection`/`phone_call`;
|
||||
контроль/протокол проекции — **G**. H лишь маршрутизирует звук по политике.
|
||||
|
||||
@@ -223,10 +224,10 @@ capture-нода не «дакает» вывод; дакает медиа им
|
||||
- 🟡 **Декодер/кодеки:** `symphonia` (рек.) + **AAC-патент** (роялти) — юр-проверка; Opus → `audiopus`; SBC/AAC
|
||||
по BT, **aptX/LDAC исключены** (#12). → tech-stack.
|
||||
- 🟡 **FM-тюнер:** добавить в hardware §4 периферию **или** отказаться от радио. → hardware.
|
||||
- 🟡 **Владелец BlueZ/паринга** (Connectivity vs G vs shared) + сосуществование A2DP↔HFP. → G/Connectivity.
|
||||
- ✅ **Владелец BlueZ/паринга** — Connectivity-core (резолв в G §3); сосуществование A2DP↔HFP — политика §3. → G.
|
||||
- 🟡 **enable/mute-секвенс усилителя (anti-pop):** owner GPIO — hardware §4 (mute-GPIO), owner порядка — B §4. → hardware + B.
|
||||
- ✅ **AEC** — узел audio-plane (`module-echo-cancel`/WebRTC APM), референс = output-monitor, не в ассистенте;
|
||||
loopback-tap — §4. → резолв §4 (D §147; синхронизировано в d-assistant §10).
|
||||
loopback-tap — §4. → резолв §4 (синхронизировано в d-assistant §10).
|
||||
- ◻️ **Ранний звук на Stage-0-реверсе** (park-beep до поднятия аудио-плоскости) — нужен ли отдельный путь. → J/E/B.
|
||||
- ◻️ **Split политики:** сколько в статическом WirePlumber vs Rust-координаторе (+ crash-safety проактивного
|
||||
cork, тайминги гистерезиса/фейда дакинга). → реализация.
|
||||
@@ -247,7 +248,7 @@ capture-нода не «дакает» вывод; дакает медиа им
|
||||
| Ducking | cork (звонок) vs duck (ассистент/нав); duck — относительный аттенюатор; гистерезис/фейд (анти-pumping) | 2026-06-22 |
|
||||
| Crash-safe | две оси: source (жизнь ноды + проактивный cork по `NameOwnerChanged`/watchdog) + sink (пересчёт при возврате output) | 2026-06-22 |
|
||||
| Где политика | статика — конфиг WirePlumber (Stage 1, переживает крэш); динамика — координатор Media-апа | 2026-06-22 |
|
||||
| AEC | `module-echo-cancel` (WebRTC APM) в audio-plane (не в ассистенте); H даёт loopback-референс — **резолв D §147** | 2026-06-22 |
|
||||
| AEC | `module-echo-cancel` (WebRTC APM) в audio-plane (не в ассистенте); H даёт loopback-референс — **резолв D §10** | 2026-06-22 |
|
||||
| Декодер | `symphonia` (Rust, MPL-2.0; AAC-патент на юр-проверку; Opus НЕ поддержан → `audiopus`); aptX/LDAC исключены (#12) | 2026-06-22 |
|
||||
| BT-аудио | A2DP sink (SBC/AAC) + AVRCP; обрыв → cork+auto-resume; паринг/HFP — G/Connectivity (шов) | 2026-06-22 |
|
||||
| Радио/стриминг | later (v3); FM требует тюнера (нет в hardware); стриминг — креды юзера, провайдер-агностик | 2026-06-22 |
|
||||
|
||||
Reference in New Issue
Block a user