Skip to content

Changelog - Dev - 06.13.2026 โ€‹

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog.


[Unreleased] - 2026-06-13 โ€‹

Added โ€‹

  • Implement user blocking with bidirectional invisibility: Users can now block others with mutual invisibility, preventing blocked users from seeing or interacting with the blocker. Addresses safety concern H-BLOCK. (#597) security
  • Add GitHub Codespaces devcontainer for onboarding: Developers can now spin up a fully configured development environment in Codespaces with committed public Firebase config, reducing setup friction and improving reproducibility. (#597) security
  • Drop amber from lantern match pool with color rotation: Refined beacon color scheme by removing amber and implementing venue-based color rotation for improved visual distinction and user experience. (#597) security

Changed โ€‹

  • Make activeLanternCount server-authoritative with locked rules: Venue active lantern counts are now computed server-side and immutable client-side, preventing manipulation of venue popularity metrics (M-ALCOUNT). (#597) security
  • Authorize lit-presence by fren relationship instead of connection time: Friends' presence visibility now correctly gates on actual fren relationship status rather than a loose 4-hour connection window, tightening privacy controls (CR-6). (#597) security
  • Lock waves and lanterns to server-side creation and updates: Waves can only be created and lanterns only updated/deleted via server APIs, preventing client-side manipulation of core beacon state (CR-2, CR-3). (#597) security
  • Enforce fail-closed E2EE plaintext once both peers have keys: Chat messages automatically fail-closed to encrypted-only mode once both participants have established E2EE keys, eliminating plaintext fallback risks (H-E2EE-2). (#597) security
  • Make PIN failed-attempt counter atomic: PIN brute-force protection now uses atomic counter increments, eliminating race conditions that could allow bypass of attempt limits (M-COUNTERS). (#597) security
  • Block re-registration for banned users and fail-closed phone reclaim: Banned users cannot re-register with the same phone number, and phone number reclaim requests fail-closed if the account is banned (H-BAN, H-RECLAIM). (#597) security
  • Tighten Content Security Policy on web and admin: Removed unsafe-inline and unsafe-eval from script-src CSP directive and added object-src, base-uri, form-action, and frame-ancestors restrictions to prevent injection and framing attacks (M-CSP, L-CSP-EXTRA). (#597) security
  • Consolidate backfill scaffold and align HTML escaping: Unified HTML escaping utilities across shared code to prevent XSS vulnerabilities in backfill operations (CR-15). (#597) security

Fixed โ€‹

  • Fix adminProfiles demote-delete and lock flat venue/offer storage: Corrected admin profile demotion logic and prevented unauthorized modifications to venue and offer documents via Firestore rules (L-GRAB). (#597) security
  • Fix stale mirror, expiry race, name clobber, and self-pin issues: Resolved multiple lantern and wave state consistency bugs including stale data mirrors, expiry race conditions, and self-pinning vulnerabilities (CR-7/8/9/11). (#597) security
  • Close four account-deletion data residue gaps: Ensured complete PII cleanup during account deletion across lanternPins, publicProfiles, beaconInvites, scheduledLanterns, and checkins collections (CR-4, CR-5, CR-10, M-ADMINDEL). (#597) security
  • Bound rate-limiter memory and validate entity attribution: Added memory limits to analytics rate-limiter and enforced entity attribution validation to prevent DoS and data corruption (CR-14, M-ENTITYID). (#597) security
  • Fix broken Pages deploys and SHA-pin GitHub Actions: Restored Cloudflare Pages deployment pipeline and pinned all GitHub Actions to specific commit SHAs to prevent supply-chain attacks (CR-1, CR-12, CI-PIN). (#597) security
  • Fix issue-title mangling and harden dev tooling: Corrected GitHub issue title handling, scoped gitleaks to exclude false positives, and hardened VS Code and development environment security (CR-13, SM-4, M-VSCODE, L-VSCODE2). (#597) security
  • Remove dead plaintext chats and messages rules: Cleaned up obsolete Firestore rules that previously allowed plaintext chat access, reducing attack surface (L-GRAB). (#597) security
  • Fix deletion-cascade PII residue and sanitize lantern names: Eliminated PII leakage in deletion cascades and enforced lantern name sanitization and length constraints to prevent injection attacks. (#597) security
  • Fix deploy-dev Actions injection and harden scanner: Patched GitHub Actions injection vulnerability in deploy-dev workflow and added 14 new Firestore rules tests to prevent regressions. (#597) security
  • Remove phone-to-name oracle and extend PII redaction: Eliminated phone number to name lookup endpoint that leaked user identity and extended Pino logging redaction to always mask PII. (#597) security
  • Fix structural frens dedupe and add ReDoS guards: Corrected friend list deduplication logic and added regex denial-of-service (ReDoS) guards to file system operations (L-GRAB). (#597) security
  • Flag steps.outputs/inputs taint in CI shell sinks: Added Semgrep rules to detect untrusted GitHub Actions step outputs/inputs used in shell commands, preventing injection attacks (CR-12). (#597) security
  • Deterministic devcontainer install to fix corrupted Codespace builds: Locked devcontainer dependency installation to deterministic versions, preventing non-reproducible and potentially compromised builds. (#597) security

Security โ€‹

  • Comprehensive security review and remediation (10 phases, 4 audit rounds): Completed a comprehensive security audit covering backend APIs, Firebase Functions, Firestore/Storage rules, frontend applications, E2EE chat, CI/CD, and edge workers. Fixed ~40 findings across 10 phases with 4 independent audit loops and Copilot code review, addressing critical issues in authentication, authorization, data deletion, rate limiting, CSP, and supply-chain security. (#597) security
  • Annotate 7 verified-legitimate findings with nosemgrep: Documented and suppressed 7 Semgrep findings that were verified as safe after security review, reducing false positives in future scans. (#597) security
  • Apply least-privilege CI permissions and drop unneeded PATs: Restricted GitHub Actions workflow permissions to minimum required and removed unnecessary personal access tokens, reducing credential exposure risk (CI-PERMS, CI-PAT, CI-PRTARGET). (#597) security
  • SHA-pin github-script in post-failure-log composite action: Pinned github-script action to specific commit SHA to prevent supply-chain attacks via action version manipulation (CI-PIN). (#597) security
  • Add E2EE mailbox caps, rotate-on-block, and device guards: Implemented mailbox size limits, automatic key rotation when users are blocked, and device-specific key guards to harden E2EE chat security (H-E2EE-2, M-E2EE-3, M-E2EE-5). (#597) security

Update - 2026-06-13 19:13 UTC โ€‹

Fixed โ€‹

  • Restore reCAPTCHA and Cloudflare beacon origins in web CSP: Fixed a regression where overly-strict Content Security Policy rules broke Firebase App Check (reCAPTCHA) and Cloudflare Web Analytics on the web app, preventing user login and venue loading in development. (#598) bug security

Security โ€‹

  • Harden VSCode editor token and GitHub quoting for Windows: Restricted VSCode editor token to header-only usage and improved GitHub command quoting to be Windows-safe, reducing token exposure surface and preventing shell injection risks across platforms. (#598) security
  • Wire SCHEDULER_SECRET into venue-api deployment: Ensured the SCHEDULER_SECRET environment variable is properly injected during venue-api deployment, securing scheduled task authentication. (#598) security

Update - 2026-06-13 20:48 UTC โ€‹

Added โ€‹

  • Persistent live preview in Create Offer wizard: Merchants can now see a live phone preview while building offers in the Create Offer wizard, enabling real-time validation of how offers appear to end users. (#600) enhancement

Changed โ€‹

  • Redesign Create Offer wizard to match Billing dashboard: The merchant portal's Create Offer wizard interior has been reskinned to align with the admin Billing dashboard design language, including new content cards and reworked Placements page for visual consistency. (#600) enhancement

Update - 2026-06-13 23:27 UTC โ€‹

Fixed โ€‹

  • Heal activeLanternCount drift and de-identify connectionId for pins: Resolves a regression where active lantern counts drifted out of sync and connection IDs were not properly de-identified in pin data, surfaced during browser-based security verification. (#599) security
  • Stop service worker reloading on first install: Eliminates visual flicker caused by unnecessary service worker reloads during initial PWA installation. (#599) security

Security โ€‹

  • Add OIDC-accepting shared guard and lanterns deploy wiring: Implements OIDC-aware authentication guards for the scheduler and wires lantern deployment to enforce identity verification, closing a gap in the authentication flow. (#599) security
  • Align analytics /track entityType enum with shared ENTITY_TYPES: Fixes a validation mismatch where analytics endpoint was rejecting valid entity types, preventing 400 errors and ensuring consistent entity classification across the system. (#599) security
  • Add null-safe Firestore guards and E2EE UserId-reuse fix: Hardens chat message handling with null-safety checks, fixes a potential UserId reuse vulnerability in end-to-end encryption, and enforces 90-day activity retention to limit exposure window. (#599) security

Built with VitePress