Skip to content

[codex] Consolidate WebUI frontend pnpm, Vite, and TypeScript assets - #5732

Merged
BenKurrek merged 15 commits into
mainfrom
codex/webui-frontend-prebuilt-vite
Jul 8, 2026
Merged

BenKurrek merged 15 commits into
mainfrom
codex/webui-frontend-prebuilt-vite

Conversation

@BenKurrek

@BenKurrek BenKurrek commented Jul 6, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Supersedes #5729, #5730, and #5731.

Verification

  • git diff --check
  • corepack pnpm test (77 files / 519 tests)
  • corepack pnpm typecheck

Note: local pnpm reports the expected engine warning because this machine has Node v24.17.0 while the frontend pins Node 22.x; the commands exit 0. Full PR CI, the standalone Playwright workflow, and the live canary are being rerun on this combined branch.

@ironloopai

ironloopai Bot commented Jul 6, 2026 •

Copy link
Copy Markdown
Contributor

⏳ IronLoop Review Status

Head: ce838ed3510f3b8bcfd0ecb8c778d35903816fa2
Result: No reviewer jobs are scheduled yet.
Next: Run @ironloopai review to start reviewers.
Updated: 2026-07-08T11:13:29.618Z

Current reviewers:

Reviewer State Verdict Findings Last update
none Queued N/A No reviewer jobs scheduled yet. N/A
Reviewer summaries
Reviewer Detail
none No reviewer jobs scheduled yet.
Recent activity
Time Reviewer State Detail
N/A N/A Waiting No progress events recorded yet.
Available commands
  • @ironloopai help
  • @ironloopai agents
  • @ironloopai review
  • @ironloopai review --agent <agent-id-or-alias>
  • @ironloopai status
Run metadata

Admission: webhook accepted the request and IronLoop persisted review state before this projection.

@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5732 July 6, 2026 20:39 Destroyed
@github-actions github-actions Bot added scope: ci CI/CD workflows scope: docs Documentation size: XL 500+ changed lines risk: medium Business logic, config, or moderate-risk modules contributor: experienced 6-19 merged PRs labels Jul 6, 2026
ironloopai[bot]
ironloopai Bot previously requested changes Jul 6, 2026

@ironloopai ironloopai 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.

❌ IronLoop Review: reviewer

Verdict: ❌ Changes requested
Findings: 1 blocking / 0 notes
Next: Fix the blocking findings, push the PR branch, then re-run this reviewer.
Head: e14304c9833b0496e2e654c16a5734e295c24d48

Run details

Status: Current
Needs human: no
Needs validation: no

**Inline candidates:** 1

Summary

The PR moves WebUI v2 embedding to require a prebuilt ignored Vite dist tree, but the production Reborn Docker build still runs Cargo with webui-v2-beta without generating that tree, so the Docker image build will fail.

Findings

1. ❌ [MEDIUM] Reborn Docker build no longer produces required WebUI dist assets

Location: crates/ironclaw_webui_v2/build.rs:80
With this change, any webui-v2-beta Cargo build now panics unless crates/ironclaw_webui_v2/frontend/dist/index.html, wallet-connect.html, and dist/wallet-connect.js already exist. Those files are ignored and not tracked, but Dockerfile.reborn still runs cargo chef cook and cargo build with --features webui-v2-beta,... without running pnpm install && pnpm build or copying a generated dist tree first. A clean docker build -f Dockerfile.reborn will therefore fail before producing the Reborn runtime image. Please wire the frontend build into the Docker build path, including the cargo-chef deps stage or otherwise avoid compiling this build script there without the generated assets.

Developer follow-up

After fixing this feedback:

  1. Push the fix to this PR branch.
  2. Re-run this reviewer with @ironloop review --agent reviewer if you only changed this reviewer's findings.
  3. Re-run all reviewers with @ironloop review when the fix may affect multiple areas.
  4. Use @ironloop status to check queued/running/completed/stale/stalled state while reviewers run.

Comment thread crates/ironclaw_webui_v2/build.rs
@coderabbitai

coderabbitai Bot commented Jul 6, 2026 •

Copy link
Copy Markdown

Review Change Stack

Important

Review skipped

Too many files!

This PR contains 379 files, which is 229 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 7b6bc990-987a-45f0-8b33-696430f85e95

📥 Commits

Reviewing files that changed from the base of the PR and between 5bfe94b and ce838ed.

⛔ Files ignored due to path filters (26)
  • crates/ironclaw_webui_v2/frontend/package-lock.json is excluded by !**/package-lock.json
  • crates/ironclaw_webui_v2/frontend/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • crates/ironclaw_webui_v2/frontend/public/assets/apple-touch-icon.png is excluded by !**/*.png
  • crates/ironclaw_webui_v2/frontend/public/assets/favicon-96x96.png is excluded by !**/*.png
  • crates/ironclaw_webui_v2/frontend/public/assets/favicon.ico is excluded by !**/*.ico
  • crates/ironclaw_webui_v2/frontend/public/assets/favicon.svg is excluded by !**/*.svg
  • crates/ironclaw_webui_v2/frontend/public/assets/logo.jpg is excluded by !**/*.jpg
  • crates/ironclaw_webui_v2/frontend/public/assets/web-app-manifest-192x192.png is excluded by !**/*.png
  • crates/ironclaw_webui_v2/frontend/public/assets/web-app-manifest-512x512.png is excluded by !**/*.png
  • crates/ironclaw_webui_v2/frontend/public/vendor/fonts/cY9AfjOCX1hbuyalUrK4397yjIJFJpc.woff2 is excluded by !**/*.woff2
  • crates/ironclaw_webui_v2/frontend/public/vendor/fonts/cY9AfjOCX1hbuyalUrK439DyjIJFJpeBZQ.woff2 is excluded by !**/*.woff2
  • crates/ironclaw_webui_v2/frontend/public/vendor/fonts/cY9AfjOCX1hbuyalUrK439HyjIJFJpeBZQ.woff2 is excluded by !**/*.woff2
  • crates/ironclaw_webui_v2/frontend/public/vendor/fonts/gyByhwUxId8gMEwRGFWNOITddY4.woff2 is excluded by !**/*.woff2
  • crates/ironclaw_webui_v2/frontend/public/vendor/fonts/gyByhwUxId8gMEwSGFWNOITddY4.woff2 is excluded by !**/*.woff2
  • crates/ironclaw_webui_v2/frontend/public/vendor/fonts/gyByhwUxId8gMEwTGFWNOITddY4.woff2 is excluded by !**/*.woff2
  • crates/ironclaw_webui_v2/frontend/public/vendor/fonts/gyByhwUxId8gMEwYGFWNOITddY4.woff2 is excluded by !**/*.woff2
  • crates/ironclaw_webui_v2/frontend/public/vendor/fonts/gyByhwUxId8gMEwcGFWNOITd.woff2 is excluded by !**/*.woff2
  • crates/ironclaw_webui_v2/frontend/public/vendor/fonts/or3nQ6H-1_WfwkMZI_qYFg08vz7MhEIVVeA.woff2 is excluded by !**/*.woff2
  • crates/ironclaw_webui_v2/frontend/public/vendor/fonts/or3nQ6H-1_WfwkMZI_qYFrMdmhHkjkotbA.woff2 is excluded by !**/*.woff2
  • crates/ironclaw_webui_v2/frontend/public/vendor/fonts/or3nQ6H-1_WfwkMZI_qYFrcdmhHkjko.woff2 is excluded by !**/*.woff2
  • crates/ironclaw_webui_v2/frontend/public/vendor/fonts/or3nQ6H-1_WfwkMZI_qYFrgdmhHkjkotbA.woff2 is excluded by !**/*.woff2
  • crates/ironclaw_webui_v2/frontend/public/vendor/fonts/or3nQ6H-1_WfwkMZI_qYFrkdmhHkjkotbA.woff2 is excluded by !**/*.woff2
  • crates/ironclaw_webui_v2/frontend/public/vendor/fonts/or3nQ6H-1_WfwkMZI_qYFrodmhHkjkotbA.woff2 is excluded by !**/*.woff2
  • crates/ironclaw_webui_v2/frontend/public/vendor/highlight.min.js is excluded by !**/*.min.js
  • crates/ironclaw_webui_v2/frontend/public/vendor/marked.umd.min.js is excluded by !**/*.min.js
  • crates/ironclaw_webui_v2/frontend/public/vendor/purify.min.js is excluded by !**/*.min.js
📒 Files selected for processing (379)
  • .dockerignore
  • .github/workflows/code_style.yml
  • .github/workflows/coverage.yml
  • .github/workflows/platform-and-compat.yml
  • .github/workflows/reborn-e2e.yml
  • .github/workflows/reborn-playwright.yml
  • .github/workflows/reborn-tests.yml
  • .github/workflows/regression-test-check.yml
  • Dockerfile.reborn
  • README.md
  • crates/ironclaw_reborn_cli/src/commands/webui_auth.rs
  • crates/ironclaw_reborn_cli/tests/smoke.rs
  • crates/ironclaw_reborn_composition/tests/trigger_poller_e2e.rs
  • crates/ironclaw_reborn_composition/tests/webui_v2_serve.rs
  • crates/ironclaw_reborn_webui_ingress/src/auth/mod.rs
  • crates/ironclaw_reborn_webui_ingress/src/auth/routes.rs
  • crates/ironclaw_reborn_webui_ingress/src/lib.rs
  • crates/ironclaw_reborn_webui_ingress/tests/empty_providers_mount.rs
  • crates/ironclaw_webui_v2/Cargo.toml
  • crates/ironclaw_webui_v2/build.rs
  • crates/ironclaw_webui_v2/frontend/README.md
  • crates/ironclaw_webui_v2/frontend/build.mjs
  • crates/ironclaw_webui_v2/frontend/build.sh
  • crates/ironclaw_webui_v2/frontend/index.html
  • crates/ironclaw_webui_v2/frontend/package.json
  • crates/ironclaw_webui_v2/frontend/pnpm-workspace.yaml
  • crates/ironclaw_webui_v2/frontend/public/assets/site.webmanifest
  • crates/ironclaw_webui_v2/frontend/public/vendor/fonts/fonts.css
  • crates/ironclaw_webui_v2/frontend/public/wallet-connect.html
  • crates/ironclaw_webui_v2/frontend/src/app/app.ts
  • crates/ironclaw_webui_v2/frontend/src/app/auth.ts
  • crates/ironclaw_webui_v2/frontend/src/app/routes.test.mts
  • crates/ironclaw_webui_v2/frontend/src/app/routes.ts
  • crates/ironclaw_webui_v2/frontend/src/components/channel-pairing-section.ts
  • crates/ironclaw_webui_v2/frontend/src/components/command-palette.ts
  • crates/ironclaw_webui_v2/frontend/src/components/notification-center.ts
  • crates/ironclaw_webui_v2/frontend/src/components/page-header.ts
  • crates/ironclaw_webui_v2/frontend/src/components/sidebar-footer.ts
  • crates/ironclaw_webui_v2/frontend/src/components/sidebar-nav.ts
  • crates/ironclaw_webui_v2/frontend/src/components/sidebar-threads.ts
  • crates/ironclaw_webui_v2/frontend/src/components/sidebar-trace-credits.ts
  • crates/ironclaw_webui_v2/frontend/src/components/sidebar.ts
  • crates/ironclaw_webui_v2/frontend/src/components/slack-channel-picker.test.mts
  • crates/ironclaw_webui_v2/frontend/src/components/slack-channel-picker.ts
  • crates/ironclaw_webui_v2/frontend/src/components/slack-pairing-section.test.mts
  • crates/ironclaw_webui_v2/frontend/src/components/slack-pairing-section.ts
  • crates/ironclaw_webui_v2/frontend/src/components/slack-setup-panel.test.mts
  • crates/ironclaw_webui_v2/frontend/src/components/slack-setup-panel.ts
  • crates/ironclaw_webui_v2/frontend/src/components/tee-shield.ts
  • crates/ironclaw_webui_v2/frontend/src/components/toast-viewport.ts
  • crates/ironclaw_webui_v2/frontend/src/design-system/badge.ts
  • crates/ironclaw_webui_v2/frontend/src/design-system/button.ts
  • crates/ironclaw_webui_v2/frontend/src/design-system/card.ts
  • crates/ironclaw_webui_v2/frontend/src/design-system/icons.ts
  • crates/ironclaw_webui_v2/frontend/src/design-system/input.ts
  • crates/ironclaw_webui_v2/frontend/src/design-system/modal.test.mts
  • crates/ironclaw_webui_v2/frontend/src/design-system/modal.ts
  • crates/ironclaw_webui_v2/frontend/src/design-system/primitives.ts
  • crates/ironclaw_webui_v2/frontend/src/design-system/theme.ts
  • crates/ironclaw_webui_v2/frontend/src/hooks/useGatewayStatus.ts
  • crates/ironclaw_webui_v2/frontend/src/hooks/useNotifications.test.mts
  • crates/ironclaw_webui_v2/frontend/src/hooks/useNotifications.ts
  • crates/ironclaw_webui_v2/frontend/src/hooks/useSidebar.test.mts
  • crates/ironclaw_webui_v2/frontend/src/hooks/useSidebar.ts
  • crates/ironclaw_webui_v2/frontend/src/hooks/useTeeAttestation.ts
  • crates/ironclaw_webui_v2/frontend/src/i18n/ar.ts
  • crates/ironclaw_webui_v2/frontend/src/i18n/de.ts
  • crates/ironclaw_webui_v2/frontend/src/i18n/en.ts
  • crates/ironclaw_webui_v2/frontend/src/i18n/es.ts
  • crates/ironclaw_webui_v2/frontend/src/i18n/fr.ts
  • crates/ironclaw_webui_v2/frontend/src/i18n/hi.ts
  • crates/ironclaw_webui_v2/frontend/src/i18n/ja.ts
  • crates/ironclaw_webui_v2/frontend/src/i18n/ko.ts
  • crates/ironclaw_webui_v2/frontend/src/i18n/pt-BR.ts
  • crates/ironclaw_webui_v2/frontend/src/i18n/uk.ts
  • crates/ironclaw_webui_v2/frontend/src/i18n/zh-CN.ts
  • crates/ironclaw_webui_v2/frontend/src/layout/gateway-layout.ts
  • crates/ironclaw_webui_v2/frontend/src/lib/api.test.mts
  • crates/ironclaw_webui_v2/frontend/src/lib/api.test.ts
  • crates/ironclaw_webui_v2/frontend/src/lib/api.ts
  • crates/ironclaw_webui_v2/frontend/src/lib/auth-scope.ts
  • crates/ironclaw_webui_v2/frontend/src/lib/channel-connect.ts
  • crates/ironclaw_webui_v2/frontend/src/lib/channel-connection-events.ts
  • crates/ironclaw_webui_v2/frontend/src/lib/download.ts
  • crates/ironclaw_webui_v2/frontend/src/lib/html.ts
  • crates/ironclaw_webui_v2/frontend/src/lib/i18n-format.ts
  • crates/ironclaw_webui_v2/frontend/src/lib/i18n.test.mts
  • crates/ironclaw_webui_v2/frontend/src/lib/i18n.ts
  • crates/ironclaw_webui_v2/frontend/src/lib/markdown.test.mts
  • crates/ironclaw_webui_v2/frontend/src/lib/markdown.ts
  • crates/ironclaw_webui_v2/frontend/src/lib/notifications.test.ts
  • crates/ironclaw_webui_v2/frontend/src/lib/notifications.ts
  • crates/ironclaw_webui_v2/frontend/src/lib/onboarding-gate.test.ts
  • crates/ironclaw_webui_v2/frontend/src/lib/onboarding-gate.ts
  • crates/ironclaw_webui_v2/frontend/src/lib/pin-store.test.ts
  • crates/ironclaw_webui_v2/frontend/src/lib/pin-store.ts
  • crates/ironclaw_webui_v2/frontend/src/lib/query-client.ts
  • crates/ironclaw_webui_v2/frontend/src/lib/sidebar-active-thread.test.mts
  • crates/ironclaw_webui_v2/frontend/src/lib/sidebar-active-thread.ts
  • crates/ironclaw_webui_v2/frontend/src/lib/sidebar-state.ts
  • crates/ironclaw_webui_v2/frontend/src/lib/slack-channels-api.test.mts
  • crates/ironclaw_webui_v2/frontend/src/lib/slack-channels-api.ts
  • crates/ironclaw_webui_v2/frontend/src/lib/slack-pairing-api.test.mts
  • crates/ironclaw_webui_v2/frontend/src/lib/slack-pairing-api.ts
  • crates/ironclaw_webui_v2/frontend/src/lib/slack-setup-api.test.mts
  • crates/ironclaw_webui_v2/frontend/src/lib/slack-setup-api.ts
  • crates/ironclaw_webui_v2/frontend/src/lib/thread-errors.test.mts
  • crates/ironclaw_webui_v2/frontend/src/lib/thread-errors.ts
  • crates/ironclaw_webui_v2/frontend/src/lib/thread-meta.ts
  • crates/ironclaw_webui_v2/frontend/src/lib/thread-state.ts
  • crates/ironclaw_webui_v2/frontend/src/lib/toast.ts
  • crates/ironclaw_webui_v2/frontend/src/main.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/admin/admin-page.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/admin/components/admin-tabs.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/admin/components/dashboard-tab.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/admin/components/usage-tab.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/admin/components/user-detail.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/admin/components/users-tab.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/admin/hooks/useAdminUsage.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/admin/hooks/useAdminUsers.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/admin/lib/admin-api.test.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/admin/lib/admin-api.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/admin/lib/admin-presenters.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/automations/automations-page.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/automations/components/automation-delivery-defaults-panel.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/automations/components/automation-detail-panel.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/automations/components/automation-recent-runs.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/automations/components/automation-recent-runs.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/automations/components/automations-empty-state.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/automations/components/automations-empty-state.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/automations/components/automations-list.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/automations/components/automations-summary-strip.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/automations/components/automations-summary-strip.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/automations/hooks/useAutomations.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/automations/hooks/useOutboundDeliveryDefaults.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/automations/lib/automations-presenters.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/automations/lib/automations-presenters.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/automations/lib/automations-refresh.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/automations/lib/automations-refresh.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/chat-page.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/chat.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/components/activity-run.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/components/activity-run.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/components/approval-card.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/components/approval-card.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/components/attachment-chip.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/components/attachment-preview.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/components/auth-gate-shell.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/components/auth-generic-card.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/components/auth-oauth-card.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/components/auth-token-card.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/components/chat-input.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/components/code-block.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/components/connection-status.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/components/connection-status.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/components/empty-state.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/components/keyboard-shortcuts.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/components/markdown-renderer.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/components/markdown-renderer.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/components/message-bubble.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/components/message-bubble.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/components/message-list.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/components/message-list.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/components/onboarding-pairing-card.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/components/onboarding-pairing-card.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/components/project-file-chips.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/components/recovery-notice.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/components/suggestion-chips.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/components/thread-sidebar.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/components/tool-activity.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/components/tool-activity.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/components/typing-indicator.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/hooks/useAttachmentConfig.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/hooks/useChat.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/hooks/useHistory.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/hooks/useSSE.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/hooks/useThreads.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/hooks/useThreads.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/activity-summary.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/activity-summary.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/approval-risk.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/approval-risk.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/attachment-sentinel.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/attachments.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/attachments.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/chat-input.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/chat.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/draft-store.test.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/draft-store.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/failureMessages.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/failureMessages.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/gates.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/gates.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/history-messages.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/history-messages.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/message-groups.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/message-groups.test.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/message-groups.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/pending-messages.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/pending-messages.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/project-file-paths.test.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/project-file-paths.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/runtime-context.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/thread-cache.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/thread-cache.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/tool-activity-state.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/tool-activity-state.test.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/tool-activity-state.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/useChat-send.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/useChatEvents.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/useChatEvents.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/chat/lib/useHistory.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/extensions/components/action-toast.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/extensions/components/channels-tab.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/extensions/components/channels-tab.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/extensions/components/configure-modal.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/extensions/components/configure-modal.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/extensions/components/extension-card.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/extensions/components/extension-card.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/extensions/components/extensions-tabs.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/extensions/components/mcp-tab.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/extensions/components/pairing-section.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/extensions/components/pairing-section.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/extensions/components/registry-tab.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/extensions/components/registry-tab.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/extensions/extensions-page.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/extensions/extensions-page.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/extensions/hooks/useExtensions-catalog.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/extensions/hooks/useExtensions-pairing.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/extensions/hooks/useExtensions.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/extensions/lib/extension-actions.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/extensions/lib/extension-actions.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/extensions/lib/extensions-api.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/extensions/lib/extensions-schema.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/extensions/lib/extensions-schema.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/extensions/lib/pairing-api.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/extensions/lib/pairing-api.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/extensions/lib/pairing-errors.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/extensions/lib/pairing-errors.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/jobs/components/job-activity-tab.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/jobs/components/job-detail-shell.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/jobs/components/job-files-tab.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/jobs/components/job-overview-tab.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/jobs/components/jobs-list.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/jobs/components/jobs-summary-strip.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/jobs/hooks/useJobDetail.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/jobs/hooks/useJobFiles.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/jobs/hooks/useJobs.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/jobs/jobs-page.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/jobs/lib/jobs-api.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/jobs/lib/jobs-presenters.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/login/components/oauth-provider-buttons.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/login/hooks/useOAuthProviders.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/login/login-page.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/logs/hooks/useLogs.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/logs/hooks/useLogs.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/logs/lib/logs-data.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/logs/lib/logs-data.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/logs/logs-page.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/logs/logs-page.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/missions/components/mission-detail-panel.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/missions/components/missions-list.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/missions/components/missions-summary-strip.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/missions/hooks/useMissionDetail.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/missions/hooks/useMissions.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/missions/lib/missions-api.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/missions/lib/missions-presenters.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/missions/missions-page.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/onboarding/onboarding-page.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/onboarding/provider-logos.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/projects/components/feedback-banner.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/projects/components/project-activity-column.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/projects/components/project-filesystem-panel.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/projects/components/project-inspector-rail.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/projects/components/project-mission-inspector.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/projects/components/project-missions-column.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/projects/components/project-thread-inspector.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/projects/components/project-widgets.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/projects/components/project-workspace-shell.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/projects/components/projects-attention-strip.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/projects/components/projects-grid.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/projects/components/projects-summary-strip.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/projects/hooks/useProjectInspector.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/projects/hooks/useProjectWorkspace.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/projects/hooks/useProjectsOverview.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/projects/lib/projects-api.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/projects/lib/projects-presenters.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/projects/projects-page.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/routines/components/routine-detail-panel.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/routines/components/routine-recent-runs.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/routines/components/routine-row.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/routines/components/routines-list.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/routines/components/routines-summary-strip.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/routines/hooks/useRoutineDetail.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/routines/hooks/useRoutineFilters.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/routines/hooks/useRoutines.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/routines/lib/routines-api.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/routines/lib/routines-presenters.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/routines/routines-page.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/components/agent-tab.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/components/channels-tab.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/components/inference-tab.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/components/inference-tab.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/components/language-tab.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/components/networking-tab.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/components/provider-card.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/components/provider-components.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/components/provider-dialog.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/components/provider-login-status.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/components/provider-management.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/components/restart-banner.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/components/settings-field.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/components/settings-search-empty.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/components/settings-tabs.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/components/settings-toolbar.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/components/skill-card.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/components/skill-install-panel.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/components/skill-install-panel.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/components/skills-tab.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/components/tools-tab.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/components/tools-tab.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/components/trace-commons-tab.test.mjs
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/components/trace-commons-tab.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/components/users-tab.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/hooks/useAccountTraces.js
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/hooks/useChannels.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/hooks/useGatewayRestart.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/hooks/useLlmProviders.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/hooks/useProviderDialogForm.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/hooks/useProviderLogin.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/hooks/useProviderManagementActions.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/hooks/useSettings.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/hooks/useSkills.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/hooks/useTools.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/hooks/useTools.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/hooks/useTraceCredits.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/hooks/useUsers.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/lib/api-result.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/lib/api-result.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/lib/llm-providers.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/lib/llm-providers.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/lib/settings-api.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/lib/settings-api.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/lib/settings-schema.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/lib/settings-schema.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/lib/settings-search.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/settings-page.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/settings/vm-module-harness.test.mts
  • crates/ironclaw_webui_v2/frontend/src/pages/workspace/components/workspace-breadcrumb.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/workspace/components/workspace-directory.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/workspace/components/workspace-sidebar.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/workspace/components/workspace-tree.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/workspace/components/workspace-viewer.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/workspace/hooks/useWorkspaceBrowser.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/workspace/lib/workspace-api.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/workspace/lib/workspace-presenters.ts
  • crates/ironclaw_webui_v2/frontend/src/pages/workspace/workspace-page.ts
  • crates/ironclaw_webui_v2/frontend/src/styles/app.css
  • crates/ironclaw_webui_v2/frontend/src/test-support/vm-module-harness.ts
  • crates/ironclaw_webui_v2/frontend/src/utils/cn.ts
  • crates/ironclaw_webui_v2/frontend/src/vite-env.d.ts
  • crates/ironclaw_webui_v2/frontend/src/wallet-connect.ts
  • crates/ironclaw_webui_v2/frontend/tsconfig.json
  • crates/ironclaw_webui_v2/frontend/vendor.sh
  • crates/ironclaw_webui_v2/frontend/vite.config.ts
  • crates/ironclaw_webui_v2/src/lib.rs
  • crates/ironclaw_webui_v2/src/static_assets/assets.rs
  • crates/ironclaw_webui_v2/src/static_assets/mod.rs
  • crates/ironclaw_webui_v2/src/static_assets/router.rs
  • crates/ironclaw_webui_v2/static/index.html
  • crates/ironclaw_webui_v2/static/js/pages/extensions/lib/pairing-api.test.mjs
  • crates/ironclaw_webui_v2/static/vendor/tailwindcss-browser.js
  • crates/ironclaw_webui_v2/tests/i18n_consistency.rs
  • scripts/ci/quality_gate_strict.sh
  • scripts/dev-setup.sh
  • scripts/reborn_qa_matrix/audit_surface_inventory.py
  • scripts/reborn_qa_matrix/test_audit_surface_inventory.py
  • scripts/run-reborn-webui.sh
  • tests/e2e/scenarios/test_reborn_webui_v2_legacy_tool_execution.py

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

WebUI v2 now builds with pnpm/Vite, Rust embeds the generated frontend dist tree, asset-path tests follow hashed outputs, the auth surface exposes /auth/providers without SSO providers, and Docker/CI/local scripts build the frontend before dependent Rust steps.

Changes

WebUI v2 build and auth wiring

Layer / File(s) Summary
Frontend build tooling
crates/ironclaw_webui_v2/frontend/vite.config.ts, crates/ironclaw_webui_v2/frontend/package.json, crates/ironclaw_webui_v2/frontend/build.mjs, crates/ironclaw_webui_v2/frontend/build.sh, crates/ironclaw_webui_v2/frontend/vendor.sh, crates/ironclaw_webui_v2/frontend/public/wallet-connect.html, .dockerignore, Dockerfile.reborn
Vite entry/output naming, package scripts, vendoring paths, build commands, wallet-connect script URLs, Docker ignore rules, and frontend build steps in the image are updated for the pnpm/Vite layout.
Frontend dist embedding
crates/ironclaw_webui_v2/build.rs, crates/ironclaw_webui_v2/Cargo.toml, crates/ironclaw_webui_v2/src/lib.rs, crates/ironclaw_webui_v2/src/static_assets/mod.rs
The WebUI crate build script now builds and validates frontend/dist, emits generated Rust assets from that tree, and crate comments reflect the new embedded frontend source layout.
Asset resolution tests
crates/ironclaw_webui_v2/src/static_assets/assets.rs, crates/ironclaw_webui_v2/src/static_assets/router.rs, crates/ironclaw_reborn_composition/tests/webui_v2_serve.rs
Asset tests and shell checks resolve hashed Vite asset paths from embedded tables or rendered HTML instead of fixed /v2/dist/* filenames.
Empty auth providers mount
crates/ironclaw_reborn_webui_ingress/src/auth/mod.rs, crates/ironclaw_reborn_webui_ingress/src/auth/routes.rs, crates/ironclaw_reborn_webui_ingress/src/lib.rs, crates/ironclaw_reborn_cli/src/commands/webui_auth.rs, crates/ironclaw_reborn_cli/tests/smoke.rs, crates/ironclaw_reborn_webui_ingress/tests/empty_providers_mount.rs
The auth surface now mounts /auth/providers with an empty provider list when no SSO providers exist, and the CLI and tests assert the new route behavior.
Build environments and CI
.github/workflows/code_style.yml, .github/workflows/coverage.yml, .github/workflows/platform-and-compat.yml, .github/workflows/reborn-e2e.yml, .github/workflows/reborn-playwright.yml, .github/workflows/reborn-tests.yml, scripts/ci/quality_gate_strict.sh, scripts/dev-setup.sh, scripts/run-reborn-webui.sh
Docker, CI workflows, and local setup scripts add pnpm frontend build steps and pnpm availability checks before Rust lint, test, coverage, and image-build jobs.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related PRs

  • nearai/ironclaw#5113: Touches the same platform-and-compat.yml jobs that now run the frontend build.
  • nearai/ironclaw#5244: Modifies the same WebUI-related CI workflows that this PR updates for frontend build availability.
  • nearai/ironclaw#5635: Modifies the same reborn-tests.yml crate-tests flow around WebUI build detection.

Suggested reviewers: italic-jinxin, ilblackdragon

🚥 Pre-merge checks | ✅ 3 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning It includes summary and verification, but omits most required template sections like Change Type, Linked Issue, Security Impact, and Rollback Plan. Add the missing template sections, especially Change Type, Linked Issue, Security/Blast Radius, Rollback Plan, Trust-Boundary checklist, and Review Follow-Through.
✅ Passed checks (3 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly matches the WebUI frontend consolidation and summarizes the main change.

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.

@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 refactors the WebUI v2 build pipeline by decoupling the frontend build from Cargo. Instead of running an esbuild bundler during the Rust build process, the frontend is now prebuilt using Vite into frontend/dist/, and the Rust build script simply embeds these prebuilt assets. The CI configurations, setup scripts, and documentation have been updated to require running pnpm build beforehand. Additionally, integration tests were updated to dynamically resolve hashed Vite asset paths. Feedback on these changes includes a recommendation to make the test asset path helper more robust by splitting on both single and double quotes, and an improvement to the build script to propagate directory-reading errors instead of using .expect().

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.

Comment thread crates/ironclaw_reborn_composition/tests/webui_v2_serve.rs
Comment thread crates/ironclaw_webui_v2/build.rs Outdated
@BenKurrek
BenKurrek force-pushed the codex/webui-frontend-prebuilt-vite branch from e14304c to d6169cd Compare July 6, 2026 20:50
@BenKurrek
BenKurrek force-pushed the codex/webui-frontend-typescript-source branch from c8dcb05 to cbe4797 Compare July 6, 2026 20:50
@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5732 July 6, 2026 20:50 Destroyed
@BenKurrek
BenKurrek marked this pull request as ready for review July 6, 2026 20:50
@ironloopai

ironloopai Bot commented Jul 6, 2026 •

Copy link
Copy Markdown
Contributor

🗂️ Archived IronLoop Review: reviewer

This result is from an older PR head and is no longer the active review.

Field Value
Status Superseded
Verdict ✅ Approved
Findings 0 blocking / 1 notes
Reviewed head 131cce2ed4da
Archived summary

No blocking correctness or security issues found in the changed WebUI build/auth/static-asset wiring. I found one nonblocking documentation mismatch left behind by the Vite/static asset migration.

Archived findings
  1. 💬 [NOTE] Frontend build README still documents the removed esbuild/static dist flow - crates/ironclaw_webui_v2/frontend/README.md:4-51

@BenKurrek

Copy link
Copy Markdown
Collaborator Author

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Jul 6, 2026 •

Copy link
Copy Markdown
✅ Action performed

Full review finished.

ironloopai[bot]
ironloopai Bot previously requested changes Jul 6, 2026

@ironloopai ironloopai 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.

❌ IronLoop Review: reviewer

Verdict: ❌ Changes requested
Findings: 1 blocking / 0 notes
Next: Fix the blocking findings, push the PR branch, then re-run this reviewer.
Head: d6169cddbfcfac7bf860a9c0dfc656a48e22d3c2

Run details

Status: Current
Needs human: no
Needs validation: no

**Inline candidates:** 1

Summary

Found one blocking build regression: WebUI-enabled builds now require a prebuilt ignored frontend/dist tree, but the Reborn Docker build path still compiles with webui-v2-beta without creating that tree.

Findings

1. ❌ [HIGH] Reborn Docker image no longer builds without prebuilt frontend/dist

Location: crates/ironclaw_webui_v2/build.rs:26
This change makes webui-v2-beta builds validate and embed crates/ironclaw_webui_v2/frontend/dist, but that directory is ignored and not tracked (git ls-files .../frontend/dist returns 0). The Reborn Dockerfile still runs cargo chef cook / cargo build with --features webui-v2-beta,... without running pnpm install && pnpm build, and the CI docker-build job simply invokes docker build -f Dockerfile.reborn .... A clean Docker build therefore reaches this validation with no frontend/dist/index.html or dist/wallet-connect.js and fails. Please either build the frontend inside Docker before the cargo steps that enable webui-v2-beta, or keep Cargo/build.rs responsible for generating the bundle for clean build contexts.

Developer follow-up

After fixing this feedback:

  1. Push the fix to this PR branch.
  2. Re-run this reviewer with @ironloop review --agent reviewer if you only changed this reviewer's findings.
  3. Re-run all reviewers with @ironloop review when the fix may affect multiple areas.
  4. Use @ironloop status to check queued/running/completed/stale/stalled state while reviewers run.

Comment thread crates/ironclaw_webui_v2/build.rs Outdated
@BenKurrek
BenKurrek force-pushed the codex/webui-frontend-typescript-source branch from cbe4797 to d559d3d Compare July 6, 2026 20:57
@BenKurrek
BenKurrek force-pushed the codex/webui-frontend-prebuilt-vite branch from d6169cd to 71c9a12 Compare July 6, 2026 20:57
@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5732 July 6, 2026 20:57 Destroyed
@BenKurrek

Copy link
Copy Markdown
Collaborator Author

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Jul 6, 2026 •

Copy link
Copy Markdown
✅ Action performed

Full review finished.

@github-actions github-actions Bot added the scope: sandbox Docker sandbox label Jul 6, 2026
@BenKurrek

Copy link
Copy Markdown
Collaborator Author

@IronLoop review

ironloopai[bot]
ironloopai Bot previously requested changes Jul 6, 2026

@ironloopai ironloopai 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.

❌ IronLoop Review: reviewer

Verdict: ❌ Changes requested
Findings: 1 blocking / 0 notes
Next: Fix the blocking findings, push the PR branch, then re-run this reviewer.
Head: 71c9a12860b102a347e9a2a8b14fd5791d1dcbd0

Run details

Status: Current
Needs human: no
Needs validation: no

**Inline candidates:** 1

Summary

Found one blocking CI regression: the coverage all-features job now builds a crate that requires prebuilt WebUI assets, but that job never runs the frontend build step.

Findings

1. ❌ [MEDIUM] Coverage all-features job no longer prepares WebUI dist assets

Location: .github/workflows/coverage.yml:130-131
cargo llvm-cov --all-features --workspace enables ironclaw_webui_v2/webui-v2-beta, and the new build script now fails unless crates/ironclaw_webui_v2/frontend/dist already contains index.html and dist/wallet-connect.js. This coverage job still goes straight from migrations to cargo llvm-cov without the new pnpm install && pnpm build step added to the other WebUI-enabled jobs, so the all-features matrix leg will fail from a clean checkout. Add the same frontend build setup before this step, gated to the all-features leg.

Developer follow-up

After fixing this feedback:

  1. Push the fix to this PR branch.
  2. Re-run this reviewer with @ironloop review --agent reviewer if you only changed this reviewer's findings.
  3. Re-run all reviewers with @ironloop review when the fix may affect multiple areas.
  4. Use @ironloop status to check queued/running/completed/stale/stalled state while reviewers run.
Inline review fallback

Inline comment projection fell back to a body-only PR Review because GitHub rejected the inline payload.
Reason: Unprocessable Entity: "Line could not be resolved" - https://docs.github.com/rest/pulls/reviews#create-a-review-for-a-pull-request

IronLoop preserved the inline review comment payloads below instead of dropping them.

Inline fallback 1: .github/workflows/coverage.yml:130

This job also needs to build crates/ironclaw_webui_v2/frontend/dist before running the all-features coverage leg. The new build.rs validates frontend/dist whenever webui-v2-beta is enabled, and cargo llvm-cov --all-features --workspace enables that feature from a clean checkout where dist/ is ignored. Without a pnpm install --frozen-lockfile && pnpm build step here, the all-features coverage matrix will fail before tests run.

@BenKurrek
BenKurrek force-pushed the codex/webui-frontend-prebuilt-vite branch from 71c9a12 to c397204 Compare July 6, 2026 21:01
@BenKurrek
BenKurrek force-pushed the codex/webui-frontend-typescript-source branch from d559d3d to 4145964 Compare July 6, 2026 21:01
@railway-app
railway-app Bot temporarily deployed to ironclaw-ci-preview / ironclaw-pr-5732 July 6, 2026 21:01 Destroyed
@BenKurrek

Copy link
Copy Markdown
Collaborator Author

@IronLoop review

@BenKurrek

Copy link
Copy Markdown
Collaborator Author

/canary

@github-actions

github-actions Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Started Reborn WebUI v2 live canary for codex/webui-frontend-prebuilt-vite at b5df0c230d with cases all: https://github.com/nearai/ironclaw/actions/runs/28901619415

@BenKurrek

Copy link
Copy Markdown
Collaborator Author

/canary

@github-actions

github-actions Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Started Reborn WebUI v2 live canary for codex/webui-frontend-prebuilt-vite at 2777b804e3 with cases all: https://github.com/nearai/ironclaw/actions/runs/28902670129

@github-actions

github-actions Bot commented Jul 7, 2026 •

Copy link
Copy Markdown
Contributor

Coverage ratchet

Ratchet mode: ENFORCING

RATCHET PASS: global
  observed: 85.32% (283687 / 332500 lines)
  floor:    85.3% (tolerance 0.5pp -> effective floor 84.8%)
  denominator: 332500 lines now vs 320188 at floor capture (+12312 lines, +3.85%) — not a material change

⚠️ 3 Reborn crate(s) have 0 int-tier coverage (target: 0) — ironclaw_prompt_envelope, ironclaw_scripts, ironclaw_skill_learning

Reborn integration-tier coverage

Line coverage (Reborn crates): 85.32% — 283687 / 332500 lines

Per-crate breakdown (65 crates, lowest-covered first)
Crate Line % Covered / Total
ironclaw_prompt_envelope 0% 0 / 88
ironclaw_scripts 0% 0 / 347
ironclaw_skill_learning 0% 0 / 61
ironclaw_wasm_sandbox_core 7.37% 7 / 95
ironclaw_runtime_policy 33.2% 80 / 241
ironclaw_event_projections 43.34% 673 / 1553
ironclaw_run_state 52.36% 222 / 424
ironclaw_authorization 53.54% 461 / 861
ironclaw_triggers 60.32% 1736 / 2878
ironclaw_observability 61.54% 16 / 26
ironclaw_webui_v2 62.98% 2528 / 4014
ironclaw_mcp 63.15% 581 / 920
ironclaw_reborn_cli 64.5% 3999 / 6200
ironclaw_reborn_migration 67.01% 1172 / 1749
ironclaw_memory 67.12% 747 / 1113
ironclaw_dispatcher 67.15% 92 / 137
ironclaw_filesystem 67.44% 3815 / 5657
ironclaw_trust 72.88% 661 / 907
ironclaw_capabilities 74.08% 1658 / 2238
ironclaw_wasm_limiter 74.6% 47 / 63
ironclaw_reborn_event_store 74.61% 958 / 1284
ironclaw_extractors 74.72% 538 / 720
ironclaw_first_party_extensions 77.62% 5410 / 6970
ironclaw_llm 77.88% 19480 / 25013
ironclaw_product_context 78.57% 11 / 14
ironclaw_wasm_product_adapters 80.58% 1510 / 1874
ironclaw_process_sandbox 80.65% 671 / 832
ironclaw_reborn_openai_compat 80.95% 956 / 1181
ironclaw_memory_native 81.86% 3226 / 3941
ironclaw_wasm 82.54% 950 / 1151
ironclaw_secrets 82.7% 2791 / 3375
ironclaw_events 83.47% 1762 / 2111
ironclaw_processes 84.06% 965 / 1148
ironclaw_turns 84.28% 13083 / 15523
ironclaw_host_api 84.8% 3131 / 3692
ironclaw_product_workflow 85.88% 10818 / 12597
ironclaw_projects 85.92% 659 / 767
ironclaw_network 86.12% 670 / 778
ironclaw_auth 86.32% 2727 / 3159
ironclaw_threads 86.33% 4015 / 4651
ironclaw_common 86.59% 1472 / 1700
ironclaw_slack_v2_adapter 86.79% 1806 / 2081
ironclaw_reborn_config 86.98% 1730 / 1989
ironclaw_reborn_identity 87.03% 557 / 640
ironclaw_product_adapters 87.29% 3207 / 3674
ironclaw_skills 87.35% 4336 / 4964
ironclaw_hooks 87.84% 9916 / 11289
ironclaw_product_adapter_registry 87.96% 526 / 598
ironclaw_reborn_traces 88.23% 11707 / 13268
ironclaw_extensions 88.26% 2631 / 2981
ironclaw_host_runtime 88.92% 17478 / 19655
ironclaw_reborn_composition 88.96% 69289 / 77892
ironclaw_conversations 90% 2924 / 3249
ironclaw_approvals 90.51% 1507 / 1665
ironclaw_reborn 91.23% 17562 / 19251
ironclaw_event_streams 91.48% 1009 / 1103
ironclaw_loop_support 92.22% 14231 / 15432
ironclaw_resources 93.05% 4607 / 4951
ironclaw_attachments 93.06% 630 / 677
ironclaw_reborn_webui_ingress 93.19% 2217 / 2379
ironclaw_telegram_v2_adapter 94.01% 2447 / 2603
ironclaw_agent_loop 94.54% 8753 / 9259
ironclaw_safety 94.81% 3669 / 3870
ironclaw_first_party_extension_ports 95% 3094 / 3257
ironclaw_outbound 95.59% 3556 / 3720

This table itself is informational and never gates the PR on its own — not the percentage, not the per-crate holes, not the 0-coverage callout. A separate coverage ratchet (dry-run until enforce=true; see tests/integration/coverage-floor.toml) can fail the build on specific configured floors.

Exemptions (4 entry/entries excluded from the accounting above)
Module / Crate Reason Issue
crate: ironclaw_embeddings v1-only: consumed only by root ironclaw (src/app.rs, src/tools/builtin/memory.rs, src/workspace/mod.rs, src/config/{mod,embeddings}.rs); no crates/* dependents. Covered by "Tests (Legacy)". #5657
crate: ironclaw_gateway v1-only: consumed only by root ironclaw (src/channels/web/platform/static_files.rs, src/channels/web/handlers/frontend.rs); no crates/* dependents. Covered by "Tests (Legacy)". #5657
crate: ironclaw_oauth v1-only: consumed only by root ironclaw (src/auth/oauth.rs); no crates/* dependents. Crate's own doc comment confirms v1-only. Covered by "Tests (Legacy)". #5657
crate: ironclaw_tui v1-only: consumed only by root ironclaw (src/main.rs, src/channels/tui.rs); no crates/* dependents. Crate's own doc comment confirms it bridges INTO v1, not Reborn. Covered by "Tests (Legacy)". #5657

@BenKurrek

Copy link
Copy Markdown
Collaborator Author

/canary

@github-actions

github-actions Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Started Reborn WebUI v2 live canary for codex/webui-frontend-prebuilt-vite at 2777b804e3 with cases all: https://github.com/nearai/ironclaw/actions/runs/28903236774

@BenKurrek

Copy link
Copy Markdown
Collaborator Author

/canary cases=qa_7c_slack_bug_logger_routine

@github-actions

github-actions Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Started Reborn WebUI v2 live canary for codex/webui-frontend-prebuilt-vite at 2777b804e3 with cases qa_7c_slack_bug_logger_routine: https://github.com/nearai/ironclaw/actions/runs/28903707314

…prebuilt-vite

# Conflicts:
#	crates/ironclaw_webui_v2/frontend/src/pages/settings/components/trace-commons-tab.test.mjs
#	crates/ironclaw_webui_v2/frontend/src/pages/settings/hooks/useAccountTraces.js
#	tests/integration/slack_pairing_redeem.rs
…prebuilt-vite

# Conflicts:
#	crates/ironclaw_webui_v2/src/static_assets/router.rs
…prebuilt-vite

# Conflicts:
#	crates/ironclaw_reborn_cli/src/commands/webui_auth.rs
#	crates/ironclaw_webui_v2/frontend/src/pages/admin/lib/admin-api.test.js

This branch was successfully deployed

No deployments
ironclaw-ci-preview / pr-8516f2-5732 — ce838ed3 Deployed Jul 8, 2026 by railway-app[bot]
ironclaw-ci-preview / ironclaw-pr-5732 — b5df0c23 Deployed Jul 7, 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 risk: medium Business logic, config, or moderate-risk modules scope: ci CI/CD workflows scope: dependencies Dependency updates scope: docs Documentation scope: sandbox Docker sandbox size: XL 500+ changed lines

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants