@atlasent/safeguard-manifest
v1.0.0
Published
Versioned, deterministic projection of the authoritative AtlaSent safeguard package into the design/EXPECTED facts (owner, authority, expected evidence sources, expected gates) for the console SafeguardMap. Carries no runtime observed state. Zero-build, z
Readme
@atlasent/safeguard-manifest
Versioned, deterministic projection of the authoritative safeguard package
(contract/safeguard-pack/) into the design / EXPECTED facts a consumer needs
to render the console SafeguardMap — per protected action: owner, authority,
expected evidence sources, and expected gates.
What this is (and is NOT)
- IS: expected/design truth. What each safeguard is designed to require.
- IS NOT: runtime observed state. It carries no enforcement mode in effect, verification status, coverage, or observed gaps. Those stay live in the runtime and are joined by the consumer.
The manifest exists so the console never hand-maintains a semantic copy that can drift from the Canon / package. This is the single authoritative feed.
The three states it enables
The consumer joins this manifest with live runtime facts to produce a reconciliation view over three distinct states:
| State | Source | |---|---| | Expected | this manifest (versioned safeguard package) | | Configured | runtime — current configuration (enforcement mode, bound bundle) | | Proven | runtime — execution + verification evidence (verification_events, coverage) |
A safeguard is not "covered" merely because it is in the package (Expected) or configured in runtime (Configured) — coverage requires observed runtime + acceptance evidence (Proven). Where Expected and Configured/Proven disagree, the consumer displays the discrepancy as a gap; it must not reconcile or reinterpret it.
Regeneration & determinism
The JSON is generated by scripts/generate-safeguard-manifest.py (in the repo
root) from the authoritative YAML. It is deterministic — same inputs produce
byte-identical output, so CI fails on any unexpected regeneration diff:
python3 scripts/generate-safeguard-manifest.py # regenerate
python3 scripts/generate-safeguard-manifest.py --check # CI: fail if staleDo not hand-edit safeguard-manifest.json. Change the authoritative
contract/safeguard-pack/* YAML and regenerate.
Provenance
provenance.source_files[]records the SHA-256 of each authoritative input — identifying the exact inputs deterministically (no volatile git SHA / timestamp in the artifact, so--checkstays stable).- Release/commit provenance is bound at publish time via npm
--provenance(Sigstore keyless, same trust model as the other AtlaSent published packages).
Distribution & pinning
Published through the existing packages release path (v1_1-release.yml packs +
cosign-signs every non-private packages/* on a version tag). Consumers pin an
explicit manifest_version / package version — never silently consume "latest"
— and validate the manifest against safeguard-manifest.schema.json
(schema_version + provenance) before use.
Usage
import {
safeguardManifest,
getSafeguardAction,
SAFEGUARD_MANIFEST_VERSION,
} from "@atlasent/safeguard-manifest";
const deploy = getSafeguardAction("production.deploy");
deploy?.owner_role; // expected owner (design)
deploy?.expected_evidence_sources; // expected evidence sources (design)