Version
Dino is a local-first audit engine that produces sealed proofs, export envelopes, and a universal proof index for your dashboards.
pip install "git+https://github.com/DinoDevCli/dino.git@v0.3.2"
dino --help · dino proof run --help
v0.3.2 · Early Access
You do not know what differs. Drift is invisible: no sealed artifacts, no machine-readable delta.
CI cannot decide if a run changed. Audits stay manual and inconsistent.
Dino seals each run into a proof bundle (capsule + scan + hash), exports the bundle (Path / HTTP / S3), builds a proof index (proof_index.json), and compares two proofs deterministically. The verdict is changed: true/false.
pipeline → seal → export → index → compare → dashboard
All proof bundles and indexes are deterministic and reproducible (content-addressed).
proof.json
capsule + scan + hash
Path / HTTP / S3
export.v1 envelope
proof_index.json
metadata · metrics · layout
changed: true
pipeline_version_diff
Dashboards consume Dino's artifacts (proof_index.json, compare.json) via Path, HTTP, or S3.
Superset, Airflow, MLflow, or your own UI can render drift, verdicts, and metrics.
Dino outputs the data — you choose the visualization. Starter kit: examples/superset/drift_dashboard.yaml.
We audit a fraud-score pipeline. Two runs — v1 and v2. Dino seals both, exports them, builds a proof index, and compares them. The walkthrough shows the exact diff.
Open in GitHub CodespacesClones the repo, installs Python and Dino, and opens a terminal. Then: cd tests/simulation && make demo
dino proof run \
--command "python pipeline/run.py --seed seed-42" \
--scan ./pipeline \
--pipeline fraud_score_v1 \
--export ./archiveproof.json
{
"audit": {
"reasons": [
"capsule_sealed",
"scan_clean",
"map_skipped"
],
"summary": "Capsule sealed; one or more optional parts were skipped.",
"verdict": "PROOF_PARTIAL"
},
"parts": {
"capsule_replay_ok": true,
"drift_bucket": "aligned",
"scan_ok": true
},
"schema": "dino.proof.bundle.v1",
"status": "partial"
}dino proof run \
--command "python pipeline/run.py --seed seed-123" \
--scan ./pipeline \
--pipeline fraud_score_v2 \
--export ./archiveproof.json
{
"audit": {
"reasons": [
"capsule_sealed",
"scan_clean",
"map_skipped"
],
"summary": "Capsule sealed; one or more optional parts were skipped.",
"verdict": "PROOF_PARTIAL"
},
"parts": {
"capsule_replay_ok": true,
"drift_bucket": "aligned",
"scan_ok": true
},
"schema": "dino.proof.bundle.v1",
"status": "partial"
}proof_index.json
{
"pipelines": [
"fraud_score_v1",
"fraud_score_v2"
],
"proof_count": 2,
"schema": "dino.proof.index.v1"
}dino proof index compare ./archive <hash_v1> <hash_v2>compare.json
{
"changed": true,
"drift_delta": {
"from": "none",
"to": "none"
},
"pipeline_version_diff": {
"from": "fraud_score_v1",
"to": "fraud_score_v2"
},
"schema": "dino.proof.index.compare.v1",
"verdict_diff": {
"from": "PROOF_PARTIAL",
"to": "PROOF_PARTIAL"
}
}dino proof run --command "echo ok" --scan ./does_not_existDino refuses to pass a run with missing scan roots. For local iteration only: dino --dev …
scan.json
{
"ok": false,
"files_scanned": 0,
"findings": [{
"rule": "EMPTY_SCAN_ROOTS",
"detail": "no .py files under scan roots",
"severity": "FAIL"
}]
}Shipped: dino --dev relaxes EMPTY_SCAN_ROOTS for local iteration. Production proofs stay fail-closed. CLI --help lists Optional features (Proof Pack).
All demo artifacts come from tests/simulation/golden in the GitHub repository.
Email your team name to dinodevcli@gmail.com.
Engine only — dashboards are external.
Dino is MIT-licensed.
The core engine is free.
Advanced audit features (Proof Pack) require a license.
After Early Access, Proof Pack will be available as a one-time purchase per seat or team.
No subscriptions. No cloud fees.