diff --git a/docs/release-notes/v3.5.0.md b/docs/release-notes/v3.5.0.md index 2ffb04c0..7dd3eefa 100644 --- a/docs/release-notes/v3.5.0.md +++ b/docs/release-notes/v3.5.0.md @@ -1,118 +1,86 @@ -# CoreScope v3.5.0 +# CoreScope v3.5.0 πŸš€ -95 commits since v3.4.1. +The "stop building from source and start analyzing your mesh" release. 95 commits. --- -## 🐳 Pre-built Docker Images - -No more building from source. +## 🐳 One-Line Deploy ```bash -docker run -d --name corescope \ - -p 80:80 -p 1883:1883 \ - -v corescope-data:/app/data \ - ghcr.io/kpa-clawbot/corescope:latest +docker run -d --name corescope -p 80:80 -p 1883:1883 \ + -v corescope-data:/app/data ghcr.io/kpa-clawbot/corescope:latest ``` -**Transitioning from a source build (docker-compose)?** +That's it. Zero config required β€” MQTT broker, Caddy HTTPS, and SQLite are built in. +**Already running CoreScope via docker-compose?** ```bash -# 1. Stop and remove the old compose stack docker compose down - -# 2. Pull the pre-built image -docker pull ghcr.io/kpa-clawbot/corescope:latest - -# 3. Update your docker-compose.yml to use the pre-built image instead of building: -# Change: build: . -# To: image: ghcr.io/kpa-clawbot/corescope:latest -# Keep your existing volume mounts and port mappings. - -# 4. Start with the pre-built image +# In your compose file, change `build: .` to: +# image: ghcr.io/kpa-clawbot/corescope:latest docker compose up -d - -# 5. Verify -curl http://localhost/api/stats ``` +Your data volume stays. Nothing to migrate. -Your DB, config, and theme files live in the data volume β€” nothing to migrate. Just swap the image reference. - -Tags: `latest` (stable), `vX.Y.Z` (pinned), `edge` (master tip). - -New env vars: `DISABLE_CADDY=true`, `DISABLE_MOSQUITTO=true`. +Tags: `latest` Β· `vX.Y.Z` (pin for prod) Β· `edge` (bleed). Env: `DISABLE_CADDY=true` / `DISABLE_MOSQUITTO=true` if you bring your own. --- -## ⚑ 35 Performance Fixes +## ⚑ 83% Faster -- Packets p50 **83% faster**, p95 **97% faster** -- Server serves HTTP within **2 minutes** on any DB size (async backfill) -- Prefix map memory **10x reduction** -- N+1 API calls eliminated across packets, observations, subpaths, hop resolution -- WebSocket renders coalesced with rAF, map markers repositioned instead of rebuilt +35 performance commits. Packets endpoint p50 dropped from 16.7ms β†’ 2.7ms. Server now serves HTTP within 2 minutes on *any* DB size β€” async background backfill means you're never staring at a loading screen. N+1 API calls killed everywhere. Prefix map memory cut 10x. WebSocket renders batched via rAF. --- ## πŸ”¬ RF Health Dashboard -New Analytics tab: per-observer noise floor (color-coded columns), airtime, error rates, battery. Region filter. Click any observer for detail panel. +New Analytics tab. Per-observer noise floor as color-coded columns (green/yellow/red), airtime utilization, error rates, battery levels. Click any observer for the full breakdown. Region-filterable. This is the beginning of making CoreScope more than just a packet viewer. --- -## πŸ—ΊοΈ Live Map +## πŸ—ΊοΈ See Where Traces Actually Go -- **TRACE real path**: solid line for completed hops, dashed ghost for unreached -- **Movable panels**: corner toggle + non-scrolling headers -- **Collapsible panels** +Send a trace β†’ watch it on the live map. Solid animated line shows how far it got. Dashed ghost shows where it didn't reach. Finally know *where* your trace failed, not just *that* it failed. --- -## πŸ“Š Data Accuracy +## πŸ“Š Things That Were Lying To You -- Hash Stats "By Repeaters" actually filters by repeater role now -- Zero-hop adverts show "Unknown" hash size instead of wrong "1 byte" -- "Paths through node" uses resolved_path to prevent prefix collisions -- Table sorting works on all tables (nodes, neighbors, observers, packets) +- "By Repeaters" was counting companions. Fixed. +- Zero-hop adverts claimed "1 byte hash" when the hash size was unknowable. Fixed. +- "Packets through this node" showed packets through a *different* node with the same prefix. Fixed β€” now uses the neighbor affinity graph. +- Table sorting on nodes/neighbors/observers silently did nothing. Fixed. --- -## πŸ”— Deep Linking +## πŸ”— Deep Links Β· 🎨 Channel Colors Β· πŸ“± Mobile Β· πŸ”‘ Security -Nodes, packets, channels, analytics tabs reflected in URL hash. Shareable/bookmarkable. +**Deep links** β€” every page state goes in the URL. Share a link to a specific node, filter, or analytics tab. + +**Channel colors** β€” click the color dot next to any channel, pick from 8 colors, see it highlighted across the feed. Persists in localStorage. + +**Distance units** β€” km, miles, or auto-detect from locale. Customizer β†’ Display. + +**Mobile** β€” 44px touch targets, ARIA labels, responsive breakpoints. + +**API docs** β€” Swagger UI at `/api/docs`, OpenAPI spec at `/api/spec`. Auto-generated, always current. + +**Security** β€” weak API keys rejected at startup. License: GPL v3. --- -## 🎨 UI +## πŸ› 14 Bugs Squashed -- **Distance units**: km/mi/auto in Customizer -- **Channel colors**: 8-color palette, color dots on channels + live feed -- **Mobile**: 44px touch targets, ARIA labels -- **Map byte-size filter** -- **OpenAPI**: interactive Swagger UI at `/api/docs`, spec at `/api/spec` +Live map crash, zero-hop hash lies, animation freezes, repeater miscounts, prefix collisions, dead channel picker, invisible buttons, broken sorting, memory leak, and more. --- -## πŸ”’ Security - -- Weak API keys rejected at startup -- License changed to GPL v3 - ---- - -## πŸ› 14 Bug Fixes - -originLat scoping crash, zero-hop hash size, live map animation stuck, hash stats including non-repeaters, paths-through-node prefix collision, channel color picker dead code, panel buttons invisible, table sorting broken, time.Tick leak, View Route button, vscroll measurement, collision cache TTL, prefix map unbounded growth, memory eviction accuracy. - ---- - -## Upgrading from v3.4.1 +## Upgrade ```bash -docker pull ghcr.io/kpa-clawbot/corescope:v3.5.0 -docker stop corescope && docker rm corescope -docker run -d --name corescope -p 80:80 -p 1883:1883 \ - -v /your/data:/app/data ghcr.io/kpa-clawbot/corescope:v3.5.0 +docker compose down +# swap image to ghcr.io/kpa-clawbot/corescope:v3.5.0 +docker compose up -d ``` -First startup backfills `resolved_path` in the background. Server is responsive within ~2 minutes. No breaking changes. +First start backfills `resolved_path` in the background. No downtime. No breaking changes.