Skip to content

Release 1.1.0 - #538

Merged
JE-Chen merged 303 commits into
mainfrom
dev
Nov 2, 2026
Merged

JE-Chen merged 303 commits into
mainfrom
dev

Conversation

@JE-Chen

@JE-Chen JE-Chen commented Nov 2, 2026

Copy link
Copy Markdown
Member

Ships the development line as 1.1.0. pyproject.toml declares 1.1.0, and that version has no tag yet, so scripts/stable_release.py publishes it as written.

  • Integration: Merge main into dev for the 1.1.0 release #537 merged main back into dev. In each subsystem both lines re-implemented while beta, dev's version is kept. Everything else main added since 1.0 is kept too.
  • Release notes: CHANGELOG.md (1.1.0) lists every removed facade name, command, MCP tool and environment variable, and the behaviour that now follows the development line. The beta rule is in docs/API_LIFECYCLE.md.
  • Stable surface: je_auto_control.api keeps every 1.0 name.

Checks on #537: Codacy, SonarCloud, and the headless suite on Ubuntu 3.14, macOS 3.10, Windows 3.10 and Windows 3.14 all passed. This PR also runs the Quality workflow, which only runs against main: lint, bandit, both typing-contract jobs, the free-threaded scope job and the Sphinx docs build.

Record the reviewer, the review standard, and the hotspot findings for this tree.
Keep the 2026-10-22 clauses in place and name the shared standard used for later reviews.
@codacy-production

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.

…erifiers

Since the X11 resources are deferred, platform_wrapper.mouse is a proxy
object with no __name__, so the FreeBSD and X11 verifiers failed on a
backend they had in fact selected. They now ask the proxy's module which
backend it chose.
The informational classification step still caught main's
PortalConsentNotGranted, which the development line's oeffis does not
define, and the AttributeError ended the whole portal job.
PySide6 6.11.2 types loadFromData's format as bytes, 6.12.0 also accepts
str, and the runtime takes only str: no spelling satisfied both stubs in
the typing-extras job. The JPEG header identifies the image anyway.
The container image has PySide6 but no libEGL, so importing QtWidgets
fails; importorskip("PySide6") let these four modules error at
collection instead of skipping like the rest of the GUI tests.
- Fixture threads raise or record a mismatch instead of asserting inside
  the handler that forwards every failure to the parent test.
- The Android helper declares cleartext traffic off and shrinks its
  release build with R8, keeping the instrumentation it is started by.
- The workspace example's private value is no longer called a password.
- The loopback server base, the CI tooling's own path arguments, its
  0600 temp file and the seeded fixture generator are marked as reviewed,
  each with its reason.
A request is capped at 0.25 s, and on the Quality workflow's Ubuntu
runners the observer sometimes had not polled within it, so the helper's
first acquire raised 'deadline exhausted' and the test failed before
reaching what it checks. A timed-out request allocates no lease, so the
helper now retries it like a busy source, within five seconds.
SonarCloud flags the helper build because its dependency versions are not
pinned by a lock file. Every configuration is now locked; while no
gradle.lockfile exists Gradle resolves as before. A temporary step in the
instrumentation job writes the lock files with --write-locks and keeps them
as an artifact, so the real files can be committed and the step removed.
The checks resolved the wrapper module from the proxy's __module__ with
importlib, which static analysis reads as importing arbitrary code. The
wrapper is always _platform_linux, so it is imported directly and the proxy
is checked to be its _Mouse.
…-checks

Fix the checks the 1.1.0 release PR failed
Written by the android-helper workflow with --write-locks on the dev push
of b10aece, from the configurations the build actually resolves. The root
project only declares plugins and resolves nothing, so its lock file lists
no dependency. The temporary step that wrote them is removed, and the build
file says how to refresh them.
…per-gradle-locks

Commit the Android helper's dependency lock files
…sent

The container image has PySide6 but no libEGL, so QtWidgets fails to
import. These 13 modules guarded with importorskip("PySide6"), which
succeeds there, and their tests failed with ImportError instead of
skipping like the rest of the GUI suite.
With a 10 ms budget, the poll's wait can wake just before the deadline on
Windows' coarse timer and read the task status once more before the
timeout fires; the test required exactly one read and failed on the
release PR's Windows 3.13 runner. For the timeout case it now checks what
the waiter promises: submit first, one or more status reads, a pause last.
The viewer panel connects off the GUI thread, and its clipboard authority
is adopted when the connect answers. The reconnect case enqueued the new
viewer's clipboard after a single processEvents(), so on a slow runner
(the release PR's Windows 3.10) the connect had not answered yet and the
authorised clipboard was dropped. It now settles the connect first, as
the test's own _tab() helper does.
The test gave the task a 2 s wall budget and expects it to run out while
the helper's fourth observation sleeps. On the release PR's Windows 3.10
runner the helper start and the first observe/act alone took longer, so the
budget ran out during setup instead. The budget is now 6 s under a 20 s
action limit: enough for setup, and still spent during the 30 s sleep.
…skips

Skip the agent GUI tests when Qt cannot load
…out-test

Fix two timing-dependent tests the release PR hit on Windows
The server drops the accepted connection and then retires its source. The
test checked for the retirement as soon as the client saw the close, and
on the release PR's Windows 3.13 runner it had not landed yet. It now
waits up to five seconds for both the source close and the failed status.
…er-retire-wait

Wait for the presence server to retire its source after a refused client
@sonarqubecloud

sonarqubecloud Bot commented Nov 2, 2026 •

Copy link
Copy Markdown

@JE-Chen
JE-Chen merged commit 8ddb142 into main Nov 2, 2026
50 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant