Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
aadbc98
test: reproduce Python selectors in published job selections
kvlonge Nov 14, 2026
889f3d4
wip: resolve published Python selectors with the CLI's unified resolver
kvlonge Nov 14, 2026
cc4a6c5
feat: let a selected Python node read an unselected upstream's result
kvlonge Nov 14, 2026
0e665a9
feat: select Python-only jobs and SQL tests across CLI and server runs
kvlonge Nov 14, 2026
d78eb7e
Merge remote-tracking branch 'origin/main' into feat/python-nodes-in-…
kvlonge Nov 14, 2026
a96db64
fix: keep Python selections runnable on workers and require checked n…
kvlonge Nov 14, 2026
879f931
fix: refuse selecting a Python check on a source no loader writes
kvlonge Nov 14, 2026
059f8cd
refactor: share upstream result reads between loader and node contexts
kvlonge Nov 14, 2026
e0c01ba
feat!: order job groups by lineage only and skip checks under --no-au…
kvlonge Nov 14, 2026
62a2241
docs: list orchestration/ in the Project Python table
kvlonge Nov 14, 2026
c6d7661
feat: apply max_description_lines to Python and orchestration descrip…
kvlonge Nov 14, 2026
b5d8823
Merge remote-tracking branch 'origin/main' into feat/python-nodes-in-…
kvlonge Nov 14, 2026
20956f1
Merge branch 'feat/python-nodes-in-snapshot' into feat/orchestration-…
kvlonge Nov 14, 2026
1e3e9e8
fix: keep orchestration fixtures and description limits consistent wi…
kvlonge Nov 14, 2026
66f2d7d
test: keep the rerun wait-boundary case transitive under lineage-only…
kvlonge Nov 14, 2026
c949c54
refactor: report P010 and P027 from one description check
kvlonge Nov 14, 2026
cc210da
chore: regenerate the control client for lineage-only group waits
kvlonge Nov 14, 2026
eed4c55
refactor: route calendar descriptions through the native host and dro…
kvlonge Nov 14, 2026
3b40dcc
test: expect the unknown-argument error for JobGroup after
kvlonge Nov 14, 2026
797bee7
feat: read TOML jobs and job groups and check orchestration layout wi…
kvlonge Nov 14, 2026
4532fe1
feat: check orchestration declarations at compile as D017 and share t…
kvlonge Nov 14, 2026
e85c29a
feat!: publish TOML jobs and groups, and declare calendars and sensor…
kvlonge Nov 14, 2026
d38d482
feat: read orchestration/renames.toml, check it at compile and publis…
kvlonge Nov 14, 2026
cf178b5
feat: migrate Python jobs, job groups and schedules to TOML
kvlonge Nov 14, 2026
56fb62a
feat: add sqb migrate orchestration and point old orchestration layou…
kvlonge Nov 14, 2026
180fa61
revert: drop orchestration migration tooling and renames
kvlonge Nov 14, 2026
f140ba0
feat: rewrite TOML job selectors when models are renamed or moved
kvlonge Nov 14, 2026
ee5a026
feat!: declare jobs, job groups and schedules in TOML
kvlonge Nov 14, 2026
cb8c98e
Merge remote-tracking branch 'origin/main' into feat/toml-orchestration
kvlonge Nov 14, 2026
6b38c83
fix: check TOML job values at compile and keep sensors, calendars and…
kvlonge Nov 14, 2026
fb5504b
Merge remote-tracking branch 'origin/main' into feat/toml-orchestration
kvlonge Nov 14, 2026
ffb8a24
fix: reject empty selector parts at compile and report calendar time …
kvlonge Nov 14, 2026
8a2e574
refactor: share the relative-path read error between discovery stages…
kvlonge Nov 14, 2026
4d24002
style: format the orchestration value checks
kvlonge Nov 14, 2026
2aa8e1a
refactor: bring the orchestration readers and their tests in line wit…
kvlonge Nov 14, 2026
c92c406
refactor: read job and job group files through one TOML reader
kvlonge Nov 14, 2026
557de01
test: cover the orchestration declaration error in the failure corpus
kvlonge Nov 14, 2026
f629221
test: record the compile output of a Python job module under orchestr…
kvlonge Nov 14, 2026
8472c30
Merge remote-tracking branch 'origin/main' into feat/toml-orchestration
kvlonge Nov 14, 2026
05fbb89
test: wait for the TOML job key in the ad-hoc load and variables test
kvlonge Nov 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
name = "adhoc_exports_job"
description = "Export orders on request."
select = "orders_export"
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
name = "finance_daily_job"
description = "Build revenue reports."
select = "int_orders fct_revenue rpt_pnl"
schedule = { cron = "0 2 * * *", timezone = "UTC" }
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Two scheduled jobs split the orders lineage and share int_orders; a third job has no trigger.
name = "staging_daily_job"
description = "Stage orders."
select = "stg_orders int_orders"
schedule = { cron = "0 2 * * *", timezone = "UTC" }

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Two scheduled jobs each own one staging model; customer_orders reads both, in crm_daily_job.
name = "crm_daily_job"
description = "Refresh customers."
select = "stg_customers customer_orders"
schedule = { cron = "0 2 * * *", timezone = "UTC" }
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
name = "sales_daily_job"
description = "Refresh sales."
select = "stg_orders customer_sales"
schedule = { cron = "0 2 * * *", timezone = "UTC" }
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
"warned": "from sqlbuild.checks import check\nfrom sqlbuild.refs import model\n@check(depends_on=model('orders'), description='Order totals are valid.')\ndef orders_valid(ctx):\n return ctx.warn(message='Review order totals.')\n",
"failed": "from sqlbuild.checks import check\nfrom sqlbuild.refs import model\n@check(depends_on=model('orders'), description='Order totals are valid.')\ndef orders_valid(ctx):\n return ctx.fail(message='Order totals are invalid.')\n",
"cancelled": "import signal\nfrom sqlbuild.checks import check\nfrom sqlbuild.refs import model\n@check(depends_on=model('orders'), description='Heartbeat cancellation interrupts the driver without SIGTERM.')\ndef orders_valid(ctx):\n signal.signal(signal.SIGTERM, signal.SIG_IGN)\n ctx.query('WITH RECURSIVE pending(i) AS ((SELECT i FROM range(10000000000) AS seed(i) LIMIT 1) UNION ALL SELECT i FROM pending) SELECT sum(i) FROM pending')\n return ctx.pass_()\n",
"on_failure": "from sqlbuild.orchestration import NodeEventKind, job, node_event, schedule, sensor\nannual_orders = job('annual_orders', select='orders', description='Build orders.', schedule=schedule(cron='0 0 * * *', timezone='UTC', starts_at='2000-01-01T00:00:00Z'))\nrefresh_inventory = job('refresh_inventory', select='inventory', description='Refresh inventory.')\nfailed_orders = sensor('failed_orders', description='React to an actual orders check failure.', when=node_event(select='check:orders_valid', kinds=[NodeEventKind.FAILED]), run=refresh_inventory, minimum_interval_seconds=1)\n",
"on_failure_job": "name = \"annual_orders_job\"\ndescription = \"Build orders.\"\nselect = \"orders\"\nschedule = { cron = \"0 0 * * *\", timezone = \"UTC\", starts_at = \"2000-01-01T00:00:00Z\" }\n",
"on_failure_destination": "name = \"refresh_inventory_job\"\ndescription = \"Refresh inventory.\"\nselect = \"inventory\"\n",
"on_failure_sensor": "from sqlbuild.orchestration import NodeEventKind, node_event, sensor\n\nfailed_orders = sensor(\n 'failed_orders_sensor',\n description='React to an actual orders check failure.',\n when=node_event(select='check:orders_valid', kinds=[NodeEventKind.FAILED]),\n run='refresh_inventory_job',\n minimum_interval_seconds=1,\n)\n",
"inventory": "MODEL (description 'Inventory after check failure.', materialized table);\nSELECT 59 AS amount;\n"
}
25 changes: 0 additions & 25 deletions benchmarks/duckshop/edge_cases/orchestration/calendar_orders.py

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
"""Upcoming fulfillment times from the provider, evaluated in the code location."""

from sqlbuild.orchestration import calendar


@calendar(
name="fulfillment_calendar",
description="Refresh orders at upcoming fulfillment times.",
horizon="8s",
)
def fulfillment_calendar(window, fulfillment):
# A provider method named `calendar` is not a second calendar declaration.
return fulfillment.calendar(window)
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Provider-backed fulfillment times evaluated in the code location, never by the scheduler.
name = "order_reporting_job"
description = "Build order reporting."
select = "orders"
schedule = { calendar = "fulfillment_calendar", timezone = "America/New_York" }

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# A sensor on new source data starts a job that builds only what changed, source data included.
name = "orders_refresh_job"
description = "Refresh orders when the source has new data."
select = "orders"

[settings]
changed = true
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
"""Start the changed-only refresh for each new source version."""

from sqlbuild.orchestration import sensor, source_new_data

on_source_orders = sensor(
"on_source_orders_sensor",
description="Refresh orders for each changed source version.",
when=source_new_data(select="source:raw_orders"),
run="orders_refresh_job",
minimum_interval_seconds=1,
)

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Negative fixture: mutually exclusive build flags must fail before publication.
name = "refresh_orders_job"
description = "Refresh orders."
select = "orders"

[settings]
load_sources = false
reload = true

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# A job asks for more memory than its worker may have and fewer CPUs than the launcher default.
name = "annual_orders_job"
description = "Build orders."
select = "orders"
schedule = { cron = "0 0 * * *", timezone = "UTC", starts_at = "2000-01-01T00:00:00Z" }

[resources]
memory = "2g"
cpus = 0.5
15 changes: 0 additions & 15 deletions benchmarks/duckshop/edge_cases/orchestration/custom_orders.py

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
name = "annual_orders_job"
description = "Build orders after source inspection."
select = "orders"
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
"""Polling callbacks return durable run keys and keep their cursor in the native transaction."""

from sqlbuild.orchestration import sensor


@sensor(
"poll_orders_sensor",
description="Poll fulfillment readiness.",
run="annual_orders_job",
minimum_interval_seconds=1,
)
def poll_orders(ctx, fulfillment):
def poll():
return fulfillment.poll(ctx)

return poll()

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Development defaults pause code-enabled triggers without changing their definitions.
name = "annual_orders_job"
description = "Build annual orders."
select = "+orders"
schedule = { cron = "0 0 1 1 *", timezone = "UTC", starts_at = "2099-01-01T00:00:00Z" }
3 changes: 0 additions & 3 deletions benchmarks/duckshop/edge_cases/orchestration/failed_import.py

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
name = "orders_job"
description = "Build orders."
select = "orders"
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
"""Negative fixture: a failed declaration import must fail every publication retry."""

from sqlbuild.orchestration import PlatformEventKind, platform_event, sensor

raise RuntimeError("broken declaration")

broken_orders = sensor(
"broken_orders_sensor",
description="Never declared: the module fails first.",
when=platform_event(kinds=[PlatformEventKind.HEARTBEAT]),
run="orders_job",
)
10 changes: 0 additions & 10 deletions benchmarks/duckshop/edge_cases/orchestration/invalid_settings.py

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Negative fixture: job settings must not override the frozen selection.
name = "refresh_orders_job"
description = "Refresh orders."
select = "orders"

[settings]
select = "customers"
14 changes: 0 additions & 14 deletions benchmarks/duckshop/edge_cases/orchestration/loaded_orders.py

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
name = "annual_orders_job"
description = "Build the marts layer and the sources it loads."
select = "tag:marts"
schedule = { cron = "0 0 * * *", timezone = "UTC", starts_at = "2000-01-01T00:00:00Z" }

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Keep a populated concurrency slot until recovered terminal publication commits.
name = "annual_orders_job"
description = "Build orders under a shared concurrency limit."
select = "orders"
concurrency_groups = ["orders_limit"]
schedule = { cron = "0 0 * * *", timezone = "UTC", starts_at = "2000-01-01T00:00:00Z" }

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# A job may not reuse another resource's name: jobs share the project's one resource namespace.
name = "orders_job"
description = "Build orders."
select = "orders"
7 changes: 0 additions & 7 deletions benchmarks/duckshop/edge_cases/orchestration/nested_groups.py

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
name = "daily_orders_job_group"
description = "Build daily orders."
jobs = ["orders_job"]
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# A group can contain jobs, but cannot contain another group.
name = "weekly_orders_job_group"
description = "Unsupported nested membership."
jobs = ["daily_orders_job_group"]
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
name = "orders_job"
description = "Build orders."
select = "orders"
12 changes: 0 additions & 12 deletions benchmarks/duckshop/edge_cases/orchestration/node_orders.py

This file was deleted.

Loading
Loading