Members

IdeaFileStatusSummary
activation reqlan rq/extension/activation.rq VS Code loads the extension host entry at ["../../packages/extension/src/extension/main.ts"] when an activation event in ["../../packages/extension/package.json"] matches. The exported `activate(context)` function is the single activation entry point for [scope.vscode_extension]. Install-time and first-run sequencing across extension vs base layers: ["./installation.rq".installation_sequencing]. Startup failure diagnosis, first-paint sequencing, bundle splitting, and development-host lessons: ["./startup-performance.rq"].
activation_events reqlan rq/extension/activation.rq Activation is declared in `contributes.activationEvents` in ["../../packages/extension/package.json"]. - `onStartupFinished` — activate after the workbench finishes starting; ensures first-run onboarding can run without opening a `.rq` file first. - `onLanguage:reqlan` — activate when a reqlan document is opened. - `onLanguage:python`, `onLanguage:javascript`, `onLanguage:typescript`, `onLanguage:typescriptreact` — activate for comment-reference and glue-semantics support in those languages. - `onView:reqlan.activityBar` — activate when the Reqlan activity bar view is opened. - `onChatParticipant:reqlan.reqlan-extension` — activate when the @ reqlan chat participant is used. - `onCommand:reqlan.*` — activate when listed Reqlan palette commands run before the extension has loaded. There is no separate `onInstall` hook; install-time behaviour runs on the first activation after install.
activation_sequence reqlan rq/extension/activation.rq `activate` is synchronous and non-blocking in ["../../packages/extension/src/extension/main.ts"]; it never awaits startup work so the UI is available as soon as possible. It runs the following phases: 1. Register reference inlay-hint and CodeLens configuration / commands synchronously. 2. Call [analytical_submodule_activation] — registers commands, activity bar, chat, webviews, AI commands, and mutation hooks synchronously and returns without starting indexing. 3. Register import-error quick-fix commands when the analytical submodule registered. 4. Arm [first_paint_startup] so index startup cannot race the activity-bar shell. 5. Invoke [onboarding_check] without awaiting it, so onboarding cannot block activation. Submodule failures are logged and do not prevent later phases from running.
analytical_submodule_activation reqlan rq/extension/activation.rq Analytical submodule registration is implemented in ["../../packages/extension/src/analytical_submodule/index.ts"]. `activateAnalyticalSubmodule` is synchronous: VS Code contributions ( commands, activity bar provider, chat participant, webviews, AI commands, mutation hooks ) register synchronously and it returns the submodule immediately. It does not start indexing; it passes the activity-bar post-paint callback into the provider and the caller starts index activation through [first_paint_startup].
background_startup reqlan rq/extension/activation.rq Startup work that must not block activation is coordinated by `scheduleBackgroundStartup` in ["../../packages/extension/src/extension/main.ts"]. - [first_paint_startup] gates index discovery and sync when the Context view opens; a three-second fallback preserves warm startup when the sidebar remains closed. - The language client starts after the same paint signal when the Context view opens, with a one-second fallback so language features still start when the sidebar remains closed. - Registers attribute and name catalog sync once the language client exists; the initial push covers an already-ready index and the catalog-update subscription covers indexes that become ready afterwards. Index and language-client failures are logged and do not affect the already-available UI.
first_paint_startup reqlan rq/extension/activation.rq done The activity-bar HTML shell is assigned synchronously by ["../../packages/extension/src/activity_bar_module/activity-bar-webview-provider.ts"]. Its Svelte app installs the host message listener before mount, then sends the one-shot `ready` handshake from a task queued after its first animation frame. ["../../packages/extension/src/extension/startup-gate.ts"] resolves that handshake once; `IndexService.activate` then discovers bases and syncs. If no view opens, a bounded three-second fallback starts the index without any visible first paint to contend with. Parser services inside each `WorkspaceIndex` are lazy and are created only when a file is actually parsed, not while bases are discovered. The sql. js asm implementation is emitted as a separate lazy vendor bundle, so loading `main.cjs` does not parse the database engine before `activate`.
onboarding_check reqlan rq/extension/activation.rq Post-install onboarding is checked on every activation, not via a dedicated install event. ["./onboarding/page-thanks-for-installing.rq".installation_event_trigger] is satisfied because `activate` always calls ["../../packages/extension/src/extension/open-thanks-for-installing.ts"]. The check reads global state key `onboarding` via ["../../packages/extension/src/extension/onboarding-state.ts"]: - `onboardingMessageShown` — when false, open the onboarding webview panel via ["../../packages/extension/src/extension/onboarding-panel.ts"]. - `lastVersion` — updated each activation after the message has been shown so future releases can detect extension updates. The call is fire-and-forget; errors are logged and do not fail activation.
event_driven reqlan rq/extension/architecture.rq the application should be event driven .
state_machine_mindset reqlan rq/extension/architecture.rq the application should be designed as a collection of state machines ; built using zustand if in js .
code_completion reqlan rq/extension/code_completion.rq string and namespaces should code complete nicely based on the currnet files' path and the resolved import config.
ai_naming reqlan rq/extension/configuration.rq Command palette entries use category " Reqlan " with unprefixed titles ( the palette renders them as " Reqlan:... " ). The rq- prefix is reserved for chat slash commands and agent skills only, e. g. / rq-search and / rq-build-requirement in Cursor or @ reqlan / rq-search in VS Code Copilot. Do not put rq- or " RQ: " in command palette titles; that duplicates the visible prefix.
configuration_import_roots reqlan rq/extension/configuration.rq `importRoots` is an optional array of alias-to-directory mappings in `.reqlan/config.json`. Each mapping has: - `alias` ( required non-empty string ): prefix before `/` in aliased import paths. - `root` ( optional non-empty string ): directory for that alias. A relative `root` resolves against the base root ( the parent of `.reqlan` ), not against the `.reqlan` directory. An absolute path or `file://` URI is used as that alias' import-root directory directly. When `root` is omitted for a mapping, that alias uses the workspace folder that contains the `.rq` file. When `importRoots` is omitted, empty, or has no valid entries, the default is one mapping with alias `@` and no explicit root. When several aliases could match a path, the longest alias wins. Invalid or unreadable JSON, and a non-array `importRoots` value, fall back to defaults ( or no loaded config for discovery, then defaults at resolve time ). Language path forms and `@/` shorthand: ["../language/imports.rq".import_paths] and ["../language/imports.rq".configuration_import_root_alias]. Schema: [configuration_schema_file]. Applying file discovery: [configuration_location]. Editor completion of aliased import paths: ["./syntax/features-syntax.rq".code_completion].
configuration_location reqlan rq/extension/configuration.rq An optional `.reqlan/config.json` may appear under a base's `.reqlan` directory. For a given `.rq` file, the applying base is the nearest ancestor directory that owns a `.reqlan` folder. The applying config is that base's `.reqlan/config.json` when present. If the owning base has no `config.json`, or no owning base is found, defaults from [configuration_import_roots] apply. A child base does not inherit a parent base's config. Implemented by ["../../packages/language/src/reqlan-path-resolve.ts"].
configuration_rqignore reqlan rq/extension/configuration.rq done Each base may define path ignore rules in `.reqlan/.rqignore` using * * gitignore syntax * *. Patterns are relative to the base root ( parent of `.reqlan` ), not the `.reqlan` directory. Owned by `@reqlan/analytical` so the CLI, MCP, and extension share one filter for discovery and indexing walks. Built-in defaults always apply ( dependencies, venvs, build output, VCS / editor stores, `*.db3` / sqlite DBs, `*.secret.rq`, hidden entries, and `.reqlan/` itself ); the on-disk file adds or overrides via the same syntax, including `!` negation. New bases seed `.reqlan/.rqignore` with those defaults ( ["./module/index.rq".rqignore] ). Missing or unreadable `.rqignore` still uses built-in defaults. Location convention: [configuration_location]. Application memory: ["./module/index.rq".application_memory].
configuration_schema_file reqlan rq/extension/configuration.rq The machine-readable JSON Schema for `.reqlan/config.json` is ["../../packages/extension/schemas/config.schema.json"]. The extension contributes that schema for `**/.reqlan/config.json` via `jsonValidation` in ["../../packages/extension/package.json"]. `.reqlan/config.json` is a JSON object. Unknown properties are not part of the schema and are ignored when loading.
export_JSON reqlan rq/extension/export_functions.rq A command palette action should open [features_export.export_webview] ( or run json export ). [features_export.json_export]
export_configurability reqlan rq/extension/export_functions.rq exports should be built in mind with a print menu that will available for user configuration. The initial export should accept a user prompt input for a file name. Preferred UI is [features_export.export_webview] rather than separate QuickPick chains per format.
export_csv reqlan rq/extension/export_functions.rq A command palette action should open [features_export.export_webview] ( or run csv export ) with tags flattened for quick filtering. [features_export.csv_export]
export_html reqlan rq/extension/export_functions.rq A command palette action should open [features_export.export_webview] with HTML selected. [html_export.html_export] Host options for embedded mounts include [html_export.html_export_header_link] and [html_export.html_export_url_base].
export_pdf reqlan rq/extension/export_functions.rq A command palette action should export requirements to pdf ( preserving links. ) via [features_export.export_webview] when available.
add_to_chat reqlan rq/extension/features-commands.rq done A set of [command_palette] functions that add the selected idea, ideaset, or file to the chat. Commands: Add Idea to Chat, Add Ideaset to Chat, Add File to Chat ( category Reqlan ). Uses the idea / ideaset under the cursor ( or ideas overlapping the editor selection ) when in a. rq file; otherwise QuickPick. Opens chat with # requirement / # file context, with clipboard fallback.
command_palette reqlan rq/extension/features-commands.rq Extension commands should be available via the vscode command palette and configurable keyboard shortcuts. Command titles should not repeat the category prefix; use category " Reqlan " with plain titles so the palette shows " Reqlan: List All Ideas ", not " Reqlan: Reqlan:... " or " RQ: RQ:... ".
decompose reqlan rq/extension/features-commands.rq A command pallete action for decomposition. Should replace an idea with a reference to a new file that holds the old contents. Should accept multiple inputs and put them in a list. e. g. to ( ideainputname, defaulting to concatenation )
divide_and_conquer reqlan rq/extension/features-commands.rq A command palette action should divide and conquer the current file or selected ideaset. ( an llm prompt that takes all the context and fires off subagents )
exports reqlan rq/extension/features-commands.rq graph should be exportable via the [export_functions]
get_local_graph reqlan rq/extension/features-commands.rq A command palette action should get the local graph for the current file or selected idea.
open_a_random_requirement reqlan rq/extension/features-commands.rq as it sounds
open_index_diagnostics reqlan rq/extension/features-commands.rq done Command palette action * * Open Index Diagnostics * * ( `reqlan.openIndexDiagnostics` ) opens the timing diagnostics webview for the active base. Shows total index time, run drill-down, and per-file ranking ( duration, depth, outcome ). Details: ["./features-index-diagnostics.rq".index_diagnostics_webview].
pallete_function_create_todo reqlan rq/extension/features-commands.rq A function that opens up a modal webview form allowing the user to write a rq-idea, search for references etc, and writes it to a specified output file. default folder is next to current file, but should be selectable in form. This behaviour should be configurable via ["./configuration.rq"]
search_code_actions reqlan rq/extension/features-commands.rq done when cursor is in a [reference], there shouls be a code action to search for references to that idea. it should also allow wrapping a selected string, or the word at the cursor when in idea-body prose, as a new [reference]. it should open up a webview modal that shows a search dialog that allows the user to search for potential references. the search menu should preserve / show the context of the would-be reference: the rest of the containing idea, with styling, and with the selected text pulsing / styled prominently. it should support fuzzy / partial searching. it should list the closest matches in a paginated view. selecting the idea should fill / replace the reference ( or wrap the selection as [name] ) and an import ( if required ) appropiately
toggle_indirect_references reqlan rq/extension/features-commands.rq A command palette action should toggle display of indirect references in complementary rendering and graph views.
view_all_requirements reqlan rq/extension/features-commands.rq A command palette action should open a browsable view of all requirements in the workspace.
graph_view reqlan rq/extension/features-consumption.rq The extension should provide a requirements graph view showing ideas and their references as nodes and edges. The graph view should support navigation from a node to its source definition in the editor. Users should be able to filter or focus the graph by file, ideaset, tag, or status.
ide_page_reports reqlan rq/extension/features-consumption.rq The extension should provide dedicated report pages rendered inside the ide. Report pages should include at minimum a graph page and a status table page. Report pages may render computed information that is not present as literal text in source files.
local_graph_view reqlan rq/extension/features-consumption.rq The extension should provide a local graph view scoped to the current file or selected idea. The local graph should show direct and optionally indirect references with a configurable depth.
status_table reqlan rq/extension/features-consumption.rq The extension should render a status table summarising ideas by lifecycle state, priority, and completion. The status table should support sorting and filtering by tags and attributes.
csv_export reqlan rq/extension/features-export.rq The extension should export requirements as csv with tags and key attributes flattened into columns.
export_webview reqlan rq/extension/features-export.rq partial The extension should provide a single export webview for exporting the requirement graph in various formats ( [json_export], [csv_export], [html_export.html_export], and later formats such as pdf ). This generalizes the current HTML-only [html_export.html_export_form]: format choice is primary, and format-specific options ( e. g. HTML runtime mode, template, page families ) appear when that format is selected. Shared options: scope, output folder, and export name; defaults persist to ["./module/index.rq".application_memory] as `export_settings.json` under `<workspace>/.reqlan/`. While an export runs, the form should show a loading state with live progress ( phase message and, when known, completed / total or percent ) so the user can see HTML ( and other formats ) being built — not only a disabled button. The user should be able to open it from: - a link / control in the main [ideas_summary] chrome ( status bar or header ) - the [command_palette]
json_export reqlan rq/extension/features-export.rq The extension should export the requirement graph as structured json for tooling and ai consumption.
completion_tracking reqlan rq/extension/features-graph-analysers.rq The extension should track and surface completion, outstanding work, and open issues across the requirement graph. Completion tracking should derive from @ status, @ tags, and other lifecycle attributes where present.
deprecation_impact_analysis reqlan rq/extension/features-graph-analysers.rq The extension should analyse the impact of deprecated ideas on dependent requirements. Deprecation analysis should report downstream ideas that reference or depend on deprecated items.
file_related_requirements reqlan rq/extension/features-graph-analysers.rq The 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.
git_dates reqlan rq/extension/features-graph-analysers.rq The extension should surface creation and last-modified dates for ideas via git history where available.
index_comment_reference_inclusion reqlan rq/extension/features-graph-analysers.rq The [comment_grammar] comments should be included as a node type in the index
index_ideas reqlan rq/extension/features-graph-analysers.rq Each ["../bases/base.rq".base] maintains an index of its ideas for fast lookup and navigation ( ["../indexer/indexer.rq".index] ). The index should update incrementally as. rq files change within that base ( nested child bases excluded ). Persistence lives in [application_memory] per base, shared with CLI and MCP — not VS Code extension storage. Engine ownership: [workspace_index] in `@reqlan/analytical`; multi-base via BaseRegistry; editor watches via [editor_index_adapter].
index_technology reqlan rq/extension/features-graph-analysers.rq The [index_ideas] graph database is sql. js SQLite, aligned with [graph_design]. On-disk location is [application_memory] ( `<base>/.reqlan/ideas-index.sqlite` ), not `context.globalStorageUri`. Implementation: [application_memory_impl], [workspace_index], headless [analysis_runtime] for CLI / MCP, and [editor_index_adapter] for the VS Code host.
indexing_incrementality reqlan rq/extension/features-graph-analysers.rq Indexing should be incremental: watcher-driven single-file updates, and soft full syncs that skip unchanged files by stored mtime. Hard rebuilds reparse everything. Detail and UX ( progress, cancel, non-blocking UI ): ["../indexer/indexer.rq".nonblocking_index].
indexing_trigger_auto reqlan rq/extension/features-graph-analysers.rq done When 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/indexer.rq".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 ).
indexing_trigger_filesave reqlan rq/extension/features-graph-analysers.rq indexing should be triggered by . rq file create / change / delete via watchers .
indexing_trigger_manual reqlan rq/extension/features-graph-analysers.rq indexing should be triggered by manual indexing commands ( Refresh / Clear & rebuild ) .
indexing_trigger_open reqlan rq/extension/features-graph-analysers.rq After 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] ).
list_all_ideas reqlan rq/extension/features-graph-analysers.rq The extension should provide a command to list all ideas in the workspace with file location and summary.
local_graph_analysis reqlan rq/extension/features-graph-analysers.rq The extension should provide a function to access a small slice of the graph around a given idea.
semantic_analysis reqlan rq/extension/features-graph-analysers.rq Search graph for ideas related to a given idea or ideaset.
graph_design reqlan rq/extension/features-graph.rq the graph should be a graph with nodes representing ideas and files and edges representing references.
html_export reqlan rq/extension/features-html-export.rq The extension should support building documentation as html from the requirement graph. Html export should render ideas, attributes, references, and navigable structure suitable for sharing. Core export pipeline lives in `@reqlan/analytical` ( `exportHtml` / `AnalysisApi.exportHtml` ); the extension command palette and CLI ( `reqlan export` ) are thin hosts. A command palette action ( and the Ideas Summary link ) should open ["./features-export.rq".export_webview] with HTML selected and export requirements to html as a multi-file static site ( single-file mode remains optional via [html_export_runtime_modes] ). HTML-specific form fields live under [html_export_form] within that general export webview. [html_export_form] [html_export_multi_file] [html_export_internal_links] [html_export_search] [html_export_list_views] [html_export_idea_pages] [html_export_file_pages] [html_export_code_reference_pages] [html_export_cluster_pages] [html_export_graph_page] [html_export_attributes_index] [html_export_attribute_pages] [html_export_printable_pages] [html_export_runtime_modes] [html_export_scrollable_lists] [html_export_header_link] [html_export_url_base]
html_export_attribute_pages reqlan rq/extension/features-html-export.rq Html export should generate a dedicated page per attribute key used in the export scope. Attribute pages should show a distribution of distinct values ( counts and share of ideas ), and a searchable full list of ideas that declare the attribute with their values for that key. Emission defaults on and is controllable via includeAttributePages so this page family can be flagged in or out without changing the export pipeline shape. The attributes index, idea attribute tables, and search results should link to these pages when enabled.
html_export_attributes_index reqlan rq/extension/features-html-export.rq Html export should provide a searchable attributes index page listing every attribute key used in the export scope. Each attribute entry should summarize distinct values and idea counts, and link to the dedicated attribute page when [html_export_attribute_pages] is enabled.
html_export_cluster_pages reqlan rq/extension/features-html-export.rq Html export should support cluster pages that group related ideas. Deterministic clusters should at least include file, folder, tag, and status groupings. Optional computed clusters should use graph or semantic analysis when available without making export correctness depend on them.
html_export_code_reference_pages reqlan rq/extension/features-html-export.rq Html export should generate dedicated pages for outbound file_reference targets that are not idea-hosting reqlan files already covered by [html_export_file_pages]. Code-file pages should list referencing ideas and reference labels, and participate in search and navigation. Emission defaults on and is controllable via includeCodeFilePages so this page family can be flagged in or out later. Outbound reference path cells and graph external file nodes should link to these pages when enabled.
html_export_file_pages reqlan rq/extension/features-html-export.rq Html export should generate dedicated pages for reqlan source files that host ideas in the export scope. File pages should list hosted ideas, related clusters, and a local graph view when available. Emission defaults on and is controllable via includeFilePages so page families can be flagged in or out without changing the export pipeline shape. Graph nodes and idea source-file links for hosting files should resolve to these pages when enabled.
html_export_form reqlan rq/extension/features-html-export.rq partial HTML export options are hosted inside the general ["./features-export.rq".export_webview] ( not a separate HTML-only panel long-term ). When format is HTML: simple options include scope, output folder, export name, and runtime mode. Advanced HTML settings should be collapsed by default behind an expandable section ( template, cluster strategy, page-family toggles, file filters, url base, header link, print entry, neighbourhood graph node cap ). File filters: exclude `*.secret.rq` ideas ( `excludeSecretFiles` ) and / or exclude paths matched by `.reqlan/.rqignore` ( `excludeIgnoredFiles` ); both default off so indexed ideas from those files are included unless opted out. Form defaults persist to ["./module/index.rq".application_memory] as `export_settings.json` under `<workspace>/.reqlan/` ( shared with other export formats ). Saving settings or running export writes that file; reopening the form reloads the last values. HTML export still calls `@reqlan/analytical` `exportHtml` with an `ExportRequest` built from the form. While export runs, the webview shows progress from the analytical pipeline ( snapshot phases, then write completed / total ) via `exportProgress` messages — see ["./features-export.rq".export_webview]. Current implementation is HTML-only and should be generalized; until then the existing panel satisfies the HTML path.
html_export_graph_animation reqlan rq/extension/features-html-export.rq Live physics in the HTML export should match Ideas Summary animatePhysics: continuous damped semi-implicit Euler using the defaults from ["../../packages/analytical/src/graph/physics-core.js"] ( same module as ["../../packages/extension/webviews/shared/graph/graph-physics.ts"] ). A Live physics toggle pauses and resumes the same simulation state ( default off ); when off, the graph batch-settles then sleeps. Simulation should converge and sleep when calm, waking on filter changes or when Live physics is turned back on, aligned with [layout_physics]. Large graphs use a spatial grid + repulsion cutoff in the shared core; all nodes and full labels remain visible.
html_export_graph_interaction reqlan rq/extension/features-html-export.rq The interactive export graph should support dragging nodes and panning or zooming the viewport, aligned with [view_controls] and [manual_reframe]. Click-through to idea pages must remain available after drag via click-versus-drag discrimination. A Fit control should reframe the viewport to the current node set without restarting layout or clearing live physics state. Zoom and Fit must continuously drive [graph_label_auto] / [html_export_graph_label_auto] opacity when Labels is in auto mode.
html_export_graph_label_auto reqlan rq/extension/features-html-export.rq done Export-surface wiring for [graph_label_auto]: canvas paint applies continuous zoom opacity ( GRAPH_LABEL_FADE_START → GRAPH_LABEL_FADE_END ); hover / drag stays fully opaque. Zoom and Fit from [html_export_graph_interaction] / [manual_reframe] update opacity each paint.
html_export_graph_label_modes reqlan rq/extension/features-html-export.rq done Export-surface wiring for [graph_label_modes]: Labels control on every interactive export graph cycles auto / on / off; Reset restores auto.
html_export_graph_labels reqlan rq/extension/features-html-export.rq HTML export canvas graphs implement shared [graph_labels] ( full names, no ellipsis truncation ). [html_export_graph_label_modes] [html_export_graph_label_auto]
html_export_graph_layout reqlan rq/extension/features-html-export.rq The interactive export graph should lay out nodes so labels and circles do not heavily overlap. Initial placement should settle with the same Obsidian-style force model as [layout_physics] ( central gravity, edge springs, inverse-square repulsion ). Rendering uses canvas 2 d ( not SVG DOM ) with shared physics from ["../../packages/analytical/src/graph/physics-core.js"].
html_export_graph_links reqlan rq/extension/features-html-export.rq Graph node hrefs must resolve to idea pages from every export page depth, including nested idea, file, and cluster pages. Node urls should be export-root-relative so path segments such as ideas / are not dropped when resolving from nested pages. When [html_export_url_base] is set, runtime resolution of those urls must honour the mount prefix ( same contract as page and asset hrefs ). External file nodes should resolve to [html_export_file_pages] or [html_export_code_reference_pages] when those page families are enabled.
html_export_graph_metadata reqlan rq/extension/features-html-export.rq Graph nodes in the HTML export should surface tags, status, and attribute keys on or beside the node, not only as filter inputs. Attribute values declared on the idea should be reachable from the graph via the idea page and on-node attribute key summary.
html_export_graph_page reqlan rq/extension/features-html-export.rq Html export should provide an interactive graph page with search, filters, and links back into idea and cluster pages. The graph should support scoped views for workspace, file, cluster, and idea contexts. The workspace graph page must include every idea in the export scope — blocks, oneliners, and ideasets — and must not apply the interactive Ideas Summary GRAPH_MAX_NODES budget. Ideasets are visible by default with a Hide ideasets / Show ideasets toggle, matching the external-file visibility control. Status and tag filters are multi-select and distinguish [graph_status_tag_filters]. Per-idea, per-file, and per-cluster neighbourhood graphs may still use a capped budget for focused pages. [html_export_graph_links] [html_export_graph_layout] [html_export_graph_animation] [html_export_graph_subject] [html_export_graph_labels] [html_export_graph_label_modes] [html_export_graph_label_auto] [html_export_graph_interaction] [html_export_graph_metadata]
html_export_graph_subject reqlan rq/extension/features-html-export.rq When a graph view has a subject or center idea, that node should be visually distinct from peers and externals. Subject styling should use the brand rust accent against cyan peer nodes.
html_export_header_link reqlan rq/extension/features-html-export.rq done Html export should accept an optional header link ( href + label ) rendered in the topbar ahead of section navigation. Hosts such as the marketing site build can set this so readers can return to the parent site from any exported page. When omitted, the topbar shows only the export section nav. Site embed consumption: ["../../site/reqs/core.rq".spec_html_export]. Often paired with [html_export_url_base] when the export is mounted under a parent static site.
html_export_idea_pages reqlan rq/extension/features-html-export.rq Html export should generate a dedicated page per idea. Idea pages should include summary, attributes, inbound references, outbound references, nearby context, and links to related ideas, files, clusters, graph views, and printable forms. Status and tags are nullable attributes: render them only when present.
html_export_internal_links reqlan rq/extension/features-html-export.rq Every exported idea should have a stable html page path and stable in-page anchors. References, breadcrumbs, search results, graph nodes, cluster members, attribute listings, file listings, and code-file listings should link to html pages rather than only showing text labels. Graph node links must follow [html_export_graph_links]. When [html_export_url_base] is set, those same links must be root-relative under the mount prefix so static hosts resolve them with or without a trailing slash.
html_export_list_views reqlan rq/extension/features-html-export.rq Html export should provide searchable list views for ideas, files, code files, references, clusters, and attributes. List views should preserve the usability of the current ideas summary tables with counts, sorting, filters, and quick navigation. Every interactive table column should be sortable by header click and filterable with a per-column filter, in addition to any page-level search bar. Long lists that sit above other page content follow [html_export_scrollable_lists]. [html_export_attributes_index] [html_export_file_pages] [html_export_code_reference_pages] [html_export_scrollable_lists]
html_export_multi_file reqlan rq/extension/features-html-export.rq Html export should generate a multi-file static site rather than a single document. The export should include page families for overview, ideas, files, code files, clusters, attributes, graph, data, and print-focused pages.
html_export_printable_pages reqlan rq/extension/features-html-export.rq Html export should provide static printable pages alongside the interactive site. Print pages should not depend on the interactive javascript bundle. Status and tags are nullable: when absent, printable sheets must omit those fields rather than inventing placeholders such as unspecified or empty dashes. When print pages are browsed in interactive runtime mode, long lists with content below them follow [html_export_scrollable_lists].
html_export_runtime_modes reqlan rq/extension/features-html-export.rq Html export should support a richer interactive site mode and a leaner document or print-oriented mode from the same export manifest. Template identifiers should select real rendering behavior rather than metadata only. Scrollable list viewports from [html_export_scrollable_lists] apply only in interactive mode; document and print modes keep full-length lists.
html_export_scrollable_lists reqlan rq/extension/features-html-export.rq In interactive runtime mode, long list and table sections that have additional content below them should render inside a scrollable viewport with a max height so lower sections remain reachable without endless page scrolling. Toolbar titles and filters for those sections should stay outside the scroll viewport. In document and print runtime modes, those same lists should expand to their full natural height so the export remains readable as a continuous document and suitable for printing. Browser print of interactive pages should also expand constrained lists to full height.
html_export_search reqlan rq/extension/features-html-export.rq The interactive html export should provide a global search bar and page-local search bars. Search should work offline from generated data bundled with the export. Attribute keys and values should be searchable alongside ideas, files, code files, and clusters.
html_export_url_base reqlan rq/extension/features-html-export.rq done Html export should accept an optional urlBase mount prefix ( for example `/spec` or `/reqlan/spec` ). When set, page and asset hrefs must be root-relative under that prefix so static hosts resolve correctly whether the directory URL includes a trailing slash. When omitted, exports keep document-relative hrefs suitable for local folder browsing. Applies across [html_export_internal_links] and [html_export_graph_links]; site embed consumption: ["../../site/reqs/core.rq".spec_html_export]. Often paired with [html_export_header_link] when the export is mounted under a parent static site.
index_diagnostics reqlan rq/extension/features-index-diagnostics.rq done Indexing 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.
index_diagnostics_metrics reqlan rq/extension/features-index-diagnostics.rq done For 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].
index_diagnostics_webview reqlan rq/extension/features-index-diagnostics.rq done An 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` ( [commands.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].
copy_requirement reqlan rq/extension/features-mutation-hooks.rq The extension should provide a command to copy an idea or requirement to another file or ideaset. Copy should optionally rewrite local references to match the destination context.
create_requirement reqlan rq/extension/features-mutation-hooks.rq The extension should provide a command to create a new requirement idea in an appropriate. rq file. New requirement creation should offer sensible defaults for name, body, and file placement.
merge_requirements reqlan rq/extension/features-mutation-hooks.rq should combine requirement attributes, and any references through the codebase.
move_file reqlan rq/extension/features-mutation-hooks.rq if a file is moved, a prompt should be shown to the user to update any references in the file to the new path. if multiple files are moved there should be only one prompt. the trigger should only happen if the reqlan file has inbound or outbound references, or the non-reqlan file has inbound reqlan references. " reqlan wants to make refactoring changes to your codebase. Do you approve? " " yes ", " no ", " view changes " See also ["refactor_support.rq".refactor_file_moves]. Implemented by ["../../packages/extension/src/mutation_hooks_module/register-file-mutation-hooks.ts"], ["../../packages/extension/src/mutation_hooks_module/show-mutation-approval.ts"], and ["../../packages/extension/src/mutation_hooks_module/file-mutation-gate.ts"].
rename_file reqlan rq/extension/features-mutation-hooks.rq this should update any referencess in rq files ( imports, inline references, etc ) it should also update any inline references in functional code files - per ["features-code-comment"] See also ["refactor_support.rq".refactor_file_moves] and ["refactor_support.rq".refactor_changes]. Implemented by ["../../packages/extension/src/mutation_hooks_module/file-move-plan.ts"], ["../../packages/language/src/file-path-rewrite.ts"], and ["../../packages/extension/src/mutation_hooks_module/collect-inbound-referencers.ts"].
split_requirement reqlan rq/extension/features-mutation-hooks.rq The extension should provide a command to split one requirement into two or more separate ideas. Splitting should preserve references and attributes according to user selection.
chat_skill_naming reqlan rq/extension/features-skills-and-mcp.rq Cursor and Copilot chat skills and slash commands should use the rq- prefix, e. g. rq-search and rq-build-requirement. This prefix must not appear in command palette titles; palette entries use category Reqlan only.
cursor_skills_install reqlan rq/extension/features-skills-and-mcp.rq A command palette action ( e. g. ctrl + p: reqlan install cursor skills ) should copy rq- * skills from the extension into the workspace. cursor / skills folder and update. cursor / mcp. json when the local mcp server is available. Place in install sequencing ( workspace agent files, not `.reqlan` ): ["./installation.rq".workspace_agent_files].
mcp_interaction_discovery reqlan rq/extension/features-skills-and-mcp.rq An mcp tool should discover available interactions, commands, and query patterns for the requirement graph.
mcp_keyword_search reqlan rq/extension/features-skills-and-mcp.rq An mcp tool should search requirements by keyword across idea names, bodies, and attributes.
mcp_tools reqlan rq/extension/features-skills-and-mcp.rq The extension or companion server should expose mcp tools for ai and automation clients. Headless index storage follows ["./module/index.rq".application_memory] ( `<base>/.reqlan` ), shared with the extension and CLI.
mcp_tools_prompt reqlan rq/extension/features-skills-and-mcp.rq An mcp tool should provide a prompt-oriented entry point for working with the requirement graph.
mcp_tree_interrogation reqlan rq/extension/features-skills-and-mcp.rq An mcp tool should describe and interrogate the requirement tree for a given root idea or file.
mcp_tree_summarisation reqlan rq/extension/features-skills-and-mcp.rq An mcp tool should summarise a requirement subtree for compact ai context.
skill_namespace_references reqlan rq/extension/features-skills-and-mcp.rq backslash references to skills based on the namespace should be supported.
simple_views reqlan rq/extension/features-views.rq - table of ideas - title, - path / namespace, - main attribute - other attributes - count of references - table of references - path / namespace of reference to idea - path / namespace of referenced idea - is in in rq ( bool ) - reference type ( file, comment, sub-idea )
git_based_history reqlan rq/extension/git-codelens.rq there 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]
base_config_seed reqlan rq/extension/installation.rq New bases write a minimal `.reqlan/config.json` ( `{}` today ) via [create_base_impl]. Semantics and discovery of applying config: [configuration.configuration_location], [configuration.configuration_import_roots], [bases.base_configuration]. Schema / editor validation: [configuration.configuration_schema_file]. A child base does not inherit a parent base's config file.
base_installation reqlan rq/extension/installation.rq Base-level install marks a directory as a [bases.base] and seeds shared application memory under `<base>/.reqlan/` ( [app_memory.application_memory] ). Entry points ( same helper [create_base_impl] ): - Editor: `reqlan.createBase` / empty-state CTAs ( [bases.create_base_onboarding] ) — only after discovery finds * * zero * * bases; never on extension install alone. - CLI: `reqlan init [directory]` ( [cli.init] ). Idempotent: existing `.reqlan` is left alone ( `created: false` ). On * * new * * base creation the sequence is: 1. Create `<base>/.reqlan/` marker directory ( presence = base ). 2. Seed [base_config_seed] ( `.reqlan/config.json` ). 3. Seed [base_rqignore_seed] ( `.reqlan/.rqignore` ). 4. Editor rediscovers bases and activates indexing for that base; SQLite `ideas-index.sqlite` appears when the index opens ( not necessarily written at marker creation ). Child / nested bases follow [bases.base_nesting]; each base owns its own `.reqlan` seeds and index.
base_rqignore_seed reqlan rq/extension/installation.rq New bases write `.reqlan/.rqignore` with gitignore-syntax defaults ( dependencies, venvs, build output, DBs such as `*.db3`, secrets, hidden entries, `.reqlan/` itself ). Built-in defaults always apply even if the file is missing; the seeded file is the editable surface ( [configuration.configuration_rqignore] / [app_memory.rqignore] ). Used by analytical discovery and indexing walks ( CLI and extension share `@reqlan/analytical` ).
base_vs_extension_boundary reqlan rq/extension/installation.rq Clear ownership so install steps do not write to the wrong store: - Extension package / activate / welcome webview → [extension_installation] ( extension host + `globalState` onboarding key ). - Activity bar, LSP, chat participant, Ideas Summary → extension runtime after [activation.activation_sequence]. - `.reqlan/` marker, `config.json`, `.rqignore`, ideas index, index diagnostics sqlite → [base_installation] under `<base>/.reqlan/`. - Cursor `rq-*` skills + MCP json → [workspace_agent_files] under `<workspace>/.cursor/`. Do not store agent skills or MCP config inside `.reqlan`. Do not treat welcome-webview globalState as base-local memory.
extension_installation reqlan rq/extension/installation.rq Extension-level install covers packing, activation, and first-run host UX — not base filesystem state. There is * * no * * VS Code `onInstall` API; install-time behaviour runs on the * * first * * [activation.activation] after install ( [activation.activation_events] ). Sequencing inside `activate` is owned by [activation.activation_sequence]: - Sync register CodeLens / inlay config commands. - Synchronously register analytical submodule contributions ( commands, activity bar, chat, webviews, AI commands, mutation hooks ) without starting the index ( [activation.analytical_submodule_activation] ). - Register import quick-fixes, then schedule index and language-client startup through [activation.first_paint_startup] / [activation.background_startup]; sync catalogs once the language client exists. - Fire-and-forget [activation.onboarding_check] → [welcome_webview_install]. Failures in submodule or language client are logged and must not abort later phases or the welcome check. Related command surfaces: Show Onboarding ( [welcome.show_onboarding_command] ), Install Cursor Skills ( [skills_mcp.cursor_skills_install] ), Create Base ( [bases.create_base_onboarding] ).
installation reqlan rq/extension/installation.rq Reqlan installation has * * two sequenced layers * * that must not be conflated: 1. [extension_installation] — host product ( VS Code / Cursor extension ) install and first activation. 2. [base_installation] — marking a filesystem directory as a reqlan [bases.base] and seeding its `.reqlan` application memory. Extension install alone does * * not * * create a base. Base install alone does * * not * * open the welcome webview or install host agent skills. CLI `init` shares the base path with the editor ( [cli.init] / [bases.create_base_onboarding] ).
installation_sequencing reqlan rq/extension/installation.rq End-to-end first-run story ( typical editor user ): 1. User installs the extension from Marketplace / Open VSX / VSIX ( [extension_installation] ). 2. Host fires an [activation.activation_events] match ( usually `onStartupFinished` ). 3. [activation.activation_sequence] synchronously registers contributions and schedules [activation.background_startup]; [activation.onboarding_check] may open [welcome.installation_event] ( Welcome to Reqlan webview ) without blocking activation. 4. If no `.reqlan` exists under workspace folders, surfaces offer create-base ( [bases.create_base_onboarding] ) — user-driven, never auto-created on extension install. 5. [base_installation] seeds config / ignore / marker; index activate / sync follows ( [app_memory.application_memory] ). 6. Optionally, user runs Install Cursor Skills ( [workspace_agent_files] ) — copies rq- * skills and may update `.cursor/mcp.json`; independent of `.reqlan` seeding. Ordering constraint: steps 1 – 3 are extension-scoped; steps 4 – 5 are base-scoped; step 6 is workspace agent tooling scoped to the open folder, not the `.reqlan` directory.
welcome_webview_install reqlan rq/extension/installation.rq done The * * Welcome to Reqlan * * onboarding webview is the extension-install UX surface. Opened once on first activation when `onboardingMessageShown` is false ( [welcome.installation_event] / [welcome.installation_event_trigger] / [welcome.onboarding_state] ). Content: welcome copy, resolved phonebook links, syntax-highlighted example `.rq`, open-as-untitled control, activity bar / `@reqlan` tips, sponsor thanks. Must not block [activation.activation_sequence]; errors are logged only. Reopen on demand via [welcome.show_onboarding_command] without resetting shown state unless product policy changes. Implementation: ["../../packages/extension/src/extension/open-thanks-for-installing.ts"], ["../../packages/extension/src/extension/onboarding-panel.ts"], ["../../packages/extension/webviews/onboarding/"].
workspace_agent_files reqlan rq/extension/installation.rq Agent / AI host files are * * workspace * * artefacts, not files under `.reqlan/`. Install Cursor Skills ( [skills_mcp.cursor_skills_install] ) copies bundled `rq-*` skills into `<workspace>/.cursor/skills/` and updates `<workspace>/.cursor/mcp.json` when the local MCP server is available ( [install_cursor_skills_impl] ). Requires an open workspace folder; does not create a base and does not write into `.reqlan`. Naming: skills / chat slash commands use `rq-` prefix ( [skills_mcp.chat_skill_naming] ); command palette stays category " Reqlan " ( [configuration.ai_naming] ). AI command surfaces that depend on skills being present: [agents.ai_integration], [agents.ai_build_requirement], [agents.ai_add_to_context], [agents.ai_write_plan]. Dev sync of the same skill sources into this repo's `.cursor/skills` is a build concern ( ["../development/build.rq"] ), distinct from end-user install sequencing.
refactor_changes reqlan rq/extension/refactor_support.rq On rename, move, or delete of files or symbols, the extension should update the idea index, import statements, embedded file references, comment references, and other idea references that are affected. The index should be resilient to duplication, particularly when ideas move between files: the old hosting file URI must be cleared before or when the destination is reindexed. [refactor_file_moves] [refactor_symbol_rename] [refactor_symbol_move] [refactor_symbol_delete] Implemented by ["../../packages/analytical/src/index-store/workspace-index.ts"], ["../../packages/extension/src/analytical_submodule/index-store/index-service.ts"], ["../../packages/language/src/reqlan-idea-refactor.ts"], and ["../../packages/extension/src/mutation_hooks_module/register-file-mutation-hooks.ts"].
refactor_file_moves reqlan rq/extension/refactor_support.rq The extension should watch for file moves and renames, migrate the index for moved . rq files, and update imports and path references both inside the moved file ( outbound ) and in other files that pointed at it ( inbound ), including comment paths in code files. There should be a single prompt per batch asking whether to apply path updates, aligned with [move_file] and [rename_file]. Implemented by ["../../packages/extension/src/mutation_hooks_module/register-file-mutation-hooks.ts"], ["../../packages/extension/src/mutation_hooks_module/file-move-plan.ts"], ["../../packages/extension/src/mutation_hooks_module/file-mutation-gate.ts"], ["../../packages/language/src/file-path-rewrite.ts"], and ["../../packages/language/src/reqlan-path-references.ts"].
refactor_symbol_delete reqlan rq/extension/refactor_support.rq An idea declaration should offer a code action to delete it and update references. Deleting should remove the declaration, clear or rewrite AST and comment references that targeted it, and reindex affected files. [refactor_support] [refactor_changes] Implemented by ["../../packages/language/src/reqlan-idea-refactor.ts"], ["../../packages/language/src/reqlan-code-action-provider.ts"], and ["../../packages/extension/src/refactor_module/register-idea-refactor-commands.ts"].
refactor_symbol_move reqlan rq/extension/refactor_support.rq An idea declaration should offer a code action to move it to another. rq file. Moving should cut the declaration from the source, insert it into the destination, rewrite imports and references ( including comment references ), and reindex without leaving duplicate idea rows for the old hosting file. [refactor_support] [refactor_changes] Implemented by ["../../packages/language/src/reqlan-idea-refactor.ts"], ["../../packages/language/src/reqlan-code-action-provider.ts"], and ["../../packages/extension/src/refactor_module/register-idea-refactor-commands.ts"].
refactor_symbol_rename reqlan rq/extension/refactor_support.rq Syntactic symbols ( ideas, ideasets, import aliases, and import paths ) should be renamable via the editor rename action ( F2 / LSP rename ). Rename should update AST references across. rq files and matching `rq:["path".idea]` comment idea tokens in source files. [refactor_support] Implemented by ["../../packages/language/src/reqlan-rename-provider.ts"], ["../../packages/language/src/reqlan-comment-rename.ts"], ["../../packages/language/src/reqlan-name-provider.ts"], and ["../../packages/extension/src/refactor_module/register-comment-rename-provider.ts"].
lsp_support reqlan rq/extension/scope.rq the extension should provide an lsp server for . rq files , enabling navigation , validation , and computed views across the requirement graph
scope reqlan rq/extension/scope.rq these requirements describe the vscode extension and lsp for reqlan
vscode_extension reqlan rq/extension/scope.rq the extension should integrate with vscode as the primary developer-user environment
activation_events_learning reqlan rq/extension/startup-performance.rq Modern VS Code derives activation for contributed views and commands. The incident log explicitly showed activation event `onView:reqlan.activityBar`, so the missing-command failure was not caused by a missing explicit `onView` entry. Activation-event changes should be justified from host logs and target-version behavior, not used to mask a module-load exception.
deferred_startup_sequence reqlan rq/extension/startup-performance.rq done Required order: 1. Load the smallest practical host entry. 2. Synchronously register commands and the activity-bar provider; return from `activate`. 3. Assign the activity-bar shell and wait for the post-first-frame `ready` handshake. 4. Start index discovery / sync after `ready`; if the sidebar stays closed, start after a bounded three-second fallback so startup indexing and watchers are not lost. 5. Start the language client after `ready`, with a one-second fallback so language features work when the sidebar stays closed. 6. Report incremental index progress inside the already-painted sidebar. The ready signal and both startup paths are one-shot / idempotent. [activation.background_startup]
development_bundle_freshness reqlan rq/extension/startup-performance.rq done F5 executes `package.json.main` ( `out/extension/main.cjs` ), not TypeScript source. `out/`, generated webview media, and copied syntaxes are gitignored, so launching without a build can run missing or stale artifacts even when source already contains the fix. `.vscode/launch.json` therefore uses a deterministic pre-launch task that invokes the extension build orchestrator directly; root `pnpm run build:ext` delegates to the same script. The task content-fingerprints Langium and physics generation, each webview, packaging media, and extension-host / language-server output; `tsc -b` retains project-reference incrementality. Unchanged artifacts are verified and skipped before the development host opens. Watch mode remains useful during iteration, but concurrent watchers do not restart an already-running extension host or language-server child; stop and start F5 after host / server changes. ["../../.vscode/launch.json"] ["../../.vscode/tasks.json"]
extension_host_process_model reqlan rq/extension/startup-performance.rq One Node extension-host process for the development window is normal; multiple workers are not required for a healthy Reqlan activation. The language server is a separate child process launched only after extension activation reaches `LanguageClient.start()`. Therefore an idle extension host with no Reqlan language-server child is consistent with an earlier module-load / activation failure, not evidence that a worker is missing.
extension_startup_reliability reqlan rq/extension/startup-performance.rq done Reqlan startup must make the activity-bar shell and contributed commands available before optional indexing, parser construction, database initialization, or language-client startup can monopolize the extension host. The implementation contract is [first_paint_contract], [deferred_startup_sequence], [lazy_runtime_dependencies], and [development_bundle_freshness]. Operational diagnosis follows [startup_diagnostics]. [activation.activation_sequence] [activitybar.loading_state] [indexer.nonblocking_index] [build.extension_bundle]
first_paint_contract reqlan rq/extension/startup-performance.rq done The platform spinner ends only after VS Code loads the host module, calls `activate`, the provider registers, and `resolveWebviewView` assigns HTML. Reqlan assigns the lightweight HTML / Svelte shell first. The webview installs its host message listener, mounts, waits for its first animation frame, then posts the one-shot `ready` signal from a queued task. Index discovery / sync waits for that post-paint signal so synchronous parser or database setup cannot race the first visible frame. [activation.first_paint_startup] ["../../packages/extension/webviews/activity-bar/App.svelte"] ["../../packages/extension/webviews/activity-bar/state/app.svelte.ts"] ["../../packages/extension/src/extension/startup-gate.ts"]
invalid_url_activation_failure reqlan rq/extension/startup-performance.rq done The concrete incident failed while requiring `out/extension/main.cjs`, before `activate()` ran: `TypeError: Invalid URL` in `embedPhysicsCoreSource`. Runtime `readFileSync(new URL(..., import.meta.url))` is unsafe when esbuild emits CommonJS for an ES2017 target: `import.meta.url` is unavailable / empty and source-relative assets do not exist beside the bundled entry. The fix generates and imports `PHYSICS_CORE_CLASSIC_SOURCE` at build time instead of resolving the source file at extension runtime. ["../../packages/analytical/src/export/html-export-assets.ts"] ["../../packages/analytical/scripts/generate-physics-core-source.mjs"]
lazy_runtime_dependencies reqlan rq/extension/startup-performance.rq done Base discovery must be cheap: - Constructing `WorkspaceIndex` does not construct Langium / Chevrotain services; services are memoized on first parse. - sql. js asm is not parsed as part of `main.cjs`; both index stores dynamically import the generated vendor bundle when a database first opens. - Export / physics source is generated at build time rather than read via extension-runtime URLs. The host bundle consequently fell from approximately 11. 2 MB to 2. 66 MB; sql. js occupies a separate approximately 8. 0 MB lazy vendor bundle. ["../../packages/analytical/src/index-store/workspace-index.ts"] ["../../packages/analytical/src/index-store/sqlite-store.ts"] ["../../packages/analytical/src/index-store/index-diagnostics-store.ts"] ["../../packages/extension/esbuild.mjs"]
observed_failure reqlan rq/extension/startup-performance.rq Failure signature: - Reqlan contributes its activity-bar container and header buttons from `package.json`, but the Context view remains on VS Code's built-in spinner before the extension-owned " Loading Reqlan … " shell. - Contributed commands may be visible as menu items yet fail with `command 'reqlan.*' not found`. - The extension-host CPU profile can be mostly idle after the failure. This combination means static manifest contributions loaded but the extension module failed before `activate()` registered command handlers and the webview provider.
startup_diagnostics reqlan rq/extension/startup-performance.rq Diagnosis order: 1. Read the development extension host's `remoteexthost.log`; find `ExtensionService#_doActivateExtension reqlan.reqlan-extension`. 2. Distinguish code-loading time, activate-call time, and activate-resolved time. 3. If activation failed, use the first Reqlan stack frame rather than inferring a CPU hang. 4. If manifest UI exists but every command is missing, investigate module load / activation before indexing or webview data. 5. If the extension-owned " Loading Reqlan … " shell appears, provider resolution succeeded; subsequent delays belong to webview bootstrap or index readiness. 6. Confirm `out/extension/main.cjs` is newer than changed source and includes lazy `import("./vendor/sql-asm.cjs")`. CPU-idle profiles do not disprove activation failure: once `require()` throws, the host can remain healthy and mostly idle while Reqlan stays unregistered.
verification_contract reqlan rq/extension/startup-performance.rq done Startup changes are complete only when: - The production extension build succeeds and emits both `out/extension/main.cjs` and `out/extension/vendor/sql-asm.cjs`. - The main bundle does not contain the sql. js asm implementation and imports the vendor lazily. - The lazy vendor can initialize a database. - Extension startup-gate and analytical lazy-service tests pass. - Activity-bar shell paint is visually checked in a newly restarted F5 development host; activation failures are cached for the lifetime of a failed host session. - Requirement analysis resolves the updated startup graph.
code_actions reqlan rq/extension/vsc-primitives.rq
code_completion reqlan rq/extension/vsc-primitives.rq
codelens reqlan rq/extension/vsc-primitives.rq
inlay_hints reqlan rq/extension/vsc-primitives.rq
quick_fixes reqlan rq/extension/vsc-primitives.rq