Skip to content

TUI: saveResult.queue.test.ts hard-codes POSIX paths, so coverage:tui fails on Windows (not covered by #2748) #2810

Closed

Description

@Sonica-B

Which version line?

v2 — current (@modelcontextprotocol/inspector@latest)

Which client?

TUI

Inspector version

2.12.0 (v2/main at 72126af)

Node version

v24.14.0

Operating system (and browser, for the web client)

Windows 11 Home 10.0.26200 (PowerShell and Git Bash); npm 11.9.0 (CI pins 11.20.0)

Transport

Not applicable / never connected

MCP server under inspection

Not applicable. This is a unit-test failure; no server is involved.

Steps to reproduce

  1. On Windows 11 with Node 24: git clone --branch v2/main https://github.com/modelcontextprotocol/inspector.git, then cd inspector && npm ci
  2. cd clients/tui
  3. npx vitest run __tests__/saveResult.queue.test.ts (or npm run coverage:tui from the repo root)

Expected behavior

Both tests in saveResultToFile queueing (#2571) pass on every platform, because coverage:tui is a stage of npm run local:gate.

Actual behavior

2 of 2 tests fail. saveResultToFile resolves its target with node:path resolve(cwd, path), so with cwd = "/d" the mocked writeFile receives D:\d\a.json, but the test asserts the literal "/d/a.json":

  • starts each write only after the previous one has settled: AssertionError: expected [ 'D:\d\a.json' ] to deeply equal [ '/d/a.json' ]
  • a failed save does not hold up the ones queued after it: AssertionError: expected [] to have a length of 1 but got +0. This one is a consequence, not a second bug: the first test throws before it settles its mocked write, the module-scope saveQueue in src/utils/saveResult.ts stays blocked behind it, and writes is empty in the second test.

Full npm run coverage:tui on Windows: 1 failed file, 2 failed tests of 639. #2748 lists test:scripts, coverage:web and coverage:mcpdo as the Windows failures; this stage is not in it, and the gate chain aborts before reaching it.

Logs, errors, or screenshots

AssertionError: expected [ 'D:\d\a.json' ] to deeply equal [ '/d/a.json' ]
AssertionError: expected [] to have a length of 1 but got +0

Already prototyped a fix?

Prompt (reconstructed: the change was made interactively with Claude Code on my clone, not from one stored prompt; this prompt reproduces it):

In clients/tui/tests/saveResult.queue.test.ts the expected paths are POSIX literals ("/d/a.json", "/d/b.json", "/d/x.json", "/d/y.json") but saveResultToFile in clients/tui/src/utils/saveResult.ts builds its target with node:path resolve(cwd, path), so on Windows the mocked writeFile receives "D:\d\a.json" and both tests fail. Change only the test: import { resolve } from "node:path", add const inD = (name: string) => resolve("/d", name), and use inD("a.json") etc. in the four assertions. Do not change the source, do not skip on win32, do not mock node:path. Then run npx vitest run __tests__/saveResult.queue.test.ts and npm run check in clients/tui, and npm run coverage:tui from the root.

Verified: before, npm run coverage:tui on Windows 11 / Node 24.14 gave 2 failed of 639. After: 48 files, 640 tests pass; coverage S 97.51 / B 94.75 / F 97.68 / L 97.83; npm run check in clients/tui exits 0. On POSIX resolve("/d", "a.json") is "/d/a.json", so the assertions are unchanged there (I could not run Linux locally). The change is 12 insertions and 4 deletions in the one test file. For reference only, it is on my fork (I am not opening a PR, per CONTRIBUTING): v2/main...Sonica-B:inspector:v2/fix/tui-save-queue-test-windows-paths

AI disclosure (MCP AI_POLICY.md): this report and the fix were produced primarily with Claude Code running on my machine: the Windows test runs, the root-cause analysis, the 16-line test change, and the drafting of this issue.

Before you submit

  • I searched existing issues and this is not a duplicate.
  • This is not a security vulnerability report (those go through the private advisory process).

Activity

  1. added
    v2Issues and PRs for v2
    bugSomething isn't working
    on Oct 28, 2026
  2. cliffhall commented on Oct 28, 2026

    @cliffhall
    Member

    Triage: Priority Low (total 5)

    • Severity 2: a unit test hard-codes POSIX paths, so coverage:tui fails on Windows. The product is unaffected, but it blocks local:gate for Windows contributors.
    • Urgency 2: wanted eventually, and nothing is blocked on it.
    • Bonuses: +1 bug label.

    Related: #2748 (the other local:gate failures on Windows, in v2.14.0). This one is not covered there, so it is tracked separately. A maintainer may choose to schedule the two together.

    Board: #28, Status Incoming (awaiting maintainer review, so no milestone yet).

  3. modified the milestones: v2.14.0, v2.15.0 on Oct 28, 2026
  4. self-assigned this
    on Oct 29, 2026
  5. cliffhall commented on Oct 29, 2026

    @cliffhall
    Member

    Fixed by #2850, merged into v2/main; verified together with the rest of v2.14.0 in the rollup #2858.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingv2Issues and PRs for v2

Type

No type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions