Skip to main content

Security features at a glance

Everything fremforge ships, in one scannable table. Each row links into the dedicated page for configuration, override flow, and the underlying tool’s documentation.

fremforge is deliberately transparent about the OSS tooling underneath every control: customers under BSI C5, ISO 27001, BaFin, or ENISA-regulated review need the tool-level audit trail, and we’d rather you can grep our source than reverse-engineer a black box. The differentiation is the integration (hooks, RBAC, audit chain, EU residency, no Microsoft, no AWS) — not the scanner.

Code-push controls

ControlWhat it doesToolConfigurable per tenant
Push protectionPre-receive secret-scan; rejects commits containing credentials before they enter git historyGitleaks v8 (120+ patterns)Override rules + per-pattern bypass
Branch protectionPer-branch rules: required reviewers, status checks, signed-commit requirement, force-push blocksForgejo nativeYes (per branch)
Two-factor authTOTP for every user account; WebAuthn enforcement available at the org level (user-side WebAuthn enrolment is via the Forgejo user-settings security page). Enforceable per-orgForgejo native + custom enforcement hooksYes (org-wide enforce, per-user opt-in)
OIDC MFA verificationCryptographically verify your IdP asserted MFA on every sign-in via the OIDC amr claim (RFC 8176). Replaces the legacy operator-attested “trust IdP MFA” checkbox — the token says ["pwd","mfa"] or it’s not MFACustom claim-check middlewarePer-tenant required-amr policy
SSO break-glassWhen your IdP is unavailable, misconfigured, or the SSO connection is broken, named org owners can recover access via a separately-managed break-glass credential path. Audit-loggedCustom (fremforge-written)Per-tenant named owners
Keyless commit signing (sigstore / gitsign)OIDC-bound signing — your IdP identity (Entra, Okta, Google Workspace, Authentik) signs the commit via a 10-minute Fulcio cert. Forgejo renders Verified by sigstore: <email> via <IdP>. Root CA in T Cloud Public DEW KMS (FIPS 140-2 Level 3 HSM, Germany). Fulcio at sign.frem.sh, TSA at tsa.frem.sh. Deliberately no Rekor / transparency log — TSA-anchored timestamping only, keeps signatures off any third-party logSelf-hosted Fulcio v1.8.5 + TSA on T Cloud Public eu-de, customer-side gitsignOrg admin → Allowed OIDC issuers + strictness level
Commit signing — SSH keySign commits with the same SSH key Forgejo uses for push. “Verified” badge appears natively in the web UI. Coexists with keyless; org admin sets strictnessOpenSSH + Forgejo’s allowedSignersFilePer-user enable
Commit signing — GPGStandard git commit.gpgsign flow. Upload public key at user settings, Forgejo verifies + renders the “Verified” badgeGnuPG + Forgejo nativePer-user enable

Code-quality + vulnerability scanning

These scanners run centrally on fremforge’s own scanners on every pull request and on the default branch. There is no workflow file to install in your repositories. Results are listed under Security › Findings.

ControlWhat it doesToolConfigurable
SASTStatic analysis on every PR and on the default branch, run centrally on fremforge’s own scanners — there is no workflow file in your repo to install or maintain. Detects injection, XSS, hardcoded secrets and dangerous APIs in C, C++, C#, Go, Java, JavaScript and TypeScript, Kotlin, PHP, Python, Ruby, Rust, Scala, Swift and BashOpenGrep with GitLab sast-rules, 0xdea C/C++ rules and fremforge’s own rulesBlock severity; your own OpenGrep rules, each checked on its own sample before it runs
Secret scanninggitleaks on every pull request (the fremforge/secret-scan check) and a weekly sweep of every repository’s full history; push protection blocks secrets at push timeGitleaksPull request check on or off
IaC scanningtrivy config misconfiguration checks (Dockerfile, Compose, Kubernetes, Helm, Terraform and more) on every PR, as the fremforge/iac-scan check with its own findings tab, plus your organisation’s own Rego checks; blocks only on what a PR adds; findings grouped by CIS benchmark and NIS2 area in the compliance reportTrivyMode and threshold under Security › Policies › Scanners
Dependency scanning (OSV)Dependency CVE/GHSA scan on every PR, run centrally on fremforge’s own scanners. Surfaces fixable CVEs with the suggested upgradeosv-scannerSeverity threshold
ReachabilityMarks each dependency and image finding reachable, not reachable or unknown, with the evidence (file and line, or the affected function), and ranks lists, Recommendations and the digest by it. Go: govulncheck on the binaries in your images. JavaScript and TypeScript: Jelly, at import level unless the advisory names functions. Python, Java and Kotlin: import level, through other packages too, never unreachable. Nothing is hidden or dismissed; what blocks a merge is unchanged unless you opt ingovulncheck, Jelly, fremforge import readersOpt-in SLA multiplier (1-4) for not-reachable findings; opt-in “do not block pull requests on not-reachable findings”
Known exploitedFlags findings whose CVE is listed as exploited by ENISA’s EU Vulnerability Database or CISA’s KEV catalogue: a badge and filter, ranked before EPSS, never given a stretched SLA, AutoFix first. Both lists refreshed dailyENISA EUVD + CISA KEV mirrors-
Security fixesOne click opens one pull request that bumps a vulnerable dependency to the lowest version that fixes every open advisory (the ecosystems on Supported ecosystems) or bumps an image’s FROM base; Fix all per repository. Never merged automatically. Optional AI fixes for a short list of SAST rules use only your own model provider and are off by defaultHosted Renovate; your own AI provider for SAST fixesPer-repo and per-org limits; AI fixes off by default
Rule-based fixesOpen fix PR on a secret finding moves the credential into an environment variable (Go, Python, JavaScript, TypeScript); on six IaC checks it sets the property to its secure value. A set rule, no AI: nothing leaves fremforge. Syntax-checked and re-scanned first, never merged automaticallygitleaks and Trivy, the scanners that raised the findingPer-repo and per-org limits
Container image scanningfremforge’s central scanner runs Trivy (no install step): trivy fs and trivy config on every PR, trivy image on every image in your registry and every image pulled through the dependency proxy. Findings are listed under Security › Findings › Container images, attached to the image and commit. An image block action (none, warn, block_pull) applies to findings at or above the image threshold, high by defaultTrivyBlock action, threshold and ignore files
License scanningTrivy licence detection on every PR, run centrally on fremforge’s own scanners. Classifies each dependency’s licence into a 7-bucket SPDX-policy severity (permissive → reciprocal → restricted → forbidden); blocks merge on findings at/above the configured threshold. Surfaces at Security › Findings › LicencesTrivyBlock severity + SPDX allowlist + per-finding dismiss
OpenSSF ScorecardWeekly best-practice score per repo. Not a per-repo workflow — runs weekly on isolated platform infrastructure using a read-only per-tenant bot with read-only repo access; unchanged repos are skipped, and only the score JSON is retained. Surfaces gaps (branch protection, MFA enforcement, pinned dependencies, code review coverage) as a column on the Repos pagescorecardWeekly cadence + unchanged-HEAD skip
Malicious packagesOSV MAL-* advisories matched against each repository’s default-branch SBOM and the language packages in every published container image, after each push and daily. Always critical; image pulls with an open finding are refusedosv-scanner + TrivyDismiss with reason and end date
Package policiesOne policy per organisation decides which registry packages may be downloaded: vulnerability thresholds (severity, CVSS, EPSS, fix available), SPDX licence lists, allow and deny lists with version ranges, and a minimum age. Exceptions need a second person to approve them. Enforce refuses with 403, Shadow (the default) records; a file bundling known malware is refused in every mode. Container images: shadow onlySyft + osv-scannerMode, rules, per-type overrides, exceptions
Upload malware scanClamAV over Git-LFS objects, web attachments and package uploads. The dependency proxy scans fetched packages and image layers with ClamAV when your organisation turns it on (off by default)ClamAV + SaneSecurity feedsOverride on known-FP signatures
Workflow security gateA pre-receive check parses every changed workflow YAML and rejects pushes that introduce: docker:// references to non-allowlisted registries, dangerous pull_request_target + script injection patterns, unpinned uses: references to non-mirrored orgsCustom rules (fremforge-written)Per-tenant docker-URI allowlist override
IP allowlistOne per-org list of allowed CIDR ranges for every HTTPS surface: web admin, fremforge API, repository web interface, Forgejo REST API, Git over HTTPS, LFS and package registries. Git over SSH is not covered. Audit-only preview and a 24-hour owner break-glassCustom rules (fremforge-written)Per-tenant CIDR list + runner toggle

Supply-chain provenance

ControlWhat it doesToolConfigurable
SBOMsCycloneDX 1.6 and SPDX 2.3 SBOMs generated centrally on every PR (both formats accepted at ingest). Publishing a release binds the SBOM already held for that commit to the release rather than re-scanning it, so a release SBOM needs no build and appears immediately. Queryable at Security › Components › SBOMsSyftRetention window + release refs
Signed publication attestationAn in-toto / SLSA-provenance DSSE envelope generated server-side by fremforge on Forgejo release.published / package webhooks — no workflow file in your repos. fremforge hashes each asset and signs with a platform-held Ed25519 key (keyid fremforge-slsa-builder-v1, builder https://frem.sh/runner-controller/v1), uploaded alongside the asset as <asset>.intoto.jsonl, plus a second keyless signature against fremforge’s self-hosted Fulcio + RFC3161 TSA as <asset>.sigstore.json. No public Sigstore, no Rekor, no transparency log. Verify locally with the published trust root — see SLSA provenance. Deliberately not described as a SLSA level: it attests what was PUBLISHED, not how it was built; the re-derivation and what is missing are in SLSA provenanceCustom server-side signer (Node stdlib crypto, Ed25519 DSSE) + self-hosted Sigstore—
Cosign image signing + verificationThe central fremforge/cosign-verify pull-request check verifies the signatures of digest-pinned images, either from your organisation’s own workflows through fremforge’s Sigstore or from the public Sigstore, and says when it could not check. It is informational. The image signature policy can also require signed images at pull time, with your trusted identities. Customer CI signs with its own OIDC identity — no long-lived signing keyscosign + self-hosted FulcioSignature policy (shadow or enforce)
Workflow pinningA daily scan lists every uses: in .forgejo/workflows/ that points at a tag or branch instead of a 40-character commit SHA; one click opens a pull request that pins them. .github/workflows and docker:// references are not checkedCustom (fremforge-written)—
Action mirroruses: actions/checkout@v4 resolves to frem.sh/actions/checkout — Forgejo native pull-mirror of upstream with 8-hour sync. No build-time github.com fetch on the customer’s critical path. Mirrored orgs include actions, docker, pnpm, aws-actions, azure, google-github-actions, peter-evans, softprops, sonarsource, step-security, dornyForgejo native pull-mirror (EU-only action resolution)(Operator-managed; transparent to customers)
Marketplace compatibility surfaceThe top-20 most-used GitHub Marketplace actions verified to work unmodified on fremforge — GITHUB_TOKEN, GITHUB_SHA, GITHUB_REF, GITHUB_API_URL etc all populated identicallyForgejo Actions runtime—
Dependency updatesVersion updates by Renovate for every enrolled organisation, every night, plus Run now. Identifies stale dependencies, action versions and container base images. Repositories can opt outRenovate + custom orchestrationPer-repo opt-out

Runtime isolation (hosted CI runners)

ControlWhat it doesToolConfigurable
Hosted runner sandboxOne commit = one dedicated VM = one kernel. The platform spawns a fresh ephemeral ECS VM per commit, registers forgejo-runner --ephemeral so each registration is consumed by one task, then destroys the VM once that commit’s jobs complete. No two customers, and no two commits, ever share a kernel — jobs of the same commit may share the VM, so treat a pipeline as one trust domain. Each VM carries its own ENI + Security Group (network isolation) and has no IAM agency attached (no platform-API access from inside). An out-of-band reaper backstop kills orphan VMs whose runner never registered or never finished. Same model as GitHub-hosted and GitLab-hosted runnersT Cloud Public ECS + per-VM ENI + forgejo-runner (act_runner)VM flavor (CPU/RAM ceiling), per-tenant concurrency cap
Per-tenant concurrent cap2 concurrent jobs per seat guaranteed (at least 10, at most 60), and up to 60 when capacity is idle (GitHub-hosted: Free 20, Pro 40, Team 60). Higher on requestPlatform-level enforcementPer-tenant override
Runner-minute poolseat_cap × 1000 min/month. Trial tenants have a flat 500-min pool — see Billing. Overage-enabled tenants keep running; others are refused dispatchPre-dispatch check vs metered usagePer-tenant cap override
Egress proxyCustomer workflows reach the public internet through the runner egress proxy (SSRF-only deny, CGNAT-permissive — matches GitHub-hosted behaviour)Custom proxy (fremforge-written, Hono-based)—
Job wall-clock60-min hard ceiling per job. A stale-VM sweeper kills anything older than 90 minOut-of-band sweeperStep-level timeout-minutes

Secrets + access control

ControlWhat it doesToolConfigurable
Deploy secretsPer-environment encrypted secrets. AES-256-GCM at rest with a MASTER_ENCRYPTION_KEY held in DEW KMS. Decrypted only inside the runner VM that needs them. Key rotation supports a two-key window (current + previous) for in-place rotationCustom (Node crypto) + per-env scoping + DEW KMSPer env / per repo / per org
RBAC + per-tenant scopingForgejo’s native RBAC + fremforge’s tenant-scoping layer; all platform API endpoints enforce tenant_id from the JWT, no cross-tenant data leaks. Org admin → Members → RolesForgejo + fremforge api middlewarePer-team granularity
OIDC single sign-onPreferred IdP path. Connect Okta, Entra, ADFS, Google Workspace, Authentik, Keycloak, Auth0 — any OpenID Connect provider — for inbound federation. Domain verification, just-in-time user provisioning, group → team mapping. Configured at Org admin → SSO → Auth sourcesForgejo native OIDC auth-sourcePer-tenant IdP config
SAML 2.0 single sign-onNot available yet. Connect Entra ID or ADFS over OIDC instead——
SCIM 2.0 user provisioningPush users from your IdP into your fremforge org via SCIM 2.0. Per-tenant bearer-token auth, dual-token rotation window, idempotent CRUD on Forgejo users. Works with any SCIM-compliant IdPCustom api endpoints under /<slug>/scim/v2/*Per-tenant SCIM token
SSH CASSH access to git uses a CA-signed certificate, not raw key fingerprints. Per-user cert with TTL; revocable via the org admin UIOpenSSH CA + fremforge-managed cert issuanceTTL + per-user revoke
Authentication policyPer-org bundle of enforcement toggles: hardware-backed keys (WebAuthn-only, no TOTP), max PAT lifetime (cap below the 90-day platform default), signed-commits required (block unsigned pushes), SSH disabled (HTTPS-only), 2FA required, SSO-only sign-in (block local Forgejo username/password). Mirrors the GHEC enterprise-policy surface. Each toggle audit-emits on changeForgejo carried patches + fremforge enforcement hooksPer-tenant policy bundle
Email-domain allowlistPer-org allowlist of email hostname patterns. When enabled, members can only add @acme.com-style addresses matching the configured patterns. Closes the “claim commits as attacker@arbitrary-domain.com” path during forensic review. Pre-existing emails not auto-evicted; OIDC sign-in is exempt (the IdP attests). Patterns support exact + *.subdomain shapesCustom rules + Bunny edge intercept on /user/settings/account/emailPer-tenant patterns + enforce flag
Workflow secretsOrg-level + repo-level Actions secrets injected into every CI job as env vars. Forgejo stores encrypted at rest; fremforge admin proxies CRUD with audit events (value never persisted in fremforge DB or audit log). Override secret = same form is the rotation flowForgejo native secrets + fremforge admin proxyPer-org / per-repo / per-environment
Workflow OIDC for cloud authRunner VMs get a fresh OIDC JWT with aud=fremforge per job. Customer cloud trust policies key off this for short-lived credential exchange (no long-lived AWS keys, GCP service-account JSONs, or Azure client secrets in workflow secrets)Custom OIDC issuer signed by fremforge runner-OIDC key (rotated 180d; manual rotation, auto-rotator not yet shipped)—
Agent-native authenticationThree IdP-side patterns for non-human callers: (1) Direct customer-IdP JWT bearer — present an Entra workload-identity / Okta service-account / Google service-account JWT directly as Authorization: Bearer on any /api/v1/* endpoint; (2) RFC 8693 token exchange + OBO — POST /_app/api/v1/auth/token-exchange accepts subject_token and optional actor_token; audit chain records both actor and on_behalf_of; (3) RFC 6749 client_credentials — POST /_app/api/v1/oauth/token for apps without an IdP. Per-tenant audience binding (https://frem.sh/<slug>), per-source claim assertions (tid/hd), DB-level UNIQUE preventing two tenants from claiming the same issuer for direct bearerCustom (auth_sources + oauth_clients + token-exchange pipeline using jose)Per-source opt-in; per-client scope cap

DevOps observability

ControlWhat it doesToolConfigurable
DORA dashboardThe four canonical DORA metrics — Deployment frequency, Lead time for changes, Change-failure rate, MTTR — computed over a 30-day rolling window from deployment events recorded for your tenant. Ingest path is the Forgejo release webhook plus a manual POST /_app/api/v1/dora/deployments for workflows that don’t tag releases. Visible at Org admin → DORACustom (fremforge-written, against tenant DB)Rolling window + manual ingest
Security overviewSecurity › Overview: open findings per scanner, with links into each tab, and the setup checklistCustom aggregator—
Workflow run inspectorEvery Actions run streams structured logs (annotated with step + line) into the tenant audit log and into a per-run viewer at Org admin → Actions → Runs. Failed-job filter + workflow YAML diff vs last green runForgejo Actions UI + fremforge audit overlay—
Runner usage panelPer-month runner-minute count + per-job duration table at Org admin → CI runners → Usage. Drives invoice line items via the metering_events tableCustom (runner_jobs aggregation)—

AI posture

ControlWhat it doesToolConfigurable
BYO AI — agent-native accessfremforge is AI-agnostic. Customer Claude Code / Cursor / Windsurf / Codex CLI / Aider operate against the same Git + REST surface as humans (machine-readable OpenAPI spec). Combined with Agent-native authentication (direct IdP JWT bearer, RFC 8693 token exchange + OBO, RFC 6749 client_credentials), agents authenticate as first-class principals — no human PAT borrowing. No forge-locked-in AI product, no agentic features that demand a specific vendorStandards-compliant Git + RESTCustomer-controlled
AI integrations (BYOK)Org admin → AI integrations: register your own AI vendor key (Anthropic, OpenAI, Mistral, others). Enables: AI PR review (drafts review comments on diff), Renovate AI explanations (plain-English changelog summaries on dep-bump PRs), and the /_app/api/v1/orgs/<slug>/ai/complete gateway for workflow-side LLM callsCustom gateway (fremforge-written)Per-org vendor + key

Compliance + audit

ControlWhat it doesToolConfigurable
Audit logEvery state-changing operation (push, role change, secret create, runner override, billing change) logged with actor + timestamp + before/after. Two-tier retention: queryable hot tier (90 / 180 / 365 / 730 days, configurable per tenant) + 3-year cryptographic-chain archive in T Cloud Public OBS WORMCustom append-only (audit_events table)Per-tenant retention window
Audit chainHash-chained audit log + linear hash chain anchored every 2 min into T Cloud Public OBS WORM. Verifier cron checks chain integrity hourly + full-sweep every 30 min. Customers can verify “no event was deleted or modified after the fact”Custom (fremforge-written, BSI C5 alignment)—
SIEM streamingReal-time stream of audit events to a customer-provided endpoint (Splunk HEC, Sentinel, ELK, OpenSearch, generic HTTPS webhook). EU-resident relay, no data leaves the eu-de region. Per-tenant endpoint health visible to operator + tenant adminCustom forwarder + siem_endpoints tablePer-customer endpoint config
Data export (GDPR portability)Self-service tenant data export: repos (as git bundles), issues, pull requests and releases (NDJSON), package inventory, scan findings, package-policy state, signed attestations, repository and container-image SBOMs, audit events (NDJSON), with a DSSE-signed manifest. Downloaded from a signed OBS URL valid 7 days. Required for GDPR Art. 20 portability + offboardingCustom exporterTriggerable any time
Lifecycle policiesPer-tenant retention + deletion automation: stale-repo archive, runner-minute-cap behaviour, audit-log retention window, tenant-suspension grace period, end-of-contract data-erasure SLACustom (tenant_lifecycle table)Per-tenant policy
Repo mirroring (inbound migrations)Pull-mirror customer repos from GitHub, GitLab, Bitbucket, or any other Git host into fremforge with credential-based auth + periodic sync. Used during phased migrations; mirror is removable once cutover is completeForgejo native pull-mirror + fremforge admin proxyPer-repo source + interval
Notification preferencesOrg-wide event routing: which audit events emit mail/webhook/SIEM, which roles get paged on Critical findings, billing-event escalation contactsCustom (notification_preferences table)Per-tenant routing
Vulnerability disclosuresecurity.txt published, security@frem.sh 24h ack SLA, public hall-of-thanks page, no-litigation-for-good-faith-research policy——
Fix-by SLAPer-org SLA pill next to every open finding. Default deadlines (Critical 7d / High 30d / Medium 90d / Low none) — tightenable per tenant. NIST SP 800-40r4-anchoredCustom (fremforge-written)Per-tenant tightening

What we explicitly don’t do

Anti-featureWhy
No Microsoft footprint (no GitHub, no Azure AD, no Office 365, no Defender, no GHAS CodeQL)EU sovereignty + Schrems II — see trust
No US-hosted Sigstore / Fulcio / Rekor in the verification pathSame. fremforge runs its own Fulcio + TSA on T Cloud Public eu-de with the root CA in DEW KMS (FIPS 140-2 Level 3 HSM, Germany). No public Sigstore, no Rekor / transparency log — TSA-only timestamping by design
No AWS, GCP, or any US-cloud-controlled dependency on the platform critical pathSame
No third-party CDN-loaded fonts (Google Fonts etc.)Self-hosted at www.frem.sh/fonts/ via Bunny EU edge
No black-box scanners (proprietary detection rules you can’t audit)Customer audit trail requires tool-named transparency
No long-lived service-account credentials in customer workflowsOIDC-only for cloud auth; long-lived keys are an opt-in deprecated path

Tool transparency — full bill of materials

If you need this for an RFP, BSI C5 audit, or internal security review, the canonical list — with versions, pull sources, and the platform-foundation vendor row — lives at docs.frem.sh/security/bill-of-materials/. The table below is a quick-reference subset.

LayerToolWhere usedLicense
Source-control coreForgejo v15Repo hosting, code review, Actions runner protocolGPLv3
CI runner binaryforgejo-runner (act_runner) v13.2.0Per-job ephemeral ECS VMMIT
Secret scanningGitleaks v8Pre-receive hookMIT
SASTOpenGrep v1.21PR-time analysisLGPLv2.1
Container CVE scanningTrivyCustomer CI + runner-image baked-inApache 2.0
Dependency scanningosv-scannerPR-time analysisApache 2.0
SBOM generationSyftRelease-tag workflowApache 2.0
Image signing + verifycosignPull check, and the informational fremforge/cosign-verify pull-request checkApache 2.0
Keyless code signing — CAFulcio v1.8.5 (Helm chart 2.9.0)Self-hosted on T Cloud Public eu-de at sign.frem.shApache 2.0
Keyless code signing — TSASigstore TSA (timestamp authority)Self-hosted on T Cloud Public eu-de at tsa.frem.shApache 2.0
Customer-side gitsigngitsignCustomer git client; OIDC-bound commit signingApache 2.0
Dependency bumperRenovateHosted bot, 15-min cron, per-repo opt-outAGPLv3
Image build (rootless)kanikoContainer build in customer workflowsApache 2.0
Malware scanningClamAVPre-receive scan + LFS uploadGPLv2
OpenSSF best-practice scoringscorecardWeekly per-repoApache 2.0
Platform CDN + WAFBunny CDNEU-resident edge, no Cloudflare/Fastly(Vendor — EU-based, no US sub-processor)
Cloud platformT Cloud Public (Deutsche Telekom)Compute, storage, networking, DB(Vendor — eu-de region exclusively)
Email (transactional)Lettermint (NL)Auth emails, invoices, alerts(Vendor — EU)
Mailboxmailbox.orgOperational mailbox(Vendor — EU)
PaymentsMollie (NL)Billing(Vendor — EU)
BookkeepingDinero (DK)Invoice issuance(Vendor — EU)

Every vendor on this list is contractually EU-resident with no US sub-processor in the data path. See the trust page for the full DPA + sub-processor chain.

Roadmap (demand-gated)

FeatureStatusTrigger
Bring-your-own-KMS for MASTER_ENCRYPTION_KEY (customer-supplied DEW CMK in their own T Cloud Public account)DesignedFirst customer commits
SLSA build provenance (build-time output-digest capture, so the signed statement refers to an actual build run — the prerequisite for claiming any SLSA level; both Build L3 clauses are already satisfied)ScopedCustomer demand
MCP signing + verifier for AI-agent supply chainDesignedIndustry standard finalises