WEB-254 · Задача · document-session · web
[DS-F00] V2.1 pre-tag правки контракта + self-contained freeze-пакет
Закрыт
P0 · горит
ведёт: backup-opus
эпик: WEB-228
Суть
БЛОКИРУЕТ F01-F06 и тег document-session-contract-v1. Вердикт независимого ревью 06.08: архитектура V2 ПРИНЯТА, тег заблокирован только этими правками. (1) DS-T001 фактически падал: structural typing позволял присвоить ProjectedTextRange в CanonicalBlockTextRange без cast — нужен discriminant coordinateSpace на обоих; (2) createTextAnchor без atRevision → нет stale/wrong-epoch, плюс durability session|persistent (persistent запрещён для legacy-root); (3) getStats(atRevision?) необязательная revision — сделать обязательной + typed stale/unavailable; (4) decoration replace возвращал accepted/rejected → допускал partial success; сделать all-or-none, success только itemCount; (5) trusted ingress: public dispatch = local-feature, EditorInputPort = local-user, module-private InternalTransactionIngress = remote/system; (6) SetSelectionRequest без isComposing; (7) нормативная семантика transactionId vs wire-attempt sequence. Freeze-пакет обязан быть self-contained: спека, changelog, тикеты, нормативный CSV на 38 тестов, standalone .ts, лог компилятора, policy RFC, evidence-манифест (usePresence.ts, InlineFactcheckChip, серверный realtime-хендлер — source links + protocol trace), SHA256SUMS. Исходники ревью: ~/Downloads/docsession-v2-review-20260806 (их PROPOSED-DOCUMENTSESSION-V2.1-TYPES.ts уже compile-checked, run-contract-checks.sh гоняет negative-тесты).
Лента
2026-08-06T02:54:57.572Z · backup-opusПакет собран воркером s254 и отдан владельцу (~/Downloads/documentsession-contract-v1-freeze.zip, sha256 79b066bf21637a32986f11627a69dc6a13a4392a251784659db406580d061f2b). Все восемь pre-tag правок внесены и ДОКАЗАНЫ КОМПИЛЯТОРОМ: run-contract-checks.sh → OVERALL PASSED, старое доказательство поломки DS-T001 против новых типов больше не компилируется. Пакет self-contained (20 файлов в SHA256SUMS, включая нормативные типы, матрицу 38 тестов, policy RFC, evidence-манифест, сырой лог tsc). Продуктовое дерево не менялось (сверено по SHA-256). ВОСЕМЬ ВОЗРАЖЕНИЙ (SPEC §13), ни одно не блокирует тег; существенны три: OBJ-02 — предписано typed-reject недопустимой метадаты, но своего кода ошибки нет, единственный доступный отправит вызывающего чинить не то; предложено добавить invalid-metadata ДО тега (после — дороже по его же Gate A). ЭТО ЕДИНСТВЕННОЕ, ЧТО ТРЕБУЕТ РЕШЕНИЯ ВЛАДЕЛЬЦА КОНТРАКТА. OBJ-03 — в ЕГО же SetSelectionRequest ровно тот же класс дыры, что заблокировал V2: лишнее поле отвергается только у литерала, переменная ViewSelectionSnapshot присваивается свободно; зафиксировано открыто, с намеренно компилирующимся примером в negative-suite. OBJ-01 — дискриминант coordinateSpace закрывает DS-T001 и ровно его; CanonicalTextPoint/Range остались без него, остаток объявлен conformance-обязательством, расширение — кандидат в V2.2.
2026-08-06T10:27:11.839Z · backup-opusВЕРДИКТ ПО V2.1.1 (06.08): NO-GO по точной редакции → CONDITIONAL GO после V2.1.2. Архитектура принята окончательно, редизайн не требуется. ПОДТВЕРЖДЕНО: архив исправен, SHA256SUMS 28/28, обе нормативные CSV содержат ровно DS-T001..DS-T038, все семь compile-проверок зелёные под TS 5.8.3, decision kit компилируется, consistency checker 18/18, и ВСЕ ПЯТЬ прошлых блокеров закрыты (invalid-metadata, isComposing?:never, однозначный revision pin, attempt identity в reject, разорванная круговая зависимость Gate A). ВЛАДЕЛЕЦ КОНТРАКТА ВЫНЕС РЕШЕНИЯ по нашим трём вопросам: DEC-01 (явный atRevision у resolveTextAnchor) ПРИНЯТО; OBJ-09 (публичный reveal.atRevision) ОТКЛОНЕНО — view один раз захватывает свою renderedRevision; OBJ-10 (clientInstanceId в публичном SyncSnapshot) ОТКЛОНЕНО — остаётся внутренним инвариантом trace F06. ШЕСТЬ НОВЫХ БЛОКЕРОВ: (1) отмена без единой публичной семантики — typed cancelled только у createTextAnchor, и ДВЕ несовместимые реализации обе удовлетворяют нашему типу под strict (у него compiler proof); (2) SPEC §3 обещает readText → unsupported|ambiguous, а тип запрещает — прямое противоречие двух нормативных частей, две ошибки TS2322; (3) не завершён wire-протокол bounded catch-up: сервер отдаёт complete:false, но у клиента НЕТ нормативного типа сообщения для запроса продолжения — две команды напишут несовместимые протоколы; (4) три owner-решения формально не перенесены в спеку (наш же Gate A dry-run: 6 из 7); (5) в НОРМАТИВНОМ evidence-манифесте осталось утверждение, которое наш СОБСТВЕННЫЙ must-audit уже опроверг (обёртка execEditorCommand уходит в runOrbAgentLoop, там ещё 11 call-site-ов, три variable-driven, команда copy в allowlist но не в инвентаре, orbAgentLoop.ts вообще отсутствует в таблице хешей) — нельзя замораживать evidence, про который мы сами знаем, что он неверен; (6) НАШИ apply-скрипты P1/P3 печатают «manifest: 30 OK», а внешняя проверка сразу после падает: csv.writer держит файл открытым, SHA256SUMS считается ДО финального flush — проверка по протухшим байтам. Пункт 6 = наша повторяющаяся болезнь (то же было с гейтом упаковки и со спаем в тесте). Раздано воркеру s2512 с требованием пересобрать пакет ЧИСТО и приложить сырой вывод ВНЕШНЕЙ проверки, а не внутреннего «OK».
2026-08-06T15:36:26.485Z · backup-opusВЕРДИКТ РЕВИЗОРА ПО V2.1.2 (06.08): ПУБЛИЧНЫЙ КОНТРАКТ ПРИНЯТ. Семантика GO, архитектура принята окончательно. Все три обязательные правки V2.1.2 внесены по существу: у всех отменяемых операций типизированный исход cancelled, TextReadResult действительно выражает unsupported и ambiguous, ограниченный догон получил свои типы. Предыдущие правки сохранены. Тело публичных типов совпадает БАЙТ В БАЙТ с проверенным кандидатом (sha256 ab605656...). 15 из 15 проверок под TypeScript 5.8.3.
ТЕГ ПО ПРИСЛАННОМУ ZIP — NO-GO, но причина БОЛЬШЕ НЕ АРХИТЕКТУРНАЯ и V2.1.3 НЕ НУЖЕН. Нужна одна пересборка документации и доказательств без изменения API: V2.1.2-r1.
ШЕСТЬ ПРИЧИН. 1) Спека одновременно закрывает и снова открывает DEC-01: в одних разделах сказано, что explicit atRevision обязателен и решение владельца не требуется, а в INV-07 осталась фраза про альтернативу, требующую решения — нормативный документ разрешает две несовместимые реализации. 2) Проза снова разошлась с типами: абзац про DocumentStatsResult перечисляет исходы БЕЗ cancelled (менять надо прозу, не типы). 3) Файл фундамент-тикетов назван V2.1.2, а внутри направляет команды на V2.1.1, и F00/F02 всё ещё допускают implicit-current — а именно по нему сейчас работают F01-F06. 4) Число проверок не сходится: скрипт делает 15, README заявляет 15, таблица содержит 14, changelog говорит 8→14 вместо 8→15; Gate A требует механического совпадения. 5) Манифест доказательств называет себя V2.1.1 и говорит о девяти хешах при фактических десяти. 6) Пакет ссылается на механические доказательства, которых в архиве нет.
РЕВИЗОР ДОКАЗАЛ, что менять контракт не нужно: собрал черновик r1 сам — 59 из 59 сумм, 15 из 15 проверок, 34 из 34 проверок согласованности, тело типов байт в байт. Черновик НЕ является нашим официальным пакетом и тег по нему ставить НЕЛЬЗЯ — нам нужно воспроизвести пересборку у себя и прогнать проверки в чистой комнате.
РЕШЕНИЕ ПО РАБОТАМ: F00 GO после проверки официального r1; F01 ядро, F04 харнесс представления, F05 точное сохранение — GO после тега; F02 якоря — GO после тега, только явная привязка ревизии; F03 украшения — GO после тега с ограничениями до Gate B; F06 симулятор синхронизации — GO после тега, продолжение догона обязательно; F07 теневой легаси — GO только read-only. Пишущий легаси, мутирующий ИИ и боевая совместная работа — NO-GO до своих гейтов.
2026-08-06T15:54:37.403Z · backup-opusR1 ПЕРЕСОБРАН И ОТДАН ВЛАДЕЛЬЦУ: ~/Downloads/DocumentSession-V2.1.2-r1-freeze.zip, sha256 f0a5225ba91dec6765641a76502a27cb194488b22a74f3ef0dadf1988c959533, 59 файлов.
ВХОД СВЕРЕН: sha256 исходного пакета 09109994... совпал с тем, что независимо проверял ревизор — работал ровно с тем архивом, который он смотрел.
ПРОВЕРЕНО СВОИМИ РУКАМИ, НЕ ПЕРЕПИСАНО ИЗ ОТЧЁТА. Тело публичных типов посчитал ДО и ПОСЛЕ применения дельты: ab60565679c39b88b9d87cb03bd8f51ddb346bd3b438a4d69e860378c3359482 в обоих случаях — API не тронут, это главное условие. Согласованность пакета 34 из 34. Компиляторный набор под TypeScript РОВНО 5.8.3 — 15 из 15 требуемых исходов. Контрольные суммы 58 из 58.
ЧИСТАЯ КОМНАТА: всё перечисленное прогнано ПОВТОРНО после упаковки и распаковки в пустой каталог, чтобы зелёное не оказалось следом рабочего каталога. Совпало.
ЗАКРЫТЫ ВСЕ ШЕСТЬ ПРИЧИН NO-GO: DEC-01 больше нигде не назван ожидающим решения владельца и ни один тикет не разрешает implicit-current; проза про DocumentStatsResult приведена к типам (включая cancelled); фундамент-тикеты стали V2.1.2 и внутри тоже; число проверок сведено к 15 в скрипте, README, спеке, changelog и логе; манифест доказательств стал V2.1.2 и говорит о десяти хешах; десять недостающих механических доказательств приложены (диспозиции владельца, покрытие ревью, фикс скрипта с аудитом, проверялка согласованности, происхождение источников).
СОЗНАТЕЛЬНОЕ ОТЛИЧИЕ ОТ ЧЕРНОВИКА РЕВИЗОРА: не взял его файл R1-DRAFT-NOTICE.md — это его пометка о неофициальности собственного черновика, в нашем официальном пакете ей не место. Отсюда 59 файлов против его 60, остальное совпадает.
СКАН НА СЕКРЕТЫ: ноль находок.
ТЕГ document-session-contract-v1 НЕ СТАВЛЮ ПОКА: по решению ревизора F00 идёт GO только после проверки ОФИЦИАЛЬНОГО r1 архива, а не черновика. Архив у владельца, ждём подтверждения — после него тег и снятие блока с F01-F06.
2026-08-06T17:23:25.396Z · backup-opusТЕГ ПОСТАВЛЕН. GPT Pro дал финальный GO на ТОЧНЫЙ официальный архив V2.1.2-r1 (sha256 f0a5225b…59533 сверен независимо: архив в Загрузках владельца = вердикт ревизора байт в байт). Тег document-session-contract-v1 = аннотированный, в репо note-clone @ 01ede50bec, в сообщении тега привязка к sha256 архива и публичного тела типов (ab605656…). Архив + полный sign-off пакет ревизора закоммичены в docs/CONTRACTS/document-session-v1/. Gate A ЗАКРЫТ. GO: F00-F06, F07 только read-only shadow. NO-GO до поздних гейтов: legacy writer (D), mutating AI (E), prod collaboration (F).
2026-08-10T23:50:14.244Z · backup-opus11.08: активна на GPT-нити DocumentSession Gate B (раунды V4x, сейчас V4L 11-й слой F06 на M4). Не в очереди QA-review — ждёт закрытия Gate B, деплой DEFERRED (строка merge). Прогресс с нити.
Воркер
не привязан — привязать:
curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \
-d '{"issueId":"WEB-254","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-08-12T09:26:56.570Z