[DO NOT MERGE] UI prototype: org-level project view (playground only) - #8433
Draft
TheodoreSpeaks wants to merge 63 commits into
Draft
TheodoreSpeaks wants to merge 63 commits into
TheodoreSpeaks wants to merge 63 commits into
Conversation
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
- 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
… 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
…verride Chart tooltip defaults now apply to every entry of an authored `tooltip` array instead of replacing it with one object. Restore the v2 chat payload to staging: the hard-coded `mode: 'agent'` came from the removed dashboard resource work and would overwrite a resumed chat's saved mode. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S6aTRnkiu7PxYZPNPXYEMV
Grouped horizontal bar rows now size their gap from the series `barGap` the way ECharts does (pixels, a percentage of bar width, default 20%, overlap for negative gaps) instead of a fixed 4px. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S6aTRnkiu7PxYZPNPXYEMV
…resh through the UI Pie tooltips encoded by dimension index now use the custom formatter, resolving the measure through the encode indexes ECharts passes it. The dashboard preview test drops the mocked controls and callback-driven cases and clicks the real Refresh button to check which analytics queries are invalidated; the range and timezone math stays covered by the time tests. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S6aTRnkiu7PxYZPNPXYEMV
Multi-axis bar charts now read the tooltip unit from the axis each series is plotted on, so a secondary axis no longer inherits the first axis's format. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S6aTRnkiu7PxYZPNPXYEMV
Removes assertions on mocked collaborators and rendered text from the dashboard, chart and analytics tests per the repository testing rules, keeping the observable checks (status codes, thrown errors, DOM roles, computed summaries, emitted zoom ranges). Deletes the animated-number test, which had no behavior left to assert. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S6aTRnkiu7PxYZPNPXYEMV
…pragmas The shared Vitest config already resets mocks and stubbed globals before each test and defaults to the node environment. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S6aTRnkiu7PxYZPNPXYEMV
…Pages Drop the create-dashboard built-in skill and its rollout gating in the skill lists. Mothership now learns the dashboard format from a sim-dashboards reference in its own research-and-deliverables skill, the pattern Sim Pages use; Sim workspace built-ins stay Agent-block documents. The dashboards flag still gates the viewer and table analytics. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S6aTRnkiu7PxYZPNPXYEMV
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S6aTRnkiu7PxYZPNPXYEMV
The v2 file create, replace and edit responses now carry `diagnostics` for a dashboard file: its parse errors, or an empty list. Writes are never blocked, like the page lint; table columns and queries are still checked when panels render. Parse errors are reported as `path: message` lines, and a block with no recognized kind names the allowed kinds and unknown keys instead of Zod's union dump. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S6aTRnkiu7PxYZPNPXYEMV
…create revision - One diagnostics entry per parse error instead of a newline-joined string. - A panel choosing aggregate or columns drops the other mode's inherited dashboard fields, so shared defaults serve table and aggregate panels. - The v2 create response returns the revision it produced, like the replace and edit responses. - The analytics route test uses the shared createMockRequest helper. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S6aTRnkiu7PxYZPNPXYEMV
…ap diagnostics size A panel switching away from the dashboard's query mode no longer inherits its sort or limit, which name aggregate aliases or top-N groups in one mode and rows in the other. Write diagnostics check the 128 KB source limit before decoding the payload. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S6aTRnkiu7PxYZPNPXYEMV
Mock-data prototype at /playground/org (gated by NEXT_PUBLIC_ENABLE_PLAYGROUND): projects with their chats in the sidebar, a Codex-style new-chat home with a project picker, per-project changelog (next release, running agents, shipped releases with charts), Sim issues with investigation briefs linked to Linear/Jira tickets, a floating chat bar, and prod settings sections. Adds an optional TableAnalyticsSourceContext so the dashboard renderer can run on mock rows, and a title slot on DashboardPreview for a dashboard switcher. Both default to existing behavior. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DeA8zbNdZMuB1MSNbcH6p6
…side chat The project main view shows Dashboard, Changelog, and Issues; "Open full view" switches the sidebar to the project's sections, and Settings swaps it again to the settings list. Chats open in a left side panel. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DeA8zbNdZMuB1MSNbcH6p6
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
6 tasks done
This was referenced Sep 30, 2026
…a tab Dashboard and issue headers carry the chip; a row in a project resource list opens the same way. The chat lands with the resource as the active tab and attached to the first message (?open=kind:workspace:id). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DeA8zbNdZMuB1MSNbcH6p6
… icon beside the name The org sidebar folds to its rail while the chat is docked so the page keeps its width; what you were looking at is attached. Dashboard and issue use the icon, a row in a resource list docks with that row attached. The dock expands to the chat page with the thing as a tab. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DeA8zbNdZMuB1MSNbcH6p6
…ge as its first tab A round button at the bottom left of every project page creates a chat in Recent chats and opens it with what you were looking at as the active tab: the dashboard, an issue, a kind's list, or the project browser. The docked pseudo chat is gone; the first message names the chat. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DeA8zbNdZMuB1MSNbcH6p6
…ject header Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DeA8zbNdZMuB1MSNbcH6p6
The sidebar is New chat, Search, Connectors, and Recent chats. Every page is a chat beside the workspace pane: a pinned project tab (pick the project in its heading) with Dashboard, Changelog, Issues, and Resources inside it, then the resource tabs. Project pages, their routes, and the chat trigger are gone; links to a project thing are ?open= refs the chat surface turns into tabs. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DeA8zbNdZMuB1MSNbcH6p6
…ck opens it in the pane Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DeA8zbNdZMuB1MSNbcH6p6
…e workspace tab Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DeA8zbNdZMuB1MSNbcH6p6
…e pane divider resizes Uses the real useMothershipResize for the divider, so drag, keyboard, and the collapse toggle behave as the home panel's do. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DeA8zbNdZMuB1MSNbcH6p6
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DeA8zbNdZMuB1MSNbcH6p6
… is a centered column Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DeA8zbNdZMuB1MSNbcH6p6
…ect it With no project selected the workspace tab shows the org's projects. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DeA8zbNdZMuB1MSNbcH6p6
…deselects Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DeA8zbNdZMuB1MSNbcH6p6
…esources Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DeA8zbNdZMuB1MSNbcH6p6
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DeA8zbNdZMuB1MSNbcH6p6
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DeA8zbNdZMuB1MSNbcH6p6
…nd create actions Resources shows the kinds inside the workspace tab; a kind shows the real list with its New/Upload/Connect action under a Resources / Kind breadcrumb back to the directory; a row opens as its own resource tab. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014LcvZQzHFcm7Egc7rPEEHv
…ctory Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014LcvZQzHFcm7Egc7rPEEHv
…the strip Like a browser profile: tile, name, chevron; the menu lists the org and its projects, and picking one shows it in the workspace tab. The workspace header drops its own picker and keeps a Settings chip. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014LcvZQzHFcm7Egc7rPEEHv
The project switcher is a plain tab-like chip with a separate chevron, not a black pill. The workspace tab drops its title block: just the section row with a settings gear at the end. The Resources directory is a real resource list (header, search across the project, Name/Items rows) like every kind page. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014LcvZQzHFcm7Egc7rPEEHv
…on the directory The switcher is an outlined chip (tile, name, chevron) that opens the workspace tab; the project picker lives on the tab's title. The Resources directory keeps search and the kind list without a second Resources bar. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014LcvZQzHFcm7Egc7rPEEHv
…, not a resource Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014LcvZQzHFcm7Egc7rPEEHv
An icon-only tile at the head of the strip, sized to the band; clicking it opens the project menu, and picking one shows it in the workspace tab. The title inside the tab is plain text again. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014LcvZQzHFcm7Egc7rPEEHv
…ge when selected Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014LcvZQzHFcm7Egc7rPEEHv
Per the project-profile prototype: an outlined pill after a divider at the end of the strip. Its left half (tile + name) shows the workspace tab and holds the pressed fill while it is showing; the chevron half opens a Switch project menu with the org and each project. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014LcvZQzHFcm7Egc7rPEEHv
…like the file view Copy Link, Download, Share, Delete move out of the tab strip into a Resource.Header under the tabs, with Kind / Name breadcrumbs and a name menu. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014LcvZQzHFcm7Egc7rPEEHv
…ssed project control Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014LcvZQzHFcm7Egc7rPEEHv
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014LcvZQzHFcm7Egc7rPEEHv
…lows Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014LcvZQzHFcm7Egc7rPEEHv
This branch was previously deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #8305 (dashboards) because the prototype reuses the real dashboard renderer.
What to look at
Run
NEXT_PUBLIC_ENABLE_PLAYGROUND=true bunx next devinapps/simand open/playground/org./p/support): Dashboard, Changelog, and Issues as chips, plus Open full view./p/support/build/workflows): Supabase-style. The sidebar becomes the project's sections with a back button at the top left, and Settings swaps it again to the prod settings list./p/infra/issue/INF-412,/p/support/issue/SUP-153): a brief with root cause, how often it's been seen in production, the proposed fix, and a collapsed investigation. Each issue links to one or more Linear/Jira tickets and to the chats that worked on it.Code outside the prototype folder
Almost everything lives in
apps/sim/app/playground/org/. Two small, default-off hooks in real code let the dashboard renderer run on mock rows:hooks/queries/table-analytics.ts: an optionalTableAnalyticsSourceContextthat replaces the analytics endpoint. It's unused unless provided.components/dashboards/dashboard-preview.tsx: an optionaltitleslot, used for the dashboard switcher.If any of this graduates, it would be rebuilt properly, not merged from here.
🤖 Generated with Claude Code
https://claude.ai/code/session_01DeA8zbNdZMuB1MSNbcH6p6