v0.6.67: VFS upload fix, posthog/copilot correlation, exa date filters, logs panel width, tables UI/DB decoupling#4456
Conversation
TheodoreSpeaks
commented
May 5, 2026
- fix(copilot): disambiguate VFS upload paths to prevent stale-row reads (fix(copilot): disambiguate VFS upload paths to prevent stale-row reads #4454)
- feat(posthog): correlate task events with copilot logs via request_id (feat(posthog): correlate task events with copilot logs via request_id #4453)
- feat(exa): add date filters to search (feat(exa): add date filters to search #4451)
- improvement(logs): increase log details panel max width from 40vw to 60vw (improvement(logs): increase log details panel max width from 40vw to 60vw #4449)
- refactor(tables): decouple UI display from DB position (refactor(tables): decouple UI display from DB position #4448)
* refactor(tables): phase 1 — gutter numbering from array index
Delete the PositionGapRows component, the gap-fill loop, and the
GAP_CHECKBOX_CLASS / GAP_ROW_LIMIT / PositionGapRowsProps surface area.
The server's recompactPositions() guarantees positions are 0..N-1
contiguous in the unfiltered view, so the phantom-row machinery has
been defending against a state that essentially never happens.
DataRow now receives an arrayIndex prop and renders {arrayIndex + 1}
in the gutter. Selection coordinates still flow through row.position;
that switches in phase 2.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* refactor(tables): phase 2-5 — selection by array index, checks by row id
Decouple Tables UI selection coordinates from DB position:
- rowIndex semantics shift from row.position to array index across
selection state, mouse handlers, keyboard nav, paste, scrollIntoView
- checkedRows: Set<number> (position) → Set<string> (rowId), survives
sort/filter and realtime row inserts
- lastCheckboxRowRef stores rowId; shift-click range resolves to current
array indices for visual-order ranges
- Drop positionMap/maxPosition derived state in favor of direct rowsRef
reads
- ExpandedCellPopover anchors via data-row-id (row-id-stable) instead
of data-row (array index)
- collectRowSnapshots accepts Iterable<TableRowType> directly
- Add bounds-validation effect to clamp anchor/focus when rows.length
shrinks (sort change, pagination, realtime delete)
- Drop redundant arrayIndex prop on DataRow (rowIndex now equals it)
Server-side position math stays at API boundary only: insertRow,
duplicateRow, shift-Enter append, paste create-batch, undo snapshots.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* refactor(tables): rowId-stable selection across sort, position math via reduce
- Track anchor/focus by rowId so same-length sort changes remap selection
to the new visual index instead of leaving it on a different row.
- Replace last-row position lookups with Math.max reduce in paste's
create-batch and append-row's undo snapshot — under non-position sorts,
the last visual row's position is not the largest.
- Trim a navigation-noise comment and tighten two over-explanatory ones.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
* fix(tables): guard rowId remap effect and document paste batch position
- Skip the validation effect when rows is empty (transient state during
initial load of a new sort/filter before keepPreviousData populates) so
selection survives uncached query changes.
- Skip when isColumnSelection is true; the column-selection pinning effect
owns focus.rowIndex for those, and remapping would shrink a full-column
range to wherever the captured endpoints happened to land after reorder.
- Comment lastRowPosition's hoist invariant so a future refactor doesn't
move it inside the loop and produce colliding positions.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
…60vw (#4449) * improvement(logs): increase log details panel max width from 40vw to 60vw * chore(logs): fix stale 65vw references in JSDoc comments
…#4453) * feat(posthog): correlate task events with Go logs via request_id Auto-injects server request_id into all PostHog server events from AsyncLocalStorage context. Adds task_request_started client event fired when SSE traceparent response header arrives, carrying the trace ID used by Go for log correlation. task_generation_aborted now includes the in-flight request_id when available. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * improvement(posthog): tighten trace ID parse and verbose comments * fix(posthog): use traceparent header as canonical request_id source --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
#4454) * fix(copilot): disambiguate VFS upload paths to prevent stale-row reads
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
PR SummaryMedium Risk Overview Correlates task analytics with server request IDs. Extends Extends tools/UI behavior. Adds Exa search date filters ( Reviewed by Cursor Bugbot for commit c09e0a0. Bugbot is set up for automated code reviews on this repo. Configure here. |
Greptile SummaryThis PR bundles five focused improvements: a VFS upload deduplication fix for copilot chat, PostHog/copilot correlation via
Confidence Score: 4/5Safe to merge — changes are well-isolated, the VFS deduplication path is covered by unit tests, and the DB migration is backward-compatible. The VFS fix carefully handles race conditions by discriminating between two 23505 sources, and the migration adds only a nullable column with a partial index. The PostHog additions are fire-and-forget. The one gap — displayName not nulled out on file materialization — has no current functional impact. apps/sim/lib/copilot/tools/handlers/materialize-file.ts warrants a second look for the displayName cleanup on workspace promotion. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[Client uploads file to Chat] --> B[trackChatUpload called]
B --> C{Try UPDATE: set displayName candidate}
C -->|Row found| D[Return displayName to caller]
C -->|No row| E{Try INSERT with displayName candidate}
E -->|Success| D
E -->|23505 on displayName index| F[Increment suffix n++]
F --> C
E -->|23505 on key-active index| G[Throw - concurrent race, do not retry]
D --> H[LLM sees uploads/filename-n.ext in VFS]
Reviews (1): Last reviewed commit: "fix(copilot): disambiguate VFS upload pa..." | Re-trigger Greptile |