The SOA source-of-truth NetworkPolicy and wiring are generated from.

Service-flow / API model

Intent — A Backstage-dialect model of the service-oriented architecture — every service, its APIs, inter-service auth, URL wiring, and frontend trees — that is the source of truth the deployment, NetworkPolicy, and API docs are generated from and validated against.

SummaryThe SOA source-of-truth NetworkPolicy and wiring are generated from.
TargetBridge · System models
Formtyped-ir
EnforcementHard (deterministic) — a typed model held true by bidirectional parity gates (tree↔yaml, handler↔spec, call-graph↔model)

Motivation — the failure it kills

A service-oriented deployment has many moving parts that must agree: inter-service auth headers, URL env vars, NetworkPolicy, the SOA_SERVICES deploy table, the public-API contract, the frontend trees. Kept in sync by hand across code + YAML + deploy scripts, they drift — a service gains an endpoint the NetworkPolicy doesn't allow, a handler diverges from its spec, a frontend tree exists with no entity. Each drift is a production-shaped bug, and there are many surfaces to drift.

Why it's not just "configure each piece where it's needed"

Per-piece configuration means the same fact (a service's auth, its URL, its APIs) is restated in code, in deploy YAML, in NetworkPolicy — and restated facts diverge. The service-flow model is the single Backstage-dialect source of truth: NetworkPolicy, service catalog, and env wiring are generated from it, and bidirectional drift gates enforce it (every frontend tree ↔ a matching entity and every entity ↔ a real tree; every handler ↔ its OpenAPI spec; the call-graph ↔ the declared model). Hand-synced restatements are the failure: the same auth header lives in code, in deploy YAML, and in the NetworkPolicy, and the day one moves the others keep the old value with no gate to notice. One generated, parity-checked source leaves nothing to hand-sync and nowhere for the three copies to disagree.

Mechanism

The service YAML uses the Backstage entity dialect (kind: Component | API | System) with <org>.dev/* annotations for the SOA fields; a web-API model holds OpenAPI fragments; wire-contract and config models capture the inter-service wire schemas and config. Generators emit NetworkPolicy, the service catalog, env, and public-API docs from these (see model-driven-codegen). The drift lints enforce parity in both directions.

Prerequisites

Consequences & costs

Known uses

Related mechanisms