v0.0.63 — Vision in chat + Cobuild docked rail
Released: 2026-05-12.
Vision in dashboard chat
The dashboard chat panel now accepts screenshots as part of a turn. Paste an image (Cmd/Ctrl+V) or attach via the paperclip icon; the chat forwards it as a data-URL and forces a vision-capable model (openai:gpt-4o) for that turn. Useful for "make my dashboard look like this Figma mockup" or "here's a Tableau screenshot, port it".
Same AIChatRequest.image plumbing the v0.0.59 /generate endpoint uses — single surface, consistent UX.
Cobuild docked rail
Cobuild moves from a sidebar-page-only surface to a persistent right-rail dock visible from every project page. Users can build assets in the background without leaving their current pane.
| Slice | What |
|---|---|
| V1 | Docked rail mounts on the right side of the project Layout. Collapsed shows an icon + session count. |
| V1.1 | Main content reflows to leave room for the dock — no overlap. |
| V1.2 | Drag-resize the dock width (280–600 px). Width persists per user in localStorage. |
| V1.3 | Cross-pane jump — clicking a session row navigates to its canonical primary asset (workstream_kind → /recipes / /dashboards / /agents). |
| V1.4 | Unread badge — red dot on the collapsed icon (and per-row indicator on the expanded list) when any thread in any session is awaiting_approval. Backed by a 30 s session-list poll. |
| V1.5 | Thread-level cross-pane nav — multi-thread sessions get a chevron toggle; expanding lists each thread with a ↗ link to its primary asset. Click a thread title to open it deep-linked. |
| V1.6 | In-dock chat editing — click a session row to open the full Cobuild chat surface inline in the dock. CobuildSurface extracted from CobuildPage; same component renders in both places. The project page underneath stays put. This is the Dataiku-style "build while you work" flow. |
Backend: list_sessions adds an awaiting_approval_count correlated subquery per session.
See the Cobuild page for the concept guide.
Designer-role parity in dashboards
role='designer' now reaches every dashboard operation a non-owner editor can — the v0.0.54 RBAC migration left a couple of dashboard surfaces still gated against the legacy ("admin", "editor") tuple. After v0.0.63, designers can:
- Save layout (PATCH
/layout) - Add/remove/update cards
- Run AI-chat mutations
Same gate as the rest of the migrated surface: require_permission("dashboard.edit", "dashboard_id") with the implicit-grant shim mapping designer → dashboard.edit org-wide.
CHECK constraint drop on card_type
The flow_recipes.card_type CHECK constraint was too narrow — adding new card types (e.g. metric_grid_inline) required a migration. The constraint is dropped; the value is now validated in application code (services/cards.py:VALID_CARD_TYPES) where new entries are a one-line tuple change.
Mockup-to-dashboard hardening
A grab-bag of fixes uncovered while building a dashboard from a Figma mockup end-to-end:
- Designer parity in dashboards (above) — designers couldn't save layout changes.
- Bind-leak in
width_bucketUPDATE — same:bind::castclass as the v0.0.62 pgvector fix. - Chrome-less validation — mock cards no longer fail SQL validation when their SQL is intentionally blank.
- CHECK drop on
card_type(above).
pgvector bind-leak fix
Same bind-leak class as the v0.0.62 dashboards width_bucket bug: :vec::vector tripped SQLAlchemy's bind regex. Four sites in connectors/postgresql.py (one embedding INSERT, three in the cosine-search SELECT) flipped to CAST(:vec AS vector). Defense in depth: the paas/tests/unit/test_sql_cast_after_bind.py lint added in v0.0.61 is still green — nothing left.
CI hardening
CircleCI Nuitka builds had drifted: v0.0.62 built in 21 min, v0.0.63 took ~2 h on the same code surface because pip install -q nuitka resolved to a newer point release with broader follow-set heuristics. Pinning Nuitka to 4.0.8 (the actual version that shipped working v0.0.62) restores reproducibility. google.protobuf.descriptor_pb2 joins sqlglot / chromadb / faiss in the Nuitka exclude list (single 1864-line generated module that OOM-killed gcc).