Uh oh!
There was an error while loading. Please reload this page.
fix(resume): fix click-blocking footer overlay + hardening on HITL resume page - #5381
Conversation
The latest updates on your projects. Learn more about Vercel for GitHub. |
PR SummaryLow Risk Overview On the HITL resume page, display data previews are capped at 5,000 characters with a truncation notice; Reviewed by Cursor Bugbot for commit a672b26. Configure here. |
Greptile SummaryThis PR fixes a click-blocking overlay bug on the HITL resume page where
Confidence Score: 5/5Safe to merge — all changes are targeted bug fixes with no regressions introduced to existing flows. All three code paths touched (footer positioning, resume validation, payload de-dup) are mechanically straightforward and well-tested. The position:'static' change is additive and doesn't affect existing fixed/absolute callers. The data: undefined stripping is a standard JSON-serialization idiom. The handleResume refactor preserves all prior early-return semantics and adds proper error surfacing. Unit tests for the new de-dup behavior assert the right invariants. No files require special attention. Important Files Changed
Sequence Diagram%%{init: {'theme': 'neutral'}}%%
sequenceDiagram
participant Browser
participant ResumePageClient
participant API as Resume API Route
participant Manager as PauseResumeManager
Browser->>ResumePageClient: Click "Resume Execution"
Note over Browser,ResumePageClient: Footer no longer overlaps button (position:static fix)
ResumePageClient->>ResumePageClient: handleResume() — validate form fields
alt Validation error
ResumePageClient-->>Browser: setError() — visible error message
else Valid payload
ResumePageClient->>API: "POST /resume {contextId, input}"
API->>Manager: getPauseContextDetail()
Manager->>Manager: Strip response.data from execution.pausePoints
Manager-->>API: "{execution (data stripped), pausePoint (full data)}"
API-->>ResumePageClient: "{ok, payload}"
ResumePageClient-->>Browser: Update UI (status, queue position)
end
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
sequenceDiagram
participant Browser
participant ResumePageClient
participant API as Resume API Route
participant Manager as PauseResumeManager
Browser->>ResumePageClient: Click "Resume Execution"
Note over Browser,ResumePageClient: Footer no longer overlaps button (position:static fix)
ResumePageClient->>ResumePageClient: handleResume() — validate form fields
alt Validation error
ResumePageClient-->>Browser: setError() — visible error message
else Valid payload
ResumePageClient->>API: "POST /resume {contextId, input}"
API->>Manager: getPauseContextDetail()
Manager->>Manager: Strip response.data from execution.pausePoints
Manager-->>API: "{execution (data stripped), pausePoint (full data)}"
API-->>ResumePageClient: "{ok, payload}"
ResumePageClient-->>Browser: Update UI (status, queue position)
end
Reviews (3): Last reviewed commit: "fix(resume): show em dash for empty-stri..." | Re-trigger Greptile |
Uh oh!
There was an error while loading. Please reload this page.
…sume page - SupportFooter rendered position:absolute with no space reserved for it in InterfacesShell/AuthShell/file-share auth gate, silently overlapping and eating clicks on whatever content ended up in its ~50px footprint (on the resume page, the Resume Execution button itself) - Applied the same fix to /invite and /f/[token], which shared the identical absolute-positioning pattern - handleResume no longer fails silently on validation errors or unexpected exceptions - getPauseContextDetail no longer duplicates a pause point's full response payload in the same API response - Oversized HITL display-data values are now truncated in the resume page preview instead of rendering unbounded
45ed6ec to
66c7a10CompareThe object-branch truncation notice sliced from the prettified JSON.stringify(value, null, 2) but reported the total against the compact JSON.stringify(value).length, which could show a nonsensical "5,000 of 4,800 characters shown" when the compact form is shorter than the prettified slice. Derive both from the same string.
waleedlatif1
commented
Jul 2, 2026
waleedlatif1
commented
Jul 2, 2026
@cursor review |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit 5c86fae. Configure here.
renderStructuredValuePreview only treated null/undefined as empty; an empty string fell through to the plain-text branch and rendered as a bordered, padded, contentless pill that reads as a stray UI element (e.g. an unstyled toggle) in the Display Data table.
waleedlatif1
commented
Jul 2, 2026
waleedlatif1
commented
Jul 2, 2026
@cursor review |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit a672b26. Configure here.
Summary
SupportFooterrenderedposition: absolutewith no space reserved for it inInterfacesShell/AuthShell/file-share auth gate, so it silently overlapped and ate clicks on whatever content ended up in its ~50px footprint — on the resume page this was the "Resume Execution" button itself. Root-caused via live reproduction (seeded paused execution + headless browser), confirmed fix by re-running the same repro (click now dispatches the resume POST and gets 200)./inviteand/f/[token](public file-share auth gate), which shared the identical absolute-positioning patternhandleResumeno longer fails silently on validation errors or unexpected exceptions — always surfaces a visible errorgetPauseContextDetailno longer duplicates a pause point's full (potentially large) response payload in the same API responseType of Change
Testing
human-in-the-loop-manager.test.tsbun run lint, typecheck, and existing test suite all passChecklist