Engineering Diagram Library — v1
Seven diagrams for the public site: what KEEP is, how Merlin is governed and bounded, how a Hub and its Spokes fit together, how sign-in and authentication work, how technician authorization works once someone is signed in, and two concrete proofs of engineering discipline (signal intelligence and Spoke trust). Sourced from KEEP's approved architecture documentation; every Planned/Future item is labeled as such, not presented as shipped.
One shared encoding across all six diagrams.
A direct code-inspection pass (2026-08-04, documentation/merlin-architecture-diagrams.html) found that of Merlin's three live surfaces, only the Incident Coordinator durably persisted both successful responses and ordinary refusals (into incident_log). Rather than requiring the other two surfaces to match that bar, a 2026-08-10 Director decision corrected merlin.md §8 itself: durable audit is now required only for actions that change the environment — Device Diagnosis and Onboarding Scan Analysis are analysis-only (never able to reach a mutating action, verified in merlin-rule-boundary.ts), so they were never actually required to carry that treatment. What remains, honestly tracked rather than closed by the rule change: their ordinary refusals still only reach console.warn, not a durable record — recorded as MERLIN-AUDIT-COVERAGE-PARTIAL in the project's roadmap. Standing-policy ambiguity events (§18) are, and always were, durably audited for all three routes (migration 068).
This diagram originally showed only Hub↔Control Plane, with a line labeled "license grant / deployment token" that turned out, on direct code inspection, not to represent anything that actually happens on that connection — the deployment token is delivered out-of-band, before the Hub's first registration call, not pushed back over it. Two real, separate things were missing: the Hub's ongoing heartbeat (distinct from its one-time registration, verified against control-plane/app/api/v1/heartbeat/route.ts), and the Spoke's own independent heartbeat directly to KEEPMSP.io (verified against spoke/heartbeat.js and control-plane/app/api/spoke/heartbeat/route.ts — not relayed through the Hub, contrary to how this diagram, and hub-spoke.md's own "What's Not Yet Built" list, previously implied). Both are now drawn.
KEEP → Merlin Governance → Merlin Narrative Layer → Future Merlin. Each layer sits strictly on top of the one below without replacing it. Verified against KEEP_PRODUCT_STRATEGY_V1.md §4 (layers 1–3, exact terms "KEEP," "Merlin Governance," "Merlin Narrative Layer") and merlin.md §13/§14/§17 (Future Merlin — a synthesis of three separate future-only sections, not a single named layer in the source).
KEEP supports three deployment authentication methods — a KEEP-native local account, Active Directory/LDAP, and generic OIDC/SSO — plus exactly where multi-factor authentication does and doesn't apply. A fourth, non-customer-facing development fallback exists in the code and is shown here for completeness, clearly separated from the three real options.
A Director can hand one contractor a local password inside an otherwise AD-integrated MSP — password_hash is checked per msp_techs row, not as a single deployment-wide switch. (Source: DECISIONS.md, "Auth Provider Abstraction.")
chooser.js and install-pyx.sh's network-type question still only offers ldap, oidc, or skip — skip maps to the insecure development-only fallback shown above (dashed, not one of the three supported methods), meaning a real deployment can end up on it by installer choice, not just by leaving env vars unset in dev. Wiring Local into the installer scripts is separate, unbuilt work.
What a signed-in session can actually do inside KEEP — a separate question from Figure 6's "how did this session get established," answered by an additive, union-based role model rather than a single rank.
Confirmed against a disposable KEEP deployment, not only reviewed in source: role assignment through the real administrative screen, the permission union it produces, AD/LDAP-group-driven role mapping and revocation on re-sign-in, and coexistence between a manually assigned role and a directory-derived one all behaved exactly as described above.