приложение собрано каркасом и вшито в бинарник
- заведён каталог web/ — Vue 3, роутер пятой версии, сборка Vite; собранное вшивается через go:embed и раздаётся корневым маршрутом: разметка на неизвестном пути вне корней сервиса, отказ контракта внутри корня - перечень корней сервиса стал единой точкой и порождает регистрацию маршрутов, а не описывает её; журнал раздачи пишет исход и длину пути, но не сам путь - шаг front зовёт Node контейнером docker — Biome, юнит-тесты Vue и сборка входят в гейт, а в Dockerfile появилась ступень приложения
This commit is contained in:
@@ -10,17 +10,19 @@
|
||||
описывала htmx с прямым запретом на шаг сборки и реактивные фреймворки; она снята
|
||||
целиком вместе со сменой решения на SPA 2026-08-10.
|
||||
|
||||
**Кода приложения ещё нет.** Правила ниже выведены из выбора и из замера на
|
||||
пробном экране, а не из написанного кода: первым их применяет и проверяет
|
||||
`spa-skeleton`. Место, где правило разойдётся с тем, что окажется удобным, —
|
||||
повод править эту запись, а не обходить её молча.
|
||||
Правила ниже применены каркасом приложения (`spa-skeleton`, 2026-08-15): до него
|
||||
они были выведены из выбора и из замера на пробном экране, а не из написанного
|
||||
кода. Место, где правило разойдётся с тем, что окажется удобным, — повод править
|
||||
эту запись, а не обходить её молча.
|
||||
|
||||
Логирование запросов — [logging.md](logging.md). Трансляция доменных ошибок
|
||||
наружу — [errors.md](errors.md).
|
||||
|
||||
**Механизировано:** типы разметки и кода проверяет `vue-tsc`, и он входит в
|
||||
команду сборки, а не стоит отдельным шагом. Правил линтера для кода приложения
|
||||
пока нет.
|
||||
команду сборки, а не стоит отдельным шагом. Форматирование и статический анализ
|
||||
держит **Biome**, поведение экранов — **юнит-тесты Vue**; оба шага входят в набор
|
||||
проверок наравне со сборкой. Инструменты зовутся контейнером, а не из `PATH`:
|
||||
требованием к машине разработчика остаётся docker, а не установленный Node.
|
||||
|
||||
## Что решено про само приложение
|
||||
|
||||
@@ -51,7 +53,14 @@
|
||||
делать то же самое.
|
||||
- **Собранная статика неизменяема и адресуется хешем в имени.** Имена придумывает
|
||||
Vite, руками их не задаём: от этого зависит обновление установленного
|
||||
приложения.
|
||||
приложения. Сервис на это правило опирается, но проверить его не может — имён
|
||||
он не выбирает, — поэтому дом правила здесь, а не в спеке: долгий срок
|
||||
хранения он ставит **по каталогу** сборщика, и файл, положенный туда без
|
||||
отпечатка в имени, останется в хранилище браузера навсегда.
|
||||
- **Зависимости ставятся из файла замка командой, которая его не правит.** Иначе
|
||||
набор проверок пачкает рабочее дерево, обновление зависимости приезжает в
|
||||
коммит без чьего-либо решения, а собранное в наборе проверок перестаёт
|
||||
совпадать с собранным в образе.
|
||||
- **Шаг сборки входит в `task gate` и в сборку образа.** Красная сборка статики
|
||||
роняет гейт наравне с `go build`.
|
||||
|
||||
@@ -70,7 +79,14 @@
|
||||
`/_/` у панели, — плюс `/health` и `/metrics` отдельными адресами. Приложение
|
||||
уехало из общего `/api/` решением владельца 2026-08-15: пространство
|
||||
принадлежит хранилищу, и обновление библиотеки вправе занять там имя рядом с
|
||||
нашим.
|
||||
нашим. Перечень корней сервису не описывают, а из него **порождают**
|
||||
регистрацию маршрутов: описанный порознь, он разошёлся бы с ними молча.
|
||||
- **Несовпавший ресурс разметкой не подменяется.** Путь под каталогом сборщика,
|
||||
которому не нашлось файла, отвечает `404`. Правило — вторая половина
|
||||
предыдущего: разметка прежней сборки называет ресурсы прежней сборки, и
|
||||
подменить их разметкой значит ответить `200` на то, чего нет. Браузер отвергнет
|
||||
такой ответ по типу содержимого, человек увидит пустой экран, а в кодах
|
||||
ответов сервиса не останется ничего.
|
||||
- **Экран не знает, как он открыт.** Данные экран берёт по своему адресу, а не
|
||||
получает от предыдущего: приложение открывают по ссылке и обновляют страницу
|
||||
посередине.
|
||||
@@ -107,6 +123,13 @@
|
||||
|
||||
## Что не решено
|
||||
|
||||
- **Инструмент статического анализа проверен наполовину.** Biome взят решением
|
||||
владельца 2026-08-15 и разбирает однофайловые компоненты; замены он потребует,
|
||||
если перестанет их держать. Тогда это отдельное решение, а не подстановка по
|
||||
ходу.
|
||||
- **Проверка типов держится на пятой линии TypeScript.** С седьмой `vue-tsc`
|
||||
не работает: новый компилятор не отдаёт точку входа, которую тот зовёт.
|
||||
Проверено прогоном 2026-08-15.
|
||||
- **Набор компонентов и стили.** Своя разметка или готовый набор — не решено, а
|
||||
готовый способен удвоить собранный файл
|
||||
([research/spa-framework.md](../research/spa-framework.md), «Чего разведка не
|
||||
|
||||
Reference in New Issue
Block a user