dpone ops operational controls¶
dpone ops is the self-service operational toolbox for local, CI, staging, and
production-like runs. It is not a separate runtime mode. The same commands are
safe to use before a local smoke test, in manual certification, or during an
incident review.
Command map¶
| Capability | Command | Purpose |
|---|---|---|
| Artifact index | dpone ops artifact-index |
Index .dpone/ and test_artifacts/ ops artifacts for GitHub Pages and CI. |
| Run registry | dpone ops run-registry |
Record dpone run results and attached evidence as immutable checksumed run entries. |
| OpenLineage export | dpone ops lineage-export |
Export a run registry entry as an OpenLineage-compatible event. |
| dbt lineage | dpone ops dbt-lineage |
Export dbt artifacts as graph and OpenLineage-compatible transformation lineage evidence. |
| Native certification harness | dpone ops certification-run |
Run selected source -> sink matrix contracts and write evidence artifacts. |
| Certification suite | dpone ops certification-suite |
Aggregate matrix, benchmark, lineage, dbt, strategy, and evidence artifacts into one release gate. |
| Connector certification pack | dpone ops certification-pack |
Aggregate certification, observability, reconciliation, staging, and lineage artifacts into one connector certification 2.0 pack. |
| Live certification plan | dpone ops live-certification-plan |
Plan local-live, real-local, or vendor-live certification with services, commands, artifacts, and credential boundaries. |
| Benchmark and SLO gate | dpone ops benchmark-slo-gate |
Evaluate performance baseline regression and operational SLO objectives as one release evidence artifact. |
| Performance certification | dpone ops performance-certification |
Build release-grade throughput, duration, memory, and failure-rate evidence. |
| Live state/reconciliation | dpone ops live-state-reconciliation |
Aggregate state backend, XMin/Kafka/CDC state, and physical-delete reconciliation evidence. |
| Release evidence pack | dpone ops release-evidence-pack |
Build the final go/no-go evidence pack for minor and major releases. |
| Pre-release checklist | dpone ops pre-release-checklist |
Record CLI, run, Python API, lineage, matrix, contracts, docs, and package checks before minor/major release. |
| Runtime recovery plan | dpone ops recovery-plan |
Detect failed/resumable jobs, active locks, and uncommitted load packages. |
| Reconciliation 2.0 | dpone ops reconcile |
Compute source-target counts, checksums, delete reconciliation, and repair actions. |
| Observability pack | dpone ops observability-pack |
Generate Grafana dashboard and Prometheus alert templates. |
| Deployment profile rendering | dpone ops deploy-render |
Render Docker Compose, Kubernetes CronJob, Airflow DAG, or Dagster asset handoff templates. |
| Object-storage staging evidence | dpone ops staging-evidence |
Validate object-storage staging manifests and render target-native load hints. |
| Catalog publication | dpone ops catalog-publish |
Build OpenLineage, dbt sources, and DataHub-compatible publication artifacts. |
| Release summary | dpone ops release-summary |
Combine replay, source -> sink matrix, and connector certification evidence into one final go/no-go report. |
| Certification history | dpone ops certification-history |
Record release history, badge status, fixed cases, and certification regressions. |
| Connector badges | dpone ops connector-badges |
Generate README/GitHub Pages connector badge matrix artifacts. |
| Data contracts and drift guard | dpone ops contract-check |
Evaluate required columns, nullability, uniqueness, row count, and null-ratio contracts. |
| Quarantine and replay | dpone ops quarantine-export, dpone ops quarantine-replay |
Inspect and replay rejected rows from append-only quarantine files. |
| Load package lifecycle | dpone ops package-start, dpone ops package-commit |
Create load IDs and enforce state commit only after load commit. |
| Rollback and restore | dpone ops rollback-plan, dpone ops rollback-apply, dpone ops rollback-execute |
Build, preview, and apply explicit target-native rollback plans. |
| Connector marketplace | dpone ops marketplace |
Render connector certification status, capabilities, badges, and docs links. |
| Evidence bundle | dpone ops evidence-bundle |
Collect certification, data-contract, and marketplace evidence with checksums. |
| Evidence chain | dpone ops evidence-chain |
Append a tamper-evident release evidence chain entry. |
| Go-live gate | dpone ops go-live-gate |
Evaluate required evidence and return go/no-go blockers. |
| Policy-as-code | dpone ops policy-evaluate |
Enforce JSON release policies against an evidence bundle. |
| Reconciliation diff | dpone ops diff |
Compare bounded source/target rows and emit missing, extra, and mismatch samples. |
| Security audit | dpone ops security-audit |
Detect inline secrets, unsafe connection types, and unredacted log tokens. |
| SLO evaluation | dpone ops slo-evaluate |
Evaluate freshness, throughput, latency, failure-rate, and retry-budget objectives. |
| Benchmark baseline | dpone ops benchmark-baseline |
Detect throughput/latency regressions against committed benchmark profiles. |
| Incident pack | dpone ops incident-pack |
Bundle evidence, policy, SLO, security, diff, and rollback artifacts for review. |
| Release gate | dpone ops release-gate |
Aggregate ops artifacts into one release readiness decision. |
| Production maturity gate | dpone ops production-maturity |
Aggregate certification, CDC, performance, security, supply-chain, governance, and docs evidence into one GA readiness decision. |
| Release orchestrator | dpone ops release-orchestrator |
Run artifact index, evidence chain, release gate, docs pack, and runbook pack as one release pipeline. |
| Release promotion | dpone ops release-promote |
Record immutable environment promotion evidence for dev/staging/production handoff. |
| Environment drift | dpone ops env-drift |
Compare environment manifests/configs and block unapproved drift before promotion. |
| Change request | dpone ops change-request |
Build a machine-readable release approval artifact with risk, approvers, and evidence. |
| Approval record | dpone ops approval-record |
Record actual approval/rejection decisions and evaluate quorum before promotion. |
| Deployment record | dpone ops deployment-record |
Record factual deployment outcome, post-deploy checks, and rollback pointer. |
| Post-deploy verification | dpone ops post-deploy-verify |
Aggregate final deployment, SLO, diff, security, and contract checks into close-or-rollback gate. |
| Release close | dpone ops release-close |
Write final immutable release closure or rollback-required evidence. |
| Docs publish pack | dpone ops docs-publish-pack |
Build README and GitHub Pages snippets from ops artifacts. |
| Manifest bundle | dpone ops manifest-bundle |
Create a redacted portable support/release bundle with checksums. |
| Runbook pack | dpone ops runbook-pack |
Generate an operator go-live/rollback/incident runbook from ops artifacts. |
| Performance planning | dpone perf advise |
Recommend native bulk paths, partitioning, and throughput improvements. |
Design rules¶
- There is no
productionnamespace orproductionmode. - Operational services live under
dpone.ops.*. - CLI adapters are thin; business rules stay in focused services.
- Destructive operations require explicit
--yes. - Every command supports JSON output for automation where relevant.
- Artifacts should be saved under
.dpone/for local runs and undertest_artifacts/for tests/certification. - Minor and major releases require a green
dpone ops release-evidence-packproduced fromreal_localevidence before tagging or publishing.
Artifact index¶
Use dpone ops artifact-index to publish a searchable list of generated ops
artifacts for GitHub Pages, CI summaries, release notes, and incident review.
dpone ops artifact-index \
--output-dir .dpone/artifact-index \
--root .dpone \
--root test_artifacts \
--release v0.7.1 \
--format json
Artifacts written:
Indexed metadata:
| Field | Meaning |
|---|---|
artifact_type |
Type inferred from artifact filename such as release_gate or ops_evidence_bundle. |
sha256 |
Content checksum for audit and tamper detection. |
size_bytes |
File size for storage and artifact growth reviews. |
modified_at |
UTC file modification timestamp. |
release, run_id, passed |
Extracted from JSON artifacts when present. |
Runbook when the index is red:
- Find rows with
passed=false. - Open the referenced artifact path.
- Fix the underlying gate, SLO, security, diff, or certification issue.
- Regenerate the artifact and re-run
artifact-index.
Run registry¶
Use dpone ops run-registry after dpone run to create an
auditable run entry. The registry stores the canonical run result, attached
quality/state/reconciliation artifacts, SHA-256 checksums, and an append/update
run_registry_index.json.
dpone run manifests/orders.yml \
--selector daily_orders \
--format json > .dpone/runs/daily_orders/run_result.json
dpone ops run-registry \
--output-dir .dpone/run-registry \
--run-result .dpone/runs/daily_orders/run_result.json \
--artifact quality=.dpone/runs/daily_orders/quality.json \
--artifact state=.dpone/runs/daily_orders/state_transition.json \
--format json
Artifacts written:
Registry fields:
| Field | Meaning |
|---|---|
run_id |
Run identifier from dpone run, or unknown_run when the result is invalid. |
process |
Manifest process selector/name. |
status, passed, blockers |
Final run health and blocking diagnostics. |
run_result_sha256 |
SHA-256 checksum of the canonical dpone run --format json output. |
artifacts |
Attached quality, state, diff, SLO, release, or support artifacts with checksums. |
index_path |
Location of the registry index for docs, CI summaries, or incident review. |
Operational model:
flowchart LR
Run["dpone run --format json"] --> Result["run_result.json"]
Quality["quality/state/diff artifacts"] --> Registry["dpone ops run-registry"]
Result --> Registry
Registry --> Entry["<run_id>__run_registry.json"]
Registry --> Markdown["<run_id>__run_registry.md"]
Registry --> Index["run_registry_index.json"]
Runbook when registry is red:
- Open
blockersin<run_id>__run_registry.json. - If
run_result.missingorrun_result.invalid_json, re-rundpone run --format json. - If
run_result.not_passed, fix the runtime failure before promoting state/release evidence. - If an attached artifact is red, open that artifact and follow its dedicated runbook.
- Treat checksum drift in
run_registry_index.jsonas an audit event.
OpenLineage export¶
Use dpone ops lineage-export after run-registry to publish a portable
lineage event. The detailed model and runbook live in
OpenLineage and run history.
dpone ops lineage-export \
--output-dir .dpone/lineage/daily_orders \
--run-registry-entry .dpone/run-registry/<run_id>__run_registry.json \
--namespace dpone.local \
--input postgres=public.orders \
--output mssql=landing.orders \
--format json
Artifacts written:
Runbook when lineage export is red:
- If
run_registry.missing, regenerate the run registry entry. - If
run_registry.not_passed, fix the originaldpone runbefore publishing lineage. - Re-export with explicit
--inputand--outputwhen catalog datasets are missing. - Keep the generated JSON as immutable evidence even when the collector is temporarily unavailable.
dbt lineage¶
Use dpone ops dbt-lineage after dbt build to attach transformation lineage
to dpone run evidence. Detailed artifact semantics, CI examples, and runbooks
live in dbt integration.
dbt build --project-dir analytics --profiles-dir analytics
dpone ops dbt-lineage \
--output-dir .dpone/dbt-lineage/orders \
--manifest analytics/target/manifest.json \
--run-results analytics/target/run_results.json \
--run-registry-entry .dpone/run-registry/<run_id>__run_registry.json \
--namespace dbt.local \
--format json
Artifacts written:
Runbook when dbt lineage is red:
- If
dbt_manifest.missing, rundbt buildand verify thetarget/path. - If
dbt_results.not_passed, fix failed dbt models/tests before release promotion. - If
run_registry.not_passed, fix the dpone load before publishing transformation lineage. - Publish
dbt_openlineage.jsonto the same collector as dpone run lineage.
Evidence chain¶
Use dpone ops evidence-chain after artifact-index to append a
tamper-evident release entry. Each entry stores:
| Field | Meaning |
|---|---|
artifact_index_hash |
SHA-256 checksum of the release artifact index. |
previous_chain_hash |
Prior release chain hash, or genesis for the first entry. |
chain_hash |
SHA-256 hash of release id, artifact checksum, previous hash, and timestamp. |
dpone ops evidence-chain \
--chain-dir .dpone/evidence-chain \
--release v0.7.1 \
--artifact-index .dpone/artifact-index/artifact_index.json \
--format json
dpone ops evidence-chain-verify \
--chain-dir .dpone/evidence-chain \
--format json
Artifacts written:
Operational model:
flowchart LR
Index["artifact_index.json"] --> Hash["artifact_index_hash"]
Previous["previous release chain_hash"] --> Entry["evidence chain entry"]
Hash --> Entry
Entry --> Current["current chain_hash"]
Current --> Next["next release previous_chain_hash"]
Runbook when verification fails:
- Recompute the artifact index with
dpone ops artifact-index. - Compare the current artifact checksum with
artifact_index_hash. - Compare
previous_chain_hashwith the prior releasechain_hash. - If a file changed unexpectedly, treat it as a release-blocking audit event.
- Regenerate the evidence chain only after the artifact diff is reviewed.
- Use
dpone ops evidence-chain-verifyin CI; an empty chain returns a non-zero exit code.
Certification harness¶
Run one focused case:
dpone ops certification-run \
--source postgres \
--sink mssql \
--strategy snapshot_diff \
--row-count 10000 \
--artifact-dir test_artifacts/certification/postgres_mssql_snapshot_diff \
--format json
Run the default mock-contract profile:
Artifacts:
Runbook when a case fails:
- Open
certification_report.jsonand identify the failingcase_id. - Open
<case_id>__behavior.json. - Compare
expected_row_countandactual_row_count. - Compare
expected_checksumandactual_checksum. - Re-run a focused case with the same row count.
- If the contract is wrong, update
dpone.integration_matrix. - If runtime behavior is wrong, add a sink/source regression test before changing code.
Certification suite¶
Use dpone ops certification-suite to combine matrix certification, benchmark,
lineage, dbt lineage, strategy certification, and evidence artifacts into one manual/scheduled CI gate.
The full guide lives in Certification suite automation.
dpone ops certification-suite \
--output-dir test_artifacts/certification/suite \
--suite-id manual_matrix_2026_06_05 \
--certification-report test_artifacts/certification/current/certification_report.json \
--benchmark-baseline test_artifacts/benchmarks/current/benchmark_baseline.json \
--lineage-report .dpone/lineage/orders/run_01__openlineage_report.json \
--dbt-lineage-report .dpone/dbt-lineage/orders/dbt_lineage.json \
--strategy-certification-bundle test_artifacts/strategy_certification/matrix/strategy_certification_bundle.json \
--evidence-bundle test_artifacts/ops/evidence/ops_evidence_bundle.json \
--require-benchmark \
--require-lineage \
--require-dbt-lineage \
--require-strategy-certification \
--require-evidence \
--format json
Artifacts:
Integration matrix report¶
Use dpone ops integration-matrix-report after the manual matrix pytest run to
convert per-case artifacts into a certification_report.json that can feed
dpone ops certification-suite.
DPONE_MATRIX_ARTIFACT_DIR=test_artifacts/integration_matrix \
uv run pytest -m integration_matrix tests/integration/matrix -q
dpone ops integration-matrix-report \
--artifact-dir test_artifacts/integration_matrix \
--output-dir test_artifacts/integration_matrix \
--format json
Artifacts:
Runbook:
- If
matrix_behavior.missing:<case_id>appears, re-run that case withDPONE_MATRIX_CASE_ID=<case_id>. - If
matrix_rows.mismatch:<case_id>appears, open<case_id>__behavior.jsonand compare expected/actual checksums. - If the report is red in CI, download both
source-sink-integration-matrixandsource-sink-certification-suiteartifacts.
Runbook when suite is red:
- Open
certification_suite.jsonand inspectblockers. - Fix red matrix cases before publishing connector badges.
- Re-run benchmark on the same profile before changing baselines.
- Regenerate lineage/dbt evidence after runtime or transformation changes.
- Attach the suite artifact to release evidence before go-live.
Certification history¶
Record a release certification snapshot and compare it with the previous snapshot:
dpone ops certification-history \
--history-dir test_artifacts/certification/history \
--release v0.7.1 \
--current-report test_artifacts/certification/current/certification_report.json \
--previous-report test_artifacts/certification/previous/certification_report.json \
--format json
Artifacts:
<release>__certification_history.json
<release>__certification_history.md
certification_history_index.json
Status values:
| Status | Meaning |
|---|---|
passing |
Current report is green and has no new failures. |
regression |
At least one previously passing case failed now. |
failing |
No new failures, but old failures remain. |
incomplete |
The report is not fully green and has no previous failure context. |
Runbook when status is regression:
- Open
new_failures. - Re-run each focused
case_id. - Fix runtime behavior or update the certification contract with review.
- Re-record certification history before publishing badges or release notes.
Connector badges¶
Generate connector status artifacts for README snippets, GitHub Pages, and release notes:
dpone ops connector-badges \
--output-dir test_artifacts/certification/badges \
--history-index test_artifacts/certification/history/certification_history_index.json \
--format json
Artifacts:
Badge rules:
| Input | Badge behavior |
|---|---|
| Marketplace status only | Use connector marketplace badge such as certified or beta. |
| New or unchanged failed case | Mark both source and sink connectors as regression. |
| Fixed failed case | Add a strategy row with status fixed, but do not downgrade connector badge. |
Runbook when connector badge is regression:
- Open
strategy_rows. - Re-run the listed source -> sink strategy case.
- Fix runtime or certification contract.
- Regenerate
certification-history. - Regenerate
connector-badges.
Data contract guard¶
dpone ops contract-check \
--rows-json '[{"id": 1, "email": null}]' \
--contract-json '{"required_columns":["id","email"],"not_null":["email"],"unique":["id"],"min_rows":1}' \
--format json
Supported checks:
| Check | Contract key | Failure action |
|---|---|---|
| Required columns | required_columns |
Add source column, schema evolution, or contract migration. |
| Not null | not_null |
Fix upstream nulls or relax the contract. |
| Unique | unique |
Fix duplicate keys or configure a composite key. |
| Minimum rows | min_rows |
Check credentials, filters, pagination, and state. |
| Null ratio | max_null_ratio |
Investigate sparsity drift or adjust threshold. |
Use --mode warn when introducing a new contract. Use --mode fail for
release gates.
Quarantine and replay¶
Export bad rows:
dpone ops quarantine-export \
--dir .dpone/quarantine \
--run-id 01J00000000000000000000000 \
--format json
Preview replay:
Apply replay:
Runbook:
- Export rows and group by
reason. - Fix mapping, schema evolution, or source data.
- Replay only after the fix is deployed.
- Keep original quarantine artifacts immutable for audit.
Load package lifecycle¶
Start a package:
dpone ops package-start \
--dir .dpone/load-packages \
--run-id 01JRUN00000000000000000000 \
--target landing.orders \
--chunk-id business_date=2026-06-01 \
--format json
Commit a package:
dpone ops package-commit \
--dir .dpone/load-packages \
--load-id 01JLOAD0000000000000000000 \
--rows-loaded 10000 \
--state-after-json '{"xmin":"845221"}'
State advancement is valid only after package status is committed.
Rollback¶
Plan rollback:
dpone ops rollback-plan \
--sink mssql \
--target landing.orders \
--load-id 01JLOAD0000000000000000000 \
--strategy shadow_swap \
--format json
Apply rollback after external review:
Safely preview or apply through the guarded executor:
dpone ops rollback-execute \
--sink mssql \
--target landing.orders \
--load-id 01JLOAD0000000000000000000 \
--strategy shadow_swap \
--require-backup \
--format json
Apply mode still requires explicit --yes:
dpone ops rollback-execute \
--sink mssql \
--target landing.orders \
--load-id 01JLOAD0000000000000000000 \
--strategy shadow_swap \
--require-backup \
--yes
Runbook:
- Generate a rollback plan.
- Review all SQL actions manually.
- Verify backup/shadow objects exist.
- Stop writers to the target table.
- Apply with
--yes. - Run reconciliation and data contracts.
- Decide whether to replay or cancel downstream state.
Connector marketplace¶
The marketplace is a capability catalog, not a SaaS registry. It helps users decide whether a connector is certified, beta, experimental, or community-owned and points to the relevant docs/runbooks.
Evidence bundle¶
Build one audit artifact for a release candidate, connector certification run, or controlled go-live:
dpone ops evidence-bundle \
--artifact-dir test_artifacts/ops/evidence/postgres_mssql_snapshot_diff \
--run-id 01JOPS00000000000000000000 \
--source postgres \
--sink mssql \
--strategy snapshot_diff \
--row-count 10000 \
--rows-json '[{"id": 1, "email": "a@example.com"}]' \
--contract-json '{"required_columns":["id","email"],"not_null":["id"]}' \
--format json
Artifacts:
certification_report.json
certification_report.md
data_contract_report.json
data_contract_report.md
connector_marketplace.json
connector_marketplace.md
ops_evidence_bundle.json
ops_evidence_bundle.md
The bundle stores a SHA-256 checksum for every required evidence file. Treat
ops_evidence_bundle.json as the automation input and ops_evidence_bundle.md
as the review artifact for PRs, incidents, and release notes.
Evidence chain¶
Use dpone ops evidence-chain after artifact-index to create a
tamper-evident release chain entry.
dpone ops evidence-chain \
--chain-dir .dpone/evidence-chain \
--release v0.7.1 \
--artifact-index .dpone/artifact-index/artifact_index.json \
--previous-entry .dpone/evidence-chain/v0.7.1__evidence_chain.json \
--format json
dpone ops evidence-chain-verify \
--chain-dir .dpone/evidence-chain \
--format json
Artifacts:
The chain hash includes:
| Field | Purpose |
|---|---|
release |
Release identifier. |
artifact_index_hash |
SHA-256 of the release artifact index. |
previous_chain_hash |
Hash from the previous release entry. |
created_at |
UTC creation timestamp for this entry. |
Runbook:
- Generate
artifact-index. - Append a new evidence chain entry.
- Store the generated JSON and Markdown with release artifacts.
- If a previous entry is present, pass it with
--previous-entry. - Treat changed chain hashes as tamper evidence and regenerate/review artifacts.
Go-live gate¶
Evaluate a previously generated evidence bundle:
dpone ops go-live-gate \
--bundle-json test_artifacts/ops/evidence/postgres_mssql_snapshot_diff/ops_evidence_bundle.json \
--format json
Exit codes:
| Exit code | Meaning |
|---|---|
0 |
All required evidence passed. |
1 |
One or more required evidence items failed. |
Runbook when the gate is red:
- Open the bundle JSON and identify
items[*].passed = false. - Open the referenced evidence artifact by
path. - Fix the underlying runtime, contract, docs, or connector capability issue.
- Re-run
dpone ops evidence-bundle. - Re-run
dpone ops go-live-gate.
Policy-as-code¶
Use policy evaluation when a CI job, release manager, or connector owner needs a repeatable rule set instead of manual evidence review.
dpone ops policy-evaluate \
--bundle-json test_artifacts/ops/evidence/postgres_mssql_snapshot_diff/ops_evidence_bundle.json \
--policy-json '{"required_evidence":["certification","data_contract","marketplace"],"require_bundle_passed":true,"require_artifacts_exist":true}' \
--format json
Supported policy keys:
| Policy key | Default | Meaning |
|---|---|---|
required_evidence |
[] |
Evidence names that must be present in the bundle. |
require_bundle_passed |
true |
Fail if the bundle-level status is false. |
require_artifacts_exist |
false |
Fail if referenced local artifact files are missing. |
Runbook when policy is red:
- Read
violations. - Follow the matching
actions. - Regenerate the evidence bundle after the fix.
- Re-run
policy-evaluatein CI and locally.
Reconciliation diff¶
Use dpone ops diff when a load, certification run, or incident review needs a
small but precise source-target comparison artifact.
dpone ops diff \
--source-rows-json '[{"id": 1, "amount": 100}, {"id": 2, "amount": 200}]' \
--target-rows-json '[{"id": 1, "amount": 100}, {"id": 2, "amount": 250}]' \
--key id \
--compare-columns amount \
--format json
The service reports:
| Signal | Meaning |
|---|---|
missing_in_target_count |
Source rows absent from target. |
extra_in_target_count |
Target rows absent from source. |
mismatch_count |
Matching keys with different compared columns. |
duplicate_source_key_count |
Source has duplicate business keys. |
duplicate_target_key_count |
Target has duplicate business keys. |
Runbook when diff is red:
- Check duplicate keys first; fix the
unique_keycontract if duplicates are valid. - Inspect missing and extra samples.
- Inspect mismatch columns and decide whether the target needs replay, rollback, or reconciliation.
- Do not advance state until the diff is green or an explicit exception is approved.
Security audit¶
Use dpone ops security-audit before committing manifests, publishing support
bundles, or storing CI logs as artifacts.
dpone ops security-audit \
--manifest-json '{"source":{"connection_type":"vault","credentials":{"password":"${DPONE_SOURCE_PASSWORD}"}}}' \
--log-text 'password=[REDACTED] token=[REDACTED]' \
--format json
The audit checks:
| Check | What it catches |
|---|---|
| Inline manifest secrets | Literal values under password, token, api_key, secret, private_key, and related fields. |
| Connection type policy | Unsupported connection_type values outside env, airflow, vault, and params. |
| Log redaction | Raw GitHub/PyPI/AWS-like tokens, credential URLs, and password=value style leaks. |
Safe secret references:
${DPONE_PASSWORD}
env:DPONE_PASSWORD
vault:secret/data/dpone/source#password
airflow:conn_id:postgres_oltp
[REDACTED]
Runbook when security audit is red:
- Remove literal secrets from manifests and logs.
- Move credentials into env, Vault, Airflow, or another external provider.
- Re-run
security-audit. - Rotate any credential that was written to a repo, CI log, or support bundle.
SLO evaluation¶
Use dpone ops slo-evaluate to enforce run-level or release-level objectives
from a run report, benchmark, certification artifact, or CI job.
dpone ops slo-evaluate \
--metrics-json '{"freshness_lag_seconds":120,"throughput_rows_per_second":2500,"failure_rate":0.001}' \
--objectives-json '{"freshness_lag_seconds":{"max":300},"throughput_rows_per_second":{"min":1000},"failure_rate":{"max":0.01}}' \
--format json
Recommended objective families:
| Metric | Rule | Typical action when red |
|---|---|---|
freshness_lag_seconds |
max |
Reduce schedule interval, inspect state lag, or fix upstream delays. |
throughput_rows_per_second |
min |
Tune partitioning, native bulk path, batch size, or retry policy. |
p95_latency_seconds |
max |
Inspect slow stages, target locks, API backoff, and finalization. |
failure_rate |
max |
Investigate connector errors and target throttling. |
retry_budget_used_ratio |
max |
Reduce transient failures or adjust retry/backoff policy. |
Runbook when SLO is red:
- Identify failed metrics in
results. - Apply the recommended action for each failed metric.
- Re-run the same workload or benchmark.
- Attach the SLO report to release/certification evidence.
Benchmark baseline gate¶
Use dpone ops benchmark-baseline for long-running stress and matrix gates.
Unlike SLOs, benchmark baselines answer: "did this release regress compared to
the same tested profile?"
dpone ops benchmark-baseline \
--output-dir test_artifacts/benchmarks/postgres_mssql_10k \
--metrics-json '{"throughput_rows_per_second":95000,"p95_latency_seconds":32}' \
--baseline-json '{"throughput_rows_per_second":{"value":100000,"direction":"higher"},"p95_latency_seconds":{"value":30,"direction":"lower"}}' \
--allowed-regression-ratio 0.10 \
--format json
Baseline directions:
| Direction | Pass rule | Example metrics |
|---|---|---|
higher |
Actual must stay above baseline * (1 - allowed_regression_ratio). |
Throughput, loaded rows, parallel worker utilization. |
lower |
Actual must stay below baseline * (1 + allowed_regression_ratio). |
Latency, runtime, error rate, retry budget burn. |
Artifacts written:
Runbook when benchmark baseline is red:
- Re-run the same benchmark profile before changing the baseline.
- Confirm row count, source/sink versions, hardware profile, and bulk path are unchanged.
- Tune partitioning, native bulk mode, batch size, target finalizer policy, or target capacity.
- Update baseline only after a reviewed intentional performance change.
Incident pack¶
Use dpone ops incident-pack to create one auditable bundle for a release
review, go-live gate, failed certification, or incident handoff.
dpone ops incident-pack \
--artifact-dir .dpone/incidents/01JINC00000000000000000000 \
--incident-id 01JINC00000000000000000000 \
--title "Postgres to MSSQL release gate" \
--severity release \
--artifact evidence=test_artifacts/ops/evidence/latest/ops_evidence_bundle.json \
--artifact policy=test_artifacts/ops/evidence/latest/policy_decision.json \
--artifact slo=test_artifacts/ops/evidence/latest/slo_report.json \
--artifact security=test_artifacts/ops/evidence/latest/security_audit.json \
--format json
Artifacts written:
Runbook when incident pack is red:
- Open
ops_incident_pack.json. - Review every item with
passed=false. - Open the referenced artifact path and fix the underlying issue.
- Regenerate the failed artifact.
- Re-run
incident-packbefore closing the incident or approving go-live.
Release gate¶
Use dpone ops release-gate as the final CI or release-manager gate after
generating evidence, policy, SLO, security, diff, connector badge, and incident
artifacts.
dpone ops release-gate \
--artifact-dir .dpone/releases/v0.7.1 \
--release v0.7.1 \
--artifact evidence=test_artifacts/ops/evidence/latest/ops_evidence_bundle.json \
--artifact policy=test_artifacts/ops/evidence/latest/policy_decision.json \
--artifact security=test_artifacts/ops/evidence/latest/security_audit.json \
--artifact slo=test_artifacts/ops/evidence/latest/slo_report.json \
--artifact connector_badges=test_artifacts/certification/badges/connector_badges.json \
--format json
Artifacts written:
Runbook when release gate is red:
- Open
release_gate.json. - Inspect
blockers. - Open each referenced artifact path.
- Fix the underlying issue and regenerate that artifact.
- Re-run
release-gate. - Publish only when
passed=true.
Release orchestrator¶
Use dpone ops release-orchestrator when a release manager wants the standard
ops evidence pipeline in one command. The orchestrator does not replace the
underlying focused commands; it calls them in order and writes a top-level
summary.
dpone ops release-orchestrator \
--output-dir .dpone/releases/v0.7.1 \
--release v0.7.1 \
--root .dpone \
--root test_artifacts \
--artifact security=test_artifacts/ops/evidence/latest/security_audit.json \
--artifact slo=test_artifacts/ops/evidence/latest/slo_report.json \
--format json
Pipeline:
flowchart LR
Roots["artifact roots"] --> Index["artifact-index"]
Index --> Chain["evidence-chain"]
Chain --> Gate["release-gate"]
Gate --> Docs["docs-publish-pack"]
Docs --> Runbook["runbook-pack"]
Runbook --> Summary["release_orchestration.json"]
Artifacts written:
release_orchestration.json
release_orchestration.md
artifact-index/artifact_index.json
evidence-chain/<release>__evidence_chain.json
release-gate/release_gate.json
docs-publish-pack/docs_publish_pack.json
runbook-pack/runbook_pack.json
runbook-pack/OPERATOR_RUNBOOK.md
Runbook when orchestration is red:
- Open
release_orchestration.json. - Inspect
blockersto find the failed pipeline step. - Open the step artifact path from
steps. - Fix the underlying focused command failure.
- Re-run
release-orchestrator. - Publish only when every step has
passed=true.
Release promotion¶
Use dpone ops release-promote after a green release orchestration when the
same release is promoted between environments. The promotion manifest is an
audit artifact: it records source environment, target environment, artifact
checksums, and promotion blockers.
dpone ops release-promote \
--output-dir .dpone/promotions/v0.7.1-staging-production \
--release v0.7.1 \
--from-env staging \
--to-env production \
--artifact release_orchestration=.dpone/releases/v0.7.1/release_orchestration.json \
--artifact runbook=.dpone/releases/v0.7.1/runbook-pack/runbook_pack.json \
--artifact rollback=.dpone/releases/v0.7.1/rollback_execute.json \
--format json
Promotion model:
flowchart LR
Source["from environment"] --> Evidence["promotion evidence"]
Artifacts["release artifacts"] --> Evidence
Evidence --> Decision{"passed?"}
Decision -->|yes| Target["to environment"]
Decision -->|no| Blocked["blocked promotion"]
Artifacts written:
Runbook when promotion is blocked:
- Open
promotion_manifest.json. - Inspect
blockers. - Open every failed artifact path.
- Fix or regenerate the failed focused artifact.
- Re-run
release-promote. - Promote only when
passed=true.
Environment drift¶
Use dpone ops env-drift before promotion to compare staging/production
manifests, rendered configs, or release artifact metadata. Expected
environment-specific values can be allowlisted by exact flattened path, while
all other differences become blockers.
dpone ops env-drift \
--output-dir .dpone/env-drift/v0.7.1-staging-production \
--source-env staging \
--target-env production \
--source .dpone/rendered/staging.json \
--target .dpone/rendered/production.json \
--allowlist-path connection.host \
--allowlist-path connection.database \
--format json
Drift model:
flowchart LR
Source["source environment config"] --> Flatten["flatten paths"]
Target["target environment config"] --> Flatten
Flatten --> Diff["compare values"]
Diff --> Allowlist["apply allowlist"]
Allowlist --> Decision{"blocking drift?"}
Decision -->|no| Promote["promotion can continue"]
Decision -->|yes| Block["promotion blocked"]
Artifacts written:
Runbook when drift is blocked:
- Open
env_drift.json. - Review
blockers. - Fix accidental config drift in the target environment.
- Add allowlist entries only for stable environment-specific fields.
- Re-run
env-drift. - Attach
env_drift.jsontorelease-promote.
Change request¶
Use dpone ops change-request to create a machine-readable approval artifact
for release governance. It should be generated after release orchestration,
environment drift, promotion evidence, and rollback/runbook artifacts are
available.
dpone ops change-request \
--output-dir .dpone/change-requests/CR-2026-0001 \
--change-id CR-2026-0001 \
--release v0.7.1 \
--target-env production \
--risk-level medium \
--requested-by release-manager@example.com \
--approver data-architect@example.com \
--approver platform-owner@example.com \
--artifact release_orchestration=.dpone/releases/v0.7.1/release_orchestration.json \
--artifact env_drift=.dpone/env-drift/v0.7.1-staging-production/env_drift.json \
--artifact promotion=.dpone/promotions/v0.7.1-staging-production/promotion_manifest.json \
--format json
Approval model:
flowchart LR
Evidence["release evidence"] --> Request["change request"]
Risk["risk level"] --> Request
Approvers["approvers"] --> Request
Request --> Decision{"passed?"}
Decision -->|yes| Approval["approval workflow"]
Decision -->|no| Blocked["blocked change"]
Artifacts written:
Runbook when change request is blocked:
- Open
change_request.json. - Review
blockers. - Add required approvers if
approval.approvers_missingis present. - Fix or regenerate failed evidence artifacts.
- Re-run
change-request. - Attach
change_request.jsonto the approval system.
Approval record¶
Use dpone ops approval-record to record real approval or rejection decisions
against a generated change_request.json. This keeps the release approval
state machine machine-readable and auditable.
dpone ops approval-record \
--output-dir .dpone/approvals/CR-2026-0001 \
--change-request .dpone/change-requests/CR-2026-0001/change_request.json \
--actor data-architect@example.com \
--decision approved \
--comment "Release evidence reviewed." \
--quorum-required 1 \
--format json
Approval model:
flowchart LR
Request["change_request.json"] --> Decision["approval decision"]
Decision --> Checks["actor, expiry, rejection, quorum checks"]
Checks --> Approved{"approved?"}
Approved -->|yes| Promote["promotion can continue"]
Approved -->|no| Blocked["promotion blocked"]
Artifacts written:
Runbook when approval is blocked:
- Open
approval_record.json. - Review
blockers. - Confirm the actor is listed in the change request approvers.
- Confirm
expires_athas not passed. - Resolve rejected decisions through a new change request.
- Continue promotion only when quorum is met and
passed=true.
Deployment record¶
Use dpone ops deployment-record after a release is actually applied to an
environment. It links the deployment to the approved change request, records
post-deploy checks, and keeps rollback evidence discoverable.
dpone ops deployment-record \
--output-dir .dpone/deployments/DEP-2026-0001 \
--deployment-id DEP-2026-0001 \
--environment production \
--actor release-manager@example.com \
--approval-record .dpone/approvals/CR-2026-0001/approval_record.json \
--status succeeded \
--post-check smoke=true \
--post-check quality=true \
--rollback-artifact .dpone/rollback/DEP-2026-0001/rollback_execute.json \
--format json
Deployment model:
flowchart LR
Approval["approval_record.json"] --> Deploy["deployment execution"]
Deploy --> Checks["post-deploy checks"]
Checks --> Record["deployment_record.json"]
Record --> Decision{"passed?"}
Decision -->|yes| Complete["deployment complete"]
Decision -->|no| Rollback["rollback/runbook required"]
Artifacts written:
Runbook when deployment is blocked:
- Open
deployment_record.json. - Review
blockersand failed post checks. - Attach rollback evidence when status is
failedorpartial. - Re-run post-deploy checks after remediation.
- Keep the original deployment record immutable for audit.
Post-deploy verification¶
Use dpone ops post-deploy-verify after deployment to aggregate deployment
record, SLO, reconciliation, security, and data-contract artifacts into a final
release close gate.
dpone ops post-deploy-verify \
--output-dir .dpone/post-deploy/DEP-2026-0001 \
--deployment-record .dpone/deployments/DEP-2026-0001/deployment_record.json \
--artifact slo=.dpone/slo/DEP-2026-0001/slo_report.json \
--artifact diff=.dpone/diff/DEP-2026-0001/diff.json \
--artifact security=.dpone/security/DEP-2026-0001/security_audit.json \
--format json
Verification model:
flowchart LR
Deployment["deployment_record.json"] --> Verify["post-deploy verify"]
SLO["SLO report"] --> Verify
Diff["reconciliation diff"] --> Verify
Security["security audit"] --> Verify
Contracts["data contracts"] --> Verify
Verify --> Decision{"all green?"}
Decision -->|yes| Closed["release_closed"]
Decision -->|no| Rollback["rollback_required"]
Artifacts written:
Runbook when verification requires rollback:
- Open
post_deploy_verify.json. - Review
blockers. - Open the referenced failed check artifact.
- If deployment record is red, attach rollback evidence and incident pack.
- Re-run failed checks after remediation.
- Close the release only when
status=release_closedandpassed=true.
Release close¶
Use dpone ops release-close as the final release lifecycle artifact after a
green post-deploy verification gate.
dpone ops release-close \
--output-dir .dpone/release-close/v0.7.1 \
--release v0.7.1 \
--closed-by release-manager@example.com \
--post-deploy-verify .dpone/post-deploy/DEP-2026-0001/post_deploy_verify.json \
--notes "Release closed after green post-deploy checks." \
--format json
Closure model:
flowchart LR
Verify["post_deploy_verify.json"] --> Close["release-close"]
Close --> Decision{"post-deploy passed?"}
Decision -->|yes| Closed["closed"]
Decision -->|no| Rollback["rollback_required"]
Artifacts written:
Runbook when release close is blocked:
- Open
release_close.json. - Confirm
post_deploy_verify.jsonexists and haspassed=true. - If post-deploy status is red, attach rollback and incident artifacts.
- Do not close the release until post-deploy verification is green.
- Keep
release_close.jsonimmutable as the final audit record.
Docs publish pack¶
Use dpone ops docs-publish-pack after release artifacts are green to generate
copy/paste-ready README snippets and a GitHub Pages operational index.
dpone ops docs-publish-pack \
--output-dir .dpone/docs-publish/v0.7.1 \
--release v0.7.1 \
--artifact artifact_index=.dpone/artifact-index/artifact_index.json \
--artifact connector_badges=test_artifacts/certification/badges/connector_badges.json \
--artifact release_gate=.dpone/releases/v0.7.1/release_gate.json \
--artifact certification_history=test_artifacts/certification/history/certification_history_index.json \
--format json
Artifacts written:
Runbook:
- Generate
artifact-index,connector-badges, andrelease-gate. - Run
docs-publish-pack. - Review
README_SNIPPET.mdandPAGES_INDEX.md. - Copy snippets into docs only when
passed=true. - Re-run
mkdocs build --strictafter publishing snippets.
Manifest bundle¶
Use dpone ops manifest-bundle when support, release review, or incident
handoff needs a portable archive directory with redacted inputs and checksums.
dpone ops manifest-bundle \
--output-dir .dpone/manifest-bundles/01JBUNDLE000000000000000000 \
--bundle-id 01JBUNDLE000000000000000000 \
--file manifest=examples/postgres_to_mssql/manifest.yml \
--file release_gate=.dpone/releases/v0.7.1/release_gate.json \
--redact \
--format json
Artifacts written:
Runbook:
- Always use
--redactbefore sharing bundles outside your machine. - Inspect
manifest_bundle.md. - Confirm every item has a SHA-256 checksum.
- If
passed=false, fix missing files and rebuild the bundle. - Rotate any credential that existed in a non-redacted source file.
Runbook pack¶
Use dpone ops runbook-pack to generate one operator-facing Markdown runbook
for go-live, rollback, or incident handoff.
dpone ops runbook-pack \
--output-dir .dpone/runbooks/v0.7.1 \
--runbook-id 01JRUNBOOK0000000000000000 \
--title "v0.7.1 go-live" \
--artifact release_gate=.dpone/releases/v0.7.1/release_gate.json \
--artifact rollback=.dpone/rollback/rollback_execute.json \
--artifact security=test_artifacts/ops/evidence/latest/security_audit.json \
--artifact diff=test_artifacts/ops/evidence/latest/diff_report.json \
--format json
Artifacts written:
Runbook sections:
| Section | Purpose |
|---|---|
| Current status | Compact table of attached artifact statuses. |
| Go-live checklist | Release readiness actions and blocker follow-up. |
| Rollback checklist | Safe preview/apply sequence and post-rollback checks. |
| Incident handoff checklist | What to attach and what owners must follow up. |
Runbook:
- Generate release gate, security, SLO, diff, rollback and manifest bundle artifacts.
- Run
runbook-pack. - Review
OPERATOR_RUNBOOK.md. - Attach the generated runbook to release/incident review.
- Close only when
passed=trueor an explicit exception is approved.
Developer extension points¶
| Service | Module |
|---|---|
| Artifact index | dpone.ops.artifact_index |
| Certification harness | dpone.ops.certification |
| Certification history | dpone.ops.certification_history |
| Connector badges | dpone.ops.connector_badges |
| Data contract guard | dpone.ops.contracts |
| Quarantine store | dpone.ops.quarantine |
| Load package lifecycle | dpone.ops.packages |
| Rollback planner | dpone.ops.rollback |
| Rollback executor | dpone.ops.rollback_execute |
| Connector marketplace | dpone.ops.marketplace |
| Evidence bundle | dpone.ops.evidence |
| Evidence chain | dpone.ops.evidence_chain |
| Go-live gate | dpone.ops.gate |
| Policy-as-code | dpone.ops.policy |
| Reconciliation diff | dpone.ops.diff |
| Security audit | dpone.ops.security |
| SLO evaluation | dpone.ops.slo |
| Incident pack | dpone.ops.incident |
| Release gate | dpone.ops.release_gate |
| Release orchestrator | dpone.ops.release_orchestrator |
| Release promotion | dpone.ops.release_promote |
| Environment drift | dpone.ops.env_drift |
| Change request | dpone.ops.change_request |
| Approval record | dpone.ops.approval_record |
| Deployment record | dpone.ops.deployment_record |
| Post-deploy verification | dpone.ops.post_deploy_verify |
| Release close | dpone.ops.release_close |
| Docs publish pack | dpone.ops.docs_publish_pack |
| Manifest bundle | dpone.ops.manifest_bundle |
| Runbook pack | dpone.ops.runbook_pack |
When adding a new operational capability:
- Add a focused service module.
- Add a thin command adapter in
dpone.commands. - Add contract tests first.
- Add docs and a runbook.
- Add generated artifacts only under
.dpone/ortest_artifacts/.
Release summary¶
dpone ops release-summary is the final promotion gate after the manual replay, source -> sink matrix, and connector certification workflows have published their artifacts. It verifies all evidence chains and reads both certification suites before writing release_summary.json / release_summary.md.
dpone ops release-summary \
--output-dir test_artifacts/certification/release-summary \
--release-id v0.7.1 \
--replay-chain-dir test_artifacts/replay-evidence-chain \
--matrix-suite test_artifacts/source-sink-certification-suite/certification_suite.json \
--matrix-chain-dir test_artifacts/source-sink-evidence-chain \
--connector-suite test_artifacts/connector-certification-suite/certification_suite.json \
--connector-chain-dir test_artifacts/connector-evidence-chain \
--format md
Exit code 1 means a chain is missing, a chain cannot be verified, or a suite is red. The generated Markdown report includes the short release-blocking runbook.
Certification automation plan¶
dpone ops certification-automation-plan renders the expected full certification sequence and required artifacts before a scheduled/manual workflow runs.
dpone ops certification-automation-plan \
--output-dir test_artifacts/full_certification/automation \
--profile mock_contract \
--row-count 10000 \
--format md
Use this command when onboarding a new certification profile or reviewing .github/workflows/full-certification.yml. The command does not run tests; it documents the required order and artifacts so automation, docs, and runbooks stay aligned.
Workflow: .github/workflows/full-certification.yml.
Production maturity gate¶
dpone ops production-maturity aggregates certification, CDC, performance, security, supply-chain, governance, and docs evidence into one release-readiness report.
uv run dpone ops production-maturity \
--release v0.7.1-rc1 \
--output-dir test_artifacts/production_maturity/report \
--artifact certification=test_artifacts/connectors/latest/certification.json \
--artifact cdc=test_artifacts/replay/latest/replay.json \
--artifact performance=test_artifacts/benchmarks/latest/baseline.json \
--artifact security=test_artifacts/security/latest/security.json \
--artifact supply_chain=test_artifacts/supply_chain/latest/evidence.json \
--artifact governance=test_artifacts/governance/latest/policy.json \
--artifact docs=test_artifacts/docs/latest/docs.json
Outputs:
| File | Description |
|---|---|
production_maturity.json |
Automation-friendly status, domain checksums, blockers, score, and level. |
production_maturity.md |
Release-review summary for humans. |
The scheduled/manual workflow is .github/workflows/production-maturity.yml; it uploads production-maturity-report.
Runbook: if a domain is missing, produce the specialized artifact first; if a domain is not_passed, fix the failing specialized gate before rerunning the aggregator.
Industrial readiness gate¶
dpone ops industrial-readiness aggregates local matrix, correctness, reliability, performance lab, UX, and governance evidence into one industrial release-readiness report.
uv run dpone ops industrial-readiness \
--release v0.7.1-rc1 \
--output-dir test_artifacts/industrial_readiness/report \
--artifact local_matrix=test_artifacts/integration_matrix/latest/matrix.json \
--artifact correctness=test_artifacts/correctness/latest/correctness.json \
--artifact reliability=test_artifacts/reliability/latest/reliability.json \
--artifact performance_lab=test_artifacts/benchmarks/latest/performance_lab.json \
--artifact ux=test_artifacts/ux/latest/ux.json \
--artifact governance=test_artifacts/governance/latest/governance.json \
--case postgres:mssql:incremental_merge
The scheduled/manual workflow is .github/workflows/industrial-readiness.yml; it uploads industrial-readiness-report.
Schema DDL governance commands¶
Approve a schema change ledger artifact:
dpone schema approve --ledger .dpone/schema_changes/schema_change.json --approver data-architect --format json
Generate an expand-contract migration plan: