Skip to content

Commit 4e77da7

Browse files
chenchaoyiclaude
andauthored
chore(release): bump to 1.0.11 (#63)
The Wi-Fi and Bonjour detail modals are no longer raw-field dumps: sparkline + σ, sibling radios, roam history, recommendation, vendor-resolution trace, decoded TXT, other services on the host, and cross-surface correlation to Wi-Fi / BLE peers. Full changelog under `## [1.0.11]` in CHANGELOG.md (EN + ZH). Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 9617e75 commit 4e77da7

4 files changed

Lines changed: 144 additions & 2 deletions

File tree

CHANGELOG.md

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,81 @@ the project follows [Semantic Versioning](https://semver.org/) where
99
practical. The leading `v0.x` line is allowed to break minor
1010
behaviours between releases.
1111

12+
## [1.0.11] — 2026-05-15
13+
14+
The Wi-Fi and Bonjour detail modals stop being raw-field dumps and
15+
start telling you what the rest of diting already knows. Same data,
16+
much richer context.
17+
18+
### Added (Wi-Fi detail modal)
19+
- **Signal history** — sparkline of the last ~hour of RSSI samples
20+
for the inspected BSSID + a `σ X dB · stable / active` stability
21+
label. Drawn from `EnvironmentMonitor`'s existing per-BSSID ring.
22+
- **Same physical AP** — sibling BSSIDs (2.4 / 5 / 6 GHz radios)
23+
grouped via `NetworkInventory.is_same_ap`, with their channel /
24+
band / RSSI from the current scan.
25+
- **Roam history** — newest-first list (capped at 10) of roam
26+
events where this BSSID was either `previous_bssid` or
27+
`new_bssid`. `[same-AP]` / `[cross-AP]` tags.
28+
- **Recommendation** — when the inspected row IS the
29+
currently-associated BSSID AND a same-SSID candidate is ≥ 15 dB
30+
stronger, render `consider switching to <BSSID> on <band> ·
31+
+N dB`. Uses the same `clearly-better` rule the diagnostics
32+
panel's Roam score line uses.
33+
34+
### Added (Bonjour detail modal)
35+
- **Vendor-resolution trace** — Identity section's vendor row
36+
appends ` · via txt-vendor / oui / hostname-pattern /
37+
service-type-hint` so the user can see which signal won. Backed
38+
by a new `BonjourDevice.vendor_trace` field populated by a new
39+
`resolve_vendor_with_trace()`. Maintainers use it to find
40+
long-tail decoder gaps; users get a small confidence cue.
41+
- **Other services on this host** — when one host advertises
42+
multiple services (the user's own Mac is the canonical case:
43+
`AirPlay` + `AirPlay audio` + `Apple Companion`), list the other
44+
categories with their `last_seen` age. Reframes the modal from
45+
service-instance-centric to device-centric.
46+
- **TXT decoders** — well-known keys (`model` / `osxvers` /
47+
`srcvers` / `deviceid`) parse into named friendly fields
48+
rendered above the raw TXT table. Apple model identifiers like
49+
`MacBookPro18,1` decode to `MacBook Pro 16-inch (M1 Pro, 2021)`;
50+
macOS major versions render with codenames (e.g. `Tahoe (26)`).
51+
Lives in `src/diting/mdns_txt_decoders.py` as a small
52+
registry; decoders never raise.
53+
- **Cross-surface correlation** — new section ties the Bonjour
54+
host to the rest of diting's scan surfaces via three rules:
55+
- **Rule 1** (deterministic): the announced IP matches the
56+
Mac's `Connection.ip_address` → `local Mac (this host is
57+
you)`. Fires on every announcement of the user's own Mac.
58+
- **Rule 2** (opportunistic): TXT `deviceid` parses as a
59+
canonical MAC AND those bytes appear in some BLE row's
60+
`manufacturer_hex` → `also on BLE as <name|type|vendor> ·
61+
<RSSI> dBm`. Rare for Apple devices (RPA) but useful for
62+
printers / IoT hubs that embed their MAC in adverts.
63+
- **Rule 3** (probabilistic, hedged): the Bonjour hostname
64+
resolves to Apple via `_NAME_PATTERN_VENDORS` AND a nearby
65+
BLE row carries an Apple-Proximity-class `type` (`Nearby
66+
Info` / `Nearby Action` / `Handoff` / `Apple Proximity`) →
67+
`likely the same device as BLE row <short-id>`. The
68+
"likely" hedge is explicit because hostname-pattern
69+
correlation is probabilistic.
70+
71+
### Changed
72+
- `WifiDetailScreen.__init__` and `BonjourDetailScreen.__init__`
73+
gain optional kwargs (`environment_monitor` / `event_ring` /
74+
`latest_scan` for Wi-Fi; `latest_mdns` / `latest_ble` /
75+
`latest_connection` for Bonjour) so the modals can read live
76+
session state. All default to `None`; sections whose ref is
77+
missing omit entirely.
78+
- `_section_txt` (Bonjour) now renders Decoded first + Raw second.
79+
Decoded keys are excluded from the Raw table via
80+
`mdns_txt_decoders.decoded_keys()`.
81+
82+
### Spec
83+
Three capabilities modified: `wifi-detail-modal`,
84+
`bonjour-detail-modal`, `mdns-scanning`. See
85+
`openspec/changes/archive/2026-05-15-wifi-and-bonjour-detail-enrichment/`.
86+
1287
## [1.0.10] — 2026-05-14
1388

1489
Two fixes that surface only in the curl-installed frozen binary

docs/zh/CHANGELOG.md

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,73 @@
88
[Semantic Versioning](https://semver.org/)`v0.x` 阶段允许破坏性的次要
99
行为变更。
1010

11+
## [1.0.11] — 2026-05-15
12+
13+
Wi-Fi 与 Bonjour 详情 modal 不再只是字段堆叠——开始把 diting 自己
14+
已经收集到的上下文摆出来。同一份数据,更厚的语境。
15+
16+
### 新增(Wi-Fi 详情 modal)
17+
- **Signal history** —— 选中 BSSID 最近约一小时的 RSSI sparkline +
18+
一行 `σ X dB · stable / active` 稳定度标签。数据源自
19+
`EnvironmentMonitor` 现有的 per-BSSID 滚动环。
20+
- **Same physical AP** —— 通过 `NetworkInventory.is_same_ap` 把同
21+
物理 AP 的 2.4 / 5 / 6 GHz 兄弟无线电列出来,附信道 / 频段 /
22+
当前扫描的 RSSI。
23+
- **Roam history** —— 按时间倒序最多 10 条,过滤事件环中
24+
`previous_bssid``new_bssid` 命中此 BSSID 的 roam 事件,附
25+
`[same-AP]` / `[cross-AP]` 标签。
26+
- **Recommendation** —— 仅在被查看的行就是当前关联 BSSID 且 scan
27+
里存在同 SSID、信号强 ≥ 15 dB 的候选时渲染 `consider switching
28+
to <BSSID> on <band> · +N dB`。规则与诊断面板 Roam score 行
29+
完全相同。
30+
31+
### 新增(Bonjour 详情 modal)
32+
- **Vendor 解析路径** —— Identity 段的 vendor 行追加 ` ·
33+
via txt-vendor / oui / hostname-pattern / service-type-hint`,
34+
让用户一眼看到生效的是哪个信号。新加 `BonjourDevice.vendor_trace`
35+
字段,由新的 `resolve_vendor_with_trace()` 写入。维护者据此发现
36+
长尾解码缺口;用户得到一点信心提示。
37+
- **Other services on this host** —— 一个主机同时通告多个服务时
38+
(用户自己 Mac 是典型场景:`AirPlay` + `AirPlay audio` + `Apple
39+
Companion`),把同 host 的其他类别按 `last_seen` 倒序列出来。
40+
视角从「service instance」切到「device」。
41+
- **TXT 解码器** —— 已知键(`model` / `osxvers` / `srcvers` /
42+
`deviceid`)解析成命名字段,渲染在 raw 表格之上。Apple model
43+
identifier(如 `MacBookPro18,1`)解码成 `MacBook Pro 16-inch
44+
(M1 Pro, 2021)`;macOS 主版本号转代号(如 `Tahoe (26)`)。
45+
实现在 `src/diting/mdns_txt_decoders.py`,注册器模式;解码器
46+
绝不抛异常。
47+
- **Cross-surface 关联** —— 新段,把 Bonjour host 关联到其他扫描
48+
面上:
49+
- **规则 1**(确定性):announce 的 IP 与 Mac 的
50+
`Connection.ip_address` 命中 → `local Mac (this host is
51+
you)`。每次用户自己 Mac 的 announce 都会命中。
52+
- **规则 2**(机会性):TXT `deviceid` 解析为合法 MAC 且这串
53+
字节出现在某个 BLE 行的 `manufacturer_hex` 中 → `also on BLE
54+
as <name|type|vendor> · <RSSI> dBm`。Apple 设备走 RPA 极少触
55+
发,但对会把 MAC 嵌进 advert 的打印机 / IoT hub 有用。
56+
- **规则 3**(概率性,带修饰):Bonjour hostname 经
57+
`_NAME_PATTERN_VENDORS` 解析为 Apple,并且附近有 Apple-
58+
Proximity 类型的 BLE 设备(`type``Nearby Info` /
59+
`Nearby Action` / `Handoff` / `Apple Proximity`)→
60+
`likely the same device as BLE row <short-id>`。带 "likely"
61+
修饰是必需的,因为 hostname 模式匹配本身就有概率成分。
62+
63+
### 变更
64+
- `WifiDetailScreen.__init__``BonjourDetailScreen.__init__`
65+
新增可选 kwargs(Wi-Fi 侧:`environment_monitor` / `event_ring`
66+
/ `latest_scan`;Bonjour 侧:`latest_mdns` / `latest_ble` /
67+
`latest_connection`),让 modal 能读到实时 session 状态。默认
68+
都是 `None`,对应段没传引用时整段省略。
69+
- `_section_txt`(Bonjour)改为 Decoded 在前 + Raw 在后。Decoded
70+
已经命中的键通过 `mdns_txt_decoders.decoded_keys()` 从 Raw 表
71+
中剔除。
72+
73+
### Spec
74+
三个能力做了 spec 变更:`wifi-detail-modal`
75+
`bonjour-detail-modal``mdns-scanning`。详见
76+
`openspec/changes/archive/2026-05-15-wifi-and-bonjour-detail-enrichment/`
77+
1178
## [1.0.10] — 2026-05-14
1279

1380
两个只在 curl 装的冻结 binary 里出现的 bug(`uv run diting` 都没有)。

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "diting"
3-
version = "1.0.10"
3+
version = "1.0.11"
44
description = "macOS terminal listening post for Wi-Fi, BLE, link health, and the RF environment — your Mac hears more than it tells you"
55
readme = "README.md"
66
license = "MIT"

uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)