Lewati ke konten utama
Versi: v0.0.66

v0.0.64 — Project Home

Released: 2026-05-12.

Project Home page

Clicking a project from the project list used to drop you straight into the 1,761-line Flow Builder. v0.0.64 introduces a home page first at the bare /projects/:projectSlug route — a Dataiku-style landing surface that orients the user before the heavy authoring views.

What lands on the home page

  • Header — project name, description, icon. The icon accepts emoji or short-name aliases (folder → 📁, chart → 📊) and falls back to a default diamond.

  • 8-tile surfaces grid — Flow / Lineage / Datasets / Recipes / Dashboards / Cobuild / Agents / Settings. Each tile is a project-scoped link, with asset-typed tiles (Datasets / Recipes / Dashboards / Agents) showing live counts.

  • Mini Flow DAG — a reactflow widget between the header and the surfaces grid, lazy-loaded with a 20-node cap. Nodes are clickable and route to their detail page:

    • dataset → /projects/{slug}/datasets/{name}
    • recipe → /projects/{slug}/recipes/{name}
    • dashboard → /projects/{slug}/dashboards/{id}
    • agent → /projects/{slug}/agent-builder/{id}

    Each node carries an emoji kind badge (📋 dataset, ⚗️ recipe, 📊 dashboard, 🤖 agent) and the widget exposes an Open in Flow → link to the full Flow Builder. (The earlier "View full lineage →" link pointed at the dbt Lineage Explorer, which only sees dbt models — confusing on a project with dashboards/agents but no dbt.)

  • Recent Cobuild sessions strip — last few sessions for the project, scoped to the URL project (not the JWT, see security fix below).

Pinned tiles

Users can pin any of the 8 tiles via a ☆ button (top-right on hover, solid ★ when pinned). Pinned tiles render in a Pinned row above the main grid; the main grid relabels to More surfaces and shows the unpinned remainder.

Persistence: one JSONB row per (user, project) in honeyframe.user_project_prefs, with free-form shape so future prefs (dismissed banners, density toggle) fold in without further migrations. GET / PUT /api/projects/{id}/preferences are gated by check_project_access — a caller cannot enumerate project existence via 200-vs-404 timing on a project they don't belong to.

Endpoints

EndpointDescription
GET /api/projects/{id}/summary{datasets, recipes, dashboards, agents} counts. Four parallel COUNT(*)s, 403-gated.
GET /api/lineage/project-graph?project_id=XSlim nodes + edges graph (5 fields per node vs ~50 from /api/lineage/dag). Edges inferred from flow_recipes.inputs / output_datasets.
GET / PUT /api/projects/{id}/preferencesPer-user pinned tiles.

Cobuild session list now scopes to URL project

Bug observed 2026-05-12 on the new home page: navigating to /projects/<slug-B> rendered project A's Cobuild sessions in the "Recent Cobuild sessions" strip. Root cause — GET /api/cobuild/sessions read project_id from the JWT's legacy "active project" stamp, so the list didn't follow when the URL did.

Fixed: the endpoint now accepts an optional ?project_id= query param. When supplied, the caller is validated via check_project_access and the org_id is pulled from the project row (not the JWT — superadmins routinely cross orgs and the JWT lags the URL). Without the param, the endpoint falls back to JWT-scoped resolution for back-compat with the F13 dock and older callers.

Project switcher navigates to project home

Before: clicking a different project in the ProjectPill dropdown called window.location.reload() — but the URL still pointed at the old project's slug. On reload the slug-sync re-resolved the old slug and stamped localStorage back to the old project_id. The dropdown looked dead.

Fixed: the switcher now window.location.assign(/projects/<new-slug>) — the address bar moves to the picked project's home before the navigation reload, so the new URL is what slug-sync sees, and the v0.0.64 home page renders URL-scoped data for the new project.

Backend dep pins

Twenty heavy backend deps (anthropic, boto3, chromadb, croniter, dbt-duckdb, dbt-postgres, deltalake, duckdb, email-validator, faiss-cpu, google-analytics-data, google-cloud-bigquery, google-cloud-storage, openpyxl, oss2, pyarrow, pymongo, reportlab, snowflake-connector-python) are now pinned to the versions resolved on the v0.0.63 known-good install. The Nuitka module follow tree had drifted from 186 modules (v0.0.62) to 218 modules (v0.0.63) — a 17% jump driven by >= floors letting each CircleCI build resolve a fresh "latest" within constraint. The drift invalidates ccache locality and was an input to the recent v0.0.63 build slowdowns. Bumps are now deliberate, one release at a time.

CI fix — docs job docusaurus binary

v0.0.63 build #34 failed at "Validate portal build" with sh: 1: docusaurus: not found. The Cut Docusaurus snapshot step only ran npm ci when versioned_docs/version-<v> didn't yet exist; on re-runs of the same tag the install was skipped, leaving the local docusaurus binary missing. npm ci --silent now runs unconditionally above the snapshot conditional.