improvement(tables): empty-state filter/sort builders + upsert conflict-column selection#5123
improvement(tables): empty-state filter/sort builders + upsert conflict-column selection#5123TheodoreSpeaks wants to merge 4 commits into
Conversation
…me/drop prompt `drizzle-kit push --force` only suppresses the data-loss confirm, not the rename-vs-drop disambiguation prompt. That prompt fires whenever a diff both adds and drops tables/columns at once (e.g. migration 0231 created sim_trigger_state while dropping the workspace_notification_* tables), and in CI it crashes with a bare "Interactive prompts require a TTY" stack trace. Catch that specific failure in the dev push step and emit a GitHub error annotation explaining the cause and the fix (drop the stale objects on the dev DB to match schema.ts — the same DROPs the versioned migration already applied to staging/prod), instead of leaving an opaque trace. Exit status is preserved either way. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ct-column selection
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
PR SummaryMedium Risk Overview Query safety: Upsert Row: The Table block adds a Conflict Column field for CI (dev only): The migrations workflow captures Reviewed by Cursor Bugbot for commit 150b3fe. Bugbot is set up for automated code reviews on this repo. Configure here. |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 766ad33. Configure here.
| for (const rule of rules) { | ||
| // Skip incomplete rows (no column selected) so a blank builder row never | ||
| // serializes to a `{ '': ... }` predicate. | ||
| if (!rule.column) continue |
There was a problem hiding this comment.
Silent drop of incomplete filters
Medium Severity
filterRulesToFilter now skips rules with an empty column, but the workflow filter builder can still persist and display those rows (for example after “Add filter condition” before columns load). On query_rows, that yields no filter while the UI still shows conditions, so the block may return a broad unfiltered result instead of the intended subset.
Additional Locations (1)
Reviewed by Cursor Bugbot for commit 766ad33. Configure here.
Greptile SummaryThis PR polishes the table block's UX in two areas: (1) filter and sort builders now start empty with a dashed "+ Add condition" button instead of a phantom pre-populated row, and removing the last rule returns to that empty state; (2) the upsert tool gains an optional
Confidence Score: 5/5Safe to merge — all three functional changes (empty-state builders, blank-column guard in the converter, conflict-column parameter wiring) are straightforward and correctly implemented. The filter/sort empty-state refactor is well-contained: the store correctly transitions to an empty array, the converter already handled zero-length arrays, and the new !rule.column guard is the only serialization path change. The upsert conflict-column addition threads consistently through the block definition, tool params, and service (which still throws a clear error for un-resolved multi-unique tables). No behavioral regressions are apparent in any changed path. No files require special attention. Important Files Changed
Reviews (2): Last reviewed commit: "improvement(tables): throw on ambiguous ..." | Re-trigger Greptile |
…e conflict column
|
@greptile review |


Summary
{ '': … }predicateType of Change
Testing
Tested manually; lint, api-validation:strict, and
tsc --noEmitpass; table row tests pass (20/20)Checklist