Skip to content

fix(#64): skip teammate relays in session preview firstUserMessage - #66

Merged
axisrow merged 1 commit into
mainfrom
fix/64-relay-preview
Oct 8, 2026
Merged

axisrow merged 1 commit into
mainfrom
fix/64-relay-preview

Conversation

@axisrow

@axisrow axisrow commented Oct 8, 2026

Copy link
Copy Markdown
Owner

Teammate relays leaked into firstUserMessage in analyzeSessionFileMetadata: a session whose JSONL opens with <teammate-message ...> put the raw XML into the sidebar preview, and the !firstUserMessage guard kept a later real user message from replacing it.

Fix: require isParsedUserChunkMessage(parsed) in the firstUserMessage guard — the canonical predicate already in use one branch above (turn counting) also filters relays, system output and interruptions. Command fallback (firstCommandMessage) is unaffected: <command-name> passes the predicate.

Fixes #64

Guard firstUserMessage with isParsedUserChunkMessage so relay XML, system output and interruptions never become the sidebar preview; a later real user message now wins. Command fallback untouched.

Co-Authored-By: Claude Code <noreply@anthropic.com>

@axisrow axisrow left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ревью PR #66 — fix(#64): skip teammate relays in session preview firstUserMessage

Вердикт: одобряю (approved). Изменений не требуется.

Проверено

  • Фикс — ровно то, что предписывает issue #64: guard firstUserMessage дополнен каноническим предикатом isParsedUserChunkMessage (делегирует в isUserChunkLine из turn-accounting core) — единый источник истины, без копий предиката.
  • Command-fallback не сломан: <command-name> проходит предикат (scripts/turn-accounting.mjs:86-125, тесты turnBudgetHookScript.test.ts:117) → firstCommandMessage заполняется как раньше.
  • Регрессий не найдено: все ветки внутри guard (stdout/stderr, interruptions, command-name, пустой sanitized-текст) ведут себя идентично или строже в сторону улучшения (массивный контент с <system-reminder> раньше мог протечь в превью — теперь нет).
  • Тесты покрывают оба случая из issue: relay-only → firstUserMessage: null; релей с последующим реальным сообщением → берётся реальное. Фикстуры и cleanup соответствуют стилю соседних тестов.
  • Смешанная строка «релей + пользовательский текст» исключается целиком — это каноническая семантика isTeammateRelayLine (любой relay-блок делает строку релеем), согласована с подсчётом ходов и хуком.
  • Ветка mergается с main чисто (MERGEABLE/CLEAN); изменения #55/#58 в той же функции — непересекающийся ханк.

Замечания вне скоупа (не блокируют)

  • Sidechain user-сообщения по-прежнему могут стать превью (тот же класс, что #64, существующее поведение) — можно ужесточить позже, если всплывёт.
  • Ветка отстаёт от main на один коммит (#58) — конфликтов нет, но rebаse перед мержем не помешает.

@axisrow
axisrow merged commit 78fa510 into main Oct 8, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Teammates-only sessions show raw relay XML in the sidebar session preview

1 participant