[P2] Windows interop-only System.String hover can exceed the unchanged request deadline

Open
#3,494 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
35/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Active
Tech stack
csharp, node.js, typescript

Research direction

Start with the retained CI editor-contract artifact and scripts/test-analysis-snapshots.mjs; compare the interop-only hover request path with the successful local replay logs under artifacts/p3-checker/final-f9-ci/. If the timeout recurs, collect wire traffic, per-request server phase timings, and process stacks to determine whether metadata or diagnostics block the request or it is dispatched without a response. Done means the cause is supported by adequate evidence while preserving the existing 20-second guard and assertions.

Written by the indexing model from the issue text.

Description

Windows editor-contract CI encountered one unexplained interop-only hover timeout. The cause has not been established; no source fix or deadline change is claimed.

Observed on PR #3487 head f9d85818835fd5b341749db1e2a9d208e984f1b2, CI run 41808128148, Windows editor-contract job 126501449355. The GitHub PR merge checkout was a758523ac5d892f31bb28fb227647dc5946fe68b. Host: windows-2025, Node 22.23.2, .NET runtime 10.0.14 / SDK10.0.403.

scripts/test-analysis-snapshots.mjs completed its full-language phase, then created a fresh --language-features interop-only server. Initialize succeeded. It sent didOpen for:

@DotNetType("System.String")
declare class NetString {}

The immediately following textDocument/hover at line0, character4 reached the unchanged 20,000ms client timeout with empty server stderr. The entire fixture ran 29.31seconds (09:36:21.363 to09:36:50.674 UTC); the finally shutdown did not add another20second timeout. The client does not send cancellation on timeout. Later semantic-hover, completion, signature, reference/rename, formatting and packaged-server suites passed in the same job.

Investigation:

  • Source tracing covers didOpen/document capture, hover routing, request guard, shared metadata provider, loader snapshot locking and XML-doc sidecar reads. This interop route does not use semantic-hover analysis. No deadlock, dropped response, or slow operation has been reproduced or established.
  • Three bounded fresh-process replays of the unchanged original fixture passed locally, with its20second timeout unchanged: interop hover553.85,516.56,569.32ms. No further repetition was performed.
  • These replays used the retained same-checkout packaged LSP, not the missing original raw failing DLL. Package DLL SHA256 18357cc829fec8512add2c757549b543f70b8e7e62083e7192d9a9e5b73bfffe, ProductVersion 0.0.0-alpha.0+a758523ac5d892f31bb28fb227647dc5946fe68b. Original fixture executed the raw build output before packaging; its byte identity cannot be proved from the retained artifacts.
  • A separate cold API probe of that packaged DLL measured metadata Capture113.3ms, System.String resolution2.38ms, XML summary218.45ms, RefreshGeneration3.22ms, complete generation0 with no project references. The reflection probe used PowerShell's .NET10.0.11, which differs from CI10.0.14. Local successful timings do not explain or invalidate the CI failure.

Evidence is retained in the original CI editor-contract artifact, including index/environment, empty analysis stdout, timeout stderr and generated workspace. The artifact does not include wire traffic, per-request server phase timing, raw failing DLL, or process stacks. Diagnostic local receipts are retained under artifacts/p3-checker/final-f9d-ci/ (analysis-request-probe.ndjson, three normal replay logs, cold-metadata-probe.json, original job log and downloaded artifact).

Follow-up: identify whether the request is blocked in metadata/diagnostics or dispatched without a response using adequate phase/wire/stack evidence if it recurs. Preserve the20second request guard, existing assertions, workload and CI budgets. No retry, suppression or deadline increase is a fix for this unresolved finding.

Dominant language
C#
Stars
156
Forks
4
Avg merge
15h 1m
Merged PRs (30d)
42

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from nickna/SharpTS

All issues in nickna/SharpTS

Similar issues

More C# issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.