Skip to main content

Configuration releases

Configuration releases turn tenant setup into a reviewable artifact. The signed package covers tenant policy, applicant branding, current verification workflows, Country Assurance Pack definitions, provider metadata and exact workflow-to-BPMN bindings.

The release plane requires an administrator or compliance operator session. Tenant API keys cannot export or promote configuration.

Safety contract

ControlBehaviour
IntegrityEvery package is canonicalized, SHA-256 hashed and signed with Ed25519. Stored packages are verified again before validation or promotion.
SecretsPassword, token, API-key, private-key and credential fields are rejected. Provider credentials remain in the target environment's secret store.
Tenant boundaryA signed package can only be imported by the tenant named in its payload.
SandboxOne administrator or compliance approval applies the release.
LiveTwo distinct administrator/compliance users must approve. The requester cannot approve their own promotion.
Country assuranceImported Country Assurance Packs are created as drafts. Legal, data-licence and evidence approval must occur separately.
RollbackRollback is another two-person release. History is never overwritten or deleted.

1. Export the current baseline

POST /v1/configuration/packages/export
Authorization: Bearer <operator-session>
Idempotency-Key: 6575853b-3746-4a04-b8a4-1f61387d533f
Content-Type: application/json

{}

The response is a portable envelope:

{
"package": {
"payload": {
"schema": "proofline.configuration.v1",
"packageId": "cfg_…",
"tenantId": "ten_…",
"sourceEnvironment": "sandbox",
"exportedAt": "2026-07-22T12:00:00.000Z",
"configuration": {
"settings": {},
"branding": {},
"workflows": [],
"countryPacks": [],
"providers": [],
"processBindings": []
}
},
"payloadSha256": "…",
"signatureAlgorithm": "Ed25519",
"signatureBase64": "…",
"publicKeyBase64": "…",
"keyId": "ed25519:…"
}
}

Commit the editable source to a protected repository, not the signed envelope. An editable source contains only sourceEnvironment and configuration.

2. Validate and seal edited source

import { Assayra } from "@assayra/sdk-web";
import source from "./proofline.configuration.json" with { type: "json" };

const assayra = new Assayra({
baseUrl: process.env.ASSAYRA_BASE_URL!,
token: process.env.ASSAYRA_OPERATOR_SESSION!,
});

const sealed = await assayra.configuration.seal(source);
console.log(sealed.package.payload.packageId, sealed.package.payloadSha256);

POST /v1/configuration/packages validates the complete typed source, confirms required commercial modules and orchestration dependencies, rejects secret-bearing fields and signs the result. A sealed package is immutable; create another package for further changes.

3. Inspect the target diff

const candidate = sealed.package.payload.packageId;
const review = await assayra.configuration.validate(candidate, "live");

if (!review.validation.valid) {
console.table(review.validation.errors);
throw new Error("Configuration is not eligible for live promotion");
}

for (const change of review.diff) {
console.log(change.path, change.before, change.after);
}

Diff entries use stable JSON paths such as configuration.branding.productName. Validation is repeated immediately before the second approval, so stale prerequisites fail closed.

4. Request and approve live promotion

const requested = await assayra.configuration.promote(candidate, "live");
console.log(requested.promotion.status); // pending

A different logged-in administrator or compliance officer completes the release:

await checker.configuration.approve(requested.promotion.id);

The database transaction applies tenant settings and branding, creates immutable successor workflow versions, preserves applications pinned to older versions, creates changed Country Assurance Packs as drafts, updates only non-secret provider metadata and resolves process bindings to their exact deployed BPMN definition.

5. Roll back safely

const rollback = await checker.configuration.rollback(requested.promotion.id);
// A different approver completes the rollback.
await administrator.configuration.approve(rollback.promotion.id);

Rollback re-applies the captured prior configuration as a new governed release. It does not delete the failed release, erase approvals or rewrite application evidence.

Import a signed package

Use import when moving an Assayra-signed envelope between isolated deployments that share the same tenant identity and trusted release authority:

const imported = await assayra.configuration.import(envelope);
if (!imported.verification.valid) throw new Error("Package did not verify");

An altered hash, signature, signing key or tenant ID is rejected before the package enters the release ledger.

Error codes

CodeMeaning
configuration_contains_secretA prohibited secret-bearing field or URL parameter was found.
configuration_signature_invalidImported payload hash or Ed25519 signature failed.
configuration_package_integrity_failedA stored package no longer verifies against the active release authority.
configuration_validation_failedWorkflow, entitlement, process or live-policy validation failed.
configuration_distinct_approver_requiredThe requester attempted to provide the second approval.
configuration_not_rollbackableThe release is not applied, was already rolled back or already has a pending rollback.