docs: поправлен маркер канона и записано правило о живом прогоне

- architecture.md: маркер над таблицей компонентов ссылался на
  несуществующую capability delivery; теперь на intake, pipeline и storage,
  и названо непереехавшее — приём из Telegram и деление текста по словам.
- review.md: проход, поднявший сервис, обязан его остановить, а меряющий —
  убедиться, что отвечает его сборка. Цена правила уже заплачена: оставленный
  процесс держал порт, и замеры ушли к прежней сборке.
This commit is contained in:
av
2026-08-13 19:15:57 +03:00
parent edcf8ede70
commit 4c87220d90
2 changed files with 14 additions and 3 deletions
+1 -1
View File
@@ -70,7 +70,7 @@
Каждый — строкой со ссылкой на capability, а не пересказом её требований.
<!-- канон: поведение → openspec/specs/intake, delivery -->
<!-- канон: поведение → openspec/specs/intake, pipeline, storage; ещё НЕ переехало: приём из Telegram, деление длинного текста по словам -->
| Компонент | Где | Что делает |
| --- | --- | --- |
+13 -2
View File
@@ -2,13 +2,24 @@
## Как настроен конвейер
Артефакты шести прогонов лежат в `openspec/changes/archive/<id>/review/`: у трёх
Артефакты семи прогонов лежат в `openspec/changes/archive/<id>/review/`: у трёх
ранних, начиная с `fix-http-handler-tests` 2026-08-11, это `triage.md`, у трёх
поздних — `report.md`. Сверх них конвейер прогонялся 2026-08-13 на работе, шедшей
поздних — `report.md`, у седьмого (`start-without-telegram-token` 2026-08-13) —
снова `triage.md`. Сверх них конвейер прогонялся 2026-08-13 на работе, шедшей
без своего изменения openspec; артефакта в архиве у тех прогонов нет, и урожай их
виден только записями журнала ниже. Разделы ниже заведены наперёд по коду
2026-08-11 и с тех пор правятся урожаем прогонов.
**Проход, поднявший сервис, обязан его остановить.** Живой прогон стал доступен
2026-08-13 (см. «Недоступно проверке»), и первый же им воспользовался: враждебный
проход поднял сервис на своём порту и оставил работать. Следующий прогон занять
порт не смог, а его запросы молча ушли к чужому процессу — то есть замеры
относились к прежней сборке, и по ним едва не был объявлен исход. Отсюда два
правила, оба прозой и без механизации: **поднял — останови за собой**, а
**меряющий убеждается, что отвечает его собственная сборка** (порт занят им,
новое поведение видно в выводе). Признак дешёвый: если ожидаемого нового поля,
метрики или строки нет вовсе — вероятнее всего, отвечает не твой процесс.
Что уже проверяет машина и о чём поэтому спрашивать не нужно — конвенция
[conventions/go-linters.md](conventions/go-linters.md). Вопросы ниже — то, чего
машина не проверяет; свойства, которые обязан проверять тест, — в «Типовых