Files
transcriber/openspec/changes/archive/2026-08-15-spa-skeleton/specs/access/spec.md
T
av 663021f712 приложение собрано каркасом и вшито в бинарник
- заведён каталог web/ — Vue 3, роутер пятой версии, сборка Vite; собранное
  вшивается через go:embed и раздаётся корневым маршрутом: разметка на
  неизвестном пути вне корней сервиса, отказ контракта внутри корня
- перечень корней сервиса стал единой точкой и порождает регистрацию маршрутов,
  а не описывает её; журнал раздачи пишет исход и длину пути, но не сам путь
- шаг front зовёт Node контейнером docker — Biome, юнит-тесты Vue и сборка
  входят в гейт, а в Dockerfile появилась ступень приложения
2026-08-15 18:51:05 +03:00

2.0 KiB

ADDED Requirements

Requirement: Приложение отдаётся без сессии

Сервис SHALL отдавать разметку приложения и её ресурсы без сессии. Перечень адресов, открытых анонимно, пополняется ими: прежде в нём стояли только проба здоровья и метрики.

Причина в самом входе: человек, ещё не вошедший, дошёл бы до входа только через приложение, а закрытая сессией разметка отдала бы ему отказ вместо экрана. Цена открытости названа здесь же и невелика — ни разметка, ни ресурсы содержимого записей не несут: они одинаковы для всех и собираются до всякого запроса.

Открытость MUST не касаться данных: всякий адрес под корнем приложения по-прежнему требует сессии, и приложение, открытое анонимно, не получает ни одной записи.

Scenario: Разметка доступна анонимно

  • WHEN запрос приходит на корень сервиса без сессии
  • THEN ответ имеет код 200
  • AND тело ответа — разметка приложения

Scenario: Ресурс приложения доступен анонимно

  • WHEN запрос приходит на ресурс приложения без сессии
  • THEN ответ имеет код 200

Scenario: Данные анонимно не отдаются

  • GIVEN приложение открыто без сессии
  • WHEN оно спрашивает список записей
  • THEN ответ имеет код 401