Skip to content
Beskid Platform specification

Beskid

Jump to a Beskid service

Beskid

Jump to a Beskid service

Salsa database owns incremental analysis memoization

Platform spec ADR

Salsa database owns incremental analysis memoization

Spec standingStandard

Owner
Piotr Mikstacki
Submitter
Piotr Mikstacki

Within-run deduplication and ad-hoc JSON unit caches did not provide dependency-tracked invalidation. LSP and CLI paths recomputed assembly and typing independently; session caches could return stale assemblies after edits.

  1. beskid_queries::BeskidDatabase is the single incremental host for analysis memoization (Salsa 0.26 inputs + tracked queries + on-disk persistence under {project}/obj/beskid/cache/salsa/).
  2. CLI, LSP, and tests route prepare/assembly through beskid_queries entry points—CLI via process-scoped session in beskid_queries::session, LSP via workspace State.compilation_db, tests via local or session handles—no second analysis spine.
  3. Unit materialization during program assembly uses Salsa-backed unit queries (parse_and_expand_unit_tracked, unit_hir_tracked, unit_imports); legacy obj/beskid/cache/units/ JSON records are retired in favor of obj/beskid/cache/salsa/units/{content_fp}/ (see unit artifact cache schema).
  4. Pipeline observers emit salsa.query_hit, salsa.query_miss, salsa.revision_bump, salsa.artifact_disk_hit, and salsa.artifact_disk_miss counters for verification.
  • File text edits invalidate only affected units and dependents via import edges.
  • LSP didChange sets file_text inputs; diagnostics and IDE snapshots share the same database.
  • Mod-host invalidation keys (syntax_generation_id, manifest_generation_id, capability_set_id) map to Salsa inputs in beskid_queries::modhost.

Accepted — implemented in compiler/crates/beskid_queries/ and compiler/crates/beskid_artifacts/. Legacy units/ JSON cache is retired; disk persistence uses content-addressed salsa/units/ snapshots.