From 2036e6b5bfc92516175f4fa5d0047476da887316 Mon Sep 17 00:00:00 2001 From: Kevin Longe <273747162+kvlonge@users.noreply.github.com> Date: Fri, 25 Sep 2026 13:15:57 +0100 Subject: [PATCH 01/27] docs: add sqlbuild.com landing page --- website/README.md | 11 + website/assets/fonts/LICENSE-DejaVu.txt | 78 ++ .../assets/fonts/LICENSE-IBM-Plex-Mono.txt | 93 +++ website/assets/fonts/LICENSE-Inter.txt | 93 +++ .../fonts/dejavu-sans-mono-diagram.woff2 | Bin 0 -> 12380 bytes .../ibm-plex-mono-latin-400-normal.woff2 | Bin 0 -> 14708 bytes .../ibm-plex-mono-latin-500-normal.woff2 | Bin 0 -> 14888 bytes .../fonts/inter-latin-wght-normal.woff2 | Bin 0 -> 48256 bytes website/assets/icon.png | Bin 0 -> 24874 bytes website/assets/og-icon.png | Bin 0 -> 341989 bytes website/index.html | 439 +++++++++++ website/styles.css | 692 ++++++++++++++++++ 12 files changed, 1406 insertions(+) create mode 100644 website/README.md create mode 100644 website/assets/fonts/LICENSE-DejaVu.txt create mode 100644 website/assets/fonts/LICENSE-IBM-Plex-Mono.txt create mode 100644 website/assets/fonts/LICENSE-Inter.txt create mode 100644 website/assets/fonts/dejavu-sans-mono-diagram.woff2 create mode 100644 website/assets/fonts/ibm-plex-mono-latin-400-normal.woff2 create mode 100644 website/assets/fonts/ibm-plex-mono-latin-500-normal.woff2 create mode 100644 website/assets/fonts/inter-latin-wght-normal.woff2 create mode 100644 website/assets/icon.png create mode 100644 website/assets/og-icon.png create mode 100644 website/index.html create mode 100644 website/styles.css diff --git a/website/README.md b/website/README.md new file mode 100644 index 0000000000..dcbff1c10e --- /dev/null +++ b/website/README.md @@ -0,0 +1,11 @@ +# sqlbuild.com + +A single static page with no build step or dependencies. The fonts are self-hosted under `assets/fonts/`, each with its licence. + +Preview it locally: + +```bash +python3 -m http.server 8000 --directory website +``` + +Terminal examples come from `sqb playground waffle-shop` output, trimmed to the relevant lines. Step 01's compile output is a placeholder until compile reports unknown columns and type mismatches. diff --git a/website/assets/fonts/LICENSE-DejaVu.txt b/website/assets/fonts/LICENSE-DejaVu.txt new file mode 100644 index 0000000000..b3d93a1235 --- /dev/null +++ b/website/assets/fonts/LICENSE-DejaVu.txt @@ -0,0 +1,78 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: DejaVu fonts +Upstream-Author: Stepan Roh (original author), + see /usr/share/doc/fonts-dejavu-core/AUTHORS for full list +Source: https://dejavu-fonts.github.io/ + +Files: * +Copyright: Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. + Bitstream Vera is a trademark of Bitstream, Inc. + DejaVu changes are in public domain. +License: bitstream-vera + Permission is hereby granted, free of charge, to any person obtaining a copy + of the fonts accompanying this license ("Fonts") and associated + documentation files (the "Font Software"), to reproduce and distribute the + Font Software, including without limitation the rights to use, copy, merge, + publish, distribute, and/or sell copies of the Font Software, and to permit + persons to whom the Font Software is furnished to do so, subject to the + following conditions: + . + The above copyright and trademark notices and this permission notice shall + be included in all copies of one or more of the Font Software typefaces. + . + The Font Software may be modified, altered, or added to, and in particular + the designs of glyphs or characters in the Fonts may be modified and + additional glyphs or characters may be added to the Fonts, only if the fonts + are renamed to names not containing either the words "Bitstream" or the word + "Vera". + . + This License becomes null and void to the extent applicable to Fonts or Font + Software that has been modified and is distributed under the "Bitstream + Vera" names. + . + The Font Software may be sold as part of a larger software package but no + copy of one or more of the Font Software typefaces may be sold by itself. + . + THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, + TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME + FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING + ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF + THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE + FONT SOFTWARE. + . + Except as contained in this notice, the names of Gnome, the Gnome + Foundation, and Bitstream Inc., shall not be used in advertising or + otherwise to promote the sale, use or other dealings in this Font Software + without prior written authorization from the Gnome Foundation or Bitstream + Inc., respectively. For further information, contact: fonts at gnome dot + org. + +Files: debian/* +Copyright: (C) 2005-2006 Peter Cernak + (C) 2006-2011 Davide Viti + (C) 2011-2013 Christian Perrier + (C) 2013 Fabian Greffrath +License: GPL-2+ + This program is free software; you can redistribute it + and/or modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later + version. + . + This program is distributed in the hope that it will be + useful, but WITHOUT ANY WARRANTY; without even the implied + warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the GNU General Public License for more + details. + . + You should have received a copy of the GNU General Public + License along with this package; if not, write to the Free + Software Foundation, Inc., 51 Franklin St, Fifth Floor, + Boston, MA 02110-1301 USA + . + On Debian systems, the full text of the GNU General Public + License version 2 can be found in the file + /usr/share/common-licenses/GPL-2'. diff --git a/website/assets/fonts/LICENSE-IBM-Plex-Mono.txt b/website/assets/fonts/LICENSE-IBM-Plex-Mono.txt new file mode 100644 index 0000000000..83eac8278b --- /dev/null +++ b/website/assets/fonts/LICENSE-IBM-Plex-Mono.txt @@ -0,0 +1,93 @@ +Copyright 2017 IBM Corp. All rights reserved. IBMPlexMono-ThinItalic.ttf: Copyright 2017 IBM Corp. All rights reserved. IBMPlexMono-ExtraLight.ttf: Copyright 2017 IBM Corp. All rights reserved. IBMPlexMono-ExtraLightItalic.ttf: Copyright 2017 IBM Corp. All rights reserved. IBMPlexMono-Light.ttf: Copyright 2017 IBM Corp. All rights reserved. IBMPlexMono-LightItalic.ttf: Copyright 2017 IBM Corp. All rights reserved. IBMPlexMono-Regular.ttf: Copyright 2017 IBM Corp. All rights reserved. IBMPlexMono-Italic.ttf: Copyright 2017 IBM Corp. All rights reserved. IBMPlexMono-Medium.ttf: Copyright 2017 IBM Corp. All rights reserved. IBMPlexMono-MediumItalic.ttf: Copyright 2017 IBM Corp. All rights reserved. IBMPlexMono-SemiBold.ttf: Copyright 2017 IBM Corp. All rights reserved. IBMPlexMono-SemiBoldItalic.ttf: Copyright 2017 IBM Corp. All rights reserved. IBMPlexMono-Bold.ttf: Copyright 2017 IBM Corp. All rights reserved. IBMPlexMono-BoldItalic.ttf: Copyright 2017 IBM Corp. All rights reserved. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/website/assets/fonts/LICENSE-Inter.txt b/website/assets/fonts/LICENSE-Inter.txt new file mode 100644 index 0000000000..40589daa9d --- /dev/null +++ b/website/assets/fonts/LICENSE-Inter.txt @@ -0,0 +1,93 @@ +Copyright 2016 The Inter Project Authors (https://github.com/rsms/inter) Inter-Italic[opsz,wght].ttf: Copyright 2016 The Inter Project Authors (https://github.com/rsms/inter) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/website/assets/fonts/dejavu-sans-mono-diagram.woff2 b/website/assets/fonts/dejavu-sans-mono-diagram.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..de6e29f14f0c5d6b2a0e948aaabac07a73ad5270 GIT binary patch literal 12380 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%0DiJ2EOCC_ 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 Ok?sOt{%}m6E@=R`r0ezo literal 0 HcmV?d00001 diff --git a/website/assets/fonts/ibm-plex-mono-latin-400-normal.woff2 b/website/assets/fonts/ibm-plex-mono-latin-400-normal.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..0804aaff92260b5359330f63e05b9ac25ccabeee GIT binary patch literal 14708 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∾Na#*TBTU(!jF?9zmR-!C*+RdvGrd0&{`| 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

m38M;o7x%CPqoD-7bJa8Ae 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 z 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 literal 0 HcmV?d00001 diff --git a/website/index.html b/website/index.html new file mode 100644 index 0000000000..16c3ccefbe --- /dev/null +++ b/website/index.html @@ -0,0 +1,439 @@ + + + + + + SQLBuild · The refactorable warehouse + + + + + + + + + + + + +

+ +
+
+

Free and open source · Apache-2.0

+

The refactorable warehouse

+

Verify early, test properly, and refactor safely.

+

+ Change your warehouse as often as your code. SQLBuild brings compile-time checks, tests and diffs to + your SQL, so change is safe. +

+
+
+ $ pip install sqlbuild + +
+ Read the docs + View on GitHub +
+
+ +
+
+
+

Why warehouses resist change

+
+
+
+

Valid isn't the same as correct

+

SQL can run cleanly and still return the wrong number.

+
+
+

Lessons get forgotten

+

Hard-won rules live in review comments, until someone misses one.

+
+
+

Code review can't see the data

+

A pull request shows what the SQL changed, not what the numbers did.

+
+
+

Names are tied to data

+

Rename an incremental model and you rebuild its history from scratch.

+
+
+
+
+ +
+
+
+

One refactor, start to finish

+

+ Rewrite a few models, rename an incremental rollup and move a model between folders. Each step + catches something the one before it can't. +

+
+ +
+

Before anything runs

+
+
+ 01 · Verify early +

Catch errors before anything runs

+

+ + Every column is bound and every type checked, offline. A missing column fails in seconds, pointing at the line. +

+
+ +
sqb compile
+error[B101]: column 'qty' does not exist in stg_orders
+  --> models/marts/fact_orders.sql:16:3
+     |
+  16 |   o.qty,
+     |   ^^^^^
+  = help: stg_orders has order_id, customer_id, waffle_type_id, quantity, ordered_at, status
+
+error[B201]: cannot compare TIMESTAMP with INTEGER
+  --> models/staging/stg_orders.sql:27:7
+     |
+  27 | WHERE ordered_at > 5
+     |       ^^^^^^^^^^^^^^
+  = help: ordered_at is TIMESTAMP; compare it with a TIMESTAMP value
+
+✗ Project compiled  12 models, 1 seed, 2 functions, 2 errors, 0 warnings
+
+ +
+
+ 02 · Make lessons permanent +

Turn review comments into compile errors

+

+ + A few lines of Python turn a review comment into a compile error, for people and agents alike. Here a mart reads a raw source directly. +

+
+
# rules/layers.py
+@rule(
+    code="XSQBRARCH001",
+    message="Marts must read sources through staging",
+    remediation="Reference a staging model with __ref() instead.",
+)
+def marts_use_staging(*, model: Model, ctx: RuleContext) -> list[Finding]:
+    layer = ctx.project.tree.relative_parts(path=model.path, under="models")[0]
+    sql = ctx.sql.for_model(model).authored.source
+    if layer != "marts" or "__source(" not in sql:
+        return []
+    line = sql[: sql.index("__source(")].count("\n") + 1
+    return [ctx.finding(subject=model, line=line)]
+
+sqb compile
+error[XSQBRARCH001]: Marts must read sources through staging
+  --> models/marts/daily_revenue.sql:24:1
+     |
+  24 | INNER JOIN __source("raw__payments") p ON o.order_id = p.order_id AND p.status = 'success'
+     | ^
+  = help: Reference a staging model with __ref() instead.
+
+ +
+
+ 03 · Move models safely +

Reorganise without breaking anything

+

+ + Declarations live next to the models that use them, and the compiler enforces who can see them. sqb scope shows what a move would break. +

+
+
models/marts/
+├── _sqlbuild/
+│   ├── _enums/                # "_" = visible only to models directly in marts/
+│   │   └── payment_status.sql
+│   └── _macros/
+│       ├── currency.py        # cents_to_dollars
+│       └── datetime.py        # timestamp_trunc
+└── daily_revenue.sql          # uses payment_status and cents_to_dollars
+sqb scope model:daily_revenue --as-path models/intermediate/daily_revenue.sql
+Move preview
+  Resource: model:daily_revenue
+  Destination: models/intermediate/daily_revenue.sql
+  Lost (3)
+    ├─ ● enum:payment_status     models/marts/_sqlbuild/_enums/payment_status.sql:1:1
+    ├─ ● macro:cents_to_dollars  models/marts/_sqlbuild/_macros/currency.py:4:1
+    └─ ○ macro:timestamp_trunc   models/marts/_sqlbuild/_macros/datetime.py:4:1
+  Invalidated usages (2)
+    - enum:payment_status
+    - macro:cents_to_dollars
+
+ +

Before production changes

+
+
+ 04 · Test properly +

Test the logic, not just the columns

+

+ + Tests mock the sources and check the result across every model in between. A dropped filter fails, so the table is left alone. +

+
+
-- tests/unit/test_daily_revenue_chain.sql (trimmed)
+TEST();
+
+WITH
+__source__raw__payments AS (
+  SELECT 10 AS id, 1 AS order_id, 2850 AS amount_cents, 'success' AS status
+  UNION ALL
+  SELECT 11 AS id, 2 AS order_id, 850 AS amount_cents, 'failed' AS status
+),
+__expected__daily_revenue AS (
+  SELECT
+    CAST('2026-04-01' AS DATE) AS revenue_date,
+    1 AS order_count,
+    2850 AS total_revenue_cents
+),
+__assert__daily_revenue_is_non_negative AS (
+  SELECT * FROM __ref("daily_revenue") WHERE total_revenue_cents < 0
+)
+SELECT 1
+
+sqb build --select daily_revenue
+test  test_daily_revenue_chain           FAIL
+├── expect  expected daily_revenue    FAIL  unexpected=1; missing=1
+│     differing column total_revenue_cents: actual=3700, expected=2850
+└── error   [T003] test 'test_daily_revenue_chain' failed
+✗ Completed with errors  PASS=0  FAIL=1  SKIP=1
+
+ +
+
+ 05 · Plan every change +

Know what will rebuild, and why

+

+ + sqb plan shows why each model will run and how much it will rebuild. A new column rebuilds 14 days, not the full history, because that's the replay window this model sets. +

+
+
sqb plan --select daily_order_rollup+
+Query changed (1)
+└── daily_order_rollup                 rebuild last 14d, add column
+    ├── policy  replay_on_change=bounded-14d
+    ├── schema diff:
+      + avg_order_cents   (added)
+    └── query diff:
+      @@ -2,6 +2,7 @@
+         SUM(waffles_ordered) AS waffles_ordered,
+      -  SUM(revenue_cents) AS revenue_cents
+      +  SUM(revenue_cents) AS revenue_cents,
+      +  SUM(revenue_cents) / NULLIF(SUM(orders_placed), 0) AS avg_order_cents
+       FROM __ref("hourly_order_activity")
+
+Upstream changed (1)
+└── hourly_activity_with_daily_context rebuild last 14d
+    └── cause  daily_order_rollup (query changed)
+
+ +
+
+ 06 · Compare real data +

See what the tests missed

+

+ + Tests only cover the cases someone wrote down. Here a tidy-up passed its build, but a customer disappeared and two lost an order. +

+
+
sqb diff prod:dev --select dim_customers --full
+Rows
+prod count             dev count
+    5       (-20.00%)      4
+
+┏━┯━┯━┯━┯━┓              ╭──┬──────────┬─────────╮
+┃-│-│-│-│-┃              │ 1│ prod only│ (20.00%)│
+┠─┼─┼─┼─┼─┨╌╌╌┏━┯━┯━┯━┯━┓├──┼──────────┼─────────┤╌╮
+┃ │ │ │ │ ┃ = ┃ │ │ │ │ ┃│ 2│ equal    │ (50.00%)│ │
+┠─┼─┼─┼─┼─┨╌╌╌┠─┼─┼─┼─┼─┨├──┼──────────┼─────────┤╌├╴  4  joined
+┃ │ │ │ │ ┃ ≠ ┃ │ │ │ │ ┃│ 2│ unequal  │ (50.00%)│ │
+┗━┷━┷━┷━┷━┛╌╌╌┗━┷━┷━┷━┷━┛├──┼──────────┼─────────┤╌╯
+                         │ 0│ dev only │  (0.00%)│
+                         ╰──┴──────────┴─────────╯
+Changed Columns
+┌─────────────────┬──────────────┬──────────────┐
+│ lifetime_orders │ mismatches=2 │ match=60.00% │
+└─────────────────┴──────────────┴──────────────┘
+lifetime_orders
+  - customer_id=2 | 2 -> 1
+  - customer_id=3 | 2 -> 1
+
+prod only
+  - customer_id=5
+
+ +

When production changes

+
+
+ 07 · Refactor safely +

Rename models without rebuilding history

+

+ + A renamed incremental model keeps its table instead of starting again. If the logic changed too, declare migrate_from. +

+
+
sqb plan
+Migrations (1)
+└── daily_order_rollup  migrate  dev.daily_activity_rollup -> dev.daily_order_rollup
+    ├── compatibility  compatible
+    ├── transfer  physical copy, promote by transactional rename
+    └── discovery  automatic
+
+
+

+ Real output from SQLBuild's example project, trimmed to the relevant lines. During a migration the old + table is never modified, and every move is recorded. + How migrations work +

+
+
+ +
+
+
+

Built for safe change

+

The rest of what it takes to change a warehouse with confidence.

+
+
+
+

Audits that block bad data

+

+ Full builds go to a staging table and only replace production if their audits pass. Incremental + batches are checked before they are written. +

+
+
+

Data contracts

+

+ Declare a model's columns and types. SQLBuild checks them at compile time, and again on the built + table before it replaces production. +

+
+
+

Column lineage

+

See where every column comes from and which models use it, worked out at compile time.

+
+
+

End-to-end scenarios

+

Run the real model graph against test data, then replay it locally on DuckDB in CI.

+
+
+

Incremental processing

+

Picks up from the last data actually written, with microbatches for large ranges.

+
+
+

Python in the same graph

+

Loaders, tasks, assets and checks run alongside your SQL models in one build.

+
+
+
+
+ +
+
+
+

Start simple

+

+ SQLBuild runs as a normal build tool. Its state lives in append-only tables in your warehouse, + next to your data. +

+
    +
  • No external state service, manifest files or account.
  • +
  • Try it locally on DuckDB, with no warehouse credentials.
  • +
  • Free and open source, with no paid tier.
  • +
  • Virtual environments for isolated previews and rollback, when you need them (alpha).
  • +
+
+ DuckDB + MotherDuck + Snowflake + BigQuery + Databricks + PostgreSQL + SQL Server +
+
+
pip install sqlbuild
+sqb playground waffle-shop
+cd waffle-shop
+sqb build
+✓ Completed successfully  PASS=95  FAIL=0
+sqb test
+
+
+ +
+
+

Change your warehouse like you change code

+

The docs cover models, testing, diffs, migrations and every command.

+ +
+
+
+ + + + + + diff --git a/website/styles.css b/website/styles.css new file mode 100644 index 0000000000..0d5b29f785 --- /dev/null +++ b/website/styles.css @@ -0,0 +1,692 @@ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 100 900; + font-display: swap; + src: url('assets/fonts/inter-latin-wght-normal.woff2') format('woff2'); +} + +@font-face { + font-family: 'IBM Plex Mono'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('assets/fonts/ibm-plex-mono-latin-400-normal.woff2') format('woff2'); +} + +@font-face { + font-family: 'IBM Plex Mono'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url('assets/fonts/ibm-plex-mono-latin-500-normal.woff2') format('woff2'); +} + +/* IBM Plex Mono has no box-drawing glyphs. DejaVu Sans Mono fills them in, and draws whole + diagrams so every cell has the same advance width. */ +@font-face { + font-family: 'SQLBuild Box Drawing'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('assets/fonts/dejavu-sans-mono-diagram.woff2') format('woff2'); + unicode-range: U+2500-259F, U+2260; +} + +@font-face { + font-family: 'SQLBuild Diagram'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('assets/fonts/dejavu-sans-mono-diagram.woff2') format('woff2'); +} + +/* Tokens mirror the SQLBuild UI theme so the site and the app read as one product. */ +:root { + color-scheme: light; + --radius: 2px; + --background: #ffffff; + --foreground: #171a1f; + --muted-foreground: #626a76; + --faint: #98a0ad; + --primary: #2677d9; + --primary-hover: #1f68c2; + --primary-foreground: #ffffff; + --panel: #ffffff; + --panel-border: rgba(28, 32, 38, 0.2); + --inner-line: rgba(28, 32, 38, 0.08); + --code-bg: #fbfcfe; + --code-fg: #2b3038; + --success: #16825c; + --warning: #aa6c16; + --error: #c74757; + --stale: #7756b9; + --accent-soft: rgba(38, 119, 217, 0.08); + --font-sans: 'Inter', system-ui, sans-serif; + --font-mono: 'IBM Plex Mono', 'SQLBuild Box Drawing', ui-monospace, monospace; +} + +:root[data-theme='dark'] { + color-scheme: dark; + --background: #0d0f12; + --foreground: #e9ebef; + --muted-foreground: #9ba1ac; + --faint: #626975; + --primary: #3788e8; + --primary-hover: #4f98ee; + --panel: #171a1f; + --panel-border: transparent; + --inner-line: rgba(176, 184, 198, 0.1); + --code-bg: #111418; + --code-fg: #c9cdd4; + --success: #54cf8e; + --warning: #f0c267; + --error: #f47089; + --stale: #a78bfa; + --accent-soft: rgba(55, 136, 232, 0.12); +} + +*, +*::before, +*::after { + box-sizing: border-box; +} + +html { + -webkit-text-size-adjust: 100%; + scroll-behavior: smooth; +} + +body { + margin: 0; + background: var(--background); + color: var(--foreground); + font-family: var(--font-sans); + font-size: 16px; + line-height: 1.6; + -webkit-font-smoothing: antialiased; +} + +a { + color: var(--primary); + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +code, +pre { + font-family: var(--font-mono); +} + +.wrap { + width: min(1140px, 100% - 48px); + margin: 0 auto; +} + +/* Header */ +.site-header { + position: sticky; + top: 0; + z-index: 10; + background: var(--background); + border-bottom: 1px solid var(--inner-line); +} + +.site-header .wrap { + display: flex; + align-items: center; + justify-content: space-between; + height: 60px; +} + +.brand { + display: inline-flex; + align-items: center; + gap: 10px; + color: var(--foreground); + font-weight: 650; + font-size: 18px; + letter-spacing: -0.01em; +} + +.brand:hover { + text-decoration: none; +} + +.brand img { + width: 26px; + height: 26px; +} + +.brand .sql { + color: var(--primary); +} + +.nav { + display: flex; + align-items: center; + gap: 22px; + font-size: 14px; +} + +.nav a { + color: var(--muted-foreground); +} + +.nav a:hover { + color: var(--foreground); + text-decoration: none; +} + +.theme-toggle { + display: inline-grid; + place-items: center; + width: 32px; + height: 32px; + padding: 0; + border: 1px solid var(--inner-line); + border-radius: var(--radius); + background: transparent; + color: var(--muted-foreground); + cursor: pointer; +} + +.theme-toggle:hover { + color: var(--foreground); +} + +.theme-toggle svg { + width: 16px; + height: 16px; +} + +.icon-sun { + display: none; +} + +:root[data-theme='dark'] .icon-sun { + display: block; +} + +:root[data-theme='dark'] .icon-moon { + display: none; +} + +/* Hero */ +.hero { + padding: 96px 0 72px; +} + +.eyebrow { + margin: 0 0 20px; + color: var(--muted-foreground); + font-size: 14px; +} + +.hero h1 { + margin: 0; + max-width: 14ch; + font-size: clamp(44px, 7vw, 76px); + font-weight: 700; + line-height: 1.02; + letter-spacing: -0.035em; +} + +.tagline { + margin: 24px 0 0; + font-size: clamp(20px, 2.4vw, 26px); + font-weight: 550; + letter-spacing: -0.015em; +} + +.lede { + max-width: 62ch; + margin: 20px 0 0; + color: var(--muted-foreground); + font-size: 18px; +} + +.actions { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 12px; + margin-top: 36px; +} + +.button { + display: inline-flex; + align-items: center; + height: 44px; + padding: 0 18px; + border: 1px solid var(--panel-border); + border-radius: var(--radius); + background: var(--panel); + color: var(--foreground); + font-size: 15px; + font-weight: 550; +} + +.button:hover { + text-decoration: none; + border-color: var(--faint); +} + +.button.primary { + border-color: var(--primary); + background: var(--primary); + color: var(--primary-foreground); +} + +.button.primary:hover { + border-color: var(--primary-hover); + background: var(--primary-hover); +} + +.install { + display: inline-flex; + align-items: center; + gap: 12px; + height: 44px; + padding: 0 8px 0 16px; + border: 1px solid var(--panel-border); + border-radius: var(--radius); + background: var(--code-bg); + font-family: var(--font-mono); + font-size: 14px; +} + +.install .prompt { + color: var(--faint); +} + +.copy { + height: 28px; + padding: 0 10px; + border: 1px solid var(--inner-line); + border-radius: var(--radius); + background: transparent; + color: var(--muted-foreground); + font-family: var(--font-sans); + font-size: 12px; + cursor: pointer; +} + +.copy:hover { + color: var(--foreground); +} + +/* Sections */ +section { + padding: 72px 0; + border-top: 1px solid var(--inner-line); +} + +.section-head { + max-width: 68ch; + margin-bottom: 40px; +} + +h2 { + margin: 0; + font-size: clamp(28px, 3.4vw, 38px); + font-weight: 680; + line-height: 1.15; + letter-spacing: -0.025em; +} + +.section-head p { + margin: 14px 0 0; + color: var(--muted-foreground); + font-size: 17px; +} + +h3 { + margin: 0; + font-size: 18px; + font-weight: 650; + letter-spacing: -0.01em; +} + +/* Problem */ +.problem { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 16px; +} + +.card { + padding: 24px; + border: 1px solid var(--panel-border); + border-radius: var(--radius); + background: var(--panel); +} + +.card p { + margin: 10px 0 0; + color: var(--muted-foreground); + font-size: 15px; +} + +/* Walkthrough */ +.steps { + display: grid; + gap: 16px; + counter-reset: step; +} + +.step { + display: grid; + grid-template-columns: minmax(0, 4fr) minmax(0, 8fr); + border: 1px solid var(--panel-border); + border-radius: var(--radius); + background: var(--panel); + overflow: hidden; +} + +.step-text { + padding: 28px; +} + +.step-text .num { + display: block; + margin-bottom: 12px; + color: var(--primary); + font-family: var(--font-mono); + font-size: 13px; + font-weight: 500; +} + +.step-text p { + margin: 10px 0 0; + color: var(--muted-foreground); + font-size: 15px; +} + +.terminal { + margin: 0; + padding: 22px 24px; + border-left: 1px solid var(--inner-line); + background: var(--code-bg); + color: var(--code-fg); + font-size: 12px; + line-height: 1.65; + overflow-x: auto; + white-space: pre; +} + +.terminal .cmd { + color: var(--foreground); + font-weight: 500; +} + +.terminal .cmd::before { + content: '$ '; + color: var(--faint); + font-weight: 400; +} + +.terminal .boxes { + display: block; + font-family: 'SQLBuild Diagram', var(--font-mono); + line-height: 1.15; +} + +.terminal .tree { + display: block; + font-family: 'SQLBuild Diagram', var(--font-mono); +} + +.terminal .dim { + color: var(--faint); +} + +.terminal .ok { + color: var(--success); +} + +.terminal .bad { + color: var(--error); +} + +.terminal .warn { + color: var(--warning); +} + +.terminal .note { + color: var(--stale); +} + +.step-text code, +.grid code, +.caption code { + padding: 1px 4px; + border-radius: var(--radius); + background: var(--accent-soft); + color: var(--foreground); + font-size: 0.86em; + word-spacing: -0.2em; +} + +.caption { + margin: 16px 0 0; + color: var(--faint); + font-size: 13px; +} + +/* Feature grid */ +.grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + border: 1px solid var(--panel-border); + border-radius: var(--radius); + background: var(--panel); +} + +.grid .item { + padding: 24px; + border-right: 1px solid var(--inner-line); + border-bottom: 1px solid var(--inner-line); +} + +.grid .item:nth-child(3n) { + border-right: none; +} + +.grid .item:nth-last-child(-n + 3) { + border-bottom: none; +} + +.grid .item p { + margin: 8px 0 0; + color: var(--muted-foreground); + font-size: 15px; +} + +/* Start */ +.start { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); + gap: 40px; + align-items: start; +} + +.start ul { + margin: 20px 0 0; + padding: 0; + list-style: none; +} + +.start li { + position: relative; + padding: 10px 0 10px 22px; + border-top: 1px solid var(--inner-line); + color: var(--muted-foreground); + font-size: 15px; +} + +.start li::before { + content: ''; + position: absolute; + top: 20px; + left: 2px; + width: 7px; + height: 7px; + border-radius: 50%; + background: var(--success); +} + +.start .terminal { + border: 1px solid var(--panel-border); + border-radius: var(--radius); +} + +.adapters { + display: flex; + flex-wrap: wrap; + gap: 8px; + margin-top: 28px; +} + +.adapters span { + padding: 4px 10px; + border: 1px solid var(--panel-border); + border-radius: var(--radius); + background: var(--panel); + font-size: 13px; +} + +/* Closing call to action */ +.closing { + padding: 88px 0 96px; + text-align: center; +} + +.closing h2 { + max-width: 22ch; + margin: 0 auto; +} + +.closing p { + max-width: 56ch; + margin: 16px auto 0; + color: var(--muted-foreground); + font-size: 17px; +} + +.closing .actions { + justify-content: center; +} + +footer { + padding: 28px 0; + border-top: 1px solid var(--inner-line); + color: var(--faint); + font-size: 13px; +} + +footer .wrap { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + gap: 12px; +} + +footer a { + color: var(--muted-foreground); +} + +@media (max-width: 880px) { + .problem, + .grid, + .start, + .step { + grid-template-columns: 1fr; + } + + .terminal { + border-left: none; + border-top: 1px solid var(--inner-line); + } + + .grid .item, + .grid .item:nth-child(3n), + .grid .item:nth-last-child(-n + 3) { + border-right: none; + border-bottom: 1px solid var(--inner-line); + } + + .grid .item:last-child { + border-bottom: none; + } + + .hero { + padding: 64px 0 48px; + } + + .nav .hide-sm { + display: none; + } +} + +/* Syntax colours mirror the SQLBuild UI's SQL tokens. */ +:root { + --syn-keyword: #1a56c4; + --syn-string: #0a7a3f; + --syn-number: #9a6700; + --syn-comment: #8a909c; + --syn-function: #7c3aed; + --syn-type: #0f766e; +} + +:root[data-theme='dark'] { + --syn-keyword: #5aa9e6; + --syn-string: #79c98a; + --syn-number: #e3b341; + --syn-comment: #5c606b; + --syn-function: #c79bf0; + --syn-type: #4dd6c4; +} + +.terminal .kw { + color: var(--syn-keyword); +} + +.terminal .str { + color: var(--syn-string); +} + +.terminal .num { + color: var(--syn-number); +} + +.terminal .cm { + color: var(--syn-comment); +} + +.terminal .fn { + color: var(--syn-function); +} + +.terminal .ty { + color: var(--syn-type); +} + +.terminal .arg { + color: var(--muted-foreground); +} + +.step-group { + margin: 24px 0 0; + color: var(--muted-foreground); + font-size: 13px; + font-weight: 600; + letter-spacing: 0.01em; +} + +.step-group:first-child { + margin-top: 0; +} From 8104d42915880a2abc5a7a2f992421ac5559a41f Mon Sep 17 00:00:00 2001 From: Kevin Longe <273747162+kvlonge@users.noreply.github.com> Date: Fri, 25 Sep 2026 13:18:36 +0100 Subject: [PATCH 02/27] docs: remove internal ticket references --- CHANGELOG.md | 4 ++-- .../sqlbuild/runtime/execution_history/conformance/README.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ab2ccb6a54..2f20b8d543 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1723,11 +1723,11 @@ ### Features -* **cli:** adopt balanced color hierarchy for human output (CHI-45) ([eac4ddc](https://github.com/chio-labs/sqlbuild/commit/eac4ddc9842a670038a1f57c9821fb6ab92d8fe4)) +* **cli:** adopt balanced color hierarchy for human output ([eac4ddc](https://github.com/chio-labs/sqlbuild/commit/eac4ddc9842a670038a1f57c9821fb6ab92d8fe4)) * **cli:** clarify virtual state and expand previews ([3b94316](https://github.com/chio-labs/sqlbuild/commit/3b943167e06784f8cc174b92ef71ef489b2f67ee)) * **cli:** dim kind columns, accent change actions, fix spinner wrap and error-label padding ([b17b1ef](https://github.com/chio-labs/sqlbuild/commit/b17b1efc31f98fa77c0596707a282373dff95025)) * **cli:** refine hierarchy and add output previews ([7607c4f](https://github.com/chio-labs/sqlbuild/commit/7607c4f08636a00d525fdc406a7b65e4939d8804)) -* **cli:** structural output hierarchy across SQLBuild CLI (CHI-45) ([7c46d43](https://github.com/chio-labs/sqlbuild/commit/7c46d43174f1e61238e919a4201e37e699b63d80)) +* **cli:** structural output hierarchy across SQLBuild CLI ([7c46d43](https://github.com/chio-labs/sqlbuild/commit/7c46d43174f1e61238e919a4201e37e699b63d80)) * **cli:** structure source freshness output ([c0e42f4](https://github.com/chio-labs/sqlbuild/commit/c0e42f4ef110995d985b9b32e559ae154b657ae7)) * **cli:** structured build surface - phase lines, status cells, dim timings ([e321e11](https://github.com/chio-labs/sqlbuild/commit/e321e11232e414fc9d954c61c23cafd59da5a1d2)) * **cli:** structured clone completion and connection phase lines ([e5a154d](https://github.com/chio-labs/sqlbuild/commit/e5a154d711125854449c8e309eaee285bbb7e7a5)) diff --git a/tests/unit/src/sqlbuild/runtime/execution_history/conformance/README.md b/tests/unit/src/sqlbuild/runtime/execution_history/conformance/README.md index 16f8dbf7c1..49a23891a3 100644 --- a/tests/unit/src/sqlbuild/runtime/execution_history/conformance/README.md +++ b/tests/unit/src/sqlbuild/runtime/execution_history/conformance/README.md @@ -1,7 +1,7 @@ # Execution history backend conformance Every test in this directory receives storage factories through the parametrized `backend_case` -fixture. `BACKEND_CASES` in `conftest.py` is the single backend registry. CHI-177 and CHI-178 can run +fixture. `BACKEND_CASES` in `conftest.py` is the single backend registry. Additional backends can run the exact same test functions by adding one `BackendCase` containing SQLite or PostgreSQL factories and their deterministic failure-injection factories; test bodies must not be copied or subclassed. From 19658ec070bd146a36aac2791249ff4f21995e2d Mon Sep 17 00:00:00 2001 From: Kevin Longe <273747162+kvlonge@users.noreply.github.com> Date: Fri, 25 Sep 2026 13:18:36 +0100 Subject: [PATCH 03/27] docs: remove the legacy docs folder --- README.md | 8 +- docs/compiler-cache.md | 156 ----------- docs/contract-adoption.md | 159 ----------- docs/dense-compile-performance.md | 85 ------ docs/execution-history.md | 152 ---------- docs/execution-limits.md | 68 ----- docs/execution-observability.md | 250 ----------------- docs/model-layer-rules.md | 39 --- docs/native-lint-rule-matrix.md | 157 ----------- docs/query-diffs.md | 164 ----------- docs/rules-migration-ledger.md | 70 ----- docs/sinks.md | 261 ------------------ docs/sql-test-coverage-rules.md | 83 ------ docs/warm-compile-performance.md | 48 ---- src/sqlbuild/runtime/compute_logs/README.md | 4 +- .../runtime/event_exporting/README.md | 4 +- .../runtime/execution_history/README.md | 3 - src/sqlbuild/runtime/observability/README.md | 4 +- 18 files changed, 7 insertions(+), 1708 deletions(-) delete mode 100644 docs/compiler-cache.md delete mode 100644 docs/contract-adoption.md delete mode 100644 docs/dense-compile-performance.md delete mode 100644 docs/execution-history.md delete mode 100644 docs/execution-limits.md delete mode 100644 docs/execution-observability.md delete mode 100644 docs/model-layer-rules.md delete mode 100644 docs/native-lint-rule-matrix.md delete mode 100644 docs/query-diffs.md delete mode 100644 docs/rules-migration-ledger.md delete mode 100644 docs/sinks.md delete mode 100644 docs/sql-test-coverage-rules.md delete mode 100644 docs/warm-compile-performance.md diff --git a/README.md b/README.md index 35bff33ae7..f03553c25a 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ All state is persisted as append-only tables in the warehouse alongside your dat - **Cursor-based incremental processing.** Automatic gap detection and resume, with microbatch mode for large ranges. No external checkpoint to maintain. - **Ingestion and Python nodes.** Load external data with Python `@loader` functions, and run `@task`, `@asset`, and `@check` nodes as first-class members of the same DAG as your SQL models. -See the [documentation](https://docs.sqlbuild.com) for the full feature set, including providers, lifecycle hooks, Python macros, UDFs, custom materializations, data diffs, zero-copy cloning, and virtual environments. This repository also includes focused guides to [target execution limits](docs/execution-limits.md) and [model and raw-query diffs](docs/query-diffs.md). To coordinate dbt and SQLBuild projects, see the [dbt compatibility guide](https://docs.sqlbuild.com/concepts/dbt-compatibility/overview). +See the [documentation](https://docs.sqlbuild.com) for the full feature set, including providers, lifecycle hooks, Python macros, UDFs, custom materializations, data diffs, zero-copy cloning, and virtual environments. To coordinate dbt and SQLBuild projects, see the [dbt compatibility guide](https://docs.sqlbuild.com/concepts/dbt-compatibility/overview). ## Quick start @@ -287,12 +287,6 @@ digest, not SQL text. Executed SQL artifacts are stored separately under the sen Full documentation is available at [docs.sqlbuild.com](https://docs.sqlbuild.com). -Runtime operator and extension contracts: - -- [Execution observability and local troubleshooting](docs/execution-observability.md) -- [SQLite and PostgreSQL execution history](docs/execution-history.md) -- [Typed lifecycle and command-output sinks](docs/sinks.md) - ## Contributing We welcome contributions. Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines. diff --git a/docs/compiler-cache.md b/docs/compiler-cache.md deleted file mode 100644 index 7fc2ba4f2b..0000000000 --- a/docs/compiler-cache.md +++ /dev/null @@ -1,156 +0,0 @@ -# Compiler cache architecture - -The compiler cache exists to avoid proving unchanged facts again. It must never turn an uncertain -input into a cache hit, and a missing, stale, corrupt, oversized, or contended cache must behave like -an ordinary uncached compile. - -This document defines the target architecture. The current vertical slice implements versioned -model-analysis entries, dependency-aware compact analysis generations, shared SQL-test closure -indexes, bounded compact-generation retention, corruption fallback, and analysis hit/miss telemetry. -Project inventory, discovery/attachment reuse, and command snapshots remain later layers; their -sections below are design constraints rather than claims of current implementation. - -## Goals - -- Make unchanged fresh-process compiles proportional to project inventory and requested output, not - total SQL complexity. -- Make a small edit proportional to the changed resource and its semantic dependents. -- Reuse downstream analysis when an upstream implementation changes without changing its exported - column interface. -- Preserve diagnostics, bindings, types and nullability, lineage, tests, audits, hooks, macros, - ordering, artifacts, and exit codes exactly. -- Keep cache data project-local, bounded, inspectable, non-executable, and safe under concurrent - compiler processes. - -## Non-goals - -- The cache is not a second source of project truth. -- The cache does not make arbitrary Python execution deterministic. A stage with dynamic inputs that - are not represented in its identity must bypass persistent reuse. -- The cache does not store pickles, code objects, callables, imported modules, adapter instances, or - open connections. -- The cache does not replace warehouse execution state or change build selection semantics. - -## Layers - -### 1. Project inventory - -The inventory records every compiler-owned authored input as a normalized project-relative path, -resource role, content digest, size, and filesystem identity metadata. Configuration, ignore files, -adapter identity, compiler and SQL-analysis engine versions, selected target, CLI variables, and -compile modes are explicit identity inputs. - -Filesystem metadata may identify an unchanged candidate, but reusable semantic facts remain -content-addressed. Ambiguous or concurrently changing observations are misses. Added, removed, -renamed, and role-changing paths are first-class changes. - -### 2. Static discovery facts - -Parsing results for SQL, YAML, CSV metadata, and statically inspected Python declarations are keyed -by content digest, parser version, resource role, and parse options. These records contain only -validated JSON-compatible values. Runtime Python discovery still imports current project code and -is never reconstructed from executable cache data. - -### 3. Attached resource facts - -Attachment resolves configuration, declarations, macros, hooks, schemas, tests, and references. -Each record carries the exact identities it observed: - -- authored resource content; -- effective target, variables, and relevant configuration; -- visible enum and constant declarations; -- macro implementation and dependency closure; -- referenced schema or hook declarations; -- adapter rendering contract. - -If any observed identity is absent or unstable, that resource is attached normally. A global -configuration change is broad only when the affected value was observed broadly. - -### 4. Semantic analysis facts - -Model SQL analysis remains keyed by expanded SQL, analysis profile, referenced relation interfaces, -binding schema, and engine versions. The persistent representation should retain compact interned -facts so warm reads do not reconstruct duplicate lineage objects entry by entry. - -Each model publishes a deterministic interface signature containing the output columns, types, -nullability, wildcard status, and any other fact consumed by downstream analysis. A changed model -invalidates downstream semantic analysis only when this exported interface changes. Its own compiled -artifact still changes whenever its implementation changes. - -For supported, schema-bound queries, the native compiler derives immutable CTE output facts from -one parsed query tree. It retains every projection position, including unnamed expressions used by -CTE column lists and positional unions. Known input columns take precedence over same-named SELECT -aliases. Queries with incomplete facts, unsupported source shapes, or unresolved types retain the -existing analysis path. Changes to this inference algorithm invalidate prior analysis identities. - -Compiler-expanded SQL and its source-location spans are also reused within one invocation. SQL lint -may start after attachment while semantic analysis continues. Compiler-proven dynamic-output paths -are checked again with their completed proof. Native and custom rules can execute concurrently; -their combined findings pass through the same final exception and suppression policy. These -invocation-local objects and workers are not persisted in the compiler cache. - -### 5. Shared derived indexes - -Project-wide indexes are built once per compile and shared by all consumers. They include model -dependencies, test model closures, declaration visibility, selector indexes, and artifact identities. -No per-test, per-rule, or per-artifact path may rebuild an unchanged whole-project index. - -### 6. Command snapshots - -A command snapshot records validated, non-executable output facts after all lower layers complete. -It may provide a no-op fast path only when every input observed by that command is represented in -the snapshot identity. Commands involving untracked runtime values bypass this layer while still -using safe lower-layer facts. - -## Invalidation - -Invalidation follows recorded dependency edges rather than directory-wide guesses: - -1. Compare the current inventory with the last committed inventory. -2. Invalidate directly changed static facts. -3. Follow declaration, macro, configuration, schema, hook, and test dependency edges. -4. Reattach directly affected resources. -5. Reanalyze changed models and compare exported interface signatures. -6. Reanalyze downstream models only when a consumed interface changed. -7. Rebuild tests, audits, rules, and artifacts only when their recorded inputs changed. - -Removing an edge is itself an invalidating change. Cache readers must not infer validity from the -absence of a newly introduced dependency record. - -## Storage and publication - -- Records are schema-versioned and include algorithm and package fingerprints. -- Payloads have explicit size and collection-count limits before semantic acceptance. -- Digests cover keys and canonical serialized payloads. -- Writers publish in one transaction or by atomic replacement; readers observe one committed - generation. -- Concurrent lock or I/O failure is a cache miss, never a compile failure. -- Cache growth is bounded by generation and byte limits. Pruning removes old immutable records and - does not mutate current semantic state. -- `--no-cache`, target configuration, and the compile-cache environment override bypass every - persistent layer and do not publish new records. - -## Observability and guards - -The target machine-readable contract reports per-layer hits, misses, invalidations, bytes read and -written, and phase timings. The current vertical slice reports model-analysis batch hits, entry -hits, misses, bypasses, and phase timings. Counts describe semantic records, not low-level database -operations. - -Concurrent phase timings can overlap. Use the total compile time and fresh-process wall time for -end-to-end comparisons rather than summing individual phase durations. - -Fresh-process performance guards use representative semantic projects and cover: - -- cold compile with a clean target; -- unchanged warm compile; -- leaf-model implementation edit; -- upstream implementation edit with an unchanged interface; -- interface-changing upstream edit; -- test-only and macro edits; -- broad project-configuration edit; -- cache corruption and `--no-cache` fallback. - -Every path verifies exact resource counts, zero unexpected diagnostics, deterministic semantic -fingerprints, bounded peak RSS, and expected hit and invalidation counts. Wall-time ceilings are -calibrated only after the behavior and identity assertions are stable. diff --git a/docs/contract-adoption.md b/docs/contract-adoption.md deleted file mode 100644 index 002c2a2d1f..0000000000 --- a/docs/contract-adoption.md +++ /dev/null @@ -1,159 +0,0 @@ -# Contract adoption - -SQLBuild validates SQL and authored contracts offline during ordinary compilation. It does not -download warehouse schemas as part of `sqb compile`. - -When adopting an existing physical schema, use the explicit online `contract` command. The target -named by `--from` supplies only the database/schema namespace to inspect. SQLBuild uses the active -project connection for the inspection and never resolves a second set of origin credentials. - -```bash -# Compare code with selected physical relations. No files or relations are changed. -sqb contract diff --from prod --select tag:finance - -# Print the same adoption findings without changing source. -sqb contract generate --from prod --select tag:finance - -# Fill missing types and append missing physical columns in repository declarations. -sqb contract generate --from prod --select tag:finance --write - -# Explicitly replace conflicting physical names/types and remove declarations absent physically. -sqb contract generate --from prod --select tag:finance --write --overwrite - -# Sources are first-class selectable resources. -sqb contract diff --from prod --select source:raw_orders -``` - -`diff` returns exit code `0` when declarations agree and `1` when differences exist. Operational -and configuration failures remain command errors. JSON output is available with `--json` and -contains the evidence namespace, resource identity, finding kind, and declared/physical types. It -never includes connection credentials. - -## Safety and ownership - -- `--from` is read-only. Contract commands do not mutate warehouse relations, state, fingerprints, - or lifecycle records. -- Generation changes repository declarations only when `--write` is present. -- Additive generation preserves existing types on conflicts, existing columns absent physically, - comments, descriptions, audits, nullability, enums, tags, freshness, and loader configuration. -- `--overwrite` is the explicit repository replacement policy. It is not a warehouse write. -- Generation does not add `contract enforced`; activation remains an authored policy decision. -- A shared `SCHEMA()` is never changed from one model's evidence. SQLBuild reports an ownership - conflict instead. -- Files marked as generated are not hand-edited. -- Writes are atomic. SQLBuild reparses and recompiles the project, restoring exact prior contents - if validation fails. - -## SQL analysis and contracts - -`settings.sql_analysis` is the single public compiler analysis gate. It controls syntax analysis, -column binding, expression typing, output inference, and semantic validation. The corresponding -model override is `sql_analysis false`, and the CLI escape hatch is `--no-sql-analysis`. - -The legacy `settings.sql_validation`, model `sql_validation`, and `--no-sql-validation` spellings -remain compatibility aliases. Conflicting old and new configuration values are rejected. - -An enforced upstream contract is an authoritative compile-time interface. Missing or ambiguous -column references fail in projections, joins, filters, grouping, `HAVING`, `QUALIFY`, windows, and -ordering. Complete derived CTE/subquery/model shapes can also prove absence. Partial or opaque input -schemas remain open: SQLBuild does not turn missing metadata into a false negative assertion. - -Direct non-projection uses can be requested separately from value-producing column lineage: - -```bash -sqb lineage fact_orders --include-uses --format json -``` - -The `semantic_uses` payload groups direct resolved columns by contexts such as `join_on`, `where`, -`group_by`, `having`, `qualify`, `window_partition_by`, `window_order_by`, and `order_by`. These facts -are intentionally not emitted as `ColumnLineageEdge` values and are not propagated transitively. - -Compile-time binding does not replace runtime enforcement. Persisted tables and incrementals still -use staged contract/type validation before target mutation. Views receive static validation but do -not receive runtime cast reconstruction. `sqb plan` remains responsible for online physical drift -and execution decisions. - -## Proven, mismatched, and unknown output types - -Contract type validation distinguishes evidence from uncertainty: - -- An inferred type equivalent to the declared type passes. -- A proven incompatible type reports `K002`; it is an error when contract or type enforcement is - active. -- An output whose type cannot be proven reports `K003` when type enforcement is active. This remains - a warning because incomplete analysis is not proof that otherwise valid SQL violates its contract. - -`SQBRCONTRACT106` requires every column in an enforced contract to declare an adapter type. Use it -with `SQBRCONTRACT101` so every model has an enforced contract and no contract can remain a -name-only shape. Resolve unknown types at authoritative sources or explicit SQL output boundaries; -do not choose a type solely to silence the Rule. - -Projects that require every contract boundary to be statically explicit can select -`SQBRCONTRACT105`. Selected Rule findings are enforced. The Rule accepts a direct column only when -its exact declared type is proven, and requires an outer `CAST` around literals, calculations, -conditionals, functions, aggregates, windows, semi-structured expressions, and other derived -outputs. The cast target must use the declared contract type; an alias with different type syntax is -not treated as an explicit declaration of that contract. An exact outer cast establishes the Rule's -authored type boundary even when general expression inference remains incomplete. Every -set-operation branch must cast its outputs before common-type coercion. Wildcards are not an -explicit contract boundary unless they expose a compiler-proven dynamic family as described below. - -### Runtime-dynamic pivot families - -An enforced contract can remain closed when a native pivot discovers output names from data at -runtime. Declare fixed grouping columns normally and declare each generated family separately: - -```sql -MODEL ( - contract enforced, - columns (customer_id (type INTEGER)), - dynamic_columns ( - category_amounts ( - pivot_column category, - value_column amount, - aggregate MAX, - type "DECIMAL(12,2)" - ) - ), -); - -PIVOT __ref("stg_order_amounts") -ON category -USING MAX(amount) -GROUP BY customer_id -``` - -This is not an open wildcard contract. SQLBuild proves that the complete output boundary is either -one supported runtime-dynamic pivot or an exact wildcard passthrough from an upstream model with the -same families. It derives the fixed columns from the pivot input, matches every pivot aggregate to -one family, and proves the generated type from the authoritative input contract or an explicit cast. -An unproven boundary fails with `K011`; an incompatible family type fails with `K002`; an unknown -family type reports `K003`. `SQBRCONTRACT105` accepts the wildcard only after this compiler proof. - -Snowflake `PIVOT ... IN (ANY ...)` and dynamic subquery pivots are supported. DuckDB and MotherDuck -native dynamic `PIVOT ... ON ... USING ...` statements are supported. A static `IN` list continues -to use ordinary exact column declarations. Dynamically constructed SQL strings are not contract -proof, and adapters without a structurally analyzable native dynamic pivot reject -`dynamic_columns`. - -When more than one family is declared, each requires `name_pattern`, a regular expression matched -against the complete generated column name. Runtime validation requires every non-fixed physical -column to match exactly one family and have that family's declared type. Contract inspection applies -the same classification. Contract generation preserves the family declaration and does not freeze -the current runtime members into `columns`. - -When `SQBRSQL035` is also selected, the final top-level CTE owns these casts and the terminal -`SELECT` remains a plain read from that CTE: - -```sql -WITH final AS ( - SELECT - order_id, - CAST(quantity * unit_price AS DECIMAL(18, 2)) AS total_amount - FROM prepared_orders -) -SELECT - order_id, - total_amount -FROM final -``` diff --git a/docs/dense-compile-performance.md b/docs/dense-compile-performance.md deleted file mode 100644 index deaf541b62..0000000000 --- a/docs/dense-compile-performance.md +++ /dev/null @@ -1,85 +0,0 @@ -# Dense all-rules compile guard - -The dense compile guard covers cold compilation of 1,000, 3,000, 5,000 and -10,000 models with every built-in compiler rule and one custom project rule -enabled. It complements the existing semantic and incremental-cache benchmarks. - -The deterministic fixture uses neutral order data and compiles offline with the -Snowflake dialect. Each 1,000-model group has 240 sources, 50 seeds, 25 SQL -functions, 1,700 audits and 1,000 SQL tests. Queries contain dependency import -CTEs, joins, named unions, explicit contracts, wide projections and Python macro -expansion. Independent declaration scopes preserve per-model macro visibility -as the project grows. SQL tests mock immediate inputs to keep test expansion -bounded. A smaller integration fixture executes its generated tests in DuckDB. - -The guard checks: - -- Complete built-in rule selection, one selected custom rule, and no ignored - rules, scoped exceptions or relaxed thresholds. -- Resource counts, minimum authored SQL volume, and zero diagnostics. -- Zero analysis/rule cache hits and analysis bypasses for every model. -- A fingerprint of semantic JSON and every compiled artifact. -- Fresh-process wall time and peak RSS, with phase timings in test logs. - -| Models | Wall-time ceiling | Process RSS ceiling | -| ---: | ---: | ---: | -| 1,000 | 14s | 1.5GiB | -| 3,000 | 34s | 2.75GiB | -| 5,000 | 55s | 3.25GiB | -| 10,000 | 145s | 4GiB | - -These are regression ceilings for the implemented compiler, with headroom for -host variation. They are not a claim of sub-10-second compilation at every size. - -CI additionally runs each size in a 4GiB cgroup with swap disabled, covering -the test harness and child processes together. Compiler, lint and rule-engine -changes select these jobs. Local process RSS measurements alone do not prove -the cgroup gate passes. - -Run an individual size with: - -```sh -make test-e2e-dense-compile-performance SQLBUILD_BENCHMARK_MODELS=1000 -``` - -For requests containing at least 32MiB of unique SQL, the compiler compacts native -analysis results in batches of 64. Smaller requests retain a single batch. Both -use up to four workers; local resolution views avoid copying CTE definitions -that are already available through the source catalogue. -These limits change scheduling, not analysis or fallback semantics. -Projects with at least 10,000 model projections and 48MiB of prepared SQL use one -native analysis worker to leave memory headroom for the isolated custom-rule host -after analysis. Smaller SQL payloads retain parallel analysis. -The 10k cold ceiling includes headroom for this memory-bounded scheduling; warm -cache hits and small edit batches keep their existing scheduling. - -The compiler reuses borrowed syntax-tree facts when it can prove complete reference -binding and infer types without consulting mutable type annotations. Unsupported -clauses, incomplete schemas and unresolved expressions retain the normal validation -and analysis paths. - -For cold projects with 128–5,000 models and selected rules, artifact rendering can overlap rule -evaluation after graph and contract analysis. Rendering uses one background thread -and a disposable directory outside the project. The normal write phase publishes -the staged files only after its existing diagnostic gates pass. Unchanged files -retain their timestamps, stale files are removed using the normal policy, and -cached compilation keeps its normal artifact-cache path. Temporary-storage failure -falls back to ordinary artifact writing. -Larger projects retain sequential rendering to bound combined compiler and rule-host -memory; projects without selected rules avoid staging's extra file I/O. - -Detailed phase timings can overlap; physical-write time includes any staging work. -Use whole-process wall time for performance acceptance rather than summing phases. -Custom rules continue to run in their isolated host. Disabled rules caches avoid -unused fact fingerprints; enabled caches retain their normal identities and -invalidation behavior. - -The [varied warm-compile guard](warm-compile-performance.md) adds operator-shape -diversity and a shared dependency graph, measuring unchanged, leaf, upstream and -macro-edit compiles against uncached semantic/artifact oracles. - -This fixture protects dense query analysis, declaration expansion, rules and -artifact generation. It is not an exact reproduction of every application: -dynamic plugins, incremental materialization mixes and deeply nested query -tails still require application-specific acceptance measurements. Keep those -measurements private; publish only neutral fixtures and their own results. diff --git a/docs/execution-history.md b/docs/execution-history.md deleted file mode 100644 index 37258df52d..0000000000 --- a/docs/execution-history.md +++ /dev/null @@ -1,152 +0,0 @@ -# Execution history storage - -`LifecycleEventLogStorage` stores canonical immutable lifecycle facts. `RunStorage` serves an atomically -published, rebuildable run projection. Diagnostic and compute logs are never accepted by either -contract. The public types, filters, pages, records, errors, and helper functions are exported from -`sqlbuild.execution_history`. - -## Public contracts - -`LifecycleEventLogStorage` provides `append_event`, `append_events`, `get_events`, `get_schema_version`, -`upgrade_schema`, `close`, `dispose`, and context management. `RunStorage` provides `get_run`, -`get_runs`, `project`, `rebuild_from_events`, the schema/lifecycle methods, and context management. -The concrete SQLite and PostgreSQL classes additionally provide transactional -`append_and_project`, `reconcile`, and `check_health` operations. - -The deprecated `EventLogStorage` alias has been removed; use `LifecycleEventLogStorage`. Storage -tables use the lifecycle-specific names `lifecycle_event_log` in SQLite and -`sqlbuild_lifecycle_event_log` in PostgreSQL; the former `event_log` and `sqlbuild_event_log` names -are retired. - -Each newly stored event receives a positive, increasing `storage_order`, opaque stable `cursor`, -and UTC `received_at`. Pages ascend in storage order. `after_cursor` is exclusive, -`next_cursor` identifies the last returned record and is `None` for an empty page, and `has_more` -states whether another page exists. Limits default to 100 and cannot exceed 1000. Cursors are -backend- and storage-instance-owned; persist them verbatim and never parse them. They identify a -global position and remain valid if a later call changes filters. - -`EventFilter` supports invocation ID, run ID, event types, event family, producer, and inclusive -event-time bounds. Event types and family are mutually exclusive. `EventFamily` contains -invocation, run, resource-attempt, operation, and statement; select retry facts with -`EventFilter(event_types=("retry_scheduled",))`. `RunFilter` supports invocation, status, and -inclusive projection-creation bounds. A run cursor identifies the global -`(created_at, run_id)` order and is also filter-independent. - -Projection applies durable facts in `storage_order`, never `occurred_at` order. `created_at` is the -first run fact's `received_at`; start/end times retain event time. A run with no terminal is -`RunStatus.UNKNOWN` and `is_complete=False`. The last durable terminal wins if conflicting terminal -facts exist. Incremental projection and a full rebuild produce the same result, and one projection -call publishes all changes or none. - -## Local SQLite - -The CLI does not open local history implicitly. Construct and subscribe this backend only when an -application has a concrete durable-history consumer. - -```python -from pathlib import Path - -from sqlbuild.execution_history import EventFilter, RunFilter -from sqlbuild.sqlite_history import SQLiteExecutionHistory - -with SQLiteExecutionHistory(project_dir=Path(".")) as history: - assert history.check_health() - - cursor = None - while True: - page = history.get_events( - event_filter=EventFilter(run_id="RUN_ID"), - after_cursor=cursor, - ) - for stored in page.records: - print(stored.storage_order, stored.event) - if not page.has_more: - break - cursor = page.next_cursor - - for run in history.get_runs(run_filter=RunFilter()).records: - print(run.run_id, run.status, run.is_complete) -``` - -With no arguments, `SQLiteExecutionHistory()` uses the current directory. Passing `project_dir` -uses `/.sqlbuild/history.sqlite3`; passing `path` selects an exact file, and `path` may -be `":memory:"`. Do not pass both. Startup creates/migrates schema version 1 and reconciles the run -projection from all event facts. - -Schema v1 has `execution_history_metadata`, append-only `lifecycle_event_log`, and disposable -`run_projection` tables plus run, invocation, type, and created-time indexes. SQLite uses WAL mode, -foreign keys, a configurable 5000 ms default busy timeout, a process-local reentrant lock, and -transactions for append/projection publication. Multiple processes may use SQLite subject to normal -SQLite/WAL host-filesystem constraints and busy timeout; it is a host-local backend, not a deployed -coordination service. Startup refuses unknown future schema versions and never resets or downgrades -data. - -## Deployed PostgreSQL - -Install `sqlbuild[postgres]` only in deployed processes and construct the backend explicitly. The -CLI never selects PostgreSQL implicitly. Neither backend is selected by ordinary CLI commands. - -```python -import os -from datetime import UTC, datetime - -from sqlbuild.execution_history import EventFilter -from sqlbuild.observability import create_lifecycle_event, invocation_scope, run_scope -from sqlbuild.postgres_history import PostgresExecutionHistory - -occurred_at = datetime(2026, 9, 2, 10, 15, tzinfo=UTC) -with invocation_scope("deployment-20260902-1015"): - with run_scope("run-20260902-1015"): - run_started = create_lifecycle_event( - event_type="run_started", - event_id="run-20260902-1015-started", - occurred_at=occurred_at, - payload={"run_kind": "build", "selected_count": 12}, - ) - -with PostgresExecutionHistory(os.environ["SQLBUILD_HISTORY_DSN"]) as history: - first = history.append_and_project((run_started,))[0] - retry = history.append_event(run_started) - assert retry.storage_order == first.storage_order - - page = history.get_events( - event_filter=EventFilter(run_id="run-20260902-1015"), - after_cursor=None, - ) - checkpoint = page.next_cursor - -# Persist checkpoint securely. A later process resumes after that exact global position. -with PostgresExecutionHistory(os.environ["SQLBUILD_HISTORY_DSN"]) as history: - later = history.get_events( - event_filter=EventFilter(run_id="run-20260902-1015"), - after_cursor=checkpoint, - ) -``` - -The DSN must be resolved from a secret before construction. SQLBuild neither retains it for -diagnostics nor includes it in exceptions or `repr`. PostgreSQL schema v1 uses -`sqlbuild_storage_migrations`, authoritative `sqlbuild_lifecycle_event_log`, and disposable -`sqlbuild_run_projection`. Startup takes a transaction-scoped advisory migration lock, performs -forward-only migrations, and reconciles projection. All instances should run the same SQLBuild -version during rollout. - -Append and projection serialize under a history advisory lock. Only serialization failures and -deadlocks (`40001`, `40P01`) are retried internally, up to three retries by default. If connection -loss makes commit acknowledgement uncertain, discard the backend, reconnect, and retry the exact -same deterministic event ID and content. Equal content returns the existing stored fact; different -content raises `IntegrityConflictError`. This is storage idempotency, not exporter exactly-once -delivery. - -Grant deployed application roles only the required schema/table privileges and reserve migration, -backup, retention, and destructive privileges for operators. Back up `sqlbuild_lifecycle_event_log` and -`sqlbuild_storage_migrations`, preserving event IDs, canonical JSON, identity sequence values, and -storage namespace. `sqlbuild_run_projection` can be rebuilt with `reconcile()`. PostgreSQL performs -no automatic retention, partitioning, or archival. - -These are selected operational examples rather than an exhaustive API reference. The public -`sqlbuild.execution_history` facade also exports canonical content/ID helpers, page-limit -validation, projection helpers, schema and paging constants, storage protocols, models, filters, -statuses, and typed storage/cursor/schema errors. - -See [execution observability](execution-observability.md) for authority, local files, security, and -failure behavior. diff --git a/docs/execution-limits.md b/docs/execution-limits.md deleted file mode 100644 index 60c07e6ec5..0000000000 --- a/docs/execution-limits.md +++ /dev/null @@ -1,68 +0,0 @@ -# Target execution limits - -Named targets can set optional limits for `sqb build`. Limits are useful for development targets -where an unexpectedly broad selector or long-running command should stop instead of consuming an -unbounded amount of warehouse compute. - -```toml -[targets.dev] -connection = "warehouse" -database = "analytics" -schema = "dev_alice" - -[targets.dev.execution_limits] -max_models = 125 -max_duration = "45m" -remediation = """ -Review the expanded plan and confirm that the selected scope is intentional. -Automated tools must request approval before changing this policy. -""" -``` - -All fields are optional. A target without an `execution_limits` section retains unlimited existing -behavior, so production or orchestrated targets do not need placeholder values. - -## Model limit - -`max_models` is a positive integer. SQLBuild expands selectors and counts model entries that would -execute. When the count exceeds the target limit, the build exits before clone, load, or model -execution begins. The error reports the target, selected count, configured maximum, configuration -key, and confirms that no warehouse changes were made. - -`sqb plan` remains unrestricted and can be used to inspect a broad selection safely. - -## Duration limit - -`max_duration` is a positive fixed duration such as `30m`, `2h`, or `90s`. It covers planning and -warehouse-mutating build phases after target resolution. SQLBuild stops dispatching work at the -deadline and passes the remaining duration to each warehouse statement so in-flight work is -cancelled by the adapter. - -Safe in-flight cancellation is currently supported by the Snowflake adapter, whose maximum accepted -duration is seven days. SQLBuild rejects an unsupported duration or an adapter that cannot guarantee -active statement cancellation rather than presenting a limit that may leave warehouse work running. - -A duration failure may occur after earlier models have completed. Its error therefore distinguishes -the timeout from a pre-execution model-limit failure and states that warehouse changes may already -have occurred. - -## Custom remediation - -`remediation` is optional project-authored text. SQLBuild appends it to model-count, duration, and -unsupported-adapter errors after the factual error details. This lets each project define its own -approval or recovery process without SQLBuild recommending that users weaken local policy. - -## Local overrides - -The same section is accepted in `sqlbuild_local.toml` and follows normal field-by-field local target -precedence: - -```toml -[targets.dev.execution_limits] -max_models = 200 -max_duration = "90m" -``` - -This permits an intentional developer override while keeping the shared target policy visible in -`sqlbuild_project.toml`. Other target fields and any execution-limit fields omitted locally continue -to inherit their project values. diff --git a/docs/execution-observability.md b/docs/execution-observability.md deleted file mode 100644 index d01dea295c..0000000000 --- a/docs/execution-observability.md +++ /dev/null @@ -1,250 +0,0 @@ -# Execution observability - -SQLBuild deliberately separates execution facts from logs and output projections. Choose the -record that answers the question instead of treating every JSON or log file as interchangeable. - -## Records and authority - -| Record | Purpose | Authority and retention | -| --- | --- | --- | -| `LifecycleEvent` | Immutable facts about invocation, run, resource-attempt, microbatch, operation, retry, and statement lifecycles | Canonical execution evidence. An explicitly attached `LifecycleEventLogStorage` is authoritative once the fact is durable. SQLite and PostgreSQL retain facts until an operator removes the database or applies an external retention policy. | -| `DiagnosticLog` | Structured framework and user diagnostics | Explanatory only. It cannot establish that work started, completed, failed, skipped, or retried. Local compute-log retention applies. | -| `stdout.log` and `stderr.log` | Exact process output for one invocation | Troubleshooting data, not execution truth. Local compute-log retention applies. | -| `CommandOutputRecord` | Normalized, ANSI-free, line-oriented stdout/stderr chunks for an explicitly configured remote sink | Potentially sensitive, bounded, and potentially lossy troubleshooting data. It is not execution evidence and destination retention is project-owned. | -| `target/run/` | Full executed model, function, and test SQL, Python-check output, and scenario artifacts | Sensitive, command-written runtime artifacts. This shared tree is not invocation-isolated and may be replaced by later commands. It is not lifecycle truth. | -| `target/executions//statements.jsonl` | Best-effort run statement ledger with statement/resource identity, status, timing, query ID, and SQL SHA256 | A run-owned cost/query-ID input. It omits SQL text and does not establish lifecycle status. SQLBuild has no automatic retention for this tree. | -| `RunRecord` | Current run summary rebuilt from durable run facts | Disposable serving state. Rebuild it from the event log; never use it as the only lifecycle authority. | -| Integration-result JSONL | Bounded resource terminal plus integration enrichment | Canonical SQLBuild-owned integration side channel, but still a projection/consumer of lifecycle facts rather than event history. | -| Final `--json` or `--json-output` document | Aggregate command result | A separate end-of-command projection. It is not enabled by integration-result output and is not lifecycle authority. | -| `_sqlbuild_audit_results` | Append-only audit-result facts in the active warehouse | Best-effort observability projection with deterministic IDs and idempotent writes. It never changes audit gating or lifecycle truth. | - -Compute logs, command-output records, final output, full SQL artifacts, user messages, and -Python/check metadata can contain sensitive data. Lifecycle, integration-result, and sink-health records intentionally exclude -full SQL, parameter values, credentials, arbitrary user messages, and unbounded metadata. - -## Lifecycle envelope - -Schema version 1 has these fields: - -```json -{ - "event_id": "9fb6d899754d4bd79c703067a8d5046c", - "event_type": "statement_completed", - "schema_version": 1, - "producer": "sqlbuild", - "producer_version": "1.2.3", - "occurred_at": "2026-09-02T10:15:30.125000+00:00", - "invocation_id": "4cc757dd93fe466aad2a220f1e76625e", - "run_id": "run-20260902-101500", - "resource_id": "model:orders", - "resource_attempt_id": "97933c4aa29441cda133641345515e20", - "operation_id": "c978e47367494051bdde68ad03e56db4", - "statement_id": "5113ebc5afe247eb9c41dc0b27ef1a9a", - "payload": { - "adapter": "snowflake", - "duration_ms": 318.4, - "query_id": "01b6f1c2-0000-0000-0000-000000000000", - "sql_digest": "881b77b00a75e07936d7f20ea308a55e9ef98f2f1fd42c144a3a998d32094c1b" - } -} -``` - -`event_id` identifies immutable content. Re-appending canonically equal content with the same ID is -an idempotent no-op; different content under that ID is an integrity error. `producer` and -`producer_version` identify the emitting implementation, while `schema_version` identifies the -wire contract. Known schema-v1 events reject unknown envelope and payload fields. Schema version 2 -adds `invocation_sequence` and `external_context`, and catalogs bounded microbatch lifecycle facts. -Readers preserve unknown event names or newer schema versions as opaque envelopes rather than -inventing semantics. -History storage retains those opaque envelopes and exposes them to queries, but run projection, -native progress, integration-result output, and lifecycle-event sinks consume only known -`LifecycleEvent` values and ignore opaque facts. - -An invocation ID exists for every fact. A run groups executable graph work. A stable `resource_id` -identifies the logical model, source, check, or other resource, while a new -`resource_attempt_id` identifies each attempt. `operation_id` identifies one blocking non-SQL -operation and `statement_id` one SQL statement. Microbatch facts correlate through the containing -resource attempt and identify their interval through bounded payload fields. IDs are correlation -values, not timestamps. - -Publication is synchronous and preserves each producer's call order. Concurrent producers have no -global event-time ordering guarantee. Durable `storage_order` is the total order assigned by one -storage backend; `occurred_at` never reorders it. Starts and `statement_submitted` are nonterminal. -Completed, failed, and `resource_attempt_skipped` facts are terminal. `retry_scheduled` is a -first-class fact between attempts. A start without terminal evidence remains unknown or presumed -lost: no storage, projection, integration, or sink may fabricate success or failure. - -## Microbatch lifecycle - -Each active microbatch emits `microbatch_started` before staging begins. The payload records the -inclusive `cursor_start`, exclusive `cursor_end_exclusive`, complete planned range, one-based -`batch_index`, `batch_count`, configured and effective batch sizes, strategy, run type, and whether -the interval is ordinary or recovery work. `microbatch_completed` repeats that context with -duration and optional affected rows; `microbatch_failed` repeats it with bounded error identity. - -The start fact is sufficient to identify the active interval when a process is cancelled or lost -before it can publish a terminal. Concurrent intervals share the containing resource-attempt -identity and retain distinct bounds and indexes; their publication order is not a completion-order -guarantee. - -## Integration consumers - -`SQLBUILD_INTEGRATION_RESULT_PATH` (or SQLBuild's integration-owned hidden `--event-output` route) -enables schema-v1 `integration_result` JSONL. Each record contains the canonical resource-terminal -identity and bounded asset or check enrichment. The envelope fields are `schema_version`, -`record_kind`, `event_id`, `event_sequence`, `event_type`, `occurred_at`, all lifecycle correlation -IDs, resource kind/name, attempt number, duration, output kind, command, bounded failure or skip -codes, and one asset or check result. - -The writer claims each matching resource-attempt terminal once. Retries correlate through the same -resource ID and distinct attempt IDs; the latest exact terminal is claimed. Physical JSONL order is -result-callback order. `event_sequence` is the zero-based position among unique, known lifecycle -events observed by that invocation's in-memory terminal index. It excludes duplicate publications -and opaque facts, and it is neither durable `storage_order` nor a cross-process ordering key. Use it -to restore the terminal index's observed order among records from the same invocation. A result -callback without matching terminal evidence emits no record, and final aggregate JSON omits that -incomplete resource rather than inventing an outcome. Closing the writer emits nothing. - -Each confirmed audit also emits `audit_completed` during the run, as soon as its outcome is -confirmed (model audits when their model result completes). The event records the case name, reusable audit -definition name, optional authored description, attachment identity, evaluation mode, outcome, -severity and run scope, plus applicable measurement, threshold and bounded evidence details. `pass` -and `insufficient` are non-failing outcomes; `insufficient` remains distinct for consumers. - -An explicit writer path takes precedence over `SQLBUILD_INTEGRATION_RESULT_PATH`. Integration-result -files are opened in append mode, so an integration that reuses a path must truncate or rotate it -before starting a new invocation. The hidden `--event-output` transport option is available only on -`build` and `clone`; other producers use the environment-owned path. Final `--json-output` is a -different path: it overwrites its destination, and when supplied with `--json` it suppresses the -aggregate document on stdout. - -The Dagster adapter owns creation and consumption of this side channel. At a high level it streams -each validated envelope into Dagster asset materializations and checks, then uses the separate final -aggregate JSON only where end-of-command enrichment is still needed. The removed Dagster live v1 -JSONL format is neither authoritative nor supported; CHI-192 replaced it with integration-result -envelopes. - -## Audit-result projection - -Native warehouse adapters best-effort append confirmed audits to `_sqlbuild_audit_results`. Typed -columns cover result/run/audit identity (including definition name and authored description), -timestamps and target, evaluation mode and outcome, -violation or measured value, sample count/unit and minimum samples. Threshold policy and bounded -evidence use JSON columns with evidence count/truncation/error diagnostics. Rendered measurement, -evidence and executed SQL are retained in dedicated columns for inspection. - -Rows are immutable facts rather than lifecycle state. Deterministic result IDs make retries -idempotent. A projection write failure preserves the audit outcome and command exit code, reports -attempted/written/failed counts, and sets `projection_degraded`; lifecycle events and configured -sinks fail independently. - -## Local paths and troubleshooting - -For a command started on 2 September 2026 with invocation ID `INVOCATION_ID`, inspect: - -```text -logs/2026-09-02/INVOCATION_ID/ - metadata.json - stdout.log - stderr.log - diagnostics.jsonl - complete -target/run/ -target/executions//statements.jsonl -``` - -`metadata.json` initially records the invocation, command, resolved project directory, UTC start -date/time, optional selected target, and the run ID if one already exists at capture setup. On a -clean close SQLBuild atomically replaces it with final metadata containing completion time, exit -code, and stream byte counts, then creates the empty `complete` marker. The marker proves only that -capture finalized; it is not lifecycle completion evidence. Its absence means the capture is live -or abandoned, not that execution failed. - -Use the supported API to inventory and follow exact stream bytes: - -```python -from pathlib import Path - -from sqlbuild.compute_logs import ComputeLogStream, open_local_compute_log_storage - -with open_local_compute_log_storage(project_dir=Path(".")) as logs: - for capture in logs.inventory().captures: - print(capture.invocation_id, capture.is_complete, capture.path) - - cursor = 0 - while True: - chunk = logs.read( - invocation_id="INVOCATION_ID", - stream=ComputeLogStream.STDERR, - cursor=cursor, - ) - print(chunk.data.decode("utf-8", errors="replace"), end="") - cursor = chunk.next_cursor - if chunk.is_complete and not chunk.data: - break -``` - -Byte cursors are nonnegative exact offsets in one stream; they are not event cursors. Reads are -bounded to 1 MiB. The default prune policy retains the newest 20 complete captures and never removes -incomplete captures. CLI-managed capture calls `prune()` after successful finalization. Direct API -users must call `prune()` themselves; setting `retention_count=None` makes that call a no-op. - -The local files are host-local. The compute-log implementation rejects symlink roots and path -escapes but does not force file modes; permissions follow directory ownership and the process umask. -Set a restrictive umask and secure or encrypt the host volume. Operators must secure parent -directories, backups, `logs/`, and `target/`. An explicitly constructed SQLite history creates -`.sqlbuild/` with mode `0700` when new and applies mode `0600` to `history.sqlite3`; the CLI does not -construct execution-history storage implicitly. - -SQLBuild does not write a shared `target/sqlbuild.log`. Use the invocation-specific paths above so -concurrent and historical command diagnostics remain isolated. Project-creation commands (`sqb -init`, `sqb playground`, and `sqb dbt init`) create none of these runtime paths in the destination -before project creation. - -## Target layout - -`target/` contains disposable generated artifacts and caches: - -| Path | Contents | -| --- | --- | -| `target/cache/compiler/` | Regenerable compiler analysis, SQL-reference, and declaration-scope caches. | -| `target/compiled/` | Human-inspectable compiled models, functions, audits, and tests. | -| `target/run/` | Latest command's executable SQL and runtime artifacts; shared and replaceable. | -| `target/executions//` | Per-run statement ledgers and cost records. | -| `target/manifest.json` | Compiled project manifest when requested. | -| `target/sqlbuild_dag.json` | Dagster-facing project DAG artifact when requested. | - -All cache and execution paths under `target/` may be removed and regenerated. SQLBuild does not -read compatibility paths such as `target/compile-cache/`, `target/runs/`, or the removed dbt reuse -cache under `target/sqlbuild/`. - -## Failure behavior - -| Failure | Evidence and command effect | -| --- | --- | -| Explicit lifecycle storage unavailable | Direct storage API calls raise `ExecutionHistoryStorageError`; the CLI does not select a backend implicitly. | -| Lifecycle storage append fails | The dispatcher isolates the explicitly attached history subscriber and command work continues. The missing fact cannot be recovered from a projection. | -| Compute-log open or write fails | SQLBuild reports best-effort diagnostics, preserves console operation, and preserves the command result. The capture may be absent or incomplete. | -| Integration-result path creation, open, append, flush, or close fails | The error is not best effort and can fail the command or integration-output phase. The JSONL file may contain a valid prefix. | -| Final `--json-output` directory creation or write fails | The error can fail the command output phase. SQLBuild does not claim that the aggregate document was published. | -| Native audit-result projection fails | The confirmed audit outcome and exit code are preserved; projection accounting reports the failure and `projection_degraded` is set. | -| Exporter module discovery, declaration validation, provider construction, or provider setup fails | Startup fails before command execution because project extension configuration is invalid. | -| Export queue overflow or priority displacement | Eligible attempts are counted `dropped`; command correctness is unchanged. | -| Exporter raises or times out | The attempt is counted `failed`; that exporter is isolated and a timed-out exporter is blocked from later calls. Command correctness is unchanged. | -| Exporter hangs forever | Its daemon thread may remain alive and retain the shared provider session until process exit. Shutdown remains bounded and `flush_complete` is false. | -| Failure/health notification callback fails or blocks | It is isolated on a daemon worker. Failure notices may be dropped and periodic health is coalesced; command and exporter delivery continue. | -| Process interruption | Terminal facts and compute-log `complete` may be absent. Treat affected scopes as unknown, and never infer failure solely from missing evidence. | -| Exporter shutdown deadline expires | Queued and unattempted eligible pairs become `dropped`; timed-out attempts are `failed`; `flush_complete` is false. Command correctness is unchanged. | - -Observability degradation does not turn successful warehouse work into failure. Conversely, a clean -log or exporter return does not prove command success. Extension discovery/setup is different: an -invalid configured project extension prevents the command from starting. - -## Explicit exclusions - -This foundation does not provide a SQLBuild UI or API server, scheduler, sensors, remote agents, -launch/cancel control plane, durable exporter spool, object-storage compute logs, or core -Kafka/ClickHouse integration. Kafka, ClickHouse, and other exporter destinations are project-owned. - -See [execution history](execution-history.md) for storage APIs and -[typed sinks](sinks.md) for lifecycle-event and command-output delivery semantics. diff --git a/docs/model-layer-rules.md b/docs/model-layer-rules.md deleted file mode 100644 index b31c5ae74a..0000000000 --- a/docs/model-layer-rules.md +++ /dev/null @@ -1,39 +0,0 @@ -# Model layer rules - -SQLBuild model layers describe semantic responsibility, not the highest layer among a model's -dependencies. A model keeps its role when it imports a published interface. - -Model identities use exactly one authoritative layer: - -```text -____[__] -``` - -Supported layers and canonical folders are: - -| Layer | Folder | Logical schema | -| --- | --- | --- | -| `stg`, `stg_v` | `staging` | `staging` | -| `int_clean` | `intermediate/clean` | `intermediate` | -| `int_enriched`, `int_v` | `intermediate/enriched` | `intermediate` | -| `mart`, `mart_v` | `mart` | `mart` | - -`mart` and `mart_v` are published interfaces. Staging and intermediate layers are internal. The -internal dependency order is `stg`/`stg_v` → `int_clean` → `int_enriched`/`int_v`; dependencies on -published marts are outside that rank check. - -Schemas belong in central path defaults, not individual `MODEL()` declarations. View -materialization requires the matching `_v` layer, and `_v` appears only in the canonical layer -segment. - -Temporary internal dependency debt uses exact central exceptions: - -```toml -[[rules.graph_edge_exceptions]] -consumer = "orders__stg__daily_orders" -dependency = "orders__int_clean__customer_orders" -reason = "Remove after the shared normalization is moved upstream." -``` - -An exception matches one consumer/dependency edge. Wildcards are unsupported, and an entry that no -longer suppresses an internal inversion is reported as stale. diff --git a/docs/native-lint-rule-matrix.md b/docs/native-lint-rule-matrix.md deleted file mode 100644 index a31532421b..0000000000 --- a/docs/native-lint-rule-matrix.md +++ /dev/null @@ -1,157 +0,0 @@ -# Native SQL Rules and formatting disposition - -SQLBuild owns SQL Rules semantics and canonical formatting while consuming Polyglot as an external -parser dependency. This ledger accounts for every rule in SQLFluff 4.3's 78-rule catalogue and the -prior Sqruff catalogue. A rule is not omitted merely because SQLBuild assigns it somewhere other -than generic SQL analysis. - -Disposition meanings: - -- **Core compiler**: default native SQL diagnostic, suppressible with a reason. -- **Optional rule**: selected with `[rules].select`; suppressible with a reason. -- **Compiler**: mandatory SQLBuild artifact invariant; ordinary parser/validator behavior for plain SQL. -- **Format**: one deterministic canonical representation, not a configurable warning. -- **project-aware Rules**: a deterministic check that requires SQLBuild resource or repository evidence. -- **Dialect/not applicable**: statement family is outside SQLBuild model queries or already rejected by - the applicable dialect parser. -- **Drop**: subjective convention whose cost or ambiguity exceeds its generic value. - -Rewrite classifications describe formatter-owned transformations: **always**, **conditional**, or **never**. Rules never mutate source. These classifications document shared analysis that `sqb format` may use for deterministic rewrites. - -## Aliasing - -| Upstream | SQLBuild disposition | Native code | Rewrite | Rationale | -| --- | --- | --- | --- | --- | -| AL01 table alias spelling | Format | — | format | Canonical printer owns explicit `AS` spelling. | -| AL02 column alias spelling | Format | — | format | Canonical printer owns explicit `AS` spelling. | -| AL03 calculated expression alias | Optional rule | `SQBRSQL022` | never | A meaningful output name requires intent. | -| AL04 duplicate table alias | Core compiler | `SQBRSQL009` | never | Ambiguous relation identity; compiler rejects when project evidence is complete. | -| AL05 unused table alias | Optional rule | `SQBRSQL023` | conditional | Remove only aliases without qualified/correlated use or a relation column list. | -| AL06 alias length | Drop | — | never | Arbitrary naming threshold. | -| AL07 forbid aliases | Drop | — | never | Counterproductive for nontrivial joins. | -| AL08 duplicate output alias | Core compiler | `SQBRSQL010` | never | Dangerous output identity; compiler owns managed outer schemas. | -| AL09 self alias | Optional rule | `SQBRSQL016` | always | Exact `name AS name` is redundant. | -| AL10 required derived alias | Compiler/dialect | — | never | Polyglot and the active dialect own syntax requirements. | - -## Ambiguity - -| Upstream | SQLBuild disposition | Native code | Rewrite | Rationale | -| --- | --- | --- | --- | --- | -| AM01 DISTINCT with GROUP BY | Core compiler | `SQBRSQL006` | always | SQLBuild reports only demonstrably redundant `DISTINCT`. | -| AM02 bare UNION | Optional rule | `SQBRSQL008` | conditional | Use `UNION DISTINCT` only in dialects that accept the explicit spelling. | -| AM03 mixed ORDER direction | Optional rule | `SQBRSQL026` | never | Diagnosis is safe; multi-expression authored edits remain conservative. | -| AM04 unknown output width | Optional rule | `SQBRSQL021` | never | Column enumeration needs schema evidence; canonical `__empty_fixture()` input CTEs in SQL tests are compiler-controlled. | -| AM05 implicit JOIN type | Optional rule | `SQBRSQL025` | always | Conditioned plain `JOIN` is spelled `INNER JOIN`. | -| AM06 mixed ordinal/name references | Optional rule | `SQBRSQL011` | never | Rewriting ordinals needs resolved projection names. | -| AM07 set branch arity | Core compiler | `SQBRSQL020` | never | Invalid branch shape; intended schema requires input. | -| AM08 implicit cartesian join | Core compiler | `SQBRSQL002`, `SQBRSQL003` | conditional | Explicit `CROSS JOIN` only where precedence and authored mapping are proven. | -| AM09 unordered LIMIT/OFFSET | Core compiler | `SQBRSQL004` | never | Ordering keys and tie-breakers require intent. | - -## Capitalization - -| Upstream | SQLBuild disposition | Rewrite | -| --- | --- | --- | -| CP01 keywords | Format | format | -| CP02 identifiers | Format when dialect semantics permit | format | -| CP03 functions | Format | format | -| CP04 literals | Format | format | -| CP05 data types | Format | format | - -SQLBuild has one canonical formatter and does not expose capitalization rule configuration. - -## Conventions - -| Upstream | SQLBuild disposition | Native code | Rewrite | Rationale | -| --- | --- | --- | --- | --- | -| CV01 inequality spelling | Format | — | format | Canonical operator spelling is presentation. | -| CV02 prefer COALESCE | Drop | — | never | Dialect-native alternatives can differ in typing and evaluation. | -| CV03 trailing comma | Format | — | format | Canonical list layout. | -| CV04 COUNT spelling | Optional rule/simplification | `SQBRSQL017` | always | `COUNT(1)` becomes explicit row-count `COUNT(*)`. | -| CV05 NULL comparison | Core compiler | `SQBRSQL001` | conditional | Right-side equality forms have deterministic `IS` repairs. | -| CV06 terminator | Format | — | format | Canonical statement/file boundary. | -| CV07 statement brackets | Format | — | format | Remove only with equivalence proof. | -| CV08 prefer LEFT JOIN | Drop | — | never | Direction is contextual, not correctness. | -| CV09 blocked words | project-aware Rules | — | never | Repository governance, not generic SQL. | -| CV10 literal quote style | Format | — | format | Normalize only with dialect-safe equivalence. | -| CV11 cast style | Format | — | format | Canonical printer owns spelling without changing types. | -| CV12 hidden join condition | Core compiler | `SQBRSQL002` | conditional | Comma joins become explicit only when precedence is clear. | - -## Jinja and layout - -| Upstream | SQLBuild disposition | Rewrite | -| --- | --- | --- | -| JJ01 Jinja padding | Not applicable | never | SQLBuild uses Python interpolation rather than Jinja. | -| LT01–LT15 | Format | format | Spacing, indentation, line width, operators, commas, CTE layout, clause breaks, and file newlines belong to the canonical formatter. | - -## References - -| Upstream | SQLBuild disposition | Native code | Rewrite | Rationale | -| --- | --- | --- | --- | --- | -| RF01 reference absent from scope | Core compiler | `SQBRSQL029` | never | Native SQL analysis reports proven unknown qualifiers; compiler owns schema-resolved failures. | -| RF02 qualify multi-relation columns | Optional rule | `SQBRSQL027` | never | Correct qualifier requires relation-resolution evidence. | -| RF03 consistent single-relation qualification | Optional rule | `SQBRSQL028` | never | Readability policy; do not rewrite several ranges speculatively. | -| RF04 keyword identifiers | Dialect/project-aware Rules | — | never | Dialect parser owns illegal forms; legal naming convention requires project context. | -| RF05 special characters | project-aware Rules | — | never | Project naming convention, not generic correctness. | -| RF06 unnecessary quotes | Format | — | format | Remove only when identifier semantics remain identical. | -| RF07 window alias references | Compiler/dialect | — | never | Scope resolution and active dialect determine legality. | - -## Structure - -| Upstream | SQLBuild disposition | Native code | Rewrite | Rationale | -| --- | --- | --- | --- | --- | -| ST01 ELSE NULL | Optional rule | `SQBRSQL012` | always | Omission has the same CASE fallback. | -| ST02 simple boolean CASE | Optional rule | `SQBRSQL030` | conditional | Exact TRUE/FALSE shape becomes NULL-safe `COALESCE`. | -| ST03 unused CTE | Core compiler | `SQBRSQL005` | conditional | Remove only authored, comment-safe, select-only, non-recursive dead CTEs. | -| ST04 nested ELSE CASE | Optional rule | `SQBRSQL031` | never | Flattening needs multi-range branch reconstruction. | -| ST05 prefer CTE over subquery | Drop | — | never | Subjective and can harm optimizer/readability choices. | -| ST06 column category order | Drop | — | never | Subjective and potentially schema-breaking. | -| ST07 prefer ON over USING | Drop | — | never | Forms have semantic and output-shape tradeoffs. | -| ST08 DISTINCT parentheses | Optional rule | `SQBRSQL013` | conditional | Rewrite only comment-free, balanced authored forms. | -| ST09 join operand order | Drop | — | never | Cosmetic. | -| ST10 constant predicate | Optional rule | `SQBRSQL014` | never | Removing scaffolding can change intended control flow. | -| ST11 unused join | Optional rule | `SQBRSQL032` | never | Join may intentionally filter or multiply rows. | -| ST12 repeated semicolon | Optional rule/format | `SQBRSQL015` | always | Empty statement terminator is removable. | - -## Dialect-specific bundles - -| Upstream | SQLBuild disposition | Rationale | -| --- | --- | --- | -| OR01 Oracle empty batch | Dialect/not applicable | SQLBuild model bodies are query expressions; active parser owns batch syntax. | -| PG01 excessive locks | Dialect/not applicable | Transaction/DDL operational behavior is outside model-query Rules. | -| PG02 NOT VALID foreign key | Dialect/not applicable | SQLBuild model bodies do not own PostgreSQL constraint DDL. | -| TQ01 `sp_` procedure prefix | project-aware Rules/not applicable | Procedure naming convention is not generic model SQL. | -| TQ02 procedure BEGIN/END | Dialect/not applicable | Procedure body syntax is owned by the T-SQL parser/compiler. | -| TQ03 empty batch | Format/dialect | Canonical file output removes empty statements where applicable. | -| TQ04 procedure alias spelling | Format/dialect | Canonical spelling only in supported T-SQL statement contexts. | - -## SQLBuild-owned additions - -| Native code | Disposition | Rewrite | Purpose | -| --- | --- | --- | --- | -| `SQBRSQL007` | Core compiler | never | Positional set operation with star is vulnerable to schema-order drift. | -| `SQBRSQL018` | Core compiler | never | `ROW_NUMBER` without deterministic window ordering is unstable. | -| `SQBRSQL019` | Core compiler | never | Literal NULL in `NOT IN` triggers three-valued anti-filter behavior. | -| `SQBRSQL024` | Optional rule | never | Right-side WHERE reference can null-reject a LEFT JOIN. | -| `SQBRSQL033` | Optional rule | never | Standalone comments attach immediately to a supported syntax node. | -| `SQBRSQL034` | Optional rule | never | Transformation logic remains in top-level CTEs. | -| `SQBRSQL035` | Optional rule | never | The terminal SELECT reads plainly from the final top-level CTE. | -| `SQBRSQL036` | Optional rule | never | CTEs remain at statement top level. | -| `SQBRSQL037` | Optional rule | never | Recursive CTEs require an explicit alternative design. | -| `SQBRSQL038` | Optional rule | never | Explicit cartesian products require a reasoned suppression. | -| `SQBRSQL039` | Core compiler | never | Non-lateral derived relations are named as top-level CTEs instead of being hidden inside `FROM` or `JOIN`. | - -Schema-dependent nullable `NOT IN`, inferred join cardinality, denominator safety, integer division, -timezone comparison, persisted-output rules, and incremental cursor/replay checks remain compiler or -project-aware Rules work when they need project schema/materialization facts. They are not weakened into syntax-only -generic guesses. - -## Current native totals - -- 39 SQLBuild-owned generic native rule codes (`SQBRSQL001`–`SQBRSQL039`) -- 13 core defaults -- 26 optional rules selectable by exact code or prefix under `[rules].select` -- 14 always-or-conditionally formatter-rewritable native analysis types -- `SQBRSQL000` suppression validation, with stale standalone directives formatter-rewritable -- five SQLBuild header diagnostics, with whitespace and leading-comment promotion handled when safe - -The 33 upstream presentation rules remain formatter-owned rather than inflating the Rules count. diff --git a/docs/query-diffs.md b/docs/query-diffs.md deleted file mode 100644 index 2bce1b210a..0000000000 --- a/docs/query-diffs.md +++ /dev/null @@ -1,164 +0,0 @@ -# Query and model data diffs - -`sqb diff` compares either selected models or two literal read-only SQL queries. Both input modes -use the same schema inspection, row-count reporting, key validation, deterministic sampling, -numeric tolerance, excluded-column, evidence, JSON, and exit-code behavior. - -## Compare models - -Model mode keeps the `FROM:TO` range and selectors: - -```bash -sqb diff prod:dev --full --select orders -``` - -By default, row identity comes from each model's `unique_key`. Repeated `--key` arguments override -that configuration for one invocation: - -```bash -sqb diff prod:dev --full --select order_lines \ - --key order_id \ - --key line_id -``` - -For a model without a stable row key, opt in to exact full-row multiset comparison with -`--unkeyed`. Duplicate rows retain their multiplicity; SQLBuild never guesses a key. - -```bash -sqb diff prod:dev --full --select daily_order_totals --unkeyed -``` - -## Compare raw queries - -Query mode omits `FROM:TO` because each query identifies its own input. Supply each side inline or -from a UTF-8 file, and choose keyed or unkeyed comparison explicitly: - -```bash -sqb diff \ - --left-query 'SELECT order_id, amount_cents FROM analytics.orders_before' \ - --right-query 'SELECT order_id, amount_cents FROM analytics.orders_after' \ - --left-label before \ - --right-label after \ - --key order_id -``` - -```bash -sqb diff \ - --left-query-file queries/orders_before.sql \ - --right-query-file queries/orders_after.sql \ - --key account_id \ - --key order_id -``` - -Raw inputs must contain exactly one read-only `SELECT`, `WITH`, or `VALUES` expression. SQLBuild -does not expand `ref()` or other SQLBuild templates in these inputs. The active target connection -executes both sides; use `--target NAME` to select another configured connection. - -Query mode performs a full comparison when no comparison mode flag is present. `--schema-only` is -also available. `--bounded` is model-specific; filter both raw queries directly when a bounded -query comparison is needed. - -Raw-query discovery loads only project configuration, target configuration, and the selected -adapter. It does not import unrelated project sinks, hooks, loaders, or providers. - -### Sampling, tolerances, and exclusions - -Keyed query comparisons support deterministic union-key sampling and the same bounded mismatch -examples as model comparisons: - -```bash -sqb diff \ - --left-query-file queries/orders_before.sql \ - --right-query-file queries/orders_after.sql \ - --key order_id \ - --sample-rows 50000 \ - --sample-seed 7 -``` - -Use repeated invocation overrides where needed: - -```bash -sqb diff \ - --left-query-file queries/orders_before.sql \ - --right-query-file queries/orders_after.sql \ - --key order_id \ - --exclude-column loaded_at \ - --tolerance amount_cents:absolute=1 \ - --tolerance conversion_rate:relative=0.001 -``` - -`--exhaustive` disables inherited or requested sampling. Unkeyed comparison is always exhaustive -and exact, so it does not accept sampling or numeric tolerances. - -### Bounded example values - -Comparison remains exact regardless of how examples are rendered. By default, long values are -limited to 160 characters and show context around the first differing character. Every shortened -value is marked as truncated and includes its original length. - -Control evidence independently from the number of collected examples: - -```bash -# Increase the displayed context without changing comparison scope. -sqb diff --left-query-file before.sql --right-query-file after.sql \ - --key order_id --max-value-length 500 - -# Retain keys and aggregate counts but suppress example values. -sqb diff --left-query-file before.sql --right-query-file after.sql \ - --key order_id --no-example-values - -# Explicitly opt in to complete values. --verbose alone remains bounded. -sqb diff --left-query-file before.sql --right-query-file after.sql \ - --key order_id --full-example-values -``` - -Ordinary keys are kept complete. Exceptionally long keys are shortened with an explicit length and -stable digest so an operator can still identify them without flooding terminal output. - -## Stable query results and cleanup - -SQLBuild materializes each raw query once in the selected target's default schema before comparing -it. Artifacts use a reserved run-owned name and are dropped immediately when the command finishes, -including after comparison errors. - -Each successfully created artifact publishes an immutable `query_diff_artifact` fingerprint. The -fingerprint is ownership evidence for crash recovery only: running and comparing the queries never -reads historical fingerprints, and fingerprints do not represent planned, running, complete, or -cleaned workflow states. - -If a process stops before immediate cleanup, the next query diff and `sqb janitor` can remove an -expired artifact only when its exact physical identity and reserved name match its ownership -fingerprint. A matching name without ownership evidence is reported for manual investigation and -is not deleted automatically. - -The recovery TTL defaults to 24 hours and accepts SQLBuild fixed-duration syntax: - -```toml -[diff] -query_artifact_ttl = "24h" -``` - -The TTL is a crash-recovery backstop, not the normal cleanup path. Historical ownership inspection -problems are reported but do not prevent the current queries from running. Failure to publish -ownership for a newly created artifact, or failure to remove a current-run artifact, is an execution -error. - -## Structured output and exit behavior - -Use `--json-output PATH` in either mode, or `--json` to emit one JSON document to stdout while all -lifecycle progress remains on stderr. Query results include `input_kind = "query"`, named left and -right inputs, `query_comparisons`, sparse nonzero `column_mismatches`, lifecycle timings, and -explicit example truncation metadata. Existing `models` output remains available for compatibility. - -Raw-query automation distinguishes complete findings from incomplete evidence and execution -failure: - -| Exit | Outcome | -|---:|---| -| `0` | Complete comparison with no differences | -| `1` | Complete comparison with findings | -| `2` | Safety, schema, or key preflight prevented complete value evidence | -| `3` | Setup, connection, materialization, comparison execution, ownership, or cleanup failed | - -Human output and JSON use the same outcome. Lifecycle messages include elapsed connection, -reconciliation, inspection, materialization, comparison, cleanup, and total durations. diff --git a/docs/rules-migration-ledger.md b/docs/rules-migration-ledger.md deleted file mode 100644 index 54cd765772..0000000000 --- a/docs/rules-migration-ledger.md +++ /dev/null @@ -1,70 +0,0 @@ -# Rules migration ledger - -SQLBuild assigns deterministic checks by the evidence they require: - -> SQL rules evaluate one plain SQL statement. Project-aware rules evaluate how SQLBuild resources are -> organised, configured, documented, tested, and connected. - -Compiler checks remain mandatory artifact-correctness invariants. The formatter owns one canonical -presentation. A check is not project-aware rules merely because it is strict or opinionated. - -## Former Kata rule disposition - -This ledger accounts for every rule in the replaced `SQBK` catalogue. Old identities are not aliases -for the new rules. - -| Former code | Final owner | Final code | Reason | -| --- | --- | --- | --- | -| `SQBKS000` | SQL Rules | `SQBRSQL033` | Comment attachment is statement-local; the old first-inner-CTE-line restriction was deleted. | -| `SQBKS001` | SQL Rules | `SQBRSQL034` | Top-level CTE shape needs only parsed SQL. | -| `SQBKS002` | SQL Rules | `SQBRSQL035` | Terminal-select shape needs only parsed SQL. | -| `SQBKS101` | project-aware rules | `SQBRMODEL101` | Import CTEs depend on resolved SQLBuild references and sources. | -| `SQBKS201` | project-aware rules | `SQBRMODEL102` | The star allowance depends on identifying dependency-import CTEs and configured exceptions. | -| `SQBKS202` | SQL Rules | `SQBRSQL007` | Positional set-operation stars were already covered by native lint. | -| `SQBKS301` | SQL Rules | `SQBRSQL036` | Nested CTEs are visible in one parsed statement. | -| `SQBKS302` | SQL Rules | `SQBRSQL037` | Recursive CTEs are visible in one parsed statement. | -| `SQBKS401` | project-aware rules | `SQBRMODEL103` | The check compares model naming with resolved materialisation. | -| `SQBKS501` | Deleted | — | Judging whether a CTE name is descriptive is subjective. | -| `SQBKL001` | project-aware rules | `SQBRGRAPH101` | Layer direction requires the compiled dependency graph. | -| `SQBKL101` | project-aware rules | `SQBRGRAPH102` | Managed dependencies require SQLBuild reference/source ownership. | -| `SQBKR001` | project-aware rules | `SQBRPROJECT101` | Model identity is a SQLBuild resource fact. | -| `SQBKR002` | project-aware rules | `SQBRPROJECT102` | Folder ownership is repository context. | -| `SQBKR201` | project-aware rules | `SQBRPROJECT103` | Source vocabulary is project configuration. | -| `SQBKR301` | project-aware rules | `SQBRPROJECT104` | Referenced model identity comes from compilation. | -| `SQBKR401` | project-aware rules | `SQBRCONTRACT101` | Contract enforcement is MODEL metadata. | -| `SQBKR500`–`SQBKR503` | project-aware rules | `SQBRPROJECT201`–`SQBRPROJECT204` | Domain and owner layout require repository paths and project-wide inventory. | -| `SQBKJ001` | SQL Rules | `SQBRSQL002` | Comma joins were already covered by native lint. | -| `SQBKJ002` | SQL Rules | `SQBRSQL038` | An explicit cross join is statement-local and suppressible with a reason. | -| `SQBKJ101` | SQL Rules | `SQBRSQL003` | Missing or unconditional join constraints were already covered by native lint. | -| `SQBKN001`–`SQBKN003` | project-aware rules | `SQBRCONTRACT102`–`SQBRCONTRACT104` | These checks compare names with declared contract types. | -| `SQBKH001`–`SQBKH002` | project-aware rules | `SQBRDECLARATION101`–`SQBRDECLARATION102` | Enum and constant use requires declarations and compiled substitutions. | -| `SQBKH101` | project-aware rules | `SQBRDECLARATION201` | Duplicate declarations require project-wide inventory. | -| `SQBKH201` | project-aware rules | `SQBRDECLARATION301` | Declaration placement requires repository ownership. | -| `SQBKH301`–`SQBKH305` | project-aware rules | `SQBRDECLARATION302`–`SQBRDECLARATION306` | Declaration-container checks require paths and project-wide inventory. | -| `SQBKT001`–`SQBKT004` | project-aware rules | `SQBRTEST101`–`SQBRTEST104` | Test roots, names, and ownership require compiler test resources. | -| `SQBKT101` | project-aware rules | `SQBRTEST105` | Scenario description rules require SCENARIO metadata. | -| `SQBKX001`–`SQBKX002` | project-aware rules | `SQBRTEST201`–`SQBRTEST202` | Audit and test minima require compiled model evidence. | -| `SQBKX201` | project-aware rules | `SQBRTEST301` | Custom-rule coverage requires the configured Rules catalogue and test inventory. | - -## Rules added after the migration - -These built-ins have no former `SQBK` counterpart. - -| Code | Owner | Reason | -| --- | --- | --- | -| `SQBRTEST203` | project-aware rules | Rejecting empty-input-only SQL tests requires compiled test fixtures and assertions; see [SQL test coverage rules](sql-test-coverage-rules.md). | - -## Rules families - -- `SQBRCONTRACT`: contracts and declared column semantics. -- `SQBRDECLARATION`: declarations and decision vocabulary. -- `SQBRGRAPH`: compiled dependency graph rules. -- `SQBRPROJECT`: repository naming and ownership layout. -- `SQBRMODEL`: SQLBuild-aware model structure. -- `SQBRTEST`: SQL tests, audits, and custom-rule evidence. - -Current built-ins use `SQBR`. Current custom rules use -`XSQBR`. Former `SQBL001`–`SQBL038` codes map directly to -`SQBRSQL001`–`SQBRSQL038`. Former `SQBP` families map to the complete family words above. Former -`XSQBL...` and `XSQBP...` custom codes must be reassigned to globally unique `XSQBR...` codes. -The former identifiers are migration evidence only and are not accepted as aliases. diff --git a/docs/sinks.md b/docs/sinks.md deleted file mode 100644 index 86bd83e747..0000000000 --- a/docs/sinks.md +++ /dev/null @@ -1,261 +0,0 @@ -# Typed sinks - -Project sinks consume one declared record type. Lifecycle-event and command-output contracts are -separate even when both sinks use the same provider instance and remote service. Delivery is -bounded, isolated, destination-neutral, and best effort. A sink cannot change an execution result -and is not durable history. - -The former `sqlbuild.event_exporters`, `sqlbuild.output_capture`, `event_exporters/`, and -`[event_exporters]` interfaces have been replaced. Move declarations to `sinks/`, import the typed -APIs below from `sqlbuild.sinks`, and move lifecycle filters to `[sinks.lifecycle]`. Legacy project -directories and configuration fail with an explicit migration error rather than silently disabling -publication. - -## Declare a lifecycle-event sink - -SQLBuild imports public `sinks/**/*.py` files in sorted path order. It ignores -`__init__.py` and any file below a path component beginning with `_`. Only functions defined in the -module and decorated with the public API are sinks. - -```python -# sinks/publish.py -from providers.destination_client import DestinationClient -from sqlbuild.sinks import ( - LifecycleEvent, - LifecycleEventKind, - lifecycle_event_sink, - lifecycle_event_to_json, -) - - -@lifecycle_event_sink( - name="publish_lifecycle", - event_kinds={LifecycleEventKind.RUN, LifecycleEventKind.RESOURCE, LifecycleEventKind.AUDIT}, - min_severity="info", -) -def publish_lifecycle( - event: LifecycleEvent, - destination_client: DestinationClient, -) -> None: - destination_client.publish( - route="sqlbuild.lifecycle.v1", - key=event.event_id, - payload=lifecycle_event_to_json(event).encode("utf-8"), - ) -``` - -The function must be synchronous, declare `event` first, use only named parameters, have no -defaults or variadics, and return `None` if annotated. `event` may be unannotated or exactly -`LifecycleEvent`. Every later parameter is injected by provider name and may be unannotated or -annotated with exactly that discovered provider class. Sink names are unique lower-snake-case -identifiers; the default name is the function name. - -## Declare a command-output sink - -Remote stdout/stderr publication is disabled unless a public function under `sinks/` is explicitly -decorated with `@command_output_sink`. Lifecycle-event sinks never receive command output. - -```python -# sinks/publish.py -from providers.destination_client import DestinationClient -from sqlbuild.sinks import ( - CommandOutputRecord, - command_output_sink, - command_output_to_json, -) - - -@command_output_sink(name="publish_command_output", streams={"stdout", "stderr"}) -def publish_command_output( - record: CommandOutputRecord, - destination_client: DestinationClient, -) -> None: - destination_client.publish( - route="sqlbuild.command_output.v1", - key=record.record_id, - payload=command_output_to_json(record).encode("utf-8"), - ) -``` - -The function must be synchronous, declare `record` first, and follow the same provider-parameter -rules as a lifecycle sink. `streams` defaults to both streams and may explicitly narrow delivery to -`stdout` or `stderr`. Loss summaries are delivered to every command-output sink because a shared -bounded queue can lose records from either stream. - -`CommandOutputRecord` is a canonical versioned envelope. Records are ANSI-free, line-oriented, -UTF-8-size-bounded chunks with invocation/run correlation, per-invocation sequence, stream, -chunk position, producer metadata, and opaque JSON-compatible integration context. A -`command_output_loss` record reports bounded-queue loss. This stream is troubleshooting data: it is -potentially sensitive, may be lossy, and is not execution evidence. Exact host-local bytes remain in -the invocation's `stdout.log` and `stderr.log` compute logs. - -A minimal destination-neutral provider shape is: - -```python -# providers/destination_client.py -from sqlbuild.providers import Provider - - -class DestinationClient(Provider): - provider_name = "destination_client" - - def setup(self, ctx: object | None) -> None: - del ctx - # Create the project-owned SDK client from secret-resolved settings here. - - def publish(self, *, route: str, key: str, payload: bytes) -> None: - del route, key, payload - # Route, key, serialization, retries, acknowledgements, and durability are project policy. - - def teardown(self) -> None: - # Close the project-owned SDK client here. - pass -``` - -The example uses released SQLBuild imports and exact discovery signatures. Replace only the method -bodies with a project-owned destination SDK. SQLBuild owns event validation/redaction and local -dispatch; the project owns destination client settings, credentials, topic/route, key, -serialization, retry, acknowledgement, and durability. - -## Runtime filters - -Declaration filters opt in; runtime configuration can only narrow them: - -```toml -[sinks.lifecycle] -event_kinds = ["run", "resource", "operation", "statement"] -min_severity = "info" - -[sinks.lifecycle.named.publish_lifecycle] -event_kinds = ["resource", "statement"] -min_severity = "warning" -``` - -Effective kinds are the intersection of declaration, global, and named sets. Effective minimum -severity is the strictest of all three. Omitting declaration options means all kinds at `debug`. -Unknown lifecycle sink names, keys, kinds, or severities fail before execution. -Python declarations should use `LifecycleEventKind`; TOML continues to use the corresponding string -values. The `audit` kind carries `audit_completed` as soon as each audit outcome is confirmed during -the run: standalone, source, and end audits publish per audit, and model audits publish when their -model result completes. Each executed (non-reused) audit publishes exactly once. Its payload -includes audit and attachment identity, evaluation mode, outcome and severity, run scope, optional -measurement/sample/threshold summary, bounded evidence metadata and rendered audit SQL diagnostics. - -| Lifecycle event | Export kind | Severity | Queue priority | -| --- | --- | --- | --- | -| `invocation_started` | `invocation` | `debug` | 0 | -| `run_started` | `run` | `debug` | 0 | -| `resource_attempt_started` | `resource` | `debug` | 0 | -| `microbatch_started` | `microbatch` | `debug` | 0 | -| `operation_started` | `operation` | `debug` | 0 | -| `statement_started`, `statement_submitted` | `statement` | `debug` | 0 | -| `retry_scheduled` | `retry` | `warning` | 1 | -| `audit_completed` | `audit` | `info` | 2 | -| `invocation_completed`, `run_completed`, `resource_attempt_completed`, `resource_attempt_skipped`, `microbatch_completed`, `operation_completed`, `statement_completed` | Corresponding kind | `info` | 2 | -| Any `*_failed` event | Corresponding kind | `error` | 3 | - -Diagnostics and command output never enter lifecycle-event queues. - -## Discovery and provider lifetime - -Startup first imports sink modules and collects declarations without framework provider discovery. -If there are no decorated public sinks, SQLBuild does not discover, construct, or set up providers -and does not create delivery threads. Sink modules are ordinary Python modules, so -their own imports and import-time side effects still run; keep declarations import-safe. Otherwise -normal project discovery finds provider classes, validates name/type -injection, constructs providers, and calls each required provider's `setup` at most once on first -use. Shared providers are torn down once in reverse setup order. - -Shutdown stops lifecycle-event acceptance, performs a bounded drain, and only then requests provider -teardown. The drain defaults to two seconds and is configurable for all lifecycle sinks: - -```toml -[sinks.lifecycle] -shutdown_timeout = "30s" -``` - -`shutdown_timeout` is a fixed duration string from `"0s"` to `"10m"` such as `"30s"` or `"2m"`; -values outside that range, calendar units, or non-strings fail before execution. `"0s"` drops anything still queued at exit. The setting is global only and is not -accepted under `[sinks.lifecycle.named.]`. It bounds how long the command waits at exit; it does -not change the per-invocation timeout below. A sink that exports audit results should keep each call -well below that one-second invocation bound and use a drain long enough to flush the tail of a run. Each lifecycle sink invocation runs on its own daemon isolation thread. A call has a one-second -default timeout; after timeout that sink is blocked from later invocations. Python cannot kill -the thread or reverse destination side effects. Provider teardown is deferred until all live -invocations return, so a forever-hung daemon retains its provider session until process exit. A -provider is never torn down while live sink code can access it. Command-output capture has its own -bounded queue, batching, and shutdown deadline, then uses the already-bound command-scoped provider -instances. - -## Queueing and accounting - -One command owns one daemon dispatcher and a queue of 1024 events by default. Dispatch always takes -the highest priority and is FIFO by canonical enqueue sequence among equal priorities. If full, a -higher-priority arrival displaces the oldest queued event at the lowest lower priority. An arrival -that is not higher priority is dropped. Filtering happens before queueing, and each queued event -carries its exact eligible exporter set, preventing duplicate attempts during fanout or displacement. - -For every event/exporter pair exactly one rule applies: - -```text -filtered += 1 - -or - -accepted += 1 -accepted ends in exactly one of delivered, failed, or dropped -``` - -Every final per-exporter and aggregate snapshot therefore satisfies: - -```text -accepted == delivered + failed + dropped -``` - -`delivered` means only that the project callable returned normally. It does not prove remote -acknowledgement, persistence, deduplication, or exactly-once delivery unless project code establishes -those properties. - -Health defaults to 30 seconds and emits only after counters or queue depth change. A single pending -periodic slot is overwritten by the latest snapshot while notification is blocked, so health is -coalesced rather than backlogged. Failure notices use a separate bounded queue and may be dropped. -The final summary has a retained write-once slot. Notification callbacks run on one daemon worker; -exceptions are swallowed, and shutdown does not wait for callbacks. - -When the final summary reports any `dropped` or `failed` lifecycle attempts, the command prints one -warning line to stderr after its own output, for example: - -```text -Warning: command completed successfully, but lifecycle event export was incomplete: 140 of 248 events dropped, 0 failed (sink 'orders_events'). Increase sinks.lifecycle.shutdown_timeout or check sink health. -``` - -The success clause appears only when the command itself succeeded, so the warning never makes a -successful run look failed; otherwise it starts `Warning: lifecycle event export was incomplete`. -Export loss never changes the exit code, and stdout (including `--json`) is unaffected. Nothing is -printed when every accepted attempt was delivered. With several sinks the counts are event -deliveries and only affected sinks are named. - -Nonfinal health always has `flush_complete=false`. Final `flush_complete=true` means the dispatcher -stopped, no exporter invocation remains live, the queue is empty, and all accepted pairs satisfy the -accounting invariant. A timed-out live invocation makes it false even though that attempt is -`failed` and later/queued attempts are `dropped`. - -## Security and failure boundaries - -Lifecycle payloads have a catalogued allowlist. They contain no full SQL, parameter values, -credentials, arbitrary user messages, raw process output, destination details, or provider settings. -Exporter failure and health diagnostics include only exporter name, event kind/severity, exception -type, counters, and queue dimensions. They bypass lifecycle publication and exporter enqueue to -prevent recursion. - -Do not enrich exported events from `target/run/`, compute logs, final JSON, environment variables, -or provider secrets unless the destination has an explicit sensitive-data policy. Restrict -destination credentials and permissions to only the routes and operations this exporter needs. - -Discovery, declaration, configuration, provider construction, and provider setup errors are project -configuration errors and prevent command execution. Queue overload, exporter exceptions, timeouts, -hung calls, notification failures, and incomplete shutdown affect only best-effort export. Consult -the [failure matrix](execution-observability.md#failure-behavior) for operator response. - -SQLBuild core intentionally provides no durable spool and no Kafka or ClickHouse implementation. -See [execution observability](execution-observability.md) and -[execution history](execution-history.md) for canonical authority and durable storage. diff --git a/docs/sql-test-coverage-rules.md b/docs/sql-test-coverage-rules.md deleted file mode 100644 index 68e3216aa9..0000000000 --- a/docs/sql-test-coverage-rules.md +++ /dev/null @@ -1,83 +0,0 @@ -# SQL test coverage rules - -`SQBRTEST202` (`minimum-tests`) requires each non-passthrough model to have at least -`min_tests_per_model` model-mode SQL unit tests. `SQBRTEST203` (`empty-input-only-test`) rejects -tests that cannot fail because they only prove that empty inputs produce no rows. Both rules are -enabled by default when the `SQBRTEST` family is selected. - -## Empty-input-only tests - -Do not write tests like this one: - -```sql -TEST (name "orders__empty_inputs_produce_no_rows"); - -WITH __source__raw_orders AS ( - SELECT NULL AS order_id, NULL AS amount - WHERE FALSE -), __assert__empty_inputs_produce_no_rows AS ( - SELECT 1 AS unexpected_row - FROM __ref("orders") -) -SELECT 1 -``` - -When a model's rows come only from its inputs, this test passes for almost any model logic, so it -adds no coverage. `SQBRTEST203` flags a model-mode test when all of the following hold: - -- Every mock (`__ref__`, `__source__`, `__seed__`, `__dbt_ref__`, `__table_fn__`) is a single - `SELECT` without a set operator that is limited by `LIMIT 0`, is `SELECT * FROM __EMPTY_FIXTURE()`, - or is filtered by `WHERE FALSE` or `WHERE 1 = 0` without calling any function (an aggregate such - as `ORDER BY COUNT(*)` can still return a row). A `UNION` whose last branch is filtered is not - empty. -- Every `__expected__` CTE is empty in the same way, or there is none. -- Every `__assert__` CTE is a bare row-existence check, `SELECT FROM - __ref("")` on a tested model, with no `WHERE`, `JOIN`, `GROUP BY`, `HAVING`, `QUALIFY`, - set operator, `EXISTS`, subquery, `LIMIT`, `OFFSET` or `FETCH`, and no function call in its - select list or `ORDER BY`. -- The test has no `__macro__` mocks and no model query overrides. - -Macro, UDF, and table-function tests are never flagged, and SQL that the rules parser cannot read -is never flagged. - -Replace a flagged test with one that mocks representative rows and asserts concrete transformed -output, or delete it. - -## Legitimate empty-input tests - -An empty-input test is legitimate when it asserts concrete output. For example, a global aggregate -must still return one zero-valued summary row when it has no input: - -```sql -TEST (name "order_summary__empty_inputs_return_zero_row"); - -WITH __source__raw_orders AS ( - SELECT CAST(NULL AS INTEGER) AS order_id, CAST(NULL AS INTEGER) AS amount - WHERE FALSE -), __expected__order_summary AS ( - SELECT 0 AS order_count, 0 AS total_amount -) -SELECT 1 -``` - -An `__assert__` that compares the model against a summary row with `EXCEPT` in both directions, -or one that filters for invalid rows, is also not flagged. - -## Reviewed exceptions - -List deliberate exceptions by test name in the project file, not in the test: - -```toml -[rules.rule_options.SQBRTEST203] -allowed_tests = ["customers__empty_inputs_produce_no_rows"] -``` - -`allowed_tests` must be a list of strings. For a parameterized test, an entry may name the whole -test or one expanded case. An entry that names no existing test is reported as stale. - -## Interaction with minimum tests - -Tests matched by `SQBRTEST203` do not count toward `min_tests_per_model`, whether or not -`SQBRTEST203` is selected, so filler cannot satisfy the minimum. Tests listed in `allowed_tests` are -reviewed exceptions and do count. A `SQBRTEST202` finding reports how many empty-input-only tests -it did not count. diff --git a/docs/warm-compile-performance.md b/docs/warm-compile-performance.md deleted file mode 100644 index d349b27506..0000000000 --- a/docs/warm-compile-performance.md +++ /dev/null @@ -1,48 +0,0 @@ -# Varied warm-compile guard - -`make test-e2e-varied-cache-performance` exercises a generated 1,000-model order -project in fresh CLI processes. The cache performance CI job runs this guard in a -4GiB cgroup with swap disabled, alongside the existing scaling benchmarks. - -The workload uses independently authored synthetic SQL. It retains the dense -fixture's sources, seeds, SQL functions, audits, scoped Python macros, SQL tests, -all built-in rules and one isolated custom project rule. It adds a shared dependency -graph and varies the actual expressions: CASE, aggregate windows, array indexing, -null handling, grouped queries, lateral joins and unions. - -## Structural protection - -The guard measures structure from compiled SQL and model dependencies. It requires: - -- At least 950 distinct operator-tree shapes. Identifier names and literal values - do not count toward this diversity measurement. -- A connected component containing at least 900 models. -- Dependency depth between 40 and 60 models, with 150–400 leaf models. - -These checks prevent a fixture change from silently replacing the workload with -mostly repeated queries or independent shallow chains. Structural diversity is -still a proxy for application workloads; private acceptance measurements remain -separate from this public synthetic fixture. - -## Cache and correctness protection - -The guard measures initial cache fill, an unchanged warm compile, a leaf SQL edit, -a shared upstream SQL edit and a Python macro edit. Each edit is followed by an -unchanged compile and an uncached oracle with both analysis and rule cache reuse -disabled. Project configuration is restored after each oracle. - -Every edited cached result must match its oracle's semantic JSON and every compiled -artifact. Unchanged runs must reuse analysis for every model. Edit runs must record -both reuse and invalidation, rather than treating a high cache-hit count alone as -evidence of correctness. A smaller integration fixture executes its generated SQL -tests in DuckDB with the standard rules enabled. - -Warm and edit budgets apply to complete fresh-process CLI wall time, including -discovery, macro expansion, lint, rules, artifacts and output. SQL-analysis timing -alone is insufficient: these other phases can dominate after analysis is cached. - -The initial ceilings are 24s for cache fill, 10s for unchanged warm compiles and -13s for edits, with a 2GiB process-RSS ceiling and the separate 4GiB combined CI -limit. These are regression ceilings with hosted-execution headroom, not promised -application timings. Golden fingerprints also protect the baseline and edited -outputs across compiler releases. diff --git a/src/sqlbuild/runtime/compute_logs/README.md b/src/sqlbuild/runtime/compute_logs/README.md index d2587871ca..8534f6c998 100644 --- a/src/sqlbuild/runtime/compute_logs/README.md +++ b/src/sqlbuild/runtime/compute_logs/README.md @@ -15,5 +15,5 @@ The local implementation rejects symlink roots and path escapes but leaves modes ownership and the process umask. It is host-local and may contain sensitive output. It does not provide object storage, lifecycle authority, or a cross-host log service. -Selected public API examples and the operator walkthrough are documented in -[`docs/execution-observability.md`](../../../../docs/execution-observability.md). +Operator documentation is at +[docs.sqlbuild.com/concepts/observability](https://docs.sqlbuild.com/concepts/observability). diff --git a/src/sqlbuild/runtime/event_exporting/README.md b/src/sqlbuild/runtime/event_exporting/README.md index 76b6c2fc03..68ff9dfb11 100644 --- a/src/sqlbuild/runtime/event_exporting/README.md +++ b/src/sqlbuild/runtime/event_exporting/README.md @@ -74,5 +74,5 @@ declarations without discovering providers. If those modules contain only helper not import project providers or construct exporter queue, dispatcher, or notification threads. Normal command-owned project discovery remains responsible for providers needed by nodes and hooks. -The project declaration, configuration, delivery, security, and failure contract is documented in -[`docs/sinks.md`](../../../../docs/sinks.md). +The project declaration, configuration, delivery, security, and failure contract is documented at +[docs.sqlbuild.com/concepts/observability/sinks](https://docs.sqlbuild.com/concepts/observability/sinks). diff --git a/src/sqlbuild/runtime/execution_history/README.md b/src/sqlbuild/runtime/execution_history/README.md index fc86f33ad9..26ebad4133 100644 --- a/src/sqlbuild/runtime/execution_history/README.md +++ b/src/sqlbuild/runtime/execution_history/README.md @@ -77,6 +77,3 @@ failure internally. The caller must discard the failed backend, construct a new secret-resolved DSN, and retry the same deterministic `event_id`. Canonical-content comparison then returns the committed fact as an idempotent no-op or rejects conflicting reuse. Errors produced in this recovery path remain DSN- and credential-free. - -Selected public API examples and local/deployed operator walkthroughs are in -[`docs/execution-history.md`](../../../../docs/execution-history.md). diff --git a/src/sqlbuild/runtime/observability/README.md b/src/sqlbuild/runtime/observability/README.md index b0a22135e8..d2ed7e72e0 100644 --- a/src/sqlbuild/runtime/observability/README.md +++ b/src/sqlbuild/runtime/observability/README.md @@ -121,5 +121,5 @@ check metadata, full SQL, raw process output, arbitrary user output, and unbound never copied into the integration stream. They remain available through final aggregate output and compute logs after process exit. -The complete operator contract, path ownership, migration mapping, and failure matrix are in -[`docs/execution-observability.md`](../../../../docs/execution-observability.md). +Operator documentation is at +[docs.sqlbuild.com/concepts/observability](https://docs.sqlbuild.com/concepts/observability). From 12a378ac746520831c0940f5cddf23bb22d2178c Mon Sep 17 00:00:00 2001 From: Kevin Longe <273747162+kvlonge@users.noreply.github.com> Date: Fri, 25 Sep 2026 13:24:29 +0100 Subject: [PATCH 04/27] docs: explain configurable replay windows on the landing page --- website/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/index.html b/website/index.html index 16c3ccefbe..466fd20bb7 100644 --- a/website/index.html +++ b/website/index.html @@ -238,7 +238,7 @@

Test the logic, not just the columns

Know what will rebuild, and why

- sqb plan shows why each model will run and how much it will rebuild. A new column rebuilds 14 days, not the full history, because that's the replay window this model sets. + sqb plan shows why each model will run and how much it will rebuild. You choose per model how far a change replays: forward only, a set window like 14 days, or the full history.

sqb plan --select daily_order_rollup+

From 322cfa12cff45fb1cd137eb27728f7600aff836d Mon Sep 17 00:00:00 2001
From: Kevin Longe <273747162+kvlonge@users.noreply.github.com>
Date: Fri, 25 Sep 2026 13:28:31 +0100
Subject: [PATCH 05/27] docs: tighten landing page feature cards

---
 website/index.html | 16 +++++-----------
 1 file changed, 5 insertions(+), 11 deletions(-)

diff --git a/website/index.html b/website/index.html
index 466fd20bb7..360d40d9e9 100644
--- a/website/index.html
+++ b/website/index.html
@@ -330,17 +330,11 @@ 

Built for safe change

Audits that block bad data

-

- Full builds go to a staging table and only replace production if their audits pass. Incremental - batches are checked before they are written. -

+

Failing audits stop bad data before it reaches production, for full builds and incremental batches alike.

Data contracts

-

- Declare a model's columns and types. SQLBuild checks them at compile time, and again on the built - table before it replaces production. -

+

Declared columns and types, checked at compile time and again before the table replaces production.

Column lineage

@@ -351,12 +345,12 @@

End-to-end scenarios

Run the real model graph against test data, then replay it locally on DuckDB in CI.

-

Incremental processing

-

Picks up from the last data actually written, with microbatches for large ranges.

+

Python macros

+

Logic lives in plain, testable Python functions, not Jinja blocks in your SQL.

Python in the same graph

-

Loaders, tasks, assets and checks run alongside your SQL models in one build.

+

Loaders, tasks, assets and checks run in the same build as your SQL.

From d14dfbb3feef0618b41066960e4547e474f7479e Mon Sep 17 00:00:00 2001 From: Kevin Longe <273747162+kvlonge@users.noreply.github.com> Date: Fri, 25 Sep 2026 13:57:22 +0100 Subject: [PATCH 06/27] docs: use the real SQLBuild logo on the landing page --- website/assets/logo-dark.png | Bin 0 -> 19787 bytes website/assets/logo-light.png | Bin 0 -> 17708 bytes website/index.html | 4 ++-- website/styles.css | 13 +++++++++---- 4 files changed, 11 insertions(+), 6 deletions(-) create mode 100644 website/assets/logo-dark.png create mode 100644 website/assets/logo-light.png diff --git a/website/assets/logo-dark.png b/website/assets/logo-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..9597c390cfa2106c6369685b6a7bd706acbdbbf3 GIT binary patch literal 19787 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

?In%GU=n~3f*^#c6c}l=3@QVi zJ5t7PJt%e`0O#!;ZDS63zWG2vR6>fw2#5gO$&56>B4Awk*U(Hbq(q@S6qTbs>S>`q z^QfqmsH;=}5W02QSX*1ijxP>ZZtHYQ6P^+PDc^a=ZU7$u>h1FU$Quopj@uS!X#O-p zJ9`nA|Zz{z+f%HCh4*;b!<;~^-|D66{a_0KbRDc zdrVYUCs0|b_GYyiFpm1)HB(=2z(GM_20*Mqp1gU+;1xeTV(?P_>~v3JX5+ToZY#a| z>g%QlR+a$8T^3YkbQxP#grsG#<2Xt=9z&81g^#YdVov<7yY6ZhLU`PTJMjM}%L)Ki zIFk3fbSgeQ$U|!1V96f?-m5ca%rF)$TI2x;0rU$%6a#Ppp+UM-3i%h$v;Q_{&YbkT zdGp-Qs_+6UUVPYLNB;McC2y2UX$qxu;0>$BE(=>*p#jj?LaTgZ-19XCI7rLF?`T+`xHX@ea3YG*_YnICKJh0e3 zYm}+(njYKdfFh9uu;`$=Z4;I^J10YkufZ_J63Aud1T!amO{|UHQyNUR3Vrd(u4Rcz zQn+R5eh|^?Z18D_MDsrAaDCr2WcooRGegP)K=Nx~U{Bm>qnlU0S{A}QW`0c)b?CiV zr8+>I0h}*^Kg_#%=@BsVE`h60Sl8y2K^Q>P0Bg^GX)KW@!uB)+;n<1Z_&4} zd3@kqEAPaAS2kqtx#y^^msB&$#V?ml$G|anBhli6e_8{kg`1Z)oD2Y{s}mXN`V8jD z1z>`V8^DnM%@PH3K{=;m$4N6BX5S-V_De63nmhNt&c`4B>t?g3`XaVdAdT3kQg9@GFCS z;Ux{$9!Mx?JrMEu3~bwS7Cu^cB3hb80vd>f(lAU9EC?FHzdk@xnqbOfkF5bwY2SQ! zjJyj=nqE0J|Gqr(<{$jT?p1WpN0%&bSAQYXxRj(A4CWSQ9S2x|U<3$qkLV~!(ejrt z$F;To!oO+RNw5l*AQU|Z8d0PZHnD4y_H6Q0N@z|IC`q15z_t^x(Y6y;}d5xGn;0}w2^A{;3Shsb=q(eDWnr# zTf0j6Z>{2UhhPA;0o(>~d+^f+pbbDPz^%dm+CcFCPv`)19L#Ln>B5GF9S1Ah`!zw{ z0iXam8UKGE60882haYkHNkm8zkpM_ALxNR2KQC{@paFx9X669^2Ay@*St9`5E(9e3 zP69d!zl79f{xZT?Ze!*Sfa8FUgLRx)C%PP9` zAA^wj1hi)&ok#;P{D7Yb5GF{1Jr9rsu+{(+m=zd`?X&_hx0nM@LArSxORKvkt`0zj6dDA@1~feQ)_~x7#>g_Oa5Hn5s^NUb7%Z@YVFHxt zC(E@zQACshDg=?pf=d9HJ>`3Er2UVCCPIoCNd~?KG6sU9R{$Mt|0wr31AYl1oJb_^ zQD(lG*-H|c%nT0@rJeE4SI18r|9s%r=L;cX!R<%_B>T@VzbwTfrI9(8$U$wTk#Wi1 z`|q{_py;Ym`G)s?ryFX^+B@7M5i$-#$Q&RHq#4|)br3Ii zmFM*Y6}!jAEHng&m`d2y8qx6QulXg?xNUh1njZkegy%T`SpYMnWeH~Fk+&ses!gNH z!v#A!T$OOd$o8~XO3_%DoD{UyDHxFmS{jyOP~IJ=suHMxX6DSoy%@kI`a{DHjG^Uc zd+p6>fDGSzU`1xgVqw5?6UnHlHn+Lnhk~^c5;W3bj8maVo^aEwU3NfZLTd-gQOGa8 z8aFL7P)S#IbB|XKAgZJ^e)+D3g=}F40fJpeA3n5bFo1H@&{kAu@A0$7g56zMW(N7W zbj>Q6n*$4lV==9ibX~^;C=I}7&Y;Yq1;D{Tat?rBdt>Vavh$jX3|N#d7FxR<+*()BHN57%B@a#hT)pRf|?6gA8m};*mhT-CThn ze$XJY0OS#o$9DRaQHA2E)Xv=v4VkVOpJmkfF-_^6tG?Z0L`TAnJHFzAf@vD0y$`3C zMy_0P!T2kF01O{KHpv4|Eitj>5u$_{uHWVZ+M%5pG_w1eH`gc-Si8c14xkWBPZSoG{_%zzem*S}3TbAKckbNNcEADqm%sYzoALYazpub? zoHMn?NRUng5MXTrXeB|je)^MZAG+zLn|Ae32D!?Cx-|GFT2tx~8*@gl08qPjZM*fF zYpz+|*48#{(W2Lvx3)ID)Y#bA5TL|NM0)^q0>Wa}Sv-|}qsE^?Vf4(8_*O5l^hDGK z;6s9Ou+}P-n@2H-h&SxoRX%pmppyVhEwD^8UVU&efaTY|viUWIy$T%6%Sd>%> z>^T9_0?`W(Af~SPF^eg89i$X9F+pJD4;D7vkNj93LS`WWoeZ@2p)(6G8C{RUxlbDa zR?J;FTVjxi0Xkn2H5Y~HFUJfqpL+b5QET!HS{L`2EF%8QsE${`e=19|zy_Cah*6Y69>e zGmpCa?cJL$|69ZNL?my2?W9}~2{1F1tHJ6w_~ok$Yi3bnji0y8V!FAnmze=+h}Dhh zCIBsd>z~hKFv9R%c+Snr7=UhWYunuk;EljaGJq5j#e?e?9(B}FFTMW8o4*Ik5rA_1 z9wblzm;Cw9e;o=SE3nKQ5<=KHiBbM!H&ep%yciKB`ua|eP-5oTxN#GPuV4S67r@3{`5tDz1;C#FeR<=M zf)HJL=8J_gvOdX)S$F4bc$hJ=(lU0L=JlwKeB5V=6S-{PJ zmq;Mbcn?*pETBT?Im)T_&#(OOnng`Duxdw2egEJ=A6)*> zniF`;;3beo8I;msNGRn{xL_c)+7~J2<(uMo_m9iad_xVuLUPu&1at)miLITrcaKxhCGbQD;^cjaXi2UlS5;MsHEY&TAVlpD;#q)y3`pB=TmWWP#->dlcFWfP z;upV|P*ygqqp`8k4J?EK*d5H=USD62S+i#K$}#V^-;@!z-g@U)AhJFae*)<^fac8n zRa8{SbIv*cB&D2u&+~K;Er@W~di&&)Pj0TSuWvp2=%YPmMkeXq!>sO2V1*DuE2Ye9 zuf2AxMgi=(M9~+g^K`C+Jk%XWADH9@VS$n`+=gTS2X_Vk{7qm*lqK- z5sFQa2EcYgYla7qfM(InDd8S*O#m~18BCN06N6x6X*-0z2_uvNA4wA^#7xCtP6PZl zJokZTjw^fprq~6gF2iq6v}t#RL|t7P0BUlzeIQH+)LK-Hu2B0TQm|(40vqpfZ1)1zU=`4sia`0HWW#`81S+BqT`bz*YjevxI zPAX#qIaE7#?1+vYz0a-JTyy0Rg46-XRYEZSqT$^bSWK_3t}eP@!QU9IT_+g>WB~el z{Lb>X6_F7SP{BX7w6!(?G?<~>+?OggZfiVk&(?;cDA|#e(j6;`BCk^ApT76?suxBi zJL20PJ8w#Yh}^^PeCw4{4;-+x>FVjfz@k;t_6a$csh0Ky+Ey;is3iyn0IyG`4dpx@ z6J^0KKSjsga;M$2J^%;>A`K=B%q8sUwut1%4=j}5;@P85!)40 zy8D#}-cYgsS$h`lSo=2;ay$vGHPONE?@Anf`?~zL95&6~$C^6Qn#F*y*onX)&eCv{ zQeg95{A%TO_|ekgs3DD-Ssv;t6^NLsL8z#ewajwf^y%)15tQnF@_OMfSaBk(unBO+ z8Yoy%2`~LTt~qoWYFVPLPJL2LRLd+;Q7ch>*ds`_uY_fpL0m7ilV(`PlpB^bN&tIy zb=s3OGr{4mbXZQ=qGs~GFvF-vsihD?06GQWFwgTYXXgEd5G;hq&hnZyYa9R?TAT>L z^MORcfG~-u_3R5S+?uP&i3}4yIx7Q;Edg4G!{KymYwH2IN&x^8iG=ba79$ok_zN2S z^)5My$J_0Aye%D%x259o_H;+QEt%}>6h!pui6@?z=()0~E0*rdH4hkD^4JY4*F3uA zqm46M$2N$pBp})Vw1B7upmt_W1bHcusD69N;silRt+VB9KIk;4FyA1@?nH-Hsx#RN z%P>SFdi>v)ZTb3u^FCTGPx{@xswnTV)j#`c!n{VqJAQr$FPxZOU(a&^L~nj=$MWl5 z*)~?C^sy)^EP;~*6gyz@J0)h^Ex(OSmppe_RqB>yBPRb1kY)%0qGD(^4bmSCi_#On zKdOA)X(RLgxEesUSY=J9U1brG!_4l!dG8L`&>lVK%?>^njEMli%25Ce2w@U5&ztrs z7vqEqmPC5|{cE4x)9PK|bMV=B)qMaghEU`eD6y|X&D(E6m@h+`ufg89Qr1wC08~=I z^$j@1UAfRkA7H3iHq~D)!NMW{o<=_L(;duFs;jd`jm;x)_XdVHxQ4md@g6q8|7%FY@;^~K!eC&ra}lXY47!sdB)Rko;o5qI3`~K z(0J&BAB7ife#oh*oaFOpZ+&kH-MRJx$h-=KLqlLE0M_XMsSf$Tg=Pi})Mu}`*Ki|v znR-{82bIULgKFOSs~9loo4T_p?YCeJz>svOh9L?N2_Fw>9SNbw7MglJ<#4oU`P+HwpNBC@}$MPQ1xd zGdclr1`!Lv{L?56}mzL>LhueIp zx-W%71h5Fu+~5PIK9~i82LvKy3KSFrIAreJxy$Cvnd9{g+%i_SM#(K7brTvVuyraDU3W4#z0BJ7!WgGgkzt~v&Wve>+F$p z2gl^I?>E{p0EfSR;pp@XK;Wi#j>m1Qo&tpyBNY1qlp2C$+=ZtU6q{fcK~f$Ng22!Z z&V=FTK6AZbK^%5@X|v zzO_4rKY}_};Kp}qaMe@!%uE%vEHmk)4|cZ+rF8*xfPDLNA|cS|7Fk<~NTd4Gp|nKA z6?G6qwC9A8`7l_6bq>m_6%51J7XTck*8&JZaE@6=t`7Txsl;#(MM%N3QGpP~fl`JJ z6T+GTU^IZyAdCiKWUw@YX7eNgq``Cp*!>{@FA!GFrBii>c(VeMFNB!T2LP0lx*+O9 z!1_QiC^$xQUZfxb;F4+6rbPi@;J|^sQb?SWXABeyLzt%nm;j;_hzt-h5lpa3o_fZa zkJi>c{X@W;O{Ble(C0AZUx}!okFdmdiCbC|X&7PAWz=&lA2Wfpfa@h7M28Y0qFDWa zOgi5_?sw0eTD{-}W`3H8+I|SM;qv(*`t6AyF!Q#w>tgh+@7}Y!#r-BC@*4=nOxQ{I zb+$wS8m!aTUn0F(is>#x6_YHDh>1I{meR-Zf%;Eo(m0t~Q#Aw*WuFc_M3 zUJ#P`Zg7S9rF4-ZO7)ctD2+ zyN@3D236N1>86#}o-=>XgF2dj7l*==p&Sp%gquybWIH|SUUq{0 zxHB~N7HlV?^ruNN5)mIhe0Z9OKCmKIoBrwKDI32(Vg3Ti~S#65CB#R(D{JAgy21D!kmV^v^42y<_Zf7wc|J|d(3@UYkdgd zIYfTBWu_E~dV@tiB1&D2wE-eedm6xB=FFMn^hzZ3eLD)_@NfWQ0vBEQoKl?!60ZW@ zTSVj$(JlZSco2e_OBcTJ#`A#QOhlm`gkUy;K26=jx=cQla~_G=KT^Q(D=Ty}2vU=A z6r`NBuCw{W(zE~cxyVPCw% zrBgvhVS#}c56q{>UaJ_@06-~)Ko^b-2jaJ;JI~e z_4mEkB$jMXjBQA&{g|*XB9Q`U5Ad`NkO5{3ZaNJ!Tnx{Bfamg&*a;^MeTX5`4wY|pPM>3lEAG?25H33LI*BDBy<1_18|a>lbtrYVEmq;Nq1eV1?Rl$ zjK8lp#GTJ-JvieY6VW^X^8iqSdFV;wiXtbCE7}5}7)qV~!sgBi-&?RXv8l!R4&~*K zWIL$>_Ll`a>A;K}g4XwDqGsyfsRl`0|JEv${Ghx|exBqo4}1gC9`8x-BWf_dN7d-hZphs$lmWK?V2L)kG%ePQd$J<6su5n0Uq z0W&Wbf|~j+W>FAAJQmK&J3bXp-sCro*M`r+L@~fW1aMi7cw}myGwvt>0$O`G^2j6O zeO|y%{d7eEK3JgvMEBWe9}$o@biml{tAd7d(t+HEu=X$-JR~SH3>2~=B680<>pb(3 zNB+o*7A@kQT!6~TN*6$@fU$`|$ACFO-5y$L3!so7p}{=@UCKrm1j_Ut<}B$llPHDO z1kDM!=>(+6w@IAU7EirG=Rf+IdH!P;y!7nqL50tq54JM_ECS{IM}%B!y94duS9WQBt$H+w0pt;M~3{XCf5p5@;^+e=QWnB}beB}7CMZewn{R98Y>QpaT&EAB4P);mF@Bq+EOjyK&VJn{_Ig2jYB^1QJ5|sVC|Ynrj5xRQXvF?f1m+r$iH2OK9!Evy;%u zVb(_`J@3IEJ-W1BpYgygIQ79%sH^OX0cs{Wz)XSLSD!|=u72Y6o$h>PM&^J~hGg7< z4xad05#pJ7oFqlWaH>Eu#f9fO(J z|MB7fx=KYvokX;L)I*zBA2hb)73R*%Svd}b6xsYTgUD7xrSE2szxd$tMPw&-lQ4`R z4i|837oo@@_|?)gQCF!@RcH1j0R(@Gt|I9Q12v>!s;dyrD}&Zvpk}qOVhmTm#y>wO zyeW=QMQyEr&$_RbM@Tr@1@J|7PN1&bA>}S$4FE%j4po7*>-BTmX{U7(QQJ4Zak6Gs zSyz#n6@b`luf1GIehVH#FTW}`P1tKVn>TM>2gnF>R)JiN&?TpZ7 zu4mLM;ERepG-QFA&fjSWQr9sE@;j+8QM=}Wk5w{hSm&C8k))H z_-X+Gz*Pybh9(--3FB&5_H3MTUoBj9AC8#X04u)|mT@i&IT=C#c0$39`#w8E_6eHv z-W6JKPrhhN!$c?wN_E=o+An@>SoFoajw^pD(zO^r+4ai^$rTGM3>ozRr1K|KPI&JN``J z*nh)m^+=HUCTI%(T|SK+D?e)^ZMt=`^t z-nQ*6(_mSH1(0IR31|X?dl3EEccPVMfHjB+L;`{W7a*_z%r;b7gE)$iF&l8tfvaqk z7Zk%u0dC6k(RLO-nIAcX6yi_r96=!Ala1L38xSU-(p%ufA7geN#*Zegc?rOTzAH2K ze$wiCiJDm+Zd`sZ3X9H0yy;u`U+hDs`tXH((w5%~$ zgNm7t0x(z*)zYut`L2d}cYx#v4S0lx88u;dZa{wMsceNxZLMVH{OHZg%#_wW?4p2D zI$q~j6n*Nt)0*CHXjdmp=pgw{9)Ohr1+m+>;f5Q)%&4ucRrU4tcz*tZ(E_HcSs^Ff z^o}{^1bXSE1wpV4FGKbSOnC~-69E(fXzM{eWg)CHv{rdRHw>AR!t?gTI&%qt)eDwvIPv^j7YuFO)qXTAYd=WI0Cncv6y;KF0%Vq9 zO3H~Xb68+3p|l6BQeYM!E`S|(;JOrOAnI1-)18;v8+h+(sLCLiEJJ|n0e1SWDFf++ zKb}1DtpiHK^+e=W)UvFrs{?8)GQ|8(R+$yGf@)@YeA9d1N2KsVbTp+vFc6Jg1IIp> zZe95}ciNBNeL{Kj_YNPvGe8i5+n1HGEx!d}{tDXF8ExXX*YOBZW4?cSmUXMqH1C8l zsr%k|>pC%T$Zt5=n)XZV0BAQ2Ax3J=e=~1i@#sY_Y+p90*m(BFLkBf6^S~E2v=%?I zrgJRc_|CI1BPYSJ8CvUX`#wVg65s?~h?*&h84DL0^)qMs)jrIl%VTD2OIqhNdG`y2 zAn9P#yvZFv#2qj~*TG9Ii$11X%NbW_; zXQs-^N>LXO&1)B~%Bz?;F_a&c%`Y$8deUuAEIaZqe_t^ThItgEX$UD2tYLG8!B0dG zL@ceFC#ODzeexR1e9Ra^KY#1H``zfU07BMq*!s_Y+9o4R%J(mY6xsUK%vLW!r8J;T zB8n2pq}Ea-DfukVf34lt#+VKkzbO|7S4Y>CO843?T3=mHO7!bt4 znt)OU{s++a1_J8>*cXtG0V3$2r^pZ6C=|3YdQ*^C3veV93QbR?QWJuvZb6Ht?2@$r zY!d)Pb#*m8_0&^}nawxfTsos-=0uB#ns0vi<-9{C4H{B+{iz1O_Vc$#6q#q{=NW(3 zw%g8(5+VwbAe{x$m^ctp%90p#ZcZKy)(ow?dLCyiaj%j(&Tab=6sogdxg$-3LotJx zx5T{Ut-t(A=^1Oz8-3Y=Ge^EQXZCDEGYj);zw~NRCxh0enSyEY$zdxC)KzHBJazuJ zMxU?S+n>{lEFlbwSZgo~Xm*fFq(S7Rn2H^;4n!z#2CV485ON^Av;&3*5*lC^k^B(c z)D9S-%QDXz&>!jRli>o$;~NhC9k;aH%Q74y!?2*?K?fO2C!HigE=UeRIC@BnEyjvS zc%(1|Bb{`!9uI3mD9?Zyk!ts@%W&QF-)wF}=M^XH>t^$kRSOLwTDQH^PCy#D^{@eC zq7}6App*)J*U+8@tF9mIHs!`4ICZGS!UMWG;LA!OqbGrTs)hi&efk07TfTZ7jT@8rizLRidEp{AFG{5kZ=Q^JH!6^@4ck<8o8CG~dyY6<@szi{^55jW~j`rYb z?X$XaFV&-qq0S0x#;S5Q7fv}1u}Nqme{&8BBYc&KdPh%+v@;F3RpthtcZX+dnG`IGn9VP>Ec*g9=!UI$lAdUxhv z`D>k4n^+qb%#cNbEF!;=8WC);N<%qmC@&2{ntbZABr{|pQXGPvdIyyLI<6Z35vr;w z(;qo-&0Qi|55VN=DJ!PLoF8!7-3&7vCBq0y(xxCtW>R3J;Cd-y*jg!1`zlEK>QMl~ zbV%E;qrL4|zUh#*wT+1(ql>966I(MgVND}5b2MTZMzEuq4vOwM$lV3IW^+J}@8S$n zz{2(OC`>-Vlr%y{D2GZ+BqV}!2FJ_nM#4lvkv}98NN0Zhog;Km_NJqNS15!bhm9Ed z2WI!@J#qmAAOXp@Fth+sl>C@hWh)TKN=g|?1*LjJ1=C+ZVksaaL{bs?*Uy-gy1F_| zMBLom9Nf3aG$UX^l1(8H^x^73?k5e(?qZO2qi4*RK>&2ariRjVy5q%2#QHrEN&pU% zPmoc*(h}_eHG*^_Ad&zEgWb28)yqU8FJMCj`C7ro_(=y%-?C}*#pzUhSeA56#&p|p z4kn7cckp3{y!zbJbzELveqB7}iVH5NmJdBt{lPiM?%(q62Rr8f`2N>tEL^hbV33$f zdC>?F5?aH9U?1_!2&>NYWTG7Y>fT~WVq{QIB9mnVoJz%^QZFMNpS$_L_I+z`adBH3 z0A|lMao?pbfl*vsJhY{)^8|3?3A=abkpLVJ3200wn6n9ZDj+|6EFCfUwP|f5e{bJ1 z@$H4@j~n&QhR!Ri-flc$!ABjFwWr1-WEDahU{3*3`qo7VK>8gN*|rl9Y9kWyKVb7m zzsI~&l6^HZ4=k-9qW2op>EwHt9)M@+H_V^2G;!8$M}Je}CL$7%bVe_y)6Bj*m?=I8UJid;@{;|vC(=X|XXZ8g z?Kf`IMHgN4*7et4|4I&Ffpe`FJnxO^haL9wWlNU*7qd6o4_V2NvDhP}92YR#1dDkZ z_WuHOFW|+PIq(B02EgixX|Q%J0FeL?av6}Cg&BO7&UuPFK;;18!TrdQ~{M9t9pk z0RiG7K>nPFwlE_Fk}5}w<$*m0+|_`&2yhn&Av%;&1#_zBd2_30n*frDL}J#Jb6=e? z_xZI4Ldc^~T3jfE)>914_p-BAB|tX>BzJ2+02LrU2B4Clgv-uZXc|OC#CqrAzb`oNkYkVS z2+}0{F=n<~qMVsagX72D`PR60XXTUWAf!=!^>iSsXu4mVgN@46aRFug~Y_)ENj^3>9vVr8(TV?4;mO9 z*y(ug&Q7OuK*WexlI7Mmr&DWxUR+iz2vimeMHsBX;D~`x#5B#F9qIUGhm`NU^pGKc zBO<=-w%f{=E_?q($F&szY~Qk_BVi{!Fb5e)Vi-Z_!A#L;z7YSlF?s>E%rXh_gU+9T>^L`*8uo2808!M+6ciW186l>m5=WFJ681mG9qj%Z-bb zQUD-YTjP_9ief(k(0s>V-`oAOy5*B>$2$SByb_^ZXxB}^3uth}fU6i&CWla3V)z0} z8pN6e8Ei%cfxwQla%i6MR7om6Z`)NGv0IKRGSI>+A7!p{k-2kTg z$|$vke!OB1hLrtGs5IDhUFOVYy-cve0*V38X@FraDbCMdeflVC?E~K!{5Vy^Lk;On zGSu~%LuUox$$9`M!f)RFRbQ)v0suwBZ#0+rtO3AF0BQrSY2q@dPrrVsAq zK!#lwN(0yv%*8JZ!+2V2ogvZ*e2OlJ8E&y@ns8kg%seW%|8)R{NGUfRb<|NthO-;Y z-{Am80C+hZ4sTAU)8RnDQ*h5$0k|*#lb!+a4uHQCQB%%#8d1x#l8)mH2%dFoet!PT z@p$~>TB!;E+At(MPvvSIn5F^Sb~0soIuQ1Q0F(eI3_g2~0C7$ru$_LDLdItm$`6c% z9iUlf_Po^l0Py^WI&}Dewj+y*imnH6-NUbJ7=6XVi>I_TcbtG& z-gu!k;5sP=d+aE}lmkLkRwhVmCc`q63S2=f#}qZZKoH{b=(6c`QJu z0yrQ*{gOVw(=FZ9ty)BojA-qAxPANf+lCGuI^1!bk3yl)%1_(3sMkKBRV+|b4OC2| z+Nug!S(DSsrLOV|_0HWJa=q~G84*X9^VbJq27sfFdU&1t`eyqqL?R=EN`gI4F=zPx z0xYD283v+dz@8oFp!&c^P_@vY8)o_Y)>MJIS^X|AfI3s|F~Tq+tW~KLbN~RaDe2y? zWGL>WlXA!IXxpqw6#t~#?(FP5+On)!%rr1aeR&!h0)S#}R<65*neFE0=8dCAkKR*N zRn@aQ;iqL+5dfM$f4(tk(j+lr#0WcBSSCjtPg z)^9DCwC@N4klM1XY39tD1*MxeHJ=7c9ExZpO0JjU$rB{X2V1Z;ka9N^mqr(Vb&!1Q z=`%;q&o;E0HrK$rm$(E*QBm=T_V&(iXpQ3lj0DK_SpQq8-CpB=(b}RUTdy8hy)1&eP4Go-ESgPiPq&(u)kJ{ck>)D;t zb~GiAK`b_a;DI~`40uGs<51Lqom|P+9yBcg@wi8iZ^{;be#WgaGtJO@gbtLu*#0l~ zf9>m8a_$f4+VXO*-wU3R_O>Hm?)g4$*S^nr|K0cwM5KIy1ziWAGl18-a<$a;-hfZUW{6nnO_t>v%qJK16O+-IV5XP;bT676&y=g^-#^6qiBKeK$I zN~XSsBfe5xP+t1c$wTDQiw`V%b;hW|2TUS+^6c5>JIBt|T^l)B`+@j7U>xn&Oj5${ zeFF-bX73Gl?;)@h(c1ZN*REYR4jMFQmg~CjT9)N0J0K6$aoKHjUsXJd+ z*^m)>E|qHD>AQ1Pmi?z|&$2A50zk{}UtaUUlRLTn;d3XxQ0`x8=95d;K6S>S6Px|c zS}cI@;UGR0(1!tB2v8!}8qp8GC`f^Ejt4<|E2U6@h4t1pH#gs1Qc|*~xw*Nqw6wJI z|Jn+CfdwTq8hy$3_R>R!7UTgK;{uaj+0cH-ub1p@YfjVQ8(Q3s*2460JbRj`2Hcu| zQRUP>x&-zdfPNP67Bhm7asR1{d6lDJvyId^*ppIvKG*~0?>&Psm>Y!yte%{W}tooA;Y|;PFB`(O5JzlZf84XH*#( zR^#9?V@5!P<^U~^0CYV-!<;)dSh)<~C6ig&kP`Tmvvt_1#d2Jgc z)VZtNkBF#=h&~8*HGi$Tx?foT%`B{W4xn!WC=L=y_<1&w?J?Bd!OS6wXFIX_Wb>~6 z!hT&Bq!Xabc(PIV=UeJ*KN zZ=GB>SNlq%=e9_FCgh<3B>`P%nxW0DP0h8jg4k344i@$kfGYknfUo}X&ozt(AN%9$ zPd@gS+n;^*=>wU)Lw%Q4CIPs9r?+fB1nMI=M6WvHZ1*~4_^c1*fkX-vp#C; zwuWzk!rS4w(*T6PNC4CtT+isTn4-re`Vip0Zpq(Aj{y||C>)K(I?BrjymHJjvlfJ+ zp~&XVo9%yF4IFH?)W=)tAO9W}HoL1=Wc>I8CbqORpVip3=P)o208tt&QvT*tf#%NX zu-9#8Itt8g_x*H4&i|E9#vl)V^4&ysUzChR|Cl94ABzHK7OVDANgV+o^78Vx$KxHf zms~RYt$XjicfDa4+Vebs^Q)H!4=!EZ<9Yk7PXGAVwy?cGs4l8kY|Osn&)l_r#|ddWbs%dk zh(rn?k68vG`IfIKmO$ewwK^aDIulAt+(EJ%;U9xK56Nar3Y!Phcnm# zkjx5Z_jC#M_z60$voElmDMtSIxRru(JJ#9&aZCu29yD;kha<=A^VCZ(&R<+qRJ`4F zom?-WUr77Mf26?n6g)6;)8{uT)+Mw&RCjquVW~*h&`g1NgZ^;95=e}v0X590uf6i>t8XkXA3WbL z4p+qtSlK;ad#eY(`(;;4Zzg|F6=v;5!8&4D=GuwlC){55WZgwC{cXXGKw{6CXPzko zK_&c?5ytyR|M-^}vuDpX9mhF>nGI&nyW)x~rj?fux=u>#RRA9Wv>p)egXH^wSP6(# zAae=GdV@sh4HBW(0l65!`$AevMvfeNfAN3;M=ruk)i1pT9b^pDKA{PN2~%q&dP z#DWD2MxA!X89xn$!cPKXBY=&7SVbgPg3Px_gkA%%7{Gg0IPaw~WA?eRq@-j5Glzu8 z8h=q$RVDr%xWE0QfBZAVuo+jmXI-gaW{yT9oJ^)fS=peOn$?A^EzJi29PwjVl^VOx z_+(LG{^KL|-|v~1pLu3aM@L7lyWWrX_K*JYf1wnllwf9K&YU@?j~=_vW06SSpD(@i r(#x57a(+R6?y>#Ww14!Ey^Q|{!x7CZF5wU~00000NkvXXu0mjfFTh)N literal 0 HcmV?d00001 diff --git a/website/index.html b/website/index.html index 360d40d9e9..5c289a5387 100644 --- a/website/index.html +++ b/website/index.html @@ -31,8 +31,8 @@

diff --git a/website/public/styles.css b/website/public/styles.css index 650a69d7e3..04a387d1f4 100644 --- a/website/public/styles.css +++ b/website/public/styles.css @@ -465,6 +465,14 @@ h3 { color: var(--stale); } +.terminal .info { + color: var(--primary); +} + +.terminal .strong { + font-weight: 500; +} + .step-text code, .grid code, .caption code { From 2888f43a323dd595ca56024d9a499470fbce5b15 Mon Sep 17 00:00:00 2001 From: Kevin Longe <273747162+kvlonge@users.noreply.github.com> Date: Fri, 25 Sep 2026 17:04:25 +0100 Subject: [PATCH 20/27] docs: keep the projects behind the landing page output --- website/examples/README.md | 45 +++++ .../models/finance/daily_revenue.sql | 9 + .../examples/hero-shop/sqlbuild_project.toml | 10 + .../tidy-shop/models/daily_revenue.sql | 5 + .../examples/tidy-shop/sqlbuild_project.toml | 15 ++ website/examples/waffle-shop/README.md | 65 +++++++ .../audits/generic/expression_is_true.sql | 5 + .../sql/table_fn__customer_orders.sql | 21 +++ .../functions/sql/udf__is_completed_order.sql | 6 + .../waffle-shop/hooks/python/.gitkeep | 0 .../examples/waffle-shop/hooks/sql/.gitkeep | 0 .../waffle-shop/loaders/waffle_sources.py | 75 ++++++++ .../examples/waffle-shop/macros/currency.py | 6 + .../materializations/partition_tracked.py | 176 ++++++++++++++++++ .../intermediate/customer_status_snapshot.sql | 35 ++++ .../intermediate/order_status_index.sql | 22 +++ .../marts/_sqlbuild/_enums/payment_status.sql | 7 + .../marts/_sqlbuild/_macros/currency.py | 6 + .../marts/_sqlbuild/_macros/datetime.py | 7 + .../models/marts/daily_order_partitioned.sql | 34 ++++ .../models/marts/daily_order_rollup.sql | 35 ++++ .../models/marts/daily_revenue.sql | 25 +++ .../models/marts/dim_customers.sql | 23 +++ .../waffle-shop/models/marts/fact_orders.sql | 26 +++ .../hourly_activity_with_daily_context.sql | 37 ++++ .../models/marts/hourly_order_activity.sql | 34 ++++ .../models/staging/stg_customers.sql | 17 ++ .../waffle-shop/models/staging/stg_orders.sql | 26 +++ .../models/staging/stg_payments.sql | 20 ++ website/examples/waffle-shop/rules/layers.py | 15 ++ .../examples/waffle-shop/seeds/lookups.yml | 12 ++ .../waffle-shop/seeds/waffle_types.csv | 7 + website/examples/waffle-shop/sources/raw.yml | 47 +++++ .../waffle-shop/sqlbuild_project.toml | 26 +++ .../tests/scenarios/daily_revenue_minimal.sql | 59 ++++++ .../scenarios/daily_revenue_multi_order.sql | 59 ++++++ .../waffle-shop/tests/test_rule_layers.py | 17 ++ .../tests/unit/test_daily_revenue_chain.sql | 86 +++++++++ .../tests/unit/test_fact_orders.sql | 50 +++++ .../unit/test_line_total_cents_macro.sql | 14 ++ .../tests/unit/test_stg_orders.sql | 27 +++ 41 files changed, 1211 insertions(+) create mode 100644 website/examples/README.md create mode 100644 website/examples/hero-shop/models/finance/daily_revenue.sql create mode 100644 website/examples/hero-shop/sqlbuild_project.toml create mode 100644 website/examples/tidy-shop/models/daily_revenue.sql create mode 100644 website/examples/tidy-shop/sqlbuild_project.toml create mode 100644 website/examples/waffle-shop/README.md create mode 100644 website/examples/waffle-shop/audits/generic/expression_is_true.sql create mode 100644 website/examples/waffle-shop/functions/sql/table_fn__customer_orders.sql create mode 100644 website/examples/waffle-shop/functions/sql/udf__is_completed_order.sql create mode 100644 website/examples/waffle-shop/hooks/python/.gitkeep create mode 100644 website/examples/waffle-shop/hooks/sql/.gitkeep create mode 100644 website/examples/waffle-shop/loaders/waffle_sources.py create mode 100644 website/examples/waffle-shop/macros/currency.py create mode 100644 website/examples/waffle-shop/materializations/partition_tracked.py create mode 100644 website/examples/waffle-shop/models/intermediate/customer_status_snapshot.sql create mode 100644 website/examples/waffle-shop/models/intermediate/order_status_index.sql create mode 100644 website/examples/waffle-shop/models/marts/_sqlbuild/_enums/payment_status.sql create mode 100644 website/examples/waffle-shop/models/marts/_sqlbuild/_macros/currency.py create mode 100644 website/examples/waffle-shop/models/marts/_sqlbuild/_macros/datetime.py create mode 100644 website/examples/waffle-shop/models/marts/daily_order_partitioned.sql create mode 100644 website/examples/waffle-shop/models/marts/daily_order_rollup.sql create mode 100644 website/examples/waffle-shop/models/marts/daily_revenue.sql create mode 100644 website/examples/waffle-shop/models/marts/dim_customers.sql create mode 100644 website/examples/waffle-shop/models/marts/fact_orders.sql create mode 100644 website/examples/waffle-shop/models/marts/hourly_activity_with_daily_context.sql create mode 100644 website/examples/waffle-shop/models/marts/hourly_order_activity.sql create mode 100644 website/examples/waffle-shop/models/staging/stg_customers.sql create mode 100644 website/examples/waffle-shop/models/staging/stg_orders.sql create mode 100644 website/examples/waffle-shop/models/staging/stg_payments.sql create mode 100644 website/examples/waffle-shop/rules/layers.py create mode 100644 website/examples/waffle-shop/seeds/lookups.yml create mode 100644 website/examples/waffle-shop/seeds/waffle_types.csv create mode 100644 website/examples/waffle-shop/sources/raw.yml create mode 100644 website/examples/waffle-shop/sqlbuild_project.toml create mode 100644 website/examples/waffle-shop/tests/scenarios/daily_revenue_minimal.sql create mode 100644 website/examples/waffle-shop/tests/scenarios/daily_revenue_multi_order.sql create mode 100644 website/examples/waffle-shop/tests/test_rule_layers.py create mode 100644 website/examples/waffle-shop/tests/unit/test_daily_revenue_chain.sql create mode 100644 website/examples/waffle-shop/tests/unit/test_fact_orders.sql create mode 100644 website/examples/waffle-shop/tests/unit/test_line_total_cents_macro.sql create mode 100644 website/examples/waffle-shop/tests/unit/test_stg_orders.sql diff --git a/website/examples/README.md b/website/examples/README.md new file mode 100644 index 0000000000..60f94603ab --- /dev/null +++ b/website/examples/README.md @@ -0,0 +1,45 @@ +# Landing page examples + +The projects that produced the real `sqb` output on the landing page, so it can be regenerated when +the CLI changes. Build output, logs and DuckDB files are not kept; every project runs locally on +DuckDB. + +| Project | Landing page | +|---------|--------------| +| `waffle-shop/` | Steps 02 to 07. It is `sqb playground waffle-shop` plus the custom Rule in `rules/layers.py` and its test, the scoped enum and macros under `models/marts/_sqlbuild/`, and the renamed `daily_order_rollup` model. | +| `tidy-shop/` | Step 08, the janitor. | +| `hero-shop/` | The hero: a model moved and renamed. | + +## Step 08: janitor + +`tidy-shop` shows the state after the stale model was removed. To regenerate the output, restore it +first: + +```bash +cd tidy-shop +cat > models/weekly_revenue.sql <<'SQL' +MODEL ( + materialized table, +); + +SELECT DATE_TRUNC('week', revenue_date) AS revenue_week, SUM(total_revenue_cents) AS total_revenue_cents +FROM __ref("daily_revenue") +GROUP BY 1 +SQL +sqb build +rm models/weekly_revenue.sql +sqb janitor +``` + +## Hero: move and rename + +`hero-shop` shows the state after the move. The model started as `models/marts/revenue.sql`: + +```bash +cd hero-shop +mkdir -p models/marts +mv models/finance/daily_revenue.sql models/marts/revenue.sql +sqb build +mv models/marts/revenue.sql models/finance/daily_revenue.sql +sqb plan +``` diff --git a/website/examples/hero-shop/models/finance/daily_revenue.sql b/website/examples/hero-shop/models/finance/daily_revenue.sql new file mode 100644 index 0000000000..21cbbb30b2 --- /dev/null +++ b/website/examples/hero-shop/models/finance/daily_revenue.sql @@ -0,0 +1,9 @@ +MODEL ( + materialized incremental, + incremental_strategy delete_insert, + cursor revenue_date, + cursor_type timestamp, + cursor_grain day, +); + +SELECT CAST('2026-04-01' AS DATE) AS revenue_date, 2850 AS total_revenue_cents diff --git a/website/examples/hero-shop/sqlbuild_project.toml b/website/examples/hero-shop/sqlbuild_project.toml new file mode 100644 index 0000000000..e39dfebc63 --- /dev/null +++ b/website/examples/hero-shop/sqlbuild_project.toml @@ -0,0 +1,10 @@ +name = "waffle_shop" +adapter = "duckdb" +default_target = "prod" + +[connections.local] +database = "warehouse.duckdb" + +[targets.prod] +connection = "local" +schema = "prod" diff --git a/website/examples/tidy-shop/models/daily_revenue.sql b/website/examples/tidy-shop/models/daily_revenue.sql new file mode 100644 index 0000000000..6440f96b40 --- /dev/null +++ b/website/examples/tidy-shop/models/daily_revenue.sql @@ -0,0 +1,5 @@ +MODEL ( + materialized table, +); + +SELECT CAST('2026-04-01' AS DATE) AS revenue_date, 2850 AS total_revenue_cents diff --git a/website/examples/tidy-shop/sqlbuild_project.toml b/website/examples/tidy-shop/sqlbuild_project.toml new file mode 100644 index 0000000000..6fc3dbe9a4 --- /dev/null +++ b/website/examples/tidy-shop/sqlbuild_project.toml @@ -0,0 +1,15 @@ +name = "waffle_shop" +adapter = "duckdb" +default_target = "prod" + +[connections.local] +database = "warehouse.duckdb" + +[targets.prod] +connection = "local" +schema = "prod" + +[janitor] +enabled = true +retention_days = 0 +archive_retention_days = 14 diff --git a/website/examples/waffle-shop/README.md b/website/examples/waffle-shop/README.md new file mode 100644 index 0000000000..9c679a8a59 --- /dev/null +++ b/website/examples/waffle-shop/README.md @@ -0,0 +1,65 @@ +# SQLBuild Waffle Shop Playground + +This project is a local DuckDB playground for SQLBuild. It is self-contained and does not require warehouse credentials. + +## Try It + +Compile the project: + +```bash +sqb compile +``` + +Build the project locally with DuckDB: + +```bash +sqb build +``` + +After the build creates the local DuckDB objects, run SQL unit tests: + +```bash +sqb test +``` + +Run audits: + +```bash +sqb audit +``` + +Inspect lineage: + +```bash +sqb lineage fact_orders +``` + +## What This Shows + +- DuckDB-backed local execution +- SQL models across staging, intermediate, and mart layers +- Seeds, expression-backed sources, and Python source loaders +- SQL unit tests and multi-model tests +- Built-in and custom audits +- SQL functions +- Macros and custom materialization hooks +- Incremental and partition-oriented model patterns + +The local DuckDB database is created as needed when you run build-oriented commands. + +## Source Loaders + +Two raw tables are populated by Python loaders before the selected model DAG runs: + +- `raw__customers` uses a list-returning loader with `write_strategy: table`. +- `raw__orders` uses a generator loader with `write_strategy: delete_insert` and `cursor_column: ordered_at`. + +The payment source remains expression-backed, so the project demonstrates both managed source loaders and inline demo data. + +Try the loader controls: + +```bash +sqb build --no-load # run models against already-loaded source tables +sqb build --reload # reload sources while leaving models incremental +sqb load # run only source loaders +``` diff --git a/website/examples/waffle-shop/audits/generic/expression_is_true.sql b/website/examples/waffle-shop/audits/generic/expression_is_true.sql new file mode 100644 index 0000000000..6bdbdcaded --- /dev/null +++ b/website/examples/waffle-shop/audits/generic/expression_is_true.sql @@ -0,0 +1,5 @@ +AUDIT (); + +SELECT * +FROM __ref("@model") +WHERE NOT (@expression) diff --git a/website/examples/waffle-shop/functions/sql/table_fn__customer_orders.sql b/website/examples/waffle-shop/functions/sql/table_fn__customer_orders.sql new file mode 100644 index 0000000000..7f1bc18a47 --- /dev/null +++ b/website/examples/waffle-shop/functions/sql/table_fn__customer_orders.sql @@ -0,0 +1,21 @@ +FUNCTION ( + arguments (p_customer_id INTEGER), + returns table ( + order_id INTEGER, + ordered_at TIMESTAMP, + waffle_name VARCHAR, + line_total_cents INTEGER, + order_status VARCHAR, + is_completed_order BOOLEAN + ) +); + +SELECT + order_id, + ordered_at, + waffle_name, + line_total_cents, + order_status, + is_completed_order +FROM __ref("fact_orders") +WHERE customer_id = p_customer_id diff --git a/website/examples/waffle-shop/functions/sql/udf__is_completed_order.sql b/website/examples/waffle-shop/functions/sql/udf__is_completed_order.sql new file mode 100644 index 0000000000..98ef857e40 --- /dev/null +++ b/website/examples/waffle-shop/functions/sql/udf__is_completed_order.sql @@ -0,0 +1,6 @@ +FUNCTION ( + arguments (order_status STRING), + returns BOOLEAN, +); + +order_status = 'completed' diff --git a/website/examples/waffle-shop/hooks/python/.gitkeep b/website/examples/waffle-shop/hooks/python/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/website/examples/waffle-shop/hooks/sql/.gitkeep b/website/examples/waffle-shop/hooks/sql/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/website/examples/waffle-shop/loaders/waffle_sources.py b/website/examples/waffle-shop/loaders/waffle_sources.py new file mode 100644 index 0000000000..b9267ec2b1 --- /dev/null +++ b/website/examples/waffle-shop/loaders/waffle_sources.py @@ -0,0 +1,75 @@ +from collections.abc import Iterator +from datetime import datetime + +from sqlbuild.loaders import loader + +CUSTOMERS: list[dict[str, object]] = [ + { + "id": 1, + "first_name": "Leslie", + "last_name": "Knope", + "email": "leslie@pawnee.gov", + "created_at": datetime(2026, 1, 15, 9, 0, 0), + }, + { + "id": 2, + "first_name": "Ron", + "last_name": "Swanson", + "email": "ron@pawnee.gov", + "created_at": datetime(2026, 2, 1, 8, 0, 0), + }, + { + "id": 3, + "first_name": "Ann", + "last_name": "Perkins", + "email": "ann@pawnee.gov", + "created_at": datetime(2026, 2, 14, 10, 0, 0), + }, + { + "id": 4, + "first_name": "Ben", + "last_name": "Wyatt", + "email": "ben@pawnee.gov", + "created_at": datetime(2026, 3, 1, 7, 30, 0), + }, + { + "id": 5, + "first_name": "April", + "last_name": "Ludgate", + "email": "april@pawnee.gov", + "created_at": datetime(2026, 3, 15, 11, 0, 0), + }, +] + +ORDERS: list[tuple[int, int, int, int, datetime, str]] = [ + (1, 1, 1, 2, datetime(2026, 4, 1, 9, 15, 0), "completed"), + (2, 1, 4, 1, datetime(2026, 4, 1, 9, 15, 0), "completed"), + (3, 2, 6, 3, datetime(2026, 4, 1, 10, 30, 0), "completed"), + (4, 3, 2, 1, datetime(2026, 4, 2, 8, 45, 0), "completed"), + (5, 4, 1, 1, datetime(2026, 4, 2, 12, 0, 0), "completed"), + (6, 4, 3, 1, datetime(2026, 4, 2, 12, 0, 0), "completed"), + (7, 5, 5, 2, datetime(2026, 4, 3, 9, 0, 0), "cancelled"), + (8, 1, 2, 1, datetime(2026, 4, 3, 11, 0, 0), "completed"), + (9, 2, 6, 2, datetime(2026, 4, 4, 10, 0, 0), "preparing"), + (10, 3, 1, 4, datetime(2026, 4, 4, 14, 30, 0), "placed"), +] + + +@loader +def raw__customers(ctx: object) -> list[dict[str, object]]: + _ = ctx + return CUSTOMERS + + +@loader +def raw__orders(ctx: object) -> Iterator[dict[str, object]]: + _ = ctx + for order_id, customer_id, waffle_type_id, quantity, ordered_at, status in ORDERS: + yield { + "id": order_id, + "customer_id": customer_id, + "waffle_type_id": waffle_type_id, + "quantity": quantity, + "ordered_at": ordered_at, + "status": status, + } diff --git a/website/examples/waffle-shop/macros/currency.py b/website/examples/waffle-shop/macros/currency.py new file mode 100644 index 0000000000..f4ccb3cc93 --- /dev/null +++ b/website/examples/waffle-shop/macros/currency.py @@ -0,0 +1,6 @@ +"""Project-wide currency macros.""" + + +def line_total_cents(price_cents: str, quantity: str) -> str: + """Calculate line total cents from a unit price and quantity.""" + return f"{price_cents} * {quantity}" diff --git a/website/examples/waffle-shop/materializations/partition_tracked.py b/website/examples/waffle-shop/materializations/partition_tracked.py new file mode 100644 index 0000000000..6f7487fa0c --- /dev/null +++ b/website/examples/waffle-shop/materializations/partition_tracked.py @@ -0,0 +1,176 @@ +"""Partition-tracked custom materialization for the waffle shop example. + +Tracks which date partitions have been materialized in a state table. +Generates the expected date range, checks the tracking table for untracked +partitions, then builds each one: CTAS into staging, audit, delete-insert +into target, record in tracking table. The target is never dropped. +""" + +from __future__ import annotations + +from typing import Any + +from sqlbuild.adapter.contract.types import FrameworkType +from sqlbuild.executor.auditing.models import AuditExecutionResult +from sqlbuild.executor.custom.models import MaterializationContext, MaterializationResult + +_AUDIT_ERROR: str = "ERROR" + + +def materialize(ctx: MaterializationContext) -> MaterializationResult: + tracking_table: str = ctx.qualify_in_destination_schema(str(ctx.config["tracking_table"])) + partition_col: str = str(ctx.config["partition_column"]) + date_start: str = str(ctx.config["date_range_start"]) + date_end: str = str(ctx.config["date_range_end"]) + staging: str = ctx.qualify_in_destination_schema(f"{ctx.destination_name}__staging") + string_type: str = ctx.adapter.render_framework_type(FrameworkType.STRING) + timestamp_type: str = ctx.adapter.render_framework_type(FrameworkType.TIMESTAMP) + built_at_default: str = "" + if ctx.adapter.sql_analysis_dialect() != "databricks": + built_at_default = " DEFAULT CURRENT_TIMESTAMP" + + ctx.execute_sql( + f"CREATE TABLE IF NOT EXISTS {tracking_table} " + f"(partition_value {string_type}, run_id {string_type}, " + f"built_at {timestamp_type}{built_at_default})" + ) + + if ctx.is_full_refresh: + ctx.log("clearing partition tracking state") + ctx.execute_sql(f"DELETE FROM {tracking_table}") + + all_partitions: list[str] = _generate_date_range(date_start, date_end) + ctx.log("checking for stale partitions") + stale: list[str] = _find_stale_partitions(ctx, tracking_table, all_partitions) + + if not stale: + if ctx.on_progress is not None: + ctx.on_progress("no stale partitions") + return MaterializationResult(relation=ctx.destination, audit_results=()) + + if ctx.on_progress is not None: + ctx.on_progress(f"{len(stale)} partitions to build") + + all_audit_results: list[AuditExecutionResult] = [] + target_exists: bool = ctx.adapter.relation_exists( + connection=ctx.connection, + database=ctx.destination_database, + schema=ctx.destination_schema, + name=ctx.destination_name, + ) + + partition_value: str + for i, partition_value in enumerate(stale): + next_day: str = _next_date(partition_value) + partition_sql: str = ctx.sql.replace("@@@partition_start", f"'{partition_value}'").replace( + "@@@partition_end", f"'{next_day}'" + ) + + if ctx.on_progress is not None: + ctx.on_progress(f"partition {i + 1}/{len(stale)}: {partition_value}") + ctx.log(f"building partition {partition_value}") + + ctx.adapter.drop( + connection=ctx.connection, + destination=staging, + if_exists=True, + statement_recorder=ctx.statement_recorder, + ) + ctx.adapter.create_table_as( + connection=ctx.connection, + destination=staging, + sql=partition_sql, + statement_recorder=ctx.statement_recorder, + ) + + audit_results: tuple[AuditExecutionResult, ...] = ctx.run_audits(staging) + all_audit_results.extend(audit_results) + if any(r.outcome.value == _AUDIT_ERROR for r in audit_results): + return MaterializationResult( + relation=ctx.destination, + failed=True, + error=f"audit failed for partition {partition_value}", + cleanup_relations=(staging,), + audit_results=tuple(all_audit_results), + ) + + if not target_exists: + ctx.log("promoting first partition into target") + ctx.adapter.rename( + connection=ctx.connection, + origin=staging, + destination=ctx.destination, + statement_recorder=ctx.statement_recorder, + ) + target_exists = True + else: + ctx.log("promoting partition into target") + ctx.execute_sql( + f"DELETE FROM {ctx.destination} " + f"WHERE CAST({partition_col} AS DATE) >= CAST('{partition_value}' AS DATE) " + f"AND CAST({partition_col} AS DATE) < CAST('{next_day}' AS DATE)" + ) + ctx.execute_sql(f"INSERT INTO {ctx.destination} SELECT * FROM {staging}") + + ctx.adapter.merge( + connection=ctx.connection, + destination=tracking_table, + sql=( + f"SELECT '{partition_value}' AS partition_value, " + f"'{ctx.run_id}' AS run_id, CURRENT_TIMESTAMP AS built_at" + ), + unique_key="partition_value", + statement_recorder=ctx.statement_recorder, + ) + + ctx.adapter.drop( + connection=ctx.connection, + destination=staging, + if_exists=True, + statement_recorder=ctx.statement_recorder, + ) + return MaterializationResult( + relation=ctx.destination, + cleanup_relations=(staging,), + audit_results=tuple(all_audit_results), + ) + + +def _find_stale_partitions( + ctx: MaterializationContext, + tracking_table: str, + all_partitions: list[str], +) -> list[str]: + if not all_partitions: + return [] + + cursor: Any = ctx.execute_sql(f"SELECT partition_value FROM {tracking_table}") + tracked: set[str] = {str(row[0]) for row in cursor.fetchall()} + stale: list[str] = [p for p in all_partitions if p not in tracked] + latest_partition: str = all_partitions[-1] + if latest_partition not in stale: + stale.append(latest_partition) + return stale + + +def _generate_date_range(start: str, end: str) -> list[str]: + result: list[str] = [] + current: str = start + while current < end: + result.append(current) + current = _next_date(current) + return result + + +def _next_date(date_str: str) -> str: + parts: list[str] = date_str.split("-") + year: int = int(parts[0]) + month: int = int(parts[1]) + day: int = int(parts[2]) + 1 + if day > 28: + day = 1 + month += 1 + if month > 12: + month = 1 + year += 1 + return f"{year:04d}-{month:02d}-{day:02d}" diff --git a/website/examples/waffle-shop/models/intermediate/customer_status_snapshot.sql b/website/examples/waffle-shop/models/intermediate/customer_status_snapshot.sql new file mode 100644 index 0000000000..eec03020cb --- /dev/null +++ b/website/examples/waffle-shop/models/intermediate/customer_status_snapshot.sql @@ -0,0 +1,35 @@ +MODEL ( + materialized incremental, + incremental_strategy merge, + unique_key [customer_id], + cursor last_ordered_at, + cursor_type timestamp, + cursor_grain second, + row_diff_exclude_columns [latest_order_status], + row_diff_tolerances ( + by_column ( + total_revenue_cents ( + absolute 1, + ), + ), + ), + cursor_inputs ( + fact_orders ordered_at, + ), + on_schema_change sync_all_columns, + replay_on_change full, + tags [intermediate, acceptance], + description "Merge-based customer snapshot with timestamp cursor and explicit backfill policies.", + columns ( + customer_id (audits [not_null, unique]), + ), +); + +SELECT + customer_id, + MAX(ordered_at) AS last_ordered_at, + MAX(order_status) AS latest_order_status, + COUNT(*) AS total_orders, + SUM(line_total_cents) AS total_revenue_cents +FROM __ref("fact_orders") +GROUP BY customer_id diff --git a/website/examples/waffle-shop/models/intermediate/order_status_index.sql b/website/examples/waffle-shop/models/intermediate/order_status_index.sql new file mode 100644 index 0000000000..a837e5ce0e --- /dev/null +++ b/website/examples/waffle-shop/models/intermediate/order_status_index.sql @@ -0,0 +1,22 @@ +MODEL ( + materialized incremental, + incremental_strategy delete_insert, + unique_key [order_id], + cursor order_id, + cursor_type integer, + on_schema_change append_new_columns, + replay_on_change bounded-7d, + tags [intermediate, acceptance], + description "Integer-cursor incremental projection over fact orders.", + columns ( + order_id (audits [not_null, unique]), + ), +); + +SELECT + order_id, + customer_id, + order_status, + ordered_at, + line_total_cents +FROM __ref("fact_orders") diff --git a/website/examples/waffle-shop/models/marts/_sqlbuild/_enums/payment_status.sql b/website/examples/waffle-shop/models/marts/_sqlbuild/_enums/payment_status.sql new file mode 100644 index 0000000000..e68ae4e8cf --- /dev/null +++ b/website/examples/waffle-shop/models/marts/_sqlbuild/_enums/payment_status.sql @@ -0,0 +1,7 @@ +ENUM ( + name payment_status, + members ( + SUCCESS "success", + FAILED "failed", + ), +); diff --git a/website/examples/waffle-shop/models/marts/_sqlbuild/_macros/currency.py b/website/examples/waffle-shop/models/marts/_sqlbuild/_macros/currency.py new file mode 100644 index 0000000000..010f20d531 --- /dev/null +++ b/website/examples/waffle-shop/models/marts/_sqlbuild/_macros/currency.py @@ -0,0 +1,6 @@ +"""Currency formatting macros.""" + + +def cents_to_dollars(column: str) -> str: + """Convert a cents integer column to a dollars decimal with two decimal places.""" + return f"ROUND(({column}) / 100.0, 2)" diff --git a/website/examples/waffle-shop/models/marts/_sqlbuild/_macros/datetime.py b/website/examples/waffle-shop/models/marts/_sqlbuild/_macros/datetime.py new file mode 100644 index 0000000000..4a540b76a3 --- /dev/null +++ b/website/examples/waffle-shop/models/marts/_sqlbuild/_macros/datetime.py @@ -0,0 +1,7 @@ +"""Datetime portability macros.""" + + +def timestamp_trunc(ctx, grain: str, expr: str) -> str: + if ctx.adapter_name == "bigquery": + return f"TIMESTAMP_TRUNC({expr}, {grain.upper()})" + return f"DATE_TRUNC('{grain}', {expr})" diff --git a/website/examples/waffle-shop/models/marts/daily_order_partitioned.sql b/website/examples/waffle-shop/models/marts/daily_order_partitioned.sql new file mode 100644 index 0000000000..34a127a08d --- /dev/null +++ b/website/examples/waffle-shop/models/marts/daily_order_partitioned.sql @@ -0,0 +1,34 @@ +MODEL ( + materialized partition_tracked, + tags [marts], + placeholders ( + partition_start "'2026-04-01'", + partition_end "'2026-04-05'", + ), + config ( + tracking_table partition_state, + partition_column order_date, + date_range_start 2026-04-01, + date_range_end 2026-04-05, + ), + description "Partition-tracked daily order summary using custom materialization.", + columns ( + order_date (audits [not_null]), + ), + audits [ + expression_is_true ( + name "waffles_ordered_is_positive", + expression "waffles_ordered > 0", + ), + ], +); + +SELECT + CAST(o.ordered_at AS DATE) AS order_date, + COUNT(DISTINCT o.order_id) AS order_count, + SUM(o.quantity) AS waffles_ordered, + COUNT(DISTINCT o.customer_id) AS unique_customers +FROM __ref("stg_orders") o +WHERE CAST(o.ordered_at AS DATE) >= CAST(@@@partition_start AS DATE) + AND CAST(o.ordered_at AS DATE) < CAST(@@@partition_end AS DATE) +GROUP BY CAST(o.ordered_at AS DATE) diff --git a/website/examples/waffle-shop/models/marts/daily_order_rollup.sql b/website/examples/waffle-shop/models/marts/daily_order_rollup.sql new file mode 100644 index 0000000000..005256c854 --- /dev/null +++ b/website/examples/waffle-shop/models/marts/daily_order_rollup.sql @@ -0,0 +1,35 @@ +MODEL ( + materialized incremental, + incremental_strategy delete_insert, + cursor activity_day, + cursor_type timestamp, + cursor_grain day, + microbatch_strategy watermark, + cursor_watermark_mode all, + cursor_inputs ( + hourly_order_activity (column activity_hour, roles [filter, watermark]), + ), + incremental_mode microbatch, + batch_size 2d, + replay_on_change bounded-14d, + tags [marts, acceptance], + description "Downstream daily microbatch rollup with a wider batch size than its hourly upstream.", + columns ( + activity_day (audits [not_null (run_scope delta_and_final)]), + ), + audits [ + expression_is_true ( + name "daily_orders_placed_is_non_negative", + expression "orders_placed >= 0", + run_scope delta_and_final, + ), + ], +); + +SELECT + @timestamp_trunc('day', 'activity_hour') AS activity_day, + SUM(orders_placed) AS orders_placed, + SUM(waffles_ordered) AS waffles_ordered, + SUM(revenue_cents) AS revenue_cents +FROM __ref("hourly_order_activity") +GROUP BY @timestamp_trunc('day', 'activity_hour') diff --git a/website/examples/waffle-shop/models/marts/daily_revenue.sql b/website/examples/waffle-shop/models/marts/daily_revenue.sql new file mode 100644 index 0000000000..54937bbc52 --- /dev/null +++ b/website/examples/waffle-shop/models/marts/daily_revenue.sql @@ -0,0 +1,25 @@ +MODEL ( + materialized table, + tags [marts], + description "Daily revenue aggregation.", + audits [ + expression_is_true ( + name "revenue_is_non_negative", + expression "total_revenue_cents >= 0", + ), + ], + columns ( + revenue_date (nullable false), + ), +); + +SELECT + CAST(o.ordered_at AS DATE) AS revenue_date, + COUNT(DISTINCT o.order_id) AS order_count, + SUM(o.quantity) AS waffles_sold, + SUM(p.amount_cents) AS total_revenue_cents, + @cents_to_dollars('SUM(p.amount_cents)') AS total_revenue_dollars, + SUM(p.amount_cents) / COUNT(DISTINCT o.order_id) AS avg_order_value_cents +FROM __ref("stg_orders") o +INNER JOIN __ref("stg_payments") p ON o.order_id = p.order_id AND p.payment_status = @enum("payment_status").SUCCESS +GROUP BY CAST(o.ordered_at AS DATE) diff --git a/website/examples/waffle-shop/models/marts/dim_customers.sql b/website/examples/waffle-shop/models/marts/dim_customers.sql new file mode 100644 index 0000000000..3cfc74903c --- /dev/null +++ b/website/examples/waffle-shop/models/marts/dim_customers.sql @@ -0,0 +1,23 @@ +MODEL ( + materialized table, + unique_key [customer_id], + row_diff_exclude_columns [email], + tags [marts], + description "Customer dimension with lifetime metrics.", + columns ( + customer_id (nullable false, audits [not_null, unique]), + ), +); + +SELECT + c.customer_id, + c.first_name, + c.last_name, + c.email, + c.created_at AS customer_since, + COUNT(DISTINCT o.order_id) AS lifetime_orders, + COALESCE(SUM(p.amount_cents), 0) AS lifetime_spend_cents +FROM __ref("stg_customers") c +LEFT JOIN __ref("stg_orders") o ON c.customer_id = o.customer_id +LEFT JOIN __ref("stg_payments") p ON o.order_id = p.order_id AND p.payment_status = 'success' +GROUP BY c.customer_id, c.first_name, c.last_name, c.email, c.created_at diff --git a/website/examples/waffle-shop/models/marts/fact_orders.sql b/website/examples/waffle-shop/models/marts/fact_orders.sql new file mode 100644 index 0000000000..b303f2a072 --- /dev/null +++ b/website/examples/waffle-shop/models/marts/fact_orders.sql @@ -0,0 +1,26 @@ +MODEL ( + materialized table, + tags [marts], + description "Order fact table with waffle and payment details.", + columns ( + order_id (nullable false, audits [not_null]), + ), +); + +SELECT + o.order_id, + o.customer_id, + o.waffle_type_id, + w.waffle_name, + w.category AS waffle_category, + o.quantity, + @line_total_cents("w.price_cents", "o.quantity") AS line_total_cents, + o.ordered_at, + o.status AS order_status, + __udf("udf__is_completed_order")(o.status) AS is_completed_order, + p.payment_method, + p.payment_status, + p.amount_cents AS payment_amount_cents +FROM __ref("stg_orders") o +LEFT JOIN __seed("waffle_types") w ON o.waffle_type_id = w.waffle_type_id +LEFT JOIN __ref("stg_payments") p ON o.order_id = p.order_id diff --git a/website/examples/waffle-shop/models/marts/hourly_activity_with_daily_context.sql b/website/examples/waffle-shop/models/marts/hourly_activity_with_daily_context.sql new file mode 100644 index 0000000000..cc46037031 --- /dev/null +++ b/website/examples/waffle-shop/models/marts/hourly_activity_with_daily_context.sql @@ -0,0 +1,37 @@ +MODEL ( + materialized incremental, + incremental_strategy delete_insert, + cursor activity_hour, + cursor_type timestamp, + cursor_grain hour, + microbatch_strategy watermark, + cursor_watermark_mode all, + cursor_inputs ( + hourly_order_activity (column activity_hour, roles [filter]), + daily_order_rollup (column activity_day, roles [filter, watermark]), + ), + incremental_mode microbatch, + batch_size 6h, + tags [marts, acceptance], + description "Hourly downstream microbatch model that depends on a coarser-grain daily upstream.", + columns ( + activity_hour (audits [not_null (run_scope delta_and_final)]), + ), + audits [ + expression_is_true ( + name "day_orders_cover_hourly_orders", + expression "day_orders_placed >= orders_placed", + run_scope delta_and_final, + ), + ], +); + +SELECT + h.activity_hour, + h.orders_placed, + d.orders_placed AS day_orders_placed, + h.waffles_ordered, + h.revenue_cents +FROM __ref("hourly_order_activity") h +INNER JOIN __ref("daily_order_rollup") d + ON @timestamp_trunc('day', 'h.activity_hour') = d.activity_day diff --git a/website/examples/waffle-shop/models/marts/hourly_order_activity.sql b/website/examples/waffle-shop/models/marts/hourly_order_activity.sql new file mode 100644 index 0000000000..447d88966c --- /dev/null +++ b/website/examples/waffle-shop/models/marts/hourly_order_activity.sql @@ -0,0 +1,34 @@ +MODEL ( + materialized incremental, + incremental_strategy delete_insert, + cursor activity_hour, + cursor_type timestamp, + cursor_grain hour, + microbatch_strategy watermark, + cursor_watermark_mode all, + cursor_inputs ( + fact_orders (column ordered_at, roles [filter, watermark]), + ), + incremental_mode microbatch, + batch_size 1d, + tags [marts], + description "Hourly order activity aggregated via microbatch incremental.", + columns ( + activity_hour (audits [not_null (run_scope delta_and_final)]), + ), + audits [ + expression_is_true ( + name "orders_placed_is_non_negative", + expression "orders_placed >= 0", + run_scope delta_and_final, + ), + ], +); + +SELECT + @timestamp_trunc('hour', 'o.ordered_at') AS activity_hour, + COUNT(*) AS orders_placed, + SUM(o.quantity) AS waffles_ordered, + SUM(o.line_total_cents) AS revenue_cents +FROM __ref("fact_orders") o +GROUP BY @timestamp_trunc('hour', 'o.ordered_at') diff --git a/website/examples/waffle-shop/models/staging/stg_customers.sql b/website/examples/waffle-shop/models/staging/stg_customers.sql new file mode 100644 index 0000000000..fbe76dac59 --- /dev/null +++ b/website/examples/waffle-shop/models/staging/stg_customers.sql @@ -0,0 +1,17 @@ +MODEL ( + materialized view, + tags [staging], + description "Cleaned customer records.", + columns ( + customer_id (audits [not_null, unique]), + email (audits [not_null]), + ), +); + +SELECT + id AS customer_id, + first_name, + last_name, + email, + created_at +FROM __source("raw__customers") diff --git a/website/examples/waffle-shop/models/staging/stg_orders.sql b/website/examples/waffle-shop/models/staging/stg_orders.sql new file mode 100644 index 0000000000..39679a7f07 --- /dev/null +++ b/website/examples/waffle-shop/models/staging/stg_orders.sql @@ -0,0 +1,26 @@ +MODEL ( + materialized view, + tags [staging], + description "Cleaned order records.", + columns ( + order_id (nullable false, audits [not_null, unique]), + customer_id (nullable false, audits [not_null]), + waffle_type_id ( + audits [relationships (to __seed("waffle_types"), field waffle_type_id)], + ), + status ( + audits [ + accepted_values (values ["placed", "preparing", "ready", "completed", "cancelled"]), + ], + ), + ), +); + +SELECT + id AS order_id, + customer_id, + waffle_type_id, + quantity, + ordered_at, + status +FROM __source("raw__orders") diff --git a/website/examples/waffle-shop/models/staging/stg_payments.sql b/website/examples/waffle-shop/models/staging/stg_payments.sql new file mode 100644 index 0000000000..eb7465a3d6 --- /dev/null +++ b/website/examples/waffle-shop/models/staging/stg_payments.sql @@ -0,0 +1,20 @@ +MODEL ( + materialized view, + tags [staging], + description "Cleaned payment records.", + columns ( + payment_id (audits [not_null, unique]), + order_id ( + audits [not_null, relationships (to __source("raw__orders"), field id)], + ), + ), +); + +SELECT + id AS payment_id, + order_id, + amount_cents, + payment_method, + paid_at, + status AS payment_status +FROM __source("raw__payments") diff --git a/website/examples/waffle-shop/rules/layers.py b/website/examples/waffle-shop/rules/layers.py new file mode 100644 index 0000000000..99b3c2755b --- /dev/null +++ b/website/examples/waffle-shop/rules/layers.py @@ -0,0 +1,15 @@ +from sqlbuild.rules import Finding, Model, RuleContext, rule + + +@rule( + code="XSQBRARCH001", + message="Marts must read sources through staging", + remediation="Reference a staging model with __ref() instead.", +) +def marts_use_staging(*, model: Model, ctx: RuleContext) -> list[Finding]: + layer = ctx.project.tree.relative_parts(path=model.path, under="models")[0] + sql = ctx.sql.for_model(model).authored.source + if layer != "marts" or "__source(" not in sql: + return [] + line = sql[: sql.index("__source(")].count("\n") + 1 + return [ctx.finding(subject=model, line=line)] diff --git a/website/examples/waffle-shop/seeds/lookups.yml b/website/examples/waffle-shop/seeds/lookups.yml new file mode 100644 index 0000000000..59ae29e937 --- /dev/null +++ b/website/examples/waffle-shop/seeds/lookups.yml @@ -0,0 +1,12 @@ +seeds: + - name: waffle_types + description: Waffle menu items with pricing. + columns: + - name: waffle_type_id + type: INTEGER + - name: waffle_name + type: VARCHAR + - name: category + type: VARCHAR + - name: price_cents + type: INTEGER diff --git a/website/examples/waffle-shop/seeds/waffle_types.csv b/website/examples/waffle-shop/seeds/waffle_types.csv new file mode 100644 index 0000000000..4ea7deb841 --- /dev/null +++ b/website/examples/waffle-shop/seeds/waffle_types.csv @@ -0,0 +1,7 @@ +waffle_type_id,waffle_name,category,price_cents +1,Classic Belgian,sweet,850 +2,Liege,sweet,950 +3,Brussels,sweet,750 +4,Cheddar Herb,savory,1050 +5,Everything Bagel,savory,1100 +6,Chicken and Waffle,savory,1450 diff --git a/website/examples/waffle-shop/sources/raw.yml b/website/examples/waffle-shop/sources/raw.yml new file mode 100644 index 0000000000..5bdbae9c55 --- /dev/null +++ b/website/examples/waffle-shop/sources/raw.yml @@ -0,0 +1,47 @@ +sources: + - name: raw__customers + managed: true + write_strategy: table + columns: + - name: id + type: INTEGER + - name: first_name + type: VARCHAR + - name: last_name + type: VARCHAR + - name: email + type: VARCHAR + - name: created_at + type: TIMESTAMP + + - name: raw__orders + managed: true + write_strategy: delete_insert + cursor_column: ordered_at + columns: + - name: id + type: INTEGER + - name: customer_id + type: INTEGER + - name: waffle_type_id + type: INTEGER + - name: quantity + type: INTEGER + - name: ordered_at + type: TIMESTAMP + - name: status + type: VARCHAR + + - name: raw__payments + expression: | + SELECT 1 AS id, 1 AS order_id, 1700 AS amount_cents, 'credit_card' AS payment_method, CAST('2026-04-01 09:16:00' AS TIMESTAMP) AS paid_at, 'success' AS status + UNION ALL SELECT 2 AS id, 2 AS order_id, 1050 AS amount_cents, 'credit_card' AS payment_method, CAST('2026-04-01 09:16:00' AS TIMESTAMP) AS paid_at, 'success' AS status + UNION ALL SELECT 3 AS id, 3 AS order_id, 4350 AS amount_cents, 'cash' AS payment_method, CAST('2026-04-01 10:31:00' AS TIMESTAMP) AS paid_at, 'success' AS status + UNION ALL SELECT 4 AS id, 4 AS order_id, 950 AS amount_cents, 'credit_card' AS payment_method, CAST('2026-04-02 08:46:00' AS TIMESTAMP) AS paid_at, 'success' AS status + UNION ALL SELECT 5 AS id, 5 AS order_id, 850 AS amount_cents, 'debit_card' AS payment_method, CAST('2026-04-02 12:01:00' AS TIMESTAMP) AS paid_at, 'success' AS status + UNION ALL SELECT 6 AS id, 6 AS order_id, 750 AS amount_cents, 'debit_card' AS payment_method, CAST('2026-04-02 12:01:00' AS TIMESTAMP) AS paid_at, 'success' AS status + UNION ALL SELECT 7 AS id, 7 AS order_id, 2200 AS amount_cents, 'credit_card' AS payment_method, CAST(NULL AS TIMESTAMP) AS paid_at, 'failed' AS status + UNION ALL SELECT 8 AS id, 8 AS order_id, 950 AS amount_cents, 'cash' AS payment_method, CAST('2026-04-03 11:01:00' AS TIMESTAMP) AS paid_at, 'success' AS status + columns: + - name: amount_cents + type: INTEGER diff --git a/website/examples/waffle-shop/sqlbuild_project.toml b/website/examples/waffle-shop/sqlbuild_project.toml new file mode 100644 index 0000000000..74b7dbc768 --- /dev/null +++ b/website/examples/waffle-shop/sqlbuild_project.toml @@ -0,0 +1,26 @@ +name = "waffle_shop" +adapter = "duckdb" +default_target = "dev" + +[connections.developer] +database = "waffle_shop_control.duckdb" + +[settings] +default_audit_severity = "warn" + +[defaults] +materialized = "table" + +[targets.prod] +connection = "developer" +schema = "prod" + +[targets.dev] +connection = "developer" +schema = "dev" + +[path_defaults.staging] +materialized = "view" + +[rules] +select = ["XSQBRARCH"] diff --git a/website/examples/waffle-shop/tests/scenarios/daily_revenue_minimal.sql b/website/examples/waffle-shop/tests/scenarios/daily_revenue_minimal.sql new file mode 100644 index 0000000000..e9bdee45b9 --- /dev/null +++ b/website/examples/waffle-shop/tests/scenarios/daily_revenue_minimal.sql @@ -0,0 +1,59 @@ +SCENARIO ( + description "Daily revenue includes only successful payments", + tags ["revenue", "example"] +); + +WITH +__ref__stg_orders AS ( + SELECT + 1 AS order_id, + 10 AS customer_id, + 1 AS waffle_type_id, + 2 AS quantity, + CAST('2026-04-01 09:15:00' AS TIMESTAMP) AS ordered_at, + 'completed' AS status + UNION ALL + SELECT + 2 AS order_id, + 10 AS customer_id, + 4 AS waffle_type_id, + 1 AS quantity, + CAST('2026-04-01 10:00:00' AS TIMESTAMP) AS ordered_at, + 'completed' AS status +), + +__ref__stg_payments AS ( + SELECT + 1 AS payment_id, + 1 AS order_id, + 1700 AS amount_cents, + 'credit_card' AS payment_method, + CAST('2026-04-01 09:16:00' AS TIMESTAMP) AS paid_at, + 'success' AS payment_status + UNION ALL + SELECT + 2 AS payment_id, + 2 AS order_id, + 1050 AS amount_cents, + 'credit_card' AS payment_method, + CAST('2026-04-01 10:01:00' AS TIMESTAMP) AS paid_at, + 'failed' AS payment_status +), + +__expected__daily_revenue AS ( + SELECT + CAST('2026-04-01' AS DATE) AS revenue_date, + 1 AS order_count, + 2 AS waffles_sold, + 1700 AS total_revenue_cents, + 17.0 AS total_revenue_dollars, + 1700 AS avg_order_value_cents +), + +__assert__no_negative_revenue AS ( + SELECT * + FROM __ref("daily_revenue") + WHERE total_revenue_cents < 0 +) + +SELECT 1 diff --git a/website/examples/waffle-shop/tests/scenarios/daily_revenue_multi_order.sql b/website/examples/waffle-shop/tests/scenarios/daily_revenue_multi_order.sql new file mode 100644 index 0000000000..902fc13985 --- /dev/null +++ b/website/examples/waffle-shop/tests/scenarios/daily_revenue_multi_order.sql @@ -0,0 +1,59 @@ +SCENARIO ( + description "Daily revenue aggregates multiple successful orders", + tags ["revenue", "example"] +); + +WITH +__ref__stg_orders AS ( + SELECT + 11 AS order_id, + 20 AS customer_id, + 1 AS waffle_type_id, + 1 AS quantity, + CAST('2026-04-02 08:30:00' AS TIMESTAMP) AS ordered_at, + 'completed' AS status + UNION ALL + SELECT + 12 AS order_id, + 21 AS customer_id, + 3 AS waffle_type_id, + 3 AS quantity, + CAST('2026-04-02 12:15:00' AS TIMESTAMP) AS ordered_at, + 'completed' AS status +), + +__ref__stg_payments AS ( + SELECT + 11 AS payment_id, + 11 AS order_id, + 850 AS amount_cents, + 'cash' AS payment_method, + CAST('2026-04-02 08:31:00' AS TIMESTAMP) AS paid_at, + 'success' AS payment_status + UNION ALL + SELECT + 12 AS payment_id, + 12 AS order_id, + 2250 AS amount_cents, + 'debit_card' AS payment_method, + CAST('2026-04-02 12:16:00' AS TIMESTAMP) AS paid_at, + 'success' AS payment_status +), + +__expected__daily_revenue AS ( + SELECT + CAST('2026-04-02' AS DATE) AS revenue_date, + 2 AS order_count, + 4 AS waffles_sold, + 3100 AS total_revenue_cents, + 31.0 AS total_revenue_dollars, + 1550 AS avg_order_value_cents +), + +__assert__positive_average_order_value AS ( + SELECT * + FROM __ref("daily_revenue") + WHERE avg_order_value_cents <= 0 +) + +SELECT 1 diff --git a/website/examples/waffle-shop/tests/test_rule_layers.py b/website/examples/waffle-shop/tests/test_rule_layers.py new file mode 100644 index 0000000000..8e8e35a80c --- /dev/null +++ b/website/examples/waffle-shop/tests/test_rule_layers.py @@ -0,0 +1,17 @@ +from rules.layers import marts_use_staging + +from sqlbuild.rules.testing import RuleCase, evaluate_rule + + +def test_given_mart_reading_source_when_evaluating_then_reports_finding() -> None: + result = evaluate_rule( + rule=marts_use_staging, + test_case=RuleCase( + description="mart reads a raw source", + source='MODEL ();\nSELECT id FROM __source("raw__payments")\n', + path="models/marts/payments.sql", + expected_finding_count=1, + ), + ) + + assert result.finding_count == 1 diff --git a/website/examples/waffle-shop/tests/unit/test_daily_revenue_chain.sql b/website/examples/waffle-shop/tests/unit/test_daily_revenue_chain.sql new file mode 100644 index 0000000000..0b23df64d3 --- /dev/null +++ b/website/examples/waffle-shop/tests/unit/test_daily_revenue_chain.sql @@ -0,0 +1,86 @@ +TEST(); + +WITH +__source__raw__orders AS ( + SELECT + 1 AS id, + 100 AS customer_id, + 2 AS waffle_type_id, + 3 AS quantity, + CAST('2026-04-01 10:00:00' AS TIMESTAMP) AS ordered_at, + 'completed' AS status + UNION ALL + SELECT + 2 AS id, + 101 AS customer_id, + 1 AS waffle_type_id, + 1 AS quantity, + CAST('2026-04-01 11:00:00' AS TIMESTAMP) AS ordered_at, + 'completed' AS status +), +__source__raw__payments AS ( + SELECT + 10 AS id, + 1 AS order_id, + 2850 AS amount_cents, + 'card' AS payment_method, + CAST('2026-04-01 10:05:00' AS TIMESTAMP) AS paid_at, + 'success' AS status + UNION ALL + SELECT + 11 AS id, + 2 AS order_id, + 850 AS amount_cents, + 'cash' AS payment_method, + CAST('2026-04-01 11:10:00' AS TIMESTAMP) AS paid_at, + 'failed' AS status +), +__expected__stg_orders AS ( + SELECT + 1 AS order_id, + 100 AS customer_id, + 2 AS waffle_type_id, + 3 AS quantity, + CAST('2026-04-01 10:00:00' AS TIMESTAMP) AS ordered_at, + 'completed' AS status + UNION ALL + SELECT + 2 AS order_id, + 101 AS customer_id, + 1 AS waffle_type_id, + 1 AS quantity, + CAST('2026-04-01 11:00:00' AS TIMESTAMP) AS ordered_at, + 'completed' AS status +), +__expected__stg_payments AS ( + SELECT + 10 AS payment_id, + 1 AS order_id, + 2850 AS amount_cents, + 'card' AS payment_method, + CAST('2026-04-01 10:05:00' AS TIMESTAMP) AS paid_at, + 'success' AS payment_status + UNION ALL + SELECT + 11 AS payment_id, + 2 AS order_id, + 850 AS amount_cents, + 'cash' AS payment_method, + CAST('2026-04-01 11:10:00' AS TIMESTAMP) AS paid_at, + 'failed' AS payment_status +), +__expected__daily_revenue AS ( + SELECT + CAST('2026-04-01' AS DATE) AS revenue_date, + 1 AS order_count, + 3 AS waffles_sold, + 2850 AS total_revenue_cents, + 28.5 AS total_revenue_dollars, + 2850 AS avg_order_value_cents +), +__assert__daily_revenue_is_non_negative AS ( + SELECT * + FROM __ref("daily_revenue") + WHERE total_revenue_cents < 0 +) +SELECT 1 diff --git a/website/examples/waffle-shop/tests/unit/test_fact_orders.sql b/website/examples/waffle-shop/tests/unit/test_fact_orders.sql new file mode 100644 index 0000000000..864b91fa4e --- /dev/null +++ b/website/examples/waffle-shop/tests/unit/test_fact_orders.sql @@ -0,0 +1,50 @@ +TEST(); + +WITH +__ref__stg_orders AS ( + SELECT + 1 AS order_id, + 100 AS customer_id, + 2 AS waffle_type_id, + 3 AS quantity, + CAST('2026-04-01 10:00:00' AS TIMESTAMP) AS ordered_at, + 'completed' AS status +), +__ref__stg_payments AS ( + SELECT + 10 AS payment_id, + 1 AS order_id, + 2850 AS amount_cents, + 'card' AS payment_method, + CAST('2026-04-01 10:05:00' AS TIMESTAMP) AS paid_at, + 'success' AS payment_status +), +__seed__waffle_types AS ( + SELECT + 2 AS waffle_type_id, + 'Liege' AS waffle_name, + 'sweet' AS category, + 950 AS price_cents +), +__expected__fact_orders AS ( + SELECT + 1 AS order_id, + 100 AS customer_id, + 2 AS waffle_type_id, + 'Liege' AS waffle_name, + 'sweet' AS waffle_category, + 3 AS quantity, + 2850 AS line_total_cents, + CAST('2026-04-01 10:00:00' AS TIMESTAMP) AS ordered_at, + 'completed' AS order_status, + TRUE AS is_completed_order, + 'card' AS payment_method, + 'success' AS payment_status, + 2850 AS payment_amount_cents +), +__assert__line_totals_are_non_negative AS ( + SELECT * + FROM __ref("fact_orders") + WHERE line_total_cents < 0 +) +SELECT 1 diff --git a/website/examples/waffle-shop/tests/unit/test_line_total_cents_macro.sql b/website/examples/waffle-shop/tests/unit/test_line_total_cents_macro.sql new file mode 100644 index 0000000000..5ce379959b --- /dev/null +++ b/website/examples/waffle-shop/tests/unit/test_line_total_cents_macro.sql @@ -0,0 +1,14 @@ +TEST (mode macro, name "calculates_line_total_cents"); + +WITH +input_values AS ( + SELECT 950 AS price_cents, 3 AS quantity +), +__macro_actual__ AS ( + SELECT @line_total_cents("price_cents", "quantity") AS line_total_cents + FROM input_values +), +__macro_expected__ AS ( + SELECT 2850 AS line_total_cents +) +SELECT 1 diff --git a/website/examples/waffle-shop/tests/unit/test_stg_orders.sql b/website/examples/waffle-shop/tests/unit/test_stg_orders.sql new file mode 100644 index 0000000000..8e6dd20e97 --- /dev/null +++ b/website/examples/waffle-shop/tests/unit/test_stg_orders.sql @@ -0,0 +1,27 @@ +TEST(); + +WITH +__source__raw__orders AS ( + SELECT + 1 AS id, + 100 AS customer_id, + 2 AS waffle_type_id, + 3 AS quantity, + CAST('2026-04-01 10:00:00' AS TIMESTAMP) AS ordered_at, + 'completed' AS status +), +__expected__stg_orders AS ( + SELECT + 1 AS order_id, + 100 AS customer_id, + 2 AS waffle_type_id, + 3 AS quantity, + CAST('2026-04-01 10:00:00' AS TIMESTAMP) AS ordered_at, + 'completed' AS status +), +__assert__order_ids_are_not_null AS ( + SELECT * + FROM __ref("stg_orders") + WHERE order_id IS NULL +) +SELECT 1 From 63ec18ef120d55008c4989ca8228095482caf1c2 Mon Sep 17 00:00:00 2001 From: Kevin Longe <273747162+kvlonge@users.noreply.github.com> Date: Fri, 25 Sep 2026 17:04:25 +0100 Subject: [PATCH 21/27] docs: animate a model move and rename in the landing page hero --- website/public/index.html | 12 ++ website/public/styles.css | 231 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 243 insertions(+) diff --git a/website/public/index.html b/website/public/index.html index 64d666b1d0..3055fcd762 100644 --- a/website/public/index.html +++ b/website/public/index.html @@ -49,6 +49,7 @@

+

Free and open source · Apache-2.0

The refactorable warehouse

Verify early, test properly, and refactor safely.

@@ -64,6 +65,17 @@

The refactorable warehouse

Read the docs View on GitHub
+
+
diff --git a/website/public/styles.css b/website/public/styles.css index 04a387d1f4..2c8778aa08 100644 --- a/website/public/styles.css +++ b/website/public/styles.css @@ -703,3 +703,234 @@ footer a { .step-group:first-child { margin-top: 0; } + +/* Hero visual: a model is moved and renamed, then sqb plan shows the migration. */ +.hero { + display: grid; + grid-template-columns: minmax(0, 1fr) auto; + gap: 48px; + align-items: center; +} + +.hero-visual { + border: 1px solid var(--panel-border); + border-left: 1px solid var(--inner-line); + border-radius: var(--radius); + min-height: 236px; +} + +.hero-visual .hv-stack { + display: grid; +} + +.hero-visual .hv-stack > * { + grid-area: 1 / 1; +} + +.hero-visual .hv-l { + display: block; +} + +.hero-visual .hv-l1 { + margin-top: 16px; +} + +.hero-visual .hv-a, +.hero-visual .hv-b, +.hero-visual .hv-l { + animation-duration: 10s; + animation-iteration-count: infinite; + animation-fill-mode: both; + animation-timing-function: ease-out; +} + +.hero-visual .hv-a { + animation-name: hv-a; +} + +.hero-visual .hv-b { + animation-name: hv-b; +} + +@keyframes hv-a { + 0%, + 15% { + opacity: 1; + } + 18%, + 96% { + opacity: 0; + } + 100% { + opacity: 1; + } +} + +@keyframes hv-b { + 0%, + 15% { + opacity: 0; + } + 18%, + 92% { + opacity: 1; + } + 96%, + 100% { + opacity: 0; + } +} + +@keyframes hv-l1 { + 0%, + 24% { + opacity: 0; + transform: translateY(3px); + } + 27%, + 92% { + opacity: 1; + transform: none; + } + 96%, + 100% { + opacity: 0; + } +} + +.hv-l1 { + animation-name: hv-l1; +} + +@keyframes hv-l2 { + 0%, + 30% { + opacity: 0; + transform: translateY(3px); + } + 33%, + 92% { + opacity: 1; + transform: none; + } + 96%, + 100% { + opacity: 0; + } +} + +.hv-l2 { + animation-name: hv-l2; +} + +@keyframes hv-l3 { + 0%, + 33% { + opacity: 0; + transform: translateY(3px); + } + 36%, + 92% { + opacity: 1; + transform: none; + } + 96%, + 100% { + opacity: 0; + } +} + +.hv-l3 { + animation-name: hv-l3; +} + +@keyframes hv-l4 { + 0%, + 36% { + opacity: 0; + transform: translateY(3px); + } + 39%, + 92% { + opacity: 1; + transform: none; + } + 96%, + 100% { + opacity: 0; + } +} + +.hv-l4 { + animation-name: hv-l4; +} + +@keyframes hv-l5 { + 0%, + 39% { + opacity: 0; + transform: translateY(3px); + } + 42%, + 92% { + opacity: 1; + transform: none; + } + 96%, + 100% { + opacity: 0; + } +} + +.hv-l5 { + animation-name: hv-l5; +} + +@keyframes hv-l6 { + 0%, + 42% { + opacity: 0; + transform: translateY(3px); + } + 45%, + 92% { + opacity: 1; + transform: none; + } + 96%, + 100% { + opacity: 0; + } +} + +.hv-l6 { + animation-name: hv-l6; +} + +@media (prefers-reduced-motion: reduce) { + .hero-visual .hv-a, + .hero-visual .hv-b, + .hero-visual .hv-l { + animation: none; + } + + .hero-visual .hv-a { + opacity: 0; + } +} + +@media (max-width: 1060px) { + .hero { + grid-template-columns: minmax(0, 1fr); + } + + .hero-visual { + justify-self: start; + } +} + +@media (max-width: 620px) { + .hero-visual { + display: none; + } +} From ca5820921a81915f29fab22131435f78cb2b930c Mon Sep 17 00:00:00 2001 From: Kevin Longe <273747162+kvlonge@users.noreply.github.com> Date: Fri, 25 Sep 2026 17:05:48 +0100 Subject: [PATCH 22/27] docs: fix the hero terminal font and match step 07 colours to the CLI --- website/public/index.html | 8 ++++---- website/public/styles.css | 14 +++++++++----- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/website/public/index.html b/website/public/index.html index 3055fcd762..4f01712fb1 100644 --- a/website/public/index.html +++ b/website/public/index.html @@ -319,10 +319,10 @@

Rename models without rebuilding history

sqb plan
 Migrations (1)
-└── daily_order_rollup  migrate  dev.daily_activity_rollup -> dev.daily_order_rollup
-    ├── compatibility  compatible
-    ├── transfer  physical copy, promote by transactional rename
-    └── discovery  automatic
+└── daily_order_rollup migrate dev.daily_activity_rollup -> dev.daily_order_rollup + ├── compatibility compatible + ├── transfer physical copy, promote by transactional rename + └── discovery automatic
diff --git a/website/public/styles.css b/website/public/styles.css index 2c8778aa08..d6943af91c 100644 --- a/website/public/styles.css +++ b/website/public/styles.css @@ -712,13 +712,21 @@ footer a { align-items: center; } -.hero-visual { +.hero-visual.terminal { border: 1px solid var(--panel-border); border-left: 1px solid var(--inner-line); border-radius: var(--radius); min-height: 236px; } +.hero-visual { + font-family: var(--font-mono); +} + +.hero-visual .tree { + display: inline; +} + .hero-visual .hv-stack { display: grid; } @@ -731,10 +739,6 @@ footer a { display: block; } -.hero-visual .hv-l1 { - margin-top: 16px; -} - .hero-visual .hv-a, .hero-visual .hv-b, .hero-visual .hv-l { From 5ce109929e83da6fab2c52265304b69dc3f74f22 Mon Sep 17 00:00:00 2001 From: Kevin Longe <273747162+kvlonge@users.noreply.github.com> Date: Fri, 25 Sep 2026 17:19:15 +0100 Subject: [PATCH 23/27] ci: build the website and deploy it to GitHub Pages --- .github/workflows/website.yml | 67 ++++++++++++++++++++++++++++++++++ website/public/CNAME | 1 + website/scripts/check_links.py | 65 +++++++++++++++++++++++++++++++++ 3 files changed, 133 insertions(+) create mode 100644 .github/workflows/website.yml create mode 100644 website/public/CNAME create mode 100644 website/scripts/check_links.py diff --git a/.github/workflows/website.yml b/.github/workflows/website.yml new file mode 100644 index 0000000000..b10b2fb3fb --- /dev/null +++ b/.github/workflows/website.yml @@ -0,0 +1,67 @@ +name: Website + +on: + push: + branches: [main] + paths: + - "website/**" + - ".github/workflows/website.yml" + pull_request: + paths: + - "website/**" + - ".github/workflows/website.yml" + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: website-${{ github.ref }} + cancel-in-progress: true + +jobs: + build: + name: Build sqlbuild.com + runs-on: ubuntu-24.04 + defaults: + run: + working-directory: website + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: 22 + cache: npm + cache-dependency-path: website/package-lock.json + + - name: Install dependencies + run: npm ci + + - name: Build + run: npm run build + + - name: Check links + run: python3 scripts/check_links.py dist + + - name: Upload site + if: github.event_name != 'pull_request' + uses: actions/upload-pages-artifact@v3 + with: + path: website/dist + + deploy: + name: Deploy to GitHub Pages + if: github.event_name != 'pull_request' && github.ref == 'refs/heads/main' + needs: build + runs-on: ubuntu-24.04 + permissions: + pages: write + id-token: write + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - name: Deploy + id: deployment + uses: actions/deploy-pages@v4 diff --git a/website/public/CNAME b/website/public/CNAME new file mode 100644 index 0000000000..7a292cb212 --- /dev/null +++ b/website/public/CNAME @@ -0,0 +1 @@ +sqlbuild.com diff --git a/website/scripts/check_links.py b/website/scripts/check_links.py new file mode 100644 index 0000000000..1cb1e887db --- /dev/null +++ b/website/scripts/check_links.py @@ -0,0 +1,65 @@ +"""Fail when a built page links to a missing page or anchor on the same site.""" + +import sys +from html.parser import HTMLParser +from pathlib import Path +from urllib.parse import unquote, urlsplit + + +class PageParser(HTMLParser): + def __init__(self) -> None: + super().__init__() + self.hrefs: list[str] = [] + self.ids: set[str] = set() + + def handle_starttag(self, tag: str, attrs: list[tuple[str, str | None]]) -> None: + values = dict(attrs) + if values.get("id"): + self.ids.add(values["id"] or "") + if tag == "a" and values.get("href"): + self.hrefs.append(values["href"] or "") + + +def route_for(dist: Path, file: Path) -> str: + relative = "/" + file.relative_to(dist).as_posix() + return relative.removesuffix("index.html") + + +def main() -> int: + dist = Path(sys.argv[1] if len(sys.argv) > 1 else "dist") + pages: dict[str, PageParser] = {} + for file in dist.rglob("*.html"): + parser = PageParser() + parser.feed(file.read_text()) + pages[route_for(dist, file)] = parser + + broken: list[str] = [] + for route, page in sorted(pages.items()): + if route.startswith("/404"): + continue + for href in page.hrefs: + url = urlsplit(href) + if url.scheme or url.netloc: + continue + path = unquote(url.path) or route + if not path.startswith("/"): + path = route + path + if not path.endswith("/") and "." not in path.rsplit("/", 1)[-1]: + path += "/" + target = pages.get(path) + if target is None: + if not (dist / path.lstrip("/")).exists(): + broken.append(f"{route}: missing page {href}") + continue + fragment = unquote(url.fragment) + if fragment and fragment != "_top" and fragment not in target.ids: + broken.append(f"{route}: missing anchor {href}") + + for line in broken: + print(line) + print(f"{len(pages)} pages, {len(broken)} broken links") + return 1 if broken else 0 + + +if __name__ == "__main__": + raise SystemExit(main()) From 00ed38672af82aa0cf73ccb325d9241ea27d0c82 Mon Sep 17 00:00:00 2001 From: Kevin Longe <273747162+kvlonge@users.noreply.github.com> Date: Fri, 25 Sep 2026 17:19:15 +0100 Subject: [PATCH 24/27] ci: skip Python checks and test suites for website-only changes --- .github/workflows/verify.yml | 38 +++++++++++++++++++++++++++--------- pyproject.toml | 2 ++ 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml index d0af8bebd5..a6a078e3e1 100644 --- a/.github/workflows/verify.yml +++ b/.github/workflows/verify.yml @@ -16,6 +16,7 @@ jobs: name: Classify verification scope runs-on: ubuntu-24.04 outputs: + checks: ${{ steps.scope.outputs.checks }} duckdb: ${{ steps.scope.outputs.duckdb }} postgres: ${{ steps.scope.outputs.postgres }} performance: ${{ steps.scope.outputs.performance }} @@ -39,11 +40,12 @@ jobs: echo "performance=$3" echo "format_performance=$4" echo "rules_performance=$5" + echo "checks=$6" } >> "${GITHUB_OUTPUT}" } if [[ "${EVENT_NAME}" != "pull_request" ]]; then - write_scope true true true true true + write_scope true true true true true true exit 0 fi @@ -54,8 +56,15 @@ jobs: rules_performance=false broad=false changed=false + # The website builds and deploys in its own workflow, so a change that only touches it + # skips the Python checks and test suites. + website_only=true while IFS= read -r -d '' path; do changed=true + case "${path}" in + website/*|.github/workflows/website.yml) ;; + *) website_only=false ;; + esac case "${path}" in crates/*|Cargo.toml|Cargo.lock|pyproject.toml|uv.lock) broad=true @@ -94,7 +103,7 @@ jobs: format_performance=true rules_performance=true ;; - .github/*|docs/*|*.md|.gitignore|LICENSE) + .github/*|docs/*|website/*|*.md|.gitignore|LICENSE) ;; *) broad=true @@ -103,10 +112,15 @@ jobs: done < <(git diff --name-only -z "${BASE_SHA}" "${HEAD_SHA}") if [[ "${changed}" != "true" ]]; then - write_scope true true true true true + write_scope true true true true true true exit 0 fi + checks=true + if [[ "${website_only}" == "true" ]]; then + checks=false + fi + if [[ "${broad}" == "true" ]]; then duckdb=true postgres=true @@ -117,7 +131,8 @@ jobs: "${postgres}" \ "${performance}" \ "${format_performance}" \ - "${rules_performance}" + "${rules_performance}" \ + "${checks}" lockfile: name: Lockfile consistency @@ -137,7 +152,8 @@ jobs: checks: name: Static checks and unit + integration tests - needs: lockfile + needs: [changes, lockfile] + if: needs.changes.outputs.checks == 'true' runs-on: ubuntu-24.04 timeout-minutes: 30 steps: @@ -542,6 +558,7 @@ jobs: - name: Confirm all required verification jobs passed env: CHANGES_RESULT: ${{ needs.changes.result }} + CHECKS_SELECTED: ${{ needs.changes.outputs.checks }} LOCKFILE_RESULT: ${{ needs.lockfile.result }} CHECKS_RESULT: ${{ needs.checks.result }} E2E_SHARDS_RESULT: ${{ needs.e2e_shards.result }} @@ -553,10 +570,13 @@ jobs: RULES_PERFORMANCE_RESULT: ${{ needs.rules_performance.result }} POSTGRES_RESULT: ${{ needs.postgres.result }} run: | - if [[ "${CHANGES_RESULT}" != "success" || \ - "${LOCKFILE_RESULT}" != "success" || \ - "${CHECKS_RESULT}" != "success" ]]; then - echo "Required classification, lockfile, or static checks did not pass" >&2 + if [[ "${CHANGES_RESULT}" != "success" || "${LOCKFILE_RESULT}" != "success" ]]; then + echo "Required classification or lockfile checks did not pass" >&2 + exit 1 + fi + if [[ "${CHECKS_RESULT}" != "success" ]] && \ + ! [[ "${CHECKS_SELECTED}" == "false" && "${CHECKS_RESULT}" == "skipped" ]]; then + echo "Required static checks did not pass: ${CHECKS_RESULT}" >&2 exit 1 fi for result in \ diff --git a/pyproject.toml b/pyproject.toml index 6c938d8732..48a1b5d644 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -119,6 +119,8 @@ markers = [ [tool.ruff] target-version = "py312" line-length = 100 +# The website's example projects are sample SQLBuild projects, not package code. +extend-exclude = ["website"] [tool.ruff.lint] select = ["B", "E", "F", "I", "PLR0913", "PLR0915", "UP"] From 7173b0314b1565a87008d799eaa6e9d0fd70c6f0 Mon Sep 17 00:00:00 2001 From: Kevin Longe <273747162+kvlonge@users.noreply.github.com> Date: Fri, 25 Sep 2026 17:45:35 +0100 Subject: [PATCH 25/27] docs: describe migration promotion as staged on the landing page --- website/public/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/public/index.html b/website/public/index.html index 4f01712fb1..cd7078f6d8 100644 --- a/website/public/index.html +++ b/website/public/index.html @@ -75,7 +75,7 @@

The refactorable warehouse

└── revenue.sqlmodels └── finance └── daily_revenue.sql -sqb planMigrations (1)└── daily_revenue migrate prod.revenue -> prod.daily_revenue ├── compatibility compatible ├── transfer physical copy, promote by transactional rename └── discovery automatic
+sqb planMigrations (1)└── daily_revenue migrate prod.revenue -> prod.daily_revenue ├── compatibility compatible ├── transfer physical copy, promote by staged rename └── discovery automatic
@@ -321,7 +321,7 @@

Rename models without rebuilding history

Migrations (1) └── daily_order_rollup migrate dev.daily_activity_rollup -> dev.daily_order_rollup ├── compatibility compatible - ├── transfer physical copy, promote by transactional rename + ├── transfer physical copy, promote by staged rename └── discovery automatic
From 86147e4cb23b1c5753fd6e374f2f5ee00d64187f Mon Sep 17 00:00:00 2001 From: Kevin Longe <273747162+kvlonge@users.noreply.github.com> Date: Fri, 25 Sep 2026 17:50:17 +0100 Subject: [PATCH 26/27] docs: show real semantic compile errors in landing page step 01 --- website/README.md | 2 +- website/examples/README.md | 13 ++++++++++++- website/public/index.html | 25 +++++++++++++------------ 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/website/README.md b/website/README.md index 2730e5c091..b920a0a57f 100644 --- a/website/README.md +++ b/website/README.md @@ -2,7 +2,7 @@ The SQLBuild website: the homepage at `/` and the documentation at `/docs/`, built as one [Astro Starlight](https://starlight.astro.build) site and styled to match the SQLBuild UI. -- `public/index.html` and `public/styles.css`: the homepage, plain static HTML and CSS. Its terminal examples come from `sqb playground waffle-shop` output, trimmed to the relevant lines. Step 01's compile output is a placeholder until compile reports unknown columns and type mismatches. +- `public/index.html` and `public/styles.css`: the homepage, plain static HTML and CSS. Its terminal examples are real `sqb` output from the projects in `examples/`, trimmed to the relevant lines. - `src/content/docs/docs/`: the documentation pages (MDX), first ported from the Mintlify docs and now edited here. `src/navigation.mjs` holds the sidebar and redirects. - `src/components/`: the page layout, header and page title, replacing Starlight's defaults. `src/components/mintlify/` has drop-in versions of the Mintlify components the pages use (`Card`, `CardGroup`, `Frame`, `Note`, `Warning`). - `public/fonts/`: self-hosted fonts, each with its licence. diff --git a/website/examples/README.md b/website/examples/README.md index 60f94603ab..519c2c1f88 100644 --- a/website/examples/README.md +++ b/website/examples/README.md @@ -6,10 +6,21 @@ DuckDB. | Project | Landing page | |---------|--------------| -| `waffle-shop/` | Steps 02 to 07. It is `sqb playground waffle-shop` plus the custom Rule in `rules/layers.py` and its test, the scoped enum and macros under `models/marts/_sqlbuild/`, and the renamed `daily_order_rollup` model. | +| `waffle-shop/` | Steps 01 to 07. It is `sqb playground waffle-shop` plus the custom Rule in `rules/layers.py` and its test, the scoped enum and macros under `models/marts/_sqlbuild/`, and the renamed `daily_order_rollup` model. | | `tidy-shop/` | Step 08, the janitor. | | `hero-shop/` | The hero: a model moved and renamed. | +## Step 01: compile errors + +Step 01 needs semantic compile checks for unknown columns and type mismatches, which are not +released yet; the output was produced with a development build. In a copy of `waffle-shop`: + +1. In `sources/raw.yml`, add `contract: enforced` to `raw__customers` and `raw__orders`, so the + columns and types that flow into the models are authoritative. +2. In `models/marts/fact_orders.sql`, change `o.quantity,` to `o.qty,` and add + `WHERE o.ordered_at > 5` as the last line. +3. Run `sqb compile`. + ## Step 08: janitor `tidy-shop` shows the state after the stale model was removed. To regenerate the output, restore it diff --git a/website/public/index.html b/website/public/index.html index cd7078f6d8..42abf392f6 100644 --- a/website/public/index.html +++ b/website/public/index.html @@ -122,26 +122,27 @@

One refactor, start to finish

Catch errors before anything runs

- Every column is bound and every type checked, offline. A missing column fails in seconds, pointing at the line. + Every column and type is checked offline against your declared contracts. A missing column fails in seconds, pointing at the line.

-
sqb compile
-error[B101]: column 'qty' does not exist in stg_orders
-  --> models/marts/fact_orders.sql:16:3
+error[B002]: Unknown column 'qty' in table 'stg_orders' (context: SELECT)
+  model: fact_orders
+  --> models/marts/fact_orders.sql:16:5
      |
   16 |   o.qty,
-     |   ^^^^^
-  = help: stg_orders has order_id, customer_id, waffle_type_id, quantity, ordered_at, status
+     |     ^
+  = help: review the SQL expression, input types, and authoritative schema
 
-error[B201]: cannot compare TIMESTAMP with INTEGER
-  --> models/staging/stg_orders.sql:27:7
+error[B217]: Incompatible comparison between timestamp and integer
+  model: fact_orders
+  --> models/marts/fact_orders.sql:27:7
      |
-  27 | WHERE ordered_at > 5
-     |       ^^^^^^^^^^^^^^
-  = help: ordered_at is TIMESTAMP; compare it with a TIMESTAMP value
+  27 | WHERE o.ordered_at > 5
+     |       ^
+  = help: review the SQL expression, input types, and authoritative schema
 
-✗ Project compiled  12 models, 1 seed, 2 functions, 2 errors, 0 warnings
+✗ Project compiled 12 models, 1 seed, 2 functions, 4 errors, 0 warnings
From be649159b3796ebeec2690e072b7e707f113bf91 Mon Sep 17 00:00:00 2001 From: Kevin Longe <273747162+kvlonge@users.noreply.github.com> Date: Fri, 25 Sep 2026 18:01:03 +0100 Subject: [PATCH 27/27] docs: clearer landing page navigation --- website/public/index.html | 2 +- website/public/styles.css | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/website/public/index.html b/website/public/index.html index 7aca7da23b..6cb6d90a1f 100644 --- a/website/public/index.html +++ b/website/public/index.html @@ -36,8 +36,8 @@