Encrypt synchronized Saved Searches at rest #1126

Closed
opened 2026-08-19 10:49:49 +00:00 by rockachopa · 0 comments
Member

Problem

Saved Search names, query text, and repository scope are synchronized to saved-searches.sqlite3 as plaintext (src/saved_search_store.py). A copied state volume, WAL, backup, or host snapshot can expose private operator intent even though adjacent private-state stores use the existing AES-256-GCM envelope.

History review covered 565 issues, 557 PRs, releases through v0.1.0-rc.1353, and recent main commits through 3d4be0a. No issue, PR, or commit encrypts Saved Searches. The related completed work encrypts Drafts, snapshots, Push, Today, Later, Security activity, and idempotency data only.

Acceptance criteria

  • Saved Search view collections are encrypted with the configured private-state key and account-bound authenticated context.
  • Unique view/query/repository canaries do not appear in the SQLite payload; reopening with the same key preserves order, fields, and revision.
  • Legacy plaintext rows migrate lazily and atomically without changing revision.
  • Wrong-key, tampered, malformed, and cross-account-substituted payloads fail closed without returning private content.
  • Existing optimistic conflict behavior, validation, limits, account isolation, and no-store API behavior remain unchanged.
  • README documents Saved Search coverage and recovery behavior.
  • Focused tests and full suite pass.
## Problem Saved Search names, query text, and repository scope are synchronized to `saved-searches.sqlite3` as plaintext (`src/saved_search_store.py`). A copied state volume, WAL, backup, or host snapshot can expose private operator intent even though adjacent private-state stores use the existing AES-256-GCM envelope. History review covered 565 issues, 557 PRs, releases through v0.1.0-rc.1353, and recent main commits through 3d4be0a. No issue, PR, or commit encrypts Saved Searches. The related completed work encrypts Drafts, snapshots, Push, Today, Later, Security activity, and idempotency data only. ## Acceptance criteria - Saved Search view collections are encrypted with the configured private-state key and account-bound authenticated context. - Unique view/query/repository canaries do not appear in the SQLite payload; reopening with the same key preserves order, fields, and revision. - Legacy plaintext rows migrate lazily and atomically without changing revision. - Wrong-key, tampered, malformed, and cross-account-substituted payloads fail closed without returning private content. - Existing optimistic conflict behavior, validation, limits, account isolation, and no-store API behavior remain unchanged. - README documents Saved Search coverage and recovery behavior. - Focused tests and full suite pass.
timmy was assigned by rockachopa 2026-08-19 10:49:49 +00:00
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: stackchain/stackchain-dashboard#1126
No description provided.