# Приложение живёт своим пространством адресов, а не общим с хранилищем

- **Дата:** 2026-08-15
- **Источник:** openspec/changes/archive/2026-08-15-app-json-contract/design.md,
  раздел «Переезд в `/app/`, а слой сессии — на корень»

## Решение

Все адреса приложения переехали из `/api/` в собственный корень `/app/`, а слой
предъявления сессии повешен на **группу корня**, а не на перечень адресов.

## Почему

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

Прецедент в проекте уже принят тем же доводом: адреса входа вынесены на `/auth/*`
решением от 2026-08-12.

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

## Последствия

- `+` соседство с чужими адресами кончилось: имя, занятое библиотекой, наших
  адресов больше не задевает;
- `+` новый адрес приложения получает слой предъявления по построению, а не по
  памяти того, кто его добавил;
- `−` правило неизвестного пути перечисляет теперь четыре корня сервиса вместо
  одного: `/api/`, `/app/`, `/auth/` и `/_/`;
- `−` ограничитель частоты хранилища, настроенный на его собственный корень,
  наших адресов не покрывает — своё правило заводится нами, и его включение
  вводит в действие заодно умолчательные правила хранилища;
- `−` ломка полная: прежние адреса приёма и опроса отвечают `404`. Оплачено
  стадией — на сервере данных нет, внешней программы на прежнем контракте не
  существует.
