Rodrigo Pérez
c10f7f899a
fix(subscription): sync OBP source into store before voice resolve
...
Store authority skipped router→store mirror on dmrd, so OBP ACTIVE rows
were invisible to SubscriptionRouter and voice did not reach HBP peers.
4 months ago
Rodrigo Pérez
6dcaf88c62
feat(subscription): phase 2b store sync and 2c mesh codec registry
...
Sync subscription store after timer and in-band mutations, add optional
store authority with BRIDGES export shim, wire MeshCodecRegistry into
OBP udp_hbp paths, and extend harness parity tests.
4 months ago
Rodrigo Pérez
df8b3d4c2c
fix(inject): TG 4000 clears dynamics once per PTT and per peer only
...
Stop deactivating on every voice burst and scope inject-only resets to the
transmitting hotspot instead of all system dynamic bridges.
4 months ago
Rodrigo Pérez
baaa0c3b00
feat(inject): realtime MySQL OPTIONS, dashboard push, and SINGLE=0 dynamic RX
...
Push STATE_SND when peers send RPTO so monitor chips update without reload.
Fetch and inject MySQL OPTIONS immediately on PASS= instead of a 10s delay.
Track per-peer dynamic TG sets for SINGLE=0 so keyed hotspots hear each other.
4 months ago
Rodrigo Pérez
c59757e0ec
feat(inject): per-peer OPTIONS filter, SINGLE downlink, and PASS-gated MySQL
...
Enforce strict SINGLE=1 RX exclusivity, always filter inject-only downlink by
each peer's own OPTIONS, and push self-service DB options only after PASS=.
Stop merged SYSTEM static TG lists from leaking across hotspots in topology.
4 months ago
Rodrigo Pérez
84ccbc8f5c
fix(talker-alias): passthrough from radio, dedupe relay and logs
...
Buffer DMRA before VHEAD, wait for hotspot TA in both mode, relay
passthrough DMRA once per stream, and dedupe DEBUG policy/embed lines.
4 months ago
Rodrigo Pérez
67710558e8
release: adn-server 2.0.0-alpha1 (pre-GA baseline)
...
Populate SubscriptionStore from BRIDGES on OPTIONS/startup paths (P2-008).
BRIDGES remains voice routing authority; no dmrd_received changes.
Phases 0-4 complete. Next: P2-009 subscription runtime cutover.
4 months ago
Rodrigo Pérez
cd836d1f5a
feat(phase4): doctor CLI, bootstrap wiring, and monitor contract tests
...
Extract peer runtime to bootstrap/peer_server.py; add --doctor; slim main.py.
Add boot-sequence contract tests that catch slim-wire CTABLE regressions.
4 months ago
Rodrigo Pérez
c3f3ff72d6
feat(parrot): integrate playback via adn-server.py --parrot
...
Add parrot runtime module, --no-proxy flag, minimal adn-parrot.example.yaml,
systemd unit examples, and remove standalone adn-parrot.py launcher.
4 months ago
Rodrigo Pérez
aa8d28db34
fix(report): serve dashboard_state on connect and STATE_REQ
...
Replace CONFIG_REQ/BRIDGE_REQ handlers with unified state push for monitor
TCP clients.
4 months ago
Rodrigo Pérez
dc0af385f3
feat(report): slim TCP wire with dashboard_state snapshots
...
Send STATE_SND dashboard_state instead of separate topology/routing deltas
on the report TCP path, aligned with the monitor FastAPI ingest.
4 months ago
Rodrigo Pérez
cdf486feb4
docs: FastAPI-only monitor stack and integrated hotspot proxy
...
Remove references to PHP backend and standalone adn-proxy from monitor
documentation; point hotspot proxy setup to adn-server.yaml.
4 months ago
Rodrigo Pérez
b2daf46f96
docs: integrated PROXY and SELF_SERVICE in adn-server.yaml
...
Document fan-in hotspot proxy, MySQL self-service, reload limits, and
legacy standalone adn-proxy; add EN/ES user guide and update monitor cross-refs.
4 months ago
Rodrigo Pérez
1a64b088ed
fix(config): defer UDP rebind on SIGHUP reload
...
Wait for stopListening before listenUDP to avoid EADDRINUSE when GENERATOR
collapses (D-APRS-0 -> D-APRS). Migrate instance-0 protocol on bind unchanged.
Reload completion runs via Deferred callback.
4 months ago
Rodrigo Pérez
bba7e43da8
feat(proxy): self-service MySQL on integrated hotspot fan-in
...
Port legacy adn-proxy Clients table behaviour into core PROXY fan-in: RPTC/RPTO
hooks, periodic send_opts/lst_seen/clean_tbl, and SELF_SERVICE YAML block
(load via config_loader). Optional mysqlclient extra.
4 months ago
Rodrigo Pérez
18dc22b0bb
feat(report): fan-out inject-proxy voice events by peer OPTIONS
...
Map SYSTEM voice events to SYSTEM-N only for hotspots whose RPTO lists the
call TG on that timeslot, fixing false green TX/RX chips on the monitor.
4 months ago
Rodrigo Pérez
92c0a5c48c
feat(hbp): filter inject-proxy DMRD downlink by per-peer OPTIONS
...
Multi-hotspot SYSTEM inject must not REPEAT or bridge-downlink TGs to peers
whose RPTO OPTIONS omit the call TG. Exempt parrot/echo 9990–9999 for the
RX_PEER that keyed the service TG.
4 months ago
Rodrigo Pérez
46024c4da4
test: add HBP/proxy integration coverage and prune redundant suite
...
Add real-stack REPEAT and proxy fan-in E2E tests so regressions outside
DeterministicScenario are caught. Remove duplicate or fragile tests,
consolidate monitor remap cases, and document harness vs integration policy.
4 months ago
Rodrigo Pérez
614c882bcb
feat(proxy): integrated UDP fan-in with inject-only MASTER (V2-P3-002)
...
Hotspots connect on PROXY.LISTEN_PORT with in-process inject into SYSTEM,
session-preserving SIGHUP reload, and composition-root wiring in main.
4 months ago
Rodrigo Pérez
ca59b886fb
feat(report): monitor topology expansion and proxy peer resolution
...
Map proxy upstream slots into VOICE_EVENT_SND, resolve RX peer IDs for
dashboard chips, and keep ECHO/parrot TX-RX colors aligned with legacy.
4 months ago
Rodrigo Pérez
6eec98400f
feat(talker-alias): embed TA on REPEAT and fix both-mode VHEAD inject
...
Overlay Talker Alias in repeated DMRD bursts so WPSD/MMDVMHost can display
aliases on RX, buffer TA from OBP voice, and inject the template at VHEAD
when the source sends no TA.
4 months ago
Rodrigo Pérez
663e030ef9
fix(bridge): align static TG options loop with legacy bridge_master
...
Refresh TS1/TS2 static talkgroups on the 26s timer and options_config path
so user-activated bridges and OPTIONS strings stay consistent after reload.
4 months ago
Rodrigo Pérez
c361f593c3
feat(proxy): ProxyService domain and use cases (V2-P3-001)
...
Add ClientSlot/UpstreamPortRange, ProxyUseCases with in-memory store and
RPTO queue, plus peer_id packet helper — library only, not wired to runtime.
4 months ago
Rodrigo Pérez
6210aa4c87
feat(subscription): BridgesLegacyView and pickle BRIDGE_SND shim (V2-P2-007)
...
Export subscriptions to legacy BRIDGES dict and encode v1 monitor pickle
frames; library-only, not wired to report runtime yet.
4 months ago
Rodrigo Pérez
82782f7b93
feat(mesh): PeerTransport port and codec registry (V2-P2-005)
...
Add MeshIngress/MeshEgress, obp_v1 and dmre_v5 transports, and
MeshCodecRegistry with auto decode/encode matching legacy VER selection.
4 months ago
Rodrigo Pérez
fe71492d11
feat(subscription): VoiceIngress builder from DMRD args (V2-P2-004)
...
Add build_voice_ingress for dmrd_received parity, bridge_match_slot on
VoiceIngress, and focused builder tests without runtime wiring.
4 months ago
Rodrigo Pérez
12a21d389a
chore(tests): consolidate subscription tests and drop redundant cases
...
Merge router parity into a single file and remove trivial domain tests
without reducing meaningful coverage.
4 months ago
Rodrigo Pérez
851e35f600
fix(subscription): align SubscriptionRouter with legacy bridge_tables scan (V2-P2-003)
...
Match bridge_tables_with_active_source and to_target forward selection on
subscription rows; add parity tests vs legacy BRIDGES scan including OBP dedup.
4 months ago
Rodrigo Pérez
a46bec7d1e
feat(subscription): VoiceIngress router and forward legs (V2-P2-003/004)
...
Add immutable VoiceIngress/ForwardLeg domain types and a pure
SubscriptionRouter that resolves active forward targets from the store.
4 months ago
Rodrigo Pérez
d0abe7c09e
feat(subscription): one-way BRIDGES export adapter (V2-P2-002)
...
Export SubscriptionStore snapshots to legacy BRIDGES dict rows for
future hot-path parity without writing subscriptions from BRIDGES input.
4 months ago
Rodrigo Pérez
c734b1f0b0
feat(subscription): domain model and in-memory store (V2-P2-001)
...
Add AudioChannel, Subscription entities, SubscriptionStore port, and
InMemorySubscriptionStore with unit tests (no runtime wiring yet).
4 months ago
Rodrigo Pérez
471e1795bf
feat(report): optional MQTT publisher and dashboard state (V2-P1-006)
...
Add opt-in REPORTS.MQTT with retained shared state and live voice_event
topics, topology static TG in v2 payloads, dashboard_state builder, and
SIGHUP reload.
4 months ago
Rodrigo Pérez
99169e77ca
feat(report): bounded queue worker and topology connected_at
...
Decouple bridge events from TCP send via a reactor-drained queue (50ms, 2048
events). Export peer connected_at in topology so monitor timers survive refresh.
4 months ago
Rodrigo Pérez
048c27ab23
feat(report): implement v2 JSON topology, routing, voice events and deltas
...
Wire report protocol 2 with typed JSON payloads and incremental topology/routing
deltas; lab-validated with adn-monitor consumer.
4 months ago
Rodrigo Pérez
af4264100e
docs(v2): add report v2 JSON schema and protocol docs (V2-P1-001)
...
Define typed monitor payloads (hello, topology, routing_table, voice_event,
delta) with JSON Schema, anonymized examples, pytest validation, and EN/ES docs.
4 months ago
Rodrigo Pérez
34448e4fe0
Merge branch 'feature/V2-P0-007-replay-harness' into develop
...
V2-P0-007: JSONL replay harness completes Phase 0 prep (server).
4 months ago
Rodrigo Pérez
25dbc971b0
test(v2): add JSONL session replay harness (V2-P0-007)
...
SessionReplayer replays golden fixtures through DeterministicScenario;
add HBP group voice session, behavior tests, and dev CAPTURE scaffold.
Set pytest pythonpath so bare `pytest` finds tests.* imports.
4 months ago
Rodrigo Pérez
6c1195ab6c
Merge branch 'feature/V2-P0-006-reactor-timers' into develop
...
V2-P0-006: rule_timer/stat_trimmer on reactor; manual lab OK.
4 months ago
Rodrigo Pérez
72264da592
refactor(v2): run rule_timer and stat_trimmer on reactor (V2-P0-006)
...
Schedule bridge timer loops inline on the Twisted reactor instead of
deferToThread to avoid BRIDGES races with dmrd_received.
4 months ago
Rodrigo Pérez
86e8a74e72
Merge branch 'feature/V2-P0-005-mesh-codecs' into develop
...
V2-P0-005: extract OBP/DMRE mesh codecs; wire behaviour unchanged.
4 months ago
Rodrigo Pérez
710b1db4a3
refactor(v2): extract OpenBridge mesh codecs from udp_hbp (V2-P0-005)
...
Move DMRD v1 HMAC and DMRE v4/v5 BLAKE2b parse/build to
infrastructure/mesh/; udp_hbp delegates wire crypto unchanged.
4 months ago
Rodrigo Pérez
37cec421d7
Merge branch 'feature/V2-P0-004-split-bridge' into develop
...
V2-P0-004: split BridgeUseCases into six mixins under application/bridge/.
Manual lab validation passed.
4 months ago
Rodrigo Pérez
279c139918
refactor(v2): extract LC/TA and bridge-table mixins (V2-P0-004 chunks 4-5)
...
Move Talker Alias / embedded LC and BRIDGES table lifecycle into
application/bridge/; BridgeUseCases remains the public facade with
dmrd_received and unit/private paths only.
4 months ago
Rodrigo Pérez
df18dbde8a
refactor(v2): extract bridge HBP forward mixin (V2-P0-004 chunk 3)
...
Move routerHBP ingress packet control and sendDataToHBP into
application/bridge/hbp_forward.py; facade unchanged for callers.
4 months ago
Rodrigo Pérez
004bca2d2c
refactor(v2): extract bridge OBP forward mixin (V2-P0-004 chunk 2)
...
Move _ensure_obp_source_for_tg, OBP stream tracking, routerOBP group
voice ingress, and sendDataToOBP into application/bridge/obp_forward.py.
4 months ago
Rodrigo Pérez
f657e61c58
refactor(v2): extract bridge helpers and timer mixin (V2-P0-004 chunk 1)
...
Move shared TG/OBP helpers and legacy timer loops (rule_timer, trimmers,
bridge_reset, bridge_debug) into application/bridge/; BridgeUseCases keeps
the public facade via BridgeTimerMixin.
4 months ago
Rodrigo Pérez
f5eaa1b57e
feat(v2): add RuntimeContext holder and atomic SIGHUP reload (V2-P0-003)
...
Introduce RuntimeContextHolder with ConfigProxy so main wiring keeps a stable
config view while SIGHUP reload builds a deep copy, applies reload_server_config,
then swaps the pointer only on success.
4 months ago
Rodrigo Pérez
0e3a369508
Merge branch 'feature/V2-P0-002-bridges-index' into develop
4 months ago
Rodrigo Pérez
c923006598
fix(parrot): rotate playback stream when seq byte wraps
4 months ago
Rodrigo Pérez
9c20a0e6e9
perf: add O(1) BRIDGES source index for forwarding lookup
4 months ago