Explain why a unified config has a given value
Trace one field of a config unified from base, team, and environment files back to the line that set it, and fail CI when a field still rests on a default.
How-to › Section 16
Spec languages for configuration, environment overlays, application models that generate artifacts, project generators, and templates that produce deterministic code.
7 guides in 4 topics. Every guide compares its approaches and shows the output its commands printed.
Configuration as a lattice: aontu (unification, types, defaults such as *8080 | integer, references, conjunction and disjunction, reading a contradiction error, the verbs vet, get, why, set, subsume, breaking, trim, relations, hash, mod, reaches, jsonschema; the LSP and the stdio MCP server) against CUE, Jsonnet, Dhall, Pkl, KCL and Nickel.
Trace one field of a config unified from base, team, and environment files back to the line that set it, and fail CI when a field still rests on a default.
Run counterexamples the spec must refuse beside vet, after every agent edit and at commit, so an agent that deletes a constraint to clear an error is stopped there.
One model for entities, services, messages, fields and environments, then generating artifacts from it: @voxgig/model (unify .aon files into one model.json, actions that generate artifacts, --watch), model-react and model-vue bindings, decision tables with decide, and the early-stage apigen and udk projects.
Regenerate TypeScript types and SQL within a second of a model edit, keep the last good output when a generator fails partway, and make the watch loop log why.
Scaffolding and repeatable generation: jostraca (component tree of Project, Folder, File, Content, Fragment, Slot, Inject, Copy; define then build; in-memory generation for tests; byte-identical TypeScript and Go implementations; inks interpolation) against Yeoman, Plop, Hygen, Cookiecutter, Copier, Nx generators, Projen and Rails generators; plus pushing one template change to hundreds of repositories (repo-manager, the gh CLI, the Terraform GitHub provider, Renovate presets).
Fan one workflow change out over hundreds of repositories with a dry run, a checkpoint and three known end states, against four ways to stop copying the file.
Turn a Python client layout into a Cookiecutter template with derived names, a hook that survives a second run, and a test that bakes it into a temporary directory.
Deterministic generated code: EJS, Handlebars, Mustache, Jinja and Go templates; AST-based generation with ts-morph, jscodeshift and go/ast; codemods across generated files; formatting after generation; golden-file and snapshot tests of generated output; stable ordering and no timestamps.
Sort the model, keep helpers pure, normalise line endings and compile strict, so a Handlebars template renders the same bytes everywhere, checked with sha256sum.
Rename a method across a directory of generated TypeScript with a jscodeshift transform, prove a second run changes nothing, then move the change into the template.
Retries, timeouts, pagination and auth are the same problems in every client. Voxgig generates them from your OpenAPI description, in 23 languages, from one model.
Since 2018, Richard Rodger has talked with developer advocates, event organizers, and the people who build developer-facing companies about the specifics of the work.