- feat(sat): error when no PlutoSDR is connected
- feat(sat): print web GUI URL at top of sat scan output
- feat(sat): decrypt device-uptime payloads and auto-detect counter mode
- refactor: extract decryption auto-detection into detect.py
- refactor(cli): drop redundant explicit check in sat_scan device-uptime guard
- refactor(cli): share CTR counter-mode auto-detection across BLE and satellite
- feat(sat): decrypt scan payloads with --key
- fix(cli): hide non-decryptable packets when scanning with a key
- docs: add ble validate CLI section to README
- feat(cli): auto-detect counter_source and period_exponent in
ble detect
- feat(cli): auto-detect counter_source and period_exponent in
ble scan - feat(cli): accept hex or base64 keys, auto-detect 128/256-bit
- chore(ble): rename --scale-factor to --period-exponent / -e
- feat(org): add period_exponent for AES-EAX device registration
- feat(ble): skip failed decrypts by default, add unified packet columns
- feat: add AES-128-EAX encrypted device registration support
- fix(org): decode API payload bytes in retrieve_packets
- fix(cli): rename SEQ column to SALT for AES-EAX packet display
- fix(crypto): show pre-scale-factor counter in AES-EAX decryption
- fix(cli): handle mixed packet types in streaming table printer
- fix(cloud): fix device registration
- feat: add AES-EAX encrypted packet support
- feat(ble): add unencrypted protocol support with auto-detection
- feat(crypto): change counter_mode from bool to UNIX_TIME/DEVICE_UPTIME string
- feat(sat): add status messages and --debug flag to sat scan commands
- fix(crypto): fix EID pool size to 128 for counter mode
- docs: document fixed EID pool size and --counter-mode flag
- feat(sat): add mock-scan command for testing without hardware
- test(sat): add GitHub Action and integration tests for mock scanning
- fix(sat): improve Docker error reporting, socket fallback, and payload field name
- chore(sat): update Docker image to sdr-docker
- feat(cli): add metrics devices command for device metrics
- docs: update CLAUDE.md with release workflow and current CLI commands
- ci: consolidate release workflow to 3 jobs and add lint step
- ci: upgrade actions to supported versions
- feat(org): add Organization.delete_device method
- feat(cli): add org delete-device command with confirmation prompt
- feat(cli): add ble validate command with EID type detection
- fix(cli): improve sat scan Ctrl+C responsiveness
- fix(cli): improve sat scan Docker error handling
- docs: add satellite scanning docs and drop mypy
- feat(cli): add sat scan command for satellite packet reception via PlutoSDR
- feat(org): add EID rotation params to register_device
- feat(crypto): add counter-based EID decryption support
- feat(cli): encode BLE packet payloads as base64 in all output formats
- feat(device): display key as base64 in Device str
- feat(cli): make packet payload format configurable across output commands
- chore: add .worktrees to .gitignore
- feat(skill): add hubble-ready-test Claude Code skill
- feat(ready): implement write commands
- feat(ready): implement read commands
- feat(ready): add result dataclasses for testing
- feat(cli): update ready command JSON output structure