mirror of
https://gitverse.ru/kpa39l/email-assistant.git
synced 2026-09-29 09:15:09 +00:00
OpenSpec: разнести openspec по проектам
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
# Calendar CalDAV — Requirement Spec (Delta)
|
||||
|
||||
> New capability: `calendar-caldav`
|
||||
> Change: `local-calendar-tasks`
|
||||
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: REQ-CAL-001: Локальный CalDAV-сервер
|
||||
|
||||
**MUST** — на bigbox должен работать CalDAV-сервер (Radicale), доступный по
|
||||
HTTP на 127.0.0.1:5232, предоставляющий календари и задачи по стандарту CalDAV.
|
||||
|
||||
#### Scenario: Radicale отвечает
|
||||
|
||||
**GIVEN** Radicale запущен
|
||||
**WHEN** выполняется `curl -i -X PROPFIND http://127.0.0.1:5232/ -u login:pass`
|
||||
**THEN** ответ содержит HTTP 207 (Multi-Status) и список коллекций.
|
||||
|
||||
### Requirement: REQ-CAL-002: Календарь и задачи через CalDAV
|
||||
|
||||
**MUST** — Radicale должен поддерживать как календари (VEVENT), так и задачи
|
||||
(VTODO), чтобы Android-клиент (DAVx5) синхронизировал и календарь, и задачи.
|
||||
|
||||
#### Scenario: Создание события
|
||||
|
||||
**GIVEN** настроенный календарь пользователя
|
||||
**WHEN** клиент (DAVx5 на Android / curl) создаёт VEVENT через `PUT`
|
||||
**THEN** событие сохраняется в Radicale и доступно для чтения обратно.
|
||||
|
||||
### Requirement: REQ-CAL-003: Синхронизация с Android
|
||||
|
||||
**MUST** — сервер должен поддерживать стандарт CalDAV (RFC 4791) для
|
||||
двусторонней синхронизации с Android через DAVx5 (или аналог).
|
||||
|
||||
#### Scenario: Двусторонняя синхронизация
|
||||
|
||||
**GIVEN** DAVx5 настроен на Android с URL Radicale
|
||||
**WHEN** создаётся событие на телефоне
|
||||
**THEN** оно появляется на bigbox (Radicale) и наоборот (событие из Radicale
|
||||
доступно на телефоне).
|
||||
|
||||
### Requirement: REQ-CAL-004: Безопасность
|
||||
|
||||
**MUST** — Radicale доступен только локально (127.0.0.1) или через TLS-прокси
|
||||
(Caddy) с авторизацией; не должен быть открыт в интернет без TLS.
|
||||
|
||||
#### Scenario: Доступ снаружи
|
||||
|
||||
**GIVEN** Caddy reverse proxy настроен для Radicale
|
||||
**WHEN** Android подключается по https://<домен>/
|
||||
**THEN** соединение TLS + аутентификация работают; без Caddy доступ
|
||||
ограничен локальным интерфейсом.
|
||||
@@ -0,0 +1,52 @@
|
||||
# Task Tracker Vikunja — Requirement Spec (Delta)
|
||||
|
||||
> New capability: `task-tracker-vikunja`
|
||||
> Change: `local-calendar-tasks`
|
||||
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: REQ-VIK-001: Локальный трекер задач
|
||||
|
||||
**MUST** — на bigbox должен работать трекер задач Vikunja, доступный по
|
||||
HTTP на 127.0.0.1:3456 (или через Caddy на поддомене), с веб-интерфейсом
|
||||
и REST API.
|
||||
|
||||
#### Scenario: Vikunja отвечает
|
||||
|
||||
**GIVEN** Vikunja запущен (docker compose)
|
||||
**WHEN** выполняется `curl http://127.0.0.1:3456/api/v1/info`
|
||||
**THEN** ответ содержит JSON с `version` и статус 200.
|
||||
|
||||
### Requirement: REQ-VIK-002: REST API для создания задач
|
||||
|
||||
**MUST** — API Vikunja позволяет создавать задачи программно (для кнопки
|
||||
«Создать задачу» из веб-интерфейса почты), используя API-токен.
|
||||
|
||||
#### Scenario: Создание задачи через API
|
||||
|
||||
**GIVEN** валидный API-токен Vikunja
|
||||
**WHEN** выполняется `POST /api/v1/projects/<id>/tasks` с телом
|
||||
`{"title": "Тестовая задача", "description": "из письма"}`
|
||||
**THEN** задача создаётся (HTTP 201) и видна в веб-UI.
|
||||
|
||||
### Requirement: REQ-VIK-003: Авторизация
|
||||
|
||||
**MUST** — Vikunja должен требовать аутентификацию (логин/пароль или
|
||||
API-токен) для всех операций, кроме анонимного info.
|
||||
|
||||
#### Scenario: Доступ без токена запрещён
|
||||
|
||||
**GIVEN** неавторизованный запрос
|
||||
**WHEN** выполняется `POST /api/v1/projects/<id>/tasks`
|
||||
**THEN** возвращается 401/403, задача не создаётся.
|
||||
|
||||
### Requirement: REQ-VIK-004: Хранение данных
|
||||
|
||||
**MUST** — данные Vikunja хранятся в PostgreSQL (docker volume), переживают
|
||||
перезапуск контейнера.
|
||||
|
||||
#### Scenario: Перезапуск Vikunja
|
||||
|
||||
**GIVEN** Vikunja с созданными задачами
|
||||
**WHEN** контейнер перезапускается (`docker compose restart`)
|
||||
**THEN** задачи и проекты сохраняются (volume не теряется).
|
||||
Reference in New Issue
Block a user