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
calculateDistancefunction 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):
lightLanternSecureandextinguishLanternSecureCloud 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,privacylabels 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 inexcludedLabelsarray - 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
cachedVenuesandsetCachedVenuesprops 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=trueenvironment 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:realor manual environment variable setting - Updated documentation in
TESTING_AI_ISSUE_TRIAGE.mdto reflect new requirements
Fixed
- Firestore security rules for venue lantern count updates: Changed
hasOnlytodiff().affectedKeys().hasOnly()to properly allow authenticated users to updateactiveLanternCountfield - Label validation in triage consistency checker: New validation step (step 5) checks that ALL repo labels are accounted for (either in
labelsorexcludedLabels) - 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