- заведён каталог web/ — Vue 3, роутер пятой версии, сборка Vite; собранное вшивается через go:embed и раздаётся корневым маршрутом: разметка на неизвестном пути вне корней сервиса, отказ контракта внутри корня - перечень корней сервиса стал единой точкой и порождает регистрацию маршрутов, а не описывает её; журнал раздачи пишет исход и длину пути, но не сам путь - шаг front зовёт Node контейнером docker — Biome, юнит-тесты Vue и сборка входят в гейт, а в Dockerfile появилась ступень приложения
34 lines
2.0 KiB
Markdown
34 lines
2.0 KiB
Markdown
## ADDED Requirements
|
|
|
|
### Requirement: Приложение отдаётся без сессии
|
|
|
|
Сервис SHALL отдавать разметку приложения и её ресурсы без сессии. Перечень
|
|
адресов, открытых анонимно, пополняется ими: прежде в нём стояли только проба
|
|
здоровья и метрики.
|
|
|
|
Причина в самом входе: человек, ещё не вошедший, дошёл бы до входа только через
|
|
приложение, а закрытая сессией разметка отдала бы ему отказ вместо экрана. Цена
|
|
открытости названа здесь же и невелика — ни разметка, ни ресурсы содержимого
|
|
записей не несут: они одинаковы для всех и собираются до всякого запроса.
|
|
|
|
Открытость MUST не касаться данных: всякий адрес под корнем приложения
|
|
по-прежнему требует сессии, и приложение, открытое анонимно, не получает ни
|
|
одной записи.
|
|
|
|
#### Scenario: Разметка доступна анонимно
|
|
|
|
- **WHEN** запрос приходит на корень сервиса без сессии
|
|
- **THEN** ответ имеет код `200`
|
|
- **AND** тело ответа — разметка приложения
|
|
|
|
#### Scenario: Ресурс приложения доступен анонимно
|
|
|
|
- **WHEN** запрос приходит на ресурс приложения без сессии
|
|
- **THEN** ответ имеет код `200`
|
|
|
|
#### Scenario: Данные анонимно не отдаются
|
|
|
|
- **GIVEN** приложение открыто без сессии
|
|
- **WHEN** оно спрашивает список записей
|
|
- **THEN** ответ имеет код `401`
|