Lewati ke konten utama
Versi: v0.0.73

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.

SliceWhat
V1Docked rail mounts on the right side of the project Layout. Collapsed shows an icon + session count.
V1.1Main content reflows to leave room for the dock — no overlap.
V1.2Drag-resize the dock width (280–600 px). Width persists per user in localStorage.
V1.3Cross-pane jump — clicking a session row navigates to its canonical primary asset (workstream_kind/recipes / /dashboards / /agents).
V1.4Unread 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.5Thread-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.6In-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 designerdashboard.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_bucket UPDATE — same :bind::cast class 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).