Files
multica/.github/workflows
d18cec01c3 MUL-7415 ci: retire the standalone Cursor lifecycle job (#8465)
* MUL-7415 ci: retire the standalone Cursor lifecycle job

cursor-background-lifecycle ran a macos-latest and a windows-latest runner
on the runtime scope, i.e. on nearly every backend change, to cover one
integration's background shell. Neither leg needed to be its own job.

Windows: windows-execenv is already a windows-latest job on the same
runtime scope testing ./pkg/agent process-tree ownership. The Cursor
patterns move there as a step, so a backend PR spins up one Windows
runner instead of two. The ./internal/daemon watchdog command does not
come along: every test it selected is untagged except
cursor_uncaptured_watchdog_test.go, which is `linux || darwin` and never
built on Windows, so the ubuntu backend suite already runs all of them
under -race.

macOS: nothing else in this workflow runs Go on macOS, and
cursor_background_process_darwin.go is 208 lines of XNU identity
signalling whose two tests are `//go:build darwin`. Deleting outright
would leave it with no coverage anywhere, so it becomes macos-runtime,
gated on `full` — the daily cron and workflow_dispatch that #8451 added
for exactly this trade. Its single-count finalization step is dropped as
dead: `full` is now always true here, so the -count=5 stress pass that
was already the full-run variant is the only one left.

The backend gate tracks both moves; ci-scope's production gate test
parses ci.yml, so it verifies the new needs/if/scope wiring directly.

Co-authored-by: multica-agent <[email protected]>

* MUL-7415 test(agent): stop building the Cursor late-descendant test on Windows

TestCaptureCursorBackgroundLateDescendant failed twice in the last 43 main
pushes on windows-latest and zero times in 40 on ubuntu. The two Windows
failures reported different errors -- `Access is denied.` and `not an owned
descendant` -- from the same captureCursorBackgroundProcess call, which is
one race wearing two faces: cursorWindowsProcessParents snapshots every
PID->PPID pair on the machine, Windows keeps a child's recorded PPID after
the parent exits, and that PID is then free to be reused, so the ancestry
walk can reach a PID someone else now owns.

Narrowing the tag to `linux || darwin` keeps the Linux and Darwin arms,
which have never flaked and still cover the whole contract: a descendant
forked after capture is owned and terminated, the leader's death does not
orphan it, and an unrelated process is never signalled. Windows keeps
TestCaptureCursorBackgroundProcessRejectsForeignJob for Job membership.

This is deliberately a mute, not a fix. MUL-7417 carries the race itself
and restores the tag.

Co-authored-by: multica-agent <[email protected]>

* MUL-7415 ci: run the Windows Cursor step last in windows-execenv

Folding the Cursor job into windows-execenv means Cursor's failures now
truncate windows-execenv's own steps, which the separate job could never
do. Eight Windows-only checks -- bounded output collection, the Pi session
lock, the OpenClaw npm shim, junction resolution -- sat after it and would
be skipped by a single Cursor failure.

Moving the step behind `Build Windows CLI helper entrypoint` keeps the
one-runner saving while leaving the pre-existing coverage first in line.
Also adds the -timeout=5m this job's other test steps carry.

Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: J <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-09-16 01:13:55 +08:00
..