Skip to content

Changelog - v0.1.0 - 01.18.2026

Date: 01.18.2026
Environment: dev
Version: v0.1.0

Added

  • Geofence proximity validation for lantern lighting (#28): Users must now be within venue geofence (default 100m, or custom venue.radius) to light a lantern
  • Exported calculateDistance function from venueService for use in proximity validation
  • Comprehensive geofencing unit tests (src/__tests__/geofencing.test.js): 15 tests covering Haversine distance calculation accuracy, boundary conditions, and formatDistance formatting
  • Lantern proximity validation tests (src/__tests__/lanternProximity.test.js): 13 tests covering within-geofence, outside-geofence, custom venue radius, and integration with existing lantern checks
  • Server-side proximity validation via Cloud Functions (#28 Phase 2): lightLanternSecure and extinguishLanternSecure Cloud Functions provide tamper-proof geofence validation
  • Client falls back gracefully: If Cloud Function is unavailable, client-side validation is used as fallback
  • AI triage workflow improvements: Added devops, security, design, analytics, marketing, ops, privacy labels to differentiate issue types
  • Labels config in triage-categories.json: Labels are now defined in the config file (source of truth) and dynamically loaded by the workflow
  • excludedLabels config: Labels that exist in repo but shouldn't be auto-applied by AI (e.g., discord-submission, dependencies) are now tracked in excludedLabels array
  • Venue cache manager (src/lib/venueCacheManager.js) for managing cached venue data across navigation
  • Venue state caching at App-level to preserve loaded venues when navigating away and back to Dashboard
  • Cache validation with TTL-based expiration (default 5 minutes) to prevent stale data
  • Debug logging for cache hits/misses to monitor Firestore read optimization

Changed

  • Dashboard now accepts cachedVenues and setCachedVenues props from App component
  • Venue loading in Dashboard skips Firestore query if valid cache exists, preventing unnecessary reads
  • Cache is automatically created when venues are loaded and stored at App level
  • Real-time venue subscription logic now works with both cached and freshly loaded venues
  • Cache now stores full venue list including lazily-loaded venues beyond initial 20 batch
  • Cache now preserves loading state (totalVenuesFetched, allVenuesLoaded) to restore exact UI state
  • Cache now preserves scroll position with real-time scroll tracking (throttled to 150ms)
  • Dashboard uses ref-based initialization flag to prevent reload loops
  • Main content area now has overflow-y-auto to enable scrolling
  • AI Issue Triage Tests: Real API tests now require explicit RUN_REAL_API_TESTS=true environment variable to prevent accidental API costs during regular test runs (e.g., npm run check, npm test)
    • Mock tests remain free and run normally during all test runs
    • Real API tests only run when explicitly requested via npm run test:workflows:real or manual environment variable setting
    • Updated documentation in TESTING_AI_ISSUE_TRIAGE.md to reflect new requirements

Fixed

  • Firestore security rules for venue lantern count updates: Changed hasOnly to diff().affectedKeys().hasOnly() to properly allow authenticated users to update activeLanternCount field
  • Label validation in triage consistency checker: New validation step (step 5) checks that ALL repo labels are accounted for (either in labels or excludedLabels)
  • 12 new GitHub issues created from TODO.md for better project tracking:
    • Safety: SOS Emergency System (#128), Safe Spaces Partnership (#129), In-App Safety Education (#130)
    • Core Features: Frens Backend Integration (#131), Wire UserProfile to Firebase (#132), Two-Device Sync Testing (#133), Lantern Auto-Shutoff & Waves (#134)
    • Merchant Phase 1: Data Model (#135), Discovery & Signup (#136), Access Control (#137), Admin Review (#138), Wire Offers to API (#139)
  • Reduced Firestore read costs: Prevents duplicate Firestore getDocs() calls when navigating away from Dashboard and back
  • Fixed infinite reload loop caused by cache update dependency chain
  • Fixed scroll position loss when navigating away and back to Dashboard
  • Fixed scroll position persistence during route navigation with continuous scroll event tracking
  • Estimated 40-60% reduction in venue loading read costs by caching venues during session
  • Venues now persist during navigation: All loaded venues (including scrolled-to venues) are cached and restored
  • Scroll position is now tracked in real-time and restored automatically when returning to Dashboard
  • Discord commit notifications now fail fast when webhook secrets are missing or empty, with HTTP status logging
  • Notification history commit step now detects real changes (no more silent skips) and avoids extra checkout wiping state

Deprecated

Removed

Security

Built with VitePress