You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs+release: v4.3.0 — document analyze_iperf_angle_sweep, bump version
Bumps version 4.2.0 -> 4.3.0 and brings the docs site + release notes
into alignment with the analyze_iperf_angle_sweep MCP tool added in
eaccbf3 / fixed in 1f2d4f9:
- pyproject.toml: 4.2.0 -> 4.3.0
- RELEASE_NOTES.md: new 4.3.0 section (the release workflow extracts
this by version header for the GitHub release body)
- AI_STATUS.md: version + date, MCP tool count 34 -> 35, new Validation
category row, and an analyze_iperf_angle_sweep subsection
- docs/mcp/tools-reference.md: new Validation (1) section with signature
+ return shape
- docs/mcp/overview.md, docs/index.md, docs/ai/overview.md: 34 -> 35
tools / 7 -> 8 categories
Pushing this commit retriggers docs.yml (Pages rebuild) since it touches
docs/** + AI_STATUS.md. Tag v4.3.0 follows to trigger the release build.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Auto-detect priority: `cal_drift > passive > active > uwb`. Mixed folders proceed with the winner and surface a `mixed_intents_detected` warning. The tool never raises — every failure mode (missing folder, no match, partial pair, per-file UWB error, report write failure) returns as a structured warning.
86
87
88
+
#### `analyze_iperf_angle_sweep` (v4.3.0)
89
+
90
+
Compares two bench iperf sessions — an installed-antenna session and a matched reference-antenna session recorded at the same azimuth angles — to quantify how the installed antenna's real-environment throughput tracks a reference across the radiation pattern. For each `(channel, mode)` cell it computes per-angle deltas (installed − reference) and a roll-up (mean, median, worst-angle, best-angle, spread, p10/p90), then writes `summary.csv`, `summary.json`, a polar PNG per cell, and a `report.md` with a configurable adequacy verdict.
Reads only the documented bench `session.json` shape (`wifi_only` runs carrying `angle_deg` and `aggregate.overall_mbps`); no dependency on any bench harness. Like the orchestrator, it never raises — every failure mode returns as a structured warning.
-**`analyze_iperf_angle_sweep` MCP tool**: compares two bench iperf sessions — an installed-antenna session and a matched reference-antenna session recorded at the same azimuth angles — to quantify how the installed antenna's real-environment throughput tracks a reference across the radiation pattern.
- For each `(channel, mode)` cell, computes per-angle deltas (installed − reference) and a roll-up: mean, median, worst-angle, best-angle, spread, and p10/p90.
12
+
- Emits `summary.csv`, `summary.json`, a polar PNG per cell, and a markdown `report.md` with a configurable adequacy verdict per cell.
13
+
- Reads only the documented bench `session.json` shape (`wifi_only` runs carrying `angle_deg` + `aggregate.overall_mbps`); no dependency on any specific bench harness.
14
+
- Never raises — every failure mode (missing manifest, malformed runs, no common channel/mode cells, no common angles, write errors) returns as a structured `warnings[]` entry.
15
+
16
+
### Internals
17
+
18
+
-**`register_iperf_angle_tools(mcp)`** added to `rflect-mcp/tools/iperf_angle_tools.py` and wired into `rflect-mcp/server.py`. MCP tool count: 34 → 35 (new "Validation" category).
19
+
- All file IO in the new tool pins `encoding="utf-8"` so non-ASCII report glyphs (Δ, ≥, →, −) write correctly on Windows code pages.
20
+
21
+
### Tests
22
+
23
+
- 8 new tests in `tests/test_iperf_angle_sweep.py` covering per-angle delta computation, CSV/JSON shape, channel/mode cell intersection, angle-set intersection, verdict thresholds, missing manifest, malformed runs, and non-`wifi_only` runs ignored. Verified green across the full ubuntu/windows/macOS × py3.11/3.12 CI matrix.
24
+
25
+
---
26
+
3
27
## Version 4.2.0 (05/12/2026)
4
28
5
29
**Feature release — single-call folder orchestration for MCP clients.**
|`analyze_iperf_angle_sweep(session_dir, reference_session_dir, out_dir, mean_threshold_mbps, worst_threshold_mbps)`| Per-angle throughput delta of an installed antenna vs a reference, across azimuth |
91
+
92
+
Compares two bench iperf sessions — an installed-antenna session and a matched reference-antenna session recorded at the same azimuth angles. For each `(channel, mode)` cell it computes the per-angle deltas (installed − reference) and a roll-up: mean, median, worst-angle, best-angle, spread, and p10/p90. It writes `summary.csv`, `summary.json`, a polar PNG per cell, and a markdown `report.md` with a configurable adequacy verdict.
93
+
94
+
Returns:
95
+
```python
96
+
{
97
+
"summary_csv": str|None,
98
+
"summary_json": str|None,
99
+
"report_md": str|None,
100
+
"polar_pngs": list[str],
101
+
"n_cells": int,
102
+
"warnings": list[str], # never raises; failures here
103
+
}
104
+
```
105
+
106
+
Reads only the documented bench `session.json` shape (`wifi_only` runs carrying `angle_deg` and `aggregate.overall_mbps`); it has no dependency on any specific bench harness. See [Recipes](recipes.md) for usage patterns.
0 commit comments