WEB-495 · Дефект · Редактор · web
P1 C06: подтверждение сохранения приходит раньше авторитетной записи — немедленный GET источника отдаёт устаревший текст
Закрыт
P1 · важно
ведёт: —
эпик: WEB-283
Суть
<!-- M1KNOWNISSUES 2026-09-06 -->
## ДЛЯ НУЛЕВОГО АГЕНТА (обновлено 2026-09-06 UTC)
- **Суть одной строкой:** idempotent revive больших документов, operation-budget identity и карантинные чанки.
- **Текущее состояние:** прод l113h 83683d48; откат l113g 4c322c46.
- **Что принято/ждёт посадки:** приняты identity v5 51b32e57/42b61743, PDF finalize 7779df11 и --new-attempt 2f0fde7c; quarantine repair/backfill, alert, completeness/generation follow-up ждут закрытия.
- **Кто работал:** координатор, A1, A2; luna/sol xhigh, claude-opus.
- **Следующий шаг:** закрыть quarantine batch repair/backfill и roles/retrieval проверки; exhausted budget лечить только --new-attempt.
## KNOWN ISSUES / ТРАБЛШУТИНГ (обновлено 2026-09-06 UTC)
- **Revive большого документа упирается в operation budget →** проверка: `journalctl -u nc-a1-indexing | grep operation_budget`; SQL SpendReservation/operationId/attempt → причина: разные operation identity для non-retry, WEB-465 retry и revive CLI → лечение: единый key resolver, 51b32e57 и 42b61743; обычный revive не заменяет новую попытку → ссылки: 2229, 2238b, 2272/2283, 2308.
- **PDF дошёл до 9801/9801, но финализация failed →** проверка: `journalctl -u nc-a1-indexing | grep -E "Transaction already closed|hook failed"` и status/chunkCount → причина: финализация в 5-секундной tx и wiki_compile hook; file:line не указан → лечение: короткая idempotent tx, тяжёлое/hook вне tx, no-indexable-chunks; l113g done/chunkCount=9801 → ссылки: 2173/2173b, 2252/2275c/2285/2300/2311.
- **После обычного revive big-test снова retry limit →** проверка: SQL reservation parent/attempt; `attempts=3 limit=2` → причина: старый parent бюджета авторитетен → лечение: `revive-poisoned-source --new-attempt` из release tree с RUN env; l113h done/chunkCount=3932 → ссылки: 2319/2326.
- **Карантинные чанки невидимы retrieval →** проверка: SQL `sourceContentRevision IS NULL`; 54 728/104 761 → причина: `src/lib/rag/sourceReadPolicyServer.ts:68-73`, legacy splitter; `chunking.ts:376-430` только для новых → лечение: idempotent batch repair/backfill, reuse embeddings, checkpoints, alert `quarantined>0`, completeness → ссылки: 2278c/2286/2289, `/home/ubuntu/waves/inputs/roles-l113e/quarantine-buckets.md`.
<!-- END M1KNOWNISSUES 2026-09-06 -->
## ДЛЯ НУЛЕВОГО АГЕНТА (обновлено 2026-09-05 UTC)
- **Суть одной строкой:** P1 C06: подтверждение сохранения приходит раньше авторитетной записи — немедленный GET источника отдаёт устаревший текст
- **Текущее состояние:** статус: done; что на проде: body: Текущее состояние:** статус: done; что на проде: 2026-09-02T23:14:26.642Z: [A1 02:35 Фабл] Волна 1386-c06saveack сдана: коммит abe57f7075 (ack только после авторитетной запис; 2026-09-02T23:14:26.642Z: [A1 02:35 Фабл] Волна 1386-c06saveack сдана: коммит abe57f7075 (ack только после авторитетной записи, read-your-writes по revision). Отчёт: A1 /home/ubunt; 2026-09-03T03:06:48.608Z: [Фабл] Приёмка 1442-accc06saveack2 = GO (независимая, Sol high): ack после авторитетной записи, reopen с ненулевой revision, product wiring типизирован. К; 2026-09-03T05:15:09.334Z: [A1 Фабл] ПОСАЖЕНО в l95 (c06saveack2 через слияние 1438c).; 2026-09-05T00:38:01.820Z: Пост-QA l105 (1881) — FAIL: ложного «сохранено» нет ни разу (3/3, механика EditorModal.tsx:4027-4056 верна), но записи тоже нет ни разу: persist на живом ; 2026-09-05T00:40:37.081Z: Архитектура/траблшутинг для нулевого агента: ранбук ~/Projects/nc-agent-ops/board/specs/INFRA-A1-TWO-BACKENDS-LB.md — состояние document-session (Document; 2026-09-05T01:41:11.759Z: KNOWN ISSUES / ТРАБЛШУТИНГ (правило владельца 05.09: в каждом тикете — чтобы смены не спотыкались об одно место): Save навсегда «Saving…», тостов нет: рас; 2026-09-05T08:11:46.599Z: [05.09 08:11Z координатор] C.2 автор (волна 1934 BIGDOCPERSIST, A2, opus) = GO, коммит 64077b79 поверх 6930c683. КОРЕНЬ, не симптом: порт versioned-realti; что принято/ждёт посадки: body: Текущее состояние:** статус: done; что на проде: 2026-09-02T23:14:26.642Z: [A1 02:35 Фабл] Волна 1386-c06saveack сдана: коммит abe57f7075 (ack только после авторитетной запис; 2026-09-02T23:14:26.642Z: [A1 02:35 Фабл] Волна 1386-c06saveack сдана: коммит abe57f7075 (ack только после авторитетной записи, read-your-writes по revision). Отчёт: A1 /home/ubunt; 2026-09-03T00:06:49.058Z: [A1 06:45 Фабл] Приёмка 1406-accc06saveack = NO-GO (отчёт A1 /home/ubuntu/waves/ACCC06SAVEACK-REPORT.md): ack после записи, read-your-writes, два клиента,; 2026-09-03T03:06:48.608Z: [Фабл] Приёмка 1442-accc06saveack2 = GO (независимая, Sol high): ack после авторитетной записи, reopen с ненулевой revision, product wiring типизирован. К; 2026-09-05T00:38:01.820Z: Пост-QA l105 (1881) — FAIL: ложного «сохранено» нет ни разу (3/3, механика EditorModal.tsx:4027-4056 верна), но записи тоже нет ни разу: persist на живом ; 2026-09-05T01:41:11.759Z: KNOWN ISSUES / ТРАБЛШУТИНГ (правило владельца 05.09: в каждом тикете — чтобы смены не спотыкались об одно место): Save навсегда «Saving…», тостов нет: рас; 2026-09-05T08:11:46.599Z: [05.09 08:11Z координатор] C.2 автор (волна 1934 BIGDOCPERSIST, A2, opus) = GO, коммит 64077b79 поверх 6930c683. КОРЕНЬ, не симптом: порт versioned-realti; что в работе: body: Текущее состояние:** статус: done; что на проде: 2026-09-02T23:14:26.642Z: [A1 02:35 Фабл] Волна 1386-c06saveack сдана: коммит abe57f7075 (ack только после авторитетной запис; 2026-09-02T23:14:26.642Z: [A1 02:35 Фабл] Волна 1386-c06saveack сдана: коммит abe57f7075 (ack только после авторитетной записи, read-your-writes по revision). Отчёт: A1 /home/ubunt; 2026-09-03T00:06:49.058Z: [A1 06:45 Фабл] Приёмка 1406-accc06saveack = NO-GO (отчёт A1 /home/ubuntu/waves/ACCC06SAVEACK-REPORT.md): ack после записи, read-your-writes, два клиента,; 2026-09-05T08:11:46.599Z: [05.09 08:11Z координатор] C.2 автор (волна 1934 BIGDOCPERSIST, A2, opus) = GO, коммит 64077b79 поверх 6930c683. КОРЕНЬ, не симптом: порт versioned-realti
- **Кто работал:**
- body: Текущее состояние:** статус: done; что на проде: 2026-09-02T23:14:26.642Z: [A1 02:35 Фабл] Волна 1386-c06saveack сдана: коммит abe57f7075 (ack только после авторитетной запис
- 2026-09-02T23:14:26.642Z: [A1 02:35 Фабл] Волна 1386-c06saveack сдана: коммит abe57f7075 (ack только после авторитетной записи, read-your-writes по revision). Отчёт: A1 /home/ubunt
- 2026-09-03T00:06:49.058Z: [A1 06:45 Фабл] Приёмка 1406-accc06saveack = NO-GO (отчёт A1 /home/ubuntu/waves/ACCC06SAVEACK-REPORT.md): ack после записи, read-your-writes, два клиента,
- 2026-09-03T03:06:48.608Z: [Фабл] Приёмка 1442-accc06saveack2 = GO (независимая, Sol high): ack после авторитетной записи, reopen с ненулевой revision, product wiring типизирован. К
- 2026-09-05T08:11:46.599Z: [05.09 08:11Z координатор] C.2 автор (волна 1934 BIGDOCPERSIST, A2, opus) = GO, коммит 64077b79 поверх 6930c683. КОРЕНЬ, не симптом: порт versioned-realti
- **Ветки/бандлы/отчёты:**
- body: Текущее состояние:** статус: done; что на проде: 2026-09-02T23:14:26.642Z: [A1 02:35 Фабл] Волна 1386-c06saveack сдана: коммит abe57f7075 (ack только после авторитетной запис
- 2026-09-02T23:14:26.642Z: [A1 02:35 Фабл] Волна 1386-c06saveack сдана: коммит abe57f7075 (ack только после авторитетной записи, read-your-writes по revision). Отчёт: A1 /home/ubunt
- 2026-09-03T00:06:49.058Z: [A1 06:45 Фабл] Приёмка 1406-accc06saveack = NO-GO (отчёт A1 /home/ubuntu/waves/ACCC06SAVEACK-REPORT.md): ack после записи, read-your-writes, два клиента,
- 2026-09-03T03:06:48.608Z: [Фабл] Приёмка 1442-accc06saveack2 = GO (независимая, Sol high): ack после авторитетной записи, reopen с ненулевой revision, product wiring типизирован. К
- 2026-09-05T00:38:01.820Z: Пост-QA l105 (1881) — FAIL: ложного «сохранено» нет ни разу (3/3, механика EditorModal.tsx:4027-4056 верна), но записи тоже нет ни разу: persist на живом
- 2026-09-05T00:40:37.081Z: Архитектура/траблшутинг для нулевого агента: ранбук ~/Projects/nc-agent-ops/board/specs/INFRA-A1-TWO-BACKENDS-LB.md — состояние document-session (Document
- 2026-09-05T01:41:11.759Z: KNOWN ISSUES / ТРАБЛШУТИНГ (правило владельца 05.09: в каждом тикете — чтобы смены не спотыкались об одно место): Save навсегда «Saving…», тостов нет: рас
- 2026-09-05T08:11:46.599Z: [05.09 08:11Z координатор] C.2 автор (волна 1934 BIGDOCPERSIST, A2, opus) = GO, коммит 64077b79 поверх 6930c683. КОРЕНЬ, не симптом: порт versioned-realti
- **KNOWN ISSUES / ТРАБЛШУТИНГ:** симптом → проверка → причина (file:line, если есть) → лечение
- body: Текущее состояние:** статус: done; что на проде: 2026-09-02T23:14:26.642Z: [A1 02:35 Фабл] Волна 1386-c06saveack сдана: коммит abe57f7075 (ack только после авторитетной запис
- 2026-09-05T00:38:01.820Z: Пост-QA l105 (1881) — FAIL: ложного «сохранено» нет ни разу (3/3, механика EditorModal.tsx:4027-4056 верна), но записи тоже нет ни разу: persist на живом
- 2026-09-05T00:40:37.081Z: Архитектура/траблшутинг для нулевого агента: ранбук ~/Projects/nc-agent-ops/board/specs/INFRA-A1-TWO-BACKENDS-LB.md — состояние document-session (Document
- 2026-09-05T01:41:11.759Z: KNOWN ISSUES / ТРАБЛШУТИНГ (правило владельца 05.09: в каждом тикете — чтобы смены не спотыкались об одно место): Save навсегда «Saving…», тостов нет: рас
- 2026-09-05T08:11:46.599Z: [05.09 08:11Z координатор] C.2 автор (волна 1934 BIGDOCPERSIST, A2, opus) = GO, коммит 64077b79 поверх 6930c683. КОРЕНЬ, не симптом: порт versioned-realti
- **Эволюция:**
- 2026-09-02T23:14:26.642Z → [A1 02:35 Фабл] Волна 1386-c06saveack сдана: коммит abe57f7075 (ack только после авторитетной записи, read-your-writes по revision). Отчёт: A1 /home/ubuntu/waves/C06SAVEACK-REPORT.
- 2026-09-03T00:06:49.058Z → [A1 06:45 Фабл] Приёмка 1406-accc06saveack = NO-GO (отчёт A1 /home/ubuntu/waves/ACCC06SAVEACK-REPORT.md): ack после записи, read-your-writes, два клиента, убитая транзакция — PASS;
- 2026-09-03T03:06:48.608Z → [Фабл] Приёмка 1442-accc06saveack2 = GO (независимая, Sol high): ack после авторитетной записи, reopen с ненулевой revision, product wiring типизирован. Коммит 2109c075 (круг 2) →
- 2026-09-03T05:15:09.334Z → [A1 Фабл] ПОСАЖЕНО в l95 (c06saveack2 через слияние 1438c).
- 2026-09-05T00:38:01.820Z → Пост-QA l105 (1881) — FAIL: ложного «сохранено» нет ни разу (3/3, механика EditorModal.tsx:4027-4056 верна), но записи тоже нет ни разу: persist на живом проде отказывал `persist-r
- 2026-09-05T00:40:37.081Z → Архитектура/траблшутинг для нулевого агента: ранбук ~/Projects/nc-agent-ops/board/specs/INFRA-A1-TWO-BACKENDS-LB.md — состояние document-session (DocumentSessionProductState, хаб)
- 2026-09-05T01:41:11.759Z → KNOWN ISSUES / ТРАБЛШУТИНГ (правило владельца 05.09: в каждом тикете — чтобы смены не спотыкались об одно место): Save навсегда «Saving…», тостов нет: расписка document-session-pro
- 2026-09-05T08:11:46.599Z → [05.09 08:11Z координатор] C.2 автор (волна 1934 BIGDOCPERSIST, A2, opus) = GO, коммит 64077b79 поверх 6930c683. КОРЕНЬ, не симптом: порт versioned-realtime засевался payload'ом jo
- **Следующий шаг:** см. текущую работу из комментариев: 2026-09-05T08:11:46.599Z: [05.09 08:11Z координатор] C.2 автор (волна 1934 BIGDOCPERSIST, A2, opus) = GO, коммит 64077b79 поверх 6930c683. КОРЕНЬ, не симптом: порт versioned-realti
Лента
2026-09-02T23:14:26.642Z · Fable[A1 02:35 Фабл] Волна 1386-c06saveack сдана: коммит abe57f7075 (ack только после авторитетной записи, read-your-writes по revision). Отчёт: A1 /home/ubuntu/waves/C06SAVEACK-REPORT.md. Приёмка 1406 (A1, Sol high, в очереди) → l94/l95.
2026-09-03T00:06:49.058Z · Fable[A1 06:45 Фабл] Приёмка 1406-accc06saveack = NO-GO (отчёт A1 /home/ubuntu/waves/ACCC06SAVEACK-REPORT.md): ack после записи, read-your-writes, два клиента, убитая транзакция — PASS; блокеры: B1 reopen с ненулевой revision делает последующее сохранение невозможным (детерминированный repro на revision #22); B2 product wiring не компилируется (тип onPersistExact vs возвращаемый {storedRevision, sourceRevision}). Круг 2 = волна 1427-c06saveack2 (A1, Luna high, от abe57f70). 2026-09-03T03:06:48.608Z · Fable[Фабл] Приёмка 1442-accc06saveack2 = GO (независимая, Sol high): ack после авторитетной записи, reopen с ненулевой revision, product wiring типизирован. Коммит 2109c075 (круг 2) → в l95-candidate после SIP-слияния.
2026-09-03T05:15:09.334Z · Fable[A1 Фабл] ПОСАЖЕНО в l95 (c06saveack2 через слияние 1438c).
2026-09-05T00:38:01.820Z · координаторПост-QA l105 (1881) — FAIL: ложного «сохранено» нет ни разу (3/3, механика EditorModal.tsx:4027-4056 верна), но записи тоже нет ни разу: persist на живом проде отказывал `persist-rejected: document-session-product-state-missing` (расписка document-session-product-save/v1, saveCount 0, failureCount 1), isSaving остаётся true навсегда → saveStatus 'saving' → кнопка Save aria-disabled (UniversalEditorHeader.tsx:536), toast.error недостижим — пользователь не может ни сохранить, ни узнать об отказе. Корень тот же, что в WEB-492: балансировка без привязки клиента (состояние document-session на одном процессе, persist уходит на другой) + 3012 без NC_RELEASE_ID; исправлено 05.09 (ip_hash, drop-in, рестарт). ОТКРЫТЫЙ ПРОДУКТОВЫЙ ДЕФЕКТ (не ops): при отказе persist UI обязан выйти из 'saving' в 'error' с тостом и вернуть кнопку Save — сейчас отказ бесшумный и вечный. Повтор живой проверки → 1886-l105postqa3. Отчёт: L105POSTQA2-REPORT.md §3. Правила: WEB-449.
2026-09-05T00:40:37.081Z · координаторАрхитектура/траблшутинг для нулевого агента: ранбук ~/Projects/nc-agent-ops/board/specs/INFRA-A1-TWO-BACKENDS-LB.md — состояние document-session (DocumentSessionProductState, хаб) живёт в процессе, поэтому persist обязан попадать на тот же бэкенд, что join (ip_hash); как читать расписку document-session-product-save/v1 (outcome.code persist-rejected / persisted, ledger.saveCount); цепочка UI: updateContent→setIsSaving(true) (EditorModal.tsx:3949) → успех только в handleDocumentSessionProductPersist (4027-4056) → saveStatus 'saving' блокирует кнопку (UniversalEditorHeader.tsx:536) и toast.error (5138-5141) недостижим — это открытый продуктовый дефект (нужна ветка error + тост + возврат кнопки). Правила: WEB-449.
2026-09-05T01:41:11.759Z · координаторKNOWN ISSUES / ТРАБЛШУТИНГ (правило владельца 05.09: в каждом тикете — чтобы смены не спотыкались об одно место):
Save навсегда «Saving…», тостов нет: расписка document-session-product-save/v1 в консоли → outcome.code persist-rejected/document-session-product-state-missing = persist попал не на тот процесс (нет ip_hash) или бэкенд без NC_RELEASE_ID (drop-in ent093 отсутствует у nc-a1-b). Проверка: `/api/ready` снаружи ×8 все true + один sha; `systemctl cat nc-a1-b` содержит drop-in. Продуктовый дефект: при отказе persist UI не выходит из saving (EditorModal.tsx:3949/4027-4056, UniversalEditorHeader.tsx:536; toast.error 5138 недостижим) — открыт. Ранбук: specs/INFRA-A1-TWO-BACKENDS-LB.md.
2026-09-05T08:11:46.599Z · coordinator[05.09 08:11Z координатор] C.2 автор (волна 1934 BIGDOCPERSIST, A2, opus) = GO, коммит 64077b79 поверх 6930c683. КОРЕНЬ, не симптом: порт versioned-realtime засевался payload'ом join, вид рендерил C03-бутстрап, а модель менялась транзакциями, не доходящими до порта (удалённые, системные, прогрессивная дозагрузка потокового источника — в проде док грузился до 5 332 мс): расписка 7 798 210 / порт 7 798 254 / вставка 7 798 256; ветка codemirror6-headless обходила guard длины; invalid-operation вылетал из уведомления о коммите сессии, унося правку и автосейв C06. Фикс: порт засевается текстом смонтированной модели, сверка длин при монтировании и перед каждой публикацией (O(1)), при расхождении — переинициализация порта без потери операции пользователя; отказы порта сообщаются; долг resync сохраняется намеренно (иначе терминальный reject = откат текста, второй симптом матрицы); индикатор из леджера автосейва C06, не из legacy contentRef. Приёмка 1970-accbigdocpersist (M4, luna, Chromium, документ ≥7 млн с прогрессивной загрузкой; red/green, рассогласование мимо порта, resync-долг, 500 → unsaved, Ctrl+End, регресс среднего дока).
2026-09-05T20:00:19.405Z · coordinator[05.09 20:00Z координатор] Волна 2068 (A1, luna): VERDICT=GO, commit 6d4234e5 поверх l110 — канонический owner-scoped revive для poisoned источников (scripts/revive-poisoned-source.ts + src/lib/ingest/revivePoisonedSource.ts; dry-run по умолчанию, одна запись в Source.metadata с reason). Контекст: engineprod-large.pdf (7,8 МБ) на проде indexing.status=poisoned, воркер poisoned не берёт (пост-QA l110/l111). Приёмка 2077 в очереди A1 (негативы owner/inactive, реальный worker-loop подхватывает после revive — сверка ключей metadata с выборкой воркера, см. WEB-99 круг 7; cherry-pick на l112). После GO → l113 и revive на проде для этого источника.
2026-09-05T21:06:02.756Z · coordinator[05.09 21:06Z координатор] [05.09 21:50Z координатор | 2085 ACCBIGDOC3 = NO-GO (только конфликт наложения)] Приёмка luna на A2 (`/home/ubuntu/waves/ACCBIGDOC3-REPORT.md`): cherry-pick цепочки 5af380b3 → 010e751d → babb6d83 (автор 2070, GO) на l112 900b773c7 останавливается на первом коммите: `src/lib/document-session/__tests__/codemirror6DomEnvironment.ts:53-63` — l112 задаёт компактный `modifiers` с `altKey`, кандидат добавляет `code`. По существу не проверялось. → волна 2089 (luna, A2): перебазирование с сохранением обеих сторон и тестами каталога; затем повторная приёмка тем же контрактом 2085 (cap/cap+1 на всех путях, RED/GREEN «правка в конце большого документа», env для посадки) → l113.
2026-09-05T21:39:06.579Z · coordinator[05.09 21:39Z координатор] [05.09 23:00Z координатор | ПОВТОРНАЯ ПРИЁМКА (2093) = NO-GO: регресс API] Luna на A2 (`/home/ubuntu/waves/ACCBIGDOC3B-REPORT.md`) перебазированного кандидата 93876242 (cherry-pick на l112 чистый): лимит `DOCUMENT_MAX_UTF16_UNITS` и фикс потери tail-edit по существу проходят, но `VersionedDocumentTransportHub.join()` получил обязательный второй аргумент server-owned authorization (`documentSessionVersionedHub.ts:343-370`), а обязательный C07 fixture `ds-c07-versioned-realtime.test.ts:257-268` зовёт старый API → `forbidden` (на l112 33/33) + scoped tsc TS2554. → волна 2097 (luna, A2): все вызовы join, authorization продуктовым путём (или fail-closed, если у прод-вызова её нет), C07 33/33, затем приёмка. Bigdoc в l113 не входит; l113 собирается без него.
2026-09-05T22:09:52.506Z · coordinator[05.09 22:09Z координатор] [06.09 00:45Z координатор | ТРЕТЬЯ ПРИЁМКА (2100) = GO] Luna на A2 (`/home/ubuntu/waves/ACCBIGDOC3C-REPORT.md`) кандидата `516e49990dc848127ae1b5b3a2595f8b9e8b6831` (bigdoc-3 перебазированный + фикс API join(), волны 2070→2089→2097): scope чистый, конфликт CM6 helper с обеими сторонами, authorization join() продуктовым путём во всех seams, C07 33/33, real-PG boundary зелёный, tail-edit RED/GREEN, scoped tsc только baseline вне изменённых файлов. → в кандидат l113. После посадки: проверить на проде загрузку документа на cap и cap+1 (`document-too-large`) и правку в конце большого документа; env `DOCUMENT_MAX_UTF16_UNITS` (default 16 000 000) — элемент посадки: убедиться, что не переопределён в env служб.
2026-09-05T22:10:30.992Z · coordinator[05.09 22:10Z координатор] [06.09 00:50Z координатор] Принятый bigdoc-3 (516e4999) НЕ ложится на кандидат l113 fc82992c: конфликт с принятым кругом 4 двух вкладок (72c2653e4 / b32959a0) в `src/lib/document-session/codemirror6/versioned-realtime-port.ts`. → волна 2104 (luna, A2): слияние обеих семантик поверх l113-candidate + тесты обоих (C07 33/33, сценарии A–D, tail-edit, cap/cap+1, объединённый сценарий «большой документ + поздний join + правка в конце»). До GO 2104 l113 идёт без bigdoc (8 коммитов); bigdoc — в l113b/l114.
2026-09-05T22:29:51.037Z · coordinator[05.09 22:29Z координатор] [06.09 02:00Z координатор | СЛИЯНИЕ bigdoc-3 + круг 4 (2104) = CONDITIONAL-GO автора → приёмка 2110] Кандидат `11b73949adb76f5e386d53f5d267c17de276dd0c` над l113-candidate fc82992c (`/home/ubuntu/waves/BIGDOCONL113.bundle`, отчёт `BIGDOCONL113-REPORT.md`): конфликт `versioned-realtime-port.ts` разрешён с обеими семантиками (C07 `acceptAuthoritativeSnapshot` :679-735, лимит snapshot → общий `DOCUMENT_MAX_UTF16_UNITS` :54,:686-695; bigdoc `realignToModel` :737-817), плюс интеграционные пересечения в `product-runtime.ts`/`socket-transport.ts`; late join near-cap: final 15 999 913 units, `resyncRequired=false`; CONDITIONAL из-за 1 ожидаемого skip (нет `C09JOIN_TEST_DATABASE_URL`) и не запущенного полного tsc. Приёмка 2110 (luna, A2) с БД для C09 и объединённым сценарием. При GO — в l113 (если сборка ещё не началась) или l113b.
2026-09-05T22:48:40.934Z · coordinator[05.09 22:48Z координатор] [06.09 02:55Z координатор | ПРИЁМКА СЛИЯНИЯ (2110) = GO] Luna на A2: кандидат `11b73949adb76f5e386d53f5d267c17de276dd0c` (bigdoc-3 + C07 круг 4 над l113-candidate fc82992c) принят — C07 33/33, C09 join-тест с БД, сценарии A–D, tail-edit RED/GREEN, cap/cap+1, объединённый near-cap + поздний join. Ловушка: волна записала независимый вердикт ПОВЕРХ авторского `BIGDOCONL113-REPORT.md` (поле `acceptance=independent`) и была снята по таймауту до создания `ACCBIGDOCONL113-REPORT.md` — координатор скопировал файл под именем приёмки. Посадка: l113 (87111a95, уже собирается) идёт БЕЗ bigdoc; сразу после — l113b = l113 + 11b73949 (пересборка ~40 мин), пост-QA двух вкладок и большого документа на проде вместе.
2026-09-05T23:19:50.351Z · coordinator[05.09 23:19Z координатор] [06.09 05:25Z координатор | REVIVE НА ПРОДЕ (l113, canonical tool WEB-495)] Из `wt-l113-migrate` под env воркера l113 (`scripts/revive-poisoned-source.ts --source --owner --reason --apply`, dry-run сначала): `cmtkm80jo01u8z8vgj446km1x` engineprod-large.pdf (владелец qa_c09_browser_20260902) poisoned → pending (reason revive:WEB-086-large-pdf-l113); `cmtoteblr001npsp295jlvrtq`, `cmtoteayu0019psp2f1gofblt` l112-r9-proof.md (QA, отравлены инцидентом обёртки 20:12Z) → pending; `1782161239510l4gl4zzur` big-test.txt (владелец) → pending. Ловушка: revive owner-scoped — `--owner` = владелец тетрадки источника (QA-источники → qa_c09_browser_20260902, не OWNER_USER_ID), иначе `sourceMatches=0`. Дренаж — штатным таймером `nc-a1-indexing` (--limit 1); вахта координатора ждёт `result source=…` по четырём id. Остальные 50 poisoned — google-drive карантина WEB-99: после посадки круга 9 (в l113) → revive батчем + requeue chunks-only (ранбук приёмки 2103). Ещё poisoned у QA: war-and-peace.txt ×2, engineprod-large.html, ep2-320pages.pdf — оставлены для пост-QA l113 (2119).
2026-09-05T23:24:54.015Z · coordinator[05.09 23:24Z координатор] [06.09 05:55Z координатор | P0 НА ПРОДЕ l113 (23:18–23:25Z): idempotency_conflict закрыл accounting-эпоху всем] После revive PDF `cmtkm80jo01u8z8vgj446km1x` воркер получил от reserve «This request id was already used for a different request» (старые SpendReservation того же источника с тем же operationId/attempt, другой fingerprint) и `spendReservation.ts:1042 closeAccountingEpochInTransaction('attempt ordinal conflict')` → `/api/ready/paid` unready (`accounting_truth: attempt ordinal conflict`), 503 всем платным путям; на каждом ретрае повторялось; outbox OPEN-строк нет. Reconcile-таймер (WEB-511) открыл эпоху (`reopened by spend-reconcile`), координатор: PDF → `paused` (Source.metadata, не money-таблица), big-test.txt владельца poisoned повторно (3 попытки в закрытый шлюз) — revive после фикса. Класс «локальная ошибка учёта закрывает весь продукт» — третий случай (SETTLEMENT_FAILED, ESTIMATOR_BREACH 743cd3d2, теперь idempotency) → волна 2122 (luna, A2): конфликт = отказ конкретному запросу + диагностика, эпоха не закрывается; revive/requeue получают новую attempt-базу. Две md-копии QA после revive проиндексированы (done) — движок l113 индексирует.
2026-09-05T23:46:05.579Z · coordinator[05.09 23:46Z координатор] [06.09 07:10Z координатор | 2128 = GO: bigdoc-3 + круг 4 перенесены на l113] Кандидат `c911a4693948202d927761ba31bd97b4190ba6a9` (luna, A2, база 87111a95; бандл `/home/ubuntu/waves/BIGDOCONL113B.bundle`, отчёт `BIGDOCONL113B-REPORT.md`): cherry-pick fc82992c..11b73949 на прод-линию, C07 33/33, C09 с БД, tail-edit RED/GREEN, cap/cap+1 повторены. → кандидат l113b собирается (bigdoc + TG-ретрай a04bb915 + DMCA-страница 520b3a68 + тетрадь на 8000 6838d50e + SIP-шаблоны f16ded4d), ждём P0-фикс учёта 2122 → сборка → посадка → пост-QA двух вкладок и большого документа на проде.
2026-09-06T00:24:51.853Z · coordinator[06.09 00:24Z координатор] [2026-09-06T00:24Z координатор] ПРИЁМКА 2130-accidempotencyepoch (A2, luna high): VERDICT=GO на 3a382a0e (база l113 87111a95). Принято: idempotency_conflict = отказ только конкретного запроса, accounting epoch остаётся OPEN, диагностическая строка TokenUsage.operation=idempotency_conflict пишется в той же транзакции; повторная оплата исторической reservation по тому же (operationId, attempt) невозможна. Revive/requeue/retry индексации получают новый durable attemptBase (resumable pause сохраняет base намеренно). Коммит уже в кандидате l113b (02812b90 = l113 + 14), сборка идёт на A2; после посадки — revive PDF cmtkm80jo01u8z8vgj446km1x и big-test 1782161239510l4gl4zzur как проверка на проде. Отчёт: A2 /home/ubuntu/waves/ACCIDEMPOTENCYEPOCH-REPORT.md.
2026-09-06T01:32:33.676Z · coordinator[06.09 01:32Z координатор] [2026-09-06T01:32Z координатор] После посадки l113b выполнен revive обоих источников инструментом WEB-495 (--apply → pending, attempts=0): большой QA PDF cmtkm80jo01u8z8vgj446km1x (сначала снят мой ручной paused) и big-test 1782161239510l4gl4zzur. Итог: ОБА снова failed. Причина по журналу воркера: [billing][billing_guard_operation_budget] attempts=3 limit=2 (channel rag_embeddings, text-embedding-3-small, serviceIdentity source-indexing) → VendorCallRejectedError «This operation reached its retry limit» (meterVendorCallInner → denyOrObserve → reject). Guard бюджета операции считает попытки по operationId (op_<hash>, SpendReservation: по 2 строки/операцию, max attempt 2), а operationId эмбеддингов не включает новый attemptBase источника → revive не может дать «свежую» операцию. Paid gate при этом остался открыт (3a382a0e работает по своей части). → Волна 2149-reviveopbudget поставлена на A2 (luna xhigh, база l113b-candidate 02812b90) с журналом и SQL-фактами в inputs-2149. KNOWN ISSUE: симптом «revive → failed сразу» → проверка journalctl -u nc-a1-indexing | grep operation_budget и SQL SpendReservation по operationId/attempt → причина: идентичность операции без attemptBase → лечение: волна 2149.
2026-09-06T03:04:20.558Z · coordinator[06.09 03:04Z координатор] [2026-09-06T03:04Z координатор] Волна 2149b-reviveopbudget2 (A2, luna xhigh; продолжение спасённой работы после переполнения диска): VERDICT=PASS, commit=75ac1e21 — идентичность операции эмбеддингов включает durable attemptBase (revive = новая операция для guard бюджета), лимит не ослаблен. Независимая приёмка 2164-accreviveopbudget поставлена (sol xhigh). GO → l113c → посадка → revive PDF/big-test на проде как финальная проверка. Отчёт: A2 /home/ubuntu/waves/REVIVEOPBUDGET-REPORT.md.
2026-09-06T03:15:39.701Z · coordinator[06.09 03:15Z координатор] [2026-09-06T03:15Z координатор] ПРИЁМКА 2155b-accpaidperimeter2 (A2, sol high): VERDICT=NO-GO на 1edad0a8. Принято: инвентарь auth/authz статусов, 401/200 контракты (5 пар), клиенты читают response.ok. Блокер: normalizeAuthResponse() на любом 200 делает await response.clone().json() без проверки Content-Type → открытый SSE/text stream ждёт закрытия потока до возврата Response (независимый негативный тест: timed-out) — подвесило бы paid streaming (editor completion). Плюс находка: в base 02812b90 оба маршрута уже отдают 401 в исходнике, а прод отдавал 200 → механизм не установлен. → Волна 2167-paidperimeterstream (A2, luna xhigh): stream-safe boundary + open-stream regression + причина прод-200. Отчёт: A2 /home/ubuntu/waves/ACCPAIDPERIMETER-REPORT.md.
2026-09-06T03:27:30.830Z · coordinator[06.09 03:27Z координатор] [2026-09-06T03:27Z координатор] ПРИЁМКА 2164-accreviveopbudget (A2, sol xhigh): VERDICT=GO на 75ac1e21 — revive даёт новую операцию для guard, лимит не ослаблен, epoch не закрывается. Cherry-pick в l113c; после посадки — revive PDF cmtkm80jo01u8z8vgj446km1x и big-test на проде как финальная проверка.
2026-09-06T04:04:47.668Z · coordinator[06.09 04:04Z координатор] [2026-09-06T04:04Z координатор] ПОСАЖЕНО: ПРОД = l113c 0390afc9 (03:59Z, без простоя; оба бэкенда ready, paid enforce_ready, edge 200×4; hetzbk l113c-0390afc9 + env-pack; Pi standby → l113c). В составе: WEB-505 3bb21db4 (окно цитирования), WEB-497 a1b3f9fd (судья), WEB-495/465 revive-бюджет (сквош 75ac1e21), WEB-564/566 Apple origin-lock 7c46b0ee, WEB-530 f7a427bd(+db551088), WEB-562 2daaf3db, WEB-556 1666dfb2, WEB-549/551 5d497bfe. Откат = l113b 02812b90 (RUN l113b-02812b90, REL arm64-l113b-20260906T003405Z). Артефакт me2-standalone-linux-arm64-0390afc9-20260906T035404Z sha 97076030…
2026-09-06T04:06:11.363Z · coordinator[06.09 04:06Z координатор] [2026-09-06T04:06Z координатор] ПРОВЕРКА НА ПРОДЕ l113c 04:03Z: revive --apply обоих источников. PDF cmtkm80jo01u8z8vgj446km1x → running с НОВЫМИ operationId (op_a6dd6ebe…, op_84fc225c…, SETTLED_ACTUAL) — фикс 75ac1e21 работает. big-test 1782161239510l4gl4zzur → failed: billing_guard_operation_budget attempts=3 limit=2 без новых reservation — второй call site (withRetry2 → meterVendorCallInner, большой txt) не получил attemptBase. → Волна 2171-reviveopbudget3 (A2, luna xhigh, база l113c 0390afc9): инвентарь всех call sites + единая идентичность. KNOWN ISSUE: проверять revive на ОБОИХ типах (PDF и большой txt).
2026-09-06T04:09:57.638Z · coordinator[06.09 04:09Z координатор] [2026-09-06T04:09Z координатор] ПРОД l113c, большой PDF cmtkm80jo01u8z8vgj446km1x после revive: бюджет операций пройден (новые operationId, эмбеддинги SETTLED_ACTUAL), но источник → failed: Prisma «Transaction already closed… timeout 5000 ms, 5020 ms passed» в $executeRaw при персисте чанков (interactive tx 5 с). Это второй дефект пути больших документов (после бюджета). → Волна 2173-bigpdftxtimeout (A2, luna xhigh, база l113c): долгие операции вне tx, батчи чанков идемпотентно. KNOWN ISSUE: проверка «revive → done» для большого PDF требует обоих фиксов (2171 для txt, 2173 для PDF-персиста).
2026-09-06T04:24:51.583Z · coordinator[06.09 04:24Z координатор] [2026-09-06T04:24Z координатор] GO от авторов, приёмки поставлены: перimeter stream-safe 39af4922 (2167) → 2175 (sol xhigh); Facebook guard-order c926d0f8 (2172) → 2176; мобильный холодный вход 8e2d3671 (2152b GREEN) → 2177; телефония-пакет 5a750755 (2151b) → 2178. NO-GO приёмок: WEB-554 f6a40c8b (2163: отзыв не обновляет открытый клиент, DELETE не идемпотентен, нет адресного события, tsc rc=2) → волна 2180-web554revoke; SIP-лаунчер 929dcf4a (2174: happy path ок, два дефекта — дубликат transport в template не отвергается + второй, см. отчёт) → волна 2179.
2026-09-06T07:52:36.548Z · coordinator[06.09 07:52Z координатор] [2026-09-06T07:52Z координатор] Итоги приёмок A2 (07:3x–07:5x): WEB-495/093 периметр stream-safe 39af4922 — ПРИНЯТ (2175b GO) → l113d; WEB-542 84b19674 — NO-GO (TOCTOU между generation check и token persistence) → волна 2205; WEB-543 77ddfa69 — NO-GO (чужой customer переписывает providerCustomerId) → волна 2206; WEB-554 e1687db8 (2180b GO) → приёмка 2207; роли C5-C c2a71128 (2188 GO) → приёмка 2204; SIP-лаунчер b7b83b20 — ПРИНЯТ (2201 GO) и установлен на A1.
2026-09-06T08:32:03.938Z · coordinator[06.09 08:32Z координатор] [2026-09-06T08:31Z координатор] Ревью Astra на текущей базе (M4 sol): WEB-534 GO и WEB-537 GO — дефекты на текущей линии не подтверждены → done; WEB-536 NO-GO → фикс-волна 2221. Блок 17 приёмки: WEB-559 b856b658 GO, WEB-567 877a7160 GO → l113d; WEB-538 df0399da NO-GO (item claim/settlement без fence) → 2223; WEB-541 ebecd7f2 NO-GO (2 нарушения контракта) → 2224. Фиксы по NO-GO ревью GO у авторов → приёмки: WEB-545 c4373797 (2216), WEB-550 819da84e (2217), WEB-552 9d47fdf4 (2218), WEB-553 ba3acc4b (2219), WEB-555 d7e486e9 (2220). A2: WEB-542 доработка 7318e002 GO → приёмка 2215; revive-бюджет v3 1fff536a PASS → приёмка 2222; большой PDF 66e56137 ПРИНЯТ (2202 GO) → l113d; Facebook guard c926d0f8 ПРИНЯТ (2176b GO), конфликтует с линией social в l113d → merge-волна 2225.
2026-09-06T08:51:24.187Z · coordinator[06.09 08:51Z координатор] [2026-09-06T08:51Z координатор] ПРИЁМКА 2222-accreviveopbudget3 (A2, sol xhigh): NO-GO на 1fff536a. Принято: attemptBase доходит до всех vendor-путей (большой TXT chunk-batch/withRetry, NER, outline, Wiki), real-PG проверка ок. Блокер: diff меняет persisted operation identity даже при НЕИЗМЕННОМ attemptBase → «без revive третья попытка отвергается» провален (исторический бюджет не считается). → Волна 2229-reviveopbudget4 (luna xhigh) поверх 1fff536a: identity стабильна для той же попытки, новая — только при новом attemptBase. Отчёт: A2 /home/ubuntu/waves/ACCREVIVEOPBUDGET3-REPORT.md.
2026-09-06T09:09:54.670Z · coordinator[06.09 09:09Z координатор] [2026-09-06T09:09Z координатор] ПОСАЖЕНО: ПРОД = l113d 4c73d845 (09:03Z, без простоя; оба бэкенда ready, paid enforce_ready, edge 200×4; миграции применены (184 в репо), hetzbk l113d-4c73d845 + env-pack, Pi standby → l113d). В составе (21 коммит над l113c): большой PDF — персист чанков короткими idempotent-транзакциями (WEB-086/496/467), периметр stream-safe (WEB-495/093), WEB-554 отзыв тетради, WEB-540 translation claim, WEB-543 customer guard, WEB-559 binary adapter, WEB-567 issuer authority, WEB-558 facebook attempt, WEB-491 mobile cold-start, WEB-370 пакет телефонии (репо-часть). Откат = l113c 0390afc9. На проде после посадки: revive PDF cmtkm80jo… → running (персист прошёл 5-с барьер — наблюдаю до done); big-test всё ещё упирается в бюджет (identity v4 — волна 2229).
2026-09-06T09:55:05.628Z · coordinator[06.09 09:55Z координатор] [2026-09-06T09:55Z координатор] ПРОВЕРКА НА ПРОДЕ l113d (journalctl nc-a1-indexing): большой PDF cmtkm80jo01u8z8vgj446km1x на l113d дошёл по чекпоинтам до 9801/9801 (checkpoint-ы работают), но ФИНАЛИЗАЦИЯ падает: 09:48:24 [WIKI-compile] hook failed «This paid call path is not registered in the release manifest» (billing_guard_state_unavailable, channel wiki_compile, serviceIdentity source-indexing), затем 09:48:32 «Transaction API error: Transaction already closed … timeout 5000 ms, 7757 ms passed» → success=false chunks=0, повтор ×4 (09:48–09:52). Документ не станет done без фикса → волна 2252-bigdoc-finalize-tx (A2, luna xhigh, real PG): короткая идемпотентная транзакция финализации, тяжёлое вне tx, hook не роняет финализацию, статус после падения = paused 9801/9801, не failed/0. KNOWN ISSUES: симптом «checkpoint дошёл до N/N и дальше failed chunks=0» → journalctl -u nc-a1-indexing | grep -E "Transaction already closed|hook failed" → финализация в 5-с транзакции.
2026-09-06T10:41:32.192Z · coordinator[06.09 10:41Z координатор] [2026-09-06T10:41Z координатор] Revive-identity v4 646e4967: приёмка 2238b (A2, sol xhigh, real PG) = NO-GO — non-retry embeddings path и revive CLI (poisoned→pending→done без budget-guard) прошли на PG, но duplicate-paid retry path WEB-465 строит другой ключ rag.embeddings:<billingOperationId>:<attemptDigest>:<operationDigest>:<payloadDigest>, чем 0390afc9 → круг 5 = 2272-reviveopbudget5 (единый резолвер ключа для всех путей + снимки ключей 0390afc9 в тестах). Big-test 1782161239510l4gl4zzur ждёт этого фикса.
2026-09-06T10:53:42.409Z · coordinator[06.09 10:53Z координатор] [2026-09-06T10:53Z координатор] ИНЦИДЕНТ 10:48–10:51Z: кап Codex (OpenAI) исчерпан — «You've hit your usage limit… try again at Sep 9th, 2026 8:57 PM». Все codex-волны на A2/A1/M4 (в т. ч. 21 ревью Astra блока 18 и приёмки 2270/2272/2273/2275/2276/2277/2263) умерли без отчётов; Astra на M1 тоже ограничен. Владелец уведомлён (докупить кредиты / ждать 9.09). Критичные волны переведены на claude-opus в Anthropic-капе: 2275c приёмка фикса большого PDF, 2278c роли по живым ответам прода, 2272c revive-identity 5, 2270c C5-C круг 6, 2277 приёмка barge-in. Остальное стоит.
2026-09-06T11:10:23.075Z · coordinator[06.09 11:10Z координатор] [2026-09-06T11:10Z координатор] 🔴 P0 НА ПРОДЕ (найдено волной 2278c по живым receipts и подтверждено SQL): DocumentChunk с sourceContentRevision IS NULL (QUARANTINE, скрыты для retrieval через sourceChunkFreshnessSql, src/lib/rag/sourceReadPolicyServer.ts:68-73) = 54 728 из 104 761 чанков прода (52%). Это чанки, чей текст не дословная подстрока источника (legacy splitter,
vs
). Код l113e чинит splitter только для новых индексаций (46ee733d, chunking.ts:376-430); существующие чанки никто не чинит → у пользователей больше половины корпуса невидима в поиске/чате. Нужен repair: (а) для каждого источника с quarantine-строками — пересчитать чанки прод-чанкером (chunks-only reindex, без платных embeddings, если текст совпал — или с re-embedding при изменении границ), батчами, идемпотентно, с чекпоинтами; (б) метрика/алерт quarantined>0; (в) completeness receipt должен это видеть. Волна 2278c продолжает (repair-инструмент + судья + receipt).
2026-09-06T11:12:32.281Z · coordinator[06.09 11:12Z координатор] [2026-09-06T11:12Z координатор] Revive-identity круг 5: автор 2272c (claude-opus) сдал 51b32e57 (GO) — единый резолвер ключа для non-retry/retry WEB-465/revive CLI → приёмка 2283-accreviveopbudget5 (A2, sol xhigh, real PG) + проверка совместимости с WEB-499 c157a3e1.
2026-09-06T11:31:22.930Z · coordinator[06.09 11:31Z координатор] [2026-09-06T11:31Z координатор] Волна 2278c (claude-opus) сдала b5389194 (GO): freshness-предикат ушёл из WHERE агрегата здоровья корпуса (inspectSemanticIndex врал isHealthy при потерянных абзацах) → staleProvenanceChunks/sourceIds в SemanticIndexHealth, ремонт-мост до retrieval (≤8 источников/запрос), evidence-гейты не схлопывают заземлённый ответ в «general knowledge». Приёмка 2286-accroleschains (A2, sol xhigh, PG). Для прода (54 728 карантинных строк) отдельно batch-CLI: 2289-quarantine-backfill (A2, luna xhigh). Revive5 51b32e57 сам по себе GO (приёмка 2283), но WEB-499 тест зовёт удалённый __internal API → 2287-web499b. Пост-QA l113e с A1: перимeтр — /api/models/openrouter 500 без сессии, embed/chat|realtime 400 до auth → 2288-perimeter-500; Google/Apple: GET signin → error=Configuration = UnknownAction (метод пробы), проверяю POST с csrf.
2026-09-06T12:00:30.696Z · coordinator[06.09 12:00Z координатор] [2026-09-06T12:00Z координатор] Приёмка периметра (2298 ACCPERIMETER500) = GO 5837dd0f — /api/models/openrouter без сессии 401 (был 500), embed/chat|realtime auth до валидации, OPTIONS без admission → в кандидат l113f (сборка перезапущена).
2026-09-06T12:12:52.302Z · coordinator[06.09 12:12Z координатор] [2026-09-06T12:12Z координатор] WEB-499 адаптация к revive5: автор 2287 сдал 42b61743 (GO) → приёмка совместной поставки 2308-accweb499b (A2, sol xhigh, PG): revive5 51b32e57 + 499b, RED-наборы обеих прошлых приёмок.
2026-09-06T12:38:30.880Z · coordinator[06.09 12:38Z координатор] [2026-09-06T12:38Z координатор] ПРИНЯТО: revive-identity 5 + WEB-499 (2308 ACCWEB499B, sol xhigh, PG) = GO 42b61743 → кандидат l113g. WEB-552 (SEC-035) круг 3 (2312 ACCWEB552C, M4) = GO ecca7846 → l113g. Роли круг 2 (2310) = NO-GO d4e3ea82: ремонт функционально верен (repaired=3/refused=0, факты, embeddings переиспользованы), блокер — гонка с конкурентным обновлением Source → круг 3 = 2313-roleschains3 (claude-opus, compare-and-swap по contentRevision + общий модуль с CLI). Backfill-CLI (2304) = NO-GO 81acd297: отказывает историческим Source по contentHash — чинится в 2313 общим модулем.
2026-09-06T12:43:02.937Z · coordinator[06.09 12:43Z координатор] [2026-09-06T12:42Z координатор] ПОСАЖЕНО: ПРОД = l113f 221e8f39 (flip 12:39:47Z, без простоя; оба бэкенда ready, paid enforce_ready, edge 200×8; миграций новых нет (187/192); hetzbk l113f-221e8f39 + env-pack, Pi standby → l113f). Состав (15 коммитов над l113e): роли C5-C детерминированный отказ на прямом отрицании предиката (9fdfd6fe, 86afe601, 3ad54814, 59d4f3ee), WEB-541 SEC-024 retention contract (ebecd7f2, 3fd18f21), WEB-545 SEC-028 lighthouse headers (c4373797), WEB-509 gateway install (9ad8335c, репо-копия), WEB-463 barge-in + VAD env (0d7b50ee, 44ea7cea), WEB-542 rate-limit на client-account-generation (4891645b), WEB-508 SIP reload (8c76aa7d, b93d862f, репо-копия), WEB-506 куки-баннер (fc462e1d), периметр 500/embed (5837dd0f). Откат = l113e 65ff9060 (RUN l113e-65ff9060, REL arm64-l113e-20260906T101257Z). Снято с линии: WEB-560 merge (Prisma при импорте валил сборку → фикс 2309 → l113g). l113g: WEB-550 ed246cae, WEB-531 merge e8c97f1f, WEB-568 faf26ab9, revive5+499 42b61743, WEB-552 ecca7846 + ждущие: big-PDF r3, roles r3, backfill, 560 fix. Хост-синк SIP (508/509/463) — отдельное окно.
2026-09-06T13:17:04.106Z · coordinator[06.09 13:17Z координатор] [2026-09-06T13:15Z координатор] ПОСАЖЕНО: ПРОД = l113g 4c322c46 (flip 13:14:18Z, без простоя; оба бэкенда ready, paid enforce_ready, edge 200×8; миграция WEB-550 file_link_lifecycle применена (188/193); hetzbk l113g-4c322c46 + env-pack, Pi standby → l113g). Состав (20 коммитов над l113f): большой PDF — финализация 3 круга (3c6a6f86, 76dcb114, 7779df11: короткая идемпотентная tx, hook вне tx, no-indexable-chunks для документов без текста), revive-identity 5 + WEB-499 doc_ner identity (a958df4b…42b61743), WEB-531 SEC-014 3 круга (ca35fbeb, ad7c0cfd, e8c97f1f — слияние), WEB-568 SEC-046 (84dce358, faf26ab9), WEB-550 SEC-033 (819da84e, ed246cae), WEB-552 SEC-035 (9d47fdf4, ecca7846), манифесты (188 миграций). Откат = l113f 221e8f39 (RUN l113f-221e8f39, REL arm64-l113f-20260906T123500Z). Дальше: revive документа cmtkm80jo… по инструкции приёмки; l113h = roles r3 (приёмка), WEB-560 build-fix (приёмка), WEB-507 8b155fc1.
2026-09-06T13:20:21.019Z · coordinator[06.09 13:20Z координатор] [2026-09-06T13:20Z координатор] ПРИНЯТО: WEB-560 build-fix — 2317 ACCWEB560BUILDFIX (sol xhigh, PG, импорт-тест phase-production-build) = GO 742066c1 → кандидат l113h (вместе с merge-цепочкой). На проде l113g после посадки: большой PDF cmtkm80jo… revive → pending (checkpoint 9801/9801 сохранён; ждём финализацию воркером); big-test 1782161239510l4gl4zzur revive → pending (revive-identity v5). SIP host-sync план (2315, A1) = GO: sync-plan.sh/rollback.sh, COPY allowlist 12, PATCH allowlist 6 — выполняю окном по плану.
2026-09-06T13:21:12.721Z · coordinator[06.09 13:21Z координатор] [2026-09-06T13:21Z координатор] ПРОВЕРЕНО НА ПРОДЕ l113g: большой PDF cmtkm80jo01u8z8vgj446km1x — revive (poisoned retry-limit-exhausted → pending, checkpoint 9801/9801 сохранён) → воркер: result success=true chunks=9801 poisoned=0 → status=done, chunkCount=9801, wikiCompile=skipped (unregistered-release-manifest, ожидаемо). Финализация большого документа на проде работает. big-test 1782161239510l4gl4zzur revive → pending (revive-identity v5), наблюдаю.
2026-09-06T13:23:41.550Z · coordinator[06.09 13:23Z координатор] [2026-09-06T13:23Z координатор] ПРОВЕРЕНО НА ПРОДЕ l113g: big-test 1782161239510l4gl4zzur после revive → воркер снова billing_guard_operation_budget attempts=3 limit=2 → status=failed («This operation reached its retry limit»). Это ожидаемое поведение revive-identity v5 (старый parent авторитетен), но операторского пути «новая попытка» нет: revive-poisoned-source сбрасывает только metadata, unpoison отвечает «not poisoned (status=failed)». Волна 2319-revive-newattempt (A2, luna xhigh, PG): флаг --new-attempt с аудитом (новый parent, старые не трогаются). KNOWN ISSUES: симптом «после revive снова retry limit» → SQL по reservations parent → лечение = --new-attempt после посадки. Замечание: worker db-pool near capacity active=3 threshold=3 (connection_limit=3) — тесно для воркера индексации.
2026-09-06T13:58:51.942Z · coordinator[06.09 13:58Z координатор] [2026-09-06T13:58Z координатор] ПОСТ-QA l113g на проде (2320, A1, QA-учётка): PASS — pin/paid ready, витрина/redirect, legal/DMCA, Stripe-бета (PaymentElement, sandbox €10, без ввода карты), свой .md → done + C07 live propagation, периметр 27 методов (0×5xx), paid chat (6.05 credits ≈ /bin/zsh.06), me2-bridge (307/403/401 по контракту), нагрузка-lite 1200×200 (p95 1.9 с — выше, чем 197 мс на l113d; окно совпало с рестартами телефонии — перепроверить). FAIL: realtime session-start 200 → session-turn 404 session_not_found ×6 (сессии process-local за двумя бэкендами) → митигация на A1 13:56Z: nginx → 3010 (бэкап в /etc/nginx/backups), фикс в коде — волна 2328 (redis-хранилище сессий); повтор пика — 2329 (A1). Apple/Google «error=Configuration» — снова GET-проба (POST с csrf работает, проверено 11:2xZ). Большой PDF для QA — 403 (другой владелец, ожидаемо). Revive --new-attempt: автор 2319 сдал 2f0fde7c (GO) → приёмка 2326 (A2, PG). C4-RU-3/C1-2 из батареи → разбор 2324 (A2). WEB-370: staged-артефакты для хостовой установки → 2327 (A2).
2026-09-06T14:12:56.619Z · coordinator[06.09 14:12Z координатор] [2026-09-06T14:12Z координатор] ПРИНЯТО: revive-poisoned-source --new-attempt — 2326 ACCREVIVENEWATTEMPT (sol xhigh, PG) = GO 2f0fde7c → кандидат l113h. Целостность l113h (2330, M4) = GO (импорт-гард cron/social под phase-production-build чист, манифесты rc 0). Astra блок 19: брифы 2113–2117 (extraction wiring, generated config mode, package portability, beta terminal outcome, canonical cookie document) ушли на M4.
2026-09-06T14:13:54.594Z · coordinator[06.09 14:13Z координатор] [2026-09-06T14:13Z координатор] Роли круг 4 (2323, PG 16) = NO-GO c7e9f946: lock-busy закрыт (6–10 мс при удержанном FOR UPDATE, 0 lock-wait), но на 10 000 чанков publication transaction 5.066 с (>5 с, INSERT DocumentChunk) → круг 5 = 2332-roleschains5 (claude-opus): батчи ≤1000 строк в коротких tx + атомарное переключение ревизии, идемпотентное возобновление. Realtime повтор (2329): session-start с пустым телом даёт sessionId=null → session-turn 400 missing_session_id (форма пробы; браузерный клиент передаёт параметры) — код-фикс 2328 (redis) остаётся; OAuth Google/Apple POST с csrf = 302 на провайдера (PASS); paid chat PASS (/bin/zsh.00047). Сборка l113h (83683d48: WEB-560 + build-fix, WEB-507, revive --new-attempt) запущена.
2026-09-06T14:49:51.111Z · coordinator[06.09 14:49Z координатор] [2026-09-06T14:48Z координатор] ПОСАЖЕНО: ПРОД = l113h 83683d48 (flip 14:47:06Z, без простоя; оба бэкенда ready, paid enforce_ready, edge 200×8; миграция WEB-560 scheduled_social_idempotency применена (189/194); hetzbk l113h-83683d48 + env-pack, Pi standby → l113h). Состав (7 коммитов над l113g): WEB-560 SEC-043 (merge a7f41620/38aaad4e + build-fix 742066c1, импорт-гард phase-production-build), WEB-507 data-testid реестр (cd6afbf9, 8b155fc1), revive-poisoned-source --new-attempt (2f0fde7c). Откат = l113g 4c322c46 (RUN l113g-4c322c46, REL arm64-l113g-20260906T131045Z). Дальше: revive --new-attempt для big-test 1782161239510l4gl4zzur; l113i = C4-RU-3 11f3cdd5 + roles r5 + realtime r2 + Astra block-19 fixes после приёмок.
2026-09-06T14:51:30.373Z · coordinator[06.09 14:51Z координатор] [2026-09-06T14:51Z координатор] Realtime redis-сессии круг 1 (2334 ACCREALTIMETURN404, real PG) = NO-GO 3d63dfd9: session-turn при Redis-hit вставляет VoiceTurn с FK на отсутствующую VoiceSession → P2003/500; автор тестировал на Map без Prisma → круг 2 = 2344-realtime-turn2 (A2, sol xhigh, PG+redis, two-process на реальной Prisma). nginx-пин /api/realtime/ → 3010 остаётся. Astra блок 19: oauth-result-write-budget fix 3652a309 (WEB-542) → приёмка 2345 (M4); edge-identity review NO-GO (находки → Astra). Big-test 1782161239510l4gl4zzur: revive --new-attempt применён на l113h (новый parent бюджета) → pending, наблюдаю.
2026-09-06T14:56:54.791Z · coordinator[06.09 14:56Z координатор] [2026-09-06T14:56Z координатор] На проде l113h: big-test 1782161239510l4gl4zzur после revive --new-attempt индексируется (status=running, checkpoint 3328/3932, attempts=2) — новый parent бюджета работает. SIP: независимое ревью v2 (2338) = процедура v3 готова (: reload = module reload res_pjsip.so с проверкой endpoints>0; фаза 0 backup/validate+check; фаза 1 reload-only apply; фаза 2 proof без владельца — UDP Digest REGISTER 401→200 и contact через module reload; фаза 3 restart только при необходимости) — выполняю фазу 0 (read-only) сейчас, окно фаз 1–2 следом.
2026-09-06T15:02:07.676Z · coordinator[06.09 15:02Z координатор] [2026-09-06T15:02Z координатор] ПРОВЕРЕНО НА ПРОДЕ l113h: big-test 1782161239510l4gl4zzur — после revive --new-attempt (новый parent бюджета) воркер довёл индексацию: status=done, chunkCount=3932 (15:01Z). Оба долго висевших документа владельца (big PDF 9801 и big-test 3932) закрыты на l113g/l113h. KNOWN ISSUES: документ с исчерпанным бюджетом операции (attempts>limit) оживляется только из релизного дерева с RUN env; обычный revive/unpoison возвращает retry-limit.
Воркер
не привязан — привязать:
curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \
-d '{"issueId":"WEB-495","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-09-06T15:28:38.694Z