Jazyk

Jazyk /ˈjazɪk/

Compiler for natural language

Input
Documentation

Loose prose: requirements, product use cases, design pages. The compiler does not constrain the English you write.

Process
Reconciliation

A deterministic harness finds what changed; bounded LLM turns bring the graph in line with it, one document at a time, behind validation gates.

Output
The semantic graph

Entities, EARS requirements, derived relationships, and diagnostics. Persistent, edited in place, never regenerated.

Control
  • CLI to compile, watch, and query
  • MCP so agents read the same graph through the same tools
  • IDE via the Language Server Protocol
Usages
  • Code generation — one unit per entity
  • Test generation — one test per requirement
  • Model benchmark — grades whether a model can drive compilation

The thesis

Open-ended prompts to a model are unreliable; small, well-defined ones are not. Jazyk decomposes loose documentation into many small, well-defined units — entities and the requirements attached to them — so everything downstream operates in the reliable regime.

The graph, not the prose, is the build artifact. It persists across builds: nodes are created once and edited in place, ids never change, and human triage on a finding survives every rebuild. Downstream tools bind to entity ids and stay bound.

A turn, as it runs

Compilation is model-driven but harness-governed. The model reads a document's changed sections, searches the graph before creating anything, and stages mutations that commit only if every validation gate passes. From a real trace:

[reconcile-doc docs/customer.md] turn start (3 dirty, 0 stale)
→ read_section {"ref":"docs/customer.md#/customer/account-rules"}
→ search {"query":"Customer"}
← [{"id":"ent:customer","name":"Customer"}]
→ upsert_requirement {"ears":"Each Customer shall have a unique Email
   address, because the Email is the login identifier.", ...}
← {"created":true,"id":"req:customer-1"}
→ set_coverage {"section":"docs/customer.md#/customer","state":"covered"}
✓ done (6 staged, 6 rounds)

Changes stay small

A rebuild with nothing changed makes zero LLM calls. Editing one sentence dirties one document: one turn reconciles it, review turns re-judge the touched entities, and the graph diff is additive. Contradictions across documents surface as sticky diagnostics with the compiler's reasoning attached.

diag:contradiction-2  error  [req:payment-2, req:orders-3]
orders.md requires payment within 14 days; payment.md says 30.