Skip to main content
A canonic project backed by the classic dbt Jaffle Shop dataset, demonstrating canonic’s full Phase 1 feature set with a dbt manifest that includes MetricFlow semantic models and metrics: not just table/column evidence.

Schema

Setup

Bundled DuckDB file: no server, no credentials.

Quickstart

canonic status, canonic ingest --bootstrap, canonic query, and canonic mcp start never call the LLM: every table here has a declared primary key, so grain is inferred deterministically. CANONIC_LLM_API_KEY and llm: in canonic.yaml only matter if you point canonic at a schema with undeclared keys, where low-confidence grain-drafting falls back to the model.

What canonic extracts from the dbt manifest

The jaffle_dbt connection parses manifest.json (schema v11, dbt 1.7, MetricFlow) as modeling-tier evidence, which ranks higher than live DuckDB introspection during reconciliation:
target_connection is what makes this a companion to jaffle_duckdb rather than an independent source: it attributes the dbt-derived evidence to jaffle_duckdb’s connection id, so it enriches semantics/jaffle_duckdb/*.yaml instead of proposing separate, same-named files under semantics/jaffle_dbt/ (see Connectors). From the manifest, canonic extracts:
  • 5 model nodesRelationSchema with named columns, types, primary keys, and foreign-key paths.
  • 2 semantic models → entity (grain), foreign-join paths, named measure and dimension definitions.
  • 3 metricsrevenue, order_count, units_sold.
Because MetricFlow’s semantic models name measures explicitly, the resulting semantic sources in semantics/jaffle_duckdb/ carry business-meaningful measure names (revenue, order_count) rather than generic inferred ones (total_amount, row_count), the clearest illustration in these examples of why modeling-tier evidence outranks raw introspection.

Metrics

contracts/metrics/ ships 8 metric contracts. Three are the canonical showcase bindings straight from the dbt manifest’s MetricFlow metrics. The rest are supporting ratio and count metrics the bootstrap also drafted from the same manifest. No guardrails or assertions ship in this example.

Regenerating the artifacts

Clones the upstream dbt-labs/jaffle-shop, runs dbt build with dbt-duckdb, and copies the resulting database and manifest back into the example directory.