Genesis Trust Framework · operational document

DevOps and releases

How Spazio Genesi ETS's digital work attestation system is developed, verified and released without putting at risk the single environment users depend on.

⚠️ Status: progressive implementation. This document describes the process as adopted by design; the Implementation status table states, phase by phase, what is already running and what isn't. Consistent with the registry's principle (evidence, not declarations), nothing here is presented as active before it is.

IT·EN

Principles

  1. A single production environment, never an unobserved bundle. Every change passes through a replica (staging) or a zero-traffic preview of production itself, before a user ever sees it.
  2. The gate is human and tracked. No production release without the maintainer's explicit approval, recorded on GitHub (a production environment with a required reviewer).
  3. Rollback in seconds, without a rebuild. Cloudflare Workers keeps previous versions: wrangler rollback reverts immediately.
  4. Staging never holds real data. Staging databases are born from the schemas versioned in the repo plus synthetic data: copying production data would be a GDPR-relevant processing with no purpose.
  5. Production secrets never leave their perimeter. Staging has its own secrets, generated for the purpose. In particular the secret that signs attestations — never rotated for this project — exists only in production and in the escrow vault.
  6. Config cannot drift. Production and staging live in the same configuration file (wrangler.toml, an [env.staging] block): every configuration change touches both in the same commit, drift is structurally impossible.

The same process — replicated staging, CI, human gate, rollback in seconds — is also adopted for the organization's other services.

The parts: production and replica

Detailed map

ComponentProductionStaging
imgauth (engine)Worker imgauth · imgauth.spaziogenesi.orgimgauth-staging · workers.dev only
Database / archiveimgauth-health · imgauth-pdf-archive (EU)-staging twins, no real data
PDF signing (authart)Azure, TSA timestampnot replicated in v1: unsigned PDF
Anti-bot / notificationsreal Turnstile · Telegramtest keys · silent
authweb (interface)GitHub Pages · attestazione.spaziogenesi.orgcopy generated from the same source, pointed at staging

Release flow

Runbook

Ordinary release
  1. PR with the change → checks must be green.
  2. Merge to main → staging updates itself; check the smoke test.
  3. Manual test on staging if the change is UI/flow-related.
  4. Approve the production job on GitHub → 0% preview → promotion.
  5. Production smoke: /ping (expected version), /api/status all green.
  6. Tag vX.Y.Z if there's a version bump; documentation per convention.
Urgent hotfix

Identical to an ordinary release — the chain IS the fast path (automatic staging + one approval click). Skipping staging is not supported: if production is already broken, rollback is faster than any fix written in a hurry.

Rollback
npx wrangler rollback   # choose the previous version

Then: production smoke, a note on what went wrong, a calm fix through the normal chain.

Adding staging to a new module
  1. Create the module's -staging D1/R2 (EU where relevant).
  2. An [env.staging] block in wrangler.toml: redeclare all bindings (wrangler envs don't inherit from the top level).
  3. Schemas applied to the staging D1, new secrets with --env staging.
  4. Smoke test, then CI following the reference model (imgauth's workflow).

Declared limits

Honesty about the process: what the replica doesn't cover, by documented choice.

Implementation status

PhaseContentStatus
0Inventory and prerequisites✅ 2026-07-11
1Engine code ready for multi-environment✅ 2026-07-11
2Attestation engine staging✅ 2026-07-11
3CI (PR checks, automatic staging + smoke)✅ 2026-07-11
4Production gate (approval, 0% preview, rollback tested)✅ 2026-07-11
7Staging web interface✅ 2026-07-11
8Documentation publication + registration in the GTF✅ 2026-07-11

The table is updated when each phase closes (date + outcome). The process is registered in the GTF registry as a decision, process and control (ADR-P24 CTL-cicd-pipeline, status: active since 2026-07-11) with verifiable evidence: CI runs are public on the GitHub repos — anyone can check that the declared process is the one actually practiced. Phases 5 and 6 of the P24 plan concern a different project and are not part of this path.