Documentation for v2.8.0. Read the latest, v2.12.0.

Reference

Architecture

The building-block view of arc42: the context first, then one whitebox per box that opens, down to the modules of the code. Every box but the User is a link: a box with a whitebox leads to the level below, every other box to the chapter that documents it.

Reading the diagrams#

A building-block view shows a system as nested boxes: the context view has the system as one black box among its communication partners, and each whitebox opens one box to show the blocks inside it and the lines between them. The tables under each diagram carry the responsibility of every box and the text of every line. The diagrams are exported from the model in docs/architecture.yaml and rebuilt with the site.

Each diagram's legend shows a sample of the four line kinds:

business
Solid, the strongest line, with a plain arrowhead: the catalog flows. Provide, require, reports, catalog pushes and the queries that answer them.
admin
Thin and solid with a key as its head: operation and login. Administration, authentication, settings, the backup download and the directory lookups behind a login.
telemetry
Dotted with a gauge as its head: traces and metrics. They leave every request through middleware, so no box calls Telemetry on purpose.
async-outbound
Dashed with an envelope as its head: pushes that leave the request. Webhook deliveries from the outbox and the live updates streamed to the dashboard.

Context#

Context Sanshain Service «component» User «person» Build Tooling «external system» LDAP / Active Directory «external system» OIDC Provider «external system» Database Server «database» Observability Stack «external system» Webhook Receivers «external system» AI Client «external system» Backup Job «external system» dashboard REST bind auth code SQL OTLP / scrape webhooks MCP snapshot Legend dashboard web dashboard, graph, admin (HTTPS) REST provide / require / report (REST, API token) bind bind + group lookup (LDAP/LDAPS) auth code authorization code flow (HTTPS) SQL SQL (SQLite file or PostgreSQL) OTLP / scrape OTLP traces (gRPC) / Prometheus scrape /metrics webhooks signed event POSTs: JSON envelope or Slack/Teams message (HTTPS, HMAC-SHA256) MCP MCP tool calls with a read-only API token (Streamable HTTP) snapshot GET /admin/backup/sqlite with a full API token (HTTPS) admin async-outbound business telemetry

Sanshain sits between the build pipelines of many microservices: Build Tooling publishes specs and Backstage catalog files as Producer and fetches pinned endpoint snippets as Consumer, while people use the web dashboard to inspect versions and the dependency graph and AI clients ask the catalog over MCP. Human login can be delegated to LDAP/AD or an OIDC provider; machine clients always use API tokens, full or read-only. State lives in SQLite or PostgreSQL, a Backup Job pulls consistent snapshots, traces and metrics go to an optional observability stack, and every catalog fact is pushed as a signed event to the webhook receivers on the allow-list.

Communication partners#

PartnerDescriptionInputOutput
AI ClientClaude Code or another MCP client that asks the catalog questions: list and describe services, find an endpoint, read a spec, walk the graph, diff and blame versions. Read-only, rate-limited, catalog data only.MCP tool calls with a read-only API token (Streamable HTTP) (Sanshain Service)–
Backup JobHelm CronJob (or any scheduler) that downloads a consistent SQLite snapshot nightly and keeps the last N files; on PostgreSQL a pg_dump CronJob takes its place and never talks to Sanshain.GET /admin/backup/sqlite with a full API token (HTTPS) (Sanshain Service)–
Build ToolingMaven plugin, cargo-sanshain, Go CLI, JS client/GitHub Action and Conan plugin; publish specs and the Backstage catalog-info.yaml for a Producer and fetch pinned endpoint snippets for a Consumer during CI builds.provide / require / report (REST, API token) (Sanshain Service)–
LDAP / Active DirectoryOptional corporate directory that authenticates human users and supplies group memberships.–bind + group lookup (LDAP/LDAPS) (Sanshain Service)
Observability StackOptional OpenTelemetry collector receiving traces and Prometheus scraping request metrics.OTLP traces (gRPC) / Prometheus scrape /metrics (Sanshain Service)OTLP traces (gRPC) / Prometheus scrape /metrics (Sanshain Service)
OIDC ProviderOptional SSO identity provider for human login.–authorization code flow (HTTPS) (Sanshain Service)
UserDeveloper, maintainer or administrator who browses producers, versions, diffs and the dependency graph, and manages users, roles and settings.web dashboard, graph, admin (HTTPS) (Sanshain Service)–
Webhook ReceiversAny URL on the admin's allow-list, a Slack or a Teams incoming webhook: receives the signed events Sanshain emits (version published or deprecated, provide rejected, dependency recorded, branch cut, catalog recorded), retried from the outbox for 24 hours.–signed event POSTs: JSON envelope or Slack/Teams message (HTTPS, HMAC-SHA256) (Sanshain Service)

Building blocks#

NameResponsibility
Database ServerStores specs, version lines, endpoints, pins, branches, users, roles and audit log. Embedded SQLite by default, PostgreSQL for larger deployments.
Sanshain ServiceCentral registry for OpenAPI, AsyncAPI and gRPC specs: Producers publish versioned specs, Consumers download only the endpoints they pin, and the resulting dependency graph is tracked, shown, pushed as signed webhook events and served to AI clients over MCP.

Whitebox Sanshain Service#

Whitebox Sanshain Service Sanshain Service (whitebox) HTTP API «component» Web UI «UI» Application Services «component» Telemetry «component» Spec Parsers «component» Auth Providers «component» Persistence «database» Webhooks «component» MCP Server «component» 1 snapshot 1 snapshot User dashboard Build Tooling REST LDAP / Active Directory bind OIDC Provider auth code Database Server SQL Observability Stack OTLP / scrape fetch JSON use cases parse store auth ports Webhook Receivers webhooks AI Client MCP Backup Job snapshot emit events outbox manage hooks catalog queries SSE/WS Legend dashboard web dashboard, graph, admin (HTTPS) REST provide / require / report (REST, API token) bind bind + group lookup (LDAP/LDAPS) auth code authorization code flow (HTTPS) SQL SQL (SQLite file or PostgreSQL) OTLP / scrape OTLP traces (gRPC) / Prometheus scrape /metrics fetch JSON fetch JSON: reports, timelines, diffs, admin, login parse parse, validate, split, diff store SpecRepository port auth ports AuthProvider / DirectoryGroups / OidcFlow ports webhooks signed event POSTs: JSON envelope or Slack/Teams message (HTTPS, HMAC-SHA256) MCP MCP tool calls with a read-only API token (Streamable HTTP) snapshot GET /admin/backup/sqlite with a full API token (HTTPS) emit events emit facts: version published / deprecated, provide rejected, dependency recorded, branch cut, catalog recorded outbox hooks, outbox and delivery log (SpecRepository port) manage hooks manage hooks: create, test, rotate secret, list deliveries, redeliver (/admin/webhooks, per Producer and Consumer) catalog queries catalog queries: services, endpoints, specs, graph, diffs, blame [1] consistent SQLite snapshot (VACUUM INTO), streamed to the Backup Job SSE/WS SSE / WebSocket live updates (provide, require, audit events) admin async-outbound business telemetry

Hexagonal layering: the HTTP API and the MCP Server translate requests into use cases; Application Services hold the business rules and depend on traits in the domain layer (models, permissions, ports - shared by every box, so not drawn). Infrastructure adapters implement those ports: Auth Providers for human login and Persistence for storage. Spec parsing is kept apart from the use cases so that the free validator and the publish path apply identical rules. Webhooks are their own flow: the use cases write events into an outbox in the same transaction as the fact, and a background worker delivers them, so a slow receiver never slows a provide. Telemetry is fed by middleware layers on every request rather than by explicit calls. Line kinds: business (catalog flows), admin (operation and login), telemetry (traces, metrics), async-outbound (pushes that leave the request).

Contained building blocks#

NameResponsibility
Application ServicesUse cases (src/application): provide and require specs, version-line rules, release branches and graph timelines, Backstage catalog context, reports, administration, authentication with token scopes and permission checks, and the MCP catalog answers. Depends only on domain ports.
Auth ProvidersAdapters for human login (src/infrastructure/*_provider.rs, tls.rs): local Argon2 accounts, LDAP/AD bind and group lookup with connect and operation timeouts, and the OIDC authorization code flow.
HTTP APIAxum router, handlers and middleware (src/presentation, src/lib.rs): REST endpoints for provide/require/catalog/report/admin/auth, token and session authentication with full or read-only token scope, permission guards per route, SSE/WebSocket live updates, webhook management and the /metrics endpoint.
MCP ServerModel Context Protocol endpoint for AI clients (src/presentation/mcp.rs, src/application/mcp_service.rs; documented in the Developer track, MCP chapter): POST /mcp, Streamable HTTP, stateless, behind a read-only API token; tools list_services, describe_service, find_endpoint, get_spec, get_graph, diff_versions and blame answer from the catalog only, rate-limited per token and size-budgeted per answer.
PersistenceImplements the SpecRepository port: a Moka cache with a 10 s data TTL in front of interchangeable sqlx repositories for SQLite and PostgreSQL, including schema migrations, the webhook outbox tables and the SQLite snapshot.
Spec ParsersOpenAPI, AsyncAPI and Protobuf handling (src/openapi.rs, src/asyncapi.rs, src/proto.rs): validate documents, extract version and endpoints, cut endpoint snippets and detect breaking changes.
TelemetryOpenTelemetry tracer with OTLP exporter (src/infrastructure/telemetry.rs) and the Prometheus recorder behind /metrics; fed by the tracing and metric layers of every request.
Web UIBrowser dashboard (static/*.html, static/js, askama templates): producers, consumers, version timelines, diffs, dependency graph with peripheral resources and catalog context, reports, audit, observability, webhook and admin pages, account page with API tokens, plus the anonymous spec validator.
WebhooksOutbound events (src/application/webhook_service.rs, webhook_delivery.rs, src/infrastructure/webhook_sender.rs, ADR-0009): decides which hooks a fact reaches (global hooks plus the hooks of the Producer and of its Consumers along the require graph), writes the deliveries to the outbox with the fact, and a worker claims due deliveries, renders JSON, Slack or Teams bodies, signs them with HMAC-SHA256 and POSTs them with backoff for 24 hours; egress is limited to the admin's host allow-list.

External interfaces#

Partner outsideAttached toDirectionText
UserWeb UIinweb dashboard, graph, admin (HTTPS)
Build ToolingHTTP APIinprovide / require / report (REST, API token)
LDAP / Active DirectoryAuth Providersoutbind + group lookup (LDAP/LDAPS)
OIDC ProviderAuth Providersoutauthorization code flow (HTTPS)
Database ServerPersistenceoutSQL (SQLite file or PostgreSQL)
Observability StackTelemetrybiOTLP traces (gRPC) / Prometheus scrape /metrics
Webhook ReceiversWebhooksoutsigned event POSTs: JSON envelope or Slack/Teams message (HTTPS, HMAC-SHA256)
AI ClientMCP ServerinMCP tool calls with a read-only API token (Streamable HTTP)
Backup JobHTTP APIinGET /admin/backup/sqlite with a full API token (HTTPS)

Internal relations#

FromToDirectionText
HTTP APIWeb UIinfetch JSON: reports, timelines, diffs, admin, login
HTTP APIApplication Servicesoutuse cases
Application ServicesSpec Parsersoutparse, validate, split, diff
Application ServicesPersistenceoutSpecRepository port
Application ServicesAuth ProvidersoutAuthProvider / DirectoryGroups / OidcFlow ports
Application ServicesWebhooksoutemit facts: version published / deprecated, provide rejected, dependency recorded, branch cut, catalog recorded
WebhooksPersistenceouthooks, outbox and delivery log (SpecRepository port)
HTTP APIWebhooksoutmanage hooks: create, test, rotate secret, list deliveries, redeliver (/admin/webhooks, per Producer and Consumer)
MCP ServerApplication Servicesoutcatalog queries: services, endpoints, specs, graph, diffs, blame
HTTP APIPersistenceoutconsistent SQLite snapshot (VACUUM INTO), streamed to the Backup Job
HTTP APIWeb UIoutSSE / WebSocket live updates (provide, require, audit events)

Whitebox HTTP API#

Whitebox HTTP API HTTP API (whitebox) Provide Endpoints «component» Require Endpoints «component» Report & Validate Endpoints «component» Live Update Endpoints «component» Admin Endpoints «component» Auth Endpoints «component» Request Guards «component» [1] 3/3 [1] 2/3 [1] 1/3 [2] 3/3 [2] 1/3 [2] 2/3 [3] 5/6 [3] 4/6 [3] 3/6 [3] 6/6 [3] 1/6 [3] 2/6 Backup Job snapshot Webhooks [5] Persistence › [4] snapshot Web UI SSE/WS Legend [1] provide / require / report (REST, API token) — Build Tooling [2] fetch JSON: reports, timelines, diffs, admin, login — Web UI [3] use cases — Application Services › Provide, Require, Spec Query, Branches & Reports, Administration, Access Control, Catalog snapshot GET /admin/backup/sqlite with a full API token (HTTPS) [5] manage hooks: create, test, rotate secret, list deliveries, redeliver (/admin/webhooks, per Producer and Consumer) snapshot consistent SQLite snapshot (VACUUM INTO), streamed to the Backup Job SSE/WS SSE / WebSocket live updates (provide, require, audit events) [4] Persistence › SQLite Snapshot admin async-outbound business

The endpoint groups follow the public REST surface documented in api.yaml: Build Tooling provides, requires, pushes catalog files and pulls reports; the Web UI uses reports, live updates, administration and login; the Backup Job uses one admin route with a full API token. Every group hands its work to the Application Services; the admin group also manages webhooks and streams the SQLite snapshot. Authentication, token scopes, permission guards, CSRF and observability apply to every request alike, so they are drawn as the Request Guards band rather than as a box every line passes through.

Contained building blocks#

NameResponsibility
Admin Endpoints/admin/* (handlers/admin.rs, roles.rs, webhooks.rs): producers, versions, promotion, diffs, branches, trunk graph and timelines, consumers, users, roles, groups, maintainers, settings, cleanup, observability, audit, webhooks in three scopes with the egress allow-list, and the SQLite snapshot download.
Auth Endpoints/auth/login, /auth/oidc/login and callback, /auth/logout, /auth/register, /auth/me and /tokens (handlers/auth.rs): human login, sessions and API tokens with a full or read-only scope.
Live Update EndpointsGET /api/sse/updates and /api/ws/updates, plus /api/audit/timeline (handlers/api.rs): push provide/require events to the dashboard and graph.
Provide EndpointsPOST /provide, /provide/asyncapi, /provide/grpc and PUT /catalog/{systemname} (handlers/api.rs): a Producer publishes an OpenAPI, AsyncAPI or Protobuf spec version or its Backstage catalog-info.yaml.
Report & Validate EndpointsGET /report, /report/markdown, /report/isolation and the anonymous POST /validate (handlers/api.rs): dependency reports and the free spec validator.
Request GuardsCross-cutting request handling every endpoint passes (middleware.rs, lib.rs): API token (full or read-only scope) and session authentication, per-route permission guards, CSRF validation, CORS, compression, tracing and Prometheus layers feeding Telemetry, plus health/ready/metrics and HTML page routes.
Require EndpointsGET /require, /require/asyncapi, /require/grpc, POST /require-bundle, GET /endpoint-versions and /producers/{name}/versions (handlers/api.rs): a Consumer fetches pinned endpoint snippets and discovers versions.

External interfaces#

Partner outsideAttached toDirectionText
Build ToolingProvide Endpointsinprovide / require / report (REST, API token)
Build ToolingRequire Endpointsinprovide / require / report (REST, API token)
Build ToolingReport & Validate Endpointsinprovide / require / report (REST, API token)
Web UIReport & Validate Endpointsinfetch JSON: reports, timelines, diffs, admin, login
Web UIAdmin Endpointsinfetch JSON: reports, timelines, diffs, admin, login
Web UIAuth Endpointsinfetch JSON: reports, timelines, diffs, admin, login
Application Services › Provide, Require, Spec Query, Branches & Reports, Administration, Access Control, CatalogProvide Endpointsoutuse cases
Application Services › Provide, Require, Spec Query, Branches & Reports, Administration, Access Control, CatalogRequire Endpointsoutuse cases
Application Services › Provide, Require, Spec Query, Branches & Reports, Administration, Access Control, CatalogReport & Validate Endpointsoutuse cases
Application Services › Provide, Require, Spec Query, Branches & Reports, Administration, Access Control, CatalogLive Update Endpointsoutuse cases
Application Services › Provide, Require, Spec Query, Branches & Reports, Administration, Access Control, CatalogAdmin Endpointsoutuse cases
Application Services › Provide, Require, Spec Query, Branches & Reports, Administration, Access Control, CatalogAuth Endpointsoutuse cases
Backup JobAdmin EndpointsinGET /admin/backup/sqlite with a full API token (HTTPS)
WebhooksAdmin Endpointsoutmanage hooks: create, test, rotate secret, list deliveries, redeliver (/admin/webhooks, per Producer and Consumer)
Persistence › SQLite SnapshotAdmin Endpointsoutconsistent SQLite snapshot (VACUUM INTO), streamed to the Backup Job
Web UILive Update EndpointsoutSSE / WebSocket live updates (provide, require, audit events)

Whitebox Application Services#

Whitebox Application Services Application Services (whitebox) Provide «component» Version Rules «component» Spec Query «component» Require «component» Branches & Reports «component» Access Control «component» Administration «component» Catalog «component» [1] 1/6 [1] 2/6 [1] 3/6 [1] 4/6 [1] 5/6 [1] 6/6 Spec Parsers parse Persistence › [3] [4] Auth Providers auth ports resolve stream [5] count branch update permission version check helpers [2] 1/5 [2] 2/5 [2] 3/5 [2] 5/5 [2] 4/5 MCP Server catalog queries Legend [1] use cases — HTTP API › Provide Endpoints, Require Endpoints, Report & Validate Endpoints, Live Update Endpoints, Admin Endpoints, Auth Endpoints parse parse, validate, split, diff [4] SpecRepository port auth ports AuthProvider / DirectoryGroups / OidcFlow ports [5] retention settings (trunk max age) permission producer permission check version check check compatibility, propose next version helpers shared parsing / stream helpers [2] emit facts: version published / deprecated, provide rejected, dependency recorded, branch cut, catalog recorded — Webhooks catalog queries catalog queries: services, endpoints, specs, graph, diffs, blame [3] Persistence › Repository Cache admin async-outbound business

Split by use case rather than by entity: the write path (Provide) and the read path (Require) were pulled out of spec_service so neither flow is interleaved with rules it does not need, and the version rules were isolated as pure functions so they can be decided without a database. Release graphs and reports, administration, and access control each form their own module. Every module except Version Rules is reached from the HTTP API. All of them except Version Rules also store through the SpecRepository port; to keep the diagram readable that line is drawn only from Administration.

Contained building blocks#

NameResponsibility
Access ControlAuthentication and authorization (auth_service.rs, authz.rs, directory_roles.rs): password hashing, login and tokens, token scopes (a read-only token is refused on every route that changes the catalog), resolving an Actor with roles, groups and maintainer scopes, and short-lived caching of directory-derived roles.
AdministrationOperator use cases (admin_service.rs): delete producers, consumers and versions, deprecate versions, retention settings and cleanup of snapshots, dependencies and trunk data, user approval, webhook settings and destructive resets.
Branches & ReportsRelease graphs (branch_service.rs, report_service.rs, ADR-0004/0005): create, rename and delete sanshain-branches from trunk or another branch at an instant, timelines and graph diffs, and dependency reports scoped to dev, main or a branch (JSON, Markdown, isolation).
CatalogBackstage catalog-info use case (catalog_service.rs, src/backstage.rs, ADR-0007): a build pushes its catalog-info.yaml; the Peripheral Resources its Component depends on join the graph as shared nodes and travel into release cuts and diffs, and its owner, description, source location and links are shown on the system page and node.
ProvidePublish use case (provide_service.rs, ADR-0003): accept a spec for a Producer, enforce version and stability rules, store the version line with its endpoints, promote snapshots to GA and harvest AsyncAPI subscribes.
RequireConsume use case (require_service.rs, ADR-0003): resolve a Consumer's pin to an exact version, return just the requested endpoint or bundle, and record the dependency and trunk/branch pins it implies.
Spec QueryRead use cases (spec_service.rs): endpoint views, version listing, diffs, endpoint history and provide timeline, plus spec parsing and stream helpers shared with Provide and Require.
Version RulesPure functions (version_rules.rs) that decide whether a candidate version is honest for its version line and propose the correct next version; no I/O.

External interfaces#

Partner outsideAttached toDirectionText
HTTP API › Provide Endpoints, Require Endpoints, Report & Validate Endpoints, Live Update Endpoints, Admin Endpoints, Auth EndpointsProvideinuse cases
HTTP API › Provide Endpoints, Require Endpoints, Report & Validate Endpoints, Live Update Endpoints, Admin Endpoints, Auth EndpointsRequireinuse cases
HTTP API › Provide Endpoints, Require Endpoints, Report & Validate Endpoints, Live Update Endpoints, Admin Endpoints, Auth EndpointsSpec Queryinuse cases
HTTP API › Provide Endpoints, Require Endpoints, Report & Validate Endpoints, Live Update Endpoints, Admin Endpoints, Auth EndpointsBranches & Reportsinuse cases
HTTP API › Provide Endpoints, Require Endpoints, Report & Validate Endpoints, Live Update Endpoints, Admin Endpoints, Auth EndpointsAdministrationinuse cases
HTTP API › Provide Endpoints, Require Endpoints, Report & Validate Endpoints, Live Update Endpoints, Admin Endpoints, Auth EndpointsAccess Controlinuse cases
HTTP API › Provide Endpoints, Require Endpoints, Report & Validate Endpoints, Live Update Endpoints, Admin Endpoints, Auth EndpointsCataloginuse cases
Spec ParsersSpec Queryoutparse, validate, split, diff
Persistence › Repository CacheAdministrationoutSpecRepository port
Auth ProvidersAccess ControloutAuthProvider / DirectoryGroups / OidcFlow ports
WebhooksProvideoutemit facts: version published / deprecated, provide rejected, dependency recorded, branch cut, catalog recorded
WebhooksRequireoutemit facts: version published / deprecated, provide rejected, dependency recorded, branch cut, catalog recorded
WebhooksBranches & Reportsoutemit facts: version published / deprecated, provide rejected, dependency recorded, branch cut, catalog recorded
WebhooksCatalogoutemit facts: version published / deprecated, provide rejected, dependency recorded, branch cut, catalog recorded
WebhooksAdministrationoutemit facts: version published / deprecated, provide rejected, dependency recorded, branch cut, catalog recorded
MCP ServerSpec Queryincatalog queries: services, endpoints, specs, graph, diffs, blame
MCP ServerBranches & Reportsincatalog queries: services, endpoints, specs, graph, diffs, blame

Internal relations#

FromToDirectionText
Spec QueryRequireinresolve stream
Branches & ReportsAdministrationoutretention settings (trunk max age)
ProvideRequireoutcount branch update
AdministrationAccess Controloutproducer permission check
ProvideVersion Rulesoutcheck compatibility, propose next version
ProvideSpec Queryoutshared parsing / stream helpers

Whitebox Persistence#

Whitebox Persistence Persistence (whitebox) Repository Cache «cache» SQL Repositories «component» SQLite Snapshot «file storage» Database Server SQL Application Services › [1] store miss / write Webhooks outbox HTTP API › [2] snapshot Legend SQL SQL (SQLite file or PostgreSQL) store SpecRepository port miss / write on cache miss / writes outbox hooks, outbox and delivery log (SpecRepository port) snapshot consistent SQLite snapshot (VACUUM INTO), streamed to the Backup Job [1] Application Services › Administration [2] HTTP API › Admin Endpoints admin business

The cache is a decorator over the same port the SQL repositories implement, so the use cases never know whether a read came from memory or the database; cached data expires after 10 seconds, so a second instance sees changes without a shared cache. The backend is chosen at startup. The snapshot bypasses the port on purpose: it is a file-level copy made by the SQLite engine, not a query.

Contained building blocks#

NameResponsibility
Repository CacheMoka-based caching decorator around the SpecRepository port (src/infrastructure/cached_repository.rs); configurable and clearable from the admin settings.
SQL Repositoriessqlx implementations of SpecRepository for SQLite and PostgreSQL plus schema migrations (src/infrastructure/sqlite_repository.rs, postgres_repository.rs, database.rs, migrations).
SQLite SnapshotConsistent copy of the SQLite database made by the engine itself with VACUUM INTO (src/infrastructure/sqlite_snapshot.rs): one snapshot at a time, written to a temporary file next to the database, streamed to the caller and removed afterwards. PostgreSQL instances refuse the download and point to pg_dump.

External interfaces#

Partner outsideAttached toDirectionText
Database ServerSQL RepositoriesoutSQL (SQLite file or PostgreSQL)
Application Services › AdministrationRepository CacheinSpecRepository port
WebhooksRepository Cacheinhooks, outbox and delivery log (SpecRepository port)
HTTP API › Admin EndpointsSQLite Snapshotinconsistent SQLite snapshot (VACUUM INTO), streamed to the Backup Job

Internal relations#

FromToDirectionText
Repository CacheSQL Repositoriesouton cache miss / writes