Commit Graph
106 Commits
Author SHA1 Message Date
n30nex 84ac3c8781 feat(topology): serve bounded route links and identify decoded Public traffic 2026-10-04 01:03:08 -04:00
n30nex c554238485 fix(traces): validate trace frames and preserve ambiguous identities 2026-10-03 23:58:00 -04:00
n30nex 8c7fbb8423 Merge remote-tracking branch 'origin/main' into codex/post20-audit-server-20261003 2026-10-03 04:43:21 -04:00
MrAlders0n 1f83df8583 docs: move operator docs to beacon-docs (#206)
* docs: keep only server-specific contributor notes

* docs: trim README to the code and link to beacon-docs

* chore: strip tracking parameters from two airport website URLs
2026-10-02 21:43:03 -04:00
MrAlders0n be35b36679 docs: condense backup, README and contributor docs (#205) 2026-10-02 21:42:17 -04:00
n30nex fe4c4156c9 Merge remote-tracking branch 'origin/dev' into codex/post20-core-20261003 2026-10-02 21:20:16 -04:00
MrAlders0n af20bebfe5 docs: document route cursorId and activity coverage fields 2026-10-02 19:03:46 -04:00
n30nex f946238d31 Merge remote-tracking branch 'origin/dev' into codex/post20-base-20261002 2026-10-02 18:15:13 -04:00
MrAlders0n 5b49356437 docs: update for 2.0.0 2026-10-02 16:53:32 -04:00
MrAlders0n 951e0b0de6 docs: regenerate swagger 2026-10-02 16:53:32 -04:00
MrAlders0n 2f4f92e31e fix(db): tie-safe trace paging, atomic migrations and honest stats windows
GET /traces takes an optional cursorTag so tags sharing a millisecond survive
paging. Migrations run under an advisory lock and record each file in the
same implicit transaction, so a crash can't strand a fresh database.
Overview windowHours counts the hours it covers, hourly observer activity
fills unrolled hours from raw rows, and integration fixtures are UTC.
2026-10-02 16:53:32 -04:00
n30nex ced19727ea Merge remote-tracking branch 'origin/dev' into codex/post20-base-20261002 2026-10-02 16:34:31 -04:00
MrAlders0n 2042c1617f feat(stats): roll hourly scope observers and advertising nodes 2026-10-02 15:24:33 -04:00
MrAlders0n 53d9f86dd4 feat(stats): split /stats/scopes packet counts by hour 2026-10-02 13:57:54 -04:00
MrAlders0n 3e0b6c074c feat(stats): report the longest path per hour in /stats/paths 2026-10-02 13:57:54 -04:00
n30nex 4ef27124cd Integrate upstream hourly rollups without changing the 2.0 schema 2026-10-02 08:43:56 -04:00
MrAlders0n 98006a9364 feat(stats): serve historical stats from hourly rollups
Stats endpoints read hourly rollup tables filled once per closed hour by one
advisory-locked task, instead of materialized views that re-scanned every
observation on each refresh. IATA-set tables give exact distinct counts for any
IATA set or region. Cleanup holds raw rows for unrolled hours (up to 24h).

Adds /stats/series; ingest keeps packet observation counts, observer last IATA,
channel message counts and trace tag summaries. 001_baseline.sql is rewritten,
so pre-release 2.0 databases must be recreated. See docs/historical-stats.md.
2026-10-02 07:43:56 -04:00
n30nex 7891ccd687 Merge upstream MeshMapper discovery into the 2.0 experiment 2026-10-01 20:33:12 -04:00
MrAlders0n 119be44c0d feat(channels): filter channel list by keyKnown
Also seed the cursor integration test with MeshMapper membership; it still
used channel_iatas after channel lists moved to region scoping.
2026-10-01 09:06:50 -04:00
MrAlders0n f8ee1ac884 feat(meshmapper): import regional channels and scope channel lists by region 2026-09-30 23:09:40 -04:00
MrAlders0n e2b64f2a36 chore: version bump v2.0.0 2026-09-30 22:14:11 -04:00
MrAlders0n 2f49ffb3a3 feat(api): filter scope lists by region and catalogue membership
Region-filtered /scopes and /stats/scopes now list manual scopes configured
for the region and imported scopes whose MeshMapper catalogue includes the
IATA, instead of inferring membership from observed traffic. Filtered
/scopes returns string[] like the unfiltered call.

Manual scopes now require a region in config.
2026-09-30 22:05:04 -04:00
n30nex a5c8d2839b feat(scopes): expose cached regional catalogue context 2026-09-30 21:07:42 -04:00
n30nex c74f91b381 fix(routes): keep current prefixes and pin retained evidence paths 2026-09-30 19:38:29 -04:00
MrAlders0n f6fe177a4e docs: regenerate swagger 2026-09-30 10:31:08 -04:00
n30nex 6bf58acb80 fix: address maintainer review for #176 2026-09-30 07:19:03 -04:00
n30nex 2abed6c195 feat(channels): expose recorded packet scope in message delivery 2026-09-30 07:19:03 -04:00
n30nex 7e01abf5a0 docs(api): refresh generated contract after stack update 2026-09-30 07:19:03 -04:00
n30nex 574bba4e13 fix: address maintainer review for #174 2026-09-30 07:19:03 -04:00
n30nex c18e059e0d feat(scopes): import cached regional MeshMapper catalogues 2026-09-30 07:19:03 -04:00
n30nex c448a04ea0 feat(routes): add bounded retained observation evidence 2026-09-30 07:19:03 -04:00
n30nex 551f061f9c docs(api): refresh generated contract after stack update 2026-09-30 07:19:02 -04:00
n30nex d3c330e8fb fix: address maintainer review for #169 2026-09-30 07:19:02 -04:00
n30nex 5fbba24a4a fix(observers): separate packet metrics from presence updates 2026-09-30 07:19:02 -04:00
n30nex c02317a4ac feat(packets): summarize ACK and trace references (#161) 2026-09-23 20:18:48 -04:00
n30nex 20691dc5a3 feat(backup): verify native archives offline without extraction (#160) 2026-09-23 20:18:45 -04:00
n30nex 8a3fa7e6bf feat(stats): add bounded path and hash-width analytics (#159) 2026-09-23 20:18:41 -04:00
n30nex 6107578c25 feat(stats): add bounded reception signal analytics (#157) 2026-09-23 20:16:22 -04:00
n30nex a25e2675c8 feat(backup): add protected database and config download (#154) 2026-09-23 20:13:40 -04:00
n30nex 4d2642abec feat(admin): add protected account lifecycle endpoints (#149) 2026-09-23 20:10:35 -04:00
n30nex 6aba17c75e feat(nodes): indicate repeaters outside configured local borders (#153) 2026-09-19 15:27:34 -04:00
n30nex 775aedfd2a feat(admin): update runtime CORS origins consistently (#150)
* feat(admin): update runtime CORS origins consistently

* test(admin): preserve rate-limit headers after CORS updates

* test(admin): preserve router connection budget after rebase
2026-09-19 15:27:25 -04:00
n30nex c7ace0ce0e feat(ws): limit connection attempts and signal capacity shedding (#141) 2026-09-19 13:28:47 -04:00
n30nex cf5ff7a974 feat(stats): compare flood packets reported by two observers (#152)
* feat(stats): compare distinct flood packets across observers

* test(stats): use the migrated observation deduplication key
2026-09-19 10:36:39 -04:00
n30nex 6540b9253d feat(admin): expose selected startup configuration (#147) 2026-09-19 10:36:30 -04:00
n30nex 595ef4442b feat(api): rate limit REST requests by trusted client IP (#140) 2026-09-19 08:43:24 -04:00
n30nex 85b1c3961d feat(packets): populate advert summaries in history and live events (#143) 2026-09-18 06:18:19 -04:00
n30nex bcdea76c26 feat(stats): filter scope counts by IATA and region (#142)
* feat(stats): filter scope counts by IATA and region

* perf(stats): aggregate region observations before counting scopes
2026-09-18 06:18:06 -04:00
n30nex 9164659544 feat(backup): export private database and saved-config bundles (#151)
* feat(backup): export bounded database and saved-config bundles

* test(backup): preserve synthetic channel keys in exports

* fix(backup): check writable file closure before publication
2026-09-18 06:17:52 -04:00
MrAlders0n d202205659 fix(observers): rename telemetry airtime fields to seconds (#136) 2026-09-10 07:17:29 -04:00