* Fix network map mobile overflow and infer MQTT hops from SNR=0
- Add min-h-0 and flex-shrink-0 to map layout so legend/actions don't
overflow the viewport on mobile
- Infer viaMqtt=true for traceroute hops with SNR exactly 0
- Change MQTT hop color from purple to orange across map, legend, and
node detail badges
https://claude.ai/code/session_01Ffqq7YPCJE28uUFR88eK7C
* Revert MQTT color to purple; keep SNR=0 MQTT inference
The color change was unintended — MQTT hops should stay purple. The
SNR=0 inference in traceroute processing correctly marks those hops
as viaMqtt so they render as purple dashed lines.
https://claude.ai/code/session_01Ffqq7YPCJE28uUFR88eK7C
* Fix test setup: mock URL.createObjectURL for maplibre-gl
maplibre-gl calls URL.createObjectURL during import for its worker
setup, which doesn't exist in jsdom. Add the mock to test setup.
https://claude.ai/code/session_01Ffqq7YPCJE28uUFR88eK7C
* Run go fmt on unformatted files
https://claude.ai/code/session_01Ffqq7YPCJE28uUFR88eK7C
---------
Co-authored-by: Claude <noreply@anthropic.com>
Replace the flat circular buffer with NodeAwareCache, a smarter eviction
strategy for historical mesh packet data:
- Packets younger than 1 hour are never evicted (recent traffic preserved)
- Under pressure, evict from the lowest-priority type first (neighbor-info
outlasts node-info; chat messages outlast everything)
- Within a priority tier, evict from the most recently active source node —
that node will resend soonest, so its old packet is cheapest to lose
(Bélády approximation; protects flaky/distant node history)
- Node retention window still applies: silent nodes' packets are excluded
from GetAll and pruned proactively before priority eviction runs
Also:
- Add --cache-retention flag (default 3h) and raise --cache-size default to 5000
- Fix decoder error strings (replace verbose Go errors with short codes)
- Add HTTP security headers middleware to server
- Fix broker dispatchLoop deadlock on source channel close
- Fix make gen-proto scanning web/node_modules for .proto files
- Fix tools target always reinstalling protoc-gen-go (handles stale arch binary)
- Move server port from 8080 to 5446; update Dockerfile, docker-compose, moat.yaml
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Refactored decoder to use protobuf-defined Packet, TopicInfo, and Data structures
- Updated MQTT client and broker to work with protobuf structures directly
- Improved logging to properly serialize protobuf messages for structured output
- Optimized .logista.yaml template for cleaner, more compact log display
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add message type prefix in brief mode for quick identification
- Include GatewayID in brief mode summary
- Remove formatted output from structured fields
- Use proper structured fields for each message type
- Add common fields like hopLimit and ID for all messages
- Extract specific data for position, telemetry, and text messages
- Format structured data for better log aggregation compatibility
- Remove file-based logging completely
- Add brief mode for concise log output
- Add full mode with complete message details
- Use structured logging fields for all information
- Keep console output option for readability
- Add intelligent summary handling for different message types
- Add logger injection in client_test.go
- Add logger injection in broker_test.go
- Add test logger with appropriate test namespace
- Fix all tests to work with updated constructor signatures
- Update all components to accept a logger parameter
- Add default fallbacks when logger is not provided
- Ensure consistent logger naming with parent.Named() pattern
- Create a proper logger hierarchy originating from main.go
- Update MessageLogger to pass logger to BaseSubscriber
- Replace fmt.Println with structured logging
- Use structured fields for better filtering and analysis
- Group related data into logical clusters
- Improve readability of statistics in logs
- Keep consistent style with rest of the application
- Replace standard log package with prefab/logging
- Add context-aware logging in HTTP handlers
- Add structured logging with fields and levels
- Improve logging hierarchy and namespaces
- Implement named loggers for components
- Replace if-else chain with cleaner switch statement
- Add support for "c" format messages
- Improve code structure and readability
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Created Packet to combine DecodedPacket and TopicInfo
- Updated MQTT client to return Packet instead of wrapper type
- Modified main.go to use the simplified structure
- Updated tests to use the new Packet type
This change simplifies the API and reduces the cognitive load
for consumers of the MQTT package.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Created new mqtt package with simple client interface
- Implemented buffered channel for decoded messages
- Updated main.go to use the new MQTT client
- Added tests for the MQTT client
- Simplified message handling to focus on 'e' and 'map' formats
- Added TODO for handling JSON format messages
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>