Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion .github/workflows/integration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ jobs:
id: workspace
run: uv sync --all-packages --dev --locked
- name: Build MinIO from checked-in sources
run: docker build --tag ghcr.io/phlohouse/phlo-minio:0.17.0 packages/phlo-minio/src/phlo_minio
run: docker build --tag ghcr.io/phlohouse/phlo-minio:0.18.0 packages/phlo-minio/src/phlo_minio
- name: Run named behavioral contracts
if: ${{ !cancelled() && steps.workspace.outcome == 'success' }}
run: uv run --locked python scripts/run_integration.py
Expand Down
128 changes: 128 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,133 @@
## [phlo 0.17.0 + 38 packages] - 2026-09-22

## [phlo 0.18.0 + 38 packages] - 2026-10-08

### Added
- phlo: add phase-1 v1 identity, environments, services and events (#1040)
- phlo: add durable incident management endpoints (#1042)
- phlo: add phase-3 asset overview endpoints (#1044)
- phlo: add phase 4 jobs and runs API (#1045)
- phlo: add phase 5 query workspace (#1046)
- phlo: add phase 6 administration and audit (#1047)
- phlo: add branch workflows for unified API (#1048)
- phlo: finish Observatory cutover and signed staging promotion (#1049)
- phlo: add OIDC authentication with oauth2-proxy (#1050)
- phlo: replace legacy UI in Phlo (#1051)
- phlo: separate merge, maintenance and immutable release contracts (#1068)
- phlo: publish complete local file export sets (#1074)
- phlo: add shared service-file overrides across providers (#1076)
- phlo: enforce explicit write schema policies (#1075)
- phlo: replay-safe immutable history ingestion (#1077)
- phlo: build Phlo-owned images for GHCR publication (#1080)
- phlo-alerting: replace legacy UI in Phlo (#1051)
- phlo-api: add phase-1 v1 identity, environments, services and events (#1040)
- phlo-api: add durable incident management endpoints (#1042)
- phlo-api: add phase-3 asset overview endpoints (#1044)
- phlo-api: add phase 4 jobs and runs API (#1045)
- phlo-api: add phase 5 query workspace (#1046)
- phlo-api: add phase 6 administration and audit (#1047)
- phlo-api: add branch workflows for unified API (#1048)
- phlo-api: finish Observatory cutover and signed staging promotion (#1049)
- phlo-api: add OIDC authentication with oauth2-proxy (#1050)
- phlo-api: replace legacy UI in Phlo (#1051)
- phlo-api: build Phlo-owned images for GHCR publication (#1080)
- phlo-dagster: add durable incident management endpoints (#1042)
- phlo-dagster: add phase-3 asset overview endpoints (#1044)
- phlo-dagster: add OIDC authentication with oauth2-proxy (#1050)
- phlo-dagster: replace legacy UI in Phlo (#1051)
- phlo-dagster: add shared service-file overrides across providers (#1076)
- phlo-dbt: replace legacy UI in Phlo (#1051)
- phlo-delta: build Phlo-owned images for GHCR publication (#1080)
- phlo-dlt: replace legacy UI in Phlo (#1051)
- phlo-dlt: enforce explicit write schema policies (#1075)
- phlo-dlt: replay-safe immutable history ingestion (#1077)
- phlo-grafana: separate merge, maintenance and immutable release contracts (#1068)
- phlo-iceberg: replace legacy UI in Phlo (#1051)
- phlo-iceberg: separate merge, maintenance and immutable release contracts (#1068)
- phlo-iceberg: enforce explicit write schema policies (#1075)
- phlo-iceberg: replay-safe immutable history ingestion (#1077)
- phlo-kafka: enforce explicit write schema policies (#1075)
- phlo-minio: build Phlo-owned images for GHCR publication (#1080)
- phlo-nessie: finish Observatory cutover and signed staging promotion (#1049)
- phlo-nessie: replace legacy UI in Phlo (#1051)
- phlo-oauth2-proxy: add OIDC authentication with oauth2-proxy (#1050)
- phlo-observatory: finish Observatory cutover and signed staging promotion (#1049)
- phlo-observatory: replace legacy UI in Phlo (#1051)
- phlo-polaris: replace legacy UI in Phlo (#1051)
- phlo-postgres: add phase 6 administration and audit (#1047)
- phlo-trino: add phase-3 asset overview endpoints (#1044)
- phlo-trino: add phase 5 query workspace (#1046)
- phlo-trino: finish Observatory cutover and signed staging promotion (#1049)
- phlo-trino: replace legacy UI in Phlo (#1051)

### Changed
- phlo: remove unmounted Observatory routers and bound Trino queries (#1034)
- phlo: reduce core service and evidence complexity (#1056)
- phlo: reduce complexity in small Python functions (#1057)
- phlo: consolidate validation into four check buckets (#1072)
- phlo: reduce provider package complexity (#1079)
- phlo: defer command imports and cache plugin discovery (#1081)
- phlo-api: remove unmounted Observatory routers and bound Trino queries (#1034)
- phlo-api: reduce complexity in small Python functions (#1057)
- phlo-api: reduce provider package complexity (#1079)
- phlo-dagster: reduce complexity in small Python functions (#1057)
- phlo-dagster: reduce provider package complexity (#1079)
- phlo-dbt: reduce complexity in small Python functions (#1057)
- phlo-dbt: reduce provider package complexity (#1079)
- phlo-iceberg: reduce provider package complexity (#1079)
- phlo-mcp: defer command imports and cache plugin discovery (#1081)
- phlo-nessie: reduce provider package complexity (#1079)
- phlo-openmetadata: reduce provider package complexity (#1079)
- phlo-pandera: reduce complexity in small Python functions (#1057)
- phlo-polaris: reduce provider package complexity (#1079)

### Fixed
- phlo: audit frozen Python locks (#969)
- phlo: enable verified release recovery (#972)
- phlo: retry transient PyPI metadata failures (#973)
- phlo: regenerate support docs in release PRs (#974)
- phlo: keep transformer workspace clean (#975)
- phlo: resolve nightly integration test failures (#978)
- phlo: report route failures as typed HTTP errors, not 200 error dicts (#1024)
- phlo: record actor, reason and time on break-glass deny/revoke (#1026)
- phlo: replace forked Loki regex worker with a spawned interpreter (#1028)
- phlo: default Observatory auth on in production-like environments (#1025)
- phlo: enforce scoped authorization on every phlo-api mutation (#1023)
- phlo: bind generated ports to loopback and reject exposed MCP (#1031)
- phlo: redact credentials from logged URLs (#1041)
- phlo: restore release candidate evidence on main (#1043)
- phlo: repair post-merge release checks (#1052)
- phlo: restore schedule and automation host tools (#1054)
- phlo: restore signed review capability lookup (#1060)
- phlo: improve keyboard and screen reader accessibility (#1058)
- phlo: restore clean dependency audits on main (#1063)
- phlo: patch writer sharp vulnerability with scoped override (#1069)
- phlo: restrict image publication to explicit release staging (#1070)
- phlo: reuse authenticated queue validation on main automatically (#1071)
- phlo: publish merge deletes and append atomically (#1073)
- phlo: remove required-reviewer publication gate (#1083)
- phlo-api: report route failures as typed HTTP errors, not 200 error dicts (#1024)
- phlo-api: replace forked Loki regex worker with a spawned interpreter (#1028)
- phlo-api: enforce scoped authorization on every phlo-api mutation (#1023)
- phlo-api: bind generated ports to loopback and reject exposed MCP (#1031)
- phlo-api: repair post-merge release checks (#1052)
- phlo-dagster: report route failures as typed HTTP errors, not 200 error dicts (#1024)
- phlo-dagster: repair post-merge release checks (#1052)
- phlo-dlt: publish merge deletes and append atomically (#1073)
- phlo-iceberg: restore release candidate evidence on main (#1043)
- phlo-iceberg: publish merge deletes and append atomically (#1073)
- phlo-mcp: report route failures as typed HTTP errors, not 200 error dicts (#1024)
- phlo-mcp: bind generated ports to loopback and reject exposed MCP (#1031)
- phlo-minio: resolve nightly integration test failures (#978)
- phlo-observatory: report route failures as typed HTTP errors, not 200 error dicts (#1024)
- phlo-observatory: default Observatory auth on in production-like environments (#1025)
- phlo-observatory: improve keyboard and screen reader accessibility (#1058)
- phlo-postgres: report route failures as typed HTTP errors, not 200 error dicts (#1024)

### Contributors
Thanks to our contributors for this release:
- @iamgp (166 commits)

### Added
- phlo: use upstream Prometheus and Trino (#687)
- phlo: cede vendor images upstream (#688)
Expand Down
2 changes: 1 addition & 1 deletion docs/reference/generated/support-matrix.json
Original file line number Diff line number Diff line change
Expand Up @@ -1190,7 +1190,7 @@
"release": {
"maturity": "alpha",
"production_ready": false,
"version": "0.17.0"
"version": "0.18.0"
},
"schema_version": 1
}
2 changes: 1 addition & 1 deletion docs/reference/support-matrix.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

> Generated from `registry/support/v1.json` by `scripts/generate_reference_docs.py`. Do not edit this page directly.

Release `0.17.0` has `alpha` maturity. Production readiness is `false`.
Release `0.18.0` has `alpha` maturity. Production readiness is `false`.

A target profile states the intended support boundary. Maturity and readiness state what is available now. Gates and blockers state what must pass before release.

Expand Down
14 changes: 7 additions & 7 deletions examples/lakehouses/clickhouse-ops/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ name = "phlo-clickhouse-ops-example"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = [
"phlo[defaults]==0.17.0",
"phlo-dagster==0.17.0",
"phlo-dlt==0.16.0",
"phlo-dbt==0.16.0",
"phlo-sling==0.16.0",
"phlo-clickhouse==0.16.0",
"phlo[defaults]==0.18.0",
"phlo-dagster==0.18.0",
"phlo-dlt==0.17.0",
"phlo-dbt==0.17.0",
"phlo-sling==0.16.1",
"phlo-clickhouse==0.16.1",
"dbt-clickhouse>=1.10,<1.11",
"dlt[filesystem]>=1.20,<2",
"pandas>=2.3,<3.1",
Expand All @@ -23,7 +23,7 @@ dependencies = [
[dependency-groups]
dev = [
"duckdb>=1.4,<1.6",
"phlo-pandera==0.16.0",
"phlo-pandera==0.16.1",
"pytest",
"ruff",
]
Expand Down
16 changes: 8 additions & 8 deletions examples/lakehouses/customer360/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@ name = "phlo-customer360-example"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = [
"phlo[defaults]==0.17.0",
"phlo-dagster==0.17.0",
"phlo-dlt==0.16.0",
"phlo-dbt==0.16.0",
"phlo-iceberg==0.16.0",
"phlo-trino==0.16.0",
"phlo-sling==0.16.0",
"phlo[defaults]==0.18.0",
"phlo-dagster==0.18.0",
"phlo-dlt==0.17.0",
"phlo-dbt==0.17.0",
"phlo-iceberg==0.17.0",
"phlo-trino==0.17.0",
"phlo-sling==0.16.1",
"dlt[filesystem]>=1.20,<2",
"pandas>=2.3,<3.1",
"pyarrow>=21,<26",
Expand All @@ -24,7 +24,7 @@ dependencies = [
dev = [
"dbt-trino>=1.10,<1.12",
"duckdb>=1.4,<1.6",
"phlo-pandera==0.16.0",
"phlo-pandera==0.16.1",
"pytest",
"ruff",
]
Expand Down
18 changes: 9 additions & 9 deletions examples/lakehouses/delta-portability/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@ name = "phlo-delta-portability-example"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = [
"phlo[defaults]==0.17.0",
"phlo-dagster==0.17.0",
"phlo-delta==0.16.0",
"phlo-dlt==0.16.0",
"phlo-dbt==0.16.0",
"phlo-iceberg==0.16.0",
"phlo-trino==0.16.0",
"phlo-sling==0.16.0",
"phlo[defaults]==0.18.0",
"phlo-dagster==0.18.0",
"phlo-delta==0.17.0",
"phlo-dlt==0.17.0",
"phlo-dbt==0.17.0",
"phlo-iceberg==0.17.0",
"phlo-trino==0.17.0",
"phlo-sling==0.16.1",
"dlt[filesystem]>=1.20,<2",
"pandas>=2.3,<3.1",
"pyarrow>=21,<26",
Expand All @@ -24,7 +24,7 @@ dependencies = [
dev = [
"dbt-trino>=1.10,<1.12",
"duckdb>=1.4,<1.6",
"phlo-pandera==0.16.0",
"phlo-pandera==0.16.1",
"pytest",
"ruff",
]
Expand Down
10 changes: 5 additions & 5 deletions examples/lakehouses/ecommerce-replication/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ name = "phlo-ecommerce-replication-example"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = [
"phlo[defaults]==0.17.0",
"phlo-dagster==0.17.0",
"phlo-dbt==0.16.0",
"phlo-sling==0.16.0",
"phlo[defaults]==0.18.0",
"phlo-dagster==0.18.0",
"phlo-dbt==0.17.0",
"phlo-sling==0.16.1",
"psycopg2-binary>=2.9,<3.1",
"pandas>=2.3,<3.1",
]
Expand All @@ -19,7 +19,7 @@ dependencies = [
dev = [
"dbt-duckdb>=1.10,<1.12",
"duckdb>=1.4,<1.6",
"phlo-pandera==0.16.0",
"phlo-pandera==0.16.1",
"pytest",
"ruff",
]
Expand Down
10 changes: 5 additions & 5 deletions examples/lakehouses/federated-domains/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ name = "phlo-federated-domains-example"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = [
"phlo[defaults]==0.17.0",
"phlo-dagster==0.17.0",
"phlo-dlt==0.16.0",
"phlo-dbt==0.16.0",
"phlo[defaults]==0.18.0",
"phlo-dagster==0.18.0",
"phlo-dlt==0.17.0",
"phlo-dbt==0.17.0",
"dlt[filesystem]>=1.20,<2",
"pandas>=2.3,<3.1",
"pyarrow>=21,<26",
Expand All @@ -20,7 +20,7 @@ dependencies = [
dev = [
"dbt-trino>=1.10,<1.12",
"duckdb>=1.4,<1.6",
"phlo-pandera==0.16.0",
"phlo-pandera==0.16.1",
"pytest",
"ruff",
]
Expand Down
14 changes: 7 additions & 7 deletions examples/lakehouses/healthcare-claims/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ name = "phlo-healthcare-claims-example"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = [
"phlo[defaults]==0.17.0",
"phlo-dagster==0.17.0",
"phlo-dlt==0.16.0",
"phlo-dbt==0.16.0",
"phlo-iceberg==0.16.0",
"phlo-trino==0.16.0",
"phlo[defaults]==0.18.0",
"phlo-dagster==0.18.0",
"phlo-dlt==0.17.0",
"phlo-dbt==0.17.0",
"phlo-iceberg==0.17.0",
"phlo-trino==0.17.0",
"dlt[filesystem]>=1.20,<2",
"pandas>=2.3,<3.1",
"pyarrow>=21,<26",
Expand All @@ -22,7 +22,7 @@ dependencies = [
dev = [
"dbt-trino>=1.10,<1.12",
"duckdb>=1.4,<1.6",
"phlo-pandera==0.16.0",
"phlo-pandera==0.16.1",
"pytest",
"ruff",
]
Expand Down
14 changes: 7 additions & 7 deletions examples/lakehouses/iot-telemetry/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ name = "phlo-iot-telemetry-example"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = [
"phlo[defaults]==0.17.0",
"phlo-dagster==0.17.0",
"phlo-dlt==0.16.0",
"phlo-dbt==0.16.0",
"phlo-iceberg==0.16.0",
"phlo-trino==0.16.0",
"phlo[defaults]==0.18.0",
"phlo-dagster==0.18.0",
"phlo-dlt==0.17.0",
"phlo-dbt==0.17.0",
"phlo-iceberg==0.17.0",
"phlo-trino==0.17.0",
"dlt[filesystem]>=1.20,<2",
"pandas>=2.3,<3.1",
"pyarrow>=21,<26",
Expand All @@ -22,7 +22,7 @@ dependencies = [
dev = [
"dbt-trino>=1.10,<1.12",
"duckdb>=1.4,<1.6",
"phlo-pandera==0.16.0",
"phlo-pandera==0.16.1",
"pytest",
"ruff",
]
Expand Down
16 changes: 8 additions & 8 deletions examples/lakehouses/logistics-control-tower/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,24 +7,24 @@ name = "phlo-logistics-control-tower-example"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = [
"phlo[defaults]==0.17.0",
"phlo-dagster==0.17.0",
"phlo-dlt==0.16.0",
"phlo-dbt==0.16.0",
"phlo-iceberg==0.16.0",
"phlo-trino==0.16.0",
"phlo[defaults]==0.18.0",
"phlo-dagster==0.18.0",
"phlo-dlt==0.17.0",
"phlo-dbt==0.17.0",
"phlo-iceberg==0.17.0",
"phlo-trino==0.17.0",
"dlt[filesystem]>=1.20,<2",
"pandas>=2.3,<3.1",
"pyarrow>=21,<26",
"phlo-sling==0.16.0",
"phlo-sling==0.16.1",
"psycopg2-binary>=2.9,<3.1",
]

[dependency-groups]
dev = [
"dbt-trino>=1.10,<1.12",
"duckdb>=1.4,<1.6",
"phlo-pandera==0.16.0",
"phlo-pandera==0.16.1",
"pytest",
"ruff",
]
Expand Down
Loading
Loading