Skip to content

v0.1.7 — layered data model + test resilience

Choose a tag to compare

@db-tycoon-stephen db-tycoon-stephen released this 26 May 13:57
· 22 commits to main since this release
f828776

Tycoon v0.1.7

Released: 2026-05-25

Headline

v0.1.7 is the layered-architecture release. Tycoon learns the
canonical analytics-warehouse mental model — sources → staging →
intermediate → marts — and surfaces it consistently across the CLI.

The themes worth opening with:

  • Layer-aware data model. A new tycoon.layers module classifies
    every table tycoon knows about (raw schemas from dlt + Fivetran,
    dbt models from the manifest) into a typed Layer enum. dbt-side
    classification flows from the manifest using folder convention
    (models/staging/, models/intermediate/, models/marts/) with
    per-model meta.tycoon_layer and per-folder +meta.tycoon_layer
    overrides. Ingestion-side classification flows from the existing
    sources: block (dlt) and the Fivetran Metadata API. No new
    tycoon.yml block — classification authority lives in the tools
    that own the objects.

  • tycoon data status becomes the layered view. The Fivetran and
    dlt panels collapse into a unified Sources layer, joined by
    Staging, Intermediate, and Marts panels. Projects without
    dbt still see all four panels — the non-source ones show empty
    states with active hints (no dbt project — set up via tycoon register dbt).
    One command, one mental model.

  • Knock-on layer awareness. tycoon semantics scaffold switches
    from prefix-pattern mart matching to tycoon.layers.list_marts().
    tycoon doctor adds a "every source has a staging model" health
    check. tycoon data history learns to filter by layer.

  • Test resilience second wave. Closes #39 (umbrella) and
    #41 (snapshot harness for Rich-rendered CLI output). Pairs
    with #44 — non-interactive flags on tycoon data sources add
    unblock the README PokéAPI quickstart from being run as an online
    recipe doctest.

Acceptance criteria — see #30

Migration notes

No breaking changes. Every behaviour change is either additive or has
a graceful fallback.

tycoon data status

The output shape changed. Old (v0.1.6):

                Sources
┃ Name     ┃ Type    ┃ Last loaded ┃ Runs ┃
│ pokeapi  │ rest_api │ 12m ago     │ 3    │

New (v0.1.7): four panels — Sources, Staging, Intermediate,
Marts. The Sources panel adds a Vendor column (dlt /
fivetran) and unifies what were previously two separate panels.
Projects without dbt still see all four panels with empty-state
hints pointing at tycoon register dbt.

If you parsed the old text output with grep or awk, those
patterns will need updating. The data underneath (raw.duckdb and
metadata.duckdb) is unchanged — tycoon data history and direct
SQL queries against the metadata DB work the same as before.

tycoon semantics scaffold

Mart discovery changed from prefix matching (mart_* / fct_* /
dim_* / obt_*) to dbt manifest classification. No CLI change;
the same tycoon semantics scaffold invocation produces the same
output file at the same path.

The change is visible only in edge cases:

  • Tables with mart-shaped names in models/staging/ (e.g.
    fct_legacy you forgot to rename) are no longer scaffolded as
    marts. They classify as staging via the manifest.
  • Tables with non-conventional names in models/marts/ (e.g.
    orders_summary) are now scaffolded as marts. Previously they
    were invisible.
  • When no dbt manifest exists yet (dbt compile never run), the
    scaffolder falls back to prefix matching with a clear warning so
    unmigrated projects keep working.

To override the folder convention (e.g. models/published/ instead
of models/marts/), add +meta.tycoon_layer: mart to the relevant
models: block in dbt_project.yml. See layered architecture
recipe
.

tycoon doctor

Adds one new non-fatal row (layer coverage). Skips silently for
transformation: none projects, so v0.1.6 users see no behaviour
change.

Auto-scaffolded observability models

If you've run tycoon data observability scaffold (or accepted the
auto-scaffold during init), the existing stg_tycoon__* and
dim_runs models now carry a tycoon dbt tag. Existing dbt runs
keep working; the only difference is you can now skip them with
dbt run --exclude tag:tycoon when iterating on business logic.

tycoon data sources add

The interactive flow is unchanged. New optional flags
(--no-prompt, --name, --schema, --base-url, --resources,
--connection-string, --path, --config, --force) let you
skip prompts entirely — designed for CI / scripted bootstrap.

Out of scope (deferred)

  • Visual lineage rendering. Deferred to a later issue once the
    layered data model is stable.
  • Cross-project source registry. Single project for v1.
  • Multi-warehouse classification. Single warehouse for v1.
  • Layer-granular backup config. backup.layers: [marts, intermediate]
    deferred to v0.1.8 (#31) — v0.1.7 ships with the simpler
    backup.skip_raw: bool shape.