reqlanOverviewIdeasFilesCode filesClustersAttributesGraphPrint

Printable idea sheet

nonblocking_index

reqlan rq/indexer/indexer.rq:193

Katz 0.372

Index sync must stay non-blocking for the host UI ( notably activity_bar and workspace_loading ).
Editor startup is gated by first_paint_startup; discovering a base must not construct Langium services, which are initialized lazily on the first parse.
While syncing, surface progress — state, processed / total, and the current file — in workspace_pane and index_panel.
In-flight sync must be cancellable from those surfaces; cancel keeps already-indexed rows and returns the index to ready.
Incremental behaviour ( see also indexing_incrementality ):
- Single-file create / change / delete via watchers indexes only that file — never a full base walk.
- Soft full sync ( `syncWorkspace` / Refresh ) skips parse + persist when the file's mtime matches the value stored on the documents row.
- Hard refresh ( `clearAndRebuildIndex` / Clear & rebuild ) wipes the store and reindexes every file.
- Every sync and stale check applies `.rqignore` to the paths it receives, the same as the base walk; the native single-file index also drops an ignored path.
Thus base discovery cannot make the first sync index ignored files.
Implemented by workspace-index.ts; editor adapter index-service.ts.

status
done
tests
workspace-index.test.ts, workspace-index.ts, workspace-index.test.ts:soft sync drops rqignored paths supplied by base discovery, sync.rs:soft_sync_skips_unchanged_mtime, sync.rs:hard_rebuild_reindexes_despite_mtime

Interactive page: nonblocking_index