fix: address release review findings - #8276
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
There was a problem hiding this comment.
All reported issues were addressed across 32 files
Reply with feedback, questions, or to request a fix.
Fix all with cubic | Re-trigger cubic
|
59728ec to
df8aba7
Compare
|
@cubic-dev-ai review this PR |
@waleedlatif1 I have started the AI code review. It will take a few minutes to complete. |
PUT /api/desktop/tool/file buffered up to 100 MiB of the request body before the use case checked that the tool call exists, is a running browser_save_download claimed by the desktop, and belongs to the caller's run, so any signed-in user could force large reads with bogus toolCallIds. Add admitBrowserDownloadSave (same operation and binding resolution as saveBrowserDownload, no claim or audit), following the existing admitCreateWorkspaceFile pattern, and run it before the body read. The save use case still re-validates and claims atomically after the read, so a failed or oversized upload never burns the single-use claim.
…gets resolveFileInputTarget climbed out of shadow roots with `root instanceof ShadowRoot`. Elements in same-origin iframes belong to the frame's realm, so the check was false for their shadow roots and the ancestor walk stopped at the shadow boundary, failing browser_upload_file with "no nearby file input". Use the file's duck-typed `'host' in root` idiom like every other shadow-host hop.
… waits on the user Every run of a main-lane activity segment received the segment-wide activity, including its completedTitle. A finished multi-call run before a pending approval or terminal handoff (which splits the segment into runs) therefore read the past-tense completed title while the activity was still unfinished. Runs now receive the completed title only once every call in the segment has finished; until then they keep the activity's in-progress title and summarize their own calls. Fully finished activities render exactly as before.
compactRetrievalCitations kept only citations, dropping data.retrieval, and
stripToolResultOutput applies it on both save and load. A reloaded timed-out
search with no matches therefore rendered "No results", which the live UI and
the tool itself deliberately avoid because partial results cannot establish
absence.
Compaction now keeps a bounded retrieval: { status: 'partial' } marker (never
the full retrieval object), and re-compacting compacted output keeps it.
Complete searches compact exactly as before.
The chat page gated on (mothershipAvailable || memberScoped) while OrganizationHome renders nothing without copilot.use, or without Build and Search. A viewer with copilot.use but neither Build nor Search, and a Search-only viewer opening an assistant chat, got a blank page. Apply Home's two redirects (Search when copilot.use is denied, workspace settings when neither Build nor Search is allowed) before loading the chat, through one getOrganizationHomeRedirect shared by both pages so they cannot drift again; the later copilot.use redirect becomes unreachable and is removed.
… results organizationHomeParsers already reads from/to, but OrganizationHomeContent passed only source and updated to searchFiltersFromParams, so a Home URL with updated=custom restored an unbounded search. Pass from/to through, matching the workspace results view, and add them to the effect deps.
Organization Home passed projectsDesktopTabs: false to useChat in Assistant mode, which only nulls the native active-tab ids used for the strip's fallback. ChatResourcePanel still projects the chat scope's browser and terminal tabs in every mode, and chat link clicks in the desktop app open those tabs through the same projection, so Assistant chats showed desktop tabs while ignoring which one the desktop app remembers (the #7793 reopen behavior). Build Home's options with getMothershipUseChatOptions, like workspace Home, so tabs project consistently in every mode. Assistant requests still attach no resources.
The resource panel divider (moved into the shared ChatPanelLayout this release, identical to main's home.tsx) was pointer-only: a separator with no tabIndex, key handling, or aria-value*, so keyboard users could not focus or resize it. Mirror the file text-editor split: the divider is now a focusable separator with ArrowLeft/ArrowRight steps and Home/End. Both separators now read keys through one readSeparatorKey helper (modifier and IME guard included). Keyboard widths go through the same MIN/max clamps as the drag (keyboardPanelWidth next to panelWidthAt), land without the width transition like the window-resize clamp (shared writeWidthInstantly), are ignored during a live drag, and claim the resource view like a pointer resize. aria-valuenow/min/ max are written imperatively on focus, key, and drag end, preserving the hook's zero-render resize design. Focus-visible outline matches the text-editor split.
The settings-pages rule said every member avatar renders aria-hidden because the name is always beside it. MemberRow shows only the email, so its avatar correctly stays labelled (role=img, aria-label=name), matching the emcn Avatar TSDoc. Reword the rule and regenerate the Cursor projection.
The skill said service mode requires shared selectors, but GitLab (service mode only) uses plain host/project inputs. Align with the live-search README: verification is mandatory; shared selectors apply only to resource pickers.
The window-resize clamp updated the panel width but not the focused divider's aria-valuemax/valuenow, so assistive tech kept the old bounds until the divider was focused again. The clamp now also reports to the divider while it holds focus, including when the pinned width stays within the new bounds.
333d11b to
306d80a
Compare
|
@cubic-dev-ai review this PR |
@waleedlatif1 I have started the AI code review. It will take a few minutes to complete. |
Summary
Fixes the review findings on the v0.8.60 release PR (#8273) that we confirmed are real. We checked each one against the code that introduced it before changing anything.
admitBrowserDownloadSave, which follows theadmitCreateWorkspaceFilepattern) now runs before the up-to-100 MiB body is read. The single-use claim still happens after the read, so a failed upload can be retried. Error responses are unchanged.resolveFileInputTargetnow finds the shadow host withoutinstanceof, so shadow roots inside same-origin iframes resolve.retrieval: { status: 'partial' }marker, so a timed-out empty search no longer shows "No results" after a reload.getOrganizationHomeRedirect, which fixes two cases that rendered a blank page.from/todates are passed through when search results are restored.getMothershipUseChatOptions, so desktop tabs are shown consistently. Assistant requests still attach no resources.readSeparatorKeywith the file editor's split, and stays current when a window resize clamps the panel. Dragging is unchanged.aria-hiddenrule now applies only when the name is visible beside the avatar, and the add-connector selector guidance matches the live-search README.Type of Change
Testing
page-functions201/201bun run type-check(apps/sim, apps/desktop),bun run lint,check:audits(49), block registry,docs-manifest:checkChecklist