Skip to content

[Docs] The README documents two strict providers while the registry ships eleven #143

Description

@samchon

Outcome

Make public provider documentation mechanically agree with the shipped registry
and verified experiment catalog. Document every currently registered provider,
its installation/selection contract, exact authority and fact limits,
configuration/rebuild behavior, platform support, fallback, and measured
status. Prevent future registry/documentation drift in CI.

This issue changes documentation and its verification source; it does not claim
the future semantic completeness planned in #63/#72-#84.

Current master mismatch

GRAPH_PROVIDERS
contains 11 provider entries:

Provider Languages Authority Defensible edge families on current master
ttscgraph TypeScript compiler exports, calls, accesses, instantiates, type refs, extends, implements, overrides, renders
samchon-graph-go Go compiler contains, exports, imports, calls, accesses, instantiates, type refs, implements, dispatches, tests, references
samchon-graph-lua Lua analyzer references
rust-analyzer-scip Rust semantic index contains, references
scip-clang C, C++ semantic index none under current strict grounding
scip-java Java, Kotlin semantic index contains, references
scip-dotnet C# semantic index none under current strict grounding
scip-python Python semantic index references
scip-ruby Ruby semantic index none under current strict grounding
scip-dart Dart semantic index none under current strict grounding
scip-php PHP semantic index none under current strict grounding

Scala, Swift and Zig intentionally have no strict provider on current master.
Their registry placeholders were removed rather than advertising non-existent
or coverage-regressing programs.

The root README explains the registry and only documents TypeScript and Go,
then says the remaining languages use their listed language servers until
compiler-owned providers land. That sentence is false: nine additional strict
entries can be selected, with sharply different facts and requirements.

The install table also omits strict dependencies and overrides such as:

  • rust-analyzer plus scip, rustc and Cargo;
  • scip-clang, scip-java, scip-dotnet, scip-python, scip-ruby,
    scip_dart, scip-php;
  • the LuaLS-backed exporter;
  • SAMCHON_GRAPH_SCIP_*, toolchain and decoder overrides; and
  • platform limitations/decline reasons.

packages/graph/README.md is a build copy of the root, so npm publishes the
same mismatch.

Measurement truth that documentation must preserve

The exact current table is
tests/benchmark/results/graph.json,
produced by
run 30448033020.
It has 13 same-run strict/strict-off pairs.

Documentation must not:

  • call a faster zero-fact SCIP cell semantically complete;
  • infer warm/incremental behavior from a cold cell;
  • say Ruby or Dart “takes 30 minutes” as an eventual duration;
  • attribute the Ruby/Dart whole-cell timeout solely to scip-ruby/scip-dart;
  • claim Scala/Swift/Zig strict timing when none was measured; or
  • retain the old README timing table after PR Complete strict-provider evidence and indexing-time publication #147 superseded it.

For Ruby/Dart, say only that both end-to-end cells failed to finish before the
1,800-second guard. The separate request diagnosis covers strict-disabled LSP
fan-out, not isolated strict-producer time.

Decision: one support manifest, generated README block, parity test

Create a versioned maintainer-owned support manifest, for example
docs/provider-support.json, with one row per advertised provider:

provider, languages, availability/status, authority, facts,
tool/install source, resolution order, environment overrides,
required toolchain/build metadata, supported platforms,
cold/reuse/resident mode, limitations, decline/fallback,
experiment row, benchmark row, upstream and child-issue links

Do not make prose the sole source of machine-checkable provider names/facts.
Do not make runtime provider closures introspect documentation strings.
The manifest is a documentation source of truth whose registry-facing fields
are mechanically checked:

  1. import/inspect GRAPH_PROVIDERS;
  2. compare provider name, languages, authority and facts exactly;
  3. compare environment override names against provider resolver metadata or an
    explicit exported descriptor;
  4. compare experiment provider/tool/capability rows in
    tests/experiment/src/catalog.mjs;
  5. validate platform/install/benchmark links and unique rows; and
  6. reject both an undocumented registered provider and a documented absent
    provider.

Where resolver closures currently hide override/command metadata, refactor a
small immutable descriptor shared by resolver and support-manifest validation.
Do not duplicate magic environment names in three unrelated files.

Generate a delimited README support-matrix block from the manifest. Human
introduction, caveats and examples remain hand-written; the dense provider
matrix is reproducible. packages/graph/README.md remains generated/copied and
must not be hand-edited.

Required public structure

Product trust paragraph

Explain:

  • strict provider selection is per registered provider and can decline;
  • authority grades differ;
  • facts means a producer can defend that family, not universal completeness;
  • current dumps carry provider provenance, universe/manifest/content digests;
  • current MCP does not yet expose [Bulk index] Replace symbol-by-symbol LSP scans with compiler-owned snapshots #63's full per-generation coverage contract;
    and
  • generic LSP/static fallbacks remain valid but lower-authority.

Remove “the graph holds every symbol, call, type, decorator and test” unless the
statement is qualified by provider coverage.

Installation/selection table

For every language:

  • ordinary language server/static prerequisite;
  • strict producer and decoder/toolchain prerequisites;
  • local/global/project resolution order;
  • all supported environment overrides;
  • platform restrictions;
  • project preparation (compdb, Gradle/Maven, Composer, package config, etc.);
  • exact fallback/decline behavior.

Capability table

Show authority and exact current facts. Empty current fact lists must be visible,
not euphemized as “semantic index.” Separate “registered today” from “final
route tracked by #72-#84.”

Lifecycle/performance table

State actual current mode (full-rebuild, shard-reuse, semantic- incremental) only when a trace proves it. Link the exact experiment and
measurement. Separate preparation, native analysis, export/merge and resident
claims. Label engineering targets as targets.

Troubleshooting

For each provider, give the command/override, expected provenance name, common
decline reason and fallback. A user following the install table must be able to
tell whether the strict provider served the build.

Implementation map

  1. Add the support-manifest schema and current 11 rows from code/experiment
    evidence.
  2. Export/refactor only the provider descriptor fields required to verify
    commands/overrides; do not change runtime behavior.
  3. Add a renderer/check command and focused parity tests.
  4. Replace the README's two-provider/obsolete timing sections with a generated
    block plus concise explanatory prose.
  5. Run the package build/copy and prove packages/graph/README.md matches root.
  6. Add the check to CI so future registry changes must update documentation in
    the same pull request.

Acceptance

  • All 11 current provider entries and all advertised languages appear
    exactly once.
  • Registry name/languages/authority/facts equal the support manifest.
  • Install commands, decoder/toolchain requirements, environment overrides,
    preparation, platforms, mode, limitations and fallback are present.
  • Scala/Swift/Zig are clearly ordinary-only today with links to their open
    strict-provider issues.
  • The TypeScript/Go-only sentence and MCP completeness overclaim are removed
    or accurately qualified.
  • The current benchmark table comes from the exact PR Complete strict-provider evidence and indexing-time publication #147 artifact and
    describes Ruby/Dart timeout limits precisely.
  • Generated block verification catches rows missing on either side.
  • Root README is the edited public source; package README is reproduced by
    the canonical build/copy path.
  • Markdown tables/links render correctly in GitHub and npm.
  • Focused docs/parity tests, pnpm build, pnpm test, and pnpm coverage
    pass.

Coordination

Document current master immediately; do not wait for every #72-#84 provider.
When a child provider ships, its registry/experiment/support-manifest row and
README block update are one atomic change. #63's future structured coverage
fields extend the same manifest/table but do not block correcting today's
false claims.

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentation

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions