Files
transcriber/docs/adr/ADR-2026-08-14-halt-is-a-flag-not-a-stage.md
T
av 1576d06735 внутренняя модель перестроена вокруг аудиозаписи
- audiorecords вместо transcribe_jobs: приложения (texts, structures,
  recognitions, record_events, topics) живут своими коллекциями, ссылки на
  исходник и на приведённую копию перестали переставляться
- рубеж называет достигнутое, отказ стал признаком остановки с причиной, а
  сторожей стало двое: число отказов и время в рубеже
- воркеры потеряли специализацию, их число задаётся [pipeline] workers, шаг
  выбирается по рубежу, а захват отдаёт идентификатор и признак захвата
2026-08-14 20:20:33 +03:00

3.6 KiB
Raw Blame History

Остановка записи — признак, а не рубеж

  • Дата: 2026-08-14
  • Источник: openspec/changes/archive/2026-08-14-record-centric-model/design.md, раздел «Остановка — признак, а не рубеж»

Решение

Прежние состояния отказа и смерти (failed, dead) схлопнуты в признак остановки с причиной: halted_at, halt_reason, error_text. Достигнутый рубеж при остановке не стирается, и снятие признака продолжает работу с того места, где запись встала.

Почему

Цитата источника:

Признак — принято: рубеж переживает остановку, продолжение идёт с места остановки, массовый перезапуск после выкатки правки делается одним обновлением, а различие «мы рассудили» против «мы перестали пробовать» остаётся причиной, которую человек читает.

Отвергнуты два варианта, оба с названной ценой:

Отдельное состояние на каждую причину — отвергнуто: перечень состояний закрыт схемой, и каждая новая причина стоила бы необратимого шага.

Оставить как есть — отвергнуто: именно из-за этого перезапись состояния руками в панели остаётся единственным способом вернуть запись в работу, и делается он наугад.

Прежняя модель описана решением ADR-2026-08-11-queue-as-pocketbase-collection: там состояние «мертва» заводилось взамен признака is_error, и довод был тот же — «два способа вывести задачу из выборки расходятся». Довод устоял, а носитель сменился: теперь единственный способ вывести запись из выборки — этот признак, и состояние его больше не дублирует.

Последствия

  • + перезапуск перестал быть догадкой: запись продолжает с сохранённого рубежа, а не начинает конвейер заново.
  • + новая причина остановки стоит значения в закрытом перечне причин, а не нового состояния и не нового шага схемы.
  • + массовый возврат в работу после выкатки правки делается одним обновлением колонки.
  • в выборке захвата появилось четвёртое условие, и рубеж перестал быть единственным, что выводит запись из работы: читать состояние записи теперь надо двумя полями.
  • перечень причин закрыт схемой, то есть новая причина всё же требует шага схемы — дешевле прежнего, но не бесплатно.