Files
Gadfly e78a9ca897 fix(codex): preserve streamed messages and replay tool batches consistently
Codex streaming could omit commentary, reasoning, and edit cards between
batches until the conversation was reloaded. Historical exec wrappers also
collapsed supported parallel calls into generic exec cards and used command
labels that differed from live rendering.

Preserve snapshot ordering and complete message corrections:
- Compare complete raw message content when selecting the transported suffix;
  keep structural signatures limited to snapshot scheduling.
- Apply a buffered full snapshot before its dependent tail update advances
  the sequence barrier, retaining intermediate items during React batching
  and stream completion.

Restore recorded tool batches without guessing result ownership:
- Associate Promise.all and Promise.allSettled results with their original
  array slots, including independently printed index labels in forEach and
  bounded for loops.
- Retain labeled arrays, primitives, plain text, and label-like values.
- Restore mixed command and write_stdin batches while keeping polling tied
  to the original process card.
- Match identical commands through confirmed process identities or unique
  explicit absolute working directories, including file URIs and Windows
  paths, while preserving literal POSIX backslashes.
- Never assign unindexed parallel process receipts by arrival order; retain
  the original wrapper whenever ownership cannot be established.

Keep local Promise computations out of the visible tool timeline:
- Preserve Promise.resolve expressions and indexed results as internal data
  without executing historical source.
- Filter these entries through the shared rendering predicate so they neither
  create cards nor interrupt command groups in live or historical messages.
- Separate rejection metadata from result fields, distinguish Promise.all
  values from settled envelopes, and decode nested local receipts only when
  the source proves that the complete settled receipt was printed.
- Keep flattened local Promise.all output in its original wrapper rather
  than interpreting data fields named status or error as execution outcomes.

Align historical command rows with live presentation:
- Preserve recorded summaries, approval reasons, and parsed command actions.
- Accept both list_files and listFiles directory action names.
- Remove generated English command summaries and retain Bash tool identities
  for legacy reads and searches so the shared renderer controls row labels.

Extend Java, React, and browser regression coverage for snapshot ordering,
process ownership, mixed batches, local result preservation, command labels,
and continuous tool grouping. Update the Codex runtime documentation and
browser fixtures to describe the resulting behavior.

Validation:
- 199 Java tests passed across CodexKnownExecReplayTest,
  HistoryMessageInjectorTest, CodexHistoryPageIndexTest, and
  StreamMessageCoalescerStreamEndHookTest.
- Gradle checkstyleMain passed.
- 67 targeted frontend tests passed across snapshot callbacks, MessageItem,
  GenericToolBlock, tool constants, and command presentation.
- TypeScript test-project checking and git diff --check passed.
2026-10-25 21:37:23 -07:00
..