The only workflow order that scales
Looky is deterministic when you build in this order. If you invert steps, you get ambiguous failures and slow delivery.
- Workspace structure and context are correct.
- Runtime source aliases are defined and valid.
- Malloy models expose stable, idiomatic query contracts (semantic layer, named views — not ad hoc SQL scattered across viz YAML).
- Visualizations map query fields to renderers.
- Dashboards compose validated visualizations.
- Validate, diff, push, and verify in UI.
The canonical chain inside a workspace
Every Looky workspace is the same four layers, in this dependency order — read your own workspace files in this order whenever you need to debug or extend it:
runtime/sources.runtime.ymldeclares source aliases (e.g. an aliasecommercepointing at a BigQuery dataset, or a Postgres / MySQL connection string).content/models/*.malloydefines reusable dimensions, measures, and named queries on top of those source aliases.content/visualizations/*.ymlbinds one model query to one chart/table renderer.content/dashboards/*.ymlcomposes visualizations into the final surfaces the audience sees.
Each layer references only the one above it. If a layer fails to validate, fix it before touching anything below — the layers below cannot recover on their own.
Builder loop you should run every day
cd <local_root>/<billing_account_id>/<workspace_slug>
looky status
looky validate
looky diff
looky push
looky list visualizations
looky list dashboards
Run this loop for every meaningful change. It catches structural issues before users see broken dashboards.
Definition of done for a content change
looky validatehas no blocking errors.looky diffonly shows intended files.looky pushsucceeds on target workspace.- Dashboard is visible and renders correctly in
https://my.looky.studio.