Skip to content

Commit 129a0d6

Browse files
chenchaoyiclaude
andauthored
release: cut v1.0.0 — the "just diting" release (#39)
Bump pyproject.toml + uv.lock 0.9.0 → 1.0.0 and consolidate the two proposals archived since v0.9.0 into a single [1.0.0] — 2026-05-13 section in CHANGELOG.md and docs/zh/CHANGELOG.md. Major version jump because the install surface materially changes: - v0.9.0 required `git clone` + `uv sync` + `make helper` + Xcode CLT. Audience: Python developers willing to set up a build environment. - v1.0.0 ships a curl-bash one-liner that drops a self-contained binary plus the helper bundle in place. Audience: anyone with a Mac. Combined with the unified row-select + live detail modals (PR #35) across Wi-Fi / BLE / Bonjour, the TUI now has a coherent gesture model end-users can learn once and apply everywhere. Source-from-tree (`uv run diting`) developer flow is preserved exactly — both paths coexist on the same machine. This tag will be the first to trigger the release workflow added in PR #37. Watch the GitHub Actions run for `macos-14` + `macos-13` matrix builds and the `shasums` follow-up job; verify the resulting release assets satisfy install.sh end-to-end. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 03e29e0 commit 129a0d6

4 files changed

Lines changed: 160 additions & 2 deletions

File tree

CHANGELOG.md

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,93 @@ 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.0] — 2026-05-13
13+
14+
**The "just diting" release.** The install ceiling drops from "clone
15+
the repo, install uv, build the Swift helper, run uv sync" to a
16+
single curl-bash one-liner that ships a self-contained binary plus
17+
the helper bundle. End users no longer need Python, `uv`, or Xcode
18+
Command Line Tools on their machine. The TUI gets one last round of
19+
polish: a unified row-select gesture across all three list panels
20+
(Wi-Fi / BLE / Bonjour), each with its own detail modal that walks
21+
the list live as the user presses ↑ / ↓.
22+
23+
### Added
24+
- **One-line installer.** `curl -fsSL
25+
https://raw.githubusercontent.com/chenchaoyi/diting/main/install.sh
26+
| bash` detects arch (`darwin-arm64` / `darwin-x86_64`), pulls the
27+
matching tarball from the GitHub Release, verifies SHA256, extracts
28+
to `~/.local/share/diting/`, symlinks `~/.local/bin/diting`, copies
29+
the Swift helper to `~/Library/Application Support/diting/`, strips
30+
the quarantine xattr, and `open -g`s the helper once to prime TCC
31+
prompts. PATH-update hint for zsh / bash / fish printed when
32+
`~/.local/bin` isn't on PATH. `DITING_VERSION=vX.Y.Z` env var pins
33+
a specific release.
34+
- **PyInstaller release pipeline.** New GitHub Actions workflow
35+
(`.github/workflows/release.yml`) triggered by `v*` tag push;
36+
`macos-14` arm64 + `macos-13` x86_64 matrix builds the helper,
37+
freezes the Python interpreter + deps via PyInstaller, packages
38+
the tarball, and uploads to the GitHub Release. A follow-up job
39+
aggregates `SHASUMS256.txt` from both arch builds.
40+
- **Wi-Fi detail modal** (`i` / `Enter` / mouse-click on any scan
41+
row). Identity (SSID / BSSID / AP-name from `aps.yaml` / OUI
42+
vendor / "(associated)" annotation), Radio (channel / band /
43+
width / PHY / security), Signal (RSSI / noise / SNR), Beacon IE
44+
(BSS load, station count, 802.11r/k/v support — section omitted
45+
when all absent), Activity. BSSID redaction shows an actionable
46+
TCC hint instead of going silent.
47+
- **Bonjour detail modal** (same gesture on the mDNS panel).
48+
Identity (instance / service type / category via i18n / vendor),
49+
Network (host / port / IPv4 + IPv6 addresses listed separately),
50+
TXT records with auto-fold for values > 60 chars (`<N-byte
51+
payload>` placeholder + 16-byte hex preview so AirPlay receivers
52+
with 30+ keys don't blow out the modal), Activity.
53+
- **Live navigation inside any detail modal.** While a modal is
54+
open, ↑ / ↓ advance the underlying selection AND the modal body
55+
re-renders to track the new row. Walk a list of APs, BLE devices,
56+
or Bonjour services without close-and-reopen cycles. BLE modal
57+
also re-fetches per-device RSSI history so the sparkline updates.
58+
59+
### Changed
60+
- **Unified row-select gesture across all three list views.** The
61+
↑ / ↓ / `i` / `Enter` / mouse-click contract that BLE has had
62+
since v0.7 now applies to Wi-Fi and Bonjour too. Each panel's
63+
arrow-key action is view-gated so the same physical key is safe
64+
across views. Pin in `openspec/specs/tui-shell/spec.md` so future
65+
list panels inherit the contract by default.
66+
- **`find_helper()` search order gains a fifth candidate**:
67+
`~/Library/Application Support/diting/diting-tianer.app`, where
68+
the curl-bash installer drops the bundle. The in-repo dev build
69+
stays pinned first so contributors running `uv run diting` from
70+
a checkout always pick up their freshly-`make helper`ed bundle.
71+
- **README** leads with the one-liner; the existing clone + `uv
72+
sync` + `make helper` flow moves under "From source (for
73+
contributors)" — preserved exactly. Both paths coexist on the
74+
same machine.
75+
76+
### Fixed
77+
- **Wi-Fi selection collides cleanly under TCC-redacted scans.**
78+
When BSSID is `None` (Location Services denied), the selection
79+
key falls back to `f"{ssid}#{channel}"` so users without grants
80+
can still navigate the list. Documented collision behaviour for
81+
the same-SSID-on-same-channel edge case.
82+
- **Modal-close keys don't mutate selection.** `Esc` / `i` / `q`
83+
close any detail modal without clearing the panel highlight, so
84+
reopening returns to the same row.
85+
86+
### Bookkeeping
87+
- **`docs/RELEASE.md`** (+ `docs/zh/RELEASE.md` mirror) — maintainer
88+
runbook for cutting a release: version bump, tag, watch the
89+
workflow, manual smoke, GitHub Release notes, dispatch dry-runs,
90+
troubleshooting (PyInstaller hooks, Gatekeeper, future `macos-13`
91+
runner retirement).
92+
- **`docs/workflow.md`** (+ ZH mirror) notes that `uv run diting` is
93+
the developer path and the curl one-liner is the end-user path;
94+
both are first-class.
95+
- Canonical OpenSpec count: 17 → 20 (new `wifi-detail-modal`,
96+
`bonjour-detail-modal`, `installation`; modified `ble-detail-modal`,
97+
`tui-shell`, `macos-helper`).
98+
1299
## [0.9.0] — 2026-05-12
13100

14101
The **Bonjour release.** diting grows a third TUI panel — mDNS /

docs/zh/CHANGELOG.md

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

11+
## [1.0.0] — 2026-05-13
12+
13+
**「直接 diting 就能用」版**。安装门槛从「clone 仓库、装 uv、编 Swift
14+
helper、跑 uv sync」降到一行 curl-bash —— 装出来的是自包含二进制 +
15+
helper bundle,用户机器上不再需要 Python、`uv` 或 Xcode 命令行工具。
16+
TUI 这一版也补齐最后一块拼图:三块列表面板(Wi-Fi / BLE / Bonjour)
17+
共享同一套行选中手势,每块都有自己的详情 modal,按 ↑ / ↓ 时 modal 跟
18+
着光标走,不用关再开。
19+
20+
### 新增
21+
- **一行 installer**:`curl -fsSL
22+
https://raw.githubusercontent.com/chenchaoyi/diting/main/install.sh
23+
| bash`。识别架构(`darwin-arm64` / `darwin-x86_64`),从 GitHub
24+
Release 拉对应 tarball,校验 SHA256,解压到 `~/.local/share/diting/`
25+
symlink `~/.local/bin/diting`,把 Swift helper 拷贝到
26+
`~/Library/Application Support/diting/`,剥离 quarantine xattr,
27+
`open -g` 一次触发 TCC 授权弹窗。`~/.local/bin` 不在 PATH 时按
28+
zsh / bash / fish 打印对应的 PATH 更新提示。`DITING_VERSION=vX.Y.Z`
29+
环境变量锁版本。
30+
- **PyInstaller 发布流水线**。新 GitHub Actions workflow
31+
(`.github/workflows/release.yml`),`v*` tag 推送触发;`macos-14`
32+
arm64 + `macos-13` x86_64 matrix 构建 helper、用 PyInstaller 冻结
33+
Python 解释器 + 依赖、打 tarball、上传到 GitHub Release。后续 job
34+
把两边的 `.sha256` 汇总成 `SHASUMS256.txt`
35+
- **Wi-Fi 详情 modal**(在任意扫描行按 `i` / `Enter` 或鼠标点击)。
36+
身份段(SSID / BSSID / 来自 `aps.yaml` 的 AP 名 / OUI 厂商 /
37+
「当前连接」标注),射频段(信道 / 频段 / 带宽 / PHY / 加密),
38+
信号段(RSSI / 噪声 / SNR),Beacon IE 段(BSS 负载、终端数、
39+
802.11r/k/v 支持 —— 全部缺失时整段省略),活动段。BSSID 被 TCC
40+
屏蔽时给出可操作的提示,不再静默。
41+
- **Bonjour 详情 modal**(同一手势移植到 mDNS 面板)。身份段(实例 /
42+
服务类型 / i18n 类别 / 厂商),网络段(host / port / IPv4 + IPv6
43+
地址分行),TXT 记录段对 > 60 字符的值自动折叠(`<N-byte payload>`
44+
+ 前 16 字节 hex 预览,避免 30+ TXT key 的 AirPlay 接收器把 modal
45+
撑爆),活动段。
46+
- **任意详情 modal 内的实时导航**。modal 打开后按 ↑ / ↓ 既移动底下面
47+
板的选中,又重渲 modal 内容跟到新行。不用关再开就能扫一遍 AP / BLE
48+
设备 / Bonjour 服务。BLE modal 还会按设备拉一次 RSSI 历史,sparkline
49+
跟着切换。
50+
51+
### 变更
52+
- **三个列表视图统一行选中手势**。BLE 自 v0.7 起就有的 ↑ / ↓ / `i`
53+
/ `Enter` / 鼠标点击合约现在 Wi-Fi 与 Bonjour 也按。每个面板的方
54+
向键 action 都按视图门控,同一物理键在不同视图下安全。规则落到
55+
`openspec/specs/tui-shell/spec.md`,未来新加列表面板默认继承。
56+
- **`find_helper()` 搜索顺序增加第 5 个候选**:`~/Library/Application
57+
Support/diting/diting-tianer.app`,即 curl-bash installer 落地的位
58+
置。in-repo 开发构建仍排在最前,确保贡献者跑 `uv run diting` 永远
59+
拿到刚 `make helper` 出来的 bundle。
60+
- **README** 开头改成一行 installer;原 `git clone` + `uv sync` +
61+
`make helper` 流程移到「从源码安装(贡献者)」二级标题下,原封保
62+
留。两条路径同机共存。
63+
64+
### 修复
65+
- **TCC 屏蔽扫描时 Wi-Fi 选中健码退化无冲突**。BSSID 为 `None`
66+
选中键退化为 `f"{ssid}#{channel}"`,未授定位的用户仍可上下导航。
67+
同名 SSID 同信道的冲突边界条件已记录在 spec 里。
68+
- **关 modal 不动选中**`Esc` / `i` / `q` 关任意详情 modal 都不清
69+
除面板高亮,重新打开还回到同一行。
70+
71+
### 维护备注
72+
- **`docs/RELEASE.md`**(+ `docs/zh/RELEASE.md` 镜像)—— 发版 runbook:
73+
版本号 bump、打 tag、盯 workflow、人工冒烟、GitHub Release 文案、
74+
workflow_dispatch 干跑、排查(PyInstaller hooks / Gatekeeper /
75+
`macos-13` runner 终将退役)。
76+
- **`docs/workflow.md`**(+ 中文镜像)说明 `uv run diting` 是开发者路
77+
径、curl 一行是用户路径,两者都属于一等公民。
78+
- OpenSpec 规范条数:17 → 20(新增 `wifi-detail-modal`
79+
`bonjour-detail-modal``installation`;修改 `ble-detail-modal`
80+
`tui-shell``macos-helper`)。
81+
1182
## [0.9.0] — 2026-05-12
1283

1384
**「Bonjour 版」**。TUI 第三块面板从「Wi-Fi / BLE 二选」扩展为

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 = "0.9.0"
3+
version = "1.0.0"
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)