Skip to content

test: make registration-format and release-exposure suites pass on Windows - #10533

Open
Plastic-time wants to merge 2 commits into
morluto:mainfrom
Plastic-time:rrfz/windows-portable-registration-exposure-tests
Open

Plastic-time wants to merge 2 commits into
morluto:mainfrom
Plastic-time:rrfz/windows-portable-registration-exposure-tests

Conversation

@Plastic-time

@Plastic-time Plastic-time commented Nov 14, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Five source tests in two files failed on Windows for test-only reasons. They now pass there, and Linux and macOS run the same assertions as before.

Fixes #10532

Problem and expected behavior

src/application/McpClientRegistration.formats.test.ts:

  • "reports native Windows mode requests without claiming ACL verification" runs only on Windows, so CI never ran it. It read mcp.rea, but a new Fx profile is written under mcpServers (fxConfigurationServersKey). It failed with Cannot read properties of undefined (reading 'rea').
  • "secures fx permissions on owned directory and staged file" asserts verified_posix_modes. Windows reports requested_windows_modes, which the case above covers.
  • "retains the private directory close owner during a semantic no-op" injects a failure into the private-directory close. registerMcpClient skips securePrivateDirectory on win32, so nothing fails there.

src/artifacts/ReleaseExposureReader.test.ts:

  • "reports an oversized linker map as a debug companion" matched /bin\/app\.map$/. Windows reports ...\bin\app.map.
  • "leaves member coverage unknown when an unclassified packaged member cannot be read" expected join(root, "app.dll", "payload.bin"). The reader names a packaged member as ${hostFile}/${memberPath}, so Windows reports ...\app.dll/payload.bin.

Change and scope

  • The Windows Fx case reads mcpServers.rea.
  • The two POSIX-only Fx cases use it.runIf(process.platform !== "win32"), mirroring the existing it.runIf(process.platform === "win32") case. Their behavior does not exist on Windows.
  • The linker-map assertion accepts either separator. The packaged-member assertion uses the reader's own spelling, which is the same string on POSIX.
  • No source changes.

Contribution scope: ordinary test portability fix; maintainer scope decision not applicable.

Contract and boundary impact

  • Semantic owner and earliest changed stage: tests only.

  • Contribution scope fit and linked maintainer decision: not applicable.

  • CLI and MCP/tool-catalog contract: none.

  • Provider, bridge, target-format, or platform compatibility: Windows test portability.

  • Evidence, artifact, provenance, or reconstruction contract: none.

  • Target selection, authority, upstream behavior, and cleanup details: not applicable.

  • Generated metadata, package, or installation impact: none.

  • Documentation or usability only; no target interaction.

Evidence and regression coverage

  • Tests updated: the five cases above.
  • Base reproduction on Windows, main 55c9e8e: the two files give 6 failed / 283 passed / 10 skipped. With this change: 1 failed / 286 passed / 12 skipped.
  • The remaining failure, "keeps symlink traversal in a selected directory path", is EPERM from symlink because this Windows account cannot create symlinks. It is unchanged and not addressed here.
  • Remaining proof gaps: Linux and macOS were not run locally. The POSIX cases are unchanged except for being skipped on Windows, and the two path assertions produce the same strings on POSIX.

Validation performed

Windows 11 Home 10.0.26200 x64, Node 24.22.1, base 55c9e8e.

  • npx vitest run src/application/McpClientRegistration.formats.test.ts src/artifacts/ReleaseExposureReader.test.ts on main: 6 failed / 283 passed / 10 skipped; with this change: 1 failed / 286 passed / 12 skipped.
  • npm run check:fast: passed (typecheck, lint).
  • Merged main a6f98e7 in b53e052 (no conflicts; main did not touch these files) to rerun CI. The first run failed only in tests/boundary/mcp/contractPresentation.test.ts > "cleans up a child that ignores its deadline signal", a timing case this PR does not touch; main passed CI on the same base 55c9e8e. After the merge the two files still give 1 failed (the symlink EPERM) / 286 passed / 12 skipped, and check:fast passes.

Compatibility, safety, and release

  • Breaking changes or migration steps: none.
  • Real Hopper/Ghidra, browser, or OS coverage: Windows 11.
  • Package or release metadata impact: none.
  • Security, privacy, process, or containment review: test-only.

Author readiness

Human owner: @Plastic-time

  • I reviewed the final diff and relevant existing code, understand the change and its edge cases, and take responsibility for the complete PR, including AI-assisted work.
  • I checked the evidence above, confirmed it supports the current change, and recorded meaningful validation gaps.
  • I declare this PR ready for initial maintainer review.

Before merge

  • This PR addresses a concrete problem or an agreed enhancement.
  • Material scope and authority questions are resolved, and any required maintainer scope decision covers the final diff.
  • The PR has one focused outcome and the title follows type(scope): outcome.
  • Related issue is linked, or the reason for not linking one is stated above.
  • Tests cover changed observable behavior and meaningful failure paths.
  • Owning docs, contracts, and generated metadata are updated where needed.
  • User-visible CLI/MCP changes include representative output.
  • I checked the final diff for secrets, unrelated cleanup, and unsupported claims.

…ndows

The Windows-only Fx case still read mcp.rea, but a new Fx profile is written
under mcpServers. Two Fx cases assert POSIX modes or a private-directory
close that Windows never performs; they now run off Windows, beside the
existing Windows case. Two release-exposure assertions spelled paths with a
POSIX separator; one now accepts either separator and one uses the reader's
host-file/member spelling.
@Plastic-time
Plastic-time marked this pull request as ready for review November 14, 2026 12:23
@chatgpt-codex-connector

Copy link
Copy Markdown
Codex Review Summary: ❌ Failed

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ❌ Failed 2026-11-14T12:23:09.766662Z
We couldn’t complete this review. Comment @codex review to try again.
be4975d Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits.
Repo admins can enable using credits for code reviews in their settings.

@greptile-apps

greptile-apps Bot commented Nov 14, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerView in GreptileConfidence Score: 5/5

[Low impact] This test-only PR appears safe to merge.

Summary

Fixes five Windows test failures without changing production code.

  • Fx registration checks use the right paths for each platform.
  • Release exposure path checks now accept Windows separators.

No actionable issues found. Tests were not run during this review. Supersession could not be checked because GitHub access required authentication.

Reviews (4) · Last reviewed commit: "Merge remote-tracking branch 'origin/mai..." · Reviewed by Greptile

This branch has not been deployed

No deployments
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.

[Bug] Five registration-format and release-exposure tests fail on Windows

1 participant