diff --git a/02-DECISIONS/0120-a-roster-fact-carries-its-format-as-a-template.md b/02-DECISIONS/0120-a-roster-fact-carries-its-format-as-a-template.md index 8b28a97..c142cda 100644 --- a/02-DECISIONS/0120-a-roster-fact-carries-its-format-as-a-template.md +++ b/02-DECISIONS/0120-a-roster-fact-carries-its-format-as-a-template.md @@ -74,6 +74,15 @@ The two built-in projections render through the same path any module uses: - **dnsmasq's zones** move into dnsmasq. The `local=`/`address=` grammar is dnsmasq's configuration language, and it now lives in dnsmasq's manifest, where the module that runs dnsmasq owns it. +**A fact also says whether its file is the mesh's whole or a region of the machine's.** A hosts file +is the machine's — its `localhost`, the operator's lines, another tool's marked blocks — so +`node-names` is `shared`: the mesh owns only its region and keeps the rest byte for byte, the host +laying it down `into: block` +([ADR 0102](0102-the-mesh-writes-into-a-shared-file-never-over-it.md), hq issue 128). A resolver's +zones file is the mesh's whole, and is not shared. The template renders the content either way; +`shared` decides how the host writes it. This composes with hq 128 rather than replacing it: the +region *mechanism* is the host's, the region's *format* is the module's template. + **The names-vs-machines distinction is the template's choice** ([04-ISSUES/111](../04-ISSUES/111-the-resolver-is-told-names-the-mesh-serves-not-only-machines/00-report.md)): a container's hosts ranges `.Names`, so a routed name resolves to the machine serving it; a resolver told the mesh's suffix is its own ranges `.Machines`, or a routed name written there with the suffix