[QA-trace][#221 5/7] Верификация image-captions: ФИЧА РАБОТАЕТ (0 багов) + процесс-фидбэк (verifier недо-сэмплил) #239
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?
Process-trace отчёт по верификации PR #221 — image-captions (gitmost/Docmost)
Фокус: отладка СКИЛЛА web-test-orchestrator. Разбираем ПРОЦЕСС (как тестировали и проверяли), а не код фичи.
1. Сводка
Главный вопрос верификации — работает ли фича подписей к изображениям — ответ: ДА, работает.
Скилл прошёл полный фазовый цикл (recon → caption-core → round-trip/read-view → editor-regression → independent verifier). Independent-verifier пасс был выполнен, но узко — переподтвердил из чистого состояния лишь 1 находку из 19 (наличие кнопки Caption в bubble-menu). Это главная процессная слабость данного прогона: основной массив «feature-works» остался без независимой перепроверки (см. §5).
2. Агенты и инструменты — кто что покрыл и как себя проявил
Все агенты работали через Playwright (python, headless chromium-1148 с pinned executable_path +
--no-sandbox), реальный UI, со слушателями console(type=error)/pageerror/HTTP>=400 на каждом прогоне. Это общий и сильный паттерн — объективные сигналы собирались всегда.recon — картирование поверхности фичи. Действия: новый note → slash
/image→expect_file_chooser().set_files()(in-memory PNG) →img.click(force=True)→eval_on_selector_all('button[aria-label]'). Нашёл: кнопка Caption присутствует между Alt text и Download (count=1); путь вставки картинки через OS file-chooser актуатируем headless; нулевые load-time ошибки на авторизованном редакторе; задокументировал тулинг-пиннинг браузера. Кросс-сверка с image-menu.tsx / use-caption-control.tsx. Проявил себя как аккуратная разведка с привязкой DOM-наблюдений к исходнику.caption-core — ядро функциональности. Метод вставки: реальный upload через slash
/image+expect_file_chooser().set_files(test.png)(genuine/api/files/upload, не фейковый src). DOM-оракулы:page.evaluateнад.ProseMirror figure/img/figcaption— textContent + computeddisplay+offsetHeight; reload(networkidle) для persist. Покрыл полный жизненный цикл (insert/render/persist/edit/clear), XSS/спецсимволы (a & b " c < d > e— byte-identical после reload, не интерпретируется как HTML), и тонкость DOM-гигиены: пустой<figcaption>в resizable node-view не удаляется, а скрываетсяdisplay:none(косметика, не user-visible). Сильнейший агент прогона по глубине.caption-roundtrip-readview — персистентность и форматный round-trip. Инструменты шире: реальный clipboard write + trusted Ctrl+V, slash
/imageupload реального 2x2 PNG,navigator.clipboard.readText()как markdown-export-оракул, иcurlпротив API :3000 (login, pages/import, pages/info, shares/create). Покрыл: рендер подписи в public-share read-view из cookie-less контекста (важно — независимая непривилегированная сессия), persist через reload (Yjs/server), Copy-as-Markdown сохраняетdata-caption, import через/api/pages/importвосстанавливаетattrs.caption, caption-less остаётся чистым, и честно зафиксировал trade-off: markdown несёт подпись только как невидимыйdata-caption(внешние рендереры её не покажут). Самый разноинструментальный агент — UI + API + clipboard.editor-regression — проверка отсутствия регрессий от нового figure/figcaption-обёртки. Драйв через реальный UI: create page, slash, filechooser upload, bubble-menu клики, mouse drag для resize, Ctrl+C/V. Покрыл: базовый редактор (текст, h1, bullet, /table) выживает reload; resize-handles + align + float по-прежнему работают (ширина 400→250px persist); bubble-menu цел; copy/paste дублирует figure+figcaption с атрибутом caption; нулевые ошибки. Также поймал контаминацию стенда параллельным агентом и корректно обошёл её уникальным маркером (ZQX9REGRESS) + проверкой в пределах одной сессии — правильная реакция на known-condition, а не ложное обвинение приложения.
verifier (independent) — переподтвердил из нуля только «наличие кнопки Caption». Ценное процессное наблюдение verifier'а: тайтл и тело — разные ProseMirror-инстансы, и
/image, набранный в nth(0), ошибочно создаёт страницу с заголовком «/image»; правильный путь — фокус в body (.ProseMirror nth(1)). Это полезный анти-грабли для скилла. Но сам verifier явно отметил, что проверил только presence, не функциональность/round-trip.3. Что нашли — по классам, кем и на каком этапе
expect_file_chooser. Закрыло риск «headless не сможет вставить картинку».display:block).4. Фолс-позитивы
Ноль. Ни один из агентов не выдал ложного бага. Более того, потенциально «подозрительные» наблюдения (пустой figcaption в DOM; невидимый
data-captionв markdown) были сразу квалифицированы как cosmetic / заявленный trade-off, а не как дефекты — это правильная дисциплина оракула и discnfirm-by-default. Контаминация чужим контентом не была свалена на приложение. То есть классическая проблема ~85% success-hallucination здесь не сработала: claims подкреплены DOM/HTTP/clipboard-evidence.5. Где скилл сработал, а где провалился именно на верификации фичи
Сработал:
expect_file_chooser().set_files()и грузили genuine/files/ассеты — фича проверена на настоящем изображении, а не на подделке src.Провалился / слабые места процесса:
6. Предложения по скиллу
--no-sandbox; (в) pre-auth 401 на /users/me и /auth/collab-token — ожидаемы, не баг.display+offsetHeight(видимость), textContent byte-compare (lossless/XSS), reload-persist, cookie-less read-view, API import/export round-trip — оформить как переиспользуемый чек-лист «editable-attr-on-node».📌 Процесс-вывод: на all-pass верификации (фича работает) independent-verifier перепроверил лишь 1 из 19 находок — именно тут doer-verifier и должен ловить success-hallucination, а вышел почти выключен. Скилл-фидбэк: для verification-прогонов verifier должен сэмплировать репрезентативно (особенно «feature-works»-находки), а не только дешёвый presence-чек. Плюс: агенты реально грузили картинку через
expect_file_chooser(не отговорились headless), объективные сигналы на каждом прогоне, read-view проверен из cookie-less контекста — 0 фолс-позитивов.🤖 web-test-orchestrator (process-trace, feature-verify)