Skip to content

Security

Protect RADFORGE_API_TOKEN as a secret. If you suspect exposure, stop using the token and request revocation through the contact method provided during onboarding before investigating further.

Each hosted submission contains a JSON plan and a checksum-verified final-state snapshot of files tracked by Git. The snapshot preserves regular-file bytes, executable mode, and safe relative symlinks. It excludes untracked and deleted files, special files, and paths outside the repository. Submodules and unsafe, dangling, or cyclic symlinks are rejected. Git LFS pointer files are included as the bytes present locally without automatic LFS download.

For incremental submission, content digests are reusable only after Radforge has proved them for the authenticated organization and repository. A digest is an identifier, not authorization, and does not reveal content held for another repository. Newly uploaded blobs are checked against their declared size and SHA-256 digest before a manifest can reference them. Legacy clients and saved plans can use the full compressed-archive path.

Direct transfers use short-lived signed URLs for one object and one operation, not bucket credentials. Treat these URLs as secrets: do not copy them into logs, issue reports, or shared messages. Plan and source downloads bind the exact stored object version. Repository artifacts use repository-scoped physical storage keys, so identical content in another repository does not share its object or grant access.

When direct upload is enabled, the CLI uploads to a staging object. Radforge checks the stored bytes, declared size, digest, and artifact format before making the artifact available for submission. Receiving a storage upload success does not mean the artifact has passed verification.

Canceling an attempt prevents new download grants for that attempt. A signed URL already issued remains usable until its expiry, for at most 30 minutes after issuance. Cancellation does not revoke downloaded bytes or immediately invalidate an existing storage URL.

The execution sandbox receives a credential that is valid only for one run attempt. It does not receive reusable GitHub, storage, workflow, or Radforge API credentials.

Repository code and dependency hooks run as an unprivileged identity in isolated infrastructure managed by Radforge. In the no-network profile, the trusted supervisor can contact Radforge and exact private-storage endpoints, but repository-controlled child processes cannot create Internet sockets or inherit proxy settings. The restricted profile permits only the dependency destinations configured for that worker. Execution workspaces are temporary. Other records follow the retention rules in the Privacy Policy.

GitHub App permissions are limited to checks write and contents, metadata, and pull requests read. Review repository selection and uninstall the app when access is no longer needed.

Mutation results are not a security certification. Continue to use code review, dependency controls, static analysis, secret scanning, and security tests.

Report a suspected vulnerability through the contact method provided during onboarding and request a secure channel. The public private-beta request form does not accept a report. Do not include exploit payloads, credentials, diagnostic details, or customer source in that form.