Problem
IBuildGraphOptions.lspReadyTimeoutMs states that an undefined value keeps
waiting while a server reports progress. The Rust and C/C++ strict clients
silently replace undefined with a private 300,000 ms default instead.
Run 33377586947 shows the consequence on Redis. clangd-snapshot was making
measurable progress: the not-ready count fell from 126 translation units to 22.
At exactly 300,000 ms the client abandoned that compiler generation and
published the scip-clang fallback, which has no defensible edge family for C.
The outer measurement still had more than twenty minutes available.
RustGraphClient has the same constant and constructor substitution. The
generic LSP lane and the public option contract already distinguish an absent
deadline from an explicit finite one.
Consequence surface
Approach
Represent the readiness deadline as optional in both clients. An explicit
finite value keeps the current bounded behavior and clamped sleep. Undefined
continues through retryable not-ready responses until success, cancellation,
shutdown, or a non-retryable producer error. Do not fix the witness by raising
one corpus-specific constant.
Acceptance and verification
- Undefined readiness has no hidden wall-clock deadline in either strict
client and remains immediately abortable.
- Explicit deadlines still reject at their stated bound without an extra
backoff overshoot.
- Content movement resets backoff and not-ready progress does not send spurious
input-change notifications.
- Positive, explicit-timeout, undefined-retry-success, cancellation, movement,
and unrelated-error cases cover both clients.
- The Redis strict-intent index-time row waits for the progressing producer and
is served by clangd-snapshot, or reports a different primary-evidence
failure rather than the removed private ceiling.
- Focused Rust/C++ client tests, relevant real experiments,
pnpm build,
pnpm test, and pnpm coverage pass.
Coordination
Workflow and experiment callers may retain explicit outer budgets. This issue
does not waive #73's no-op/edit performance targets or turn an actual stalled
producer into success.
Problem
IBuildGraphOptions.lspReadyTimeoutMsstates that an undefined value keepswaiting while a server reports progress. The Rust and C/C++ strict clients
silently replace undefined with a private 300,000 ms default instead.
Run 33377586947 shows the consequence on Redis.
clangd-snapshotwas makingmeasurable progress: the not-ready count fell from 126 translation units to 22.
At exactly 300,000 ms the client abandoned that compiler generation and
published the
scip-clangfallback, which has no defensible edge family for C.The outer measurement still had more than twenty minutes available.
RustGraphClienthas the same constant and constructor substitution. Thegeneric LSP lane and the public option contract already distinguish an absent
deadline from an explicit finite one.
Consequence surface
Approach
Represent the readiness deadline as optional in both clients. An explicit
finite value keeps the current bounded behavior and clamped sleep. Undefined
continues through retryable not-ready responses until success, cancellation,
shutdown, or a non-retryable producer error. Do not fix the witness by raising
one corpus-specific constant.
Acceptance and verification
client and remains immediately abortable.
backoff overshoot.
input-change notifications.
and unrelated-error cases cover both clients.
is served by
clangd-snapshot, or reports a different primary-evidencefailure rather than the removed private ceiling.
pnpm build,pnpm test, andpnpm coveragepass.Coordination
Workflow and experiment callers may retain explicit outer budgets. This issue
does not waive #73's no-op/edit performance targets or turn an actual stalled
producer into success.