# Cascades — voice-quality diagnostic + holistic RF/QoS optimization master plan ## User - **User:** Howard Enos (howard) - **Machine:** Howard-Home - **Role:** tech > NOTE: written in the OLD clone after the 2026-06-19 claudetools restructure coord message arrived. > NOT synced from here. Recover into the fresh re-clone (see Pending tasks). ## Session Summary Continuation of the VLAN 30 voice cutover. First, completed the AudioCodes migration: the 8 wired AudioCodes would not pick up VLAN 30 addresses via port re-VLAN + UniFi PoE power-cycle (PoE is OFF on those ports — they run on external power bricks, so a UniFi power-cycle is a no-op; a UI port disable/enable didn't reset their uptime either). Root cause confirmed: they held their old main-LAN DHCP leases and never re-DHCP'd. Howard fully powered them off/on, after which all 8 pulled VOICE leases (10.0.30.224-231). Final state: 31 devices on VOICE (8 AudioCodes + 22 Poly + Vertical desktop). Second, diagnosed voice quality (dropped calls / voice breaks). Wired AudioCodes: all 8 ports clean (100M full-duplex, zero errors). The problem is RF on the WiFi Poly phones: 14 flagged, worst = Lauren/.202 (2.4 GHz, 50% retry, on the CC Bridge wireless-MESH AP) and Shelby/.218 (2.4 GHz, 53% retry, MemCare). Coverage gaps in rooms 515/210/204 (RSSI -72 to -82). AP 103 5 GHz saturated (75% airtime, ~25,900 retries). Also found 6 Poly phones NOT migrated (still on VLAN 20/Default) — fleet is 28 Poly, not 22; verified they are distinct active MACs, not ghosts. Howard locked Lauren's phone to AP 103 (off the mesh AP). Third, built a holistic, all-device network optimization master plan grounded in the existing 2026-06-16 audit + 2.4 GHz runbook + the over-thinning re-check. Key current-state fact: the network is OVER-THINNED on 2.4 GHz (overnight 6/17: 24 radios disabled + 42 at Low/6 dBm -> interference down but retry 17->23%, satisfaction 39->30). The plan's central principle: open relief valves (6 GHz + correct 2.4 power) BEFORE constraining (5 GHz 40 MHz), to avoid relocating congestion. Sequenced phases: (1) QoS, (2a) enable 6 GHz on CSCNet + 2b correct 2.4 Low->Medium, (3) 5 GHz 80->40 MHz + non-DFS channel plan + relieve AP 103, (4) fine-tune, (5) physical. With an interdependency map and per-phase gates. Fourth, verified DFS rigorously (Howard's concern re: Davis-Monthan AFB + TUS ~10 mi). The skill's dfs-check flagged 3 APs, but on inspection all were benign (CAC timers + DFS-control toggles on a non-DFS channel, not radar). A precise radar-detection-only sweep found ZERO genuine hits across all 53 DFS APs — but only over a ~21-23h window (APs rebooted in the 6/17 outage). DECISION: go NON-DFS only (UNII-1 36-48 + UNII-3 149-165) — a radar vacate = dropped calls; resilience > diversity; 6 GHz covers the capacity gap. Fifth, designed Phase 1 QoS (pfSense + UniFi). Measured WAN: WAN1 fiber upload ~522 Mbps (vs ~98 Mbps peak usage) -> the WAN is NOT the everyday voice bottleneck, so QoS is INSURANCE (WAN2 coax failover + rare saturation), not the everyday fix — RF is the substance. Match voice by source subnet 10.0.30.0/24 (the VLAN move's payoff). Phones confirmed to support DSCP EF. Determined a dedicated voice SSID is NOT viable (UniFi 3-SSID cap; CSC ENT still has 131 clients, not retireable) and NOT needed (QoS is VLAN/DSCP-based, SSID-independent; band preference is phone-side). Added an all-devices impact + data-driven decision framework: every change gated on fleet-wide metrics (measure -> decide -> adjust), with the trade-offs to watch (non-DFS + 5GHz-only DirecTV fleet; min-RSSI orphaning; 40 MHz peak). ## Key Decisions - **AudioCodes need a full power-cycle (off/on), not a UniFi PoE cycle** — they're externally powered (PoE off on the ports); a UI port bounce doesn't reset them. - **5 GHz: NON-DFS ONLY.** DFS sweep clean but only ~1-day window near a military base/airport; a radar vacate drops calls. Resilience over channel diversity; lean on 6 GHz for capacity. - **QoS reframed to INSURANCE, not the everyday fix** — WAN1 fiber has ~522 Mbps up vs 98 Mbps peak use; the everyday dropped-calls cause is RF. QoS matters on WAN2 (coax) failover + rare WAN1 saturation. - **No dedicated voice SSID** — 3-SSID cap is sound RF hygiene; CSC ENT (the only retirement candidate) still has 131 clients; and voice doesn't need a dedicated SSID (QoS is SSID-independent, band-pref is phone-side). - **Open relief valves before constraining** — 6 GHz + 2.4 Low->Medium BEFORE 5 GHz 40 MHz, or congestion just relocates. - **2.4 power Low->Medium, not lower** — Low already over-thinned (retry up, satisfaction down). - **Data-driven gates** (Howard) — base every choice on measured fleet-wide metrics; one lever per zone; keep/hold/rollback per the gate rule; validation measures ALL devices, not just voice. - **Phones are 5 GHz (not 6E)** — 6 GHz helps voice indirectly by clearing 5 GHz of resident devices. ## Problems Encountered - **AudioCodes wouldn't move to VLAN 30** — root-caused to held DHCP leases + PoE-off ports (power-cycle no-op); resolved by full power-off/on. - **UniFi controller PUT 403s** — CSRF token extraction flaky; fixed by reading `x-updated-csrf-token` (with a TOKEN-cookie JWT fallback). - **pfSense SSH rate-limiting + controller throttling** after many rapid queries — switched between controller API and pfSense SSH as needed; one fleet pull hung in the background. - **Temp-file/sync friction (RECURRED 3x)** — controller-scratch files (.sta.json, .fleet325.dev) written CWD-relative got swept into commits by `git add -A` and blocked rebases (stray locked curl.exe held them). Fixed: killed the procs, untracked, broadened .gitignore (.fleet*, .ap[0-9]*, .vq[0-9]*, .q[0-9]*). Real fix: write API scratch OUTSIDE the repo (used mktemp -d for the DFS sweep). - **Cloudflare __down / WAN2-bound speedtests returned 0.0** — only WAN1 upload (522 Mbps) measured cleanly; WAN2 (coax) upload still unknown (needs a WAN2-routed host or Cox bill). ## Configuration Changes (all in clients/cascades-tucson/, committed up through 2b2d094 BEFORE the restructure) - **Created** `docs/network/network-optimization-master-plan.md` — holistic all-device plan (sequencing, interdependency map, data-driven decision framework, DFS non-DFS decision, SSID decision). - **Created** `docs/network/phase1-voice-qos-design.md` — pfSense HFSC + UniFi WMM/switch QoS design. - **Created** `reports/2026-06-18-voice-quality-diagnostic.md` — per-phone RF findings + fixes. - **Updated** `reports/2026-06-16-voice-quality-diagnostic.md`? (no) — voice-quality report Lauren->103 note. - **No live network changes applied** (Cascades rule: explicit per-change go). UniFi port bounces were temporary (restored). DFS/WAN tests were read-only/bounded. ## Credentials & Secrets - No new credentials. Used existing: `infrastructure/uos-server-network-api-rw` (controller), `clients/cascades-tucson/unifi-ap-ssh` (AP SSH for DFS sweep), `clients/cascades-tucson/pfsense-firewall`, `clients/cascades-tucson/wifi-voice-ppsk` (key `V0!c38863171`). ## Infrastructure & Servers - VOICE VLAN 30 `10.0.30.0/24`: 8 AudioCodes `.224-.231`, 22 Poly `.202-.223`, desktop `.201`. - WAN1 fiber igc0 (522 Mbps up measured; RRD peaks 680 down/98 up). WAN2 coax igc3 (72.211.21.217, upload unmeasured). pfSense `192.168.0.1` Plus 25.07, no existing shaper. - UniFi UOS `172.16.3.29:11443` site `va6iba3v`. USW-16-PoE mac `d8:b3:70:21:94:5f` dev_id `685f39078e65331c46ef7e90`. - SSIDs: CSCNet (427 clients, PPSK, 2g+5g), CSC ENT (131 clients, legacy, 2g+5g), Guest (13, 2g+5g+6g). - DFS: 53 APs on DFS, 0 genuine radar over ~21-23h. ## Pending / Incomplete Tasks - **RE-CLONE claudetools** (coord message 2026-06-19): old clone incompatible after history rewrite. Steps below. - **Verify** this session's Cascades docs (master plan, QoS design, voice-quality + diagnostic reports, voice inventory, logging plan) survived the rewrite into the new repo; if missing, recover from this .old working tree. - **Recover this session log** into the new clone (it's uncommitted here). - WAN2 (coax) upload number — measure from a WAN2-routed host / Cox bill (sizes the failover shaper). - 6 straggler Poly phones (10.0.20.64/65/66/67/195, 192.168.1.126) — re-key to voice PPSK. - Floors 5/6 (MemCare) RF + phones — deferred. - Execute the optimization plan (start Phase 2b 2.4 Low->Medium with baseline capture) — pending Howard's go. - Hand Vertical the phone-side config list (band 5GHz lock, DSCP-on, k/v roaming, U-APSD, firmware). ## Re-clone steps (Windows / C:\claudetools) ``` # from C:\ mv claudetools claudetools.old # or rename in Explorer git clone https://git.azcomputerguru.com/azcomputerguru/claudetools.git claudetools cp claudetools.old/.claude/identity.json claudetools/.claude/ cd claudetools && git submodule update --init --recursive # then: diff clients/cascades-tucson against claudetools.old; cp any missing files (esp. this session's docs) # recover this session log from claudetools.old/clients/cascades-tucson/session-logs/2026-06/ # verify, then delete claudetools.old ``` See RECLONE.md in the new repo. Pre-split backup bundle: Jupiter share Backups/Gitea-Storage. ## Reference Information - Last pushed commit (old history): `2b2d094` (2026-06-18 19:16). Restructure force-push: ~2026-06-19 02:41 UTC. - Master plan: `clients/cascades-tucson/docs/network/network-optimization-master-plan.md` - QoS design: `clients/cascades-tucson/docs/network/phase1-voice-qos-design.md` - Voice-quality diagnostic: `clients/cascades-tucson/reports/2026-06-18-voice-quality-diagnostic.md` - Existing RF audit + 2.4 runbook: `reports/2026-06-16-unifi-full-audit.md`, `reports/2026-06-16-2.4ghz-remediation-runbook.md`