приложение собрано каркасом и вшито в бинарник
- заведён каталог web/ — Vue 3, роутер пятой версии, сборка Vite; собранное вшивается через go:embed и раздаётся корневым маршрутом: разметка на неизвестном пути вне корней сервиса, отказ контракта внутри корня - перечень корней сервиса стал единой точкой и порождает регистрацию маршрутов, а не описывает её; журнал раздачи пишет исход и длину пути, но не сам путь - шаг front зовёт Node контейнером docker — Biome, юнит-тесты Vue и сборка входят в гейт, а в Dockerfile появилась ступень приложения
This commit is contained in:
@@ -58,6 +58,26 @@
|
||||
- переводит доменную ошибку в свой ответ, а не отдаёт сырой текст;
|
||||
- закрывает то, что открыл, на всех ветках выхода.
|
||||
|
||||
**Раздача собранного приложения и шаг его сборки** (`controller/http/webapp.go`,
|
||||
шаг `front`):
|
||||
|
||||
- путь, принадлежащий корню сервиса, разметку не отдаёт никогда, а перечень
|
||||
корней порождает регистрацию маршрутов, а не описывает её;
|
||||
- несовпавший ресурс под каталогом сборщика отвечает `404`, а не разметкой с
|
||||
кодом `200`;
|
||||
- раздача ставит долгий неотзываемый срок хранения **только** файлу из каталога
|
||||
сборщика: отозвать его у браузера сервису нечем;
|
||||
- отсутствие сборки громкое — код ответа, страница и строка журнала; «сборки
|
||||
нет» отличается от «файла нет»;
|
||||
- вшито то, что собрано этим прогоном, а не то, что осталось от прошлого;
|
||||
- шаг следует словарю кодов: отказ сети и реестра — 3, красная сборка — 1, и он
|
||||
**отказывает, а не висит**;
|
||||
- путь, выбранный анонимом, не уходит ни меткой метрики, ни строкой журнала — и
|
||||
журналов **два**: свой, в вывод контейнера, и журнал хранилища, куда
|
||||
библиотека кладёт путь целиком вместе с адресом отправителя. Второй молчит
|
||||
только на успехе и только потому, что признак отказа от записи поставлен
|
||||
руками: готовая раздача статики ставит его сама, своя — нет.
|
||||
|
||||
**Клиент внешнего сервиса** (`adapter/recognizer/yandex`):
|
||||
|
||||
- имеет таймаут и не виснет, когда внешний сервис не отвечает;
|
||||
@@ -292,6 +312,26 @@ API и имя не откатываются обратной правкой по
|
||||
истории git 2026-08-10: поле «Чем воспроизведён» называет у них коммит, а не
|
||||
оракул, и выдумывать оракул задним числом нельзя.
|
||||
|
||||
## 2026-08-15 — своя раздача статики потеряла отказ от записи успеха [пойман ревью]
|
||||
|
||||
- **Где:** `internal/controller/http/webapp.go`, регистрация корневого маршрута;
|
||||
задача `spa-skeleton`
|
||||
- **Симптом:** каждый успешный ответ разметкой и ресурсом клал в журнал
|
||||
хранилища выбранный анонимом путь вместе с его адресом и держал строку пять
|
||||
суток. При этом строка `docs/review.md`, добавленная той же задачей,
|
||||
утверждала, что путь анонима в журнал не идёт
|
||||
- **Причина:** готовая раздача статики библиотеки первой же строкой ставит
|
||||
признак «успех не записывать». Своя написана мимо неё — и не зря, подстановка
|
||||
разметки у готовой не отличает отсутствующий ресурс от неизвестного пути, — но
|
||||
признак при переписывании не перенесён.
|
||||
Журналов у сервиса два, а сделанная защита закрыла один
|
||||
- **Почему не поймали раньше:** свойство было записано **утверждением**, а
|
||||
проверялось только против журнала контейнера. Второй журнал живёт в базе, и ни
|
||||
один тест туда не смотрел
|
||||
- **Что меняем:** утверждение о журнале называет оба журнала поимённо. Оракул —
|
||||
чтение таблицы журнала после прогона: три успешных запроса не оставляют строк,
|
||||
два отказа оставляют
|
||||
|
||||
## 2026-08-15 — единая форма отказа не покрывала то, что рождается не в обработчике [пойман ревью]
|
||||
|
||||
- **Где:** `internal/controller/http/errors.go`, слой `OneErrorForm`; задача
|
||||
|
||||
Reference in New Issue
Block a user