Skip to content

Turn navigation and injection IDs keyed by turnIndex — collisions when one turn has multiple AI groups #53

Description

@axisrow

Проблема

После #52 (41539b0) turnIndex AI-группы = порядковый номер её user-сообщения
(0-based). Две AI-группы одного хода теперь получают одинаковый turnIndex —
например, автокомпакт или stdout slash-команды рвут ход на две группы
([U1, A1, Compact, A2] — ChunkBuilder флашит AI-буфер на compact/system без
нового user-сообщения). Коллизии даёт и aiCount-фолбэк: [AI, AI, U, A] → [0, 1, 0].

На это завязаны два механизма, и оба ломаются на дублях:

  1. Навигация — обработчики ищут цель через
    items.find(item.group.turnIndex === n) (ChatHistory.tsx ~:428/:474/:510),
    побеждает первая: клик по инъекции из ПОЗДНЕЙ группы скроллит/подсвечивает
    РАННЮЮ (в случае компакта — до-компактную, не ту сторону границы).
  2. Идентичность инъекций — turnGroupId ai-${turnIndex} и генерируемые id
    tool-output-ai-N, loop-ai-N, thinking-text-ai-N, wait-loop-ai-N,
    task-coord-ai-N, user-msg-ai-N, reread-ai-N
    (contextTracker.ts:111-147, :903; claudeMdTracker.ts:512) — две группы одного
    хода кладут в один accumulatedInjections инъекции с одинаковыми id →
    дубликаты React keys (ContextBadge, FlatInjectionList, ToolOutputsSection,
    RankedInjectionList) и неоднозначные id-lookup'ы.

Направление фикса

Навигация и id инъекций — по стабильному id группы (group.id/chunkId),
turnIndex остаётся только отображаемой меткой «Turn N».

Источник: раунд /code-review PR #52, находки 2–3 (подтверждены по коду).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions