Nimblesite / Nimblesite/SharpLsp

Sidecar listener failure is invisible: exit 0, no stderr, error only in temp log

Open
#150 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

.NET bug cluster:sidecar-startup
Dominant language
TypeScript
Stars
132
Forks
5
Avg merge
6h 24m
Merged PRs (30d)
27

Description

Split out of #110 (its observability half — the transport half is fixed by the runtime named-pipe dispatch).

When IpcConnection.CreateListener fails, SidecarHost.RunAsync logs the error to the Serilog file sink only and returns; Program.cs/Program.fs then exit 0 with nothing on stdout/stderr (sidecars/SharpLsp.Sidecar.Common/SidecarHost.cs lines 44–49). The Rust host only ever sees sidecar exited before READY (src/sidecar/manager.rs wait_for_ready), which is exactly why #110 took multiple user log uploads to diagnose. Any residual bind failure (pipe-name squat, zombie instance, ACL denial) still reproduces that opaque symptom today.

Proposed:

  • Sidecar: on listener failure, write one fatal line to stderr (or FATAL:<reason> on stdout) and exit non-zero. CreateListener should also preserve exception type, not just ex.Message (IpcConnection.cs CreateListener).
  • Host: when the READY wait ends in EOF, reap and report the child's exit status and include the sidecar log path (e.g. %TEMP%/sharplsp-logs/sidecar-<name>.log) in the error.

Spec refs: [DIST-FAILURE-UX], [DIST-CI-WIN-TRANSPORT].

Contributor guide

No contributing guide indexed for this repository

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.

Research direction

Start with sidecars/SharpLsp.Sidecar.Common/SidecarHost.cs and IpcConnection.cs, then trace Program.cs/Program.fs and src/sidecar/manager.rs wait_for_ready. Reproduce a listener failure and observe the sidecar and host logs. Done means the sidecar reports the failure visibly with a non-zero exit, preserves the exception type, and the host reports the child status and sidecar log path.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp, rust
Domain
distributed-systems, observability
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.