Skip to content

Commit b51a79d

Browse files
RFingAdamclaude
andcommitted
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>
1 parent 1f2d4f9 commit b51a79d

7 files changed

Lines changed: 67 additions & 9 deletions

File tree

AI_STATUS.md

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# RFlect AI Features — Status & Roadmap
22

3-
**Last Updated**: May 12, 2026
4-
**Current Version**: v4.2.0
3+
**Last Updated**: May 28, 2026
4+
**Current Version**: v4.3.0
55
**Status**: Beta / Enabled in GUI and MCP
66

77
---
@@ -13,7 +13,7 @@ RFlect ships AI-powered features for intelligent antenna analysis. A unified pro
1313
There are two integration surfaces:
1414

1515
1. **In-GUI** — AI Chat Assistant + AI-powered report generation, accessible from the desktop app.
16-
2. **MCP server**`rflect-mcp/server.py` exposes 34 tools an AI agent (Claude Code, Cline, etc.) can call programmatically.
16+
2. **MCP server**`rflect-mcp/server.py` exposes 35 tools an AI agent (Claude Code, Cline, etc.) can call programmatically.
1717

1818
## What Works
1919

@@ -59,7 +59,7 @@ There are two integration surfaces:
5959
- Restrictive file permissions (chmod 600 / Windows ACL)
6060
- Keys stored in `_key_cache` dict instead of `os.environ`
6161

62-
### 5. MCP Server (34 tools)
62+
### 5. MCP Server (35 tools)
6363
**Status**: Complete
6464

6565
| Category | Count | Examples |
@@ -71,6 +71,7 @@ There are two integration surfaces:
7171
| UWB | 3 | `calculate_sff_from_files`, `analyze_uwb_channel`, `get_impedance_bandwidth` |
7272
| Calibration Drift | 8 | `cal_drift_ingest`, `cal_drift_compare`, `cal_drift_report`, `cal_drift_set_setup_group` |
7373
| Orchestration | 1 | `process_folder` *(new in v4.2.0)* |
74+
| Validation | 1 | `analyze_iperf_angle_sweep` *(new in v4.3.0)* |
7475
| Misc | 3 | `get_measurement_details`, `validate_file_pair`, `convert_to_cst` |
7576

7677
#### `process_folder` (v4.2.0)
@@ -84,6 +85,17 @@ process_folder(folder_path, intent='auto'|'passive'|'active'|'cal_drift'|'uwb',
8485

8586
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.
8687

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.
91+
92+
```
93+
analyze_iperf_angle_sweep(session_dir, reference_session_dir, out_dir,
94+
mean_threshold_mbps=-5.0, worst_threshold_mbps=-10.0)
95+
```
96+
97+
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.
98+
8799
---
88100

89101
## Known Limitations

RELEASE_NOTES.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,29 @@
11
# RFlect - Release Notes
22

3+
## Version 4.3.0 (05/28/2026)
4+
5+
**Feature release — multi-angle throughput-validation MCP tool.**
6+
7+
### New Features
8+
9+
- **`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.
10+
- Signature: `analyze_iperf_angle_sweep(session_dir, reference_session_dir, out_dir, mean_threshold_mbps=-5.0, worst_threshold_mbps=-10.0)`.
11+
- 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+
327
## Version 4.2.0 (05/12/2026)
428

529
**Feature release — single-call folder orchestration for MCP clients.**

docs/ai/overview.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
RFlect has optional AI integration on two surfaces:
44

55
1. **In-GUI** — AI Chat Assistant + AI-powered DOCX reports
6-
2. **MCP** — agent clients (Claude Code, Cline, …) drive RFlect programmatically via 34 tools
6+
2. **MCP** — agent clients (Claude Code, Cline, …) drive RFlect programmatically via 35 tools
77

88
Both are powered by the same unified provider abstraction in `plot_antenna/llm_provider.py`, which supports **OpenAI**, **Anthropic**, and **Ollama**.
99

docs/index.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ Whether you're characterizing a BLE chip antenna, qualifying a cellular array, o
3535

3636
<a class="rflect-card" href="mcp/overview/">
3737
<strong>MCP Server →</strong>
38-
<span>34 tools that let Claude Code &amp; Cline drive RFlect programmatically.</span>
38+
<span>35 tools that let Claude Code &amp; Cline drive RFlect programmatically.</span>
3939
</a>
4040

4141
<a class="rflect-card" href="mcp/recipes/">
@@ -58,7 +58,7 @@ Whether you're characterizing a BLE chip antenna, qualifying a cellular array, o
5858
## Built for the way RF labs actually work
5959

6060
- **GUI** — desktop app (Tk-based, dark theme) for interactive review
61-
- **MCP server**34 tools that let Claude Code, Cline, and other AI clients drive RFlect programmatically
61+
- **MCP server**35 tools that let Claude Code, Cline, and other AI clients drive RFlect programmatically
6262
- **AI-assisted reports** — DOCX with embedded plots, gain tables, and optional LLM-generated executive summaries (OpenAI / Anthropic / Ollama)
6363
- **Cal-drift tracker** — record TRP-Cal runs over time, compare across epochs, flag setup-group mismatches
6464

docs/mcp/overview.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ RFlect ships a [Model Context Protocol](https://modelcontextprotocol.io/) server
1212

1313
## Tool count
1414

15-
34 tools across 7 categories. See [Tools Reference](tools-reference.md) for the full list with signatures.
15+
35 tools across 8 categories. See [Tools Reference](tools-reference.md) for the full list with signatures.
1616

1717
| Category | Count |
1818
|-------------------|------:|

docs/mcp/tools-reference.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,28 @@ Returns:
8383

8484
See [Recipes](recipes.md) for usage patterns.
8585

86+
## Validation (1)
87+
88+
| Tool | Purpose |
89+
|----------------------------|-------------------------------------------------------------|
90+
| `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.
107+
86108
## Misc (3)
87109

88110
| Tool | Purpose |

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "rflect"
7-
version = "4.2.0"
7+
version = "4.3.0"
88
description = "Antenna measurement visualization and analysis tool"
99
readme = "README.md"
1010
requires-python = ">=3.11"

0 commit comments

Comments
 (0)