Reference
FAQ
Scope, limits, and where datapact sits next to the tools and standards you already use.
Questions
Does it need a warehouse or a network?
No. datapact reads a contract and a data file from disk or from a string, checks one against the other, and writes a report. There is no connection string, no SQL, no driver, no upload, and no telemetry. It runs the same on a laptop, in a container, or in air-gapped CI.
What is an ODCS contract?
A contract in the Open Data Contract Standard format: a document that names a dataset and describes its schema and properties. datapact accepts it as YAML or JSON. The specification in the repository is the normative description of the subset datapact understands.
Which parts of an ODCS document does it read?
Two top-level fields, name and schema, and within each schema the properties. Every other ODCS field, such as servers, pricing, SLA, roles, or quality, is accepted and ignored rather than rejected. datapact implements only the part that can be checked from one contract and one data file with no external system.
Does it check referential integrity or relationships between datasets?
No. It checks one dataset against one contract. Foreign keys, joins, and relationships between datasets are out of scope, and there is no warehouse connection to resolve them against.
Can it express rules across several columns?
No. Each property is checked on its own. There are no expressions over multiple columns and no row-level formulas. A rule like total equals unit_price times item_count is not something datapact can check.
How is the CSV parsed?
According to RFC 4180. Files are read as UTF-8 with a leading byte-order mark stripped; fields are comma-separated; records end with CRLF, LF, or a lone CR; quoted fields may contain commas, line breaks, and doubled quotes. The first record is the header, and header names are matched to property names exactly and case-sensitively, independent of column order. Blank lines are skipped, ragged rows are padded or truncated, and no value is inferred — the contract's logicalType decides how a cell is read.
Can I suppress a finding?
There is no inline suppression pragma. To keep a report usable, datapact caps validation findings at 50 per rule code per run; when a rule exceeds that, the first 50 are kept and a DP-250 notice records how many were suppressed. The cap is applied independently to each validation rule code and never applies to lint findings or parse errors.
What do the exit codes mean?
0 when nothing is at or above --fail-on, 1 when at least one finding is, 2 for invalid usage or an input that could not be parsed (DP-PARSE-000), and 3 for an I/O error. A contract that cannot be read or understood is never reported as clean.
Limitations
What datapact is not
datapact is a static checker over one contract and one CSV. It is not a warehouse client, it does not resolve relationships between datasets, and it cannot express a rule that spans several columns or rows. It does not profile your data or infer a schema from it, and it is not a full ODCS implementation: only name and schema are read. Everything else in an ODCS document is accepted and ignored. It is not a service, so there is no upload, no account, and no network call at runtime.
CSV parsing notes
logicalType decides how each value is interpreted.How it relates to ODCS
schema array and its properties, because that is the part that can be enforced from a single contract and a single data file with no external system.