πPR Timeline & Status
A color-coded view of aegis-platform #1-64 / aegis-sip-bridge #1-16 / voice-edge #1-12.
The timeline and status of every pull request across the three repos (aegis-platform / aegis-sip-bridge / voice-edge), built from live GitHub PR data. It reflects the July hardening after the June handoff (Stages 1-4, billing, E1-E3, the first line of toll-fraud defense).
Overview (color-coded by status)
Merged 72Open 17Draft 2Closed 1 92 PRs total
aegis-platform
βΉοΈWhere the review cycle stands
- 72 Merged: the core Route C / Phase B v2 work (#1-21), plus the July hardening β Stages 1-4, billing, and E1-E3 (platform #32-64), the bridgeβs D-1 / Stage 2 / Stage 4 R-series (#7-16, the merged ones), and voice-edgeβs toll-fraud first line and cleanup (#4-12, the merged ones).
- 17 Open: the June-handoff review fixes (Critical-1 / H-1βH-5 / the CM and PM groups) and the pre-on-device-test Phase C integration PRs. Some await review.
- 2 Draft: Phase C v2 standalone (frozen) plus a pre-existing plan Draft.
- A reviewer will be assigned after the collaborator invite (Chrisβs GitHub: walmsleyc).
All PRs
aegis-platform
#1Merged Route C: OpenAI Realtime integration (realtime)#2Merged Route C B4 (duration_seconds)#3Merged Route C B7 (event-trace)#4Merged Route C B5 (transcript-tick docs)#5Merged Route C B6 (retention sweeper)#6Merged B1' dashboard live updates (SSE)#7Merged B7' event-trace prime#8Merged B2 rtc-stats summary#9Merged B8 dashboard#10Merged B9 tools (MCP)#11Merged chore: tech-debt (env/cors/db)#12Merged docs: Phase B v2 completion + Phase C v1 foundation#13Merged feat(ux): dashboard polish (SSE status, empty states, toast)#14Merged feat(observability): health, version, structured logs, JP errors#15Merged docs: B3/B10 design drafts for Rick Kazman review#16Merged feat(verify): OpenAI Realtime WebSocket direct-connection verify#17Merged docs(phase-c): record 2 bridge implementation gotchas#18Merged feat(b3): AES-256-GCM at-rest encryption for recordings#19Merged feat(b10): WebRTC session recovery v2.5 (backoff + mute + Retry-After)#20Merged docs(phase-c): operator JWT / DB migration runbooks#21Merged docs: NAS staging migration#22Open Wire the strict_approval gate + audit into whitelist CSV import#23Open Wire recording at-rest decryption into get_recording#24Open Revoke post-logout JWTs via a Redis denylist#25Open Clean up RhodiumAdapter's "stub" wording (behavior unchanged)#26Open Add an ON DELETE policy to all 19 FKs (CASCADE/SET NULL/RESTRICT)#27Open Add authorization-boundary tests across 6 modules#28Open Add a NULL-tenant guard to check_client_access#29Open Remove the full NAS path from recording-storage logs#30Open Move tools_core's Japanese wording into the API layer#31Open Add 10 missing settings to .env.example#32Merged Transcript pipeline + eval + health check (AI-side, pre-hardware)#33Closed engine: verdict port + Scorer L1 blocklist wiring (L3-D2/D4)#34Merged engine: opener-floor guardrail (L1 rules, floor 0.6 OR-composed) β breakthroughs 3β0, zero false-positive cost#35Merged engine: verdict port + Scorer L1 blocklist wiring (L3-D2/D4) β recreation of #33 (base=main)#36Merged Add automated test runs via GitHub Actions#37Merged F-1: fix the require_roles fake test into a real test#38Merged Stage 1-A: shared number-to-client resolution function (flag OFF)#39Merged Stage 1-B: switch number resolution to the shared function (flag-gated, default OFF)#40Merged specs: move the Stage 1 routing design to the canonical Aegis repo#41Merged specs: store the Stage 0-c homework notes in the Aegis repo under Git#42Merged Stage 3-1: unify internal time to UTC, keep JST display (+ fix the 3-b silent substitution)#43Merged Stage 3-c: prevent call-log loss (await create_task completion)#44Merged Notification-channel abstraction (app first; Slack/LINE/email interfaces only; default OFF)#45Merged Stage 3-2: make the stats aggregation window UTC (compute JST date boundaries correctly, flag OFF by default)#46Merged Billing metering S1: canonicalize engine types + design doc#47Merged Billing metering S2: usage_events + emit#48Merged Billing metering M1: aggregation API (GET /api/usage)#49Merged Stage 3-f F1: wire the periodic retention task (dry-run forced, no actual deletion, default OFF)#50Merged Stage 3-d: fix retell_client exception swallowing (RetellApiError)#51Merged Stage 3-3: UTC migration script for historical JST rows (dry-run by default, idempotent)#52Merged Stage 3-f F3: assign retention_until (consolidated into retention.py, billing source records excluded, no deletion)#53Merged Stage 3-e E1: observe Redis fail-open (behavior unchanged, observation only)#54Merged Stage 4 C-1: idempotency against Retell double billing (3 safeguards)#55Merged Stage 4 (1): bind the approval gate to payload/target (make 4-eyes effective)#56Merged Stage 4 (2): block reseller cross-tenant access (fail-closed)#57Merged Stage 4 (3): SIP webhook signature verification (Critical (3), wire rhodium_webhook_secret)#58Merged Stage 4 P1: prevent TOCTOU in approval application (conditional UPDATE)#59Merged Stage 4 F-2: real tests for Retell webhook signatures (closing out the fake-test fixes)#60Merged Stage 4 Β§3-1: close the cross-tenant holes across all endpoints (check_client_access)#61Merged Stage 4 Β§3-2: close the approve/reject TOCTOU (unify all transitions on CAS)#62Merged Stage 4 Β§3-3: webhook input validation (malformed body: 500 to 400)#63Merged Stage 3-e E2: Lua atomic merge for Redis update_fields (prevent lost updates)#64Merged Stage 3-e E3: move on_transcript to a threadpool (fix event-loop congestion)
aegis-sip-bridge
#1Draft Phase C implementation plan (pre-existing; not authored here)#2Draft Phase C v2 standalone bridge + full Asterisk stack (pre on-device test)#3Open Validate the AMI secret's character set (sed/eval hardening)#4Open Move tool args containing caller PII from INFO to DEBUG#5Open Fix the "proxy not wired" note in bridge.py's docstring#6Open Deploy-layout separation approach + glossary + terminology alignment#7Merged docs: fix nonexistent docs/ references in CLAUDE.md#8Open Phase C D-1: AMI hangup + transcript pipeline + terminate safety-valve#9Merged Add automated test runs via GitHub Actions#10Merged F-3: fix the transfer_to_human fake test (mark unwired paths as explicit xfail)#11Merged obs: Stage 0-c: consistently attach the call tracking ID (call_uuid) to logs#12Merged Stage 2: whole-call timeout (backstop for silent hangs)#13Merged Stage 2: watchdog (systemd Restart + sd_notify heartbeat)#14Merged Stage 4 R-2: transcript-final retransmission (prevent record loss)#15Merged Stage 4 R-1/R-4: coordinated pump shutdown (fix orphaned pumps and one-sided silence)#16Merged Stage 4 Β§2-B-1: keep the AI running when ami is unset (fix silence)
voice-edge
#1Open voice-edge: Aegis bridge integration + connection points for RDS/Arrowfone#2Merged docs: unify the AudioSocket port to 9092 in the v1 draft#3Open Phase C D-1: dialplan (AMI-hangup verdict, dead DBPut path removed) + SSoT reference#4Merged Add automated shellcheck + bash -n lint runs#5Merged Lab hardware test checklist (consolidating Stages 0-2)#6Merged Update the checklist reference to the post-migration canonical location (one line)#7Merged P0-4a: flag-based outbound call restriction (toll fraud, default OFF)#8Merged P0-4b: sanitize shell injection (recording file names)#9Merged P0-4c: source ACL (put dormant res_pjsip_acl to use, LAN-only)#10Merged P0-4d: security log (audit trail, assumes fail2ban)#11Merged P1: fix silent downgrade on JWT expiry (leave a trace when the verdict is unavailable)#12Merged P2: dead-code cleanup + placeholder detection