Docs article
Privacy
Understand what is stored, what is not, and the local-first data handling model.
Privacy#
TasteKernel is local-first by default. Source analysis happens in your repo; cloud storage is scoped to project metadata, contracts, and run diagnostics.
Data stored in cloud#
Per project:
- Project metadata (
name,slug, owner linkage) - Contract versions and active contract pointer
- API key records (hashed; plain key shown only at creation)
- Run metadata (
commitSha,branch,prNumber, status, CI provider, timestamps) - Findings (
ruleId, severity, file path, position, message, waiver metadata)
Optional by project setting:
- Compact finding snippets (
snippetStorageOptIn)
Data not stored by default#
- Full repository contents
- Full source file uploads
- Design files
- Screenshots or visual captures
- Secret values from your environment
Authentication and authorization#
- Dashboard access requires GitHub OAuth via Auth.js.
- Project-scoped CI ingestion uses API keys.
- API keys are verified against stored hashes.
- Revoked keys are rejected.
API key handling#
- Generated server-side
- Returned once in plaintext at creation time
- Persisted as hash with prefix for operator display
- Revocation marks
revokedAtand disables future access
Ingestion posture#
- Ingestion endpoints accept findings and run metadata.
- Invalid or missing keys return 401.
- Basic rate limiting is applied to ingestion routes.
- Ingestion payloads are schema-validated and normalized by route logic.
Contract and run history#
- Contract versions are immutable records tied to project/version.
- Active contract publish updates project active pointer.
- Run history is append-only from ingestion events.
- Waiver flags and reasons are persisted in finding records.
Operator controls#
In project settings you can:
- Set default severity threshold
- Enable/disable compact snippet storage
- Create and revoke API keys
Verification checklist#
- Confirm no source code upload is required for normal lint usage.
- Confirm ingestion payload excludes full file contents.
- Confirm DB rows contain metadata and diagnostics, not repository blobs.
- Confirm revoked API key cannot ingest new runs.
Incident response notes#
- If key exposure is suspected: revoke key immediately and issue a new key.
- If unexpected payloads appear: inspect ingestion logs and rotate affected keys.
- If auth behavior regresses: run protected-route curl matrix and security scan before re-release.