Files
govoplan/docs/TARGET_MATURITY_EVIDENCE_RUNBOOK.md
T
zemion 2c56a0fc11
Dependency Audit / dependency-audit (push) Failing after 9s
Deployment Installer / deployment-installer (push) Successful in 6s
Security Audit / security-audit (push) Failing after 8s
feat: enforce signed target maturity evidence
2026-08-02 03:41:09 +02:00

6.6 KiB

Target Maturity Evidence Runbook

This runbook turns retained target-environment results into a sanitized, signed GovOPlaN capability-fit proof. It does not make a deployment suitable, certified, supported, or production-approved by itself. The proof records what independent authorities assessed against one exact installed release.

Roles and custody

Use separate trust domains for release signing, installation receipts, boundary assessment, and production approval. A private proof key must be provisioned outside the assessed application and its matching public key must already exist in a separately managed capability-fit-proof-authority-keyring.schema.json document. Do not store private keys, raw reports, credentials, personal data, backup material, or target endpoints in Git.

Each authority key lists only the scopes that role may attest. At least one supplied signing key must cover every claim, and the issuer rejects a key that:

  • is absent, inactive, expired, or revoked in the authority keyring;
  • expires before the proof;
  • does not match its independently provisioned public key;
  • reuses release-catalog or installer-authority key material.

Target run

Install one pinned catalog release and issue its installed-composition receipt with tools/assessments/installer-receipt.py. Exercise the actual target topology, including:

  • PostgreSQL and Redis as shared state services;
  • shared S3-compatible object storage;
  • at least two stateless API replicas and the intended worker topology;
  • fenced singleton work, ingress, certificates, proxy headers, and the real network/trust boundary;
  • provider health and freshness for every provider required by the product;
  • monitoring, alerting, failure response, accessibility, privacy, and security controls;
  • backup, isolated restore, failed-deployment rollback, and forward recovery.

For the recovery claim, retain the observed recovery point, measured RPO and RTO, database/object-store consistency result, and semantic reconstruction of the institutional and Service/Form reference journeys. Measure RPO from the last acknowledged durable effect that survives recovery and RTO until service health plus semantic reconstruction pass. Failed runs are evidence too and must use a negative result.

The private reports stay in the approved evidence store. Give each report an opaque artifact ID and each evaluated control a versioned opaque control ID.

Private claim manifest

Create a private manifest conforming to capability-fit-boundary-run.schema.json. Relative artifact paths resolve from the manifest directory. Paths are read and hashed by the issuer and are never copied into the signed output.

{
  "$schema": "./capability-fit-boundary-run.schema.json",
  "schema_version": "0.1.0",
  "evidence_kind": "govoplan.capability-fit-boundary-run",
  "proof_id": "target:production:20260802",
  "expires_at": "2026-09-01T00:00:00Z",
  "claims": [
    {
      "scope": "target_environment",
      "result": "passed",
      "control_ids": ["topology:shared-state-v1"],
      "artifacts": [
        {"artifact_id": "target:run-20260802", "path": "private/target.json"}
      ]
    },
    {
      "scope": "recovery",
      "result": "passed",
      "control_ids": ["recovery:restore-rollback-v1"],
      "artifacts": [
        {"artifact_id": "recovery:run-20260802", "path": "private/recovery.json"}
      ]
    }
  ]
}

Reference readiness needs positive target_environment, accessibility, privacy, security, operations, and recovery claims. Provider acceptance and production approval are separate scopes. A production-approval authority must not approve its own unreviewed target run.

Issue and verify

Issue only while the signed installer observation is current. Repeat --signing-key when multiple independent roles are needed. The command first verifies the catalog, independent catalog trust root, exact installed payload, installer receipt, and installer authority. It then hashes artifacts, signs the sanitized proof, verifies it immediately, and writes both proof and review with atomic private-file permissions.

./.venv/bin/python tools/assessments/boundary-evidence.py \
  --assessment /srv/govoplan/assessment.json \
  --catalog /srv/govoplan/catalogs/stable.json \
  --keyring /srv/govoplan/catalogs/keyring.json \
  --trusted-keyring /srv/govoplan/trust/catalog-keyring.json \
  --installed-evidence /srv/govoplan/evidence/installed.json \
  --installer-receipt /srv/govoplan/evidence/installer-receipt.json \
  --installer-authority-keyring /srv/govoplan/trust/installer-authorities.json \
  --claims /srv/govoplan/evidence/private/target-run.json \
  --authority-keyring /srv/govoplan/trust/proof-authorities.json \
  --signing-key authority-target=/run/secrets/target-proof-ed25519.pem \
  --output /srv/govoplan/evidence/target-proof.json \
  --review-output /srv/govoplan/evidence/target-proof-review.json

Add --expected-external-provider-subject provider-production when the claim manifest contains external_providers. This value is an opaque deployment ID, not a URL or credential.

Promotion gate

The general verifier can now be made admission-enforcing. These switches return a blocking exit status when a required claim is absent, expired, negative, revoked, or bound to another assessment, release, installation, or subject:

./.venv/bin/python tools/assessments/capability-fit.py \
  --catalog /srv/govoplan/catalogs/stable.json \
  --keyring /srv/govoplan/catalogs/keyring.json \
  --trusted-keyring /srv/govoplan/trust/catalog-keyring.json \
  --installed-evidence /srv/govoplan/evidence/installed.json \
  --installer-receipt /srv/govoplan/evidence/installer-receipt.json \
  --installer-authority-keyring /srv/govoplan/trust/installer-authorities.json \
  --boundary-evidence /srv/govoplan/evidence/target-proof.json \
  --boundary-authority-keyring /srv/govoplan/trust/proof-authorities.json \
  --require-reference-readiness \
  --require-production-approval \
  --output /srv/govoplan/evidence/admission-review.json

Use --require-external-provider-proof as well when the promoted product requires an external provider. Live admission must not use --verification-time; that switch is only for clearly labelled historical review.

Renewal and failure

Renew evidence after release, installed composition, deployment, control, or provider changes and before expiry. Revoke an authority key immediately after custody loss and rerun the affected assessment with a new independent key. Never copy a previous positive claim to a new release. Preserve negative and superseded receipts according to the approved evidence-retention policy.