Encrypt completed Filed review history at rest #1252

Closed
opened 2026-08-22 06:01:22 +00:00 by timmy · 0 comments
Owner

Evidence

Completed Filed acknowledgement history is the remaining synchronized task-bearing store that writes operator login, repository, issue number, and timestamp as plaintext SQLite columns (src/completed_filed_review_store.py). Adjacent private stores use authenticated envelopes, and scripts/rotate_private_state.py does not include this store. Full historical issue/PR-title review and recent history through main a4498fd found no prior encryption slice for these receipts; #880/#881 introduced sync behavior and #1237/#1238 introduced rotation for other stores.

User impact

Preserve the cross-device Filed → Reviewed flow while preventing copied state volumes, WAL files, and backups from exposing private repository/issue acknowledgement history. Existing rows must migrate without loss and shared-key rotation must cover the store.

Acceptance

  • Receipt task details are sealed in an account-bound authenticated envelope; plaintext canaries do not remain in the database after migration/write.
  • Existing multi-account plaintext rows migrate transactionally with order, newest-update, account isolation, and 200-item bounds preserved.
  • Wrong keys, tampering, malformed envelopes, and cross-account substitution fail closed without returning receipt content.
  • The private-state rotation command reports and rewraps this store without printing private content and is idempotent.
  • Focused tests and the full suite pass.
## Evidence Completed Filed acknowledgement history is the remaining synchronized task-bearing store that writes operator login, repository, issue number, and timestamp as plaintext SQLite columns (`src/completed_filed_review_store.py`). Adjacent private stores use authenticated envelopes, and `scripts/rotate_private_state.py` does not include this store. Full historical issue/PR-title review and recent history through main a4498fd found no prior encryption slice for these receipts; #880/#881 introduced sync behavior and #1237/#1238 introduced rotation for other stores. ## User impact Preserve the cross-device Filed → Reviewed flow while preventing copied state volumes, WAL files, and backups from exposing private repository/issue acknowledgement history. Existing rows must migrate without loss and shared-key rotation must cover the store. ## Acceptance - Receipt task details are sealed in an account-bound authenticated envelope; plaintext canaries do not remain in the database after migration/write. - Existing multi-account plaintext rows migrate transactionally with order, newest-update, account isolation, and 200-item bounds preserved. - Wrong keys, tampering, malformed envelopes, and cross-account substitution fail closed without returning receipt content. - The private-state rotation command reports and rewraps this store without printing private content and is idempotent. - Focused tests and the full suite pass.
timmy closed this issue 2026-08-22 06:31:02 +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#1252
No description provided.