Root, billing, or workspace context errors
Symptoms
CLI reports invalid root, missing workspace, or path mismatch.
Fix sequence
looky login https://my.looky.studio <local_root>
looky whoami
cd <local_root>
looky billing list
looky billing use <billing_account_id>
cd <local_root>/<billing_account_id>/<workspace_slug>
looky status
Run billing commands from <local_root> and workspace commands from workspace root.
Validation fails before push
Symptoms
looky validate reports model, visualization, or dashboard issues.
Fix order
- Fix source alias/runtime config issues first.
- Fix model query definitions and names.
- Fix visualization
queryandmappingreferences. - Fix dashboard item references and filters.
- Re-run
looky validateuntil no blocking errors remain.
Push succeeded but dashboard is wrong or missing
Symptoms
Dashboard not visible, empty, or inconsistent with expected output in my.looky.studio.
Fix sequence
looky status
looky diff
looky push
looky list visualizations
looky list dashboards
Then reload UI. If dashboard still fails, confirm visualization ids referenced in dashboard YAML exactly match published visualization ids.
Source/runtime mismatch
Symptoms
Models cannot resolve tables or data source behavior differs unexpectedly.
Fix sequence
looky sources diff
looky sources list
looky validate
Ensure aliases used in models exactly match aliases defined in runtime/sources.runtime.yml.
Do not patch source failures per model. Correct the runtime source config once, then keep model logic focused on analytics semantics.
Recovering from a bad push
Disaster recovery is the caller's responsibility. The cleanest forward path is to fix the offending file locally and push again. To revert to a prior state, you need that prior state on your laptop — keep the workspace in git, or rely on the local .bk/<timestamp>/ snapshot that looky pull writes inside your local workspace whenever it overwrites a file.
The local .bk/ is plain files sitting next to your workspace — copy them back into place and run looky push to restore that state on the server.
Reading validation error codes
Every validation error or warning carries a stable code prefix. The prefix tells you which gate fired and which file family it concerns:
WS*** — issues inworkspace.yml(missing fields, identifier shape, billing-account reference).RT*** — issues inruntime/sources.runtime.yml(source type missing or unsupported, missingcredentials_file, missingdsnfor postgres/mysql, credentials file not found on disk undersecrets/). Often warnings rather than blocking errors.MD*** — issues in model files (unknown source alias, model file outsidecontent/, file unreadable).VZ*** — visualization YAML structural issues (missing required fields, malformed query reference, duplicate id).VZ020andVZ021specifically flagchart.*properties that violate the typed schema for the viz type.DB*** — dashboard YAML issues (layout_modeoutsidefluid_grid/document, references to unknown visualizations, duplicate ids).EX*** — export YAML issues (cron format, unknown dashboard reference, duplicate ids).MR*** — errors raised by the server when running validation against the live runtime:MR000— failed to load visualizations / dashboards / sources.MR001— Malloy compile / parse / syntax error, or any other failure surfaced by the query engine. The line that follows the code starts withMalloy service HTTP <status>:and carries the engine's specific error. See "Engine error messages under MR001" below for the common ones.MR002— field or query name referenced in a query is not defined in the Malloy source.MR003— model references an unknown source alias.MR004— schema introspection failed (cannot read schema for relation).MR005— query engine unreachable.MR006— query engine timed out — split the workspace if it is unusually large.MR008— model file missing or outsidecontent/.MR009— generic precheck failure.MR010— source unreachable from the connectivity probe (checklooky push --settingsran with current credentials).
Local codes (WS / RT / MD / VZ / DB / EX) come from the local check the CLI runs before contacting the server. Server codes (MR* and VZ020 / VZ021 emitted by the server) come from the validation run against the live runtime. See Publish for the full flow.
Engine error messages under MR001
MR001 reports anything the query-engine refuses, prefixed with Malloy service HTTP <status>:. The trailing message identifies the specific cause and points at the fix:
HTTP 400 — unsupported_model_shape— the model is missing the strict shape every Looky model needs: the##! experimental.parameterspragma at the top of the file, plus parentheses on the source declaration (source: name() is …, even when the source takes no parameters). Add both and re-validate. See Models.HTTP 400 — unbound_param— the model uses a raw-SQL@paramplaceholder that has no matching declaration on the source signature. The error names the missing parameter; declare it inside the source parentheses, e.g.p_date_from::date is null. Common types:date,string,number,boolean.HTTP 400 — missing_sources_config— this workspace has no published settings yet. Runlooky push --settingsonce and validate again. See Publish.HTTP 400 — malformed_request— the CLI sent an invalid request body to the server. This is a CLI bug, not a model issue. Retry; if it persists, share the request id with your administrator.HTTP 500— an unexpected failure on the platform or your data source (BigQuery / Postgres / MySQL errors, timeouts). Check the request id, retry, and escalate if it persists.