Release notes
For everyone
Release notes
What changed in each release, for the people who use and run the factory. The format follows Keep a Changelog and the versions follow semantic versioning: what MAJOR, MINOR and PATCH mean for this application is in the documentation, under Versioning. The commit history has the reasons; this file has the outcomes.
Add an entry under Unreleased in the same pull request as the change.
python -m dpf release major|minor|patch turns it into a version.
Unreleased
0.2.0 — 2026-10-19
Changed
- One data contract, from the first step to the last. The Data Demand Document is
gone as a separate document: Source writes the product's data contract v0.1, one
section per source system, each signed by that system's owner. Refine agrees it as
0.2, 0.3 and so on, and the first promotion to production publishes it as 1.0.0 —
same hash, with the 0.x it was agreed as kept in the log (
contract.published). Internal keys — thedemandstep, thedemandstable,demand.*events and permissions — keep their names, so the audit history and the API do not move.
0.1.1 — 2026-10-04
Fixed
- A section's overview answers at its folder:
/docs/architecture/rather than a 404.
0.1.0 — 2026-10-04
The first versioned release. Everything the factory does today, in one list.
Added
- Three phases and three gates. Source, Refine and Deliver, nine steps, each phase
ended by a decision of a named person outside the delivery team: approval to load,
the agreement, and the integration-test sign-off. The process is a file,
dpf/workflow.yaml, validated at start-up. - The data agreement as the source of truth. The SQL, the checks and the documentation are derived from it, byte-identically. Every column traces to the requirement that asked for it; a criterion nothing verifies is reported as uncovered.
- Agents that draft and people who decide. Requirements, the Data Vault model, the
data agreement and the Data Demand Documents can be drafted by an agent and accepted
by a person, or written by hand.
DPF_LLM_DATAdecides what reaches the model. - Build, release, approve, promote and roll back, on DuckDB or on Databricks SQL, with a read-only mode for a SELECT-only token.
- The record. Every document versioned and exportable as markdown, an append-only audit log, the evidence tabs (documents, releases, quality, traceability, changes, cycle time), drift flags, and an ontology over all of it.
- Identity. Doors for a laptop, a host site's sign-in, an unlisted link, both, or Microsoft Entra ID with groups mapped to roles; registered accounts by email with one-time invite links; four-eyes checks on the signed-in person, not the role.
- Integrations. Unity Catalog and Informatica catalogues, ServiceNow access requests, the build plan pushed to Azure DevOps or Jira, and the agreement's checks as Databricks Delta constraints, DLT expectations or Lakehouse Monitoring.
- Headless reading. A read-only API at
/api/v1with service tokens, OpenAPI 3.1, the audit log as a cursor feed, and the MCP tools on stdio and over HTTP. - Documentation in the application, public, versioned with it, with generated reference pages and a check that fails the build when code changes and its page does not.
- An architecture section in arc42's order at the C4 model's levels — context,
containers, components, the record, runtime, deployment, crosscutting concepts,
quality and risks — with drawings rendered in the application's own style. The
process drawing is generated from
dpf/workflow.yaml, and the layers drawing is held to the real imports by a test. - Versioning.
VERSION, this changelog andpython -m dpf release.
Changed
python -m dpf exportwrites toexports/<product>by default;docs/is the documentation.deploy/nginx-location.confno longer setsCache-Control: the application does, so a fingerprinted stylesheet or script is cached again.
Security
- Unity Catalog lookups refuse a schema or table name that is not a plain identifier.
- Every redirect target is checked by one function.
- A proposal decision is
acceptedorrejectedand nothing else. DPF_LLM_DATA=offmakes the agents unavailable, as documented.