Changelog - Dev - 06.17.2026 โ
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
[Unreleased] - 2026-06-17 โ
Added โ
- E2EE device verification with safety numbers: Implements device-trust fingerprinting on per-device ed25519 keys to detect MITM attacks. Device key swaps or ghost devices now flip trust status to 'changed', and roomCrypto cross-checks live vs stored safety numbers to prevent plaintext downgrades and unauthorized message delivery. (#603)
security - E2EE hardening with block exclusion and rate limits: Adds block-list exclusion checks and per-user claim rate limiting to prevent attackers from obtaining encryption keys for blocked users or flooding key-claim endpoints. (#603)
security - Rate-limited server endpoint for to-device messages: Routes to-device message delivery through a server-side rate-limited endpoint to prevent silent drops and enforce consistent rate limits across instances, closing the no-ack-on-drop vulnerability. (#603)
security - Durable cross-instance rate limiting and drop reporting: Implements persistent rate limit tracking across server instances and adds telemetry to report to-device message drops, enabling detection of delivery attacks. (#603)
security - Server-side venue refresh lock with heartbeat: Moves venue metadata refresh locking from client to server with token-based fencing and heartbeat monitoring, preventing concurrent refresh races and geohash precision deduplication issues. (#603)
security - Secret Manager migration finalization for dev: Completes Google Cloud Secret Manager migration for dev environment, retiring SCHEDULER_SECRET and establishing safe secret rotation procedures. (#603)
security
Changed โ
- Remove manual safety-number verification from chat UI: Simplifies E2EE UX by removing manual safety-number verification flows, now handled automatically through device-trust fingerprinting. (#603)
security - Restrict offers to three placements, chat remains ad-free: Removes chat as an offer placement option, ensuring the chat experience remains ad-free and focused on user privacy. (#603)
security - Update block modal copy to reflect self-serve unblock: Corrects user-facing messaging to accurately reflect that blocks can now be self-managed, removing outdated 'cannot be undone' language. (#603)
security
Fixed โ
- Repair gitleaks allowlist and address code review findings: Fixes inert gitleaks allowlist configuration and remediates multi-agent code review findings across E2EE, venue locking, rate limiting, and analytics. (#603)
security - Allow maplibre blob worker in CSP for venues map: Updates Content Security Policy to permit maplibre blob workers, restoring venue map functionality. (#603)
security - Stop silent analytics event drops and fix forge detection: Prevents analytics events from being silently dropped and corrects environment detection for forge deployments, ensuring event visibility. (#603)
security - Land server forge events and deduplicate client flash: Enables server-side event logging for forge environments and removes duplicate client-side event flashing. (#603)
security - Bootstrap derives project-id constants and refresh docs: Fixes bootstrap configuration to properly derive project-id constants and updates onboarding documentation. (#603)
security - Clarify GOOGLE_APPLICATION_CREDENTIALS requires service account: Corrects environment documentation to specify that GOOGLE_APPLICATION_CREDENTIALS must reference a service account key, not Application Default Credentials. (#603)
security
Removed โ
- Remove chat placement from merchant offer form: Removes chat as an offer placement option from the merchant interface, backend schema, and ad render paths to keep chat ad-free. (#603)
security
Security โ
- Close device-trust MITM, no-ack-on-drop, block, and plaintext-downgrade holes: Comprehensive E2EE hardening that closes four critical attack vectors: MITM via device-key swaps, silent message drops without acknowledgment, key claims for blocked users, and plaintext fallback attacks. (#603)
security - Document deferred M-E2EE-6 to-device relationship gate: Tracks deferred security work on relationship-based access control for to-device messages in the security tracker. (#603)
security - Document SCHEDULER_SECRET deletion and retirement plan: Records SCHEDULER_SECRET deletion on dev (scheduled for 2026-06-16) and provides safe deletion script for secret retirement. (#603)
security - Document custom-token and Stage B identity-sealing decision: Records privacy architecture decisions regarding custom token handling and identity-sealing in Stage B. (#603)
security - Document OTP provider selection and testing approach: Clarifies OTP provider selection (Prelude) and documents free test numbers plus pay-as-you-go testing options for security validation. (#603)
security - Consolidate E2EE hardening rollout and next steps: Centralizes E2EE security hardening progress and deferred work items in the security tracker for visibility and planning. (#603)
security - Mark Firestore migration O4 complete on dev: Records completion of D1-D3 Firestore migration work on dev environment in the security tracker. (#603)
security
Update - 2026-06-17 21:46 UTC โ
Added โ
- Merchant dashboard with Account settings and offer review: Redesigned merchant dashboard information architecture with a new Account section (Profile, Business, Team, Security), offer review checklist, and progress-rail sidebar navigation. This continues the merchant offer-create workflow improvements and provides merchants with better organization of account management features. (#605)
enhancement
Update - 2026-06-17 22:19 UTC โ
Fixed โ
- Archive connection on block instead of failed delete: Blocking a user or removing a chat connection now archives the connection instead of attempting a client-side delete, which was denied by Firestore security rules. This resolves the issue where block and remove actions appeared to fail silently. (#604)
bug - Relax CSP for bundled docs and storybook tooling: Updated Content Security Policy to allow bundled documentation and Storybook tooling to load properly in development environments. (#604)
bug