72ab9274c7
fix-mobile-qr-layout ( #44 )
...
Co-authored-by: Forgejo Actions <actions@git.mcintire.me>
Reviewed-on: graham/towerops-web#44
2026-03-16 14:24:51 -05:00
8abf01ccb1
fix-mobile-qr-device-info-width ( #43 )
...
Co-authored-by: Forgejo Actions <actions@git.mcintire.me>
Reviewed-on: graham/towerops-web#43
2026-03-16 14:02:31 -05:00
7251930404
add mobile app websocket channel and improve QR linking UX
...
- add MobileSocket for token-authenticated mobile WebSocket connections
- add MobileChannel with org-level and device-level real-time events
- add /mobile/socket endpoint for iOS app connections
- add "Link Mobile App" to user dropdown menu for discoverability
- improve QR code page with numbered steps and clearer instructions
- add socket/channel tests (17 total)
2026-03-13 17:28:36 -05:00
f2608e8f16
fix: status emoji accumulating in page title and add missing page titles
...
Fix JS regex in StatusTitle hook to use unicode flag so emoji are
properly matched and replaced instead of accumulating. Add page_title
to 8 LiveViews that were missing it, which caused "TowerOps | TowerOps"
duplication from the live_title suffix.
2026-03-11 09:54:18 -05:00
86a5dc728c
fix: comprehensive bug fixes from reliability audit
...
Critical Fixes (5):
- Fix Task.yield_many race condition causing data corruption in DevicePollerWorker
- Fix Enum.zip data corruption in SNMP Base Profile with length validation
- Fix missing Alert schema fields for check alerts (check_id, severity, etc.)
- Fix memory leaks from uncancelled LiveView timers in 4 components
- Fix PubSub subscription leak in device form credential testing
High Severity Fixes (3):
- Fix clock skew bug in needs_discovery? check with DateTime.diff clamping
- Fix nil crash in interface status display with proper nil handling
- Fix migration index names after equipment→devices table rename
Medium Severity Fixes (6):
- Fix race condition in device monitor worker (duplicate maintenance checks)
- Fix missing preload validation in devices.ex get_org_default_agent
- Fix broad rescue clause in alerts.ex with specific error handling
- Fix fire-and-forget notification tasks with try-catch error logging
- Fix LiveView state bleeding between tabs (assign_new → assign)
- Add catch-all handle_info callbacks to 3 LiveViews
Infrastructure:
- Silence health check endpoint logs (/health, /health/time)
- Add migration to fix equipment index names missed in rename
Files Changed: 16 files modified, 1 migration added
All changes compile successfully and are backward-compatible.
2026-03-05 08:53:30 -06:00
243b773e39
i18n: wrap all user-facing strings in gettext()
2026-02-14 17:44:01 -06:00
c54b5d81bb
more dark mode
2026-01-20 17:23:11 -06:00
16bfd7667d
fix: pass timezone attribute to all layout components
2026-01-18 12:49:01 -06:00
b53a53b199
Add comprehensive Dialyzer type specifications
...
- Add @type definitions to all schema modules:
- User, UserCredential, Membership, Invitation
- Organization, Site, AgentAssignment
- InterfaceStat, SensorReading, Alert
- Fix all compilation warnings with stronger Elixir types:
- Remove unused require Logger in log_filter.ex
- Remove unused parse_float(nil) clause
- Add pin operators (^) for variables in binary pattern matches
- Fix Dialyzer errors (25 → 0):
- Remove unreachable pattern match clauses
- Fix unmatched return values with _ = prefix
- Update @spec for deliver_alert_notification/1
- Properly handle all Phoenix.PubSub.subscribe and Task.start return values
- Explicitly ignore if statement return values where needed
All files now pass mix compile --warnings-as-errors and mix dialyzer.
2026-01-17 10:52:02 -06:00
c7f02eac24
add api for mobile login
2026-01-15 15:36:14 -06:00