samchon / samchon/compiler-knowledge-graph

[Strict readiness] Honor optional caller deadlines

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

Nobody has claimed this yet.

bug
Dominant language
TypeScript
Stars
6
Forks
3
PR merge metrics
No merged PRs in 30d

Description

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

  • Initial and resident Rust, C, C++, and mixed C/C++ strict-provider loads.
  • Explicit experiment deadlines and their exact error messages.
  • Abort, shutdown, content-movement retry, exponential backoff, and fallback.
  • Index-time strict-route selection and #72/#73 performance evidence.

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.

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 at IBuildGraphOptions.lspReadyTimeoutMs and the RustGraphClient, then locate the corresponding Rust and C/C++ strict-client readiness paths and focused tests. Run the readiness, cancellation, movement, and unrelated-error cases before checking the Redis strict-intent experiment. Done means undefined deadlines wait without a hidden ceiling, explicit deadlines retain their bound, and the listed build, test, coverage, and experiment checks pass.

Written by the indexing model from the issue text.

Assessment

Tech stack
c, cpp, rust, typescript
Domain
devtools, testing-qa, tooling
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.