Repository navigation
Cross-surface parity test: one edge-case transcript through every consumer in CI #103
Copy link
Copy link
Closed
Labels
enhancementNew feature or requestNew feature or request
Description
Part of #94.
Зачем
Тесты в репо проверяют каждого потребителя отдельно. Единственный тест, сравнивающий несколько поверхностей, — test/shared/turnAccounting.parity.test.ts. Он сравнивает хук, проход CLI и часть панели на одной фикстуре без компакта, релеев, промптов сабагентов и строк прокси.
Все расхождения эпика (#95–#102) прошли CI зелёными. Регрессии приходили из более поздних PR, которые меняли правило в одном месте:
- feat: session spend, burn rounds and correct wait-loop accounting #27 сломал порог Loop из feat(context): Loop + Wait-loop burn categories in Visible Context #26 (Loop thresholds differ per surface: panel flags the 2nd identical call, CLI the 3rd, bell the 4th #96);
- fix(turn): compaction is not a turn — one numbering everywhere #69 сломал совпадение при компакте из feat(cli): wait_loop finding, API-time metrics, longest-turn inventory #23 и fix(burn): share turn-boundary predicate and wait-loop gate (#28) #33 (Compaction splits a turn in the inventory and panel but not in analyze:session #97);
- fix(#59): classify mixed relay-XML content as user text #67 сломал тесты fix(#64): skip teammate relays in session preview firstUserMessage #66 — main был красным ~4,7 ч.
Что сделать
- Новый тест, например
test/shared/crossSurfaceParity.test.ts. В нём — построитель синтетического JSONL (как в блоках «Как проверить» из sub-issue эпика) и таблица «сценарий × поверхности»:
| сценарий | что сравнивать |
|---|---|
запрос прокси без requestId (несколько строк, один message.id) |
итог токенов: сайдбар, детали сессии, analyze:session, analyze:sessions (#95) |
многострочный запрос Claude с параллельными tool_use |
число вызовов: сырой JSONL, ledger, панель (#88) |
| повторы одного вызова ×2/×3/×4 | Loop: панель, loop_streak, cycles, колокол (#96) |
| компакт внутри хода | wait-loop: CLI и панель; самый длинный ход в обеих CLI; номер хода везде (#97) |
| промпт сабагента в основном файле | перечитывание за ход: хук, колокол, панель; число ходов: сайдбар, чипы, CLI (#98, #99) |
| релей тиммейта | номер хода: чат, колокол, CLI (#99) |
| старт без user-сообщения | счётчик сайдбара против чипов (#100) |
<task-notification> |
ход не открывается; есть элемент отображения (#104) |
- Начать со строк, которые совпадают уже сейчас. Каждый фикс из эпика добавляет свою строку в том же PR. Заведомо красные строки со
skipне добавлять. - Тест входит в
pnpm test, то есть работает в CI.
Связано: #74 (эталонная фикстура и сверка с внешним источником) и #79 (корпус реальных сессий вне CI). Этот тест синтетический и работает в CI — они дополняют друг друга.
Acceptance
- Тест в
pnpm test, работает в CI - К концу эпика Epic: one number on every surface — cross-surface parity (audit follow-ups) #94 в таблице есть все сценарии выше
- В шапке теста сказано: новая поверхность, показывающая те же числа, добавляется в таблицу
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request
Activity
test(parity): one edge-case fixture through every consumer (#103) (#132)