Skip to content

v0.8.39: search and file handling fixes, organization settings, bounded cleanup - #7864

Merged
waleedlatif1 merged 15 commits into
mainfrom
staging
Sep 16, 2026
Merged

waleedlatif1 merged 15 commits into
mainfrom
staging

Conversation

@TheodoreSpeaks

@TheodoreSpeaks TheodoreSpeaks commented Sep 15, 2026

Copy link
Copy Markdown
Collaborator

icecrasher321 and others added 9 commits September 15, 2026 11:33
* feat(cleanup): add bounded manual retention runs

* fix(cleanup): coordinate deletion with resource eligibility

* fix(cleanup): persist storage retries and complete test fixtures

* fix(cleanup): guard storage retries by file generation

* improvement(cleanup): reuse existing jobs for row limits

* fix(cleanup): fail manual jobs on owner lookup errors
* fix(desktop): share browser modal and status page presentation

* fix(desktop): apply initial shell theme before IPC resolves

* chore(desktop): remove redundant dismissal test comment
* fix(workflows): preserve file inputs in workflow testing

* fix(workflows): align advertised file validation and reserve unsafe names
* fix(integ): bound credential scans and classify disabled TTL

* fix(ci): serialize shared-schema PostgreSQL suites
* fix(chat): download generated files without stale storage URLs

* fix(chat): preserve external downloads and report bulk failures

* fix(chat): preserve direct downloads for CORS-restricted files

* chore(chat): annotate binary download fetch boundaries
…ion (#7859)

* fix(agent): authorize workspace attachments through execution delegation

* test(agent): preserve rejection of unprefixed attachment keys
…7862)

* fix(settings): decouple organization access from Sim Search

* fix(settings): keep organization settings inline without Sim Search
@vercel

vercel Bot commented Sep 15, 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 16, 2026 12:20am UTC

Request Review

@TheodoreSpeaks TheodoreSpeaks changed the title chore(release): merge staging into main v0.8.39: search and file handling fixes, organization settings, bounded cleanup Sep 15, 2026
@greptile-apps

greptile-apps Bot commented Sep 15, 2026

Copy link
Copy Markdown
Contributor

RetriggerConfidence Score: 5/5

The PR appears safe to merge, with the reviewed authorization, cleanup, connector lifecycle, compatibility, and cache boundaries remaining coherent.

Summary

This release promotion combines nine staging changes across desktop presentation, cleanup operations, connector lifecycle management, file authorization and downloads, search behavior, workflow inputs, and organization settings.

  • Shares desktop title-bar, theme, modal, status-page, and wordmark behavior across hosted and bundled surfaces.
  • Adds authenticated, per-type bounded retention cleanup while serializing retention workers.
  • Moves connector document deletion to bounded outbox processing while immediately hiding removed sources.
  • Tightens execution-file authorization and restores generated-file downloads and workflow file inputs.
  • Partitions search state by reader and scope, improves partial-result feedback, and exposes stable filters.
  • Keeps organization membership settings available when billing or Sim Search is disabled.
Diagram
%%{init: {'theme': 'neutral'}}%%
flowchart LR
  Release[Staging release promotion] --> Desktop[Desktop shell presentation]
  Release --> Cleanup[Bounded retention cleanup]
  Release --> Connectors[Connector deletion lifecycle]
  Release --> Files[Workflow and chat files]
  Release --> Search[Scoped knowledge search]
  Release --> Settings[Inline organization settings]

  Desktop --> Theme[Shared theme and title-bar state]
  Cleanup --> Queue[Serialized retention queue]
  Queue --> Budgets[Per-type row budgets]
  Connectors --> Tombstone[Immediate source tombstone]
  Tombstone --> Outbox[Bounded outbox cleanup]
  Files --> Auth[Execution-bound authorization]
  Files --> Downloads[Current stored-file downloads]
  Search --> Cache[Reader and scope partitioned cache]
  Settings --> Members[Member roster without billing dependency]
Loading

Reviews (1) · Last reviewed commit: "fix(settings): keep organization setting..."

@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 159 files

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

Fix all with cubic | Re-trigger cubic

Comment thread apps/sim/lib/internal/file/materialization-context.ts
Comment thread apps/sim/background/cleanup-logs.ts Outdated
Comment thread apps/sim/app/(interfaces)/chat/components/message/components/file-download.tsx Outdated
Comment thread apps/sim/hooks/queries/kb/connectors.ts
* feat(sso): open Sim from an identity provider's app dashboard

* improvement(sso): skip re-authentication when signed in and limit dashboard launch to OIDC providers

* improvement(sso): redirect straight to the identity provider from the launch URL

* fix(sso): keep a signed-in visitor going to the app when the launch address is rate limited

* fix(sso): report a failed launch sign-in on the provider's sign-in link

* chore(sso): normalize the caught error when a launch sign-in fails
…7867)

* fix(provenance): stop silently dropping model attachments

* fix(provenance): keep model turns running after attachment refusal

* fix(provenance): apply literal policy before file classification
…7870)

* fix(files): hydrate chat attachments and reject blank download URLs

* fix(files): preserve concealed canonical file failures
…ctions (#7853)

* fix(tables): block schema-locked column edits and rework lock settings as Table Security

* fix(tables): read-only cell editors and add-row form for update-locked tables

- Update-locked tables open cell editors read-only; the expanded editor disables Save with the reason on hover, and empty cells that can't be edited open nothing
- New row opens the Add Row form when only updates are locked
- Row form reads and writes values by column id and uses one date-and-time picker
- ChipDatePicker follows InsideModalContext so its calendar is clickable in modals, and gains showTime/timeLabel in single mode

* fix(tables): open the add-row form for required columns and gate Save on required fields

- New row, Shift+Enter, and Insert row open the Add Row form at their position when updates are locked or any column is required
- Add Row and Update Row stay disabled until every required field has a value
- Add mode accepts an insert position; Shift+Enter anchors to the neighbor row id

* fix(tables): explain denied actions where the user meets them

Clicking a column header opened the full column editor on a schema-locked
table: every field was editable and Save only failed once the server refused
it. The header click is the primary way into that panel, so it now opens
read-only — values stay readable and selectable, a disabled `<fieldset>` makes
the controls inert, and Save carries the lock reason. Clicking a checkbox cell
on an update-locked table did nothing at all, while the keyboard paths
explained themselves; it now raises the same notice.

The column menu disabled only "Edit column" while "Insert column left/right"
and "Delete column" stayed live and explained the lock after the click. All
four are disabled now, each with a tooltip. A disabled `DropdownMenuItem` sets
`pointer-events: none`, so the tooltip wraps the row rather than the item.
"Hide column" is untouched: hiding a workflow output is a metadata change no
lock covers.

Notices now speak the modal's Allow/Deny vocabulary and name the row that
denies the action, and the tooltip strings live in `lock-copy` instead of
being written out at each call site. Drops the "This table is append-only"
copy, which no path could reach once New row and Shift+Enter started opening
the add-row form.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* fix(tables): write only what the row form changed, and report failures once

The add/edit row form sent every column on every save. An untouched empty
column was written as `null`, so a no-op edit still bumped the row, and an
insert filled in nulls for columns the user never opened. It now sends only
the fields the user touched, and in edit mode only those whose value actually
differs — a save with nothing changed closes without a write. Checkboxes stay
the exception on insert: they always carry a concrete boolean, so a required
one the user never clicked still reaches the server as `false`.

A rejected write also arrived twice: the modal rendered the message inline and
the mutation toasted the same sentence. Row mutations take an opt-in
`suppressErrorToast` so the form owns its own failure; the cache self-heal on
a 423 still runs, only its toast is dropped.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* refactor(tables): drop the Table Security switch and its device-local store

"Enable Table Security" had no server representation: enabled-with-everything-
allowed and never-configured both save four `false` flags, so the difference
lived only in the browser that set it. Anyone else — another device, another
admin — saw the table as unconfigured, and the per-action choices behind the
switch were remembered per device too.

The modal now always shows the four Allow/Deny rows, mapped one-to-one onto
the server flags, so an unconfigured table opens on four `Allow`s and every
viewer sees the same state. That removes the reason for the preference store,
which is deleted along with its helpers and test. Stale
`table-security-preferences` keys are left where they are; nothing reads them.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* fix(tables): stage only the Table Security rows an admin moves

The modal reset its draft only when it opened, so a lock another admin changed
while it sat open went stale behind it: the controls kept rendering the old
values and Save submitted all four flags, overwriting the newer state.

Only the rows this admin moves are staged now. Every other row keeps rendering
the authoritative value, so a concurrent change shows up in the open modal
instead of hiding behind it, and Save sends just that patch — the route already
takes a partial — so an untouched row can't carry a stale flag over someone
else's change. A row both admins moved is the one real conflict, and there the
explicit choice wins.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
@waleedlatif1
waleedlatif1 merged commit c0f4717 into main Sep 16, 2026
63 checks passed
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.

4 participants