2.8 KiB
Web-профиль
Применяются неизменённые clear specifications из specs/. Они охватывают Web/Desktop/Android, но данная основа реализует только Web. Матрица applicability в planning/requirements.json перечисляет каждый ID и причину исключения native-only требований; они не исчезают из оригиналов.
Решения основы
- Один active account, несколько сохранённых configurations.
- Защищённый XMPP WebSocket WSS; native TCP/SRV options не изображаются рабочими browser controls.
- OMEMO на клиенте; backend не расшифровывает сообщения/файлы.
- Password только в памяти с повторным вводом по необходимости; persistent unlock crypto state — отдельный ADR и задача, не plaintext localStorage.
- Browser storage и quota отображаются честно; нет обещания hardware-backed vault.
- Browser notifications/push требуют permission/provider/gateway. Закрытая вкладка не является живым socket/media process.
- Нет автоматически работающего APNs/Android/tray/Watch пути.
- Framework, runtime versions, browser matrix и providers пока не приняты. Первые ADR выбирают их с первичными sources и runnable spikes.
- TypeScript — предпочтительный кандидат для типизированных contracts; окончательный язык/стек фиксирует S00-002. До этого scaffold не добавляет непроверенные dependency versions.
- Минимальный первый демонстрационный вертикальный срез не равен полной готовности. Release gate требует полного Web scope, encrypted send и interoperability evidence.
Обязательные ограничения
Нельзя обходить отсутствующую crypto library через самодельный Double Ratchet, mock-success или server plaintext. Если кандидаты несовместимы, фиксируется blocker и реальный plan change. Документационный scope задачи не делает криптографическую проблему простой: small LLM должна выполнить bounded spike/test либо передать конкретный blocker специалисту.
Публичные URL/providers записываются в runtime config. Credentials/VAPID private key/TURN secrets хранятся отдельно и не попадают в committed evidence.