Стабилизация, итерация 11: suggestions и комментарии — audit trail, целостность apply (один PR, 5 коммитов) #496
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Один PR. Зависимостей от других итераций нет. Координаты — develop@363f20ab.
Коммит 1 — feat(audit): DB-backed audit trail вместо Noop
audit.module.ts:5-13: события летят в NoopAuditService с payload{pageId}; childless Apply/Dismiss при этом hard-delete'ит комментарий — восстановить, кто и что решил, невозможно. Правка: минимальный DB-backed AuditService — одна таблицаaudit_events(actor, action, page_id, payload jsonb, ts); payload дополнить suggestedText/selection/commentAuthor/decidedBy. Биндинг модуля уже существует.Коммит 2 — fix(comments): suggestion с вечным 409
packages/mcp/src/client.ts:2883-2908:expectedTextберётся из debounced REST-снапшота, а метка ставится в live-доке — расхождение даёт 409 на каждый apply. Правка: в transform-фазе (там уже есть live-док) перечитывать фактическую подстроку под меткой и сохранять её как expectedText.Коммит 3 — fix(comments): apply не стирает форматирование
yjs.util.ts:261-262: вставка только с{comment: markAttrs}— bold/link/code исходного run'а теряются молча. Правка v1: захватывать marks доминирующего run'а заменяемого диапазона и применять к вставке. До полного фикса — предупреждение в UI-превью диффа («форматирование будет сброшено»).Коммит 4 — fix(comments): orphan-anchor reconcile + docstring
comment.service.ts:630-710: при исчерпании ретраев очереди метка остаётся без строки комментария; docstring обещает инвариант «FIRST and FATALLY», который уже не выполняется. Правка: поправить docstring; reconcile-джоб «метка есть, строки комментария нет → снять метку» — тихая дивергенция становится самозаживающей; тот же джоб закрывает fire-and-forget resolve/unresolve (:330).Коммит 5 — fix(comments): дедуп двойного WS-broadcast при apply треда с ответами (косметика).
Тест итерации: e2e с живым hocuspocus «человек печатает внутри marked-run во время apply» — наблюдаемое свойство, не мок.