Node: report every radio heard on a call, not just the last (server-26#304)
P1 of the radio-ID plan. metadata_watcher records each transmission as
[radio, first seen, last seen] from channel rows and call_log grants in both
audio and console modes. Sightings of the same radio under 2 s apart are
merged, because the P0 probe found the ID in only 44% of polls during a
burst. call_end gains `radios: [{radio, start, end}]`.
main.py rebases the offsets into the trimmed audio file's frame, so
wall clock = audio_start_epoch + offset, the mapping C2 already uses. It
also sends the list on /upload (UploadMeta.radios), because C2 starts the
pipeline from /upload before call_end arrives.
srcaddr keeps its meaning (latest talker). Metadata only: no boundary,
timestamp or attribution change (drb-audio-review).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
c57a5b9068
commit
6330609a75
@@ -228,3 +228,10 @@ async def test_wake_makes_everything_due_now(tmp_path):
|
||||
sp.add(_recording(tmp_path), UploadMeta(call_id="c1"), UploadResult(RETRY, status=401))
|
||||
sp.wake()
|
||||
assert await sp.drain_once() == 1
|
||||
|
||||
|
||||
def test_form_carries_the_radio_list_and_omits_it_when_empty():
|
||||
"""C2 starts correlation from /upload, so the radio list rides on it (server-26#304)."""
|
||||
radios = json.dumps([{"radio": 555, "start": 0.0, "end": 1.0}])
|
||||
assert upload_spool._form(UploadMeta(call_id="c1", radios=radios))["radios"] == radios
|
||||
assert "radios" not in upload_spool._form(UploadMeta(call_id="c1"))
|
||||
|
||||
Reference in New Issue
Block a user