Release Packets¶
A release packet is the portable subset of Atlas evidence delivered to a consumer. It is not a second source of release truth. Every packet member and digest must resolve to the same identity, manifest, provenance, and evidence bundle that were verified before transport.
Packet Boundary¶
flowchart LR
Evidence["Full release evidence"] --> Select["Packet selection policy"]
Select --> Minimum["Identity, manifest, bundle, ledger, provenance, results"]
Select --> Data["Dataset contracts and ingest evidence"]
Select --> Supply["Chart package and profile SBOMs"]
Minimum --> Packet["Portable packet"]
Data --> Packet
Supply --> Packet
Packet --> Consumer["Independent consumer verification"]
The minimum set contains the evidence manifest, identity, tarball, checksum ledger, signing result, verification result, and provenance. The current packet also inventories dataset schemas and manifests, ingest results, the chart package, and six profile SBOMs.
Coherence Rules¶
- Every listed path exists in the transported set.
- Every SHA-256 value matches the transported bytes.
- Identity and provenance name the same release, source, and governance revision.
- Manifest, checksum ledger, and packet inventory agree on artifact identity.
- Chart, images, values profiles, and SBOMs refer to the same build.
- Verification is rerun after transport rather than trusted as an enclosed assertion.
- Unexpected files are classified; required files cannot be silently omitted.
Safe Transport and Extraction¶
Treat a packet as untrusted input until consumer verification completes. Inspect the archive inventory before extraction. Reject absolute paths, parent traversal, duplicate normalized names, unsafe links, special files, unexpected executables, and expansion beyond configured file-count or size limits.
flowchart LR
Receive[Receive immutable packet bytes] --> Outer[Verify expected outer identity]
Outer --> List[List members without extraction]
List --> Safety[Validate paths, types, counts, and sizes]
Safety --> Extract[Extract into isolated destination]
Extract --> Integrity[Recompute member and manifest digests]
Integrity --> Policy[Run schema, provenance, SBOM, and evidence policy]
Policy --> Accept[Retain packet and consumer verdict]
Extraction must not overwrite an existing deployment, evidence directory, or trust policy. Use a new isolated destination and promote only verified members through the owning deployment workflow.
Packet Closure Test¶
A packet is portable only when a consumer can reach a verdict from the packet, the declared trust roots, and the documented verifier distribution. Repository state, producer caches, and paths outside the extraction root must not repair a missing member or replace a transported member during verification.
Run the closure test in an empty consumer workspace:
- retain the immutable outer packet and its expected digest;
- extract into a new root after the archive safety checks pass;
- remove access to the producer checkout and artifact caches;
- resolve every manifest reference within the extracted root;
- run the declared verifier using only packet inputs and governed trust roots;
- record every attempted external read and network request; and
- fail when a required input is absent, substituted, or fetched implicitly.
flowchart LR
Packet[Immutable packet] --> Isolated[Empty extraction root]
Trust[Declared trust roots] --> Verify[Consumer verifier]
Verifier[Versioned verifier distribution] --> Verify
Isolated --> Verify
Verify --> Reads{Undeclared input?}
Reads -->|no| Receipt[Closed consumer receipt]
Reads -->|yes| Reject[Reject incomplete packet]
The closure result is distinct from integrity. A packet can have internally consistent digests and still be unusable because its verifier, schema, policy, or referenced artifact is available only in the producer environment.
Establish the Consumer Trust Bootstrap¶
Packet verification begins from inputs the packet does not get to define for itself: expected outer identity, accepted trust roots, verifier distribution, and consumer policy. Acquire and retain those inputs through an independently governed channel.
| Bootstrap input | Consumer requirement |
|---|---|
| expected packet identity | release, channel, immutable reference, outer digest, and retrieval context |
| trust roots | key or identity set, validity and revocation state, source, and accepted policy scope |
| verifier | immutable binary or package identity, provenance, supported schema range, and invocation contract |
| consumer policy | required evidence classes, allowed exceptions, target profile, and decision owner |
flowchart LR
Channel[Immutable channel reference and expected digest] --> Receive[Received packet]
Trust[Independent trust roots] --> Judge[Consumer verification]
Verifier[Independently identified verifier] --> Judge
Policy[Consumer policy] --> Judge
Receive --> Judge
Judge --> Receipt[Consumer receipt]
Do not execute a verifier or trust a key merely because it is enclosed in the packet under review. The packet may carry a copy for portability, but the consumer must match it to the independently accepted identity before use. When trust has rotated, record which generation verifies the release and whether the rollback release remains verifiable under the retained policy.
Current Packet Status¶
The checked-in packet satisfies its structural REL-PACK-001 flag, but its
recorded digests are stale. The bundle, manifest, provenance, checksum ledger,
signing result, and verification result no longer match the current bytes.
Fresh evidence verification also fails for the checked-in bundle.
Therefore ops/release/packet/packet.json is a contract fixture and inventory
example, not a transportable verified release. Regenerate the entire packet
from one release run after the evidence blockers are resolved.
Consumer Procedure¶
- Compare expected release and source identity before unpacking executable material.
- Reject missing, duplicate, traversal, or unexpected members.
- Recompute packet and manifest checksums in the consumer environment.
- Run schema, policy, provenance, SBOM, and evidence verification.
- Confirm the target profile has applicable install, load, security, observability, upgrade, and rollback evidence.
- Preserve the received packet and fresh verifier output with the deployment record.
The enclosed verification result is historical producer evidence. The fresh consumer result is the decision input. Preserve both so disagreement can be investigated rather than overwritten.
Producer Packet and Consumer Receipt¶
flowchart LR
Producer[Producer packet] --> Receive[Consumer receives immutable bytes]
Receive --> Verify[Consumer verification]
Verify --> Receipt[Consumer receipt]
Receipt --> Deploy[Deployment decision]
PacketId[packet digest + source + release] --> Receipt
Policy[consumer policy + verifier version] --> Receipt
Environment[target profile + dependency identity] --> Receipt
The producer packet carries candidate evidence. The consumer receipt records what was actually received and judged. Keep them separate so transport damage, policy differences, verifier changes, and environment-specific rejection are visible.
At minimum, a receipt records:
- packet digest, release, source revision, and retrieval channel;
- retrieval time and immutable remote reference;
- verifier and trust-policy versions;
- member inventory and checksum verdict;
- provenance, SBOM, schema, compatibility, and evidence verdicts;
- target profile and any evidence not applicable to that consumer;
- final accept, reject, or qualified decision with owner and timestamp; and
- the deployment or rollback record that consumed the decision.
A receipt is not a replacement manifest and must not rewrite producer claims. It binds the consumer's observation and policy to the immutable packet.
Packet Exposure Boundary¶
Release evidence can contain environment names, internal locations, logs, or security findings even when secrets are forbidden. Apply the packet's distribution classification before upload, and create an explicitly governed redacted derivative when audiences differ. The derivative needs its own digest and a lineage link to the restricted packet; silently deleting members breaks coherence.
Never make a stale packet coherent by updating individual digest fields. Rebuild the selected set from authoritative source inputs so all cross-references are generated together.
See Release Evidence for current blockers and Signing and Provenance for checksum guarantees.