Shared governance-pack metadata, manifest, and packaged document contracts for SSOT.
Project description
ssot-pack-contracts
Shared metadata, manifest, and packaged-document contracts for installable SSOT governance packs.
ssot-pack-contracts is the shared Python contract layer for installable SSOT governance packs.
It gives external governance packs one common API for declaring pack identity, schema compatibility, trust metadata, document manifests, and packaged ADR/SPEC resources. It does not mutate .ssot/registry.json and does not depend on ssot-core or ssot-cli.
- GitHub: https://github.com/groupsum/ssot-registry/tree/main/pkgs/ssot-pack-contracts
- PyPI: https://pypi.org/project/ssot-pack-contracts/
What this package owns
- Governance-pack metadata loading and validation
- Governance-pack schema version access
- PyPI distribution name and version discovery through installed package metadata
- Pack document manifest loading for ADR and SPEC payloads
- Packaged document text and byte readers
- Document ID listing and manifest-entry lookup helpers
- Fail-closed validation errors for invalid pack metadata or manifest entries
When to use this package
Use ssot-pack-contracts when you are building an installable governance pack that ships SSOT ADRs, SPECs, or other governed pack documents as Python package resources.
Use another package when you want:
- ssot-contracts for canonical SSOT schemas, templates, and generated contract metadata
- ssot-core for registry loading, validation, synchronization, pack ingestion, and mutation APIs
- ssot-cli for operator commands such as pack inspection, preflight checks, and sync workflows
- ssot-registry for the umbrella runtime bundle
Governance packs using this contract
These governance packs are expected to expose the ssot-pack-contracts API surface from their package root:
- seo-aeo-aieo-governance-pack packages SEO, AEO, and AiEO governance ADR/SPEC content.
- digital-signature-governance-pack packages digital-signature governance ADR/SPEC content.
- cache-freshness-governance-pack packages cache freshness and cache governance ADR/SPEC content.
Each pack should depend on ssot-pack-contracts, include a packaged metadata.json, include declared document manifests, and bind the shared API at the package root.
Install
python -m pip install ssot-pack-contracts
For local development from this repository:
python -m pip install -e pkgs/ssot-pack-contracts
Pack authoring pattern
Governance packs should not reimplement the contract API. Their package root should bind and export the shared contract functions:
from ssot_pack_contracts import bind_pack_contract
globals().update(bind_pack_contract(__name__))
The binder resolves:
__pypi_package_name__from installed distribution metadata__version__fromimportlib.metadata.version(...)__ssot_package_name__from packaged governance metadataload_pack_metadataload_pack_schema_versionload_pack_manifestload_document_manifestread_packaged_document_bytesread_packaged_document_textlist_packaged_document_idsget_packaged_document_entry
Required metadata
Every governance pack must package a metadata.json resource at the import-package root. The metadata file is the source of truth for SSOT pack identity.
Required top-level fields:
{
"schema_version": "1.0.0",
"ssot_package_name": "example-governance-pack",
"origin": {
"id": "pack:example-governance-pack",
"package_name": "example-governance-pack",
"import_name": "example_governance_pack",
"kind": "governance-pack"
},
"compatibility": {
"python": ">=3.10,<3.15",
"ssot_registry_schema": ">=0.4.0,<0.5.0",
"ssot_pack_contract": ">=0.2.18,<0.3.0"
},
"trust": {
"origin": "extension-pack",
"trusted_by_default": false,
"reservation_owner": "extension-pack:example-governance-pack"
},
"documents": {
"adr": {
"manifest_path": "adr/manifest.json"
},
"spec": {
"manifest_path": "specs/manifest.json"
}
}
}
The package version is not authored in metadata.json. It is loaded from the installed PyPI distribution metadata, which is generated from the pack's pyproject.toml.
Public API
from ssot_pack_contracts import (
bind_pack_contract,
get_packaged_document_entry,
list_packaged_document_ids,
load_document_manifest,
load_pack_manifest,
load_pack_metadata,
load_pack_schema_version,
read_packaged_document_bytes,
read_packaged_document_text,
)
Load pack identity and schema version:
from ssot_pack_contracts import load_pack_metadata, load_pack_schema_version
metadata = load_pack_metadata("seo_aeo_aieo_governance_pack")
schema_version = load_pack_schema_version("seo_aeo_aieo_governance_pack")
print(metadata["ssot_package_name"])
print(metadata["pypi_package_name"])
print(metadata["version"])
print(schema_version)
List and read packaged documents:
from ssot_pack_contracts import (
get_packaged_document_entry,
list_packaged_document_ids,
read_packaged_document_text,
)
document_ids = list_packaged_document_ids("seo_aeo_aieo_governance_pack", "spec")
entry = get_packaged_document_entry("seo_aeo_aieo_governance_pack", document_ids[0])
body = read_packaged_document_text("seo_aeo_aieo_governance_pack", "spec", entry["filename"])
Contract rules
- Pack root APIs must be loaded from
ssot-pack-contracts, not copied by hand. metadata.schema_versionis required and must be available throughload_pack_schema_version.metadata.ssot_package_nameis required and must matchmetadata.origin.package_name.metadata.origin.import_namemust match the installed import package.metadata.origin.kindmust begovernance-pack.metadata.trust.originmust beextension-pack.metadata.trust.reservation_ownermust start withextension-pack:.metadata.compatibility.python,metadata.compatibility.ssot_registry_schema, andmetadata.compatibility.ssot_pack_contractare required.- Document manifest kinds must use normalized keys:
adrandspec. - Packaged document entries must include stable IDs, filenames, target paths, SHA-256 hashes, origin, reservation owner, compatibility metadata, status, and supersession fields.
Package relationships
- Package type: governance-pack contract package
- Depends on: standard library only, plus
tomlion Python earlier than 3.11 - Used by: governance packs such as seo-aeo-aieo-governance-pack, digital-signature-governance-pack, and cache-freshness-governance-pack
- Consumed by: ssot-core pack ingestion and ssot-cli pack inspection, preflight, and sync workflows
If you are publishing an SSOT governance pack, use ssot-pack-contracts as the root API contract. If you are consuming packs, use ssot-cli or ssot-core to inspect, preflight, and synchronize pack content into a governed registry.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ssot_pack_contracts-0.2.19.dev4.tar.gz.
File metadata
- Download URL: ssot_pack_contracts-0.2.19.dev4.tar.gz
- Upload date:
- Size: 13.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9fd749c735187c6f2d80cace021038dab6a403882947fbf7831bddbfda8c7469
|
|
| MD5 |
d906e697962c085e24a092694aeecb38
|
|
| BLAKE2b-256 |
01125cffc6b00266172090fc89c58189bd04275b5043645bc783585026a0cc1a
|
File details
Details for the file ssot_pack_contracts-0.2.19.dev4-py3-none-any.whl.
File metadata
- Download URL: ssot_pack_contracts-0.2.19.dev4-py3-none-any.whl
- Upload date:
- Size: 9.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b1144ece1a3e83443c78360de0c8a01b25a005cb7807ab2bf77dc5df5a569ca6
|
|
| MD5 |
46145b6a446539cb8207a6d0110a1e36
|
|
| BLAKE2b-256 |
35ed5f254e194d1009081cd3c5c4f4d85c3ab2a0629919cca7f6f7f49c303a0c
|