From d6cbfb3e50b9252219ea8f848bccab473d619ccc Mon Sep 17 00:00:00 2001 From: Howard Enos Date: Tue, 16 Jun 2026 17:03:10 -0700 Subject: [PATCH] sync: auto-sync from HOWARD-HOME at 2026-06-16 17:03:02 Author: Howard Enos Machine: HOWARD-HOME Timestamp: 2026-06-16 17:03:02 --- ...026-06-15-howard-cascades-wifi-rf-audit.md | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/clients/cascades-tucson/session-logs/2026-06/2026-06-15-howard-cascades-wifi-rf-audit.md b/clients/cascades-tucson/session-logs/2026-06/2026-06-15-howard-cascades-wifi-rf-audit.md index 479105f..7268a27 100644 --- a/clients/cascades-tucson/session-logs/2026-06/2026-06-15-howard-cascades-wifi-rf-audit.md +++ b/clients/cascades-tucson/session-logs/2026-06/2026-06-15-howard-cascades-wifi-rf-audit.md @@ -636,3 +636,52 @@ Howard-Home by the home UniFi `.0.0/24` overlap, so first live validation must r Filed coord todo (project unifi-wifi): upgrade Cascades pfSense -> install RESTAPI -> mint key -> vault `clients/cascades-tucson/pfsense-api` -> first live `gw-audit cascades`. Resume trigger + steps in ROADMAP §E. + +## Update: 17:02 PT (2026-06-16) — unifi-wifi skill health pass + 2.4 usage/coverage tools + tonight's runbook + +### Skill health pass +Verified all 19 unifi-wifi scripts. Controller-side read-only (sites, audit-site, switch-audit, live-stats, +model-rank, optimize-radios, monitor-run, gw-audit) validated LIVE on Cascades; dry-run apply (apply-radio, +apply-wlan, client-control, device-control) correct; AP-side mechanism (SSH + /proc/ui_neighbor) confirmed + +full neighbor-collect (74-AP SNR sweep) -> channel-plan end-to-end. Fixes: optimize-radios stray mongo REPL +echo (`for(k in prof)` numeric completion -> `void 0`); ASCII-cleaned printed output (em-dash/arrow/§ that +rendered as mojibake on Windows console) across 10 scripts. Commit e1031ae. + +### Question chain: "can we see 2.4 device history -> which 2.4 radios to disable" +1. radio-usage.sh (NEW, commit 659c3a2): per-AP 2.4 client history from ace_stat.stat_daily (~77d) — time-avg + concurrent users (`-num_sta_avg`) + peak snapshot (`ng-num_sta`). Finding: only AP 108 (offline) + has peak==0 over 77d; every other 2.4 radio takes real bursts at low avg -> confirms POWER-DOWN not disable. + NEIGHBOR_JSON adds a safe-to-disable shortlist. +2. radio-usage.sh --ap mode (commit 80384a7): per-DEVICE — devices on an AP's 2.4 (live stat/sta + recent + assoc events) tagged steerable (dual-band / randomized MAC) vs legacy/IoT (fixed OUI). Data finding: + wifi_connectivity_event retention on the UOS is ~1 DAY (current+recent, not long history); MAC-randomization + heuristic fills the gap. +3. coverage-thin.sh (NEW, commit f936224 + hint fix + mesh fix): the real deliverable — "which 2.4 radios to + disable given over-coverage, by AP proximity." Greedy dominating-set on the 2.4 SNR layer; only ACTIVE-2.4 + neighbors count as coverage. Exposed + avoided an optimize-radios flaw (band-AGNOSTIC adjacency counted the + ng-DISABLED AP 128 as 'coverer' for 127/229/330/428 -> would be 2.4 holes; flagged to Mike). + +### Howard caught two hazards (pre-execution review) -> fixes +- MESH: 2nd Floor Atrium is the wireless-mesh PARENT for CC Bridge + salon (backhaul ch36/5GHz); 206 U7 Pro + carries 108. coverage-thin was mesh-blind and had listed 2nd Floor Atrium/CC Bridge/206 as disable targets. + FIX: coverage-thin now fetches live uplink topology and auto-excludes wireless-mesh APs + their parents + (108, 206 U7 Pro, 2nd Floor Atrium, CC Bridge, salon). resilient plan 34->33. +- SSID/device pinning: verified NONE — CSC ENT/CSCNet/Guest broadcast on all APs (broadcasting_aps off), and + UniFi doesn't lock clients to an AP -> disabling a radio orphans nothing; clients roam. No pinning risk. +- Also fixed coverage-thin apply HINT: was emitting `apply-radio ng disable --zone ""` (would disable + a WHOLE floor) -> now per `--ap ""`. + +### Tonight's runbook (committed 8c048c3) +clients/cascades-tucson/reports/2026-06-16-2.4ghz-remediation-runbook.md. Phases: 0 pre-flight+baseline; +1 power-down all non-mesh 2.4 -> Low (per-zone clean floors, per-AP on mesh-containing Floor 2/misc; re-disable +128 after Floor 1); 2 settle+re-measure (valid stop point); 3 disable 25 mesh-safe low-client radios per floor +with gates (F1:7 F2:8 F3:5 F4:5); 4 wrap. Excluded: 7 high-client redundant (power-down instead: 3rd/4th +Atrium,318,303,406-408,505,Dining Room); Memcare TV room (memcare hold); companion levers (min-rate/band-steer/ +min-RSSI) deferred. Recovery: device-control poe-cycle (never force-provision). Rollback JSONs in .claude/tmp. + +### Open decision (awaiting Howard) +Scope for tonight: recommended = power-down-all + pilot ONE floor's disables, validate ~15min, expand if clean +(vs all 25 at once). And whether I stay live during execution to run the per-floor validation gates. + +### Note: mesh data is from .claude/tmp/cascades-nbr.json (fresh tonight, gitignored) — regenerate via +neighbor-collect before execution if stale.