mirror of
https://gitverse.ru/kpa39l/openspec-lab.git
synced 2026-09-29 09:15:01 +00:00
change email-storage-analysis: ФС vs Maildir анализ (задача 4)
- STORAGE_ANALYSIS.md: сравнение email.md/Maildir/MBOX/notmuch, рекомендация остаться на email.md + tags в frontmatter + опц. экспорт Maildir - 3 REQUIREMENTS в spec email-storage-format, change архивирован - Задача 4 из портфеля веб-UI закрыта
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
# Spec Delta — icq-services
|
||||
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: Жизненный цикл сервисов — только docker compose
|
||||
|
||||
Все сервисы проекта /opt/icq (prosody, webchat, slidgram) управляются исключительно
|
||||
через `docker compose up -d --force-recreate <service>`, а не ручными `docker start`
|
||||
или `docker create`. Каждый сервис подключён к сети `icq_default` и резолвится по
|
||||
имени сервиса (DNS-алиас из compose) внутри этой сети.
|
||||
|
||||
#### Scenario: prosody запущен штатно через compose
|
||||
|
||||
- **GIVEN** сервис prosody пересоздан командой `docker compose up -d --force-recreate prosody`
|
||||
- **WHEN** выполняется `docker ps --format '{{.Names}} {{.Networks}}'`
|
||||
- **THEN** у `icq-prosody` непустая колонка Networks, содержащая `icq_default`
|
||||
|
||||
#### Scenario: prosody подключён к сети icq_default
|
||||
|
||||
- **GIVEN** контейнер prosody в сети icq_default
|
||||
- **WHEN** выполняется `docker network inspect icq_default`
|
||||
- **THEN** в списке контейнеров есть `icq-prosody` с IPv4-адресом из 172.27.0.0/16
|
||||
|
||||
#### Scenario: резолвинг имени из веб-чата
|
||||
|
||||
- **GIVEN** контейнер веб-чата в той же сети
|
||||
- **WHEN** выполняется `docker exec icq-webchat getent hosts icq-prosody`
|
||||
- **THEN** возвращается IP 172.27.0.x (просоди виден из веб-чата)
|
||||
|
||||
## MODIFIED Requirements
|
||||
|
||||
### Requirement: Доступность веб-чата chat.nixg.ru
|
||||
|
||||
Контейнер `icq-prosody` имеет IP-адрес в сети `icq_default` и доступен из
|
||||
`icq-webchat` по имени `icq-prosody`; веб-клиент Converse.js подключается к
|
||||
wss://xmpp.nixg.ru без бесконечной загрузки.
|
||||
|
||||
#### Scenario: веб-клиент открывается
|
||||
|
||||
- **GIVEN** prosody в сети icq_default и доступен из webchat
|
||||
- **WHEN** браузер открывает https://chat.nixg.ru
|
||||
- **THEN** страница Converse.js загружается и показывает форму входа
|
||||
(не бесконечная загрузка)
|
||||
|
||||
#### Scenario: WebSocket-сессия устанавливается
|
||||
|
||||
- **GIVEN** веб-клиент открыт
|
||||
- **WHEN** Converse.js соединяется с wss://xmpp.nixg.ru
|
||||
- **THEN** handshake завершается HTTP 101 и появляется форма входа
|
||||
|
||||
### Requirement: Мост Telegram (Slidge)
|
||||
|
||||
Компонент `telegram.nixg.ru` продолжает аутентифицироваться с prosody
|
||||
(external component XEP-0114, порт 5347) после пересоздания prosody; данные моста
|
||||
(./slidgram/data) не затрагиваются.
|
||||
|
||||
#### Scenario: компонент аутентифицирован после пересоздания
|
||||
|
||||
- **GIVEN** prosody пересоздан через compose
|
||||
- **WHEN** выполняется `docker logs icq-prosody --tail 100`
|
||||
- **THEN** в логах нет ошибок аутентификации, компонент telegram.nixg.ru
|
||||
в списке активных (или нет критических ошибок)
|
||||
|
||||
#### Scenario: мост жив после пересоздания
|
||||
|
||||
- **GIVEN** prosody пересоздан через compose
|
||||
- **WHEN** выполняется `docker logs icq-slidgram --tail 50`
|
||||
- **THEN** нет ошибок подключения/аутентификации; мост в статусе Up
|
||||
Reference in New Issue
Block a user