Skip to main content

scalio-catalog

Shared code for the Scalio Blueprint governance catalog: one desired state per tenant, used by Foundry (roll out), Citadel (keep, drift) and Rosetta (document). Concept and decisions BP1-BP12: https://claude.ai/artifact/8PYfvHPm17KsooerLU95Ar (scalio-docs concepts/governance-catalog.md, ADR 0027). Format contract: scalio-docs interfaces/catalog-format.md.

Nothing in this package is secret. The catalog content lives in the private repo scalio_blueprint; the signing seed stays in 1Password.

Documents

Kind What Owner
ResourceType Something in a tenant (name as in Microsoft365DSC/UTCM, e.g. AADConditionalAccessPolicy): properties, read/write endpoint, permission Scalio
Control One security statement: match, desired values, parameters, severity, texts DE/EN, frameworks Scalio, MSP, customer
Baseline Versioned bundle of controls with default values Scalio, MSP
Blueprint Building plan of a whole environment: variables, nodes in catalog resource types with dependsOn, at most one baseline (ADR 0035) Scalio (templates), customer (in Foundry)
ControlObjective What a tenant must reach in one area (control matrix of the Rosetta audit report), with the controls that prove it Scalio, MSP
Assignment Tenant -> baseline@version, mode, channel, values, exceptions, own controls customer
Pack Header of a signed package Scalio, MSP

References: id (highest), id@1.2.3 (exact), id@^1.2 (same major, at least 1.2). Assignments name an exact version.

Use in an app

from scalio_catalog import Catalog, compare, effective, plan, plan_upgrade, summary, verify

catalog = verify(package_bytes, TRUSTED_CATALOG_KEYS)        # signed pack from Compass or the image
eff = effective(catalog, assignment)                         # baseline + customer layer, master untouched
results = compare(eff, {c.id: read_resource(c) for c in eff.controls})   # app reads the tenant
print(summary(results))                                      # {"counts": ..., "score": 92}
plan = plan_upgrade(catalog, assignment, "scalio.kmu-standard@1.5.0")    # three-way, conflicts listed

rollout = plan(catalog, "scalio.project-workspace@1.0.0", {"project": "Apollo"}, tenant="contoso.ch")
for node in rollout.nodes:                                   # build order; ${node} refs via resolve_refs()
    ...
assignment = rollout.assignment                              # baseline of the blueprint, for Citadel/Rosetta

Control objectives: evaluate_objectives(catalog, results) gives per objective met, partly, not_met or not_checked from the control results (compare output or a mapping control id -> status). ok and excepted pass, drift and missing fail, everything else is not checked.

compare statuses: ok, drift, missing, excepted (all deviations covered by an active exception), not_read, removed (customer removed it), incomplete (a value is missing).

Values (later wins): control default, baseline parameters, value on the baseline entry, assignment values, assignment controlValues.<control>. Exceptions need a reason, end date and approver; expired ones count as deviations again and are listed in problems; at most 366 days when approvedAt is given.

Command line

scalio-catalog validate <folders...>          check structure, references, texts
scalio-catalog effective <assignment> <folders...> [--today 2026-11-01]
scalio-catalog plan <blueprint> <folders...> --set project=Apollo --tenant contoso.ch
scalio-catalog pack <folder> -o dist          sign (CATALOG_SIGNING_KEY or --key-file), --base for other packs
scalio-catalog verify <file> --key <public>   check a package
scalio-catalog keygen                         new key: seed to 1Password, public key into the apps
scalio-catalog schema > catalog-v2.schema.json

Editing in VS Code

Install the YAML extension (Red Hat) and add to the workspace settings of scalio_blueprint:

{ "yaml.schemas": { "./schema/catalog-v2.schema.json": ["controls/**/*.yaml", "baselines/**/*.yaml",
  "resource-types/**/*.yaml", "blueprints/**/*.yaml", "objectives/**/*.yaml", "pack.yaml"] } }

(scalio-catalog schema > schema/catalog-v2.schema.json writes the file.)

Release

Bump pyproject.toml and __version__, CHANGELOG line, merge, then "Freigeben" in the Scalio Dev cockpit (or Actions -> Publish with the version). Publishes to PyPI via trusted publishing (no token).

Metadata

Release files for scalio-catalog 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for scalio-catalog 0.3.0
File Size Uploaded Provenance Actions
scalio_catalog-0.3.0.tar.gz 30.9 kB With provenance Details for scalio_catalog-0.3.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for scalio-catalog 0.3.0
File Interpreter ABI Platform Actions
scalio_catalog-0.3.0-py3-none-any.whl Python 3 none any Details for scalio_catalog-0.3.0-py3-none-any.whl

Total release size: 57.5 kB

Release files / scalio_catalog-0.3.0.tar.gz

Download URL scalio_catalog-0.3.0.tar.gz
Size 30.9 kB
Tags Source
SHA-256 checksum
How to use checksums
302638bd7340aa2cbf2ea70c3c5b2d37c5190e27f7e5eac33554dd013074bb6b
BLAKE2b-256 checksum
How to use checksums
86df76d24aa22c9cbb62c49c051fc64a4a0134ece782906d39d5a01f36752a91
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.

Transparency log

Release files / scalio_catalog-0.3.0-py3-none-any.whl

Download URL scalio_catalog-0.3.0-py3-none-any.whl
Size 26.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e4649d76273c2f8b92cfe3b6462d7a81cefc04716da2105b42cac5eb741eb116
BLAKE2b-256 checksum
How to use checksums
936fa6dbe40d209831047f516a203694a7931e9931bfc4690bea7cdeb6f95651
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.

Transparency log

Security for scalio-catalog 0.3.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for scalio_catalog-0.3.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page