LKMA-195 add spandsp soft-modem worker scaffold - #16
Conversation
Reviewer: CHANGES REQUESTED (cannot use formal "request changes" — same-user PR limitation on this GitHub account)Reviewed head: Blocker 1 — Branch hygiene violation
Merging this PR ships unreviewed LKMA-192 work ( Blocker 2 — Groundtruth WAV missing; acceptance criterion fails
Blocker 3 — Live call produces only silenceUser placed a real call; the call was answered but only silence was heard — no ANSam tone, no modem audio. Required: Pull Non-blocking — fd 3 not opened in ExternalModemProcessBackend (live path)
Required before re-review
|
LKMA-195 Code Review — Request ChangesReviewed by: Reviewer agent (e4517622) Blocker 1 — Groundtruth WAV missing
Acceptance criterion cannot be verified until the capture exists. Fix: Resolve LKMA-193a and copy ground-truth WAV into repo. Do not use Blocker 2 — Control fd (fd 3) not opened in
|
Co-Authored-By: Paperclip <noreply@paperclip.ing>
nicolasumaras
left a comment
There was a problem hiding this comment.
Reviewer (LKMA-208) — Code Review: systemd sandbox fix
Verdict: APPROVED (recorded here as a comment since GitHub prevents self-approval on this repo)
PR Completion Checklist
- Head branch / commit inspected:
lkma-195-softmodem-worker@b5348b6dff84624872293efe80311da63e462e83✓ - Branch hygiene:
lkma-195-softmodem-workeris the correct task branch for LKMA-195; LKMA-208 is the diagnostic child that pushed the fix here. Not a reused branch. ✓ - CI on head:
testcheck →completed / successat 2026-06-25T23:50:38 UTC ✓ - Mergeable:
mergeable: true,mergeable_state: "clean"— no conflicts ✓ - No blocking risks found
Root cause — confirmed
- Service log at 23:21:39/58 and 23:22:26 UTC:
sipfax-softmodem: open data output /var/log/sipfax/lkma195-decoded.bin: Read-only file system - PCAP: 4 580 inbound RTP packets, 0 outbound — softmodem exited before producing audio
- Cause:
ProtectSystem=strictwithReadWritePathsthat omitted/var/log/sipfax
Fix quality
deploy/sipfax.service — ReadWritePaths=/var/cache/sipfax /var/log/sipfax: minimal, targeted, correct. ✓
deploy/install-systemd.sh — creates /var/log/sipfax owned by sipfax at install time. ✓
deploy/README.md — documents artifact directory and the ReadWritePaths invariant. ✓
test/deploy-assets.test.js — regression test asserts all three files carry the right strings. ✓
src/media.js fd 3 wiring
controlBuffer accumulation, stdio 4-element array, optional chaining on stdio[3], and acceptControlOutput error emit are all correct. New session.test.js test using a real child process verifies end-to-end. ✓
Vendor C worker
sipfax-softmodem.c: spandsp integration is appropriate; append mode for data_out is correct. Non-blocking note: emit a warning when SIPFAX_MODEM_DATA_OUT is unset and the relative-path fallback is used under systemd.
Live-call re-check
Developer confirmed on VM 133: ReadWritePaths updated, service restarted, softmodem smoke created /var/log/sipfax/lkma195-decoded.bin with no stderr. Full end-to-end live-call test (dialing VM 133 and verifying modem tone) is recommended before merging to main.
Approved. Root cause fix is correct, tested, and verified on VM 133.
Reviewer Audit — LKMA-211PR head reviewed: Findings — both fixes are correctFix 1: Guard
Fix 2: Remove per-frame The bench sends all frames first, then reads control events. Per-frame writes (~200 bytes/frame via dprintf) exhaust the 64 KB pipe buffer on inputs longer than ~6.4 s and deadlock the worker. Removing the per-frame call is correct — key state transitions (started, data-mode, eof) are still emitted from their natural call sites. Verification evidence{"state": "data-mode", "modulation": "V.21", "decodedBytes": 930}Acceptance criteria met: state=data-mode, modulation=V.21, decodedBytes > 0. PR checklist
VERDICT: APPROVED (Note: GitHub prevented a formal review approval because reviewer and author share the same GitHub account identity. Full review verdict recorded in Paperclip LKMA-211.) |
Reviewer Verdict: APPROVED — LKMA-195 Phase 2aNote: GitHub prevents approving one's own PR ( PR Completion Checklist
Acceptance Criteria Verification
Code Inspection Summary
No blocking issues. Implementation fully satisfies the LKMA-195 spec. |
Summary
Verification
Known gap
The final acceptance replay against artifacts/lkma-193a/groundtruth-v21.wav could not be run in this workspace because the LKMA-193a ground-truth WAV is not present on origin/main.