HERMES-GIELIE/static
Hermes Agent f3b0c2cb5f stage-364: Opus-caught replay double-render fix + regression test
Opus advisor caught that the new run-journal replay path could double-render
when the live stream errors mid-stream:

- Live SSE frames emitted by _sse() in api/streaming.py:2296 carry no 'id:'
  field. Only _sse_with_id() (used in _replay_run_journal at routes.py:5853)
  emits IDs.
- During live streaming, EventSource.lastEventId stays empty, so the frontend's
  _lastRunJournalSeq stays at 0.
- If the server dies mid-stream, the error reconnect handler opens replay with
  after_seq=0 — server replays every journaled event from seq 1.
- assistantText accumulator (closure scope in messages.js) carries over from
  the live phase. The token handler unconditionally appends d.text. Double-
  rendered text.

Fix: reset assistantText, reasoningText, liveReasoningText, segmentStart, and
set _smdReconnect=true before opening the replay EventSource. Next live token
clears assistantBody.innerHTML to match the reset accumulator.

4 regression tests added in test_stage364_opus_replay_doublerender_fix.py.
Revert-fix verification confirms 3/4 tests fail against reverted code.

This is the TWO-LAYER catch in action: agent self-verified the producer→
consumer chain works end-to-end (Step 3 in agent-side-empirical-verification.md
PASSED for #2283), and Opus independently caught a separate frontend coupling
issue. Both checks required and both fire.
2026-05-16 03:28:07 +00:00
..
vendor chore: vendor streaming-markdown@0.2.15, remove CDN dependency 2026-04-24 01:05:20 +00:00
apple-touch-icon.png feature: add manifest and icons to enable app install on android 2026-05-02 19:06:39 +02:00
boot.js feat: add workspace panel edge reopen toggle 2026-05-15 18:33:27 -07:00
commands.js Merge pull request #2198 into stage-349 2026-05-13 19:02:59 +00:00
favicon-32.png
favicon-192.png feature: add manifest and icons to enable app install on android 2026-05-02 19:06:39 +02:00
favicon-512.png feature: add manifest and icons to enable app install on android 2026-05-02 19:06:39 +02:00
favicon-512.svg feature: add manifest and icons to enable app install on android 2026-05-02 19:06:39 +02:00
favicon.ico
favicon.svg
i18n.js Merge pull request #2303 into stage-359 2026-05-15 14:55:15 +00:00
icons.js fix(composer): distinct voice-mode icon, descriptive labels, opt-in pref (#1488) 2026-05-02 22:16:23 +00:00
index.html feat: add workspace panel edge reopen toggle 2026-05-15 18:33:27 -07:00
login.js Fix login health probe credentials 2026-05-12 20:09:54 +08:00
manifest.json feat: add browser offline recovery and PWA cache hardening 2026-05-08 21:16:17 +00:00
messages.js stage-364: Opus-caught replay double-render fix + regression test 2026-05-16 03:28:07 +00:00
onboarding.js docs: clarify Anthropic auth choices in onboarding 2026-05-06 06:26:43 +00:00
panels.js feat: clarify profiles and workspaces 2026-05-16 02:58:33 +00:00
sessions.js Fix pending user row on active reattach 2026-05-16 10:34:55 +08:00
style.css feat: add workspace panel edge reopen toggle 2026-05-15 18:33:27 -07:00
sw.js feat: add browser offline recovery and PWA cache hardening 2026-05-08 21:16:17 +00:00
terminal.js fix: anchor active sessions per browser tab 2026-05-01 19:52:05 +08:00
ui.js Fix pending user row on active reattach 2026-05-16 10:34:55 +08:00
workspace.js fix: keep workspace open from preview breadcrumb 2026-05-07 06:25:17 +00:00