Clone-and-run reference implementation · version 4.4.3 · Apache-2.0
CordovaOS is a synthetic nation: ten government institutions, 1,460 Governed Data Records, and zero lines of integration code between them. Run it on your own machine, trace a contagion across four agencies in one question, ask which people eight agencies hold records for and get 250 of them across 1,308 records in a quarter of a second, then click any value and see the record it came from, the component that made the join, and the published model that governs both.
Nothing to sign up for and nothing hosted. After the first pull the whole stack runs with no outbound network. The timings you see are the triple store answering, not a recording.
Two ways in
If you sign for platforms
Open the console and read the front page: ten domains, 1,460 records, seven of them stating an absence instead of inventing a value. Step through the Contagion in seven beats. On any beat, switch from the table to the graph and watch the trace cross from a clinic to a port to a police record to a campus. Click a node. The record opens, and beside it the model that governed it, read from the published schema rather than from the record.
The question to ask at the end is the one your current stack cannot answer: show me why this answer is admissible. Here, every number has a route back to a validated record.
What to look at, and what to askIf you build data or graph systems
The ten published data models and the ten generated applications are committed exactly as
SDCStudio produced them, under sdcstudio_downloads/,
before anything the demo adds around them. Each record is validated against its XSD 1.1
schema, stored once, and projected into GraphDB as its own named graph with RDF-star
reifiers for every field. The seven SPARQL queries are plain files you can read, edit and
rerun in the explorer or straight in GraphDB Workbench.
There is no mapping table. A cross-agency join is a component two records share: the same National ID component composed by eight of the ten models, the same Business Registry Number by four, the same address. Since 4.4.0 the ten models are themselves composed from the published component libraries by identifier slot, the patient and encounter from FHIR, the incident, arrest and vessel from NIEM, the person and address from Default, provenance and audit from ProvGov, with Cordova adding only what only Cordova defines. Since 4.4.2 every quantity in every model carries a unit its schema enumerates, so a value in the wrong unit fails validation instead of passing as a string. The graph view draws exactly that and names the component on every edge.
For the people who run itSee it
Run it
You need Docker or Podman with the compose plugin, about 6 GB of free RAM, and Python 3.12 on the host for data generation. The first run pulls the container images; after that the stack runs disconnected.
Generation takes seconds. Loading is the cost: every instance is validated
against its XSD 1.1 schema, written to PostgreSQL and projected into GraphDB as its own
named graph. Expect about thirty minutes on a laptop for the demo dataset, and hours for the
full 25,000-resident nation with make demo-full.
The dataset is deterministic. Same records, same identifiers, same values and the same relationships on every machine, so a colleague who runs it tomorrow sees exactly what you saw today.
Every release also publishes the web image to GitHub's container registry. make pull fetches it instead of building locally.
Then open
http://localhost:18000/console/ the record console. Start here.
http://localhost:18000/demo/ the dashboard, the Contagion, and the query explorer.
A correct run shows these numbers on the console front page:
| Records loaded | 1,460 |
| Named graphs in GraphDB | 1,460 |
| Domains | 10 |
| Records stating an absence | 7 |
What is inside
Ten generated applications
Civil Registry, Vital Statistics, Healthcare, Education, Employment, Business Registry, Property, Tax and Revenue, Law Enforcement, Maritime Port Authority. Each was modeled in SDCStudio and generated into one Django project. They interoperate because they share the SDC4 Reference Model, not because anyone wrote an adapter.
Governance-composed records
Alongside its data, every instance carries who, what, where and when it came from, and a structural Audit record, bound to the data at the source. Not reconstructed later from a pipeline log that may or may not still exist.
Absence, stated
Where a required value is missing they carry an ISO 21090 null flavor naming the reason, ASKU, asked but not known, instead of a zero or a 1900-01-01 that would parse downstream as real. They are counted on the front page, linked from it, and carry an i-ev- identifier so the fact survives outside the document.
The console
Table, XML and graph, rendered from one validated instance. Beside them, Governed By: the component, its Reference Model type, its constraint, and what happens when the value is absent, read from the published schema. A resource view in a triple store shows what a node asserts; this shows what it was permitted to assert.
The Contagion
Patient zero presents at a clinic. The narrative pulls his civic footprint, his employer's network, the households at risk, the vessel that docked, the quarantine response and the campus contacts, one saved query per beat. Every beat has a table and a graph, and every node in the graph opens the record.
Seven saved questions
The queries are files in sparql/. The explorer runs them and shows them. There is no natural-language-to-query illusion in the demo: a saved, governed question with a known query behind it, and GraphDB Workbench one click away for anyone who wants the engineer's tools.
Why it is not a dashboard
1
Click any value and get its lineage
Because provenance is bound to the instance, not stitched together afterward.
2
The same question returns the same answer
Deterministically validated records and a deterministic dataset. Run it twice, on two machines, and compare.
3
The answer crosses agencies with its meaning intact
And the graph shows you exactly where it crossed, and on which component.
The demo proves the machinery on a nation we invented. The 30-Day Audit runs the same question against yours. And if the demo earned fifteen minutes of your time, a star on the repository tells the next engineer it is worth theirs.
Found something wrong, or something missing? Open an issue. The repo is Apache-2.0 and the models are in it, unmodified.