Skip to content

fix: address release review findings - #8276

Merged
waleedlatif1 merged 11 commits into
stagingfrom
fix/v0.8.60-review-findings
Sep 24, 2026
Merged

waleedlatif1 merged 11 commits into
stagingfrom
fix/v0.8.60-review-findings

Conversation

@waleedlatif1

@waleedlatif1 waleedlatif1 commented Sep 24, 2026 •

Copy link
Copy Markdown
Collaborator

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.

  • Desktop download save: the ownership check (admitBrowserDownloadSave, which follows the admitCreateWorkspaceFile pattern) 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.
  • Desktop upload target: resolveFileInputTarget now finds the shadow host without instanceof, so shadow roots inside same-origin iframes resolve.
  • Chat activity: a finished run no longer shows the completed title while a later call or approval in the same activity is still pending.
  • Search persistence: saved search output keeps a retrieval: { status: 'partial' } marker, so a timed-out empty search no longer shows "No results" after a reload.
  • Organization chat URLs: the chat page and organization Home share one getOrganizationHomeRedirect, which fixes two cases that rendered a blank page.
  • Organization Home: custom from/to dates are passed through when search results are restored.
  • Organization Assistant: Home builds its options with getMothershipUseChatOptions, so desktop tabs are shown consistently. Assistant requests still attach no resources.
  • Chat/resource divider: you can focus it, resize it with the arrow keys and Home/End, and assistive tech reads its value. It shares readSeparatorKey with the file editor's split, and stays current when a window resize clamps the panel. Dragging is unchanged.
  • Docs: the avatar aria-hidden rule 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

  • Bug fix

Testing

  • Each fix has a regression test, and each test fails with its fix reverted
  • vitest: apps/sim home, files, org, desktop API, browser-agent and mothership chat suites, 269 files / 4470 tests; desktop page-functions 201/201
  • bun run type-check (apps/sim, apps/desktop), bun run lint, check:audits (49), block registry, docs-manifest:check

Checklist

  • Code follows project style guidelines
  • Self-reviewed my changes
  • Tests added/updated and passing
  • No new warnings introduced
  • I confirm that I have read and agree to the terms outlined in the Contributor License Agreement (CLA)

@vercel

vercel Bot commented Sep 24, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
docs Ready Ready Preview Sep 24, 2026 11:14pm UTC

Request Review

@cubic-dev-ai cubic-dev-ai 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.

All reported issues were addressed across 32 files

Reply with feedback, questions, or to request a fix.

Fix all with cubic | Re-trigger cubic

Comment thread .github/workflows/deploy-trigger-dev.yml Outdated
Comment thread apps/sim/app/workspace/[workspaceId]/home/hooks/use-mothership-resize.ts Outdated
@greptile-apps

greptile-apps Bot commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerConfidence Score: 5/5

The PR appears safe to merge; no new actionable issue or outstanding previous finding remains.

Summary

This PR addresses release-review findings across desktop file transfers, organization Home and chat routing, search persistence, activity titles, and the chat/resource divider.

  • Adds pre-read authorization for desktop download saves and improves file-input resolution in same-origin frames.
  • Preserves custom search dates and partial-retrieval status, and shares organization Home redirect logic.
  • Adds keyboard resizing and accessible divider values, with regression tests and updated guidance.

Reviews (3) · Last reviewed commit: "fix(home): keep a focused divider's valu..."

Comment thread .github/workflows/deploy-trigger-dev.yml Outdated
Comment thread apps/sim/app/o/[organizationId]/home/organization-home.tsx
@waleedlatif1
waleedlatif1 force-pushed the fix/v0.8.60-review-findings branch from 59728ec to df8aba7 Compare September 24, 2026 22:48
@waleedlatif1 waleedlatif1 changed the title fix: address v0.8.60 release review findings fix: address release review findings Sep 24, 2026
@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@greptile

@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@cubic-dev-ai review this PR

@cubic-dev-ai

cubic-dev-ai Bot commented Sep 24, 2026

Copy link
Copy Markdown
Contributor

@cubic-dev-ai review this PR

@waleedlatif1 I have started the AI code review. It will take a few minutes to complete.

@cubic-dev-ai cubic-dev-ai 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.

No issues found across 34 files

Confidence score: 5/5

  • Automated review surfaced no issues in the provided summaries.
  • No files require special attention.

Re-trigger cubic

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.
@waleedlatif1
waleedlatif1 force-pushed the fix/v0.8.60-review-findings branch from 333d11b to 306d80a Compare September 24, 2026 23:11
@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@greptile

@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@cubic-dev-ai review this PR

@cubic-dev-ai

cubic-dev-ai Bot commented Sep 24, 2026

Copy link
Copy Markdown
Contributor

@cubic-dev-ai review this PR

@waleedlatif1 I have started the AI code review. It will take a few minutes to complete.

@cubic-dev-ai cubic-dev-ai 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.

No issues found across 32 files

Confidence score: 5/5

  • Automated review surfaced no issues in the provided summaries.
  • No files require special attention.

Re-trigger cubic

@waleedlatif1
waleedlatif1 merged commit aced5f7 into staging Sep 24, 2026
37 of 38 checks passed
@waleedlatif1
waleedlatif1 deleted the fix/v0.8.60-review-findings branch September 24, 2026 23:18

This branch was successfully deployed

1 active deployment
Preview — 306d80a9 Deployed Sep 24, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant