Feat/dashboard json artifacts - #344
Merged
Merged
Conversation
The artifacts panel was a fixed 46 percent of the chat row. It now has a grab strip on its left edge: drag to widen or narrow it, double-click to return to the default, and the width is remembered per browser. The rules live in artifacts-panel-width.ts so they can be unit tested: a 360px minimum, and a maximum that always leaves a 420px transcript, both recomputed from the measured row so a stored wide value on a small window still leaves the transcript readable. The strip is also a keyboard separator, arrows step (Shift steps further) and Home and End snap to the bounds; key presses apply as intents against the live width so holding a key keeps stepping. Until the row has been measured the panel keeps its CSS width, so the first paint is unchanged. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Replace the governed, MCP-driven dashboard system with a single artifacts/<name>.dashboard.json file the agent writes in the chat sandbox. The existing file sweep syncs it; the artifacts panel renders it with a new shared ECharts renderer package. - signalpilot-plugin/skills/dashboard: JSON Schema (source of truth), skill, example dashboard. - notebook-server: dashboard_sample_data and dashboard_screenshot MCP tools (schema validation, dataset loading, shared row-prep and chart checks, screenshot via a Node CLI: ECharts SSR SVG + resvg, no browser). The five governed authoring tools, readiness probe, and prompt section are removed. - web/dashboard-renderer: DashboardRenderer (kpi, table, bar, line, area, pie, scatter; client-side filters; responsive 12-column layout) plus the print path and render-cli bundle used inside the notebook image. - web: new "dashboard" file kind, DashboardFileView in the artifacts panel, tool cards for the two new tools, fixture + Playwright spec; the old /dashboards pages, components, lib, and vendored Lightdash contract are deleted. - gateway: gateway/dashboard package, 31 routes, models, manage_dashboard MCP tool, and tests removed; migration 0027 drops the five gateway_dashboard* tables; connector dialects relocated under gateway/connectors; tool projections for the new tools. - Dockerfile.notebook: node stage builds the render CLI; final image gains the node binary, bundle, resvg, and DM Sans. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XfZZecsk7TeJvfaLxD2d3g
…ed refresh Milestone 2 of the dashboard rework. A chat dashboard file can be published into an org-scoped gallery, where it has its own URL, immutable versions, and a refresh schedule that re-produces its datasets. Gateway: new gateway/dashboards domain (schema, datasets, checks, storage, store, service, schedule, refresh, scheduler, serializers, prompts), /api/dashboards* and /api/shared-dashboards routes, the publish route under the chat file API, migration 0028 (published dashboards, versions, refreshes), and a replica-safe scheduler tick. Refresh runs in sql mode through the governed query executor or in agent mode as a seeded chat run; either validates against the spec before swapping the live version, with compare-and-set terminal writes and stale-row sweeps. Background loops move out of main.py into gateway/background. Web: /dashboards gallery, /dashboards/[slug] page (live filters, Refresh now with polling, settings drawer for interval/anchor time/timezone/mode/ visibility/notifications, version history with restore and dataset downloads, refresh history), /dashboards/shared/[token], the Publish dialog in the chat artifacts panel, a fixture harness at /dashboards/test, and Playwright coverage. Sidebar nav icons and groups split into their own modules. Notebook-server: the screenshot tool sends only the prepared rows of the requested charts, bounds the payload, and reports unknown_chart and payload_too_large in the contract envelope. The empty artifact collector leftover is removed. The notebook image smoke-tests the render CLI in its final layer. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XfZZecsk7TeJvfaLxD2d3g
The thinking indicator seeded its opening phrase from a module counter, so the server and the client painted different text and React discarded the server tree on hydration. The first render now always shows the first phrase; the per-mount offset is applied in an effect. The replay artifact spec expected the pre-dashboard fixture file count. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XfZZecsk7TeJvfaLxD2d3g
The file card shrank as a flex child of the scroll container and clipped its content, so a dashboard taller than the panel could not be scrolled. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XfZZecsk7TeJvfaLxD2d3g
…m only Everything stays behind the organization login. The share-token route, the share page, the Share action, and the share_token column are removed (migration 0029 rewrites any link rows to org and drops the column). The API rejects visibility "link" with 422. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XfZZecsk7TeJvfaLxD2d3g
Staging's governed-dashboard fixes (MSSQL relation normalization, dbt context without metric approvals, confirm_dashboard_custom_sql) apply to code this branch removes; the removal wins. Everything else merges cleanly. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XfZZecsk7TeJvfaLxD2d3g
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Drop the tests that only asserted retired tool names are absent, rename a temp-dir prefix that still said dashboard-authoring, reword renderer provenance comments that cited a deleted vendored path, and narrow the new packages' export surface to what other modules actually use. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XfZZecsk7TeJvfaLxD2d3g
This was referenced Sep 8, 2026
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.
No description provided.