Reference
DIS V18 — The Constitutional Compiler
DIS compiles an .adl schema into a complete, buildable application. No runtime, no server, no database connection: it reads files and writes files.
Backend-only services
Every organ or service can be emitted without a frontend. Declare topology frontend: { kind: "none" } and DIS honors it: no React/Next/Vue tree, no frontend Dockerfile, no frontend service in docker-compose or k8s.
meta:
domain: "my_backend_service"
topology database: { kind: "sqlite", port: 5432 }
topology frontend: { kind: "none" } # backend-only: no frontend emitted
service Api:
backend: "axum"
database: "sqlite"- The historical default is unchanged: no frontend declared means a React frontend is emitted.
- Only an explicit
"none"(also"false","null","disabled") produces a backend-only service. - docker-compose.yml and k8s/deployment.yaml then contain only database + backend services.
Zero-warning generated backends
The axum emitter gates boilerplate on the feature manifest, so a cargo check on a generated backend compiles with 0 warnings:
scheduler.rsis emitted only when a@cronannotation exists; its imports and thestateparam are emitted only when the emitted job bodies use them.authority.rsemitscan_vetoonly when veto relationships exist,authority_chainonly when graduated levels are used, and dead fields carry#[allow(dead_code)].
Cron expressions execute real operations
@cron: "*/60 * * * * *" and other cron expressions now emit an actual per-tick execute body in scheduler.rs, calling the generated operations::execute_<op> with a zero-valued payload — not just a log line.
operation ReportMetrics:
input: "count:u64"
output: "ok"
handler: rust
Ok(serde_json::json!({"count": req.count}))
@cron: "*/60 * * * * *"MCP tool surface
External agents drive DIS through the SID MCP server:
compile_adl/validate_adl/estimate_adl— compile, validate, and size an ADL schema.get_dis_docs(audience=...)— the live docs:adl_quickref,full_manual,error_recovery,external_mcp.get_workspace/get_file/put_file+promote_workspace_file— browse, edit, and preserve files across regeneration.task_get/task_result/task_cancel— mission lifecycle;run_workspace_step— allowlisted verification (cargo check etc.).
Acceptance gate: dis_status = 0 only means the compiler accepted the ADL. The real gate is the generated build — cargo check must be 0 warnings, 0 errors.