diff --git a/docs/architecture.md b/docs/architecture.md index 61f2861..b30dd3f 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -36,7 +36,7 @@ flowchart TB end subgraph central["Central server — cloud droplet"] - tf["Tower-Finder = the RETINA server
FastAPI: TCP ingest + tracker + geolocator + analytics
nginx + live-map SPA + admin dashboard"] + tf["retina-server = the RETINA server
FastAPI: TCP ingest + tracker + geolocator + analytics
nginx + live-map SPA + admin dashboard"] tfs[tower-finder-service · site-survey utility] end @@ -53,7 +53,7 @@ flowchart TB - **Edge radar node** — a Raspberry Pi 5 running `owl-os` with the `retina-node` Docker Compose stack. Captures IQ from an SDR (SDRplay RSPduo), computes delay-Doppler detections, and forwards them to the central server. -- **Central server** — the `Tower-Finder` monorepo (the repo name is historical; +- **Central server** — the `retina-server` monorepo (the repo name is historical; it is now the full RETINA server). Ingests detections from all nodes, runs multi-target tracking and multi-node geolocation, and serves the live maps. - **Web clients** — the live map (`map.retina.fm`) and admin dashboard @@ -74,7 +74,7 @@ flowchart LR a2d -->|truth| api api -->|detections over TCP · config-gated| trk - subgraph central["inside Tower-Finder — in-process libraries"] + subgraph central["inside retina-server — in-process libraries"] trk[tracker · Kalman + GNN] --> geo[geolocator · Levenberg-Marquardt, multi-node] geo --> state[in-memory track state] end @@ -133,7 +133,7 @@ JSONL output is the offline/batch path, not the live feed. `owl-os` (systemd, `:80`, `owl.local`). Management plane, not data plane. ### Central server -- **Tower-Finder** (Python FastAPI + React/Vite SPAs) — the RETINA central server. +- **retina-server** (Python FastAPI + React/Vite SPAs) — the RETINA central server. One container (nginx + uvicorn) hosting: TCP detection ingest (`:3012`), the multi-target **tracker** (Kalman + GNN) and node associator, the multi-node **geolocator** (Levenberg-Marquardt), auth/admin/analytics, the live-map SPA, @@ -207,7 +207,7 @@ JSONL output is the offline/batch path, not the live feed. Switching the *data-plane* network is automated; switching the *OTA control* plane is intentionally manual. -**Central / cloud:** the `Tower-Finder` monorepo container + `tower-finder-service` +**Central / cloud:** the `retina-server` monorepo container + `tower-finder-service` run on a DigitalOcean droplet, joined by a shared `retina-edge` Docker network and fronted by Cloudflare; both deploy via `git reset --hard origin/main` + `docker compose up -d --build` from GitHub Actions on push to `main`. The public @@ -238,7 +238,7 @@ authoritative inventory — deployment topology changes faster than this table. | `tar1090-node` | ADS-B decode + map + proxy | readsb, nginx, Node | | `retina-spectrum` | Illuminator spectrum survey | C++ | | `retina-gui` | Node management UI | Python/Flask | -| `Tower-Finder` | Central RETINA server (ingest, track, geolocate, maps) | Python/FastAPI, React/Vite | +| `retina-server` | Central RETINA server (ingest, track, geolocate, maps) | Python/FastAPI, React/Vite | | `tower-finder-service` | Illuminator site-survey microservice | Python/FastAPI | | `retina-tracker` | Multi-target tracker (Kalman/GNN) — library vendored into central server | Python | | `retina-geolocator` | LM delay/Doppler → position solver — library vendored into central server | Python | @@ -271,7 +271,7 @@ flowchart LR spec[retina-spectrum] gui[retina-gui] end - subgraph central["Central server — Tower-Finder (libs in-process)"] + subgraph central["Central server — retina-server (libs in-process)"] trk[retina-tracker] --> geo[retina-geolocator] --> ana[retina-analytics] end sim[retina-simulation] @@ -302,7 +302,7 @@ flowchart LR os[owl-os] -->|sysdeps + bundles| gui[retina-gui] os -->|SDRplay API + watchdog| blah blah <-->|shared SDRplay libs · RSPduo exclusive| spec - tf[Tower-Finder] -.->|vendors as git submodules| libs["retina-tracker / -geolocator /
-analytics / -custody / -simulation"] + tf[retina-server] -.->|vendors as git submodules| libs["retina-tracker / -geolocator /
-analytics / -custody / -simulation"] ```
@@ -317,7 +317,7 @@ git submodule and imported in-process. **HTTP** = REST/proxy. | **retina-node** | compose | compose | compose | compose (excl.) | – | – | – | URL env | | **blah2-arm** | – | HTTP `/api/dd` | – | HW libs | Format (forward¹) | – | – | – | | **retina-gui** | HTTP :49152 | – | HTTP :8078 | SSE proxy :3020 | – | – | – | HTTP `/api/towers` | -| **Tower-Finder** | bridge (radar3) | Format | – | – | lib (in-process²) | lib (in-process²) | lib | dup logic | +| **retina-server** | bridge (radar3) | Format | – | – | lib (in-process²) | lib (in-process²) | lib | dup logic | | **retina-tracker** | Format (in) | Format (adsb) | – | – | – | Format (out) | – | – | | **retina-geolocator** | reads config.yml | – | – | – | Format (in) | – | Format (out) | – | | **retina-simulation** | – | – | – | – | Format→:3012 | – | – | towers API | diff --git a/docs/brand/brand-guide.md b/docs/brand/brand-guide.md index 3021bca..2fbade6 100644 --- a/docs/brand/brand-guide.md +++ b/docs/brand/brand-guide.md @@ -14,8 +14,8 @@ stylesheet with the others: - **offworldlabs.com** ([`landing-page-owl`](https://github.com/offworldlabs/landing-page-owl)) — the lab - **retina.fm** ([`landing-page-retina`](https://github.com/offworldlabs/landing-page-retina)) — the product -- **dash.retina.fm** (`Tower-Finder/dashboard`) — the admin console -- **map.retina.fm** (`Tower-Finder/frontend`) — the live radar map +- **dash.retina.fm** (`retina-server/dashboard`) — the admin console +- **map.retina.fm** (`retina-server/frontend`) — the live radar map They read as one family, but each has its own voice. The map is the odd one out: it is the only dark surface, a Flightradar24-style operational console. diff --git a/docs/contracts/README.md b/docs/contracts/README.md index 187f369..db9ea6c 100644 --- a/docs/contracts/README.md +++ b/docs/contracts/README.md @@ -6,7 +6,7 @@ than in either repository, so neither owns it and both can diff it. ## `nodes_api_v1.yml` The node ↔ server wire contract, currently **1.1.1**. Three independent implementations depend on -it: the server in `Tower-Finder`, the node client in `retina-node`, and the conformance harness. +it: the server in `retina-server`, the node client in `retina-node`, and the conformance harness. **It is versioned, not frozen.** The changelog at the top of the file is authoritative. A change is a coordinated event rather than a silent edit: bump the version, record the change in the changelog, diff --git a/docs/cross-cutting-changes.md b/docs/cross-cutting-changes.md index fe45ba1..9cc57c8 100644 --- a/docs/cross-cutting-changes.md +++ b/docs/cross-cutting-changes.md @@ -11,7 +11,7 @@ this with the connection matrix in [`architecture.md`](./architecture.md) §6. This is the highest-blast-radius contract in the system. - **Tower ranking logic:** **duplicated** in - `Tower-Finder/backend/.../tower_ranking.py` and + `retina-server/backend/.../tower_ranking.py` and `tower-finder-service/backend/tower_ranking.py` — edit both until deduplicated. **retina-spectrum** and **retina-gui** are downstream HTTP consumers of `/api/towers`. @@ -30,13 +30,13 @@ this with the connection matrix in [`architecture.md`](./architecture.md) §6. - **Tracker / geolocator / analytics algorithms:** the libraries **retina-tracker** / **retina-geolocator** / **retina-analytics** are vendored as git submodules in - **Tower-Finder** and run in-process. A change means bumping the submodule in - Tower-Finder and redeploying the central server (not a separate tracker service). + **retina-server** and run in-process. A change means bumping the submodule in + retina-server and redeploying the central server (not a separate tracker service). - **OTA / fleet onboarding flow:** spans **owl-os** (Mender inventory scripts) → **node-infra** (auto-accept + deploy) → **retina-gui** (`wizard_pending` gate) → **retina-node** (Mender artifact). All four participate. - **The `retina-edge` Docker network / `*.retina.fm` deployment:** shared by - **tower-finder-service** and the Tower-Finder-hosted nginx vhost on the central + **tower-finder-service** and the retina-server-hosted nginx vhost on the central droplet. See [`architecture.md`](./architecture.md) §4 for the live-endpoint table.