diff --git a/PLAN-spring-clean-2026-08-06.md b/PLAN-spring-clean-2026-08-06.md index 9788ff9..dde04eb 100644 --- a/PLAN-spring-clean-2026-08-06.md +++ b/PLAN-spring-clean-2026-08-06.md @@ -261,3 +261,29 @@ local commit below. `SPRING-PAGES-2026-08-06.md`. - **Local commit:** `1c3841c` (`chore(website): spring-clean public pages`); no GitHub push. + +## Item 11 — Topology map on the UK map (2026-08-06, done) + +- Replaced the graph-only topology SVG with a MapLibre UK basemap and live + GeoJSON repeater nodes plus observed adjacency links. Region and multibyte + filters, bridge/isolated state, selection, link weighting, and the ranked + repeater panel remain available. +- Optimised the backend topology query to filter recent viable base links before + canonical aggregation; the live endpoint now returns HTTP 200 without the + previous full-view timeout. +- Quality gates passed: frontend typecheck, 80 tests, CSS lint, and build; + backend typecheck and all 273 tests passed in the isolated rerun. +- Deployed only `backend`, `app-ukmesh`, and `website-ukmesh`. Final image + digests are app `sha256:15c5acf7ad203be5a95f319becb403c06902bf8bfd8bd540639828e4b6326e9c`, + website `sha256:ef4797a250316697294e415f0f8ffc41810f16000ebc713aa77a78d52ba4b0aa`, + and backend `sha256:983f4e29cb2ac23ee06e35dba5507e590f1f11179170fe46ef90af84bd64ca08`. + `.env` changed only `APP_IMAGE` and `WEBSITE_IMAGE`. +- Live proof: `/api/topology?network=ukmesh&limit=300` returned 303 repeaters, + 294 mapped repeaters, and 300 links; HopReach returned 200; Googlebot + Playwright rendered the basemap, zoom control, nodes, and relationship lines. + Evidence: `SPRING-TOPOLOGY-2026-08-06.png` and + `SPRING-TOPOLOGY-2026-08-06.md`. +- `/api/health` returned HTTP 200 and healthy containers, while its payload + currently reports the unrelated `database_vacuum_backlog` incident; no + unrelated database or service maintenance was performed. +- Local commits: `be0a689` and `7b6e860`; never pushed. diff --git a/SPRING-TOPOLOGY-2026-08-06.md b/SPRING-TOPOLOGY-2026-08-06.md new file mode 100644 index 0000000..371684e --- /dev/null +++ b/SPRING-TOPOLOGY-2026-08-06.md @@ -0,0 +1,72 @@ +# UKMesh spring-clean item 11 — topology map + +Date: 2026-08-06 +Status: implemented, tested, deployed locally on the Projects VPS; not pushed. + +## What changed + +`TopologyPage.tsx` was graph-only: it used a D3 force layout inside an SVG and +did not render the existing MapLibre map. It now uses a MapLibre-backed UK map +with live repeater nodes and observed relationships overlaid as GeoJSON. Nodes +carry degree, bridge, isolated, and selection state; links carry observation +weight, viability colour, and multibyte evidence styling. The existing region +and multibyte filters remain live, and the side panel still ranks the most +connected repeaters. + +The `/api/topology` repository query was also bounded at the base +`node_links` table before canonical aggregation. The old query materialised the +full `node_identity_links` view before applying the recent/viable filters and +was timing out on the live dataset. The new query returns the same public shape +while completing quickly enough for the page and screenshot checks. + +The shared MapLibre load handoff was made available before shared layer setup, +and the topology initial view is stable across React renders. This prevents the +map from being torn down after its ready callback and allows the topology +overlay sources, layers, and navigation control to persist. + +## Verification + +- Live topology: HTTP 200 for `/api/topology?network=ukmesh&limit=300`; 303 + repeaters, 294 mapped repeaters, 300 observed links, 114 components, 49 + likely bridge repeaters, and 100 recently active isolated repeaters. +- HopReach compatibility endpoint: HTTP 200 from + `/hopreach/api/nodes`. +- Googlebot Playwright capture of `https://ukmesh.com/topology`: HTTP 200, + topology API HTTP 200, one MapLibre canvas, zoom control present, live + topology metadata present, and no loading/error state. Evidence: + `SPRING-TOPOLOGY-2026-08-06.png`. +- `/api/health`: HTTP 200 and all three deployed service containers report + healthy, but the public payload currently reports the unrelated + `database_vacuum_backlog` critical incident. No database maintenance or + unrelated service changes were made for this item. + +## Quality gates + +- Frontend: `npx tsc --noEmit`, 80 tests, `npm run lint:css`, and + `npm run build` all passed. +- Backend: `npm run typecheck` passed; the isolated backend run passed all 273 + tests. One concurrent run exposed two timing-sensitive failures, which did + not reproduce in the isolated rerun. + +## Deployment + +Both frontend bundles contained the new `Live topology` string in their +shipped `TopologyPage` assets. Only `backend`, `app-ukmesh`, and +`website-ukmesh` were deployed; no dependent services were restarted. + +- `meshcore-analytics-app:spring-topo` — + `sha256:15c5acf7ad203be5a95f319becb403c06902bf8bfd8bd540639828e4b6326e9c` +- `meshcore-analytics-website:spring-topo` — + `sha256:ef4797a250316697294e415f0f8ffc41810f16000ebc713aa77a78d52ba4b0aa` +- `meshcore-analytics-backend:spring-topo` — + `sha256:983f4e29cb2ac23ee06e35dba5507e590f1f11179170fe46ef90af84bd64ca08` + +`.env` was updated only on the `APP_IMAGE` and `WEBSITE_IMAGE` lines. The +backend pin, channel secrets, and every other environment line were preserved. + +## Commits + +- `be0a689` — `feat(topology): render live repeater links on UK map` +- `7b6e860` — `fix(topology): keep map instance stable after load` + +Both commits are local only; nothing was pushed. diff --git a/SPRING-TOPOLOGY-2026-08-06.png b/SPRING-TOPOLOGY-2026-08-06.png new file mode 100644 index 0000000..6cee94e Binary files /dev/null and b/SPRING-TOPOLOGY-2026-08-06.png differ