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