test(#244): Part B backlog — editor-ext/mcp/client/server unit+contract tests + findBreadcrumbPath mutation fix #257
Open
agent_coder
wants to merge 4 commits from
test/244-part-b into develop
pull from: test/244-part-b
merge into: vvzvlad:develop
vvzvlad:main
vvzvlad:fix/255-ws-redis-adapter-leak
vvzvlad:feat/251-intentional-clear
vvzvlad:fix/252-e2e-open-handles
vvzvlad:feat/184-autonomous-agent-runs
vvzvlad:feat/221-image-captions
vvzvlad:feat/git-sync
vvzvlad:refactor/193-tool-spec-registry
vvzvlad:fix/244-dataloss-bugs
vvzvlad:fix/embeddings-reindex-progress
vvzvlad:develop
vvzvlad:feature/offline-sync
vvzvlad:feat/229-catalog-yaml
vvzvlad:feat/243-blob-sandbox
vvzvlad:feat/228-inline-footnotes
vvzvlad:fix/qa-ui-bugs-216-218
vvzvlad:feature/agent-roles-catalog
vvzvlad:fix/share-alias-rename
vvzvlad:fix/ai-chat-empty-render
vvzvlad:feat/191-chat-doc-binding
vvzvlad:feat/201-temporary-notes
vvzvlad:feat/198-interrupt-agent
vvzvlad:feat/ai-chat-full-history
vvzvlad:feat/199-ai-generate-title
vvzvlad:feat/205-share-aliases
vvzvlad:batch/issues-189-187-170
vvzvlad:feat/170-mcp-test-button
vvzvlad:feat/189-context-badge
vvzvlad:feat/198-interrupt-agent-send-now
vvzvlad:fix/issues-190-159
vvzvlad:fix/ai-chat-new-chat-during-stream
vvzvlad:fix/ai-chat-stream-perf
vvzvlad:batch/issues-2026-06-25
vvzvlad:feat/ai-chat-persistent-history
vvzvlad:fix/ai-chat-copy-chat-wysiwyg
vvzvlad:fix/ai-stream-reset-resilience
vvzvlad:fix/ai-stream-undici-timeout
vvzvlad:fix/footnote-review-1227-followup
vvzvlad:fix/ai-chat-token-counter-realtime
vvzvlad:docs/manual-qa-test-plan
No Reviewers
Labels
Clear labels
bug
documentation
duplicate
enhancement
epic
feature
good first issue
help wanted
idea
invalid
needs-human
question
refactor
review/approved
review/changes-requested
review/needs
security
status/blocked
status/done
status/in-progress
status/ready
test
wontfix
Something isn't working
Improvements or additions to documentation
This issue or pull request already exists
New feature or request
Large multi-phase effort spanning many changes
New functionality request
Good for newcomers
Extra attention is needed
Idea / proposal for discussion
This doesn't seem right
эскалация: нужно решение человека
Further information is requested
Code cleanup / refactoring
в последнем ревью нет открытых blocking-находок
последнее ревью оставило открытые blocking-находки
head не ревьюился (head != reviewed_head)
Security / hardening issue
ждёт зависимость blocked_by
закрыто и проверено
в активной работе (мягкая заявка)
специфицировано, не заблокировано, ждёт исполнителя
Test coverage / test infrastructure
This will not be worked on
Milestone
No items
No Milestone
Projects
Clear projects
No project
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: vvzvlad/gitmost#257
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "test/244-part-b"
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?
Summary
Гасит #244 Часть B — остаток тест-стратегии (Часть A — mdrt-2/persist-6 — уже в #248). Coherent all-green чанк: +193 теста + 1 source-фикс (findBreadcrumbPath-мутация) + behavior-identical рефактор (вынесен чистый
extractAuthTokenFromSetCookieиз performLogin). Ref #244.Покрыто: editor-ext (recreateTransform invariant, moveRow/moveColumn, getSelectionRangeInColumn, addUniqueIds — +37); mcp (auth-cookie parse, media-roundtrip attrs, applyAnchorInDoc, recreate-transform drift-guard — +31); client (findBreadcrumbPath non-mutation, applyUpdateOne, formatRelativeTime, sortPositionKeys/pageToTreeNode — +18); server (SSRF guardedFetch + decryptHeaders fail-open, yjs.util [было 0 тестов], SHARED_TOOL_SPECS↔in-app parity [76], storage.service делегирование вместо тавтологий — +107).
findBreadcrumbPath-фикс: мутировал shared live-дерево (
node.name='Untitled'in place) → теперь shallow-copy на возвращаемой цепочке, вход не трогается. Единственный потребитель — resolveBreadcrumbNodes, на side-effect никто не полагался (breadcrumb.utils.test.ts 8 pass).How verified
Deferred (с обоснованием, для follow-up)
sendNow, dictation ordered-emitter) — не экспортируемые pure-функции, не стал рисковать рефактором компонентов.Skip-listed (отсутствуют/уже покрыты)
decideClose/decideTurnEnd— нет таких символов;getInternalLinkPageName/table-utils/footnote-diff/paste-helpers/page-embed-lookup — уже покрыты ранее; SSRF isIpAllowed — в ssrf-guard.spec.Review checklist
🤖 Generated with Claude Code
Внутренний architect-lead review (мой review-субагент) по
f9b58a0e: APPROVE. findBreadcrumbPath-фикс корректен (вход не мутируется, «Untitled» через shallow-copy только в возвращаемой цепочке; единственный потребитель resolveBreadcrumbNodes на старый side-effect не полагался — регрессии нет); cookie-рефактор побайтово behavior-identical + build синхронен; ключевые тесты нетавтологичны (SHARED_TOOL_SPECS-контракт non-vacuous, SSRF guardedFetch реально блокирует, recreateTransform apply(diff)==target, storage делегирование). Скрытых source-изменений нет. Голова →f9b58a0e, review/needs.F1 [suggestion]
packages/editor-ext/src/lib/table/utils/move-column.test.ts:9-46(и move-row.test.ts:13-44, get-selection-range-in-column.test.ts:17-50) — блок построения ProseMirror-схемы (tableNodes({...})+new Schema({...})) и билдерыcell/row/table/doc, а такжеgrid/stateFor/trForскопированы дословно в три новых тест-файла этого PR; тот же блок уже есть в предсуществующем table-utils.test.ts. ~30 строк идентичного setup в 4 файлах: при любой правке схемы (напр. cellAttributes) придётся синхронно менять все копии, иначе тесты молча разойдутся в том, что считают «реальной» схемой редактора. Это не «повтор кейсов» (нормальный для тестов), а вынесение-достойная shared-фикстура.Fix: создать общий тест-хелпер
packages/editor-ext/src/lib/table/utils/table-test-helpers.ts(экспорт schema/cell/row/table/doc + grid/stateFor/trFor) и импортировать в три новых файла (и по возможности перевести table-utils.test.ts), удалив локальные копии.Ревью
f9b58a0e3— раунд 1 (ПОЛНЫЕ 8 аспектов, отдельный субагент на каждый). Вердикт: CHANGES.PR преимущественно тестовый (Part B бэклог #244) + 2 чистых прод-фикса: findBreadcrumbPath (убрана мутация shared sidebar-дерева → shallow-copy только в возвращаемую цепочку; покрыт тестом, падающим на pre-fix) и extractAuthTokenFromSetCookie (чистый extract-method из performLogin, поведение 1:1, build-артефакт синхронен).
Раскладка: security / stability / regressions / test-coverage / conventions / documentation / architecture — LGTM. Тесты содержательные (не no-throw), раннеры/нейминг по конвенциям пакетов, contract-тесты (SHARED_TOOL_SPECS parity, SSRF-guard) валидны.
Открыто: F1 (suggestion, simplification — дублированная ProseMirror table-фикстура в 3 новых файлах, вынести в общий хелпер).
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.