[PR #2336] [MERGED] fix(ci): run the Windows native lane with its process boundary fixture #5171

Closed
opened 2026-10-31 01:04:32 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/morluto/rea/pull/2336
Author: @Rinkia
Created: 10/12/2026
Status: ✅ Merged
Merged: 10/13/2026
Merged by: @morluto

Base: main ← Head: fix/ci-windows-boundary-fixture


📝 Commits (6)

  • e9ee263 fix(ci): run the Windows native lane with its process boundary fixture
  • 66e254c fix(ci): pass the process boundary fixture in the real Ghidra Windows lane
  • 613f190 chore(ci): merge upstream baseline fixes
  • 433c719 fix(process): report no remaining time after a provider deadline fires
  • abfa043 Merge branch 'main' of https://github.com/morluto/rea into fix/ci-windows-boundary-fixture
  • 4bcc54b Merge branch 'fix/ci-windows-boundary-fixture' of https://github.com/Rinkia/rea into fix/ci-windows-boundary-fixture

📊 Changes

5 files changed (+74 additions, -5 deletions)

View changed files

📝 .github/workflows/ci.yml (+25 -1)
📝 .github/workflows/real-ghidra-windows.yml (+21 -1)
📝 native/windows/README.md (+8 -3)
📝 src/process/ProviderDeadline.test.ts (+17 -0)
📝 src/process/ProviderDeadline.ts (+3 -0)

📄 Description

Problem

scripts/verify-windows-native.mjs takes the process boundary executable as process.argv[3] and gates a block of observations on it:

const boundaryFixture = process.argv[3];
if (boundaryFixture !== undefined) { ... }

CI runs the lane as npm run verify:windows-native, which passes no arguments, so that block — and the reparse scenario gated on the same argument earlier in the file — has never executed in CI. These are the observations that never ran:

observation what it covers
processes.breakawayDenied CREATE_BREAKAWAY_FROM_JOB is refused, so an owned child cannot leave the Job Object
processes.childOwnerNormalizedWithoutChangingCaller + callerToken the child's default owner is normalized while the caller's elevation, group membership, integrity level and default owner are unchanged (deepEqual before and after)
processes.windowsEnvironmentSemantics ordinal name sorting, last-duplicate-wins and preserved Unicode names in the child environment
controls.inPlaceAncestorReparseDenied converting an admitted ancestor directory into a reparse point in place is refused

They ran only for an operator who built the fixture by hand, and native/windows/README.md described it as "optional", so there was no signal that CI coverage depended on it.

Change

The fixture is an ordinary Windows executable that reports its own token, environment and breakaway results; it does not link the addon. So the job that already installs g++-mingw-w64-x86-64 to cross-build the artifact cross-builds the fixture too and uploads it, and the Windows job downloads it and passes its path — the same way windows-native-inspection-fixture already crosses that job boundary.

No observation, assertion, threshold or fixture source changes. The only behavioural difference is that four observations stop being silently skipped.

native/windows/README.md no longer calls the fixture optional, says plainly that the lane skips those observations without it, and keeps the manual invocation for local runs.

Validation

Windows 11 Pro 26100 x64, Node v24.16.0, on this branch:

  • actionlint 1.7.7 with -shellcheck= -pyflakes=, the pinned version and flags from the workflows job: clean.

  • Artifact and fixture cross-built from this branch with the documented lane (Linux + MinGW-w64 g++ 12 in a container, since this host has no C++ toolchain). npm run verify:windows-native:artifact → ok: true, SHA-256 1eecd8e6…01219e.

  • The lane run exactly as the workflow now invokes it:

    npm run verify:windows-native -- . <path>\process-boundary.exe
    

    → ok: true, 11 process observations and 20 filesystem controls all true, including the four above, which report true instead of being absent. Confirms the -- argument passthrough reaches process.argv[2]/[3] through npm on Windows.

  • npm run build:cached and node scripts/check-doc-facts.mjs: pass.

Not verified here: the GitHub-hosted runners themselves, so the artifact upload/download hop between the Linux and Windows jobs is exercised for the first time by this PR's own CI run. The uploaded executable loses its POSIX execute bit in transit, which does not matter on Windows, where .exe is launched by extension.

Independent of #2202 and based on current main; if that lands, its caller-affinity observation is picked up by this same wiring with no further change.

🤖 Generated with Claude Code


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/morluto/rea/pull/2336 **Author:** [@Rinkia](https://github.com/Rinkia) **Created:** 10/12/2026 **Status:** ✅ Merged **Merged:** 10/13/2026 **Merged by:** [@morluto](https://github.com/morluto) **Base:** `main` ← **Head:** `fix/ci-windows-boundary-fixture` --- ### 📝 Commits (6) - [`e9ee263`](https://github.com/morluto/rea/commit/e9ee26347c81447260ae28f7092a9607a15aabc2) fix(ci): run the Windows native lane with its process boundary fixture - [`66e254c`](https://github.com/morluto/rea/commit/66e254c1a634167ce0ac10c1e9013f3b621ba808) fix(ci): pass the process boundary fixture in the real Ghidra Windows lane - [`613f190`](https://github.com/morluto/rea/commit/613f190cc3b69949b449dab5a8bf2a4a3109932b) chore(ci): merge upstream baseline fixes - [`433c719`](https://github.com/morluto/rea/commit/433c7195d72f8dfe85c4bf038a9f8ce5fd052ec8) fix(process): report no remaining time after a provider deadline fires - [`abfa043`](https://github.com/morluto/rea/commit/abfa04336a7dcc1e125dafd91f3810c290667214) Merge branch 'main' of https://github.com/morluto/rea into fix/ci-windows-boundary-fixture - [`4bcc54b`](https://github.com/morluto/rea/commit/4bcc54bb34e2c677faba45daacd4d9c268d93ea9) Merge branch 'fix/ci-windows-boundary-fixture' of https://github.com/Rinkia/rea into fix/ci-windows-boundary-fixture ### 📊 Changes **5 files changed** (+74 additions, -5 deletions) <details> <summary>View changed files</summary> 📝 `.github/workflows/ci.yml` (+25 -1) 📝 `.github/workflows/real-ghidra-windows.yml` (+21 -1) 📝 `native/windows/README.md` (+8 -3) 📝 `src/process/ProviderDeadline.test.ts` (+17 -0) 📝 `src/process/ProviderDeadline.ts` (+3 -0) </details> ### 📄 Description ## Problem `scripts/verify-windows-native.mjs` takes the process boundary executable as `process.argv[3]` and gates a block of observations on it: ```js const boundaryFixture = process.argv[3]; if (boundaryFixture !== undefined) { ... } ``` CI runs the lane as `npm run verify:windows-native`, which passes no arguments, so that block — and the reparse scenario gated on the same argument earlier in the file — has never executed in CI. These are the observations that never ran: | observation | what it covers | | --- | --- | | `processes.breakawayDenied` | `CREATE_BREAKAWAY_FROM_JOB` is refused, so an owned child cannot leave the Job Object | | `processes.childOwnerNormalizedWithoutChangingCaller` + `callerToken` | the child's default owner is normalized while the caller's elevation, group membership, integrity level and default owner are unchanged (`deepEqual` before and after) | | `processes.windowsEnvironmentSemantics` | ordinal name sorting, last-duplicate-wins and preserved Unicode names in the child environment | | `controls.inPlaceAncestorReparseDenied` | converting an admitted ancestor directory into a reparse point in place is refused | They ran only for an operator who built the fixture by hand, and `native/windows/README.md` described it as "optional", so there was no signal that CI coverage depended on it. ## Change The fixture is an ordinary Windows executable that reports its own token, environment and breakaway results; it does not link the addon. So the job that already installs `g++-mingw-w64-x86-64` to cross-build the artifact cross-builds the fixture too and uploads it, and the Windows job downloads it and passes its path — the same way `windows-native-inspection-fixture` already crosses that job boundary. No observation, assertion, threshold or fixture source changes. The only behavioural difference is that four observations stop being silently skipped. `native/windows/README.md` no longer calls the fixture optional, says plainly that the lane skips those observations without it, and keeps the manual invocation for local runs. ## Validation Windows 11 Pro 26100 x64, Node v24.16.0, on this branch: - `actionlint 1.7.7` with `-shellcheck= -pyflakes=`, the pinned version and flags from the `workflows` job: clean. - Artifact and fixture cross-built from this branch with the documented lane (Linux + MinGW-w64 g++ 12 in a container, since this host has no C++ toolchain). `npm run verify:windows-native:artifact` → `ok: true`, SHA-256 `1eecd8e6…01219e`. - The lane run exactly as the workflow now invokes it: ``` npm run verify:windows-native -- . <path>\process-boundary.exe ``` → `ok: true`, 11 process observations and 20 filesystem controls all true, including the four above, which report `true` instead of being absent. Confirms the `--` argument passthrough reaches `process.argv[2]`/`[3]` through npm on Windows. - `npm run build:cached` and `node scripts/check-doc-facts.mjs`: pass. Not verified here: the GitHub-hosted runners themselves, so the artifact upload/download hop between the Linux and Windows jobs is exercised for the first time by this PR's own CI run. The uploaded executable loses its POSIX execute bit in transit, which does not matter on Windows, where `.exe` is launched by extension. Independent of #2202 and based on current `main`; if that lands, its caller-affinity observation is picked up by this same wiring with no further change. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
bsakaguchi 2026-10-31 01:04:32 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
morluto/rea#5171
No description provided.