Principles¶
These rules are release gates. Reviewers reject changes that break them, and
several are checked by CI. They come from
AGENTS.md,
which humans and AI coding agents both follow.
1. Conservative by default¶
When evidence is missing or uncertain, ODS takes the safer action. It builds rather than skips, denies rather than allows, and marks a result inferred rather than presenting it as fact. It never silently reuses stale results, and never silently allows a destructive action.
In practice: a model ODS can't analyze is always treated as affected by a change.
A relationship guessed from column names is labelled inferred and appears only when
you ask for guesses.
2. Explainable¶
Every planner decision and every finding carries a reason chain and evidence, which can be rendered as human text and as JSON. If ODS says a model must run, it says which changed column reaches it and how.
3. Provider-neutral core¶
The core and the modules never branch on a vendor's name. Differences between
warehouses and tools are expressed as capabilities, and planners always end in a
conservative fallback. Vendor-specific code lives in providers/, and CI rejects
vendor names in core code.
4. Canonical state is only replaced on success¶
A failed or partial run never overwrites the last successful state.
5. An ERD is not lineage¶
Entity relationships (keys and references) and data lineage (which columns feed which) are separate domain types. A dependency edge in the DAG is not a primary key / foreign key relationship.
6. Presentation is separate from logic¶
Commands produce view models. Rendering (styled text, plain text, JSON) happens only at the edge, so every command has machine-readable output.
7. Interoperability through public formats¶
ODS works with other tools through their public artifact formats, and is built on open-source code used under its licence. It doesn't include or link to proprietary code or binaries. See Legal and trademarks.
8. Secrets are referenced, never stored¶
Configuration only accepts references to credentials ({ secret = "env:NAME" }). No
code path writes a resolved secret into configuration, state, events or logs.
9. Local and private by default¶
Today's commands read local files. They make no outbound network connections and
collect no telemetry. (ods serve accepts HTTP connections, on loopback by default.)
Planned warehouse features will connect only when you configure them. The MCP server's
tools are read-only.