Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
303 commits
Select commit Hold shift + click to select a range
574da29
Bind clipboard transfers to original connections and authority
JE-Chen Oct 20, 2026
59735f4
Release retained Qt clipboard fixture tracebacks
JE-Chen Oct 20, 2026
a5d9e8d
Stop implicit Wayland fallback after native authority refusal
JE-Chen Oct 20, 2026
3977e99
Retain native CI failure logs and Linux thread backtraces
JE-Chen Oct 20, 2026
990c073
Preserve native diagnostic argv and handled SIGINT
JE-Chen Oct 20, 2026
01d83ec
Break clipboard callback cycles while retaining queued ownership
JE-Chen Oct 20, 2026
946918f
Bound portal cancellation and release partial D-Bus connections
JE-Chen Oct 20, 2026
0e49883
Keep Diagnostics idle until an explicit run
JE-Chen Oct 20, 2026
1a7ad4c
Expose passive input and capture capabilities across automation surfaces
JE-Chen Oct 20, 2026
9bb3cb2
Stop CLI fallback after native pointer region refusal
JE-Chen Oct 20, 2026
3de9619
Preserve cancellation before later diagnostic checks
JE-Chen Oct 20, 2026
246a1d5
Add owner-bound cooperative task infrastructure
JE-Chen Oct 20, 2026
ea86459
Add cancellable diagnostics with owned tasks and scoped I/O
JE-Chen Oct 20, 2026
c26399e
Preserve bounded EI teardown evidence on dev
JE-Chen Oct 20, 2026
21b7cf9
Reject inconclusive live EI cleanup evidence
JE-Chen Oct 21, 2026
8c39a0f
docs: add the current code review record
JE-Chen Oct 22, 2026
e618bb5
docs: point the code review at the workspace standard
JE-Chen Oct 22, 2026
724ada9
P0: Unify agent command validation and executor dispatch
JE-Chen Oct 23, 2026
7f645be
Add managed agent task runtime with verified outcomes and shared serv…
JE-Chen Oct 23, 2026
b359cd8
Isolate native agent calls and retire owned input before transfer
JE-Chen Oct 23, 2026
5a10909
Add reviewable agent workflows with semantic read-back and file isola…
JE-Chen Oct 23, 2026
70e15b4
Gate agent desktop control on human inactivity and persist task budgets
JE-Chen Oct 23, 2026
8a29452
Add owner-reviewed receipts, task provenance and scoped cache retention
JE-Chen Oct 23, 2026
68d60a6
Persist preauthorized task triggers and atomically deduplicate delivery
JE-Chen Oct 23, 2026
24fe670
Persist crash input witnesses and preserve workspace applications dur…
JE-Chen Oct 23, 2026
6fbbb59
Record managed skills and require verified trials before version publ…
JE-Chen Oct 23, 2026
2cdd56f
Retain live origin ceilings across MCP sessions and nested worker dis…
JE-Chen Oct 23, 2026
05c03a9
Ground managed point actions in owned window observations
JE-Chen Oct 23, 2026
2b192de
Expose grounded task actions through scoped observation previews
JE-Chen Oct 23, 2026
31059b0
Require verified workflow progress and fresh completion evidence
JE-Chen Oct 23, 2026
bc4f638
Pause unsafe dialogs and fence native controls to their owned window
JE-Chen Oct 23, 2026
a6d144c
Persist target policy ceilings and restrict MCP session authority
JE-Chen Oct 23, 2026
1304bc3
Route legacy URL opening through je_web_runner
JE-Chen Oct 23, 2026
a7af7be
Add authorized MCP tool discovery without expanding schemas
JE-Chen Oct 23, 2026
227f3ae
Isolate MCP session tool availability and snapshot pages
JE-Chen Oct 23, 2026
4355eca
Preserve MCP worker authority and deliver tool-list notifications
JE-Chen Oct 23, 2026
1f9c79a
Bind managed browser targets to WebRunner
JE-Chen Oct 23, 2026
988bcbe
Compile reviewed browser forms and field transfers
JE-Chen Oct 23, 2026
11aa280
Require exact WebRunner readback compatibility
JE-Chen Oct 23, 2026
b8b8f85
Verify pinned browser completion through owned SDK reads
JE-Chen Oct 23, 2026
26bfea4
Bind rooted browser file transfers to WebRunner
JE-Chen Oct 23, 2026
61c0d87
Close runtime authority, export and budget races
JE-Chen Oct 23, 2026
e41c69f
Fence finite browser skills after context retirement
JE-Chen Oct 23, 2026
7540408
Fence desktop skill prefixes after scope retirement
JE-Chen Oct 23, 2026
2fff8c8
Add isolated browser helper dependency diagnostics
JE-Chen Oct 24, 2026
959ecde
fix(dag): preserve caller authority before remote dispatch
JE-Chen Oct 24, 2026
566c1c6
fix(agent): confirm input retirement before task success
JE-Chen Oct 24, 2026
a07ea56
feat(agent): coordinate managed tasks through scoped DAG nodes
JE-Chen Oct 24, 2026
4e74c6d
feat(agent): inspect accepted requests without resubmitting
JE-Chen Oct 24, 2026
cdb264e
feat(agent): inspect keyed DAG requests without scheduling effects
JE-Chen Oct 24, 2026
9074980
feat(agent): match reviewed specs against destination request digests
JE-Chen Oct 24, 2026
560056a
docs: preserve remaining agent delivery steps before pause
JE-Chen Oct 24, 2026
7492bee
feat(agent): quarantine remote effects after local writer retirement
JE-Chen Oct 24, 2026
a0e0b9d
feat(agent): bound ADB transport without daemon management or replay
JE-Chen Oct 24, 2026
d37b3ca
feat(agent): pin Android identity before finite command proposals
JE-Chen Oct 24, 2026
d250a55
feat(agent): bind Android proposals to native routing and keyguard ev…
JE-Chen Oct 24, 2026
fa6e60e
docs: preserve remaining automation steps before pausing
JE-Chen Oct 24, 2026
16bece9
feat(agent): distinguish Android pre-input refusal from possible effects
JE-Chen Oct 24, 2026
532afe1
feat(agent): gate owned remote SDK calls on ACK and settlement
JE-Chen Oct 24, 2026
ff50293
feat(agent): connect checked Android SDK dispatch to leased workers
JE-Chen Oct 24, 2026
43f3e9b
feat(agent): bind Android semantic readback to reviewed fresh observa…
JE-Chen Oct 24, 2026
85e1aea
Prevent partial screen observations from proving absent text
JE-Chen Oct 24, 2026
6baf92f
Create reviewed workflow successors without replaying source tasks
JE-Chen Oct 24, 2026
e959d9c
Replan external and local-model tasks through reviewed successors
JE-Chen Oct 24, 2026
e789643
Reauthorize reviewed successors within original scope ceilings
JE-Chen Oct 24, 2026
76522a2
Renew published skill authority through a fresh validated version
JE-Chen Oct 24, 2026
93e59cc
Renew trigger authority without replaying accepted events
JE-Chen Oct 24, 2026
9153dff
Bind managed DAG execution to durable graph and dispatch identities
JE-Chen Oct 24, 2026
a57e219
Require explicit whole-graph review before managed DAG continuation
JE-Chen Oct 24, 2026
3f56b66
Keep managed DAG coordination alive independently of client views
JE-Chen Oct 24, 2026
25638d2
Keep caller DAG transport and evidence bound to the source runtime
JE-Chen Oct 24, 2026
ac82221
Preserve original ownership and live caller authority for local DAG work
JE-Chen Oct 24, 2026
dffd362
Retain unresolved DAG evidence while pruning settled expired batches
JE-Chen Oct 24, 2026
21a5fa2
Preserve reviewed source ownership and live authority for recovery su…
JE-Chen Oct 24, 2026
c67e71c
Reduce Android focus guard overhead while preserving finite input checks
JE-Chen Oct 24, 2026
0412e7f
Add isolated read-only completion observation helpers
JE-Chen Oct 24, 2026
7c8ae62
Add reviewed read-only completion recovery tasks
JE-Chen Oct 24, 2026
2ca5845
Keep authenticated stop admission available during status polling
JE-Chen Oct 24, 2026
dcf1f48
Preserve original skill trials when adopting completion evidence
JE-Chen Oct 24, 2026
d8a4ac4
Record stopped workflows from verified completion evidence
JE-Chen Oct 24, 2026
c98960f
Verify complete recovery execution before publishing skills
JE-Chen Oct 25, 2026
c73e200
Allow reviewed DAG evidence without transferring task ownership
JE-Chen Oct 25, 2026
cd5b72d
Require explicit consent for read-only completion renewal
JE-Chen Oct 25, 2026
65fe652
Allow renewed completion evidence in explicit DAG handoffs
JE-Chen Oct 25, 2026
9e7b6e0
Keep task completion handoffs explicit across callers
JE-Chen Oct 25, 2026
635325d
docs(agent): detail retained browser completion integration
JE-Chen Oct 25, 2026
58c17e0
Preserve original browser context after input retirement
JE-Chen Oct 25, 2026
415b948
Define cross-host artifact and evidence handoff contracts
JE-Chen Oct 25, 2026
45a2c56
Validate immutable cross-host transfer data models
JE-Chen Oct 25, 2026
d1715ef
Bind private transfer reservations and owned cleanup
JE-Chen Oct 25, 2026
29506ae
Bind reviewed artifact snapshots to current source authority
JE-Chen Oct 25, 2026
55c0a84
Separate authenticated source peer reads from local delegation
JE-Chen Oct 25, 2026
3002984
feat(agent): bind routed source consent to durable live host authority
JE-Chen Oct 26, 2026
9686651
Add reviewed cross-host imports and live completion evidence
JE-Chen Oct 26, 2026
3cc488e
Bind task evidence retention to its owning database
JE-Chen Oct 26, 2026
714db30
Preserve USB Unicode diagnostics and document cache rollback
JE-Chen Oct 26, 2026
5d07b27
Record clean evidence and USB verification
JE-Chen Oct 27, 2026
cbd8548
Revalidate native input after owner acknowledgement
JE-Chen Oct 27, 2026
aa479b3
Add header-only Windows presence source
JE-Chen Oct 27, 2026
092c3f4
Add closed presence protocol and native security primitives
JE-Chen Oct 27, 2026
baeac27
Secure presence byte pipes and await owned process retirement
JE-Chen Oct 27, 2026
14a47b3
Share an owned presence source across bounded private brokers
JE-Chen Oct 27, 2026
d6aa3ea
Keep shared presence alive across individual caller cancellation
JE-Chen Oct 27, 2026
0b3d0ff
Fence input-helper presence with live bounded reader checks
JE-Chen Oct 27, 2026
d79db4f
Bind persistent presence to exact runtime and input lifetimes
JE-Chen Oct 27, 2026
52cfa38
Preserve managed operation identity and optional package imports
JE-Chen Oct 27, 2026
d55c9dc
Verify corrected Windows presence with complete regression evidence
JE-Chen Oct 27, 2026
26c1626
Reject altered import output before accepting publication
JE-Chen Oct 27, 2026
4498e51
Verify corrected import source and finite handoff delivery
JE-Chen Oct 28, 2026
7e0cd29
Retain Linux peer evidence without desktop authority
JE-Chen Oct 28, 2026
0249996
Record complete Linux peer regression evidence
JE-Chen Oct 28, 2026
a41fb78
Keep completed peer regression out of pending work
JE-Chen Oct 28, 2026
e854dc5
Own Linux packet lifetime and preserve uncertain cleanup
JE-Chen Oct 28, 2026
3cf62de
docs: record verified Linux transport full regression
JE-Chen Oct 28, 2026
1b58389
test: cover literal source links and missing export chunks
JE-Chen Oct 28, 2026
995c004
docs: record atomic Linux spawn prototype evidence
JE-Chen Oct 28, 2026
06dad94
Defer X11 resources until explicit desktop use
JE-Chen Oct 28, 2026
74379d6
docs: record native owner checks and full regression failures
JE-Chen Oct 28, 2026
fb6f55f
Defer public facade imports while preserving export contracts
JE-Chen Oct 28, 2026
84c2435
Record protected owner review and remaining authority work
JE-Chen Oct 28, 2026
df225c7
Record isolated native service issuer and its peer/lease evidence
JE-Chen Oct 28, 2026
672e8b9
Record the review response for the isolated native service issuer
JE-Chen Oct 29, 2026
9d9f7eb
Record nested capability delivery through the worker bootstrap pipe
JE-Chen Oct 29, 2026
d49468a
Let a channel close stop a waiting request and fence late replies
JE-Chen Oct 29, 2026
fc6b590
Add the Linux owner-service client behind the owned channel surface
JE-Chen Oct 29, 2026
3127c3b
Route the five helper consumers through one channel factory
JE-Chen Oct 29, 2026
f786b16
Record the owner-service relay, client, guardian and nested stages
JE-Chen Oct 29, 2026
500eefd
Signal a POSIX helper group only while its leader still holds the ID
JE-Chen Oct 29, 2026
0c1cd81
Report helper containment in runtime status
JE-Chen Oct 29, 2026
3d7bf70
Record the maintainer's owner-service decisions
JE-Chen Oct 29, 2026
01e289e
Record guardian connection handoff and the protected acceptance in WSL
JE-Chen Oct 29, 2026
4f0209b
Record sibling and nested protected acceptance
JE-Chen Oct 29, 2026
a7b20d7
Record revocation racing protected launches
JE-Chen Oct 29, 2026
6df5d64
Add the Linux owner service sources with their build and acceptance
JE-Chen Oct 29, 2026
004eecf
Ship the owner service manifest template under config
JE-Chen Oct 29, 2026
f69dcb1
Renew leases, roll over spent epochs and isolate payload accounts in …
JE-Chen Oct 29, 2026
26e110f
Bound each owner-service helper's processes and memory
JE-Chen Oct 29, 2026
3b139e2
Cap each account's share of owner-service connections
JE-Chen Oct 29, 2026
4c499d6
Trust the owner-service binding and endpoint only from root
JE-Chen Oct 29, 2026
5ac836c
Replay a lost START's ticket and pin nested children to the parent's …
JE-Chen Oct 29, 2026
c434deb
Check every ancestor of the guardian's state and cgroup paths
JE-Chen Oct 29, 2026
665aef5
Bound the owner service's drain and prove the guardian reclaims a dea…
JE-Chen Oct 29, 2026
4819cd8
Confine the owner service's identity calls with seccomp
JE-Chen Oct 29, 2026
efe0ed1
Keep idle connections from holding the owner service's epoch
JE-Chen Oct 29, 2026
9b452b8
Give each owner-service helper its own account and bound child leases…
JE-Chen Oct 29, 2026
d672c19
Cap the owner service's whole epoch and keep helper files private
JE-Chen Oct 29, 2026
b60947f
Remove what payload IDs left behind before reusing them
JE-Chen Oct 29, 2026
73e16b0
Run the package's native worker under the owner service
JE-Chen Oct 29, 2026
d4894dc
Let a spent owner-service epoch retire beside the next one
JE-Chen Oct 29, 2026
33c0d7e
Keep display helpers local and route only display-free helpers to the…
JE-Chen Oct 29, 2026
913b7e6
Fix the third review's owner-service findings
JE-Chen Oct 29, 2026
6f6fe62
Purge off the guardian's loop, four payload slices, and a remote help…
JE-Chen Oct 29, 2026
1f61488
Keep a stubborn leftover from stopping the owner service, and never w…
JE-Chen Oct 29, 2026
34a0dbb
Treat a revoke during a protected launch as cancellation, not an error
JE-Chen Oct 29, 2026
a77b7d4
Quarantine stubborn purge leftovers and route helpers to their epoch
JE-Chen Oct 30, 2026
aa18cd8
Recognise the purge quarantine by inode and retry starts from the mai…
JE-Chen Oct 30, 2026
3414a3f
Read every quarantine pass from the start and stop purges only on churn
JE-Chen Oct 30, 2026
45cd05c
Know purge directories by file handle and refuse io_uring
JE-Chen Oct 30, 2026
93470b0
Key the purge's directory identity and refuse passed-in io_uring rings
JE-Chen Oct 30, 2026
13996d8
Purge in a private mount namespace and walk btrfs subvolumes
JE-Chen Oct 30, 2026
123f690
Detach purge mounts by descriptor and refuse payload btrfs subvolumes
JE-Chen Oct 30, 2026
784b402
Read purge mount IDs without asking the filesystem
JE-Chen Oct 30, 2026
4186e45
Read purge mount IDs from fdinfo and kill stalled purge children
JE-Chen Oct 30, 2026
385abc4
Open purge entries without crossing mounts and back off stalled purges
JE-Chen Oct 30, 2026
b11a3b4
Re-detach mounts placed during the purge walk and purge mqueues directly
JE-Chen Oct 30, 2026
b9c69c7
Start helpers with no core dump and keep purges completing without mq…
JE-Chen Oct 30, 2026
3a5b8d6
Purge /var/crash by default and warn about unknown core_pattern handlers
JE-Chen Oct 30, 2026
baa3e42
Judge core_pattern handlers by path and log untrusted purge roots
JE-Chen Oct 30, 2026
04f78a8
Run the purge again for roots that exist but cannot be opened
JE-Chen Oct 30, 2026
8155b58
Anchor manifest purge roots and keep the trust verdict out of errno
JE-Chen Oct 30, 2026
b1c41d4
Anchor purge roots without the sticky exception and recheck at purge
JE-Chen Oct 30, 2026
cd6fea4
Judge manifest roots by what they resolve to and test the anchoring
JE-Chen Oct 30, 2026
b48d159
Record the clean owner-service review and its remaining notes
JE-Chen Oct 30, 2026
8e97dc1
Test the purge's fault paths and stall watch and close the load gaps
JE-Chen Oct 30, 2026
1c7d03e
Close the twenty-fourth review's notes on the stall watch and fixtures
JE-Chen Oct 30, 2026
1b616be
Reset SIGCHLD at guardian start and keep watching when poll fails
JE-Chen Oct 30, 2026
831f0d3
Test the poll fallback and the guardian's SIGCHLD reset
JE-Chen Oct 30, 2026
52fdac2
Give each owner epoch private temporary roots and accept the installe…
JE-Chen Oct 30, 2026
f3dbeb0
Keep host modes on epoch roots and make the acceptance prove its claims
JE-Chen Oct 30, 2026
74ac3c1
Compare epoch roots as mounted and keep the host's noexec on them
JE-Chen Oct 30, 2026
f1dee46
Follow linked paths when checking what epoch roots would hide
JE-Chen Oct 30, 2026
1691b6f
Let a policy run in a root and recheck only service paths per epoch
JE-Chen Oct 30, 2026
896d272
Catch working directories below a linked root again
JE-Chen Oct 30, 2026
dba5942
Resolve every prefix of a path before judging what a root hides
JE-Chen Oct 30, 2026
9b63dd0
Walk paths component by component when judging what a root hides
JE-Chen Oct 30, 2026
702d053
Refuse a climb out of a path not made yet
JE-Chen Oct 30, 2026
d631d8b
Compare tidied spellings of paths and roots
JE-Chen Oct 30, 2026
6bb7ab5
Describe the spelling gap as the root's and test it where it bites
JE-Chen Oct 30, 2026
ea446a6
Judge paths named by policy arguments and environment
JE-Chen Oct 30, 2026
af4c900
Judge relative names in policy arguments and environment
JE-Chen Oct 30, 2026
211ebbc
Treat search lists apart and leave program text alone
JE-Chen Oct 30, 2026
41e5352
Refuse a private root itself for anything a policy names
JE-Chen Oct 30, 2026
52ccbf0
Test the edges of the scratch-variable exception
JE-Chen Oct 30, 2026
12ed7c7
Record the clean forty-second review of the private epoch roots
JE-Chen Oct 30, 2026
67714a8
Record the maintainer's decisions on the WSL host and other platforms
JE-Chen Oct 30, 2026
ae0d0dc
Record the integration plan for the agent runtime branches
JE-Chen Oct 30, 2026
4792a0d
Reap native helpers and hash Android fixtures on macOS too
JE-Chen Oct 31, 2026
5e30b3e
Build the agent schema in one transaction and stop a racing resolve f…
JE-Chen Oct 31, 2026
649aab3
Give the Dev CI squares a 120-minute limit
JE-Chen Oct 31, 2026
81e8724
Cap the helper's retirement deadline and keep one failed fixture from…
JE-Chen Oct 31, 2026
a15088d
Wait for the service's own maintenance pass in two ownership tests
JE-Chen Oct 31, 2026
fe64936
Cap the transfer peer's remaining time at its thirty-second bound
JE-Chen Oct 31, 2026
e779af0
Move the macOS squares to macos-15 and give managed test tasks time t…
JE-Chen Nov 1, 2026
6faab85
Bind the HTTP servers without a reverse lookup of their own address
JE-Chen Nov 1, 2026
900707b
Widen the presence reader test's safety gate
JE-Chen Nov 1, 2026
5021754
Report each managed-task area's readiness passively
JE-Chen Nov 1, 2026
5641e3b
Add macOS and X11 physical-activity sources
JE-Chen Nov 1, 2026
0a32a25
Write the deployment and rollback plan for the agent runtime
JE-Chen Nov 1, 2026
8e1e836
Expose readiness through the versioned API namespace too
JE-Chen Nov 1, 2026
0bd06b4
Hold a task's first action until a fresh observation re-establishes i…
JE-Chen Nov 1, 2026
d559cfe
Audit the planner, executor and verifier boundaries against injected …
JE-Chen Nov 1, 2026
f351884
Start the Android device-side helper with its fence ledger
JE-Chen Nov 1, 2026
3b2d7d0
Count an injecting command as pending in a fence reply, and add the p…
JE-Chen Nov 1, 2026
8cbe2fa
Add the Android helper's instrumentation app
JE-Chen Nov 1, 2026
9115e84
Record the Android helper's second stage and the dispatch decision it…
JE-Chen Nov 1, 2026
1d6e3f0
Run the Linux presence broker, worker and server over the owned Linux…
JE-Chen Nov 1, 2026
f38053d
Carry the listener's pid namespace in the Linux endpoint
JE-Chen Nov 1, 2026
c0c02ea
Observe only the maintenance call's own writes in the receipt test
JE-Chen Nov 1, 2026
fe5d0b4
Accept either refusal when a revocation races the lease watch
JE-Chen Nov 1, 2026
7a7953e
fix(deps): patch the dependencies named in Dependabot security alerts
JE-Chen Nov 1, 2026
c1a8944
chore: merge dev into fix/dependabot-vulnerabilities
JE-Chen Nov 1, 2026
9f29979
Merge pull request #536 from Integration-Automation/fix/dependabot-vu…
JE-Chen Nov 1, 2026
538a230
Merge main into dev for the 1.1.0 release
JE-Chen Nov 1, 2026
d97e4dd
List only defined names in the MCP package's __all__
JE-Chen Nov 1, 2026
2353300
Re-measure architecture_explore.md after the MCP __all__ fix
JE-Chen Nov 1, 2026
a75468d
Retire a rotated token even when the save lands in the same clock tick
JE-Chen Nov 1, 2026
5319bf8
Let a lease release wait out a queued task's claim on the same target
JE-Chen Nov 1, 2026
5f9c4c6
Re-measure architecture_explore.md after the release and user-store f…
JE-Chen Nov 1, 2026
ea44558
Merge pull request #537 from Integration-Automation/chore/sync-main-i…
JE-Chen Nov 2, 2026
46a118b
Read the selected X11 backend through the lazy pointer proxy in the v…
JE-Chen Nov 2, 2026
db990da
Measure the portal's refusal through OeffisUnavailable's state
JE-Chen Nov 2, 2026
7ad6c25
Decode the observation preview without a format argument
JE-Chen Nov 2, 2026
e5cfed8
Skip the agent GUI tests when Qt cannot load, not only when it is absent
JE-Chen Nov 2, 2026
81ec261
Address the SonarCloud reliability and security findings on the release
JE-Chen Nov 2, 2026
736cd1b
Re-measure architecture_explore.md
JE-Chen Nov 2, 2026
c01876c
Retry the presence test's lease helper after a missed request deadline
JE-Chen Nov 2, 2026
3f6f5b2
Lock the Android helper's dependencies and write the lock files in CI
JE-Chen Nov 2, 2026
cc91337
Import the X11 wrapper by name in the backend checks
JE-Chen Nov 2, 2026
b10aece
Merge pull request #539 from Integration-Automation/fix/release-1.1.0…
JE-Chen Nov 2, 2026
04a9346
Commit the Android helper's dependency lock files
JE-Chen Nov 2, 2026
71496ba
Merge pull request #540 from Integration-Automation/chore/android-hel…
JE-Chen Nov 2, 2026
b75ddae
Skip every agent GUI test when Qt cannot load, not only when it is ab…
JE-Chen Nov 2, 2026
bf162b3
Allow a second status read before a 10 ms DAG wait budget runs out
JE-Chen Nov 2, 2026
da4f649
Wait for the panel's reconnect before checking its clipboard
JE-Chen Nov 2, 2026
36880c4
Split the DAG wait test's composite assertions
JE-Chen Nov 2, 2026
0cd1fdf
Give the grounding wall-deadline test room for a slow runner's setup
JE-Chen Nov 2, 2026
0ccadac
Merge pull request #541 from Integration-Automation/fix/container-qt-…
JE-Chen Nov 2, 2026
e070b5e
Merge pull request #542 from Integration-Automation/fix/dag-wait-time…
JE-Chen Nov 2, 2026
9d7aa68
Wait for the presence server to retire its source after a refused client
JE-Chen Nov 2, 2026
a1a71d0
Merge pull request #543 from Integration-Automation/fix/presence-serv…
JE-Chen Nov 2, 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
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/requirements/publish.in
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# What the two jobs that hold the PyPI token install: `publish` in stable.yml and `publish-dev` in dev.yml.
# Their version scripts (the inline bump in stable.yml, scripts/dev_release.py) use only the standard library.
# publish.txt is generated from this file:
# uv pip compile .github/requirements/publish.in --generate-hashes --python-version 3.12 --python-platform x86_64-manylinux_2_28 --only-binary :all: --exclude-newer 2026-09-24 -o .github/requirements/publish.txt
# uv pip compile .github/requirements/publish.in --generate-hashes --python-version 3.12 --python-platform x86_64-manylinux_2_28 --only-binary :all: --exclude-newer 2026-10-25 -o .github/requirements/publish.txt
# --python-version is the one both jobs set up. --exclude-newer leaves out the uploads of the last 7 days:
# move the date when regenerating.
build==1.6.1
Expand Down
18 changes: 9 additions & 9 deletions .github/requirements/publish.txt
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# This file was autogenerated by uv via the following command:
# uv pip compile .github/requirements/publish.in --generate-hashes --python-version 3.12 --python-platform x86_64-manylinux_2_28 --only-binary :all: --exclude-newer 2026-09-24 -o .github/requirements/publish.txt
# uv pip compile .github/requirements/publish.in --generate-hashes --python-version 3.12 --python-platform x86_64-manylinux_2_28 --only-binary :all: --exclude-newer 2026-10-25 -o .github/requirements/publish.txt
build==1.6.1 \
--hash=sha256:51cc11666391ab6f092070437ac747002ff46f3e4113a3622177ee6b488bfc53 \
--hash=sha256:ecd351a4be9d35a9eaaba244a7687143c9c7d4aea6ac964e7e7ddab20cbcf4e7
# via -r publish.in
certifi==2026.7.22 \
--hash=sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775 \
--hash=sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55
# via -r .github/requirements/publish.in
certifi==2026.10.23 \
--hash=sha256:a9895e6e2758b371e0545e321a3a8fd1fcfd9829ada8824a936dfb16aaaf36cd \
--hash=sha256:e9b54de76e530bb6cf0ccd036787103acb58fd42ba930ea8bf948ddbaa2f61d1
# via requests
cffi==2.1.1 \
--hash=sha256:046bfc24911b37851ee1b51aab8bffe713d89c68c6a057b09484ce9fd5f69b4e \
Expand Down Expand Up @@ -455,14 +455,14 @@ secretstorage==3.5.0 \
--hash=sha256:0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137 \
--hash=sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be
# via keyring
setuptools==84.0.0 \
--hash=sha256:51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670 \
--hash=sha256:f4695c21257f0d9b537ec2692c941d02ee143b7cc1276941349a546573b2ef73
setuptools==84.2.1 \
--hash=sha256:3ff8b3b5492a0aa66960f4419365a86b84e013070d4313e4d4a6894f5d64d6bc \
--hash=sha256:ca140b45d5325a9478f880e351484f62fef15f336462e449ca0c03c873d589c2
# via -r .github/requirements/publish.in
twine==7.0.0 \
--hash=sha256:85cdb29c518efef867360ae4acd4b0dfd61c8654a22fca08e6f8539f05022177 \
--hash=sha256:b854164df26db268af05f49aa5c0344b10e27a494343ff05b1e0bad3b135f5a7
# via -r publish.in
# via -r .github/requirements/publish.in
urllib3==2.8.0 \
--hash=sha256:0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3 \
--hash=sha256:63bf2ead4c879426ebf22ef2a781eeb4aa3b4ae798a0435506f8687fd5bb9b63
Expand Down
81 changes: 81 additions & 0 deletions .github/workflows/android-helper.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
name: Android device-side helper

# Builds and tests native/android_helper. Stage 1 is the fence ledger, a pure Kotlin
# state machine tested on the JVM; later stages add the instrumentation app and an
# emulator run. Nothing here holds a secret or publishes anything.

on:
push:
branches: ["dev", "main"]
paths:
- "native/android_helper/**"
- ".github/workflows/android-helper.yml"
pull_request:
branches: ["main"]
paths:
- "native/android_helper/**"
- ".github/workflows/android-helper.yml"
workflow_dispatch:

permissions:
contents: read

concurrency:
group: android-helper-${{ github.ref }}
cancel-in-progress: true

jobs:
fence-ledger:
runs-on: ubuntu-22.04
timeout-minutes: 20
steps:
- uses: actions/checkout@v5
with:
persist-credentials: false

- name: Set up JDK 17
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "17"

- name: Set up Gradle
# nosemgrep: yaml.github-actions.security.third-party-action-not-pinned-to-commit-sha.third-party-action-not-pinned-to-commit-sha
uses: gradle/actions/setup-gradle@v4 # NOSONAR githubactions:S7637
with:
gradle-version: "8.11.1"

- name: Test the fence ledger on the JVM
run: gradle --no-daemon -p native/android_helper :core:test

instrumentation-app:
# The runner image ships the Android SDK (ANDROID_HOME); the debug APK is kept for the
# emulator stage. Building it proves the app compiles against the ledger and protocol.
runs-on: ubuntu-22.04
timeout-minutes: 30
steps:
- uses: actions/checkout@v5
with:
persist-credentials: false

- name: Set up JDK 17
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "17"

- name: Set up Gradle
# nosemgrep: yaml.github-actions.security.third-party-action-not-pinned-to-commit-sha.third-party-action-not-pinned-to-commit-sha
uses: gradle/actions/setup-gradle@v4 # NOSONAR githubactions:S7637
with:
gradle-version: "8.11.1"

- name: Build the instrumentation APK
run: gradle --no-daemon -p native/android_helper :app:assembleDebug

- name: Keep the APK for the emulator stage
uses: actions/upload-artifact@v6
with:
name: android-helper-debug-apk
path: native/android_helper/app/build/outputs/apk/debug/app-debug.apk
retention-days: 7
29 changes: 26 additions & 3 deletions .github/workflows/dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,17 @@ jobs:
# Windows runs both ends of the supported Python range. The full nine-way
# matrix runs on the pull request that takes dev to main.
runs-on: ${{ matrix.os }}
timeout-minutes: 30 # about 3x a square of the same suite in quality.yml
# Since the agent runtime landed, Windows squares take 43-48 minutes and Linux and macOS about 25
# (U-20261031-03), against the old limit of 30.
timeout-minutes: 120
strategy:
fail-fast: false
matrix:
include:
- { os: windows-2022, python-version: "3.10" }
- { os: windows-2022, python-version: "3.14" }
- { os: ubuntu-22.04, python-version: "3.14" }
- { os: macos-14, python-version: "3.10" }
- { os: macos-15, python-version: "3.10" }
steps:
- uses: actions/checkout@v5
with:
Expand All @@ -51,7 +53,7 @@ jobs:
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
xvfb xauth x11-utils \
xvfb xauth x11-utils gdb \
libgl1 libegl1 libglib2.0-0 \
libxkbcommon-x11-0 libdbus-1-3 \
libxcb-cursor0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 \
Expand Down Expand Up @@ -82,12 +84,33 @@ jobs:
# No path argument: the paths come from `testpaths` in pyproject.toml,
# and an argument would drop the flow_control tests. Linux runs under a
# real Xvfb because the X11 backend opens a display at import time.
- name: Verify native diagnostics runner (Linux)
if: runner.os == 'Linux'
shell: bash
run: >-
xvfb-run -a -s "-screen 0 1280x800x24"
python scripts/ci_native_diagnostics.py
--artifact-dir "${{ runner.temp }}/autocontrol-native/preflight" --
python -m pytest -v --tb=short --timeout=30
test/unit_test/headless/test_ci_native_diagnostics.py

- name: Run headless pytest suite
shell: bash
run: >-
${{ runner.os == 'Linux' && 'xvfb-run -a -s "-screen 0 1280x800x24"' || '' }}
python scripts/ci_native_diagnostics.py
--artifact-dir "${{ runner.temp }}/autocontrol-native"
${{ runner.os == 'Linux' && '--native' || '' }} --
python -m pytest -v --tb=short --timeout=120

- name: Retain native test diagnostics
if: always()
uses: actions/upload-artifact@v6
with:
name: native-${{ matrix.os }}-${{ matrix.python-version }}
path: ${{ runner.temp }}/autocontrol-native
retention-days: 7

publish-dev:
# A push to dev that passes the tests is built from dev.toml and uploaded
# when it is still the tip of dev and ships something the newest
Expand Down
90 changes: 90 additions & 0 deletions .github/workflows/ei-lifecycle.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
name: AutoControl EI lifecycle evidence

on:
push:
branches: ["dev"]
paths:
- "je_auto_control/linux_wayland/**"
- "docker/Dockerfile.eis"
- "docker/libei_verify.py"
- "docker/eis_verify.py"
- "docker/eis_server.py"
- "pyproject.toml"
- ".github/workflows/ei-lifecycle.yml"
- "test/unit_test/headless/test_ei_native_verification.py"
workflow_dispatch:

permissions:
contents: read

concurrency:
group: ei-lifecycle-${{ github.ref }}
cancel-in-progress: true

jobs:
ei-lifecycle:
runs-on: ubuntu-22.04
timeout-minutes: 30
steps:
- uses: actions/checkout@v5
with:
persist-credentials: false

- name: Prepare evidence directory
run: mkdir -p native-ei

- name: Set up Docker Buildx
# nosemgrep: yaml.github-actions.security.third-party-action-not-pinned-to-commit-sha.third-party-action-not-pinned-to-commit-sha
uses: docker/setup-buildx-action@v4 # NOSONAR githubactions:S7637

- name: Build the isolated EI image
id: build
# nosemgrep: yaml.github-actions.security.third-party-action-not-pinned-to-commit-sha.third-party-action-not-pinned-to-commit-sha
uses: docker/build-push-action@v7 # NOSONAR githubactions:S7637
with:
context: .
file: docker/Dockerfile.eis
tags: autocontrol-ei-lifecycle:ci
load: true
cache-from: type=gha,scope=ei-lifecycle
cache-to: type=gha,scope=ei-lifecycle,mode=max

- name: Record native versions
shell: bash
run: |
docker run --rm --entrypoint sh autocontrol-ei-lifecycle:ci \
-c 'python -VV && dpkg-query -W libei1 libeis1' 2>&1 | tee native-ei/versions.log

- name: Verify half-open teardown and native refusal
if: always() && steps.build.outcome == 'success'
timeout-minutes: 5
shell: bash
run: |
docker run --rm --name ac-libei-probe --stop-timeout 5 --entrypoint python \
autocontrol-ei-lifecycle:ci /opt/verify/libei_verify.py 2>&1 | tee native-ei/libei.log

- name: Verify the live EIS peer independently
if: always() && steps.build.outcome == 'success'
timeout-minutes: 5
shell: bash
run: |
docker run --rm --name ac-eis-peer --stop-timeout 5 --entrypoint python \
autocontrol-ei-lifecycle:ci /opt/verify/eis_verify.py 2>&1 | tee native-ei/eis.log

- name: Remove owned verification containers
if: always()
shell: bash
run: |
for name in ac-libei-probe ac-eis-peer; do
if docker container inspect "$name" >/dev/null 2>&1; then
docker rm -f "$name"
fi
done

- name: Retain native EI evidence
if: always()
uses: actions/upload-artifact@v4
with:
name: ei-lifecycle-${{ github.run_id }}-${{ github.run_attempt }}
path: native-ei/
retention-days: 14
10 changes: 7 additions & 3 deletions .github/workflows/platform-smoke.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
fail-fast: false
matrix:
# arm64 is not a rounding error on the desktop any more, and the
# dependency set is where it shows. macos-14 is already arm64;
# dependency set is where it shows. macos-15 is arm64;
# ubuntu-22.04-arm adds Linux, and windows-11-arm is back.
#
# windows-11-arm installs a smaller dependency set than every other
Expand All @@ -42,7 +42,7 @@ jobs:
# 'opencv-python>=4.8,<6' 'cryptography>=50.0.0'
#
# When both resolve, drop the markers from pyproject.toml.
os: [windows-2022, ubuntu-22.04, macos-14, ubuntu-22.04-arm, windows-11-arm]
os: [windows-2022, ubuntu-22.04, macos-15, ubuntu-22.04-arm, windows-11-arm]
python-version: ["3.10", "3.14"]
exclude:
# CPython's official Windows arm64 builds start at 3.11, so
Expand Down Expand Up @@ -163,7 +163,7 @@ jobs:
DISPLAY=:99 PYTHONPATH="$(pwd)" python3.11 test/verify/freebsd_verify.py
macos-capabilities:
name: What a real macOS runner permits
runs-on: macos-14
runs-on: macos-15

steps:
- uses: actions/checkout@v5
Expand Down Expand Up @@ -196,6 +196,10 @@ jobs:
# holds what was measured, and a capability appearing or disappearing
# turns this red and names which one.
#
# That measurement was on macos-14, which GitHub retires on 2026-11-02;
# the job moved to macos-15 with EXPECTED unchanged, so this gate is
# also what confirms the newer image grants the same.
#
# Three of the probes (the click-state read-back, the by-id lookup of a
# minimised window, and the point-based `grab_logical`) were measured on
# this runner on 2026-10-09 and are asserted since. The first two re-run
Expand Down
30 changes: 27 additions & 3 deletions .github/workflows/quality.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ jobs:
python-version: "3.12"
cache: "pip"

- name: Verify generated facade exports
run: python scripts/generate_facade_exports.py --check

- name: Install ruff
run: "pip install --only-binary :all: ruff==0.16.0"

Expand Down Expand Up @@ -78,8 +81,8 @@ jobs:
- { os: windows-2022, python-version: "3.14" }
- { os: ubuntu-22.04, python-version: "3.10" }
- { os: ubuntu-22.04, python-version: "3.14" }
- { os: macos-14, python-version: "3.10" }
- { os: macos-14, python-version: "3.14" }
- { os: macos-15, python-version: "3.10" }
- { os: macos-15, python-version: "3.14" }
steps:
- uses: actions/checkout@v5

Expand All @@ -99,7 +102,7 @@ jobs:
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
xvfb xauth x11-utils \
xvfb xauth x11-utils gdb \
libgl1 libegl1 libglib2.0-0 \
libxkbcommon-x11-0 libdbus-1-3 \
libxcb-cursor0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 \
Expand Down Expand Up @@ -149,6 +152,16 @@ jobs:
# scalar, which YAML reads as a mapping and refuses.
run: "pip install --only-binary :all: ruff==0.16.0 bandit==1.9.4 pytest==9.1.1 pytest-timeout==2.4.0 pytest-rerunfailures==16.7 coverage==7.15.4 PySide6==6.11.2 radon==6.0.1 fastapi==0.143.0 starlette==1.7.0 uvicorn==0.54.0 httpx==0.28.1"

- name: Verify native diagnostics runner (Linux)
if: runner.os == 'Linux'
shell: bash
run: >-
xvfb-run -a -s "-screen 0 1280x800x24"
python scripts/ci_native_diagnostics.py
--artifact-dir "${{ runner.temp }}/autocontrol-native/preflight" --
python -m pytest -v --tb=short --timeout=30
test/unit_test/headless/test_ci_native_diagnostics.py

# Paths come from `testpaths` in pyproject.toml. Do NOT pass an explicit
# path here: an argument overrides testpaths, which previously meant the
# flow_control tests were configured to run but silently never did.
Expand Down Expand Up @@ -184,6 +197,9 @@ jobs:
PYTHONFAULTHANDLER: "1"
run: >-
${{ runner.os == 'Linux' && 'xvfb-run -a -s "-screen 0 1280x800x24"' || '' }}
python scripts/ci_native_diagnostics.py
--artifact-dir "${{ runner.temp }}/autocontrol-native"
${{ runner.os == 'Linux' && '--native' || '' }} --
python -m coverage run -m pytest -v --tb=short --timeout=120

# XML before the floor check, so a square that fails the floor still
Expand All @@ -203,6 +219,14 @@ jobs:
name: coverage-${{ matrix.os }}-${{ matrix.python-version }}
path: coverage.xml

- name: Retain native test diagnostics
if: always()
uses: actions/upload-artifact@v6
with:
name: native-${{ matrix.os }}-${{ matrix.python-version }}
path: ${{ runner.temp }}/autocontrol-native
retention-days: 7

# The job id is still `typing-stable-api` because it is a required check and
# renaming it silently drops the requirement, but the scope is no longer the
# stable API alone: mypy now checks the whole package, minus the shrink-only
Expand Down
Loading
Loading