feat(dashboards): table-backed dashboards as a gated workspace resource - #8305
TheodoreSpeaks wants to merge 31 commits into
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
|
Dashboards are now ordinary workspace files, handled like Sim pages, instead of a separate resource. Creating or uploading `<Name>.dashboard` drops the suffix and stamps `text/x-sim-dashboard`; the type is sticky across content writes. The file viewer renders it live behind the `dashboards` flag, and the public share viewer shows a workspace-only notice. - Remove the dashboard resource: sidebar page, API routes, hooks, contracts, application layer, Mothership dashboards/dashboard_folders tools, resource tags, and the per-turn dashboardsEnabled payload. - Revert the file discovery column (0385) and drop the dashboard folder resource enum (0384); dashboards never shipped, so no backfill. - Chat panel decides previewability and tab/picker icons from the file type, not the name, so extensionless dashboards render and get the chart icon. - Renderer: authored left label columns are kept intact, horizontal bar frames grow with row count, and hovered rows get a label-and-bar highlight. - Simplify the create-dashboard skill around one validated example. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S6aTRnkiu7PxYZPNPXYEMV
Resolves conflicts in the feature-flag and skill use-case tests (moved onto staging's central mocks) and the tab strip widths. Adapts the branch's dashboard and analytics tests to staging's test-pattern audit, scopes the table operation delegation invariant to operations that admit delegated principals, and hides the rollout-gated create-dashboard built-in from the organization composer when the dashboards flag is off. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S6aTRnkiu7PxYZPNPXYEMV
|
@cubic-dev-ai review this PR |
@TheodoreSpeaks I have started the AI code review. It will take a few minutes to complete. |
|
There was a problem hiding this comment.
All reported issues were addressed across 86 files
Tip: instead of fixing issues one by one fix them all with cubic
Re-trigger cubic
- Size horizontal bar `.chart` previews by category count like dashboard panels. - Keep the ECharts label column for percentage bar widths, resolve percentage grid insets for the row highlight, and keep the time axis on the queried range. - Show small readout values with significant digits instead of rounding to 0. - Pass the dashboard's timezone-adjusted today to the range calendar. - Decide the Chat panel's Markdown mode from the file record. - Replace mock-call assertions in the EChartsView tests with DOM behavior. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S6aTRnkiu7PxYZPNPXYEMV
|
@cubic-dev-ai review this PR |
@TheodoreSpeaks I have started the AI code review. It will take a few minutes to complete. |
There was a problem hiding this comment.
All reported issues were addressed across 86 files
Reply with feedback, questions, or to request a fix.
Fix all with cubic | Re-trigger cubic
… resizes Unstacked bar series sit side by side in a category row, so grouped charts keep the ECharts label column and their rows fit every bar slot. The row highlight redraws the active row after each render, so a resize moves it with the plot. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S6aTRnkiu7PxYZPNPXYEMV
|
@cubic-dev-ai review this PR |
@TheodoreSpeaks I have started the AI code review. It will take a few minutes to complete. |
There was a problem hiding this comment.
All reported issues were addressed across 164 files
You've manually re-run cubic several times on this PR. Each manual re-review checks the full PR again and counts toward your usage quota. To preserve your usage limits, we recommend letting cubic automatically review new commits.
Tip: instead of fixing issues one by one fix them all with cubic
Re-trigger cubic
…-dashboards # Conflicts: # packages/db/script-migrations/index.ts
The dashboard browser now asks for one folder's dashboards instead of filtering the first 500 across the workspace, folder paths use the shared segment encoder, and the README names the renumbered migrations. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S6aTRnkiu7PxYZPNPXYEMV
|
@cubic-dev-ai review this PR |
@TheodoreSpeaks I have started the AI code review. It will take a few minutes to complete. |
There was a problem hiding this comment.
All reported issues were addressed across 166 files
Requires human review: Auto-approval blocked because this review re-detected 1 unresolved issue already reported by Cubic.
You've manually re-run cubic several times on this PR. Each manual re-review checks the full PR again and counts toward your usage quota. To preserve your usage limits, we recommend letting cubic automatically review new commits.
Fix all with cubic | Re-trigger cubic
Fork payloads accept file discovery, dashboard queries are keyed and invalidated per workspace, dashboard contexts open tabs and resolve in organization chats, archived dashboard folders keep their paths, and the folder dialog skips no-op moves and hides the edited subtree. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S6aTRnkiu7PxYZPNPXYEMV
|
@cubic-dev-ai review this PR |
@TheodoreSpeaks I have started the AI code review. It will take a few minutes to complete. |
There was a problem hiding this comment.
1 issue found across 170 files
Confidence score: 3/5
- In
apps/sim/app/workspace/[workspaceId]/dashboards/dashboard-dialog.tsx, moving a dashboard to a path whose name already exists can silently nest it (for example,/Archive/Reportsbecomes/Reports/Reports); reject the occupied destination or clearly resolve the name collision.
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="apps/sim/app/workspace/[workspaceId]/dashboards/dashboard-dialog.tsx">
<violation number="1" location="apps/sim/app/workspace/[workspaceId]/dashboards/dashboard-dialog.tsx:109">
P2: An occupied destination path is treated as a folder to move into, so moving `/Archive/Reports` to the root while `/Reports` already exists silently nests it at `/Reports/Reports`. Reject or clearly resolve the name collision before submitting this move.</violation>
</file>
You've manually re-run cubic several times on this PR. Each manual re-review checks the full PR again and counts toward your usage quota. To preserve your usage limits, we recommend letting cubic automatically review new commits.
Fix all with cubic | Re-trigger cubic
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S6aTRnkiu7PxYZPNPXYEMV
|
@cubic-dev-ai review this PR |
@TheodoreSpeaks I have started the AI code review. It will take a few minutes to complete. |
There was a problem hiding this comment.
No issues found across 170 files
Confidence score: 5/5
- Automated review surfaced no issues in the provided summaries.
- No files require special attention.
You've manually re-run cubic several times on this PR. Each manual re-review checks the full PR again and counts toward your usage quota. To preserve your usage limits, we recommend letting cubic automatically review new commits.
Re-trigger cubic
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S6aTRnkiu7PxYZPNPXYEMV
|
@cubic-dev-ai review this PR |
@TheodoreSpeaks I have started the AI code review. It will take a few minutes to complete. |
There was a problem hiding this comment.
No issues found across 170 files
Confidence score: 5/5
- Automated review surfaced no issues in the provided summaries.
- No files require special attention.
You've manually re-run cubic several times on this PR. Each manual re-review checks the full PR again and counts toward your usage quota. To preserve your usage limits, we recommend letting cubic automatically review new commits.
Re-trigger cubic
Summary
Adds dashboards as a workspace resource with their own navigation, folders, resource tabs, and Mothership tools. Dashboard YAML selects authorized table queries and lays out metrics, ECharts charts, tables, text, and tabs. Aggregation runs on the server, with bounded results and timeouts.
Companion: https://github.com/simstudioai/mothership/pull/531
path: messageerrors. They do not check table columns or run queries.listedorunlisted, separately from their storage and ownership context.DASHBOARDS=true.Type of Change
Testing
lint:check,check:test-patterns, and migration checks (check:migrations,drizzle-kit check) pass after mergingstaging.check:dead-codeflags only a local research folder that is not committed.Reviewers, please focus on:
Two behaviors to keep in mind:
Rollout and scope
This PR targets
stagingand adds three migrations:0391_dashboard_foldersaddsdashboardto the existing folder resource enum. It creates no new table.0392_file_discovery:0027_backfill_file_discoveryclassifies existing non-workspace uploads in idempotent pages of 1,000. It rewrites no content or ownership.There is no dashboard backfill, because dashboards have not shipped. A documented follow-up removes the bridge once all writers are aware of discovery.
The companion Mothership PR adds dashboard CLI authoring and persists per-turn rollout availability. Apply both repositories' additive migrations and deploy the worker before enabling dashboards.
Not included: no merge or deployment. Public sharing, log queries, and a tool for inspecting the data a user sees on screen are deferred.
Checklist
🤖 Generated with Claude Code
https://claude.ai/code/session_01S6aTRnkiu7PxYZPNPXYEMV