Distribution API: schemas

The request and response bodies of the operations in this API.

EditionBiomeDto

PropertyTypeRequiredDescription
displayNamestringnoHuman name from the catalog projection, when the lock carries one.
idstringyes
installPolicystringnoWhat a MINIMAL install boots versus a DEFAULT one: required | default-selected | optional. Absent on a lock that predates the package model.
mandatorybooleanyesForce-on: the org cannot disable this biome. A DISTRIBUTION decision resolved per edition, never a property the biome self-declares — the same biome is mandatory in one edition and optional in another.
originstringyesProvenance posture — first-party or third-party.
servicesarray of stringyesDeployable service names this biome ships. Empty for a biome that ships only web or runtime components — such a biome is a selection unit that never boots a service, which is why a service count is not a biome count.
storeListedbooleanyesWhether the store lists this biome. Derived by the lock, never by this service.
targetstringyes
tierstringyes
versionstringyes

EditionBiomeVersionChangeDto

PropertyTypeRequiredDescription
fromstringyes
idstringyes
tostringyes

EditionDiffDto

PropertyTypeRequiredDescription
addedarray of stringyesIn the proposal, not in the running edition.
removedarray of stringyesIn the running edition, not in the proposal.
unchangedarray of stringyesIn both, at the same resolved version.
versionChangedarray of EditionBiomeVersionChangeDtoyes

EditionDto

PropertyTypeRequiredDescription
biomesarray of EditionBiomeDtoyes
contentCoordinatestringyesThe resolved lock’s own inputHash. It moves only when the edition’s locks change, so it identifies CONTENT rather than a build. This is the hash itself — the deployment pin spells it 0.0.N-h<hash16>, and that numbering is the deploy plane’s, not this service’s to invent.
idstringyes
platformServicesarray of stringyesPlatform service ids the lock binds.
resolvedAtstringnoWhen the distribution plane RESOLVED this lock — not when this deployment adopted it, and not when this request was served. Optional because the lock schema makes it optional; a lock without one is one nothing can date.

EditionDtoDataEnvelope

PropertyTypeRequiredDescription
dataEditionDtoyes

EditionPlanDto

PropertyTypeRequiredDescription
diffEditionDiffDtonoWhat changes against the running edition. Absent when the proposal did not resolve — there is nothing to diff, and emitting an empty diff would read as "changes nothing".
manifestobjectyesThe manifest an operator commits, verbatim.
problemsarray of EditionProposalProblemDtoyes
resolvablebooleanyesFalse when any problem is present. A plan with problems is never partially applicable — the distribution plane resolves all-or-nothing.
resolvedBiomeIdsarray of stringyesBiome ids the proposal would resolve to, sorted. A PREVIEW computed by the runtime preview resolver: tier and origin selectors, exclusions and the transitive requires closure are all applied, but the result is not a sealed lock and is not admissible for deployment — the deployable edition is what xema edition seal produces. Empty when the proposal is not resolvable; read resolvable before reading a count.
resolvedPlatformServicesarray of stringyesPlatform service names the proposal binds. A biome is a selection unit, not one service — so this is neither a subset nor a superset of the biome list.
universeEditionUniverseDtoyesThe biome set the proposal was resolved against.

EditionPlanDtoDataEnvelope

PropertyTypeRequiredDescription
dataEditionPlanDtoyes

EditionProposalDto

PropertyTypeRequiredDescription
descriptionstringnoOne-paragraph description of the edition.
displayNamestringyes
excludearray of stringnoBiome ids to exclude from the edition.
idstringyes
includearray of stringyesSelectors, in the grammar xema-distribution.json uses — { biome } or { tier }, plus the optional installPolicy/mandatory fields. It is NOT a list of ids: three of the four shipped editions are built from { tier } selectors, which a bare id list cannot express at all. Validated by the kernel’s own parseDistribution.
requiredPlatformsarray of stringyesPlatforms every image in this edition must serve. Verified at DELIVERY against the real registry, fail-closed — declaring one nothing builds makes the edition loudly undeliverable, never silently single-arch.

EditionProposalProblemDto

PropertyTypeRequiredDescription
codeone of "EDITION_MANIFEST_INVALID", "EDITION_ID_COLLISION", "EDITION_BIOME_UNKNOWN", "EDITION_RESOLVER_REFUSED", "EDITION_LOCK_PREDATES_NEXUS_FACTS", "EDITION_SEED_LOCK_NOT_PLANNABLE"yes
detailstringyes

EditionUniverseDto

PropertyTypeRequiredDescription
biomeCountnumberyesHow many biomes a proposal may select from here.
distributionIdstringyesThe edition whose lock supplied the universe.
narrowerThanPlanebooleanyesTrue when the universe is narrower than the distribution plane’s index. Always true for a deployment-side plan — a deployment never carries every biome in the monorepo. Rendered so an operator reads the count knowing what it was drawn from.
sourcestringyesWhere the universe came from. running-lock is the only value today: the edition this deployment runs, which is what the chart mounts.

ProblemActionableBy

Who can act on this refusal: user (correct the input, sign in), org-admin (an administrator of the organisation), platform (the operators of this installation), none (nobody — it cannot succeed). ABSENT when not known; never guessed.

Type: one of "user", "org-admin", "platform", "none"

ProblemDetailsDto

RFC 9457 problem document. The declared members are the reserved core; extension members are TOP-LEVEL and OPEN, owned by the refusing plane.

PropertyTypeRequiredDescription
actionableByProblemActionableBynoWho can act on this refusal: user (correct the input, sign in), org-admin (an administrator of the organisation), platform (the operators of this installation), none (nobody — it cannot succeed). ABSENT when not known; never guessed.
codestringyesSCREAMING_SNAKE_CASE. The machine-branchable refusal, and the value a policy rule, a retry predicate and a UI branch all name.
detailstringnoHuman-readable and specific to THIS occurrence.
errorsarray of ProblemFieldIssueDtonoField-level issues, when the refusal is about the request body.
instancestringnoURI reference identifying the occurrence — a request path, a run, a row.
paramsmap of string or number or booleannoSafe i18n interpolation values for the message keyed by code — typed and allowlisted per code by its declaration. Never server-authored copy, never internal diagnostics.
retryProblemRetrynoWhat a retry can achieve: transient (later, unchanged), after-change (only after someone changes something), never (a defect until a fixed version ships). ABSENT when not known.
statusnumberyesThe HTTP status code, repeated in the body so a logged document is self-contained.
titlestringyesShort, human-readable, and STABLE for a given type. Never per-occurrence — that is detail.
traceIdstringnoW3C trace-context trace-id, present when the caller sent a traceparent. Omitted rather than invented when it did not.
typestringyesAbsolute URI identifying the refusal TYPE. Derived one-to-one from code, so a caller may branch on either and can never be told two different things. Never about:blank.

ProblemFieldIssueDto

PropertyTypeRequiredDescription
codestringnoSCREAMING_SNAKE_CASE code of THIS issue, for a frontend i18n key. Present when the issue was minted by a declared problem.
detailstringyesProse for logs and developers. A frontend localises from code + params instead.
paramsmap of string or number or booleannoSafe i18n interpolation values for this issue's code.
pointerstringyesRFC 6901 JSON Pointer into the request body. Root is "/".

ProblemRetry

What a retry can achieve: transient (later, unchanged), after-change (only after someone changes something), never (a defect until a fixed version ships). ABSENT when not known.

Type: one of "transient", "after-change", "never"