Skip to content

feat(table): add workflow execution column type#4338

Draft
TheodoreSpeaks wants to merge 12 commits intostagingfrom
feat/table-trigger
Draft

feat(table): add workflow execution column type#4338
TheodoreSpeaks wants to merge 12 commits intostagingfrom
feat/table-trigger

Conversation

@TheodoreSpeaks
Copy link
Copy Markdown
Collaborator

Summary

Brief description of what this PR does and why.

Fixes #(issue)

Type of Change

  • Bug fix
  • New feature
  • Breaking change
  • Documentation
  • Other: ___________

Testing

How has this been tested? What should reviewers focus on?

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)

Screenshots/Videos

@vercel
Copy link
Copy Markdown

vercel Bot commented Apr 29, 2026

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

Project Deployment Actions Updated (UTC)
docs Ready Ready Preview, Comment Apr 30, 2026 8:41am

Request Review

@TheodoreSpeaks TheodoreSpeaks changed the title Feat/table trigger feat(table): add workflow execution column type Apr 29, 2026
@TheodoreSpeaks
Copy link
Copy Markdown
Collaborator Author

@BugBot review

@cursor
Copy link
Copy Markdown

cursor Bot commented Apr 30, 2026

PR Summary

Medium Risk
Touches Realtime room membership/permission checks, adds new HTTP bridge endpoints, and significantly refactors table UI + introduces new table execution APIs, so regressions could affect table updates and run controls despite being feature-scoped.

Overview
Adds table workflow-execution support end-to-end: tables can now define workflow groups that produce one-or-more output columns and track per-row execution state.

Backend changes add table room pub/sub in Realtime (join-table/leave-table with verifyTableAccess) plus new HTTP bridge endpoints (/api/table-row-updated, /api/table-row-deleted, /api/table-deleted) to broadcast row/table events to subscribed clients. Sim API adds table workflow-group CRUD (/api/table/[tableId]/groups), manual run endpoints (run group across table, run group for a row), and run cancellation (/cancel-runs), and extends table/row responses to include schema.workflowGroups and row executions.

Frontend updates overhaul the table UI to render workflow column groups (meta header, per-cell running/waiting/error states), add run/stop controls (per-row and stop-all), enable viewing execution logs from the context menu, and introduce a new right-side ColumnSidebar to configure columns and workflow groups (workflow picker, dependency selection, output selection with preview).

Reviewed by Cursor Bugbot for commit 6e2f973. Bugbot is set up for automated code reviews on this repo. Configure here.

Copy link
Copy Markdown

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 2 potential issues.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 6e2f973. Configure here.

const configuredWorkflow = ownGroup ? workflows?.find((w) => w.id === ownGroup.workflowId) : undefined
const workflowColor = configuredWorkflow?.color
const workflowId = ownGroup?.workflowId
const workflowState = useWorkflowState(workflowId)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Every ColumnHeaderMenu fetches full workflow state independently

Medium Severity

useWorkflowState(workflowId) is called inside every ColumnHeaderMenu instance just to resolve a block icon. For a workflow group with N output columns, this creates N independent React Query subscriptions to the same workflow state (which contains all blocks, edges, etc.). Each subscription triggers a re-render of that column header whenever the workflow state changes. The icon info could be resolved once at the parent level and passed as a prop.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 6e2f973. Configure here.

})
}
oldKeys.delete(key)
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Computed oldKeys set is never read after loop

Low Severity

The oldKeys set is populated and entries are deleted during the loop, but the resulting set (representing removed outputs) is never read afterward. The removal logic is handled server-side by diffing the fullOutputs array, making oldKeys entirely dead code that adds confusion about where output removals are tracked.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 6e2f973. Configure here.

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