Skip to content

Commit 013a8b1

Browse files
committed
Document the cross-platform reliability hardening pass
Add a WHATS_NEW.md entry and CHANGELOG Fixed/Changed notes for the runtime audit fixes (Retina cursor, 3.14 relay hang, expect_poll/parallel robustness, localhost-default USB/IP, typed-exception boundaries), and a synced What's New summary in the English and zh-TW/zh-CN READMEs. Point the translated READMEs at the existing WHATS_NEW.md (the WHATS_NEW_zh-*.md links were dead).
1 parent 6546bc4 commit 013a8b1

5 files changed

Lines changed: 42 additions & 3 deletions

File tree

CHANGELOG.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,26 @@ only when documented here with a migration path.
1818
### Changed
1919

2020
- Releases are prepared from version tags and use PyPI Trusted Publishing.
21+
- The USB/IP server binds `127.0.0.1` by default (least-privilege). Exporting
22+
the attached device to the LAN now requires an explicit `host="0.0.0.0"`.
2123

2224
### Deprecated
2325

2426
- New integrations should avoid the eager, historical top-level import surface
2527
and import stable entry points from `je_auto_control.api`.
28+
29+
### Fixed
30+
31+
- macOS cursor position and omitted-coordinate clicks on Retina / HiDPI
32+
displays (pixel-vs-point display-height mismatch).
33+
- Remote-desktop relay hang on Linux + CPython 3.14 when one paired peer
34+
disconnected (a cross-thread `shutdown()` no longer wakes a blocked `recv()`).
35+
- `AC_expect_poll` crashing on a not-ready value instead of continuing to poll;
36+
`AC_parallel` branch variable-scope isolation; malformed `run_suite` specs now
37+
report a clean error instead of aborting.
38+
- Windows Interception backend send-to-window click silently no-opping.
39+
- Wayland partial-coordinate `mouse_scroll` raising instead of degrading.
40+
- Action-file save now raises `AutoControlJsonActionException` (not a raw
41+
`UnicodeEncodeError`) on non-encodable text; non-ASCII USB/IP busid no longer
42+
kills the client thread; SQLite connections are closed; USB ACL removal is
43+
case-insensitive.

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,9 @@
5757

5858
## What's New
5959

60-
All per-release notes have moved to **[WHATS_NEW.md](WHATS_NEW.md)**.
60+
**Latest (2026-07-18) — cross-platform reliability hardening.** A full-project runtime audit fixed execution-time defects across the macOS / Windows / Linux / Wayland backends, the executor, and the remote-desktop / USB stacks — correct Retina cursor math, a relay hang on CPython 3.14, `AC_expect_poll` / `AC_parallel` robustness, localhost-by-default USB/IP, and typed exceptions preserved at I/O boundaries — each covered by a headless regression test. No API changes.
61+
62+
All per-release notes are in **[WHATS_NEW.md](WHATS_NEW.md)**.
6163

6264
## Features
6365

README/README_zh-CN.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,9 @@
5656

5757
## 本次更新
5858

59-
所有各版本更新说明已移至 **[WHATS_NEW_zh-CN.md](WHATS_NEW_zh-CN.md)**
59+
**最新(2026-07-18)— 跨平台稳定性强化。** 一次全项目运行期审计修正了 macOS/Windows/Linux/Wayland 各后端、执行器,以及远程桌面/USB 堆栈的运行期缺陷——包含正确的 Retina 光标坐标运算、CPython 3.14 上的中继卡死、`AC_expect_poll``AC_parallel` 的健壮性、USB/IP 默认绑定本机,以及在 I/O 边界保留类型化异常——每项均有 headless 回归测试覆盖。无 API 变更。
60+
61+
各版本更新说明详见 **[WHATS_NEW.md](../WHATS_NEW.md)**
6062

6163
## 功能特性
6264

README/README_zh-TW.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,9 @@
5656

5757
## 本次更新
5858

59-
所有各版本更新說明已移至 **[WHATS_NEW_zh-TW.md](WHATS_NEW_zh-TW.md)**
59+
**最新(2026-07-18)— 跨平台穩定性強化。** 一次全專案執行期稽核修正了 macOS/Windows/Linux/Wayland 各後端、執行器,以及遠端桌面/USB 堆疊的執行期缺陷——包含正確的 Retina 游標座標運算、CPython 3.14 上的中繼卡死、`AC_expect_poll``AC_parallel` 的健全性、USB/IP 預設綁定本機,以及在 I/O 邊界保留型別化例外——每項皆有 headless 回歸測試涵蓋。無 API 變更。
60+
61+
各版本更新說明詳見 **[WHATS_NEW.md](../WHATS_NEW.md)**
6062

6163
## 功能特色
6264

WHATS_NEW.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,20 @@
11
# What's New — AutoControl
22

3+
## What's new (2026-07-18)
4+
5+
### Cross-Platform Reliability Hardening
6+
7+
A full-project runtime audit swept every platform backend and utility for execution-time defects and unexpected behaviour, adding a headless regression test for each fix. There are **no API changes** — existing scripts keep working, they just fail less and behave correctly in more places.
8+
9+
- **macOS (Retina / HiDPI)**: mouse-position reads and omitted-coordinate clicks now land at the correct point. The cursor y-flip used a *pixel*-based display height against a *point*-based cursor, offsetting every implicit click on a 2× display.
10+
- **Remote-desktop relay**: fixed a hang on **Linux + CPython 3.14** where a paired pipe never exited after one peer disconnected — a cross-thread `shutdown()` no longer reliably wakes a blocked `recv()` there, so the pump now polls readability with `select()` and always re-checks its stop flag.
11+
- **USB/IP server** now binds `127.0.0.1` by default (least-privilege); export the device to the LAN with an explicit `host="0.0.0.0"`.
12+
- **Executor**: `AC_expect_poll` no longer crashes on a not-ready value (missing result key or a transiently-failing action) and keeps polling; `AC_parallel` branches are properly variable-scope-isolated, so a nested `AC_execute_action` can't race on the parent's scope; a malformed `run_suite` spec reports a clean error instead of aborting the run.
13+
- **Windows Interception backend**: send-to-window click now performs a real press/release instead of silently no-opping on the button tuple.
14+
- **Wayland**: a partial-coordinate `mouse_scroll` degrades gracefully instead of raising `NotImplementedError`.
15+
- **Typed exceptions preserved at boundaries**: saving an action file with non-encodable text raises `AutoControlJsonActionException` (not a raw `UnicodeEncodeError`); a non-ASCII USB/IP busid no longer kills the client worker thread; SQLite data-source / query connections are always closed; USB ACL rule removal is case-insensitive to match the (case-insensitive) rule matching.
16+
- Builds on the round-3 sweep that reparented the exception family under `AutoControlException` (assertions still propagate under `raise_on_error=False`) and hardened thread-safety across the socket server, scheduler, triggers, and MCP server.
17+
318
## What's new (2026-07-03)
419

520
### Stable API, Failure Bundles, and Release Engineering

0 commit comments

Comments
 (0)