Referenced by4
Labels4

Referencing ideas

IdeaStatusTagsSummaryKatz
analytical_rust_portin-progressPort ["../core-architecture.rq".analytical_package] to Rust: lexer, parser ( index path ), extractor, SQLite index, search, and export. `@reqlan/analytical` remains the published JS facade ( `createAnalysisRuntime` / `AnalysisApi` / Zustand host state ). Native work lives in a `crates/` Cargo workspace and ships as per-architecture binaries per [distribution.rust_binary_distribution]. The editor language server is [lsp_rust.language_server_rust]. This analytical port does not replace that process. Component plans: [rust_crate_layout], [lexer_rust], [parser_rust], [parser_align], [indexer.indexer_rust], [search_rust], [export_rust], [native_bridge], [cutover].0.243
cutoverdoneNative engine is required for CLI, MCP, and the extension IndexService path ( no `REQLAN_ANALYTICAL_ENGINE=js` escape hatch ). Order: golden parse / extract → headless CLI `analyse` / `search` / `export` → MCP → extension via platform VSIX ( host-matching napi `.node` required ). Shared [bases.base] `.reqlan` DB is schema v4 rusqlite; fixtures verify reopen compatibility. The default editor LSP is [lsp_rust.language_server_rust]. Langium remains only as the transitional `node` engine fallback and dual-parser oracle ( [parser_align] ).0.118
native_bridgein-progressThe Rust engine is the analytical core ( parse, index, search, export, typed queries, git-dates, overview coverage, barrel plan ) — not an optional addon. `@reqlan/analytical` is a typed napi facade ( specta `generated.ts` ) plus thin Node helpers ( `createBase`, path utils, `SqliteIndexStore` wrappers over typed napi ). It does not depend on Langium, `@reqlan/language`, or Zustand. Webview-only helpers ( search highlight, filter labels, file-treatment, context signals / model, graph physics ) live in the extension package. Interactive HTML JS stays in `crates/reqlan-export/assets`. Native owns: parse-for-index, persist, query, search, export execution, IndexService / WorkspaceIndex sync, and the index lifecycle FSM + status snapshot via `NativeWorkspaceIndex` + `NativeSqlDb`. The FSM ( `opening` / `syncing` / `ready` / `error` ), counts, in-memory sync progress / cancel, last error, file-index issues ( cap 500 ), and the document-update / workspace-change rings ( cap 50 ) live in `WorkspaceIndexRuntime`; TS reads them through `statusSnapshot()`. Durable diagnostics persist in `index-diagnostics.sqlite`. Consumers: [cli.cli_package] and MCP import `@reqlan/analytical/core` so they never load Langium; the extension host uses the per-target VSIX ( [distribution.vsix_export], [distribution.extension_host_target] ). The host-matching `.node` is required at runtime; there is no sql. js fallback.0.290
sqlite_artifact_lifecycledoneBase SQLite artifacts under `<base>/.reqlan/` ( [base_ownership] ) must not stay locked for the whole extension session. The host opens them only while work runs, then releases file handles so users can delete or replace the files. Aligns with [event_driven]: open and close are reactions to index or analysis events, not a permanent connection or a reconnect loop. Mediation: only [workspace_index] / [analysis_runtime] own SQLite connections. The extension adapter ( [editor_index_adapter] ) must not keep a second long-lived analysis runtime beside the index, and must not call native open without a matching dispose / release. Related: [index_sequencing], [idle_stale_check], [headless_consumers], [multi_base_environment].0.052

Reference labels

"../../../packages/analytical/test/open-analysis-api.test.ts:opens the native engine when the host .node is available", "../../packages/analytical/test/open-analysis-api.test.ts", ../../../packages/analytical/test/open-analysis-api.test.ts:opens the native engine when the host .node is available, ../../packages/analytical/test/open-analysis-api.test.ts