## Why

Тай-брейк при равной полноте точек сегодня — порядок канонических форм, и он
решает **98,8% спорных координат** (83 956 из 84 978 при 453 171 координате):
полнота отвечает лишь в 1,2% случаев. Лексикографический порядок системно берёт
меньшее значение (1 847 из 1 912, находка 49), то есть хранит **устаревшую**
версию точки там, где HAE досчитывает задним числом (находка 10).

У дефекта появился независимый оракул: `task verify:archive` покраснел на
`master` без единого коммита, с ростом корпуса. Час `2026-08-03T07:00Z` метрики
`step_count` получил четыре доставки с двумя различными значениями; победило
меньшее, оно же приехавшее первым, и сверка слоёв объявила метрику мгновенной
против 23 согласных часов. `step_count` ушёл в `unknown` — Read API больше не
имеет права суммировать шаги.

Решение владельца от 2026-08-04: **при равной полноте побеждает пришедшая
точка**, а не сохранённая. Значение при этом не интерпретируется — правило
остаётся структурным.

## What Changes

- **BREAKING (содержимое витрины):** при равной полноте побеждает точка,
  пришедшая **этой** доставкой, а не сохранённая. Отпечаток витрины обязан
  измениться; состояние восстанавливается пересборкой из архива.
- Порядок канонических форм остаётся тай-брейком **внутри одной доставки**, где
  провенанс общий и различать нечем.
- **Правило слияния точек перестаёт быть функцией множества и становится явной
  функцией порядка журнала.** Отсюда — плата, которую изменение обязано
  внести целиком: порядок свёртки приводится к порядку журнала.
- Фоновый воркер **прекращает проход на первой отложенной доставке**, а не
  перешагивает её. Иначе занятость базы переставляет доставки местами, и живая
  витрина расходится с пересборкой молча.
- Свёртка доставки, у которой в журнале уже есть свёрнутая преемница, пишет
  `WARN`: остаточное окно (конкурентный приём делает строку учёта видимой
  не в порядке меток) закрыть без изменения приёма нельзя, но молчать о нём
  нельзя тем более.
- Заводится счётчик «пришедшая точка проиграла сохранённой» — отдельно от
  общего `MergeStats.Overwrites`, который считает столкновения в обе стороны и
  различить их не даёт.
- Схема не трогается: колонок провенанса на точку не заводится, формат
  `payload` не меняется, миграции нет.

## Capabilities

### New Capabilities

Новых нет.

### Modified Capabilities

- `storage`: тай-брейк при равной полноте точек — пришедшая побеждает
  сохранённую; порядок канонических форм остаётся только внутри доставки.
  Требование «победитель есть функция множества точек» заменяется на «функция
  множества точек и позиции в журнале». Новый счётчик удержаний.
- `ingest`: проход воркера прекращается на первой отложенной доставке; свёртка
  вне порядка журнала становится наблюдаемой.
- `reindex`: посылка сходимости («приём шёл последовательно») из оговорки
  сценария становится названным условием требования — теперь от порядка свёртки
  зависит не только вывод слоя, но и содержимое точек.

## Impact

- `internal/store/bucket.go` — `mergePoints`, `resolve`, `candidate`,
  `pointLess`, `MergeStats`.
- `internal/store/delivery.go` — запрос «есть ли свёрнутая доставка позже этой».
- `internal/replay/worker.go` — барьер на отложенной доставке, `WARN` о свёртке
  вне порядка журнала.
- `internal/fold/fold.go` — проброс нового счётчика в итог свёртки и в лог.
- Витрина в `./data`: отпечаток изменится. Пересборка — действие человека при
  остановленном сервисе, этим изменением не выполняется.
- Оракулы: `task verify:archive` (ноль противоречащих часов, `step_count`
  снова накопительная), тест сходимости «живой приём = пересборка» с отложенной
  доставкой.
