Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
87 commits
Select commit Hold shift + click to select a range
6a453d5
Serialise trigger-engine start/stop, keep a malformed email from stal…
JE-Chen Sep 24, 2026
436066d
Default implicit-SSL mail to 465, freeze the profiler at stop, accept…
JE-Chen Sep 24, 2026
1100f7a
Reject JWTs at their expiry second and in non-canonical base64url, ke…
JE-Chen Sep 24, 2026
9954b3f
Add AC_idempotency_release so scripts and MCP clients can free a key …
JE-Chen Sep 24, 2026
50d3f64
Restore the measured command and MCP-tool counts the rebase of AC_ide…
JE-Chen Sep 24, 2026
980068d
Assert what the poison-email fix guarantees, not how this CPython rel…
JE-Chen Sep 24, 2026
c1d96ac
Read each flow's own run history, keep XY-cut depth for column change…
JE-Chen Sep 24, 2026
3955029
Keep -or-later licences whole, require JSON booleans on the REST USB …
JE-Chen Sep 24, 2026
5bf29c1
Reject JSONPath quoted unions and decode escapes, order values per RF…
JE-Chen Sep 24, 2026
3df11b4
Count only the audit test's own file in its leak check, and build its…
JE-Chen Sep 24, 2026
efceedc
Follow RFC 6455 masking and control-frame limits, survive a malformed…
JE-Chen Sep 24, 2026
78b63c3
Answer every MCP request whatever its arguments, release a failed dra…
JE-Chen Sep 24, 2026
ecf3b8a
Open the second identical USB device by serial, refuse transfers agai…
JE-Chen Sep 24, 2026
0f8e6f0
Stamp screen frames at their real rate, mix host voice down to the pl…
JE-Chen Sep 24, 2026
f5b1880
Keep libei devices across a pause and release each reference once, si…
JE-Chen Sep 24, 2026
4cdc79f
Type evdev codes on uinput, release what X11 send-to-window pressed, …
JE-Chen Sep 24, 2026
aba5bf9
Import the audit tests' subjects by name instead of through importlib…
JE-Chen Sep 24, 2026
dd31197
Bring twenty-five errors that inherited only a builtin exception into…
JE-Chen Sep 24, 2026
8732b36
Call the media-key NSEvent selector by its real PyObjC name, and fix …
JE-Chen Sep 24, 2026
61be688
Free a failed file drop's block and refuse a non-window, survive zero…
JE-Chen Sep 24, 2026
08c029f
Read replay traces past Unicode line separators, require every frame …
JE-Chen Sep 24, 2026
d607229
docs: require README, translations and docs stay in sync in one commit
JE-Chen Sep 24, 2026
9379f25
Keep GUI thread workers alive until they run and deliver their result…
JE-Chen Sep 24, 2026
e7bcef9
Report remote action failures: REST /execute takes raise_on_error, an…
JE-Chen Sep 24, 2026
fa93d8f
Add commit-and-push-frequently rule to CLAUDE.md
JE-Chen Sep 24, 2026
230386b
Close the config-sync tombstone item: implemented in 37d0a4fc, record…
JE-Chen Sep 24, 2026
4db957a
Speak the GA computer toolset for models that accept nothing else, en…
JE-Chen Sep 24, 2026
6bb536d
Stop the LAN browse dialog's mDNS browser however it closes, and drop…
JE-Chen Sep 24, 2026
6137106
Keep GUI worker threads alive past the tab that started them and wind…
JE-Chen Sep 24, 2026
0c81737
Follow the specs at the edges of the protocol helpers: reject a non-s…
JE-Chen Sep 24, 2026
838bd06
Follow the specs in the data-format helpers: keep binary multipart fi…
JE-Chen Sep 24, 2026
949cd94
Let computer use and DAG runs be stopped: stop_event on AgentLoop, ru…
JE-Chen Sep 24, 2026
5697a40
Keep stores' data and secrets safe under contention and odd input: lo…
JE-Chen Sep 24, 2026
d9a2089
Follow the references in the text-format helpers: ICU apostrophe quot…
JE-Chen Sep 24, 2026
e85142d
Mark the worker-thread probe's subprocess argv as the literal it is, …
JE-Chen Sep 24, 2026
7ce535a
Fit computer-toolset screenshots into the high-resolution image tier …
JE-Chen Sep 24, 2026
b209a1a
Run GUI workers on daemon threads so exiting during a long step canno…
JE-Chen Sep 24, 2026
6ca6f23
Put the worker probe's argv on the subprocess call line so one Semgre…
JE-Chen Sep 24, 2026
933f879
Follow the references in the text helpers: split diffs at line feeds …
JE-Chen Sep 24, 2026
cc1ab0d
Follow the references in the image helpers: pixelmatch's anti-aliasin…
JE-Chen Sep 24, 2026
17c773a
Give the moved-element test boxes that overlap: observation_delta inh…
JE-Chen Sep 24, 2026
4e303d2
Fit computer-use screenshots into the model's image tier on the beta …
JE-Chen Sep 24, 2026
557bf00
Hold the security helpers at their edges: IDNA-encode egress hosts, s…
JE-Chen Sep 24, 2026
79430c8
Follow the supply-chain specs: require an OpenVEX action statement fo…
JE-Chen Sep 24, 2026
3570d71
Fit screenshots with the documented resize rule, and let AC_run_agent…
JE-Chen Sep 24, 2026
fc38cd3
Build the AWS-shaped key in the secrets-scan test at runtime, as the …
JE-Chen Sep 24, 2026
6888ccb
Negotiate only MCP protocol versions the server speaks, declare only …
JE-Chen Sep 24, 2026
9fa1d07
Hold the test-infrastructure and statistics helpers at their edges: r…
JE-Chen Sep 24, 2026
28c28f4
Drop unused imports from the tests and turn a lambda assignment into …
JE-Chen Sep 24, 2026
6f63823
Run the remote-desktop signaling and file-send workers on daemon thre…
JE-Chen Sep 24, 2026
16af27a
Hold the scripting, recording and locator helpers at their edges: res…
JE-Chen Sep 24, 2026
8a40df5
List block commands in the action JSON Schema and type parameters fro…
JE-Chen Sep 24, 2026
527d099
Remember transfers aborted before FILE_BEGIN registers them, so a vie…
JE-Chen Sep 24, 2026
5f56f49
Hold runtime flow at its edges: record runs with a failed action as e…
JE-Chen Sep 24, 2026
6991ac8
Answer servers' edge cases instead of dropping the connection: encode…
JE-Chen Sep 25, 2026
7bd87e3
Release GUI tab resources when the tab goes and show framework errors…
JE-Chen Sep 25, 2026
6bd55d5
Speak MCP 2025-11-25: negotiate it, describe the server in serverInfo…
JE-Chen Sep 25, 2026
67d7dc4
Split the September update log at 800 lines into 2026-09.md, -b and -…
JE-Chen Sep 25, 2026
42d203d
Import cleanly when warnings are errors by silencing defusedxml 0.7.1…
JE-Chen Sep 25, 2026
f0bdc52
Derive the MCP invalid-arguments signal from AutoControlException, as…
JE-Chen Sep 25, 2026
9bdd57c
Make generated tests fail with their actions and keep ${var} for the …
JE-Chen Sep 25, 2026
800898c
Refuse cmd syntax in AC_shell_to_var's batch arguments, end whole pro…
JE-Chen Sep 25, 2026
9bda678
Time the GUI exit probes from their last line instead of from interpr…
JE-Chen Sep 25, 2026
4745ff8
Contain a closed window's COMError in UIA reads, treat FindText's NUL…
JE-Chen Sep 25, 2026
cb06a04
Never run a tool call from a turn cut short, type agent tool schemas …
JE-Chen Sep 25, 2026
17f4b06
Skip the window-listener probe without qt_material and simulate the J…
JE-Chen Sep 25, 2026
72aa131
Mask secrets nested in action arguments, strip every credential heade…
JE-Chen Sep 25, 2026
a4dfac1
Type into a file dialog only when a window with its exact title is in…
JE-Chen Sep 25, 2026
8332a53
Read the OpenAI backend's first choice without indexing, which SonarC…
JE-Chen Sep 25, 2026
f437bcc
Answer in screen coordinates from match_theme, propose_elements and r…
JE-Chen Sep 25, 2026
6a37f65
Verify wss:// certificates and forward input in the Quick Connect pop…
JE-Chen Sep 25, 2026
3c3f54a
Clear Codacy's seven findings on PR #489: mark the subprocess rules t…
JE-Chen Sep 25, 2026
e889707
Validate and bound remote annotations, keep the app alive only while …
JE-Chen Sep 25, 2026
d8a8af9
Match the Script Builder's shown defaults and optionality to the exec…
JE-Chen Sep 25, 2026
18d8feb
Validate every numeric line edit in the C locale through one helper, …
JE-Chen Sep 25, 2026
afb31c9
Normalise dropped paths with Windows rules on every host, so a C:\ pa…
JE-Chen Sep 25, 2026
9eadfde
Serve the stateless MCP 2026-07-28 per request beside the initialize-…
JE-Chen Sep 25, 2026
c41e65d
docs: CLAUDE.md: look up SonarCloud/Codacy findings through their API…
JE-Chen Sep 25, 2026
50fdcf9
Narrow the log bridge's scope level with isinstance so mypy 2.3 accep…
JE-Chen Sep 25, 2026
6736e98
Keep a Windows-only absolute drop path as it is and make everything e…
JE-Chen Sep 25, 2026
66d7ef1
Cover every screen with its own region overlay and answer in native p…
JE-Chen Sep 25, 2026
4e645ef
Read and write Flow Editor files through the Script Builder's helpers…
JE-Chen Sep 25, 2026
83a5820
Keep the Flow Editor test's QApplication in a variable and release th…
JE-Chen Sep 25, 2026
7829d4e
Re-measure architecture_explore.md after the file-drop change, whose …
JE-Chen Sep 25, 2026
bc8e57b
Serve MCP 2026-07-28 over Streamable HTTP: a stateless POST must mirr…
JE-Chen Sep 25, 2026
9259997
Move the MCP server's subscription handlers into _subscriptions.py, b…
JE-Chen Sep 25, 2026
7a3eba0
Serve MCP 2026-07-28 subscriptions/listen over stdio and HTTP: acknow…
JE-Chen Sep 25, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
449 changes: 449 additions & 0 deletions CHANGELOG.md

Large diffs are not rendered by default.

6 changes: 4 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ The map is only useful while it matches the tree, so **update it in the same cha

### README stays current and in sync across all three languages

`README.md` (English, the source), `README/README_zh-CN.md`, and `README/README_zh-TW.md` MUST stay current with the code. Any user-facing change (a feature or API surface, an `AC_*` command, a CLI flag, a GUI tab, install / setup, configuration, an env var, a requirement, or a quoted count) updates `README.md` **and both translations in the same commit**, structure and content aligned. Never update one language and leave the others stale. `test/unit_test/headless/test_doc_counts.py` guards the quoted figures across all three (see above), but everything else — new sections, changed commands, reworded setup — is on you: read the diff against all three before committing.
`README.md` (English, the source), `README/README_zh-CN.md`, and `README/README_zh-TW.md` MUST stay current with the code. Any user-facing change (a feature or API surface, an `AC_*` command, a CLI flag, a GUI tab, install / setup, configuration, an env var, a requirement, or a quoted count) updates `README.md`, **both translations, and the user-facing docs under `docs/` (the Sphinx tree in `docs/source/` and reference docs such as `docs/API_LIFECYCLE.md` and `docs/CAPABILITY_MATRIX.md`), all in the same commit**, structure and content aligned. Each translation must reflect the English README's actual content, not merely share its headings. Never update one language, or `README.md` alone, and leave the other language or the docs stale. `test/unit_test/headless/test_doc_counts.py` guards the quoted figures across all three READMEs (see above), but everything else — new sections, changed commands, reworded setup, the docs — is on you: read the diff against all of them before committing.

### Outstanding work goes in `Progress.md`

Expand All @@ -109,7 +109,7 @@ Anything agreed but not done — deferred follow-ups, known gaps, half-delivered

### Project-specific rules

- **Exception hierarchy is flat by design** — every framework error derives from `AutoControlException` so containment boundaries (executor, background poll loops, request handlers, GUI slots) can catch the family in one `except`. Never add a sibling inheriting `Exception` directly; it silently escapes every boundary. Assertion failures (`AutoControlAssertionException`) must keep propagating through `raise_on_error=False`.
- **Exception hierarchy is flat by design** — every framework error derives from `AutoControlException` so containment boundaries (executor, background poll loops, request handlers, GUI slots) can catch the family in one `except`. Never add a sibling inheriting `Exception` directly, or only a builtin such as `RuntimeError` / `ValueError`; it silently escapes every boundary. To keep a builtin for existing callers, list both: `class XError(AutoControlException, RuntimeError)`. Assertion failures (`AutoControlAssertionException`) must keep propagating through `raise_on_error=False`.
- **Fail fast** — raise the specific typed exception at the point of failure; do not swallow errors.
- **Validate at boundaries** — user input, file content, network data, and JSON action commands. Reject unknown command names; `realpath` and bound user-supplied paths.
- **Least privilege** — servers bind `127.0.0.1` by default; `0.0.0.0` needs an explicit, documented opt-in.
Expand Down Expand Up @@ -172,6 +172,8 @@ Workspace rule shared by every repository under `D:\Codes` (full text: `D:\Codes
- **Commit at every stage.** A stage is the smallest piece of work that leaves the repository consistent and passes this project's checks (definition of done, tests, lint): one finished `Progress.md` item, or one self-contained step of a larger one. Commit it before starting the next stage, before switching to another repository, and before the session ends. Do not leave work uncommitted across sessions; if a stage cannot be finished, commit the consistent part and record the rest in `Progress.md`.
- Stage only the files that stage touched (`git add <path>`, never `git add -A`), follow this file's commit-message rules, and never add AI attribution.
- Committing is not pushing: push or open a PR only as this project's branch flow says or when asked.
- **Commit and push frequently.** After each big feature — a self-contained stage that passes this project's checks — commit and push to the remote; do not pile up a large batch of work before committing or pushing. Smaller batches collide less with other sessions, let CI catch problems earlier, and are easier to revert. Follow this project's normal branch flow (usually `dev`).
- **SonarCloud / Codacy findings.** When a PR or commit fails a SonarCloud or Codacy check, look the findings up through their APIs instead of guessing. The keys are in environment variables: `SonarCloudToken` (SonarCloud, e.g. `curl -s -u "$SonarCloudToken:" "https://sonarcloud.io/api/issues/search?componentKeys=<key>&pullRequest=<n>&resolved=false"`) and `CODACY_PROJECT_TOKEN` (a Codacy project token, valid only for its own project: any other repository answers "Bad credentials", so for a public repository query `https://app.codacy.com/api/v3/analysis/organizations/gh/<org>/repositories/<repo>/pull-requests/<n>/issues?status=new` without a key). **Never reveal a key or any personal credential while doing so**: refer to the variables by name only, never echo or print their values, and never put them in files, commit messages, PR or issue text, logs, or any output that leaves the machine.
- **`Progress.md`** (repository root, tracked) holds outstanding work only: no finished items, no history, no rules.
- **`docs/updates/`** records finished work: one batch file per month (`YYYY-MM.md`), one entry per piece of work headed `## U-YYYYMMDD-NN · date · title · #tags`, and an index with query commands in `docs/updates/README.md`. When a `Progress.md` item is done, delete it and add a `#done` entry plus its index row in the same commit.
- **`architecture.md`** (repository root) is the short architecture overview: layers, entry points, main flows, extension points, cross-project boundaries. Update it in the same commit whenever a change alters any of those. `architecture_explore.md` stays the detailed per-module map under its own rule in this file.
Expand Down
Loading
Loading