Orchestration
One run.Every step checked.
A DOGM run compiles the spec, generates the tables, checks every row and writes the files, a checks report and one output hash you can reproduce. Hosted runs do all of it in the app today, masking included. The dogm CLI runs the same engine on your machine; until its first release, you build it from source.
A run, start to finish
Five steps.One record.
The engine plans the run before it generates anything. Work is cut into fixed chunks, so ten workers or one produce the same output.
- 1
Compile
Check the approved spec and turn it into a plan: row counts, child offsets and chunk boundaries.
- 2
Generate
Each chunk computes its rows independently. All children of one parent stay in the same chunk.
- 3
Validate
Every chunk checks keys, references, types and rules on the values it just wrote.
- 4
Mask
Columns named in the mask block get keyed stand-ins, after validation, so masked keys still join.
- 5
Deliver
Parts, manifest.json and the reports go to disk, or to storage for hosted runs.
In the demo The demo runs a four-step version of this workflow, with real checks, in your browser.
The checks report
Proof the dataholds together.
A failed check is a result, not a crash. The run still finishes, and the report names the rows that broke each rule.
| Check | How |
|---|---|
| Primary keys | Unique by construction. Each value is verified by reversing the Feistel shuffle. |
| References | Every foreign key is checked against its parent's recomputed number. |
| Row counts | Root tables exact; child tables match the plan's offsets. |
| Rules | Every rule on every row, before masking. The report keeps the count and the first 20 failing row keys. |
| Types and nulls | Each value matches its column type; nulls appear only in nullable columns. |
| Uniqueness | Other unique columns are merged across chunks by value hash to find duplicates exactly. |
The report is JSON, with JUnit XML and SARIF versions for CI.
- primary_keys passed
- references passed
- row_counts passed
- types_and_nulls passed
- uniqueness passed
- rule: payments.paid_on >= parent.order_date
- failed on 2 rows: PAY-0004417, PAY-0000932
Reproducibility
Rebuild any run,and prove it matches.
Every run writes a manifest.json, and its SHA-256 is the run's output_sha256. Change one byte of output and that value changes.
What the manifest records
- Engine version
- Spec hash
- Seed
- Row overrides
- Every part: table, row range, row count and SHA-256, in order
output_sha256 = SHA-256(manifest.json)
The Reproduce command
$ dogm generate spec.yaml --seed 4242 --rows customers=48 --out ./dataRun it with the engine version recorded on the run and you get the same output_sha256. Every released CLI version will stay installable, so old runs stay reproducible.
CLI, from source Every hosted run shows its own version of this command under Reproduce. The CLI that runs it is built from source until its first release.
Webhooks
Live in the betaTell your systems when a run ends.
On the Pro and Team plans.
Events
- run.succeeded
- run.failed
- spec.needs_review
- Each body is signed with HMAC-SHA256 using a per-endpoint secret, and carries a timestamp to block replays.
- Failed deliveries retry with backoff for about 24 hours.
- Endpoints must be HTTPS; private address ranges are blocked.
- An endpoint whose every delivery has failed for 24 hours is disabled until you turn it back on.
CI gate
Fail the buildwhen the data is wrong.
The DOGM GitHub Action generates a spec's data in your workflow, validates it and fails the step if any check fails.
- 1Installs the dogm CLI on the runner and checks it against the release's SHA256SUMS.
- 2Runs dogm generate with the seed from the workflow file, then dogm validate.
- 3Uploads report.junit.xml and fails the step if any check failed.
Hosted mode works now: it runs an approved spec version with a project API key, on Pro and Team, and every beta workspace has Pro limits. Local mode, the default, makes no API call and is free on every plan, but it installs the CLI from its first public release, which isn't out yet.
# Local mode. Works once the CLI's first release is public.name: test dataon: [pull_request]permissions: contents: readjobs: data: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: newmachinesph/dogm/dogm-action@<commit-sha> with: spec: specs/ecommerce.yaml seed: 4242 version: 0.1.0Early-access beta
Try the demo now.Or start free.
The in-browser demo generates, masks and checks a connected sample, and nothing leaves your browser. Sign up and your workspace gets Pro limits at no cost while the beta lasts.
