Last updated: July 17, 2026
Understanding how SiftPulse touches your data starts with understanding the request path it follows.
POST https://siftpulse.polsia.app/github/webhookPOST https://siftpulse.polsia.app/webhooks/gitlabPOST https://siftpulse.polsia.app/webhooks/renderPOST https://siftpulse.polsia.app/api/webhooks/stripeCache-Control: no-store so CloudFront (or any CDN) cannot cache an upstream auth failure and replay it on the next legitimate event.
routes/github.js, routes/gitlab.js, or routes/bitbucket.js). We verify the signature against a platform-issued secret before processing anything..env-style assignments, common credential regexes) before assembling the review prompt.POLSIA_AI_BASE_URL proxy. The cleaned prompt is sent through services/pr-review.js to the configured AI provider over the Polsia-managed AI proxy. The provider processes the request and returns structured findings (verdict, blockers, suggestions, nits).Throughout this flow, we do not control your infrastructure, operational technology (OT), or industrial control systems (ICS) — SiftPulse analyzes source code in pull requests and issues only.
SiftPulse collects the following categories of information, all in service of running AI code reviews and powering the customer dashboard:
For Marketplace reviewers and security teams, here is the enumerated data-access taxonomy SiftPulse is built around. Each category show where the data originates, where it is stored, and which sections below cover sub-processors and retention in detail.
github_installations.selected_repo_ids, bitbucket_installations.selected_repos, and the gitlab_installations row so we know which repos to subscribe to webhooks for.pr_review_events, triage_events, and pr_nudge_events to power the dashboard, activity feed, DORA metrics, and digest.pr_review_events, tldr_comment_events, and suggestion_events.users, subscriptions, and dashboard_sessions tables; payment cards live only inside Stripe.We do not sell, rent, or share your personal information with third parties for marketing purposes. This list mirrors our Privacy Policy — if these two lists ever drift, the Privacy Policy is the authoritative source.
What we never send to model providers: environment variables, secret keys, tokens, .env files, database credentials, or any content matching patterns like -----BEGIN RSA PRIVATE KEY-----. The diff parser strips these before constructing the prompt, and we never send the full repository codebase — only the files and lines changed in the PR or issue under review.
In transit. All traffic between your browser, our application servers, your code-hosting platform, and our AI providers is encrypted with TLS 1.2 or higher. We do not accept connections on plaintext HTTP for any service-to-service or browser-to-app path.
At rest. Customer and review data is stored in Neon PostgreSQL (US-East region) with AES-256 encryption at rest enabled by Neon. Application-layer data processed within Render uses Render's encrypted storage. Review event payloads and billing records inherit the same encryption-at-rest posture.
Webhook signatures. Inbound webhooks from GitHub, GitLab, and Bitbucket are verified using platform-issued signing secrets before any payload is processed. Webhook signing secrets are stored as environment variables and are never logged.
SiftPulse operates on a least-privilege model across both platforms and our own infrastructure.
/app uses magic-link authentication only — no passwords. Tokens are stored hashed in the dashboard_sessions table and expire after 7 days of inactivity. The session cookie is HMAC-SHA256 signed, httpOnly, and SameSite=Lax.Looking for SAML / SSO? See /security/enterprise for the current auth model (GitHub OAuth + magic link, no separate credential store) and the explicit SAML/SSO + SCIM roadmap.
Each row below uses the exact scope name GitHub renders in the App install dialog, with one-line justification pulled from the code that actually uses the scope.
| Scope | Access | Why we need it |
|---|---|---|
| Metadata | Read-only (default) | Used everywhere we look up a repo by ID; consumed by lib/github-auth.js and every services/github-api.js call. |
| Contents | Read | Fetches the unified diff and changed files for the PR or issue under review (see services/pr-review.js diff loader); never requests write — no commits, no pushes. |
| Issues | Read & write | Reads issue bodies for triage; writes triage labels, priority comments, and related-PR routing notes (routes/github.js, services/issue-triage.js). |
| Pull requests | Read & write | Reads PR context (title, author, branch, base); writes review comments, TL;DR sticky comments, suggestion blocks, and merge-readiness summaries (services/pr-review.js, services/pr-tldr.js, services/pr-suggestions.js, services/pr-readiness.js). |
| Members | Read-only (orgs only) | Used only by the reviewer-suggestion feature to look up candidate reviewers from CODEOWNERS or org membership (services/reviewer-suggestions.js). |
The App install dialog will not show any of the following — requesting them would expand SiftPulse's blast radius without buying anything we need to run a code-review agent:
SiftPulse uses the following third-party sub-processors to deliver the Service. Each is listed with the purpose for which it is engaged and the specific data it receives.
| Sub-processor | Purpose | Data shared |
|---|---|---|
| OpenAI | Code analysis (default) | api.openai.com — US; will not train on code per OpenAI's API terms |
| Anthropic | Code analysis (secondary) | api.anthropic.com — US; will not train on code per Anthropic's API terms |
| Stripe | Billing and subscription | Stripe — US |
| GitHub | App platform, OAuth, webhooks | GitHub — US |
| Render | Application hosting | Render — US |
A summary of the formal certifications SiftPulse is working toward, has obtained, or is out of scope for, plus where to find the supporting evidence. This section is what Marketplace enterprise reviewers cite when scoring trust content.
lib/ai-act-disclosure.js. SiftPulse is not classified as high-risk under Annex III — see the full walk-through in section 7 below. A Data Processing Agreement (DPA) is available on request via the contact in section 9.https://siftpulse.polsia.app/trust/SOC2-Type-II.pdf once issued. Prior to issuance, an executive summary is available under NDA — write to security@siftpulse.polsia.app.Need controls evidence, the SOC 2 executive summary, or our DPA? Email security@siftpulse.polsia.app. We usually reply within 2 business days.
SiftPulse is subject to the EU AI Act as a general-purpose AI system deployed for code review. This section describes how we meet our transparency obligations and why SiftPulse is not classified as a high-risk system under Annex III.
SiftPulse is not a high-risk system under Annex III — SiftPulse reviews source code, not natural persons.
Every comment SiftPulse posts includes the AI-generated disclosure with link.
SiftPulse does not evaluate, rank, score, or profile individuals, and does not access biometric, identity, or employment data.
The EU AI Act's Article 50 requires that AI-generated content disclosed to the public be labeled so users know it was produced by an AI system. SiftPulse posts AI-generated PR review comments, issue triage notes, reviewer suggestions, merge-readiness summaries, TL;DR summaries, stale-PR nudges, weekly digest emails, and dashboard activity feeds. Every one of those surfaces includes a visible footer:
— This comment was generated by SiftPulse AI, an automated code review system. See AI Act disclosure.
The footer is appended by lib/ai-act-disclosure.js from a single source of truth so no surface can silently drop the disclosure. Questions about our AI Act compliance posture or the per-comment footer? Contact security@siftpulse.polsia.app — see also Responsible disclosure below.
Annex III of the EU AI Act lists eight categories of AI systems that are classified as high-risk and subject to conformity assessment, ongoing monitoring, and registration in an EU database. Walking through each:
SiftPulse reviews source code in pull requests and issues. It does not screen people, grade students, identify individuals biometrically, make decisions about employment, allocate public benefits, or assist law enforcement. None of the Annex III categories apply, so SiftPulse is not classified as a high-risk AI system under the AI Act.
SiftPulse does not store code or PR content. Review data is processed in memory per review and discarded after the comment is posted. The resulting review comment lives only in your repository under normal GitHub retention. The retention rules for each data bucket are explicit below.
| Bucket | Retention window |
|---|---|
| Raw diffs and full source files | Never stored. Discarded after the AI response is posted back to your PR. |
| Structured review findings (verdict, severity counts, summary excerpt, comment IDs) | Retained while your installation is active; purged within 30 days of GitHub App uninstall or a written deletion request. |
| Comment text we author on your PRs | Lives in your repo under normal GitHub retention — we do not redact or remove it on our side. |
| Triage / TL;DR / suggestion event rows | Same 30-day-on-uninstall rule as review findings. |
Deletion on request. You can request immediate deletion of your account, billing records retention notwithstanding, by emailing privacy@siftpulse.polsia.app. We verify the request and complete deletion within 30 days. See the Privacy Policy for the full process.
App-uninstall behaviour. If you uninstall the SiftPulse GitHub App, GitLab OAuth app, or Bitbucket OAuth consumer from your organization, SiftPulse immediately stops processing new webhooks for that installation. Review event rows already in our database (pr_review_events, tldr_comment_events, suggestion_events, triage_events) are purged within 30 days of uninstall. To request immediate deletion before the 30-day window, email privacy@siftpulse.polsia.app — see GDPR / CCPA rights below.
Depending on where you reside, you may have the following rights regarding your personal data:
Full definitions and the exact process for exercising these rights are in our Privacy Policy.
GDPR (EU/EEA): SiftPulse offers a Data Processing Agreement (DPA) for customers subject to GDPR. Request the DPA by emailing hello@siftpulse.polsia.app.
CCPA (California): California residents have the right to know what data we collect, delete it, and opt out of the sale of personal information. We do not sell personal information. To exercise your rights, contact us at the email above.
We welcome reports from security researchers and customers who find a vulnerability in SiftPulse.
Report a vulnerability: security@siftpulse.polsia.app
2 business days.weekly until fix shipped or risk-accepted of acknowledgement.What to include: a clear description of the issue, affected endpoints or repos, and any proof-of-concept or reproduction steps. Please do not include actual customer data in your report.
Encrypted contact (optional). If you need to send sensitive details, use security@siftpulse.polsia.app with a PGP key available on key servers. Our PGP key is also linked from our keybase.io/siftpulse profile.
Live status and historical uptime are published on our status page: https://siftpulse.polsia.app/status.
Until that page goes live, planned maintenance and incidents are announced in our /changelog and via your install email if the impact is customer-visible.
Service uptime: SiftPulse is provided on an "as is" and "as available" basis. We do not guarantee 100% uptime — see our Terms of Service — Disclaimers for the full disclaimer.
Run SiftPulse inside your own infrastructure — no data leaves your network.
Current status: On-premise and VPC (AWS, GCP, Azure) deployment is planned but not yet available. This will allow enterprises to run SiftPulse inside their own network, keeping all code and review data within their infrastructure. The AI inference layer will need to be self-hosted or use a BYOK key routed through a private model endpoint.
Customer interest helps us prioritize. If you need on-premise for a compliance requirement, the waitlist below moves the priority up.
Join the waitlist — we'll notify you when it's available.