Skip to content

fix(webui-v2): remove duplicate chat logs header - #5491

Merged
think-in-universe merged 18 commits into
mainfrom
fix-chat-duplicate-logs-header
Jul 1, 2026
Merged

think-in-universe merged 18 commits into
mainfrom
fix-chat-duplicate-logs-header

Conversation

@italic-jinxin

@italic-jinxin italic-jinxin commented Jul 1, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Removes the active-run Logs bar that appeared at the top of Chat while the assistant was generating.
  • Adds a subtle floating thread-scoped Logs shortcut in the bottom-right of the message list.
  • Uses React Router navigation to open /v2/logs?thread_id=<threadId>.
  • Adds a dedicated logs/terminal icon and reserves bottom space with an end-of-content spacer so messages are not pushed into padding.
image

Linked Issue

Closes #5458

Validation

  • node --test crates/ironclaw_webui_v2_static/static/js/pages/chat/lib/chat.test.mjs
  • node --test crates/ironclaw_webui_v2_static/static/js/pages/chat/components/message-list.test.mjs
  • node --test crates/ironclaw_webui_v2_static/static/js/pages/chat/components/message-bubble.test.mjs
  • git diff --check

Security Impact

No. UI-only change; no changes to log APIs, auth, permissions, or data returned.

Database Impact

No schema or migration changes.

Blast Radius

Limited to WebUI v2 Chat message-list presentation and focused tests.

Rollback Plan

Revert this PR to restore the previous active-run Logs shortcut behavior.

@italic-jinxin italic-jinxin added size: M 50-199 changed lines risk: low Changes to docs, tests, or low-risk modules contributor: core 20+ merged PRs labels Jul 1, 2026
@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5491 July 1, 2026 10:21 Destroyed
@coderabbitai

coderabbitai Bot commented Jul 1, 2026 •

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 33902d54-a248-40fa-b595-0c72e2c360fa

📥 Commits

Reviewing files that changed from the base of the PR and between e2c65b6 and ddb407f.

📒 Files selected for processing (1)
  • tests/e2e/reborn_webui_harness.py

📝 Walkthrough

Summary by CodeRabbit

  • New Features

    • Added a floating Logs shortcut in chat that opens thread-scoped logs when available.
    • Chat now uses a dedicated thread-scoped logsPath to drive the logs shortcut behavior.
  • Bug Fixes

    • Removed the duplicated active-run logs link from the chat header so logs access isn’t repeated.
  • Tests / Chores

    • Updated chat and message list tests to reflect the new logs shortcut flow.
    • Improved end-to-end message submission handling with clearer acceptance/retry logic and better failure details.

Walkthrough

Chat moves logs navigation into MessageList with a thread-scoped path, updates the chat tests for the new render path, and changes the e2e harness to retry message submission on busy outcomes.

Changes

Chat logs navigation update

Layer / File(s) Summary
Remove active-run logs link
crates/ironclaw_webui_v2_static/static/js/pages/chat/chat.js
Removes the scoped logs link render, computes a thread-scoped logsPath, and keeps cancel gating tied to the active thread/run state.
Add thread logs shortcut
crates/ironclaw_webui_v2_static/static/js/design-system/icons.js, crates/ironclaw_webui_v2_static/static/js/pages/chat/components/message-list.js
Adds the logs icon and renders a floating Link button plus spacer when logsPath is present.
Update chat tests
crates/ironclaw_webui_v2_static/static/js/pages/chat/lib/chat.test.mjs, crates/ironclaw_webui_v2_static/static/js/pages/chat/components/message-list.test.mjs
Adjusts the chat harness and assertions for thread-scoped logs paths, no top-level scoped logs link, and the new floating shortcut.

Message submit retry handling

Layer / File(s) Summary
Retry accepted sends
tests/e2e/reborn_webui_harness.py
Adds accepted outcome validation, a shared submit helper, busy-response retries, and richer timeout context.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related PRs

  • nearai/ironclaw#4924: Removes the same scoped active-run logs navigation from chat.js and updates matching chat behavior.
  • nearai/ironclaw#5284: Touches the same active-run Logs link flow and the corresponding chat tests.
  • nearai/ironclaw#5324: Overlaps on removal of the active-run scoped Logs link and related test updates.

Suggested reviewers: think-in-universe

🚥 Pre-merge checks | ✅ 2 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Linked Issues check ⚠️ Warning The linked issue is a duplicate Logs header on the Logs page, but this PR mainly moves a chat logs shortcut and does not fix that page header. Update the implementation to remove the duplicate Logs page header, or relink the issue if the intended fix is the chat logs shortcut.
Out of Scope Changes check ⚠️ Warning The e2e harness submit/retry refactor is unrelated to the Logs header fix and appears outside the UI-only objective. Split the harness refactor into a separate PR, or justify it as required for this change.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The Conventional Commits-style title clearly matches the PR’s main UI fix.
Description check ✅ Passed The description covers summary, linked issue, validation, impact, and rollback, with only optional template sections omitted.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@italic-jinxin italic-jinxin added the skip-regression-check Bypass regression test CI gate (tests exist but not in tests/ dir) label Jul 1, 2026

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request removes the scoped logs link header bar from the active chat thread view, along with its associated imports, mock functions, and helper logic. The corresponding test suite has been updated to assert that this link and its header container are no longer rendered. There are no review comments, so I have no feedback to provide.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@crates/ironclaw_webui_v2_static/static/js/pages/chat/lib/chat.test.mjs`:
- Around line 383-393: The chat test contains a redundant assertion because
findComponent(tree, components.Link) already searches the full tree recursively,
so the additional check against messageList in the same test does not add
independent coverage. Update the test around the MessageList and Link assertions
by removing the duplicate subtree assertion, keeping only the broader check that
verifies the active chat does not render the scoped logs link.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: fd1fbc4a-0b9e-4181-b847-51d2c740021e

📥 Commits

Reviewing files that changed from the base of the PR and between faa85d4 and 34d247c.

📒 Files selected for processing (2)
  • crates/ironclaw_webui_v2_static/static/js/pages/chat/chat.js
  • crates/ironclaw_webui_v2_static/static/js/pages/chat/lib/chat.test.mjs
💤 Files with no reviewable changes (1)
  • crates/ironclaw_webui_v2_static/static/js/pages/chat/chat.js

Comment thread crates/ironclaw_webui_v2_static/static/js/pages/chat/lib/chat.test.mjs Outdated
@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5491 July 1, 2026 10:25 Destroyed
@italic-jinxin
italic-jinxin force-pushed the fix-chat-duplicate-logs-header branch from 512c85c to adf256e Compare July 1, 2026 10:28
@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5491 July 1, 2026 10:28 Destroyed
@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5491 July 1, 2026 10:28 Destroyed
@railway-app

railway-app Bot commented Jul 1, 2026 •

Copy link
Copy Markdown

🚅 Deployed to the ironclaw-pr-5491 environment in ironclaw-ci-preview

Service Status Web Updated (UTC)
ironclaw ✅ Success (View Logs) Web Jul 1, 2026 at 11:50 am

@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5491 July 1, 2026 10:51 Destroyed
@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5491 July 1, 2026 10:51 Destroyed

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@crates/ironclaw_webui_v2_static/static/js/pages/chat/components/message-list.js`:
- Line 212: Duplicate URL construction is implemented inline in message-list.js
instead of reusing the shared buildScopedLogsPath helper. Update the
message-list component to call buildScopedLogsPath from logs-data.js for the
logsPath value, passing the current threadId in the same scope shape and
preserving the existing relative/absolute behavior so the path logic stays
centralized and consistent.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 691f921e-20f4-4b0f-a2d9-c2b1da3dc37a

📥 Commits

Reviewing files that changed from the base of the PR and between c0ba4ab and 0951ada.

📒 Files selected for processing (4)
  • crates/ironclaw_webui_v2_static/static/js/design-system/icons.js
  • crates/ironclaw_webui_v2_static/static/js/pages/chat/components/message-list.js
  • crates/ironclaw_webui_v2_static/static/js/pages/chat/components/message-list.test.mjs
  • crates/ironclaw_webui_v2_static/static/js/pages/chat/lib/chat.test.mjs

Comment thread crates/ironclaw_webui_v2_static/static/js/pages/chat/components/message-list.js Outdated
@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5491 July 1, 2026 11:11 Destroyed
@italic-jinxin

Copy link
Copy Markdown
Contributor Author

@claude review

@claude

This comment was marked as resolved.

@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5491 July 1, 2026 11:24 Destroyed
@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5491 July 1, 2026 11:24 Destroyed

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@tests/e2e/reborn_webui_harness.py`:
- Around line 469-486: The retry loop in the message submission flow currently
only retries on the "rejected_busy" outcome, so transient httpx.HTTPError
failures from _submit_message will abort the whole attempt budget. Update the
retry logic in the submit-message loop to catch and retry httpx.HTTPError
similarly to the fetch_timeline poll loop, preserving the existing
ACCEPTED_SEND_OUTCOMES and "rejected_busy" handling while allowing brief network
hiccups to continue through the remaining retries.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: b17ffc7e-9057-4dba-8484-7e709ceb82ed

📥 Commits

Reviewing files that changed from the base of the PR and between 0951ada and e2c65b6.

📒 Files selected for processing (5)
  • crates/ironclaw_webui_v2_static/static/js/pages/chat/chat.js
  • crates/ironclaw_webui_v2_static/static/js/pages/chat/components/message-list.js
  • crates/ironclaw_webui_v2_static/static/js/pages/chat/components/message-list.test.mjs
  • crates/ironclaw_webui_v2_static/static/js/pages/chat/lib/chat.test.mjs
  • tests/e2e/reborn_webui_harness.py

Comment thread tests/e2e/reborn_webui_harness.py
@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5491 July 1, 2026 11:42 Destroyed
@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5491 July 1, 2026 11:44 Destroyed
@italic-jinxin italic-jinxin self-assigned this Jul 1, 2026
@italic-jinxin italic-jinxin added the human-verified Manually tested and verified label Jul 1, 2026
@italic-jinxin
italic-jinxin requested a review from serrrfirat July 1, 2026 14:27

export const BOTTOM_FOLLOW_THRESHOLD_PX = 100;
const TOP_LOAD_THRESHOLD_PX = 100;
const FLOATING_LOGS_BUTTON_CLASS =

@think-in-universe think-in-universe Jul 1, 2026 •

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Why do we need this floating logs button at right bottom corner?

image

@italic-jinxin italic-jinxin Jul 1, 2026 •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

there were duplicate logs at the top before. That was because the Logs button that only appears during chat was linking to the thread log. Moved it to the bottom and changed it into a floating button.

Another option is to show the Log button under each message, together with the Copy button.

) -> None:
"""Send a text turn and wait until ``expected`` assistant replies finalize."""
await send_message(client, base_url, thread_id, content)
submit_body: dict = {}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Why do we need to change this function?

@italic-jinxin italic-jinxin Jul 1, 2026 •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

That was changed because the E2E tests were failing.

now wrapped with try catch block,

code block

@think-in-universe
think-in-universe added this pull request to the merge queue Jul 1, 2026
Merged via the queue into main with commit ad61150 Jul 1, 2026
109 checks passed
@think-in-universe
think-in-universe deleted the fix-chat-duplicate-logs-header branch July 1, 2026 15:36

This branch was successfully deployed

No deployments
ironclaw-ci-preview / ironclaw-pr-5491 — ddb407f5 Deployed Jul 1, 2026 by railway-app[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

contributor: core 20+ merged PRs human-verified Manually tested and verified risk: low Changes to docs, tests, or low-risk modules size: M 50-199 changed lines skip-regression-check Bypass regression test CI gate (tests exist but not in tests/ dir)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[QA] Double header displayed on Logs page

2 participants