SIDQ صدق

What Sidq reads, what it never decides, and what it stores.

Every limit below is a limit on the claim, not a disclaimer about the software. They live here rather than on the console so the console can be used in seconds — and they are asserted by the test suite, so removing one fails the build.

Data privacy

Catalog audits read metadata only — schemas, lineage, tags, owners — and receipt writes are explicit opt-ins into your catalog. The separate sidq claims attestation runs bounded read-only SQL inside the live source, returns counts plus at most ten violating samples, and never sends them outside your infrastructure. Query results never enter a model; the optional reader sees documentation text only. Self-hosted, Apache-2.0.

Model boundary

No model can block or grant permission. The deterministic rule ships in the blocking path; the optional documentation reader may extend WARN coverage after rules abstain, and it can never turn PASS into BLOCK. It loads a pinned revision and reports its head fingerprint and threshold, so changes are attributable. Policy changes rotate the hash and invalidate old receipts explicitly.

Shared current state, not a ledger

With explicit optional receipt writes, DataHub holds the latest values — not append-only history, and no exactly-once coordination. sidq audit --resume re-checks that shared current state before spending its budget: a valid receipt can avoid repeat work; concurrent workers may still duplicate an examination. Delivery across workers is at-least-once, never exactly-once.

Reproducibility

A fixture replay is byte-identical because every input is pinned: the committed diff, the graph fixture, the policy, the code revision, and the canonical serialization. A live decision is not — policy_hash and commit_sha identify the policy and the code, not the graph they read. Missing or changed context fails closed; it never becomes a quiet pass.

What the checks cannot do

schema_drift needs a live source to compare against, and lineage_rot needs the model SQL. Where either is absent the result is an abstention, named as such — a complete-lineage regression suite and a hostile-catalog suite guard the reader against malformed, misdirected, and invented-verdict payloads. That suite earned its place immediately: doc-rot detection matched column references with an ASCII-only pattern, so on an Arabic, Japanese or Cyrillic catalog the check ran, found nothing, and the silence read as health — the exact failure this project exists to refuse. It is Unicode-aware now.

Evidence

Fixture evidence commit: 5addb75 · canonical verdict: verdict.json · audit evidence: report.json · full claims matrix: CLAIMS-MATRIX.md · live catalog: datahub.mlki.app ↗

Upstream contributions

Sidq’s packaging report, datahub#19017 ↗, named the missing package_data entry behind DataHub’s datahub datapack FileNotFoundError on 9 Aug. A maintainer closed it on 11 Aug as superseded by datahub#19038 ↗ — the same two-line change — which merged. The bug is fixed upstream; the merged commit is not ours. datahub-skills#81 ↗, the datahub-verify skill, is open and not merged.