Security
Trusted with read access, designed like it
Patchline reads customer source code, which makes security posture the product. This page states what we do in the same terms as our repository's SECURITY.md — each claim below is cross-checked against the implementation and its tests.
What happens to your code
-
processed
Never retained
Repo tarballs are extracted to a temporary directory, indexed, and deleted in a
finallyblock — the working copy is removed even when indexing fails. -
stored
The index only
Provider dependencies (package name and version) and call-site locations (file path, line number, provider, API surface). Change events and generated reports. No source file contents are persisted.
-
shared
With no one
Reports and PRs contain file paths, line numbers, API surfaces, the agent's own proposed diffs, and validation output. Nothing about your repository is shared with the API providers or anyone else.
GitHub App permissions, and why each exists
| Permission | Level | Why |
|---|---|---|
| Repository contents | read-only | Index which provider SDKs you use and where they are called |
| Issues | write | Deliver blast-radius reports as labeled issues on affected repos |
| Pull requests | write | Open migration PRs for repos that opt in — never auto-merged |
| Metadata | read | Basic repository info: name, default branch |
That is the complete list. No admin scopes, no workflow scope, no organization-level access.
Sandboxing the migration agent
Generated patches are validated by running the target repo's own test suite in an isolated environment — user namespaces where available, otherwise docker run --network=none. Network isolation is verified by an automated test, and the isolation level achieved is recorded in every confidence score: an un-isolated run is penalized and can never silently upgrade to a PR.
Webhooks, secrets, and supply chain
-
webhooks
Verified before processed
Every GitHub delivery is HMAC SHA-256 verified with constant-time comparison; unsigned or mis-signed requests are rejected with 401 before any processing. Replayed delivery ids are acknowledged but cause no side effects, and webhook routes enforce body-size limits and per-client rate limiting.
-
secrets
Environment-only, scanned in CI
All credentials come from environment variables validated at boot; nothing is hardcoded. Every push runs a gitleaks scan whose allowlist covers only an intentionally fake test string.
-
supply chain
Frozen and offline-tested
Dependencies are locked and installed with
--frozen-lockfilein CI and Docker builds. The test suite runs fully offline against checked-in fixtures, so dependency drift breaks CI — not production.
Reporting a vulnerability
Email rvasqz86@gmail.com with subject [patchline security]. You will get an acknowledgment within two business days. Please do not open public issues for security reports; we credit reporters in release notes unless you prefer otherwise.