Verify Machine-Read Facts Against the Org Source-of-Truth Before Publishing
When documenting infrastructure from values read off your own machine
— ifconfig, scutil --dns, route get, netstat -rn, defaults read, a local config file — those readings can carry personal or
host-specific artifacts that are not org facts. Publishing them to
shared documentation silently passes off your home network (or a stale
local override, or another VPN) as the organization's configuration.
The failure mode
A diagnostic session reads the live state of a tool on your laptop, the output looks authoritative, and environment-specific lines get lifted verbatim into an org doc:
- You run
scutil --dns/route getto investigate a VPN/tunnel. - The output interleaves multiple resolvers and routes — the org
tunnel's and your home network's, your other VPN's, a local
/etc/hostsoverride. - You document the interesting values without separating "this is the org's" from "this is mine."
- The doc now tells every reader that the org's internal DNS domain is
intra.lakuz.comwith resolvers100.95.0.251–.254— which was the author's home LAN, not the org's anything.
The tell: the value is specific and plausible, so reviewers don't question it — it reads as researched fact. The leak surfaces only when someone who knows the real environment says "that's not ours."
Canonical break (2026-06): an FVH Twingate troubleshooting DevGuide published
intra.lakuz.com+100.95.0.xas the org's internal DNS. Both were the author's home network, picked up from ascutil --dnsdump where the home resolver sat inresolver #1above the Twingate overlay. The real FVH resource domains (*.dataportal.fi,*.fvh.io,*.cluster.local) live intwingate/resources.tf. Corrected in a follow-up commit after the user caught it.
The rule
Before a machine-read value lands in org / shared / outward-facing documentation, cross-check it against the authoritative source — not the local readout:
- Network/DNS/routing facts → the IaC that defines them
(
twingate/resources.tf, Terraform, the DHCP/DNS config), notscutil/route/ifconfigon one host. - Endpoints, domains, IP ranges → the config that provisions them, not what resolved on your machine this session.
- Versions, flags, paths → the project's manifest/lockfile, not what happens to be installed locally.
If you cannot tie a specific value to an authoritative source, either omit it or describe the mechanism instead of the literal. The mechanism is environment-independent and cannot leak:
# Leaky — pins host-specific literals as if they were org facts
Internal DNS resolvers: 100.95.0.251–.254 ; search domain intra.lakuz.com
# Safe — verifiable mechanism, no machine-specific artifact
Twingate resolves configured resource domains (*.dataportal.fi, *.fvh.io,
*.cluster.local — see twingate/resources.tf) into the 100.96/12 overlay.
Verify by resolving the name: the answer should be a 100.96.x address.
Separating yours from theirs in a multi-source readout
scutil --dns, netstat -rn, and route get show all active
resolvers/routes interleaved. To attribute a line correctly:
- A value reachable only through the tunnel interface (
utunN) is the org's; a value onen0/Wi-Fi is local. - Cross-reference the route table: the org tunnel's routes point at the tunnel interface and match the IaC's resource ranges. Home/local resolvers route via your LAN gateway.
- When in doubt, the IaC is authoritative over any local readout.
Stale, not just misattributed
A fact true when drafted can be false when published. Re-derive mutable ones (dates, versions, IDs, counts) in the breath that publishes. 2026-08: a draft held through two review rounds needed a rolled-over date and 2 of 11 version IDs fixed at post time.
Relationship to sibling rules
git-plugin:git-upstream-fix-check— same instinct (check the authoritative source before acting) applied to vendored code.documentation-plugin:docs-single-source— link to the source-of-truth rather than transcribing; a value you can't link to the source is a value you probably shouldn't hardcode.- The
agent-patterns-plugin:cold-read-gatepattern — an outside reader catches what the author, steeped in their own environment, cannot see is host-specific.
Rationale
A wrong machine-read literal in shared docs is worse than no value: it is confidently specific, so it propagates as fact and misleads everyone who can't independently check it. The cost of verification is one lookup against the IaC at authoring time; the cost of skipping it is a published leak (sometimes of personal infrastructure) and a re-do once someone with ground truth notices. Prefer the verifiable mechanism over the convenient literal whenever the literal came from your own host.