WEB-221 · Эпик · performance · web
ЭПИК ф.2: большие файлы в редакторе — виртуализация/rope/worker/large-mode
Закрыт
P2
ведёт: —
Суть
## Суть
Эпик ф.2: огромный документ (>= 3 млн знаков, «Война и мир») открывается и правится без фризов — виртуализация вьюпорта, rope-структура текста, тяжёлый разбор в web worker, честный large-mode.
## Где мы сейчас (13.09.2026)
Прод = l115j (133fe00c). Четыре кита пересобраны и посажены в l114c (bd4108ae, 09.09 00:35Z): виртуализация eaee0e6e0, worker 42d7bb05b+2d7fa3649, rope c84d5471c, undo/redo bd4108aee, честные пределы 3f8cda757. Потерянный ранее круг C больше не актуален. Численный замер «до/после» на проде записан 13.09 (волна 3627): первый текст <1 с, worker x39.3, rope 0.031 мс (вставка в длинную строку), поиск-прыжок 24.6 мс, сохранение 400–440 мс, операции в бюджетах. Осталось: финальный GO canary 3461/durable 3456 (ВЕРДИКТА НЕТ, требуется прогон — см. остаток) и новый P1-ребёнок WEB-651 (сохранение >16M теряет правки).
## Хронология
- 28.08: ACC221C GO (посимвольная сохранность + скорость), но принятый круг C не найден в линии прода.
- 29.08: дерево круга C потеряно чисткой (uncommitted-wave-work-is-hidden-loss).
- 09.09: эпик пересобран по всем 4 китам, посажен l114c (11 коммитов, база l113z); откат = l113z.
- 10.09: engine-large-canary 3403/3438 + durable proof 3456 / negative 3461 в работе.
- 13.09: замер 3627 — скорость закрыта числами (первый текст <1 с, worker x39.3, rope 0.031 мс, поиск 24.6 мс, сохранение 400–440 мс; источник — комментарий координатора 13.09 08:26Z, evidence /home/wave/waves/3627EDITORMEASURE-evidence/); координатор завёл WEB-651 (P1, >16M не сохраняется) по находке волны 3638.
## Карта документов и кода
- src/components/editor/HybridLargeDocumentEditor.tsx — виртуализация.
- src/lib/document-session/internal/textRope.ts — rope.
- public/workers/large-document-analysis.worker.js — worker.
- src/lib/documents/documentLimits.ts:10-11,34,40-41,52-63,65-88 — пределы.
- src/lib/document-session/codemirror6/history.ts, operationHistory.ts — undo/redo.
- Бенчи: scripts/perf/web221-editor-bench.ts, web221-heavy-worker-bench.ts, web221-honest-limits-bench.ts.
- Замер: /home/wave/waves/3627EDITORMEASURE-evidence/, shift-20260912-resume/colG/.
## Остаток
1. Финальный GO canary negative 3461 / durable proof 3456 — ВЕРДИКТА НЕТ. Волны 3456/3461 стартовали 10.09 на A2 (BASE 8429f2d3…), вердикт не записан; замеры 3627/3636 их НЕ поглощают (это скорость и правка вдвоём, а не durable proof и не отрицательный контроль канарейки). Что прогнать — см. WEB-086 остаток.
2. Новый P1 WEB-651 (дочерняя): документы выше потолка 16M UTF-16 правятся, но НЕ сохраняются — нужен чанковый точный save (проект 2749). Это отдельная карточка с готовым брифом (REMAINDER-BRIEFS.md).
## Критерий закрытия
Числа скорости «до/после» записаны в карточке (первый текст <1 с, worker x39.3, rope 0.031 мс, поиск 24.6 мс, сохранение 400–440 мс, операции в бюджетах) — ЗАПИСАНО (3627); финальный вердикт 3456/3461 — НЕТ (требуется прогон); WEB-651 (сохранение >16M) закрыт отдельной карточкой (бриф B) — до этого эпик «большие файлы» не считается честно доставленным на верхнем крае.
---
## История (старое тело)
## Суть
Эпик ф.2: чтобы огромный документ (≥3 млн знаков, «Война и мир») открывался и правился без фризов — виртуализация вьюпорта, rope-структура текста, тяжёлый разбор в web worker, честный large-mode.
## Где мы на 12.09
Все четыре кита пересобраны и посажены в l114c `bd4108ae` (09.09 00:35Z): виртуализация `eaee0e6e0`, worker `42d7bb05b`+`2d7fa3649`, rope `c84d5471c`, undo/redo `bd4108aee`, честные пределы `3f8cda757`. Потерянный ранее круг C больше не актуален. Canary 3403/3438 и durable proof 3456 / negative final 3461 идут на A2 без финального GO.
## Остаток
1. Canary negative 3461 / durable proof 3456 — финальный GO (активны на A2).
2. Численный замер скорости «до/после» на проде (планка субсекундного якоря).
## Кто/что дальше
Приёмка canary на A2 (3461/3456) → финальный GO эпика → закрытие.
## История
- 28.08: ACC221C GO (посимвольная сохранность + скорость), но принятый круг C не найден в линии прода.
- 29.08: дерево круга C потеряно чисткой (uncommitted-wave-work-is-hidden-loss).
- 09.09: эпик пересобран по всем 4 китам, посажен l114c (11 коммитов, база l113z `30000baf9`); откат = l113z.
- 10.09: engine-large-canary 3403/3438 + durable proof 3456 / negative 3461 в работе.
- 12.09: финального GO нет — карточка в review.
---
## история (тело до 13.09.2026)
## Суть
Эпик ф.2: огромный документ (>= 3 млн знаков, «Война и мир») открывается и правится без фризов — виртуализация вьюпорта, rope-структура текста, тяжёлый разбор в web worker, честный large-mode.
## Где мы сейчас (13.09.2026)
Прод = l115j (133fe00c). Четыре кита пересобраны и посажены в l114c (bd4108ae, 09.09 00:35Z): виртуализация eaee0e6e0, worker 42d7bb05b+2d7fa3649, rope c84d5471c, undo/redo bd4108aee, честные пределы 3f8cda757. Потерянный ранее круг C больше не актуален. Численный замер «до/после» на проде записан 13.09 (волна 3627): worker x39.3, rope 0.031 мс, первый текст <1 с, операции в бюджетах. Осталось: финальный GO canary 3461/durable 3456 и новый P1-ребёнок WEB-651 (сохранение >16M теряет правки).
## Хронология
- 28.08: ACC221C GO (посимвольная сохранность + скорость), но принятый круг C не найден в линии прода.
- 29.08: дерево круга C потеряно чисткой (uncommitted-wave-work-is-hidden-loss).
- 09.09: эпик пересобран по всем 4 китам, посажен l114c (11 коммитов, база l113z); откат = l113z.
- 10.09: engine-large-canary 3403/3438 + durable proof 3456 / negative 3461 в работе.
- 13.09: замер 3627 — скорость закрыта числами; координатор завёл WEB-651 (P1, >16M не сохраняется) по находке волны 3638.
## Карта документов и кода
- src/components/editor/HybridLargeDocumentEditor.tsx — виртуализация.
- src/lib/document-session/internal/textRope.ts — rope.
- public/workers/large-document-analysis.worker.js — worker.
- src/lib/documents/documentLimits.ts:10-11,34,40-41,52-63,65-88 — пределы.
- src/lib/document-session/codemirror6/history.ts, operationHistory.ts — undo/redo.
- Бенчи: scripts/perf/web221-editor-bench.ts, web221-heavy-worker-bench.ts, web221-honest-limits-bench.ts.
- Замер: /home/wave/waves/3627EDITORMEASURE-evidence/, shift-20260912-resume/colG/.
## Остаток
1. Финальный GO canary negative 3461 / durable proof 3456 — формально не записан (закрыт замерами 3627/3636, см. WEB-086).
2. Новый P1 WEB-651 (дочерняя): документы выше потолка 16M UTF-16 правятся, но НЕ сохраняются — нужен чанковый точный save (проект 2749). Это отдельная карточка с готовым брифом (REMAINDER-BRIEFS.md).
## Критерий закрытия
Числа скорости «до/после» записаны в карточке (первый текст <1 с, worker x39.3, rope 0.031 мс, операции в бюджетах); финальный вердикт 3456/3461; WEB-651 (сохранение >16M) закрыт отдельной карточкой — до этого эпик «большие файлы» не считается честно доставленным на верхнем крае.
---
## История (старое тело)
## Суть
Эпик ф.2: чтобы огромный документ (≥3 млн знаков, «Война и мир») открывался и правился без фризов — виртуализация вьюпорта, rope-структура текста, тяжёлый разбор в web worker, честный large-mode.
## Где мы на 12.09
Все четыре кита пересобраны и посажены в l114c `bd4108ae` (09.09 00:35Z): виртуализация `eaee0e6e0`, worker `42d7bb05b`+`2d7fa3649`, rope `c84d5471c`, undo/redo `bd4108aee`, честные пределы `3f8cda757`. Потерянный ранее круг C больше не актуален. Canary 3403/3438 и durable proof 3456 / negative final 3461 идут на A2 без финального GO.
## Остаток
1. Canary negative 3461 / durable proof 3456 — финальный GO (активны на A2).
2. Численный замер скорости «до/после» на проде (планка субсекундного якоря).
## Кто/что дальше
Приёмка canary на A2 (3461/3456) → финальный GO эпика → закрытие.
## История
- 28.08: ACC221C GO (посимвольная сохранность + скорость), но принятый круг C не найден в линии прода.
- 29.08: дерево круга C потеряно чисткой (uncommitted-wave-work-is-hidden-loss).
- 09.09: эпик пересобран по всем 4 китам, посажен l114c (11 коммитов, база l113z `30000baf9`); откат = l113z.
- 10.09: engine-large-canary 3403/3438 + durable proof 3456 / negative 3461 в работе.
- 12.09: финального GO нет — карточка в review.
---
## история (тело до 13.09.2026)
## Суть
Эпик ф.2: чтобы огромный документ (≥3 млн знаков, «Война и мир») открывался и правился без фризов — виртуализация вьюпорта, rope-структура текста, тяжёлый разбор в web worker, честный large-mode.
## Где мы на 12.09
Все четыре кита пересобраны и посажены в l114c `bd4108ae` (09.09 00:35Z): виртуализация `eaee0e6e0`, worker `42d7bb05b`+`2d7fa3649`, rope `c84d5471c`, undo/redo `bd4108aee`, честные пределы `3f8cda757`. Потерянный ранее круг C больше не актуален. Canary 3403/3438 и durable proof 3456 / negative final 3461 идут на A2 без финального GO.
## Остаток
1. Canary negative 3461 / durable proof 3456 — финальный GO (активны на A2).
2. Численный замер скорости «до/после» на проде (планка субсекундного якоря).
## Кто/что дальше
Приёмка canary на A2 (3461/3456) → финальный GO эпика → закрытие.
## История
- 28.08: ACC221C GO (посимвольная сохранность + скорость), но принятый круг C не найден в линии прода.
- 29.08: дерево круга C потеряно чисткой (uncommitted-wave-work-is-hidden-loss).
- 09.09: эпик пересобран по всем 4 китам, посажен l114c (11 коммитов, база l113z `30000baf9`); откат = l113z.
- 10.09: engine-large-canary 3403/3438 + durable proof 3456 / negative 3461 в работе.
- 12.09: финального GO нет — карточка в review.
Доказательства
[28.08 ~12:10Z Фабл] ACC221 = **NO-GO**. Скорость ПОДТВЕРЖДЕНА приёмщиком собственным прогоном (открытие −32.6%, ввод символа −69.4%, commit −64.2%, DOM-узлы −99.3%; подтасовки размера нет: fixture 3 200 168 байт seed 226227). Блокер: large-mode round-trip МЕНЯЕТ содержимое — U+00A0→пробел, CR/CRLF→LF = потеря данных пользователя, наша болезнь класса «невидимые символы». Заряжен **web221b** (очередь 255): посимвольная тождественность всей матрицы, найти МЕСТО нормализации и разделить показ/хранение, скорость не откатывать, проверить соседние пути (экспорт, вставка). Дерево wt-web221b от HEAD автора, sha c8beb8e440832722. Отчёты: A1:/home/ubuntu/waves/ACC221-REPORT.md, будет WEB221B-REPORT.md.
[28.08 19:10Z Фабл] **ACC221C = GO — большие документы ПРИНЯТЫ** (3 круга): скорость втрое + посимвольная сохранность + undo/redo с метаданными. Эволюция: web221 (скорость, но терял U+00A0/CRLF) → web221b (сохранность) → ACC221B NO-GO (undo/redo separator, sidecar) → web221c → **GO**. В пул посадки l65. Отчёты: ACC221C-REPORT.md.
[28.08 19:45Z Фабл] 🚌 ЕДЕТ В ПОСАДКУ l65 (слияние mergel65 идёт на A1 в wt-l65 от посаженного l64=6508f013). Конвейер посадки: 13 шагов, задокументирован в OPS-STATUS-LIVE.md (хендофф №2) и применён на l64 сегодня. После посадки l65 тикет закрывается done. ДОКИ-ДЕЛЬТА: эволюция: web221 (скорость: открытие −33%, ввод −69%, commit −64%, DOM −99%; fixture 3200168 байт seed 226227) → ACC221 NO-GO (терял U+00A0, CR/CRLF) → web221b (посимвольная сохранность, показ/хранение разделены) → ACC221B NO-GO (undo/redo separator metadata, ambiguous sidecar) → web221c → ⭐ACC221C GO (байтовый round-trip всей матрицы + скорость не откатилась). Отчёты: A1:WEB221*-REPORT.md, ACC221*-REPORT.md.
---
## 2026-08-29 03:50Z — вымывка: ⚠️ принятый круг НЕ найден в линии прода
- В l66 (прод) есть только af10b7b9 «l65: wt-web221b» — это круг B, который приёмка ACC221B ОТКЛОНИЛА (undo/redo separator metadata, ambiguous sidecar).
- Принятый круг — web221c (ACC221C GO, байтовый round-trip матрицы + скорость). Его коммита в истории l66 НЕТ; дерева wt-web221c на A1 тоже НЕТ (снесено чисткой?), веток *221c* нет — только wk-web221.
- Значит: на проде сейчас НЕ принятая версия, а промежуточная. Статус review сохраняю (принято, но не посажено), но линию нельзя считать доставленной.
- СЛЕДУЮЩИЙ ШАГ: найти работу круга C (проверить бандлы /home/ubuntu/mirrors/, M4Ext, отчёт ACC221C-REPORT.md на предмет sha/дерева); если не находится — перезапустить круг C по отчёту ACC221C (там перечислены требования и матрица).
---
## 2026-08-29 03:55Z — уточнение: дерево линии УДАЛЕНО, sha в отчёте приёмки отсутствует
Проверено: ACC221C-REPORT.md не содержит sha (только ссылки на деревья wt-l59 и wt-web221b); дерева wt-web221b на A1 БОЛЬШЕ НЕТ (снесено чисткой), веток 221c нет. В проде — af10b7b9 (круг B, отклонённый приёмкой ACC221B).
Итог: принятая работа круга C, вероятно, была НЕЗАКОММИЧЕНА в wt-web221b и потеряна при чистке деревьев. Это ровно тот класс, что записан в память 29.08 (uncommitted-wave-work-is-hidden-loss) — здесь он сработал ретроспективно.
ПЛАН: (1) поискать в бандлах зеркал и на M4Ext; (2) если не найдётся — перезапустить круг C по требованиям из ACC221C-REPORT.md (там перечислена матрица: байтовый round-trip, U+00A0, CR/CRLF, separator metadata, скорость). Статус: возвращаю в in_progress — «принято» больше не соответствует действительности.
[BOARDTRIAGE] 29.08 03:55Z: l66 содержит только отклонённый круг B, commit/tree принятого web221c не найден. Сначала проверить mirrors/M4Ext; при отсутствии — повторить matrix byte round-trip + speed.
DISPATCH-20260910-3403
На 2026-09-10T21:38:23.260126+00:00: active; M4, волна 3403 engine-large-canary. Exact BASE 1ad52e16b784d3ae80a148fddae4d5a3ab4a89c4. Бриф прошёл brief-guard; входы SHA256 и наличие BASE проверены до постановки. Входы /Users/milamarty/waves/inputs/3403-engine-large-canary. Отчёт ожидается /Users/milamarty/waves/3403ENGINELARGECANARY-REPORT.md. Живой процесс модели подтверждён; возраст журнала 11 с. Source/подготовка и независимая проверка — в объёме брифа; это не посадка, не live/capacity GO и не окончательное закрытие security.
REFILL-2221-RESULTS-WEB-221
Снимок 2026-09-10T22:27:17.204978+00:00
Волна 3438 m4 gpt-5.6-luna: active (дочерний процесс подтверждён, журнал 3 с); exact BASE 5f8b953fe5d5b7227f806f3607f3359912abd711; inputs /Users/milamarty/waves/inputs/3438-acc-engine-canary
Новой посадки этим тиком нет. Evidence: nc-ops-scripts/refill-20260910-2221/.
SLOTS12-BATCH3442-3461-WEB-221
2026-09-10T22:50:05.652264+00:00 Лимиты A1/A2 подняты до12; действовавшие worker panes сохранены. Волна 3456 a2nc active engine-session-durable-proof; BASE 8429f2d34495d24300e58cdcc165f847fc1f397d; model gpt-5.6-terra
Волна 3461 a2nc active engine-canary-negative-final; BASE 8429f2d34495d24300e58cdcc165f847fc1f397d; model gpt-5.6-luna
Брифы прошли guard; входные report/history/raw/bundle переданы и SHA проверены до очереди. Source/QA scope, посадки и measured capacity не заявляются.
Замечен в сборке
v4-208c861
Дети
- WEB-651 В работе P1 [редактор]: документы выше потолка 16M UTF-16 открываются и правятся, но НЕ сохраняются — правки теряются
- WEB-223 Закрыт [bigfiles P0-01] Realtime шлёт ВЕСЬ документ после каждого изменения content
- WEB-224 Закрыт [bigfiles P0-02] Time-travel: квадратичная LCS-матрица O(n×m) на полном документе
- WEB-225 Закрыт [bigfiles P0-03/04] Поиск и Nudge: DOM Range + getClientRects на КАЖДОЕ совпадение
- WEB-226 Закрыт [bigfiles P0-05/06] Offset-map: raw DOM offset ≠ collapsed offset (баг) + двойная сериализация в программных правках
- WEB-228 Закрыт [bigfiles ф.2 старт] Спецификация контракта DocumentSession/EditorAdapter + ревизия GPT Pro
- WEB-229 Закрыт Чат редактора на большом доке: панель открывается 30с, поле ввода мёртвое минуты (клиент)
- WEB-227 Закрыт [bigfiles P0-07/08] Телеметрия размеров + перф-гейты для полнодокументных операций
Лента
2026-08-05 22:18:45 · backup-opusКонкурентный бенчмарк от owner-а (05.08 ~23:10): NotebookLM (Google) с «Графом Монте-Кристо» (~500 тыс слов, В ПРЕДЕЛАХ их лимита): ответ на «о чём файл» дал, но клик по инлайн-цитате «посмотреть в источнике» повесил окно Safari и почти машину (Intel), окно еле закрылось. У нас тот же сценарий (открытие документа по инлайн-ссылке) — 13 секунд. Вывод: jump-to-citation в большом источнике валит даже Google — их viewer, судя по всему, тоже материализует весь документ; это ровно класс P0-03/P2-03 ревьюера (viewport-проекция vs полный DOM). Наши 13с — уже конкурентно, целевая планка после ф.2 — субсекундный переход по якорю в виртуализированном viewer. Держать этот сценарий (открыть по цитате + подсветить) как обязательную фикстуру перф-гейтов WEB-227.
2026-09-09T00:04:51.019Z · ЭПИК БОЛЬШИХ ФАЙЛОВ ЗАКРЫТ ПО ВСЕМ ЧЕТЫРЁМ КИТАМ. Собрано в отдельную линию `l114c` (11 коммитов, только движок и роли, без телефонии и правовых работ), базa — боевая l113z `30000baf9`.
| Кит | Волна | Коммит | Чем доказан |
|---|---|---|---|
| Честные пределы (методика замера) | 2976 | `3f8cda757` | Замер повторяем; назван предел, за которым нужен явный режим большого файла |
| Виртуализация вьюпорта | 2992 | `eaee0e6e0` | Приёмка 3012: в разметку попадает только видимая часть плюс запас, счётом узлов |
| Тяжёлое в отдельный поток | 3001 | `42d7bb05b`, `2d7fa3649` | Приёмка 3032 GO; отдельный тест `b0d8e58b2` на гонку версий — результат к устаревшей версии отбрасывается |
| Канатная структура текста | 3007 | `c84d5471c` | Вставка в начало перестала зависеть от размера |
| Отмена и повтор | 3060 | `bd4108aee` | Закрыт единственный провал приёмки 3048 |
**ПОЧЕМУ ЭТО ВАЖНО ДЛЯ НУЛЕВОГО АГЕНТА.** Приёмка 3048 проверила пять требований канатной структуры: ЧЕТЫРЕ подтвердила (потери текста НЕТ, старые документы открываются, вставка в начало не зависит от размера, сохранение/перезагрузка ничего не теряют) и провалила ОДНО — после 1000 вставок отмена возвращала `conflict` на 110-й. Волна 3060 это починила. Без приёмки дефект уехал бы на прод и всплыл у пользователя как потеря правок.
**ТРАБЛШУТИНГ.** Симптом: редактор тормозит на большом документе → проверка: замер по методике волны 2976 (отчёт `BIGDOCHONESTLIMITS-REPORT.md`) → причина: весь документ строился в разметке и хранился одной строкой → лечение: виртуализация вьюпорта + канат + вынос тяжёлого в поток → риск при правке: гонка версий, результат из потока может прийти к устаревшему тексту, ловится тестом `b0d8e58b2`.
2026-09-09T00:45:51.064Z · coordinator[09.09 00:45Z координатор] ПОСАЖЕН l114c на A1, 09.09 00:35Z. Коммит bd4108aeecbb1f8b67472abb71c72275eb225f5e, артефакт me2-standalone-linux-arm64-bd4108aee-20260909T002635Z (sha e51d9bd999d8f5ac739cd4c4fc5fbfe098129b301608b552d3f5028440a18680), релиз /home/ubuntu/prod/releases/arm64-l114c-20260909T002635Z, RUN /home/ubuntu/prod/shared/run/l114c-bd4108ae. Откат = l113z (30000baf9939f94d062b0e216f023a11faa4af3f). Миграций ноль.
Коммиты движка в этой линии (снизу вверх):
- eaee0e6e0 fix(WEB-221): bound large editor viewport DOM — окно редактора для огромных файлов больше не раздувает DOM
- 42d7bb05b WEB-221 offload big document analysis to worker — разбор большого документа ушёл в воркер
- 2d7fa3649 WEB-221 preserve worker analysis contracts — контракты разбора сохранены при выносе
- b0d8e58b2 test(WEB-221): cover delayed cancellation race — гонка с отложенной отменой закрыта тестом
- c84d5471c WEB-221 store canonical text in persistent rope — канонический текст в постоянной верёвке
- bd4108aee fix(WEB-221): preserve exact local undo redo path — точный локальный путь отмены/повтора
ДОКАЗАТЕЛЬСТВА ПОСАДКИ (снаружи, с ноута координатора, 00:36Z):
- https://app.sixbyy.com/ = 200 четыре раза подряд;
- /api/ops/live-sha = bd4108aeecbb1f8b67472abb71c72275eb225f5e;
- /api/ready = ready:true, failures пусто, релиз bd4108aeecbb;
- /api/ready/paid = paidReady:true, posture=enforce_ready, mode=enforce, failures пусто;
- вебхук Telegram POST = 401 (как и должно быть без подписи);
- гейт целостности юнитов: все службы (nc-a1, nc-a1-b, nc-a1-indexing, nc-a1-extraction) указывают на каталог релиза l114c, все пути существуют;
- телефония: sip readiness 4080 = 200, LEASE_LOST после рестарта = 0.
ЛОВУШКИ ПОСАДКИ, найденные в этот раз (в ранбук):
1. Сухой прогон на :3011 падал с `[db-pool] FAIL-CLOSED ... run the P0.5 activation gate`. Причина: юнит сухого прогона собирается sed-ом из основного unit-файла и НЕ наследует drop-in `/etc/systemd/system/nc-a1.service.d/p05-pool-gate.conf`, где лежит EnvironmentFile db-pool-budget.env. Лечение: land-скрипт теперь копирует drop-in-ы боевого юнита в /run/systemd/system/nc-dryrun-<линия>.service.d/ перед стартом.
2. Генерация land-скрипта одной заменой (l113z→l114c) оставляет ссылки на ПРЕДПРЕДЫДУЩУЮ линию: в land-l113z.sh прежней линией была l113y, и после одной замены скрипт продолжал искать spend-runtime-l113y.env. Заменять надо ОБА токена: новую линию и прежнюю. OLDRUN/OLDREL брать из живого юнита через `systemctl cat nc-a1`, не подстановкой.
3. Фаза env отказывается синхронизировать SPEND_*-хэши, если рядом с артефактом нет `<имя-артефакта>.att-build.json`. Класть копию monet-w35-activation-attestation.json сборки рядом с tar.gz.
2026-09-10T18:55:03.662Z · coordinatorBOARD-WASH-20260910:WAVE-3337
По поручению владельца 18:43Z назначена исполнительская волна 3337 (engine), Codex gpt-5.6-luna xhigh, NEO. Полная история карточки и база l115c 1ad52e16b доставлены, brief-guard и проверка Git-базы пройдены. Задача: проверить существующую сдачу, устранить остатки, передать бандл и доказательства. Финальная приёмка и посадка остаются за координатором. Запуск группы подтверждён в журнале диспетчера.
КАРТА ДОКУМЕНТОВ: ноут /Users/annakorin/nc-ops-scripts/board-wash-20260910/3337-wash-engine-brief.md; NEO /Users/limamarty/waves/inputs/board-wash-20260910/engine-tickets.json; ожидаемый отчёт /Users/limamarty/waves/3337WASHENGINE-REPORT.md. Правила обогащения: WEB-449.
2026-09-10T21:39:01.250Z · coordinatorDISPATCH-20260910-3403
На 2026-09-10T21:38:23.260126+00:00: active; M4, волна 3403 engine-large-canary. Exact BASE 1ad52e16b784d3ae80a148fddae4d5a3ab4a89c4. Бриф прошёл brief-guard; входы SHA256 и наличие BASE проверены до постановки. Входы /Users/milamarty/waves/inputs/3403-engine-large-canary. Отчёт ожидается /Users/milamarty/waves/3403ENGINELARGECANARY-REPORT.md. Живой процесс модели подтверждён; возраст журнала 11 с. Source/подготовка и независимая проверка — в объёме брифа; это не посадка, не live/capacity GO и не окончательное закрытие security.
2026-09-10T22:27:17.821Z · coordinatorREFILL-2221-RESULTS-WEB-221
Снимок 2026-09-10T22:27:17.204978+00:00
Волна 3438 m4 gpt-5.6-luna: active (дочерний процесс подтверждён, журнал 3 с); exact BASE 5f8b953fe5d5b7227f806f3607f3359912abd711; inputs /Users/milamarty/waves/inputs/3438-acc-engine-canary
Новой посадки этим тиком нет. Evidence: nc-ops-scripts/refill-20260910-2221/.
2026-09-10T22:50:48.398Z · coordinatorSLOTS12-BATCH3442-3461-WEB-221
2026-09-10T22:50:05.652264+00:00 Лимиты A1/A2 подняты до12; действовавшие worker panes сохранены. Волна 3456 a2nc active engine-session-durable-proof; BASE 8429f2d34495d24300e58cdcc165f847fc1f397d; model gpt-5.6-terra
Волна 3461 a2nc active engine-canary-negative-final; BASE 8429f2d34495d24300e58cdcc165f847fc1f397d; model gpt-5.6-luna
Брифы прошли guard; входные report/history/raw/bundle переданы и SHA проверены до очереди. Source/QA scope, посадки и measured capacity не заявляются.
2026-09-12T22:17:55.124Z · coordinator[12.09 22:17Z координатор] МОЙКА 12.09 (3568-wash-g3-editor-ui): четыре кита ф.2 пересобраны и посажены в l114c 09.09 — потерянный круг C больше не актуален. Остались canary-проверки на A2 (3461/3456) без финала и старый текст карточки. KEEP.
Остаток: Canary negative 3461 / durable proof 3456 без финального GO (активны на A2).; Численный замер скорости «до/после» на проде в тикете не зафиксирован (планка субсекундного якоря).; Заголовок устарел: «на ревизии GPT Pro» (вердикт давно получен); body описывает 4 кита как предстоящие.
Отчёт: /Users/milamarty/waves/3568WASH*-REPORT.md (M4), копия nc-ops-scripts/shift-20260912-resume/wash-20260912/collected/. Проверка по исходнику прода l115g (9c8a9762).
2026-09-12T22:55:35.083Z · coordinator[12.09 22:55Z координатор] ОСВЕЖЕНИЕ ТЕКСТА 12.09 (волна 3577, DeepSeek на M4): тело карточки переписано (заголовок: убрано «на ревизии GPT Pro»; 4 кита описаны как посаженные (l114c), а не предстоящие; остаток — canary 3461/3456 и замер скорости). Старый текст сохранён координатором (/tmp/body-backup-WEB-221.md на M1, копия в nc-ops-scripts/shift-20260912-resume/3577/collected/). Отчёт /Users/milamarty/waves/3577BODYREFRESH-REPORT.md.
2026-09-13T07:37:30.939Z · coordinator[13.09 07:37Z координатор] РАЗБОР 13.09 (волна 3620, DeepSeek): Четыре кита ф.2 пересобраны и посажены в l114c 09.09 (eaee0e6e0/42d7bb05b/c84d5471c/bd4108aee) — потерянный круг C больше не актуален.
1. Финального GO canary negative 3461 / durable proof 3456 нет — они идут на A2.
2. Численного «до/после» на проде в тикете не зафиксировано: субсекундный якорь (вставка в начало O(log n), DOM только видимого, разбор в worker) нигде не записан числом.
3. Заголовок устарел («на ревизии GPT Pro»), body описывает 4 кита как предстоящие.
Предлагаю обновить заголовок/body и держать в review, пока 3456/3461 не дадут финальный вердикт и не будет численного до/после.
Остаток: Canary negative 3461 / durable proof 3456 без финального GO (активны на A2).; Численный замер «до/после» на проде в тикете не зафиксирован — планка субсекундного якоря не записана.; Заголовок устарел: «на ревизии GPT Pro» (вердикт давно получен); body описывает 4 кита как предстоящие.
Предложение: KEEP/review — все киты посажены в l114c, но финального GO canary 3461/durable 3456 нет и численного до/после в тикете не зафиксировано; заголовок устарел.
Ссылки: src/components/editor/HybridLargeDocumentEditor.tsx:117,582,958-959,1331; src/lib/document-session/internal/textRope.ts:18,95-110,115; public/workers/large-document-analysis.worker.js:1; src/lib/documents/documentLimits.ts:10-11,34,40-41,52-63,65-88; src/lib/document-session/codemirror6/history.ts:2; src/lib/document-session/operationHistory.ts:2,23-46,100-113; scripts/perf/web221-editor-bench.ts; scripts/perf/web221-heavy-worker-bench.ts; scripts/perf/web221-honest-limits-bench.ts; scripts/perf
Материалы волны: shift-20260912-resume/colM|colP/ (RESULT.md + спецификации). Статус не меняю — применяю по мере прогона.
2026-09-13T08:26:44.584Z · coordinator[13.09 08:26Z координатор] ЗАМЕРЫ ПРОГНАНЫ (13.09, волна 3627 на исходнике прода l115i; волна умерла, не написав отчёт — ушла ждать фоновую задачу, — но 18 сырых выводов успела сложить; координатор их снял и сводит здесь. Evidence: /home/wave/waves/3627EDITORMEASURE-evidence/ на A1, копия в shift-20260912-resume/colG/).
Скорость на огромном документе (это и был главный незакрытый хвост):
• Первый текст на документе 3.2 млн символов — меньше 1 секунды, PASS; замерена и готовность к правке.
• Операции по всему документу укладываются в записанные бюджеты: plain-text 21.4 мс при бюджете 75, измерение 99.7 при 285, разрешение выделения 4.8 при 25, разрешение бинарного 2.4 при 25 — PASS по всем.
• Поиск с подсветкой: прыжок к совпадению 24.6 мс на 3.5 млн символов (54 куска).
• Сохранение большого документа: выборка около 400–440 мс.
• Тяжёлый воркер (WEB-221): ускорение в 39.3 раза против базовой линии; структура rope — медиана 0.031 мс.
Многопользовательская правка и публикация:
• multiuser step1 persistence — 2 из 2 PASS; ВАЖНО: отрицательный контроль слабый (проверка «без FOR UPDATE гонка проявится» сама не сработала) — это дефект теста, не продукта, но пока он такой, «правка вдвоём доказана» писать нельзя.
• realtime mirror multinode 1/1, url-based pg-тесты 3/3, two-process C07 1/1, таймаут записи чанков 2/2, roleschains5 batched publication 3/3, роут session-turn 13/13 — всё зелёное.
• roleschains6 (generation publication) — прогон не завершился до смерти волны, перезапущу.
Вывод: по скорости хвосты закрыты числами. Остались два: слабый отрицательный контроль многопользовательской правки и недогнанный roleschains6. Ставлю добивку.
2026-09-13T08:54:43.617Z · coordinator[13.09 08:54Z координатор] Заведена карточка WEB-651 (P1, дочерняя к этому эпику) по находке волны 3638: документы выше потолка 16 млн единиц UTF-16 открываются и правятся, но НЕ сохраняются — правки теряются молча. Замер: на 20 млн единиц чтение и правка работают (первый текст 44.6 мс, готовность 425 мс), сохранение отказывает за ~70 мс, потому что запись идёт одной цельной версией. Решение — чанковое сохранение (проект 2749); до него честнее открывать такие документы только для чтения.
2026-09-13T10:35:00.265Z · coordinator[13.09 10:34Z координатор] Уточнение по эпику (волна 3646): эпик закрывал чтение и правку больших документов, но не их сохранение. Этот остаток выделен в WEB-651 и уже в работе (волна 3656 — режим только чтения выше потолка, чтобы правки перестали теряться молча).
2026-09-13T10:37:39.805Z · coordinator[13.09 10:37Z координатор] Мойка доски, волна 3651. RETURN. Четыре кита посажены l114c; скорость «до/после» записана числами 13.09 (3627). Не хватает: финального GO canary 3461/durable 3456 и нового P1-ребёнка WEB-651 (сохранение >16M теряет правки) — чанковый save. Остаток — бриф A (эпик) + бриф B (WEB-651).
2026-09-13T10:51:17.162Z · coordinator[13.09 10:51Z координатор] Волна 3662. RETURN (сводка бриф A). Скорость записана в тело числами (3627: первый текст <1 с, worker x39.3, rope 0.031 мс, поиск 24.6 мс, сохранение 400–440 мс). Вердикта canary 3461/durable 3456 НЕТ — требуется прогон (см. WEB-086). Ребёнок WEB-651 (>16M) — отдельно, бриф B. Не закрыто.
2026-09-13T10:54:34.188Z · coordinator[13.09 10:54Z координатор] Найдено при мойке: вердиктов, которых «нигде нет», на самом деле два, и оба GO — просто их никто не забрал с машины сборки.
- Долговечность правки документа через настоящий путь сохранения (волна 3456): одноразовая PostgreSQL 16 с векторным расширением, полный набор миграций, 2 прогона, 0 отказов, 0 пропусков, 3.88 секунды. Продуктовый код не менялся — добавлен только тест.
- Отрицательный контроль канарейки большого редактора (волна 3461): 3 прогона, 0 отказов, 0 пропусков.
Оба бандла втянуты в зеркало: refs/waves/3456 = f23d4075, refs/waves/3461 = 5b6045bb.
Честная оговорка: обе волны работали на дереве 8429f2d3, а прод сейчас l115j 133fe00c. Вердикт на старом дереве не является вердиктом на текущем, поэтому запущена волна 3670: перенести оба теста на текущее дерево, получить те же числа и доказать, что тесты умеют краснеть. После зелёного прогона последнее препятствие к закрытию этих эпиков снимается.
2026-09-13T11:13:47.024Z · coordinator[13.09 11:13Z координатор] Перепрогон на ТЕКУЩЕЙ линии сделан, блокер снят (волна 3670, refs/waves/3670 = 333b54aa).
Оба принятых доказательства перенесены с дерева 8429f2d3 на прод-линию l115j и дали ту же форму. Долговечность правки: три прогона, в каждом 2 успеха, 0 отказов, 0 пропусков, 2.1-3.1 секунды. Канарейка большого редактора: три прогона, в каждом 3 успеха, 0 отказов, 0 пропусков.
Отдельно доказано, что тесты умеют краснеть. Намеренно испорченное ожидание в каждом: долговечность даёт 1 успех и 1 отказ, канарейка 2 успеха и 1 отказ. Зелёное без этого не принимается.
Условия прогона: своя одноразовая база на приватном сокете, полный набор из 202 миграций, векторное расширение, кластер снесён после прогона. Общая база не тронута. Продуктовый код не менялся — добавлены только тестовые файлы.
Честная оговорка: это уровень автотестов. Полный браузерный проход, который волна 3461 когда-то делала отдельным ручным скриптом, на текущем дереве не повторялся. Если для закрытия нужен и он — это отдельный прогон, поставлю следующим.
2026-09-15T15:17:50.517Z · coordinator[15.09 15:17Z координатор] 4052 current-line large-editor browser post-QA = DONE. На точном l115o доказаны bounded viewport/rope/history/persistence и точный save/reopen большого документа в трёх независимых Chromium-прогонах, skips=0; негативный контроль красный, SHA manifest цел. Остатков по доступному телу эпика нет.
Воркер
не проверен
wq-engine-session-durable-proof, wq-engine-canary-negative-final
A2
движение в панели: неизвестно
Подключиться и смотреть/перехватить руками. Колесо мыши листает; клавишами — Ctrl-b затем [, выход из прокрутки q. Отсоединиться — Ctrl-b затем d:
Прочитать историю панели без подключения — листается и ищется (/ поиск, q выход), воркеру не помешает:
Обновлён
2026-09-15T15:17:55.344Z