Trust architecture
No single signature proves the whole delivery. Pushgate composes narrow proofs across explicit trust boundaries.
On this page
Mermaid source
flowchart LR
subgraph Sandbox[Restricted agent sandbox]
A[Coding agent]
end
subgraph Policy[Command policy boundary]
B[Tool broker]
C[Pinned CI/lock child]
end
subgraph Platform
F[Fulcio + TSA]
S[Tenant evidence store]
V[Policy evaluator]
end
subgraph Edge
P[Pushgate verifier]
end
A -->|invokes cilock run| B -->|exact executable| C
C -->|short-lived scoped identity| F --> S --> V --> P --> G[GitHub]One proof establishes one act
A signature proves who signed exact bytes. It does not automatically prove why those bytes were created, that a policy was activated, or that GitHub applied a ref update. Pushgate keeps those acts separate and joins them only through explicit identifiers.
- The coding agent is the session parent and invokes the reviewed CI/lock binary.
- ALPS 2 requires a command broker outside the agent to resolve that exact binary into a fresh child-tool sandbox, so the agent cannot grant itself signing authority. That is the level's requirement, not an automatic property of running CI/lock.
- CI/lock records the result as an in-toto Statement inside a signed DSSE envelope.
- The TestifySec platform authenticates the tenant, stores evidence by exact content identifier, and evaluates the selected policy.
- Pushgate runs on Cloudflare’s edge and verifies the platform decision against the repository, commit, policy, and push nonce before using it.
- GitHub’s terminal response is a delivery result. It is distinct from the policy decision that authorized delivery.
Measure the boundary
Give the coding agent only its repository, a synthetic home, the required toolchain, and an allowlisted environment. Do not mount or inherit the TestifySec session, a human key, SSH_AUTH_SOCK, signer caches, infrastructure credentials, Keychain access, Docker sockets, or a generic signer socket.
A producer never proves its own isolation level. CI/lock emits bounded observational evidence for ALPS 0.1; consumers can verify its signature, trusted time, repository and commit bindings, and stated observer coverage. Those observations remain non-authoritative context and do not authenticate the observed agent, assign an ALPS level, or satisfy policy. Any assessed identity must instead bind to an independently authenticated stable principal. Missing observer coverage remains unknown.
The agent sandbox guide provides full-width, copy-paste configurations for native macOS and a Linux container, plus the denial checks to run before onboarding a repository.
Assurance vocabulary
UI labels and API consumers use these words narrowly:
| Label | Meaning |
|---|---|
| Verified | Cryptography and authoritative bindings were independently checked. |
| Observed | A named component recorded something it could see; that observation is not an authenticated identity claim. |
| Declared | A human or agent supplied context or intent that was not independently proved. |
| Enforced | A signed decision was evaluated against the exact repository, commit, and policy authority. |
| Approved | An authenticated account accepted an exact activation or override event. |
Trust roots and time
The TestifySec platform publishes its Fulcio certificate chain and RFC 3161 timestamp-authority chain through its discovery document. CI/lock and Pushgate validate chains to those anchors. A matching certificate name is not enough: the key, issuer, identity constraints, signed bytes, and timestamp all have to verify.
GET https://platform.testifysec.com/.well-known/judge-configuration
Edge-to-platform identity
For a connected repository, Pushgate uses short-lived service assertions scoped to the repository and one platform audience. Policy evaluation and GitHub delivery are different grants. A credential issued for one audience or scope is rejected at the other.
Standards alignment
Pushgate applies established software-supply-chain principles to the Git push boundary. This mapping explains design intent; it is not a certification claim.
| Source | Principle | Pushgate mapping |
|---|---|---|
| CNCF Secure Software Factory | Generate signed metadata and automated attestations, store them as a source of truth, and use policy at downstream admission points. | CI/lock witnesses the work; Archivista stores the signed envelope; the platform evaluates policy; Pushgate verifies at consumption. |
| CNCF Software Supply Chain Security Paper v2 | Compartmentalize trust, grant least privilege by role, and verify both attestation signatures and contents against policy. | Roles and service audiences are purpose-separated; Pushgate checks identity, content, subject, and policy bindings. |
| NIST SP 800-204D | Generate standard evidence during CI/CD, authenticate provenance, protect attestation storage, and use the evidence in policy decisions. | CI/lock emits in-toto/DSSE evidence; the tenant store and VSA join that evidence to one exact policy decision. |
| in-toto Attestation Framework v1.2 | Separate typed claim metadata, subject binding, and authenticated transport into composable layers for automated consumers. | CI/lock preserves the Predicate → Statement → Envelope layering; Pushgate adds its admission semantics as typed policy and decision data. |