Members

IdeaFileStatusSummaryKatz
git_based_historyreqlan rq/extension/index-host/git-codelens.rqthere should be a code lens button for viewing an idea history through git. Should accept close matches and likeley file moves should consume the same state as the [context_scope] Dates come from indexed [git_idea_timeline_analysis] state filled by [git_dates_background_indexing].0.045
git_date_inlayhintsreqlan rq/extension/index-host/git-codelens.rqShould show references and date created per [git_based_history]. Creation dates must come from already-indexed git dates via [git_dates_background_indexing], not a synchronous git walk on inlay render.0.040
git_dates_background_indexingreqlan rq/extension/index-host/git-codelens.rqdoneHost wiring for [git_idea_timeline_analysis] / [indexer.git_dates]: after the ideas index is ready ( and when the catalog updates ), missing idea git dates must be filled by a mostly silent background process: - small batches - yields between batches so the extension host stays interactive - no progress UI / no blocking of Activity Bar context load or Timeline tab open - session-scoped attempted set so failed lookups are not hammered repeatedly - queue priority: ideas in the active `.rq` editor file are attempted before the global backlog; switching the active editor re-prioritises ( in-flight wave may stop and reschedule ) - catalog / save scheduling follows [git_dates_rate_cap] - git / node helper processes stay hidden per ["../../core_analysis/core.rq".consumption_silence] Consumers only read indexed columns; they must not invoke `git_dates` on the UI path. [git_idea_timeline_analysis] [indexer.git_dates] [git_dates_rate_cap] [ideas_summary_webview.timeline_page]0.158
git_dates_rate_capreqlan rq/extension/index-host/git-codelens.rqdoneGit history analysis is expensive ( `git log -L` and follow logs per idea ). Do not start a git_dates wave on every `.rq` save or catalog notify. Catalog and index-status events must debounce ( quiet period after the last notify ) and must wait a minimum gap after a wave that actually filled dates. Editor-switch priority and draining a capped wave may use the short idle delay. Distinct from ["./graph-analysers.rq".indexing_trigger_filesave]: the ideas index still updates on save; only git analysis is rate-capped. Related: [git_dates_background_indexing], [indexer.git_dates], ["./index.rq".idea_index_triggers], ["./index.rq".git_information_capture], ["../../core_analysis/core.rq".consumption_silence].0.123
git_idea_timeline_analysisreqlan rq/extension/index-host/git-codelens.rqdoneIdea creation and last-modified dates, plus change count, are derived from git history by the `git_dates` analyser and stored on the ideas index ( `git_created_at` / `git_modified_at` / `git_change_count` ). Calculation is owned by [git_dates_background_indexing] / [indexer.git_dates] — not by on-the-fly editor, Activity Bar focus, Timeline open, or Ideas table load. Active-editor queue priority for fill-in is specified on [git_dates_background_indexing]. Implemented by ["../../../crates/reqlan-index/src/git_dates.rs"] and ["../../../packages/analytical/src/index-store/sqlite-store.ts"]. [git_dates_background_indexing] [git_dates_rate_cap] [indexer.git_dates] [ideas_summary_webview.ideas_list]0.091
file_related_requirementsreqlan rq/extension/index-host/graph-analysers.rqThe extension should provide a view or command to get requirements relating to the currently open file. File-related lookup should follow both explicit file references and comment rq: links in that file. Comment links are read from indexed `comment_link` edges ( [indexer.index_code_files] ), not only the open buffer. ["../../cli/click.rq".click_code_file] uses the same indexed backlinks and comment links when the click target is a code file.0.124
host_index_capabilitiesreqlan rq/extension/index-host/graph-analysers.rqHost-facing analysers and commands over the shared index: [list_all_ideas], [file_related_requirements], [indexer.index_ideas], [indexer.index_technology], [indexer.local_graph_analysis], [indexer.semantic_analysis], [indexer.git_dates], [indexer.completion_tracking], [indexer.deprecation_impact_analysis]. Application memory: [application_memory].0.040
indexing_trigger_autoreqlan rq/extension/index-host/graph-analysers.rqdoneWhen the editor host is idle, run a **background staleness check** — not a reindex and not a soft full sync UI pass. Philosophy: computationally cheap. Load document mtimes in **one** SQLite read, compare each file's FS mtime in memory, and only then index mismatched or new files; drop deleted docs in one batched delete. A single MAX ( mtime ) watermark is not sufficient ( one file can get newer while another gets older ). If nothing is stale: no state transition, no progress UI, no parse. If some files are stale: index **only those files** under [indexer.nonblocking_index]. Schedule after a quiet period with no index activity; prefer running when the window is unfocused; defer or cancel if the user becomes active again. Extension host only ( [editor_index_adapter] ); CLI / MCP have no idle loop ( they sync on activate / command ).0.113
indexing_trigger_filesavereqlan rq/extension/index-host/graph-analysers.rqindexing should be triggered by. rq file create / change / delete via watchers, and by allowlisted source files that may contain comment references.0.106
indexing_trigger_manualreqlan rq/extension/index-host/graph-analysers.rqIndexing should be triggered by manual indexing commands ( Refresh / Clear & rebuild ). Refresh and Clear & rebuild always rediscover bases first via ["../../bases/base.rq".refresh_rediscovers_bases] / ["../../../packages/analytical/src/index-store/base-registry.ts"] `refresh`, then soft-sync or rebuild the active base.0.092
indexing_trigger_openreqlan rq/extension/index-host/graph-analysers.rqAfter the activity bar's first painted frame / base activate, run one soft sync ( mtime-skipped ) so the index is warm without delaying the sidebar shell. This is a startup pass — not the idle checker ( [indexing_trigger_auto] ).0.102
list_all_ideasreqlan rq/extension/index-host/graph-analysers.rqThe extension should provide a command to list all ideas in the workspace with file location and summary.0.045
index_diagnosticsreqlan rq/extension/index-host/index-diagnostics.rqdoneIndexing performance diagnostics: measure and inspect time spent indexing a [indexer.index] base. Timing is persisted in a dedicated **diagnostic index** under application memory ( [app_memory.index_diagnostics_store] ), not in `ideas-index.sqlite`, so history survives Clear & rebuild. Surfaces: [index_diagnostics_webview]. Owned by `@reqlan/analytical` for recording; the extension hosts the webview.0.145
index_diagnostics_metricsreqlan rq/extension/index-host/index-diagnostics.rqdoneFor each sync / index run on a base, record: - wall-clock **sum / total duration** of the pass - **file count** ( visited ), skipped-by-mtime count, indexed ( parse / persist attempted ) count, error count - **average path depth** of visited files ( segments under the base root ) - per-file **duration** and outcome ( `mtime_skip` | `mtime_refresh` | `hash_skip` | `persisted` | `error` ) Runs are attributable to a trigger ( `soft_sync` | `rebuild` | `enqueue` | `stale` ). Instrumentation wraps [workspace_index] soft sync and [indexer.nonblocking_index] single-file paths via [diagnostics_store].0.120
index_diagnostics_webviewreqlan rq/extension/index-host/index-diagnostics.rqdoneAn editor webview panel displays index timing diagnostics for the active base. Capabilities: - Base / latest-run summary: total time, file counts, average depth - Drill into recent runs - Rank files by duration ( slowest first ); show outcome and path depth Opened by command `reqlan.openIndexDiagnostics` ( [open_index_diagnostics] ). Optional entry from workspace index health ( [workspace_pane.workspace_pane] ) may link later; command is the primary entry. Implementation: [diagnostics_panel], [DiagnosticsApp].0.145
open_index_diagnosticsreqlan rq/extension/index-host/index-diagnostics.rqdoneCommand palette action **Open Index Diagnostics** ( `reqlan.openIndexDiagnostics` ) opens [index_diagnostics_webview] for the active base. Shows total index time, run drill-down, and per-file ranking ( duration, depth, outcome ).0.071
application_memoryreqlan rq/extension/index-host/index.rqdoneBase-local application memory for reqlan tools lives under `<base>/.reqlan/`. The presence of `.reqlan` **marks** a directory as a ["../../bases/base.rq".base]; each base owns its own store. Shared by the VS Code extension, ["../../cli/cli_package.rq".cli_package], and MCP ( [mcp_server] ) — not VS Code `globalStorageUri` / extension-private storage. The ideas graph index ( [indexer.index_ideas] and [indexer.index_technology] ) persists as `ideas-index.sqlite` inside that directory. Schema: ["../../indexer/sqlite-schema.rq".ideas_index_sqlite]. Index timing diagnostics persist separately as `index-diagnostics.sqlite` ( [index_diagnostics_store] / ["./index-diagnostics.rq".index_diagnostics] ) so rebuilds of the ideas index do not wipe history. Click session state persists as `click-sessions.sqlite` ( ["../../cli/click.rq".click_session] ) so agent / CLI click cursors survive ideas-index rebuilds. Diagnostics schema: ["../../indexer/diagnostics-schema.rq".diagnostics_sqlite]. WAL sidecars and JSON siblings: ["../../indexer/sidecars.rq".reqlan_directory_layout]. Export form defaults ( all formats via ["../export/export.rq".export_webview], including HTML options in ["../export/html-export.rq".html_export_form] ) persist as `export_settings.json` in the same directory ( active base ). Path ignore rules live as `.rqignore` in the same directory ( [rqignore] / [configuration.configuration_rqignore] ). Git ignore for SQLite stores lives as `.gitignore` in the same directory ( ["../../bases/base.rq".base_initialisation_ignore] ). Path resolution is owned by [application_memory_impl] ( `resolveApplicationMemoryPath` ); consumers must use it ( or `REQLAN_INDEX_PATH` override for a single store ) so tools read and write the same store for a given base. Multi-base discovery / registry: ["../../bases/base.rq".multi_base_environment]. Index engine ownership: ["../../indexer/indexer.rq".ownership]. Extension wiring: [analytical_submodule]. Aligns with ["../../cli/cli_package.rq".function_parity]: shared analytical memory, not host-only state.0.494
binary_ignorereqlan rq/extension/index-host/index.rqdoneDiscovery, coverage, and index walks skip binary files by default. Built-in [rqignore] patterns include a broad set of binary globs ( images, archives, packages, native objects, fonts, media, and office files ). Opt in with a gitignore negation in `.reqlan/.rqignore`. Example: `!*.bin` includes files with a `.bin` extension. Opted-in files can receive ["../../indexer/indexer.rq".index_code_files] comment indexing. They are not parsed as `.rq` sources. The editor source watcher stays on allowlisted text extensions. A soft sync indexes opted-in binary paths from the scan list. Idle stats stored paths and does not walk. Same filter as [configuration.configuration_rqignore].0.201
commentless_file_ignorereqlan rq/extension/index-host/index.rqdoneDiscovery, coverage, and index walks skip common files that have no comment syntax. The set includes JSON ( `.json`, `.jsonl`, `.ndjson` ), tabular data ( `.csv`, `.tsv` ), lockfiles, checksums, minified scripts, source maps, notebooks, and certificates. These files cannot hold `rq:` comment references. SQLite WAL, SHM, and journal sidecars stay with the database patterns in [rqignore] ( `*.sqlite-wal`, `*.sqlite-shm`, `*.sqlite-journal`, and the same suffixes on `.sqlite3`, `.db`, and `.db3` ). Opt in with a gitignore negation in `.reqlan/.rqignore`. Example: `!*.json`. JSON with comments ( `.jsonc`, `.json5` ) stays eligible for ["../../indexer/indexer.rq".index_code_files]. The seeded file lists the same patterns ( [rqignore_initialisation] ).0.188
git_information_capturereqlan rq/extension/index-host/index.rqCapture and surface git development history for requirements and files — not only working-tree staging status. On-demand / index-accessible: - ownership and top authors ( name; email when available ) - creator ( first introduction ) and last meaningful modification - edit frequency / commit count for the focus path or idea line range - recent commit trail ( subject, author, authoredAt, short hash ) for the ["../local-context/context-scope.rq".git_context] lens Idea dates and change counts come from [indexer.git_dates] / ["./git-codelens.rq".git_dates_background_indexing], not from a git walk on every save ( ["./git-codelens.rq".git_dates_rate_cap] ). Activity Bar git CLI calls stay hidden on Windows ( ["../../core_analysis/core.rq".consumption_silence] ). Future: adjacency score from edit state and frequency of neighbours. Feeds ["../local-context/context-scope-v2.rq".development_history_signals] and ["../local-context/activitybar-panels/current_context_scope.rq".git_history_lens].0.103
idea_index_triggersreqlan rq/extension/index-host/index.rqRefresh automatically on `.rq` file change via watchers ( [graph_analysers.indexing_trigger_filesave] ). Idle: cheap background staleness check — [graph_analysers.indexing_trigger_auto]. Git-dates fill is not an index trigger; it is a later analyser with ["./git-codelens.rq".git_dates_rate_cap].0.136
index_diagnostics_storereqlan rq/extension/index-host/index.rqdonePer-base diagnostic timing index at `<base>/.reqlan/index-diagnostics.sqlite`. Sibling of `ideas-index.sqlite`; not deleted by Clear & rebuild. Records sync runs and per-file durations for ["./index-diagnostics.rq".index_diagnostics_metrics]. Webview: ["./index-diagnostics.rq".index_diagnostics_webview].0.223
rqignorereqlan rq/extension/index-host/index.rqdone`.reqlan/.rqignore` filters which paths discovery and indexing crawl, using gitignore syntax relative to the base root. Owned by [rqignore_impl] in `@reqlan/analytical` so CLI and editor share behaviour. Defaults cover `node_modules/`, virtualenvs, build dirs ( `bin/`, `generated/`, `out/` ), VCS / editor stores, database files ( `*.db3`, sqlite ) and SQLite sidecars, binary globs ( [binary_ignore] ), `*.html`, secrets, and hidden entries. Walks also skip common files that have no comments ( [commentless_file_ignore] ). New bases seed the file via [rqignore_initialisation]. Product configuration statement: [configuration.configuration_rqignore].0.296
rqignore_initialisationreqlan rq/extension/index-host/index.rqdoneNew bases seed `.reqlan/.rqignore` with comments that explain every feature of [rqignore], [binary_ignore], and [commentless_file_ignore]. Written when a base is created: ["../host/installation.rq".base_rqignore_seed] / ["../../bases/base.rq".base_initialisation]. Comments cover purpose ( discovery and index walks ), base-root relative paths, gitignore syntax, last matching rule, `!` negation, built-in defaults that always apply, binary opt-in, hidden paths, `*.secret.rq`, SQLite sidecars, files that have no comments ( [commentless_file_ignore] ), and `.reqlan/` itself. The seeded file is the editable surface. Built-in rules still apply if a user deletes a line. Existing `.rqignore` files are not rewritten ( ["../host/installation.rq".base_installation] is idempotent ).0.125
text_prefix_skipreqlan rq/extension/index-host/index.rqdoneBefore any index content read, inspect at most the first 8 KiB. Skip the file when that prefix has a NUL, a UTF-16 BOM ( `FF FE` or `FE FF` ), or invalid UTF-8. A trailing incomplete UTF-8 code unit is not a skip: the rest of the file may finish the character. Skip when the file is larger than 1 MiB. A rejected prefix is not followed by a read of the remainder. `.rq` files and allowlisted code files use the same check. This is in addition to [binary_ignore] extension globs.0.092
analysis_api_disposereqlan rq/extension/index-host/sqlite-artifact-lifecycle.rqdone[analysis_runtime] `openAnalysisApi` dispose must close the native analysis runtime and drop its SQLite connection ( ideas index and click-sessions ). A no-op dispose is a defect. Extension commands use a short-lived `withAnalysisApi` ( open → run → dispose ) mediated by [analysis_runtime]; they must not cache `NativeAnalysisApi` for the session.0.040
event_driven_base_accessreqlan rq/extension/index-host/sqlite-artifact-lifecycle.rqdoneExtension interaction with bases is event-driven and goes through the analytical package: - Discover / pin / focus / file watch / command / UI query → open or `ensureBaseReady` - Sync, stale check, or analysis work runs - Quiet idle → [release_when_idle] No always-on connection and no continuous reconnect loop. Headless CLI / MCP already open per command via [analysis_runtime] ( [headless_sync_on_ready] ).0.057
release_when_idlereqlan rq/extension/index-host/sqlite-artifact-lifecycle.rqdoneAfter an index or analysis pass finishes, and after the idle quiet period ( [idle_stale_check] / indexing_trigger_auto ), [editor_index_adapter] must release every open base SQLite handle via [base_registry] `releaseArtifacts` → [workspace_index] `deactivate`. Descriptors stay registered so the next event can reopen the same base. Idle must not leave connections open after a heal / sync, and must not schedule another open unless a real host event arrives ( file change, pin / switch, focus reopen, command, UI query ).0.077
sqlite_artifact_lifecyclereqlan rq/extension/index-host/sqlite-artifact-lifecycle.rqdoneBase 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