первая встреча непокрытой секции стала наблюдаемым событием
- свёртка спрашивает журнал, встречалось ли имя строго раньше по паре (received_at, id), и пишет WARN с атрибутом uncovered_new; повторные молчат. Признак выводится, а не хранится — реестр был бы второй копией факта - добавлена подкоманда `healthlog uncovered`: перечень накопленного, чтение только на чтение, экранированные имена и названные границы носителя - синк документации: ADR о выводе новизны из журнала, две записи в журнал дефектов, два правила промоутом в конвенции, терминал оператора назван адресатом недоверенного входа
This commit is contained in:
@@ -499,3 +499,56 @@
|
||||
- **Что осталось незакрытым:** гейт после интеграции обязан звать `BASE`
|
||||
вершиной **до** слияния. Сейчас это знание живёт только в этой записи —
|
||||
ни `Taskfile.yml`, ни скилл батча его не несут.
|
||||
|
||||
## 2026-08-04 — событие о новой секции терялось на отказе слияния [пойман]
|
||||
|
||||
- **Где:** `internal/fold/fold.go`, ветвь отказа `store.Merge` в change
|
||||
`2026-08-04-aktivnaya-proverka-novyh-sekcij`
|
||||
- **Симптом:** доставка, принёсшая имя секции впервые, при нетранзиентном отказе
|
||||
слияния писала имя в `delivery.uncovered_sections`, но запись об отказе его не
|
||||
называла. Следующая доставка считала имя виденным — событие, однократное за
|
||||
всю жизнь имени, пропадало **навсегда**, то есть ровно то, ради чего задача и
|
||||
делалась.
|
||||
- **Причина:** ветвей записи исхода в свёртке четыре, а дизайн рассмотрел одну.
|
||||
Признак новизны считался до ветвления и корректно доезжал до `residueOf`
|
||||
(отказ разбора), но ветвь отказа слияния собирала остаток **вручную** и поле
|
||||
новизны в него не клала. Дельта-спека говорила «до ветвления на успех и
|
||||
отказ», подразумевая один отказ.
|
||||
- **Чем воспроизведён:** свёртка доставки с новой секцией при снесённой таблице
|
||||
`bucket` — запись `ERROR` без `uncovered_new`, а `SectionsSeenBefore` на
|
||||
следующей доставке уже отвечает «виденное». Тест закреплён:
|
||||
`TestFoldОтказСлиянияНазываетНовуюСекцию`.
|
||||
- **Чем пойман:** тремя проходами независимо (`specs`, `code`, `adversary`),
|
||||
причём двое написали падающий тест. Дешёвый `code`-проход нашёл его наравне с
|
||||
дорогими — признак того, что дефект был в форме «ветвь собрана руками рядом с
|
||||
ветвью, собранной функцией», а такое видно чтением.
|
||||
- **Что изменено:** новизна передаётся и в эту ветвь; дельта-спека переписана в
|
||||
терминах «каждый исход, который пишет список в учётную запись», и отдельно
|
||||
названы исходы, которые список очищают (нечитаемое тело, паника) и потому
|
||||
события не теряют.
|
||||
|
||||
## 2026-08-04 — замер стоимости снят на корпусе, где измеряемого случая не бывает [пойман]
|
||||
|
||||
- **Где:** `design.md` того же change, решение 3; утверждение «в режиме
|
||||
постоянного приезда секции сверка стоит 18 мкс на доставку»
|
||||
- **Симптом:** на числе стояло решение «частичный индекс не нужен». Число
|
||||
описывало **не тот** режим.
|
||||
- **Причина:** синтетический журнал наполнялся так, что новая секция была во
|
||||
**всех** доставках, то есть её первая встреча лежала в самом начале журнала —
|
||||
и `LIMIT 1` выходил рано. В жизни секцию включают на телефоне сегодня: первая
|
||||
встреча оказывается в хвосте, и проход идёт почти по всему журналу на каждой
|
||||
доставке. Разница — три порядка (31 мкс против 52 мс).
|
||||
- **Чем воспроизведён:** `tmp/seenmeasure` с хвостовым именем: голова 31 мкс,
|
||||
хвост 52 мс, отсутствующее имя 50 мс.
|
||||
- **Чем пойман:** `adversary` — он не поверил числу и построил корпус, в котором
|
||||
измеряемый случай выглядит как в жизни. Это третий случай за три дня, когда
|
||||
оценка оказалась функцией того, **как устроен корпус**, а не того, что
|
||||
измеряют (записи 2026-08-02, 2026-08-04 про `verify:archive`).
|
||||
- **Что изменено:** замер перемерян тремя случаями (голова, хвост, отсутствие),
|
||||
числа сведены в одно место (`design.md`), код и `architecture.md` формулируют
|
||||
правило и ссылаются на источник. Развилка «принять цену или завести индекс»
|
||||
вынесена владельцу.
|
||||
- **Что осталось незакрытым:** правило «число замера обязано нести метод и
|
||||
описывать тот случай, ради которого снято» действует только для тестов
|
||||
(`conventions/testing.md`). На `design.md` оно теперь распространено записью
|
||||
ниже, но механизировать его нечем.
|
||||
|
||||
Reference in New Issue
Block a user