The one place where the ZenWave platform is described: what it is for, how the pieces fit, what crosses between repositories, why things are the way they are, and what comes next. It is written to be read by people first, and it is also the working memory for future work, articles, talks and agents.
New here? Parts I and II are enough to understand the platform. The rest is reference: go to the part you need.
- What it is: purpose, lifecycle, capabilities, principles.
- The world model: concept, representation, location, and the rules that govern everything else.
- The stack: repositories, layers, where each thing runs.
- Status: what is built, what is not, where documents and code disagreed.
- Glossary.
zenwave-architecture: from a manifest to a graph an agent can query.
- Workspace model: semantic IDs, kinds, the Query API.
- Source resolution: the contract, with a guide of worked examples.
- Operation bindings.
- Diagnostics.
- MCP adapter: how an agent reaches it.
dsl-kotlin and zenwave-lsp.
- Parser contracts: ZDL, ZFL and what they produce.
@outcomeand the formatter.- Server architecture: what is inside the language server.
- LSP adapter: two reference systems, two planes.
- Navigation and completion.
A capability followed end to end. Breaking one of these breaks another repository.
- EventFlow: from a ZFL file to an interactive diagram and back to the code.
- Bidirectional ZFL visual editing: proposed text-authoritative canvas editing, source preservation and host boundaries.
- Webview protocol: how a host drives the page.
- Visualization requests: the
zenwave/*requests, and their wire reference. - DSL parser output: what a consumer can rely on.
- KMP browser runtime: what every library owes a browser.
- SDK plugin catalogue: how the SDK describes itself to IDEs.
- Transitions without an id: from the validator to generated code.
- Vistas scope: the renderers and the page.
- VS Code client architecture, then its capabilities: hosts, languages, LSP client, SDK runner, EventFlow panel, model preview, model explorer, model actions, release.
- Backlog: everything still open, by repository.
- Resource discovery: reaching the documents around an architecture.
- Event Storming whiteboard: from the workshop to ZFL: standalone visual ZFL editor, then VS Code integration.
- Navigation brief: what to decide about clicking through models, for an interview.
- Web Explorer.
One short file per decision, with the reason. Read them before changing what they fix. Those marked "owner review pending" were taken by agents.
architecture/ what the platform is and how it fits together
<project>/ what concerns one project; the folder has the project's name
flows/ a capability followed end to end, across repositories
decisions/ one short file per decision, with the reason
roadmap/ designed and not built
work/ the backlog
contracts/ message and data shapes, when one stops moving (to come)
tools/ check-refs.mjs
What stays in each repository: README, CHANGELOG, LICENSE, CONTRIBUTING, RELEASING, release
notes and publishing procedures, files that are part of a published package, test fixtures and
generated output. Each repository has a docs/README.md that points here.
A document is prose. It has these parts, in this order, and skips any that do not apply:
- What it is and its status. One paragraph, with a date.
- Scope. In and out.
- Who owns what. A table, when more than one repository takes part.
- How it works today. Verified facts, each with where it was checked.
- Rules. The behaviour we want, in plain sentences. Add a short example when it helps. Mark each exists, partial, proposed or superseded.
- Open questions. Numbered, never deleted: when answered, move the answer into a rule or a decision and say so.
- Sources.
Link to the documents it relies on, and say what it does not cover. Not given-when-then. If a rule
needs a scenario to be understood, write the scenario as an example sentence. Rules migrated from
OpenSpec still use SHALL and given-when-then; rewrite them when you next edit them.
Every rule, fact, question and decision a reader may want to point at has a stable id and an explicit anchor placed before it:
<a id="ef-r4"></a>
**EF-R4 (proposed). The page does not know where code is.** ...
Prefixes: T today's facts, R rules, Q open questions. Ids are never reused and never renumbered.
Titles can change freely; the anchor cannot.
Code, tests and other documents cite them as spec:<document>#<id>, for example
spec:eventflow#ef-r4.
node tools/check-refs.mjs # scans the sibling repositories
node tools/check-refs.mjs ../zenwave-platform-vscodeIt fails when a citation names a document or id that no longer exists, and when a relative link between documents is broken. Run it in each repository's CI.
The spec change and the code change land in different repositories, so they are two commits. Order them so the spec says what the code is about to do: edit the document first, mark the rule proposed, and flip it to exists in the commit that makes it true.
Rules for working here, for people and agents, are in AGENTS.md.