WAD folder layout
wad.wcl # root: `wad` metadata block, schema_version, imports
schema/base.wcl # block schema — scaffold-owned, synced, never hand-edited
schema/kinds.wcl # symbol_set vocabularies — extend freely
schema/extensions.wcl # system-specific custom blocks (+ merging @document)
data/main.wcl # imports every view hub
data/<view>/main.wcl # per-view hub: one import line per data file
data/generated/ # extractor-owned, committed; main.wcl imports each output
scripts/ # extractor scripts (uv single-file Python)
wdoc/book/main.wcl # site + toc + shared helpers (the projection)
wdoc/pages/*.wcl # one file per view: landing page + per-entity page repeaters
_site/ _md/ # rendered output (gitignored)
Everything lives in the wcl.wad namespace (declared at the top of every schema and data file), so WAD block kinds never collide with wdoc's — which is why the C4 unit is plain container. A WAD is fully interpretable — check + render — with nothing but the wcl binary; the canonical schema ships inside the wcl init wad scaffold and is synced to instances.
Adding data = write a block file under its view + one import line in that view's hub. Every top-level block carries an @inline(0) id that becomes its page route (A-Za-z0-9_- only), and diagram-node kinds (system / container / component / externalsystem / persona / environment / infranode / screen) share one id space so relation endpoints resolve unambiguously.
Gather-list names for templates: wads, stakeholders, raci, adrs, relations, externals, systems, containers, sw_components (bare components collides with wdoc's own document schema), code_items, environments, infra_nodes, deploy_targets, repositories, pipelines, releases, personas, use_cases, sops, standards, domain_objects, terms, specs, doc_items, screens, articles.