Cluster detail
reqlan rq/extension
Ideas located under folder reqlan rq/extension.
folder
135 ideas
21 files
| Idea | File | Status | Summary |
|---|---|---|---|
| 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 |
Initialising graph…