Skip to content

Expand CI test coverage - #331

Open
elprans wants to merge 9 commits into
mainfrom
elprans/fix-ci-workflow
Open

Expand CI test coverage#331
elprans wants to merge 9 commits into
mainfrom
elprans/fix-ci-workflow

Conversation

@elprans

@elprans elprans commented Aug 26, 2026

Copy link
Copy Markdown
Collaborator

Run lint and type checking once instead of repeating them across the
Python matrix, but expand tests and distribution builds to macOS
and Windows. Use poe directly instead of calling legacy scripts.

@elprans
elprans requested review from fantix and scotttrinh August 26, 2026 18:21
@elprans
elprans force-pushed the elprans/fix-ci-workflow branch from 96d9869 to bcbea12 Compare August 26, 2026 18:26

@scotttrinh scotttrinh left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Change looks good to me!

@socket-security

socket-security Bot commented Aug 26, 2026

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Updatedpypi/​ggt@​1.5.5 ⏵ 1.5.698 +1100100 +1100100

View full report

Run lint and type checking once instead of repeating them across the
Python matrix, but expand tests and distribution builds to macOS
and Windows.  Use `poe` directly instead of calling legacy scripts.

Fix harness portability (mainly by rewriting things from shell to
Python).
The test released the mocked resume after submitting the second thread,
but submission did not guarantee that the thread had joined the shared
condition. Slower Windows scheduling could therefore miss the intended
concurrent path.

Wait until the second acquisition is actually blocked on the condition
before releasing the resume.
Sandbox processes run on Linux, so host signal constants are not a
reliable description of the remote process API (because the host OS on
which the SDK runs might not be Linux).

Expose a portable Linux-derived `ProcessSignal` enum and use it for
built-in process operations.  Keep accepting `signal.Signals` for
compatibility while deprecating it in favor of the host-independent
enum.
Workflow code runs against a Linux runtime contract, but the in-process
determinism sandbox exposed Windows paths, platform identity, and clock
constants when tests ran on Windows.

Model the Linux contract explicitly to make workflow SDK portable.
Uvicorn's force_exit flag only skips its connection and task waits. On
Windows, the server loop can remain blocked after that flag is set, leaving
the session-scoped VQS fixture alive after every test has passed.

Run the embedded server inside an AnyIO cancellation scope and cancel the
actual serve task when bounded graceful shutdown expires. This lets the
server thread unwind and close its event loop deterministically.
Python 3.14 lazily imports struct while zipimport checks ZIP64 data.
On Windows, the ggt console launcher is present on sys.path and is
probed as a possible zip archive. Resolving struct through the sandbox
importer then re-enters the same launcher probe and exhausts the
recursion limit.

Seed struct into each sandbox module table so zipimport can finish
bootstrapping without recursively invoking the sandbox finder.
Textual waits for screen processing after each simulated key press. On a
saturated Windows runner that wait can outlast the application's 500 ms double-escape window, causing either the armed-state or exit
assertion to race the timer.

Use a generous timer in interaction tests while keeping the dedicated
short-timeout test responsible for verifying expiration.
Node writes the workflow CLI JSON stream as UTF-8, but text-mode
subprocesses otherwise use the host locale. Windows Python 3.10 chose
cp1252 and its reader threads failed on valid UTF-8 payload bytes.

Specify UTF-8 explicitly so CLI interop output is decoded consistently
on every CI host.
Frozen importlib can continue into meta-path finders even when a module
is present in the sandbox's dispatching module table. On Windows,
GGT's finder then probes its console launcher as a zip archive, whose
lazy struct import re-enters the same finder until recursion is
exhausted.

Return imports already satisfied by the sandbox table directly. Keep
normal importlib handling when a from-import still needs to resolve a
child module.
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.

2 participants