Members

IdeaFileStatusSummaryKatz
specpackages/extension/src/analytical_submodule/spec.rqthis folder is the extension host adapter for `@reqlan/analytical`: VS Code wiring ( watchers, Uri helpers, IndexService ) over the shared WorkspaceIndex engine. Index ownership lives in packages / analytical. Product-surface registration lives in ["../extension/register-contributions.ts"]. Export UI lives in ["../export_module"].0.040
import_alphapackages/language/test/fixtures/wildcard-refs/alpha.rqalpha idea0.040
import_betapackages/language/test/fixtures/wildcard-refs/alpha.rqbeta idea0.040
other_thingpackages/language/test/fixtures/wildcard-refs/alpha.rqnot matched by import_*0.040
import_gammapackages/language/test/fixtures/wildcard-refs/gamma.rqgamma idea0.040
import_alphapackages/packages/language/test/fixtures/wildcard-refs/alpha.rqalpha idea0.040
import_betapackages/packages/language/test/fixtures/wildcard-refs/alpha.rqbeta idea0.040
other_thingpackages/packages/language/test/fixtures/wildcard-refs/alpha.rqnot matched by import_*0.040
import_gammapackages/packages/language/test/fixtures/wildcard-refs/gamma.rqgamma idea0.040
basereqlan rq/bases/base.rqA base is a container for ideas, ideasets, and files. It forms the boundary of one ideas graph and is consumed by the CLI and the extension. Marker: a directory is a base only when it owns a `.reqlan` folder ( [app_memory_doc.application_memory] ). No bare workspace folder is treated as a base until the user creates `.reqlan` there ( [create_base_onboarding] ). Aligns with [ontology_base]. Discovery and registry: [base_discovery], [base_registry]. Marker path helpers: [application_memory_impl].0.322
base_configurationreqlan rq/bases/base.rqBase configuration is distinct from, but related to, [extension_configuration]. Optional settings live at `<base>/.reqlan/config.json` ( one config per base ). For an `.rq` file, the applying base is the nearest ancestor that owns `.reqlan`; that base's config applies when present. See [extension_configuration.configuration_location]; resolved by [path_resolve].0.087
base_configuration_providerreqlan rq/bases/base.rqBase-level settings live at `<base>/.reqlan/config.json`. Extension-level settings remain VS Code configuration for the product host.0.040
base_initialisationreqlan rq/bases/base.rqBases are initialised with `<base>/.reqlan/config.json`, `.reqlan/.rqignore` ( gitignore-syntax path filters; see [extension_configuration.configuration_rqignore] ), `.reqlan/.gitignore` ( [base_initialisation_ignore] ), and a sqlite ideas index under `.reqlan` ( [base_ownership] ). [create_base_impl] creates the `.reqlan` marker and seeds a minimal `config.json`, default `.rqignore` ( ["../extension/index-host/index.rq".rqignore_initialisation] ), and `.gitignore` when the base is new. Full install sequencing ( extension welcome vs base seeds vs agent files ): ["../extension/host/installation.rq".base_installation].0.081
base_linkingreqlan rq/bases/base.rqA base may have one-directional relationships with other bases. This follows a subscription model. Bases may be cross subscribed. Unless linked, than bases remain isolated. Base linking is configured in the config file in the base. reqlan directory. - an unlinked child base should sever the contained ideas from the parent base ( i. e. the parent should just see the child as a separate base and child ideas shouldn't be visible, the indexer shouldn't crawl it. ) they should be functionally distinct - bases, distinct from eachother in the system file tree, should be linkeable ( either one way or both ways ) - A linked child base should allow the parent base to see the child's ideas. The indexs should be linked, and the child counts etc should be included in the parents. - A child base should always be able to link to parent base ideas.0.040
base_modesreqlan rq/bases/base.rqA base may be linked to0.040
base_nestingreqlan rq/bases/base.rqBases may nest: any subdirectory that owns its own `.reqlan` is a child base. Parent-base indexing includes only `.rq` files under the parent root that are **not** under any child base root ( [base_discovery] ownership exclusion ). Nested bases appear as siblings in the multi-base registry; the longest-matching base root wins for a given file path ( [implied_context] ).0.060
base_ownershipreqlan rq/bases/base.rqEach base holds its own [ideas_index] store under `<base>/.reqlan/ideas-index.sqlite`. Path keys inside the index are relative to that base root, not the VS Code workspace root. Store path: [application_memory_impl]; per-base engine: [workspace_index] via [base_registry].0.112
create_base_onboardingreqlan rq/bases/base.rqWhen discovery finds **zero** bases under any VS Code workspace folder ( root or child ), the extension prompts the user to create a reqlan base at the workspace-folder root. Do not auto-create `.reqlan`. Command `reqlan.createBase` creates `<folder>/.reqlan/` ( empty directory is a valid marker ) via [create_base_impl], then calls [base_registry] `refresh` so the new marker is registered and the returned [base] descriptor matches discovery ( [refresh_rediscovers_bases] ). With multiple workspace folders and no bases, prompt against the first folder. Headless create-base helper: [create_base_impl] ( also used by CLI `init` ).0.172
implied_contextreqlan rq/bases/base.rqThe **active base** for editor-adjacent surfaces is the longest-matching base root that contains the focused file path. When no file is focused, the last selected base ( Ideas Summary switcher / activity bar ) or the first discovered base is used. Context, local graph, and analysers bind to the active base's index — not a merged global graph. User / explicit pin is a pointer swap only — [active_base_switch]. Core selection: [base_discovery] ( `baseForPath` / `selectDefaultBase` ); editor pin / switch: [editor_index_adapter].0.075
multi_base_environmentreqlan rq/bases/base.rqAnalytical features are multibase aware via [base_registry]: one [ideas_index] / `WorkspaceIndex` per base, isolated catalogs ( no cross-base idea-id collision ). Surfaces list all discovered bases; Ideas Summary and context panes scope to the active / selected base ( [active_base_switch] ). Cross-base reference resolution and merged graphs are out of scope for the first multi-base pass. Headless ( CLI / MCP ) selects one base via [analysis_runtime]; the editor hosts [editor_index_adapter].0.134
no_base_behaviourreqlan rq/bases/base.rqWhen no base is found, the extension should prompt the user to create a base at the workspace-folder root. consideration should be made for the [cli_package], the [extension] and the [analysis_scope] The indexing should not throw errors - it should default to a global tmp index scope the workspace; or current working directory. In the cli; an warning should be shown on first command execution if no base is found.0.040
brandreqlan rq/brand.rqreqlan has a simple brand. Dark rust; and aqua blue pallete. Pink for highlights. Logo is nodular graph / crosshair0.040
extension_brandreqlan rq/brand.rqThe extension uses the brand logo from ["../site/public/logo.svg"]. PNG is used for marketplace, language file icon, activity bar, README, and chat participant surfaces ( Azure Marketplace rejects SVG ). WebP is generated as a raster fallback.0.040
file_iconreqlan rq/brand.rqthe file icon for. rq files should use the reqlan logo.0.040
cli_packagereqlan rq/cli/cli_package.rq`packages/cli` ( `@reqlan/cli` ) is the Clipanion CLI published to npm as the `reqlan` ( and `rq` ) binary. Headless commands go through the core analytical engine ( `@reqlan/analytical/core` / `reqlan-napi` ), not Langium. Entry: ["../../packages/cli/src/main.ts"] via ["../../packages/cli/bin/cli.js"] ( [windows_esm_entry] ). Analysis commands reuse [application_memory] ( `<base>/.reqlan` ) and the analytical ["../indexer/indexer.rq".index] so the CLI shares the ideas index with the extension and MCP.0.214
commandsreqlan rq/cli/cli_package.rqMinimal commands: - `parse <file>` — parse one `.rq` file via the core engine `parseReqlanSource` ( Rust `reqlan-parse` ); print diagnostics or an AST summary ( `--json` for machine output ). - `analyse` / `analyze` — file ( `--file` ), idea ( `--idea` ), workspace completion ( default ), local symbolic ( `--local-symbolic <file>`: outbound + same-file inbound, no index — ["../indexer/indexer.rq".local_symbolic_analysis] ), or broken references ( `--broken-refs` ) via `AnalysisApi`. `--glob` limits `--broken-refs` to a path subset of the base. `--include-comments` adds unresolved ["../language/syntax.rq".comment_reference] sites ( ["../core_analysis/core.rq".test_references] ). - `search <query>` — semantic search via `AnalysisApi.searchRequirements`. Repeatable `--context <path|path#idea|name>` biases ranking by graph hop distance ( ["../core_analysis/search.rq".contextual_search] ). - `click <target>` — compact local context for an idea, `.rq` file, or indexed code file via `AnalysisApi.click` ( ["./click.rq".click] ). No match uses search; more than one match is ranked by session distance. Optional `--session` continues a click session. `--max-backlinks` / `--max-siblings` / `--max-outbound` / `--max-candidates` cap lists. - `export` / `export html` — multi-file HTML site via `NativeAnalysisApi.exportHtml` ( [html_export.html_export] ). `--exclude-secret` omits `*.secret.rq`. `--exclude-ignored` omits paths matched by `.reqlan/.rqignore`. `--url-base` mounts root-relative hrefs per [html_export.html_export_url_base]. `--header-href` / `--header-label` set the topbar home link per [html_export.html_export_header_link]. - `init [directory]` — create a new [base] marker ( `.reqlan` ) at the given path or cwd ( [init] ). - `check` — CI wrapper around ["../core_analysis/core.rq".index] unresolved references ( ["../core_analysis/check.rq".check] ). Reports broken idea, comment, file, and import references ( ["../core_analysis/check.rq".check_unresolved_imports] ). Skips lines after ["../language/syntax.rq".comment_reference_ignore]. Repeatable `--glob <pattern>` limits the recursive scan to files that match any pattern ( ["../core_analysis/check.rq".check_glob_patterns] ). One `--glob` selects the same files as one path glob. A positional file outside those patterns is checked as that file. A positional directory outside those patterns is not walked. `--json` / `--pipe` select machine output. Exit status is 1 when the command finds issues. Issue order groups shared missing targets ( ["../core_analysis/check.rq".check_order_by_target] ). `--wildcard-zero` / `--wildcard-one` are `warn` ( default ), `error`, or `off` ( ["../core_analysis/check.rq".check_wildcard_zero], ["../core_analysis/check.rq".check_wildcard_one] ). Repeatable `--skip-target <glob>` omits issues whose missing target matches the glob ( ["../core_analysis/check.rq".check_skip_targets] ). `--skip-gitignored-targets` omits file-reference issues whose missing target is gitignored ( ["../core_analysis/check.rq".check_skip_gitignored_targets] ). - `barrel <file>` — split a large `.rq` page into one file per idea and a container import page ( ["../extension/host/features-commands.rq".barrel_page] ). - `diff [<from>] [<to>]` — compare ideas between two git revisions ( ["./diff.rq".diff] ). No arguments compare pending `.rq` edits with `HEAD`, or `HEAD~1` with `HEAD` when those edits are absent. `--verbosity` is `summary` ( default ), `references`, or `text`. `--json` prints the same rows as MCP. Extra args from `pnpm run`: [pnpm_extra_args].0.760
watchreqlan rq/cli/cli_package.rqThe cli should be able to watch a base and maintain the index as files change.0.040
scopereqlan rq/codestyle/typescript.rqTypeScript package standards for `packages/extension` ( npm `reqlan-extension` ), especially UI state. Complements [development_core.rust_mindset] and [extension_architecture.state_machine_mindset]. Webview inventory: [webview_doc.webview]. Package role: [core_architecture.extension_package].0.040
elevator_pitchreqlan rq/constitution.rqBuild high quality, verifiable, explainable systems, quickly Site landing: ["./site/site.rq".elevator_pitch_section]0.056
general_purposereqlan rq/constitution.rqThe language should work in any stack. And ideally, even in non-software development environments.0.040
inspirationreqlan rq/constitution.rqThis project draws upon ideas from the following fields: - LLMS - Software development - Obsidian / Personal Knowledge Management systems. - Industrial Control Engineering - Ontology based business information systems0.040
llm_firstreqlan rq/constitution.rqThe language should be designed to be easy to use with llms. It should be support token minimisation.0.040
mission_statementreqlan rq/constitution.rqThis project offers a structred semantic framework for supporting people working with llms to document their semantic requirements as code; and provide ergonomic consumption and definition of them.0.040
scopereqlan rq/constitution.rqThe scope of these requirements spans the entire project, including the language itself, the developer-user tooling, and the reqlan-developer environment.0.040
simplicityreqlan rq/constitution.rqThe language should be simple to understand and use, and offer flexibility in the syntax for minimised friction and bp.0.040
supply_chainreqlan rq/constitution.rqThe supply chain for this project should be open and transparent, minimising risk and immature dependencies.0.095
vsc_firstreqlan rq/constitution.rqThe language should be designed to be easy to use with vscode.0.040
base_containersreqlan rq/core-architecture.rqIdeas are organised in [bases]; each base holds the [ideas_index] store under its `.reqlan` application memory. Discovery and nesting: ["./bases/base.rq".base], ["./bases/base.rq".base_nesting].0.040
cli_packagereqlan rq/core-architecture.rq`packages/cli` ( `@reqlan/cli` ) is a Clipanion CLI over the core analytical engine ( `@reqlan/analytical/core` ) for parse, analyse, search, and export. Entry: [cli_main]. Binary name `reqlan` ( alias `rq` ). Published to npm with language, analytical, and MCP per [package_versioning] and [distribution.version_management].0.094
extension_packagereqlan rq/core-architecture.rq`packages/extension` ( npm `reqlan-extension` ) is the editor product per [distribution.extension_package]. It registers `.rq` language support, TextMate grammars, starts the language client, and owns activity bar, Ideas Summary, chat, skills, and mutation hooks. Ideas index engine lives in [analytical_package] / [indexer]; the extension only hosts a thin VS Code adapter ( [editor_index_adapter] ) for watchers and UI. Host entry: [extension_main]. LSP process: [lsp_rust.language_server_rust]. Node fallback: [language_server_main]. Depends on [language_package] and [analytical_package]. Follows [extension_architecture.event_driven] and [extension_architecture.state_machine_mindset] for JS state; webview UI standards in ["./codestyle/typescript.rq".ui_state_management]. This is the one Marketplace / Open VSX shippable; see [package_versioning].0.128
extension_surfacesreqlan rq/core-architecture.rqProduct surfaces on [extension_package] nest under [extension_hub.extension_domains]: - Host lifecycle: [extension_hub.host_lifecycle] - Language surface: [extension_hub.language_surface] - Index host: [extension_hub.index_host] ( [graph_analysers], editor adapter ) - Local context ( activity bar + context model ): [extension_hub.local_context] ( [activitybar.activity_bar], [context_scope_doc.context_scope] ) - Workspace summary ( Ideas Summary ): [extension_hub.workspace_summary] ( [ideas_summary_doc.ideas_summary] ) - Presentation ( shared webview + graph lib ): [extension_hub.presentation] ( [webview_doc.webview] ) - Agent surface: [extension_hub.agent_surface] ( [chat_participant_doc.chat_participant], [skills_and_mcp] ) - Graph mutation: [extension_hub.graph_mutation] ( [mutation_hooks] ) - Export surface: [extension_hub.export_surface] ( [export_doc.export_webview] )0.047
grammar_and_parserreqlan rq/core-architecture.rqThe language server parses with `reqlan-parse` ( [lsp_rust.language_server_rust] ). Do not switch the language to tree-sitter. Main `.rq` grammar file: [reqlan_grammar]. Comment-token grammar for `rq:[…]` in non- `.rq` sources: [comment_grammar]. `langium generate` still builds host AST modules and TextMate JSON per [development_build.build_prepare]. The checked-in TextMate grammar paints the editor before semantic tokens. Syntax requirements that the grammar must satisfy live in [syntax]; conceptual units in [ontology.idea], [ontology.ideaset], [ontology.reference], [ontology.import_statement]. Host services stay in [language_module]. The language server does not load them.0.172
hierarchy_of_truthreqlan rq/core-architecture.rqAlign with [development_core.hierarchy_of_requirements]: - User request trumps these requirements; these requirements trump current implementation. - Language concepts: [ontology]; syntax rules: [syntax]. - Package seams and process topology: this file ( [workspace_packages], [language_runtime] ). - Editor UI and host contracts: [extension_hub.extension_domains] ( [product_map] ). - Distribution and publishables: [distribution]; internal vs shippable versioning: [package_versioning].0.040
ideas_indexreqlan rq/core-architecture.rqThe ideas index is built and maintained by the [indexer] in [analytical_package]. Path: Rust parse / extract → SQLite via [workspace_index] ( [rust_port.analytical_rust_port] ). Application memory: each [bases.base] holds SQLite under `<base>/.reqlan/` ( shared by extension, [cli_package], and [mcp_package] ) — see ["./extension/index-host/index.rq".application_memory]. Multi-base: a BaseRegistry owns one [workspace_index] per discovered base; the extension adapter routes file events to the owning base. In the editor, [editor_index_adapter] watches `**\*.rq` and forwards changes to the owning base's [workspace_index]; it serves UIs, commands, chat, and analysers. The Rust language server reads the same store for catalogs, rename, and find-references ( [lsp_rust.language_server_rust] ). Headless ( MCP / CLI ) uses [analysis_runtime] ( nearest base containing cwd when several exist ). Capability requirements: [indexer.index_ideas], [indexer.index_technology], and sibling analysers in that file. Triggers: [indexer.triggers] and ["./extension/index-host/index.rq".idea_index_triggers].0.100
language_packagereqlan rq/core-architecture.rq`packages/language` ( `@reqlan/language` ) is the canonical language definition. It owns Langium grammars, generated AST and parser, scoped linking, validators, and LSP service providers. Public DI entry is [language_module] via `createReqlanServices`. Consumers: [analytical_package] ( native index / analysis via napi ), [extension_package] ( LSP ). Published to npm as a library dependency of [analytical_package]; not Marketplace-published. See [distribution.version_management] and [package_versioning].0.105
language_runtimereqlan rq/core-architecture.rqIdeaset (language_runtime)0.050
language_serverreqlan rq/core-architecture.rqThe language server is the `reqlan-lsp` binary ( [lsp_rust.language_server_rust] ). The extension launches it over stdio ( [extension_main] ). It parses open `.rq` buffers for definition, completion, semantic tokens, inlays, document links, and validation. It reads the ideas index for workspace names. It does not keep a syntax tree for every file. A Node Langium process remains only when `reqlan.languageServer.engine` is `node`, or when the binary is missing ( [language_server_main] ). Product expectation for LSP navigation and validation: [extension_scope.lsp_support].0.167
mcp_packagereqlan rq/core-architecture.rq`packages/mcp` ( `@reqlan/mcp` ) is a stdio MCP server over the analytical analysis API — no VS Code host required. Entry: [mcp_main] via ["../packages/mcp/bin/mcp.js"]. Binary name `reqlan-mcp`. Used by Cursor and other MCP clients per [chat_participant_doc.mcp] and [skills_and_mcp.mcp_tools]. Search and retrieval use ["./extension/agent/skills-and-mcp.rq".mcp_click_retrieval] ( `click` ) only. npm `mcpName` is `io.github.littletuna4/reqlan` for MCP Registry ownership checks ( ["../packages/mcp/package.json"] ). Published to npm with language, analytical, and CLI per [package_versioning] and [distribution.version_management] ( `mcp/v*` ). Windows ESM entry uses `pathToFileURL` like ["./cli/cli_package.rq".windows_esm_entry].0.109
monoreporeqlan rq/core-architecture.rqThe workspace is a pnpm monorepo ( `packages\*`, extension webviews, and `site` ) per ["../pnpm-workspace.yaml"] and [development_core.pnpm]. TypeScript project references build in order language → analytical → mcp → cli → extension per ["../tsconfig.build.json"]. Living requirements for the product live in this `reqlan rq` folder. Root orchestration ( Langium generate, package builds, Cursor skill sync ) lives in ["../package.json"]. Why libraries are separate packages ( and how Changesets sees them ): [package_versioning].0.040
package_versioningreqlan rq/core-architecture.rqSeparate workspace packages exist for build isolation and reuse — not because each ships to every channel. [language_package] and [analytical_package] are leaf libraries shared by LSP, index, MCP, and CLI; they need their own package boundaries for TypeScript project refs and a single grammar / index ownership point. Release-driving channels: - Marketplace / Open VSX: [extension_package] ( `ext/v*` ) - GitHub Pages: [site_package] ( `site/v*` ) - npm registry: [language_package], [analytical_package], [cli_package], and [mcp_package] ( `language/v*`, `analytical/v*`, `cli/v*`, `mcp/v*` ) via Changesets `changeset publish` Changesets config is [changeset_config]. [language_package] and [analytical_package] stay in the Changesets graph so a lib change can bump their versions and patch dependents via `updateInternalDependencies: "patch"` ( including the extension, CLI, and MCP ). Extension webview folders may be private pnpm members ( e. g. `@reqlan/ideas-summary-webview` ) so Vite / Svelte can own deps; they bundle into extension media and are not Changesets publish targets. Activity-bar UI is not a separate package. json product. Contributors record release intent with a changeset on publishable packages when user-facing behaviour changes; see [distribution.version_management].0.139
product_mapreqlan rq/core-architecture.rqIdeaset (product_map)0.050
runtime_topologyreqlan rq/core-architecture.rqThe editor and the index do not share one process. - LSP process: `reqlan-lsp` for live `.rq` editing ( [lsp_rust.language_server_rust] ). - Analytical [workspace_index] ( extension host via [editor_index_adapter], MCP / CLI via [analysis_runtime] ): full-workspace graph for tables, local graph, chat, MCP. Editor ↔ extension host: VS Code APIs and webview postMessage. Editor ↔ LSP: vscode-languageclient over stdio. The language server reads the ideas index directly. Host catalog notifications are optional. Stack sketch: [development_core.stack].0.040
scopereqlan rq/core-architecture.rqThese requirements describe the cross-package system architecture of the reqlan monorepo: language definition, language server, ideas index, editor product, and companion tools. They are distinct from [extension_scope.scope], which bounds only the VS Code extension and LSP product surface. Language concepts live in [ontology]; syntax truth lives in [syntax]; editor module contracts live under extension / module. Grouped as [workspace_packages], [language_runtime], and [product_map].0.040
site_packagereqlan rq/core-architecture.rq`site` is the marketing / docs Next. js site per [distribution.site_package]. It is off the language-service and ideas-index path. Release-driving publishable alongside [extension_package]; see [package_versioning].0.058
workspace_packagesreqlan rq/core-architecture.rqIdeaset (workspace_packages)0.050
analysersreqlan rq/core_analysis/core.rqQueries over [index]: list, file-related, local graph, completion, deprecation, git dates, [test_references]. [graph_analysers]0.078
analysis_scopereqlan rq/core_analysis/core.rq`@reqlan/analytical` — shared index + analysis API. Hosts: CLI, [extension], MCP. Native rewrite: [rust_port.analytical_rust_port]. [parse] [index] [search] [export] [analysers] [runtime]0.087
checkreqlan rq/core_analysis/core.rqreqlan check is a analysis tool surfaced by the cli. Intended for use in CI. see ["./check.rq".check] ["./check.rq".check_order_by_target] ["./check.rq".check_wildcard_sparse] ["./check.rq".check_wildcard_zero] ["./check.rq".check_wildcard_one] ["./check.rq".check_skip_targets] ["./check.rq".check_skip_gitignored_targets] ["./check.rq".check_meta_implementation]0.040
exportreqlan rq/core_analysis/core.rqSnapshot → html / md / json / csv. [export_doc.export_pipeline] [html_export.html_export]0.051
indexreqlan rq/core_analysis/core.rqIdeas / edges → SQLite ( `<base>/.reqlan` ). [indexer.index]0.331
modulesreqlan rq/core_analysis/core.rqIdeaset (modules)0.040
parsereqlan rq/core_analysis/core.rqLex + parse `.rq` for the index path ( not LSP ). [parser_lexer] → extract in [index].0.051
runtimereqlan rq/core_analysis/core.rqHeadless facade: `createAnalysisRuntime` / `AnalysisApi`. [core_arch.analysis_runtime]0.078
searchreqlan rq/core_analysis/core.rqRank ideas: fuzzy, contextual, semantic. [search_doc.search]0.051
html_export_attribute_pagesreqlan rq/core_analysis/html_export.rqHtml 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.0.078
html_export_attributes_indexreqlan rq/core_analysis/html_export.rqHtml 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.0.089
html_export_cluster_pagesreqlan rq/core_analysis/html_export.rqHtml 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.0.080
html_export_code_reference_pagesreqlan rq/core_analysis/html_export.rqHtml export should generate dedicated pages for outbound file_reference targets and inbound comment_link code files 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. Comment-linked files: ["../indexer/indexer.rq".index_code_files].0.151
html_export_file_pagesreqlan rq/core_analysis/html_export.rqHtml 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.0.119
html_export_graph_animationreqlan rq/core_analysis/html_export.rqLive physics in the HTML export should match Ideas Summary animatePhysics: continuous damped semi-implicit Euler using the defaults from ["../../packages/extension/webviews/shared/graph/physics-core.js"] ( same module as ["../../packages/extension/webviews/shared/graph/graph-physics.ts"] ), inlined in ["../../crates/reqlan-export/assets/app.js"]. A Live physics toggle pauses and resumes the same simulation state ( default off ); when off, the graph batch-settles then sleeps. Batch settle must remain responsive per [html_export_graph_background_load] — yield between chunks rather than freezing the page for large graphs. 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.0.093
html_export_graph_interactionreqlan rq/core_analysis/html_export.rqThe 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. When ["../extension/workspace-summary/ideas_summary/graphical_graph.rq".file_treatment_toggle] is compound: file bounding boxes are hittable — drag moves member nodes together; clicking the underlined title navigates to the hosting file page ( when `hostFilePageUrl` / `pageUrl` is present ). When linked: synthetic file ideaset nodes are dragged and clicked like other leaves. Related: ["../extension/workspace-summary/ideas_summary/graphical_graph.rq".file_treatment_toggle], ["../extension/workspace-summary/ideas_summary/graphical_graph.rq".webview_export_graph_parity].0.085
html_export_graph_labelsreqlan rq/core_analysis/html_export.rqHTML export canvas graphs implement shared [graph_labels] ( full names, no ellipsis truncation ). [html_export_graph_label_modes] [html_export_graph_label_auto]0.062
html_export_graph_layoutreqlan rq/core_analysis/html_export.rqThe 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/extension/webviews/shared/graph/physics-core.js"], inlined into the export asset ["../../crates/reqlan-export/assets/app.js"].0.121
html_export_graph_linksreqlan rq/core_analysis/html_export.rqGraph 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. Hosting-file linked nodes ( ["../extension/workspace-summary/ideas_summary/graphical_graph.rq".file_treatment_toggle] linked mode ) prefer `hostFilePageUrl` stamped during graph URL enrichment ( file / code-file page for the idea's `fileUri` ), falling back to a member idea `pageUrl` when file pages are disabled.0.117
html_export_graph_metadatareqlan rq/core_analysis/html_export.rqGraph 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.0.062
html_export_graph_pagereqlan rq/core_analysis/html_export.rqHtml 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 ( explicit AST ideasets only — distinct from hosting-file treatment ). Hosting `.rq` files ( implicit ideasets ) use a Files `<select>` — hidden / compound / linked — with option tooltips, per ["../extension/workspace-summary/ideas_summary/graphical_graph.rq".file_treatment_toggle] ( parity with Ideas Summary ). Compound mode draws hittable / draggable bounding boxes with clickable titles; linked mode adds synthetic ideaset nodes that navigate via `hostFilePageUrl` / `pageUrl`. Wildcard fan-out edges ( `wildcard_reference` ) are visible by default with a " Wildcard refs " chip ( same label / default as Ideas Summary ); turning it off client-filters those edges and draws them dotted when on — see ["../extension/workspace-summary/ideas_summary/graphical_graph.rq".wildcard_refs_toggle] and ["../extension/workspace-summary/ideas_summary/graphical_graph.rq".webview_export_graph_parity]. 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_background_load] [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]0.165
html_export_graph_subjectreqlan rq/core_analysis/html_export.rqWhen 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.0.062
html_export_idea_pagesreqlan rq/core_analysis/html_export.rqHtml 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.0.081
html_export_internal_linksreqlan rq/core_analysis/html_export.rqEvery 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. Overview status / tag rollups and list-table facet cells follow [html_export_overview_links]. On the printable report, same-page idea links use those in-page anchors per [html_export_print_in_page_anchors]. 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. A link `[idea.attribute]` opens that attribute on the idea page. See ["../language/syntax.rq".attribute_namespacing]. A link to an idea shows that idea's body in a tooltip per [html_export_idea_tooltips].0.152
html_export_list_viewsreqlan rq/core_analysis/html_export.rqHtml 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. Navigable facet cells in those tables ( status, tags, paths, attribute values, cluster labels / kinds ) should be links to the matching detail page or to a list page with the matching column filter applied via [html_export_overview_links]. Long lists that sit above other page content follow [html_export_scrollable_lists]. The ideas index count columns follow [html_export_ideas_ref_columns]. Column hide, resize, and selector chrome follow [html_export_table_columns]. [html_export_ideas_ref_columns] [html_export_table_columns] [html_export_attributes_index] [html_export_file_pages] [html_export_code_reference_pages] [html_export_scrollable_lists] [html_export_overview_links]0.121
html_export_multi_filereqlan rq/core_analysis/html_export.rqHtml 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.0.067
html_export_printable_pagesreqlan rq/core_analysis/html_export.rqHtml 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]. Idea cards on the printable report follow [html_export_print_idea_cards], [html_export_print_in_page_anchors], [html_export_print_all_attributes], and [html_export_print_button]. Stored idea body spaces on print pages follow [html_export_print_body_whitespace]. Ordering of cards on the printable report is tracked by [html_export_print_order_by].0.174
html_export_runtime_modesreqlan rq/core_analysis/html_export.rqHtml 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.0.079
html_export_scrollable_listsreqlan rq/core_analysis/html_export.rqIn 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.0.117
html_export_searchreqlan rq/core_analysis/html_export.rqThe 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.0.067
port_phasesreqlan rq/core_analysis/rust_port.rqIdeaset (port_phases)0.040
searchreqlan rq/core_analysis/search.rqSearch over the requirement graph — find ideas by name, body, tags, and related signals. Surfaces: [fuzzy_search], [file_search], [contextual_search], [semantic_search], [katz_search]. Consumed by CLI `reqlan search`, MCP / chat tools, Ideas Summary, and the activity-bar search pane. Rust ranking engine: ["./rust_port.rq".search_rust].0.046
semantic_searchreqlan rq/core_analysis/search.rqBroader token / edge-label search over candidates through [native_analysis_api]. Prefer [fuzzy_search] for fast name-oriented lookup with separator-insensitive matching.0.092
build_preparereqlan rq/development/build.rqCopy TextMate grammars from the language package into extension syntaxes. Sync Cursor agent skills from extension sources into `.cursor/skills`. The orchestrator caches `build:syntaxes` independently and always runs the external Cursor-skill sync before webview and host bundling.0.063
extension_buildreqlan rq/development/build.rqProduction builds for the VS Code extension are orchestrated by [extension_build_script]. Run from the extension package: `pnpm run build` or `node scripts/build.mjs`. Workspace-wide builds also run langium generation and sibling packages via the root `pnpm run build`. Local and F5 builds use [incremental_extension_build]; VSIX prepublish uses the forced path.0.040
extension_bundlereqlan rq/development/build.rqThe extension host ( `src/extension/main.ts` ) and language server ( `src/language/main.ts` ) are bundled with esbuild per [extension_esbuild]. The host-matching core engine `.node` is staged under `native/` by [extension_host_native_stage] for F5 and for per-target VSIX packaging; it is not inlined into `main.cjs`. Output: CommonJS `.cjs` files under `packages/extension/out/`. `vscode` remains external; a small `Object.groupBy` polyfill is injected for older Node runtimes.0.046
extension_media_buildreqlan rq/development/build.rqExtension logo assets are generated by ["../../packages/extension/scripts/generate-media.mjs"] from ["../../site/public/logo.svg"]. PNG ( `media/logo.png` ) is tracked in git and used as the packaged icon for marketplace, language file icon, and activity bar ( Azure Marketplace rejects SVG ). WebP and SVG copies remain build outputs ( gitignored ); regenerate via `build:media` when the source logo changes. Invoked as `pnpm run build:media` at the start of [extension_build_script].0.040
extension_readme_buildreqlan rq/development/build.rqGenerate `packages/extension/README.md` from [extension_readme_script] and README. template. md before VSIX packaging. Marketplace links are resolved from ["../../scripts/phonebook.ts"]; changelog body comes from packages / extension / CHANGELOG. md ( Changesets output ). Invoked as `pnpm run build:readme` at the start of [extension_build_script]. Requirement: ["../distribution/distribution.rq".extension_readme].0.048
extension_typecheckreqlan rq/development/build.rqExtension TypeScript sources are checked with `tsc -b tsconfig.json` before bundling. `noEmit: true` — compilation output comes from esbuild, not tsc.0.040
scopereqlan rq/development/build.rqextension build steps for local development and CI0.040
webview_buildreqlan rq/development/build.rqSvelte webview UI is bundled with Vite per [development_core]. Configs: [ideas_summary_vite_config], [activity_bar_vite_config], [onboarding_vite_config] Output lands in `packages/extension/media/webviews/` for the extension host to load. The onboarding webview inlines ["../../packages/extension/templates/thanks-for-installing.template.rq"] via Vite `?raw` for the in-page language example; the template source stays excluded from the VSIX. Requirement: ["../extension/host/onboarding/page-thanks-for-installing.rq".installation_event]. Watch mode during development: `bash scripts/watch.sh` vite `--watch` alongside tsc and esbuild.0.046
code_comment_referencesreqlan rq/development/core.rqcode comments should include reference to their respective rq references.0.054
current_link_iconsreqlan rq/development/core.rqSlugs are defined on each link in ["../phonebook.json"]: - `site` → mdi / web - `vsc` → simple-icons / visualstudiocode - `openvsx` → simple-icons / vscodium ( proxy; no Open VSX slug in Simple Icons ) - `github` → simple-icons / github - `discord` → simple-icons / discord - `github-sponsors` → simple-icons / githubsponsors - `email` → mdi / email-outline - `sticker-form` → mdi / sticker-emoji Package entries under `packages` all use simple-icons / npm: - `language`, `analytical`, `cli`0.057
hierarchy_of_requirementsreqlan rq/development/core.rquser request trumps the ["../../reqlan rq"] requirements, and ["../../reqlan rq"] trump the current implementation.0.045
iconify_stackreqlan rq/development/core.rqIcons use Iconify offline — bundled at build time, not fetched from a CDN at runtime. Icon data comes from npm packages listed under the `icons` key in ["../phonebook.json"] per [phonebook_reqs.phonebook_icons].0.080
modulurisationreqlan rq/development/core.rqfiles should be small0.040
pnpmreqlan rq/development/core.rqMust use pnpm for all js package management across the monorepo ( packages, extension, site ).0.045
rust_mindsetreqlan rq/development/core.rq- code should be complete - nulls should be safe and deliberate - fallbacks should be used sparingly - incomplete code should be marked as such - comments should describe final desired state of the code, not the current state; they should be timeless. - tests should be local0.100
scopereqlan rq/development/core.rqthese requirements describe the actual development of the reqlan language and tooling itself0.040
stackreqlan rq/development/core.rq- Requirements are documented with reqlan in the ["../../reqlan rq"] folder. - Language grammar truth is ["../../reqlan rq/language/syntax.rq"]; the default editor LSP is Rust ( `reqlan-lsp` ). - Langium in `@reqlan/language` remains a dual-parser oracle and the transitional `node` engine fallback. - VS Code extension host is in ["../../packages/extension"]; open-buffer features run in `crates/reqlan-lsp`. - vscode webviews are implemented with svelte - Extension build pipeline is documented in ["./build.rq"]0.045
succinctreqlan rq/development/core.rqmaximised meaning to character ratio.0.040
testingreqlan rq/development/core.rqtests should have comment references to the requirements they serve to test. per ["../extension/language/comment-references/functional-code-comment-references.rq"]0.061
deployment_flowreqlan rq/distribution/distribution.rqOn push to main, the release workflow first completes ["./distribution.rq".ci_gate]. If pending changesets remain, it then applies them with `pnpm changeset version`. This bumps package. json for each affected package and writes changelogs. ["../../scripts/prepare-native-packages.mjs"] then copies the `@reqlan/analytical` version onto each platform package ( [version_management] ). The workflow commits the result, creates annotated tags for every bumped publishable package, and pushes the commit and tags back to main. Release tags use `site/v{version}`, `ext/v{version}`, `language/v{version}`, `analytical/v{version}`, `cli/v{version}`, and `mcp/v{version}` where `{version}` is the semver from that package's package. json. Deployment is tag-driven for every channel per ["./distribution.rq".release_tagging]; after ["./distribution.rq".ci_gate], the release workflow only versions and tags. GitHub Actions pushes with the default `GITHUB_TOKEN` do not trigger other workflows, so site and npm deploy are also invoked directly from the release workflow. Optional `RELEASE_PAT` allows tag pushes to trigger downstream workflows for manual reruns and external CI. Recursive runs are prevented by skipping the release workflow for release commits. Tag patterns and downstream deploy workflows follow ["./distribution.rq".release_tagging]. The implementation lives in ["../../.github/workflows/release.yml"].0.224
extension_readmereqlan rq/distribution/distribution.rqThe VSIX package must include a README for the Marketplace and Open VSX listings. Contact, Discord, sponsorship, and repository links come from [phonebook_reqs.phonebook] via ["../../scripts/phonebook.ts"] per [phonebook_reqs.extension_readme_links]. Release notes are appended from ["../../packages/extension/CHANGELOG.md"], which Changesets maintains per [version_management]. Generated during extension build from ["../../packages/extension/README.template.md"] by ["../../packages/extension/scripts/generate-readme.ts"] per ["../development/build.rq".extension_readme_build].0.059
release_taggingreqlan rq/distribution/distribution.rqDeployment is tag-driven rather than commit-driven for every publishable channel. Tags are created automatically by ["./distribution.rq".deployment_flow], not manually. Site deployments are triggered by Git tags matching `site/v*` via ["./distribution.rq".site_distribution]. VS Code extension publishing is triggered by Azure DevOps tags matching `ext/v*` via ["./distribution.rq".extension_distribution] and ["./distribution.rq".openvsx_registry]. npm publishing is triggered by Git tags matching `language/v*`, `analytical/v*`, `cli/v*`, or `mcp/v*` via ["./distribution.rq".npm_distribution]. Platform native packages ride `analytical/v*` ( same version as `@reqlan/analytical` ); they are not a separate tag prefix. The tag suffix after the channel prefix ( `site/v`, `ext/v`, `language/v`, `analytical/v`, `cli/v`, `mcp/v` ) equals the package. json version at that tag.0.121
root_readmereqlan rq/distribution/distribution.rqThe GitHub repository README is the primary repo lander per ["./landers.rq".landers]. Site, marketplace, repository, Discord, sponsorship, and contact links come from [phonebook_reqs.phonebook] via ["../../scripts/phonebook.ts"] per [phonebook_reqs.root_readme_links]. Generated from ["../../README.template.md"] by ["../../scripts/generate-root-readme.ts"].0.046
site_distributionreqlan rq/distribution/distribution.rqGitHub Pages deployment runs only when an `site/v*` tag is pushed. Tags are created by ["./distribution.rq".deployment_flow]; the site workflow does not deploy on ordinary commits. The static build embeds `/spec` via ["../site/site.rq".spec_html_export], which needs the host `reqlan-napi` binary. The site workflow therefore builds and stages the host native engine ( `scripts/stage-host-native.mjs` with `REQLAN_FORCE_NATIVE_BUILD=1` ) before `pnpm run build`. The implementation lives in ["../../.github/workflows/deploy-site.yml"].0.118
site_packagereqlan rq/distribution/distribution.rqThe static site lives in site / with npm package name `site`. Its package. json version identifies site releases for tagging.0.079
stopgapreqlan rq/distribution/distribution.rqStopgap distribution is at https://marketplace.visualstudio.com/manage/publishers/reqlan0.040
workflow_deduplicationreqlan rq/distribution/distribution.rqExtension publish automation should have a single authoritative workflow to avoid duplicate marketplace releases. Azure DevOps is the authoritative extension publishing workflow per ["./distribution.rq".extension_distribution] and ["./distribution.rq".openvsx_registry]. The site remains deployed by GitHub Actions per ["./distribution.rq".site_distribution]. npm packages are published by GitHub Actions per ["./distribution.rq".npm_distribution]. Versioning and tag creation are owned by GitHub Actions per ["./distribution.rq".deployment_flow].0.040
landersreqlan rq/distribution/landers.rqThe reqlan extension has the following entry points: - the vsc marketplace and open vsx marketplace via the ["../../packages/extension/README.template.md"] - npm packages via ["../../packages/language/README.template.md"], ["../../packages/analytical/README.template.md"], ["../../packages/cli/README.template.md"], and ["../../packages/mcp/README.template.md"] - the site. - the github repository via the ["../../README.template.md"] - the GitHub sponsor button via [github_funding] - landers must keep cross references up to date via the ["../../scripts/phonebook.ts"] [phonebook]0.046
docs_reqsreqlan rq/docs/docs.rqProject requirements should all be documented in the the reqlan rq folder of this repo.0.040
export_docs_tagreqlan rq/docs/docs.rqThe " @ docs " tag should be used to mark files as included in the docs.0.040
chat_participantreqlan rq/extension/agent/chat-participant.rqthe chat participant module should expose @ reqlan in vscode chat. it should consume analysis functions from the analytical submodule rather than duplicating graph logic. slash commands should use the rq- prefix only in chat, e. g. rq-search, rq-context, rq-graph, and rq-related for the active file.0.052
chat_participant_completionreqlan rq/extension/agent/chat-participant.rqfile and requirement references should be code completed in the chat window via # file and # requirement language model tools.0.040
chat_participant_skillsreqlan rq/extension/agent/chat-participant.rqthe chat participant must not have duplicate skills.0.040
mcpreqlan rq/extension/agent/chat-participant.rqCursor and other non-VS-Code clients use the MCP server ( `@reqlan/mcp` ). Search and retrieval on that server use ["./skills-and-mcp.rq".mcp_click_retrieval] only. Reference checks use ["./skills-and-mcp.rq".mcp_check]. The MCP tool set is not a 1: 1 wrap of every @ reqlan chat slash command. Published to npm per ["../../distribution/distribution.rq".npm_distribution]. Cursor project config lives in ["../../../.cursor/mcp.json"] and skills sync to ["../../../.cursor/skills"] via scripts / sync-cursor-ai. mjs.0.114
ai_add_to_contextreqlan rq/extension/agent/features-ai.rqA command palette action ( e. g. ctrl + p: add to context ) should add selected requirements to the ai conversation context.0.066
ai_apireqlan rq/extension/agent/features-ai.rqshould use the chat participant api. which should be in a module. that consumes analysis functions from other modules. https://code.visualstudio.com/api/extension-guides/ai/chat0.040
ai_build_requirementreqlan rq/extension/agent/features-ai.rqA command palette action ( e. g. ctrl + p: build new requirement ) should create a requirement from user or ai-provided intent.0.048
ai_integrationreqlan rq/extension/agent/features-ai.rqThe extension should integrate with ai workflows via command palette actions and mcp tools. Ai-facing features should prioritise token minimisation and focused context over full-graph dumps. Command palette actions use the Reqlan category; chat slash commands and skills use the rq- prefix.0.102
ai_write_planreqlan rq/extension/agent/features-ai.rqA command palette action ( e. g. ctrl + p: write plan ) should draft or update an @ plan attribute for the selected idea.0.048
chat_skill_namingreqlan rq/extension/agent/skills-and-mcp.rqCursor 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.0.059
cursor_skills_installreqlan rq/extension/agent/skills-and-mcp.rqA 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. Prefer the workspace `packages/mcp/bin/mcp.js` when present; otherwise `npx -y @reqlan/mcp` from ["../../distribution/distribution.rq".npm_distribution]. Place in install sequencing ( workspace agent files, not `.reqlan` ): ["../host/installation.rq".workspace_agent_files].0.063
skill_namespace_referencesreqlan rq/extension/agent/skills-and-mcp.rqbackslash references to skills based on the namespace should be supported.0.040
extension_domainsreqlan rq/extension/extension.rqIdeaset (extension_domains)0.072
activationreqlan rq/extension/host/activation.rqVS 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"].0.064
activation_eventsreqlan rq/extension/host/activation.rqActivation 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.0.056
activation_sequencereqlan rq/extension/host/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.0.077
analytical_submodule_activationreqlan rq/extension/host/activation.rqAnalytical 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].0.060
background_startupreqlan rq/extension/host/activation.rqStartup 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.0.113
onboarding_checkreqlan rq/extension/host/activation.rqPost-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 schedules ["../../../packages/extension/src/extension/open-thanks-for-installing.ts"] after the activity-bar paint gate or 400 ms ( ["./startup-performance.rq".webview_claim_race] ). 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. Command-palette Show Onboarding remains immediate.0.087
event_drivenreqlan rq/extension/host/architecture.rqthe application should be event driven.0.085
state_machine_mindsetreqlan rq/extension/host/architecture.rqThe application should be designed as a collection of state machines. The core index lifecycle FSM lives in the Rust runtime ( ["../../core_analysis/rust_port.rq".native_bridge] ); Svelte webview UI follows [typescript_codestyle.ui_state_management] and [typescript_codestyle.zustand_boundary] ( runes AppState, no zustand ). No JS zustand stores remain.0.071
ai_namingreqlan rq/extension/host/configuration.rqCommand 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.0.048
configuration_import_rootsreqlan rq/extension/host/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 `importRootAlias` from ["../../../packages/analytical/src/core/defaults.json"] 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]. Comment references in source files use the same mappings: ["../language/comment-references/functional-code-comment-references.rq".comment_reference_import_root_alias]. Schema: [configuration_schema_file]. Applying file discovery: [configuration_location]. Editor completion of aliased import paths: ["../language/syntax/features-syntax.rq".code_completion].0.167
configuration_locationreqlan rq/extension/host/configuration.rqAn 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.0.190
decomposereqlan rq/extension/host/features-commands.rqA 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.0.090
divide_and_conquerreqlan rq/extension/host/features-commands.rqA 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 )0.048
exportsreqlan rq/extension/host/features-commands.rqgraph should be exportable via the [export_functions.export_webview] and format entry ideas ( [export_functions.export_html], [export_functions.export_markdown], [export_functions.export_JSON], [export_functions.export_csv], [export_functions.export_pdf] ).0.040
file_based_code_actionsreqlan rq/extension/host/features-commands.rqCode actions should be available for the whole file. The should include: ( regardless of cursor positions ) - barrel page — done via [barrel_page] ( `source.barrelPage` / `reqlan.barrelPage` ) - barrel idea - decompose idea - search for references. - create idea [code_actions]0.064
format_pagereqlan rq/extension/host/features-commands.rq- set the whitespace etc appropriate for the page.0.040
get_local_graphreqlan rq/extension/host/features-commands.rqA command palette action should get the local graph for the current file or selected idea ( [local_graph_analysis] ).0.040
open_a_random_requirementreqlan rq/extension/host/features-commands.rqas it sounds0.040
pallete_function_create_todoreqlan rq/extension/host/features-commands.rqA 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"]0.060
toggle_indirect_referencesreqlan rq/extension/host/features-commands.rqA command palette action should toggle display of indirect references in complementary rendering and graph views.0.040
view_all_requirementsreqlan rq/extension/host/features-commands.rqA command palette action should open a browsable view of all requirements in the workspace ( ["../workspace-summary/ideas_summary/webview.rq".ideas_summary] ).0.040
base_installationreqlan rq/extension/host/installation.rqBase-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. Seed [bases.base_initialisation_ignore] ( `.reqlan/.gitignore` for SQLite artifacts ). 5. 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.0.109
base_rqignore_seedreqlan rq/extension/host/installation.rqNew bases write `.reqlan/.rqignore` with gitignore-syntax defaults ( dependencies, venvs, build output, DBs such as `*.db3` and SQLite sidecars, binary globs, [app_memory.commentless_file_ignore], secrets, hidden entries, `.reqlan/` itself ). Comment text in the seed: [app_memory.rqignore_initialisation]. Built-in defaults always apply even if the file is missing; the seeded file is the editable surface ( [configuration.configuration_rqignore] / [app_memory.rqignore] / [app_memory.binary_ignore] ). Used by analytical discovery and indexing walks ( CLI and extension share `@reqlan/analytical` ).0.071
base_vs_extension_boundaryreqlan rq/extension/host/installation.rqClear 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`, `.gitignore` ( SQLite artifacts ), 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.0.040
extension_installationreqlan rq/extension/host/installation.rqExtension-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] ).0.076
installationreqlan rq/extension/host/installation.rqreqlan 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] ).0.046
installation_sequencingreqlan rq/extension/host/installation.rqEnd-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 writes `.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.0.048
workspace_agent_filesreqlan rq/extension/host/installation.rqAgent / 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 writes `<workspace>/.cursor/mcp.json` ( [install_cursor_skills_impl] ): local `packages/mcp/bin/mcp.js` when present, otherwise `npx -y @reqlan/mcp`. 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], [agents.ai_fix_stale_references]. 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.0.060
onboarding_statereqlan rq/extension/host/onboarding/page-thanks-for-installing.rqOnboarding persistence uses VS Code `ExtensionContext.globalState` under key `onboarding` in ["../../../../packages/extension/src/extension/onboarding-state.ts"]. Fields: `onboardingMessageShown`, `lastVersion`.0.057
open_onboarding_pagereqlan rq/extension/host/onboarding/page-thanks-for-installing.rqOpens the onboarding webview panel ( `reqlan.onboarding` ) via ["../../../../packages/extension/src/extension/open-thanks-for-installing.ts"] and ["../../../../packages/extension/src/extension/onboarding-panel.ts"].0.048
lsp_supportreqlan rq/extension/host/scope.rqthe extension should provide an lsp server for. rq files, enabling navigation, validation, and computed views across the requirement graph0.083
scopereqlan rq/extension/host/scope.rqthese requirements describe the vscode extension and lsp for reqlan0.045
vscode_extensionreqlan rq/extension/host/scope.rqthe extension should integrate with vscode as the primary developer-user environment0.069
activation_events_learningreqlan rq/extension/host/startup-performance.rqModern 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.0.040
extension_host_process_modelreqlan rq/extension/host/startup-performance.rqOne 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.0.040
observed_failurereqlan rq/extension/host/startup-performance.rqFailure 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.0.040
startup_diagnosticsreqlan rq/extension/host/startup-performance.rqDiagnosis 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 a lazy vendor sql-asm import. CPU-idle profiles do not disprove activation failure: once `require()` throws, the host can remain healthy and mostly idle while Reqlan stays unregistered.0.046
git_based_historyreqlan rq/extension/index-host/git-codelens.rqthere should be a code lens button for viewing an idea history through git. Should accept close matches and likeley file moves should consume the same state as the [context_scope] Dates come from indexed [git_idea_timeline_analysis] state filled by [git_dates_background_indexing].0.045
git_date_inlayhintsreqlan rq/extension/index-host/git-codelens.rqShould show references and date created per [git_based_history]. Creation dates must come from already-indexed git dates via [git_dates_background_indexing], not a synchronous git walk on inlay render.0.040
file_related_requirementsreqlan rq/extension/index-host/graph-analysers.rqThe extension should provide a view or command to get requirements relating to the currently open file. File-related lookup should follow both explicit file references and comment rq: links in that file. Comment links are read from indexed `comment_link` edges ( [indexer.index_code_files] ), not only the open buffer. ["../../cli/click.rq".click_code_file] uses the same indexed backlinks and comment links when the click target is a code file.0.124
host_index_capabilitiesreqlan rq/extension/index-host/graph-analysers.rqHost-facing analysers and commands over the shared index: [list_all_ideas], [file_related_requirements], [indexer.index_ideas], [indexer.index_technology], [indexer.local_graph_analysis], [indexer.semantic_analysis], [indexer.git_dates], [indexer.completion_tracking], [indexer.deprecation_impact_analysis]. Application memory: [application_memory].0.040
indexing_trigger_filesavereqlan rq/extension/index-host/graph-analysers.rqindexing should be triggered by. rq file create / change / delete via watchers, and by allowlisted source files that may contain comment references.0.106
indexing_trigger_manualreqlan rq/extension/index-host/graph-analysers.rqIndexing should be triggered by manual indexing commands ( Refresh / Clear & rebuild ). Refresh and Clear & rebuild always rediscover bases first via ["../../bases/base.rq".refresh_rediscovers_bases] / ["../../../packages/analytical/src/index-store/base-registry.ts"] `refresh`, then soft-sync or rebuild the active base.0.092
indexing_trigger_openreqlan rq/extension/index-host/graph-analysers.rqAfter the activity bar's first painted frame / base activate, run one soft sync ( mtime-skipped ) so the index is warm without delaying the sidebar shell. This is a startup pass — not the idle checker ( [indexing_trigger_auto] ).0.102
list_all_ideasreqlan rq/extension/index-host/graph-analysers.rqThe extension should provide a command to list all ideas in the workspace with file location and summary.0.045
git_information_capturereqlan rq/extension/index-host/index.rqCapture and surface git development history for requirements and files — not only working-tree staging status. On-demand / index-accessible: - ownership and top authors ( name; email when available ) - creator ( first introduction ) and last meaningful modification - edit frequency / commit count for the focus path or idea line range - recent commit trail ( subject, author, authoredAt, short hash ) for the ["../local-context/context-scope.rq".git_context] lens Idea dates and change counts come from [indexer.git_dates] / ["./git-codelens.rq".git_dates_background_indexing], not from a git walk on every save ( ["./git-codelens.rq".git_dates_rate_cap] ). Activity Bar git CLI calls stay hidden on Windows ( ["../../core_analysis/core.rq".consumption_silence] ). Future: adjacency score from edit state and frequency of neighbours. Feeds ["../local-context/context-scope-v2.rq".development_history_signals] and ["../local-context/activitybar-panels/current_context_scope.rq".git_history_lens].0.103
idea_index_triggersreqlan rq/extension/index-host/index.rqRefresh automatically on `.rq` file change via watchers ( [graph_analysers.indexing_trigger_filesave] ). Idle: cheap background staleness check — [graph_analysers.indexing_trigger_auto]. Git-dates fill is not an index trigger; it is a later analyser with ["./git-codelens.rq".git_dates_rate_cap].0.136
anonymous_reference_code_completionreqlan rq/extension/language/support/features-imports.rqAnonymous imports should share the same code completion e. g. ["@/reqlan rq/extension/language/syntax/features-syntax.rq"] should complete the same as `import "@/reqlan rq/extension/language/syntax/features-syntax.rq" as code_completion`. they should share the same code and logic0.053
from_import_syntaxreqlan rq/extension/language/support/features-imports.rqMultiple symbols should be allowd to be be imported with `from "path" import symbol1, symbol2, symbol3` syntax. Each imported name is its own link ( ["../../../language/imports.rq".import_from] ).0.040
implicit_file_extensionreqlan rq/extension/language/support/features-imports.rqThe import statements should not require an extension, i. e. it should assume ". rq " unless otherwise specified. An extensionless path resolves to the ". rq " file first, then to a literal extensionless file or folder. A path that already carries any extension is resolved exactly as written. Folder targets: [import_folder_targets].0.195
import_code_completionreqlan rq/extension/language/support/features-imports.rqImport path code completion for `import` / `from` strings ( and shared anonymous paths ). [code_completion] [import_code_completion_explicit_extension] [import_code_completion_path_segments] [import_code_completion_substring_match] [import_code_completion_ranking] [anonymous_reference_code_completion] [import_code_completion_auto_file_import] [import_code_completion_rendering]0.057
import_code_completion_explicit_extensionreqlan rq/extension/language/support/features-imports.rqCompletions insert paths with an explicit `.rq` extension. [implicit_file_extension] Hand-written imports may still omit the extension; completion prefers the written form with `.rq`.0.047
import_code_completion_path_segmentsreqlan rq/extension/language/support/features-imports.rqIn a folder context, show next path segments ( directories with a trailing `/` ). After `../`, offer `../path/` before nested `../path/file.rq`.0.047
import_code_completion_rankingreqlan rq/extension/language/support/features-imports.rqRank import path completions by directory proximity ( hop count from the completing file's directory to the candidate's directory ), then directories before files, then path alphabetically. Example: typing `../` ranks `../close.rq` before `../../../path.rq`. Emit sortText for that order, and set filterText so the editor does not re-rank by label fuzzy score over proximity.0.053
import_code_completion_substring_matchreqlan rq/extension/language/support/features-imports.rqFilter path candidates by search within the path, not only a starts-with prefix. Typing `path` should match `../../parent/path.rq`. Typing `hellopath` should match `../../hello/inbetween/path/file.rq` ( characters matched in order across path segments ).0.047
import_does_not_exist_errorreqlan rq/extension/language/support/features-imports.rqImports show an underline error when the target file or folder does not exist. Imports also show an underline error when a named imported idea does not exist in the target file. An existing folder is not an error: [import_folder_targets]. CI: ["../../../core_analysis/check.rq".check_unresolved_imports]. [general_errors]0.151
remote_importsreqlan rq/extension/language/support/features-imports.rqReqlan files should support importing requirements from remote urls. Remote import syntax should follow import " https://company.com/reqs/style.rq" as styleguide. The extension should resolve, cache, and validate remote imports. Barrel imports should be recommended for token efficiency when many symbols are needed from one remote file.0.040
general_errorsreqlan rq/extension/language/support/language-server-errors.rqerror messages should be deliberate and developer friendly. recommendations should be offerred where appropriate.0.083
open_file_sequence_diagramreqlan rq/extension/language/support/open-file-sequencing.rq[open_file_algorithm] Actors: VS Code editor, TextMate grammar, extension host, `reqlan-lsp`, file system.0.117
activity_bar_modulereqlan rq/extension/language/syntax/features-syntax-highlighting.rqthe extension should provide a activity bar module for the ide. the activity bar module should display the following information: - the current file - the current idea - ideas referencing the current idea / selection - a local graph see ["../../local-context/activitybar.rq"] for more details.0.040
attribute_code_completion_attribute_keyreqlan rq/extension/language/syntax/features-syntax-highlighting.rqthe attribute key should complete based on endorsed keys and what is present in the index i. e. after the @ symbol at the start of a line, the used attributes should be completed. subsquently, values of the attribute key should be completed based on the values in that attribute key.0.040
attribute_code_completion_main_descriptiptionreqlan rq/extension/language/syntax/features-syntax-highlighting.rqthe main description attribute is expected to be prose, so, the dropdown shouldn't be rendered in this context.0.040
complementary_information_renderingreqlan rq/extension/language/syntax/features-syntax-highlighting.rqThe extension should render computed information inline in the editor as complementary text. Complementary rendering should include resolved references and optionally indirect references behind a toggle. Complementary rendering should not mutate source files unless the user explicitly applies a change.0.040
reference_code_completionreqlan rq/extension/language/syntax/features-syntax-highlighting.rqreferences should code complete the available namespace of ideas this includes both ideas using hte standards idea namespace syntax, and ideas using file paths, and relative file paths. Cross-file candidates show import paths and may auto-insert imports: ["../support/features-imports.rq".import_code_completion_rendering] ["../support/features-imports.rq".import_code_completion_auto_file_import] Implemented by ["../../../../packages/language/src/reqlan-completion-provider.ts"]. ["./features-syntax.rq".code_completion]0.077
reference_code_completion_sequencingreqlan rq/extension/language/syntax/features-syntax-highlighting.rq[reference_code_completion] should be offered, not alphabetically, but by distance, then alphabetically. Implemented by ["../../../../packages/language/src/reqlan-completion-provider.ts"]. ["./features-syntax.rq".code_completion]0.045
reference_renderingreqlan rq/extension/language/syntax/features-syntax-highlighting.rqResolved references should be visually distinguishable from unresolved or broken references. Indirect references inferred by graph traversal should be showable via a user toggle. Reference kinds ( dependency, incompatible with, applies to, related to ) should be surfaced where declared or inferred. Unresolved idea and file references must keep a linking / missing-file diagnostic ( error underline ). They must not receive a document-link underline that makes them look like happy, navigable references. See [import_statement_highlighting], [non_web_reference_navigation], [unresolved_reference_diagnostics].0.092
reference_resolution_folderreqlan rq/extension/language/syntax/features-syntax-highlighting.rqIf the reference path is a folder, the extension should render a popup with a list of files in that folder. The link should not try to resolve to a file if it doesn't exist. The popup is the command document link. Go-to-definition does not open the popup. Related: [editor_reference_activation], [reference_goto_definition_speed].0.040
at_sign_in_idea_text_blockreqlan rq/extension/language/syntax/features-syntax.rqthe @ symbol should only indicate an attribute if at the start of a line. it should be escapeable with a backslash ( although any character would work as the @ would no longer be at the start of the line ) so @ this_is_not_an_attribute0.040
code_completionreqlan rq/extension/language/syntax/features-syntax.rqThe extension should complete ideas, imports, and paths from the current file path and resolved import config. - support for references - support for imports, including import-root alias paths such as `@/` from ["../../../language/imports.rq".configuration_import_root_alias] and ["../../host/configuration.rq".configuration_import_roots] - support for semantic search - support for graph-proximity based ranking String and namespace completion should follow the current file path and import roots.0.150
code_completion_import_file_pathsreqlan rq/extension/language/syntax/features-syntax.rqimport files should code complete nicely based on the current file's path; and the resolved import config. it should support normal relative folder paths; and if import-root aliases are configured. ["../../host/configuration.rq"] ["../../../language/imports.rq"] ["./features-syntax.rq".code_completion]0.040
comment_supportreqlan rq/extension/language/syntax/features-syntax.rqThe extension should recognise reqlan references embedded in comments of arbitrary source files. Comment reference syntax should follow the form rq, then a quoted path, then a dotted idea name in line comments. Qualified comment paths must resolve import-root aliases such as `@/` the same way imports do — ["../../../language/imports.rq".configuration_import_root_alias], ["../comment-references/functional-code-comment-references.rq".comment_reference_import_root_alias]. Comment references in non-. rq files should support syntax highlighting ( resting underline: ["../comment-references/functional-code-comment-references.rq".comment_reference_resting_underline] ), hover, and go-to-definition. Arbitrary file references should be supported from both. rq files and comment references.0.059
file_referencesreqlan rq/extension/language/syntax/features-syntax.rqA file reference should act as a link in the editor. If the target file is empty or has a parse error, the link should remain available and clickable, but should show a warning underline. If the target file is missing, show an error underline and do not create a document link — see ["../support/language-server-errors.rq".file_reference_errors]. Same-file and imported idea bracket references use the same editor activation as file targets. See ["./features-syntax-highlighting.rq".editor_reference_activation]. Implemented by ["../../../../packages/language/src/reqlan-file-link-resolver.ts"], ["../../../../packages/language/src/reqlan-document-link-provider.ts"], ["../../../../packages/language/src/reqlan-definition-provider.ts"], and ["../../../../packages/language/src/reqlan-validator.ts"].0.118
refactor_supportreqlan rq/extension/language/syntax/features-syntax.rqsyntactic symbols should be available for renaming, moving, and deleting. the extension should watch for the change. Detailed behaviour lives in ["../../mutation/refactor_support.rq"]. Implemented by ["../../../../packages/language/src/reqlan-rename-provider.ts"], ["../../../../packages/language/src/reqlan-idea-refactor.ts"], and ["../../../../packages/extension/src/mutation_module/refactor/index.ts"].0.079
sensible_alias_supportreqlan rq/extension/language/syntax/features-syntax.rqif an imported idea shares a name with an idea in the current file: When the import uses an alias, the base name may be reused locally — see ["../../../language/imports.rq".import_tokenisation].0.047
syntax_featuresreqlan rq/extension/language/syntax/features-syntax.rqThe extension should provide language support for. rq files via the lsp. Syntax features should cover ideas, ideasets, imports, references, attributes, comments, and lists. Broken imports and references should be validated and reported in the editor. Go-to-definition and find-references should work for ideas, imports, and cross-file links. Find-references is served by ["../support/language-server-rust.rq".language_server_rust] ( `textDocument/references` ). Autoformatting should be supported for. rq files.0.046
syntax_hoveringreqlan rq/extension/language/syntax/features-syntax.rqHovering on an idea, ideaset, import, or reference should show a text summary of its content and resolved target. Hovering on a reference should show where it resolves and any declared reference kind. The styled body hover is [idea_content_tooltip].0.060
syntax_welcome_demonstrationreqlan rq/extension/language/syntax/features-syntax.rqthe ["@/packages/extension/templates/thanks-for-installing.template.rq"] should feature some of the core syntax features as reference.0.040
code_completionreqlan rq/extension/language/vsc-primitives.rqEditor completion for ideas, imports, and paths. Canonical requirements: ["./syntax/features-syntax.rq".code_completion].0.047
codelensreqlan rq/extension/language/vsc-primitives.rqOutbound classification CodeLens on references: ["./syntax/features-syntax-highlighting.rq".code_lens_reference_types]. File-top inbound file-reference CodeLens: ["./syntax/features-syntax-highlighting.rq".file_inbound_code_lens]. Idea inbound `@referenced-by` remains an inlay: ["./syntax/features-syntax-highlighting.rq".view_references_as_inlay_hints].0.103
inlay_hintsreqlan rq/extension/language/vsc-primitives.rqInbound-reference inlay hints. They appear when the inbound snapshot is ready ( ["./support/open-file-sequencing.rq".lazy_features_after_outbound] ) and stay on last-good until the next ready-state incremental push ( ["../../indexer/cache-reuse.rq".inbound_snapshot_events] ).0.078
quick_fixesreqlan rq/extension/language/vsc-primitives.rqQuick-fix subset of [code_actions] ( import errors, ignore-error, create-below ).0.050
context_panes_loadingreqlan rq/extension/local-context/activitybar-panels/current_context_scope.rqReady panes: [scope_pane], [reference_lists_pane], and [parent_nodes_pane] show per-request loading and error, distinct from empty.0.048
context_trayreqlan rq/extension/local-context/activitybar-panels/current_context_scope.rqA small pinned set of ideas carried across panes for AI context — the ["../context-scope.rq".manual_context] dimension. - Chips for pinned ideas with remove control. - " Clear tray " and " Copy tray as markdown " actions. - Tray contents are included when invoking @ reqlan context or divide-and-conquer flows per [commands.divide_and_conquer].0.066
current_file_panereqlan rq/extension/local-context/activitybar-panels/current_context_scope.rqPrimary contextual pane when a. rq file is active. Sub-sections may collapse independently. [scope_pane] [reference_lists_pane] [parent_nodes_pane]0.046
parent_nodes_panereqlan rq/extension/local-context/activitybar-panels/current_context_scope.rqUpstream context for the focused idea. - Ancestor chain as a breadcrumb with a configurable depth limit ( not only immediate parents ). - Status rollup for ancestors ( e. g. counts by @ status ). - " What blocks completion? " surfaces upstream ideas whose @ status is not done or in-progress.0.058
reference_lists_panereqlan rq/extension/local-context/activitybar-panels/current_context_scope.rqActionable inbound and outbound reference lists for the focused idea. - Inbound: ideas that reference the focus ( edges to the focus ). - Outbound: ideas and files the focus references ( edges from the focus ). - Live same-file inbound / outbound from ["../../../indexer/indexer.rq".local_symbolic_analysis] merged with indexed refs per ["../../../indexer/indexer.rq".local_symbolic_sidebar]. - Group entries by edge kind ( dependency, related to, file ref, incompatible, etc. ) in collapsible sections. - Show a short snippet or source line explaining why each edge exists where available. - Text filter scoped to this pane only ( not the full ui-sql layer ). - " Add to context " pins an idea into [context_tray] for Copilot / @ reqlan workflows. - [reference_resolution_parity]: panel resolution must match the editor file view. - [unresolved_reference_create]: unresolved idea targets get a create affordance, not a dead file link. Implemented by [ReferenceListsPane].0.126
scope_panereqlan rq/extension/local-context/activitybar-panels/current_context_scope.rqComposed context inspector per ["../context-scope.rq".scope_pane_design]. Built from ["../context-scope.rq".reqlan_context_model]; not a flat file list. See ["../context-scope.rq".context_dimensions] for workspace, current file, open files, file history, edit history, manual, and git lenses. Git lens: [git_history_lens] ( history-first, not staging mirror ). Legacy file-only fields live in ["../context-scope.rq".current_file_context] / currentFile slice when the current-file lens is expanded. Implemented by [ScopePane].0.092
selection_panereqlan rq/extension/local-context/activitybar-panels/current_context_scope.rqWhen the user selects text spanning one or more `.rq` ideas ( ["../context-scope.rq".context_selection] ). - List selected ideas with Focus and Pin actions. - Contributes selection idea ids to ["../context-scope.rq".context_footprint] and may pair with ["../graph-path.rq".graph_path_walk] as path endpoints. - Hidden when there is no non-empty multi-line selection overlapping ideas.0.053
miniature_graph_panereqlan rq/extension/local-context/activitybar-panels/minigraph.rqA small interactive graph centred on the cursor idea ( or the file's first idea when the caret is outside any block ). Consumes [graph_lib.graph_library] with sidebar-appropriate defaults; slices from [indexer.local_graph_analysis]. - Default depth 1; + / - controls expand or collapse neighbourhood depth without opening Ideas Summary. - Pan, zoom, and drag per [graph_lib.view_controls]. - Labels default to [graph_lib.graph_label_auto] via shared GraphCyController ( no separate Labels control here; full control lives on [graphical_graph_doc.graphical_graph] ). - [graph_lib.manual_reframe] — " Fit to view " in [MiniGraphCanvas]; same API as the full graph tab. - [graph_lib.auto_reframe] and [graph_lib.reframe_animation] when the neighbourhood node set changes ( instant first fit, animated afterward ). - No full layout / physics menus here ( defer to [graphical_graph_doc.graphical_graph] ). - Single-click a node opens its source; double-click or " Focus " recentres the slice on that idea. - Edge kinds styled like the full graph ( including dashed file-reference edges ). - When nodes are truncated per [graphical_graph_doc.node_truncation], show " + N more " with a control to open the centred slice in Ideas Summary. - " Open in Graph tab " hands off centerId and query state to [ideas_summary_panel]. Mount cytoscape only while this sub-pane is visible per [graph_lib.graph_cy_controller].0.055
minigraph_loadingreqlan rq/extension/local-context/activitybar-panels/minigraph.rqGraph slice waits stay in [miniature_graph_pane], not a second global overlay. Show per-request loading and error, distinct from empty.0.048
workspace_loadingreqlan rq/extension/local-context/activitybar-panels/workspace.rqIndex sync progress belongs in [workspace_pane]; do not treat " index not ready " as a hard global error during cold start. Host posts index health on view resolve and on `ready`; soft-waits when the index is not ready instead of erroring the whole bar. Waiting for index: use [workspace_pane] sync progress affordance. When the status line *is* in error, show it prominently per ["../activitybar.rq".error_status_bar].0.108
workspace_panereqlan rq/extension/local-context/activitybar-panels/workspace.rqMulti-base index health, errors, and activity — without duplicating the full Index tab in [ideas_summary_doc.index_panel]. - [workspace_base_picker]: choose the active base; do not render a full always-visible base list. - For the selected base: state badge, sync progress ( processed / total + current file ), idea / edge counts, global and per-file errors, recent activity. - Clickable file issue list opens the source location in the editor. - Refresh / cancel in-flight sync / clear & rebuild for the selected base ( or all ); " Open index tab " hands off to [ideas_summary_panel] with that base selected. - When no bases exist: empty state with Create Base CTA ( [bases.create_base_onboarding] ). Non-blocking sync UX: ["../../../indexer/indexer.rq".nonblocking_index]. Implemented by [WorkspacePane].0.146
activity_barreqlan rq/extension/local-context/activitybar.rqThe extension should provide an activity bar sidebar for editor-adjacent requirement context per [local_graph_view]. UI is implemented as Svelte webview panes per [development_core], not as a long-lived tree of static rows. The host loads slices from the index via [indexer.local_graph_analysis] and forwards editor focus through [activity_bar_webview] and [activity_bar_data]. Panes should be performance conscious: capped neighbourhoods, lazy cytoscape mount, debounced cursor updates — same discipline as [webview_doc.webview]. Workspace-wide tables, full layout controls, and unconstrained graph dumps belong in Ideas Summary per [ideas_summary_doc.ideas_summary]; panes link out with prefilled state instead of duplicating those views.0.115
component_listreqlan rq/extension/local-context/activitybar.rqPriority release ( shipped ): - Shell: [ActivityBarApp], HeaderBar ( includes [info_site_link] ), CollapsiblePane in ["../../../packages/extension/webviews/activity-bar/"] - Panes: WorkspacePane, [SearchPane], [TodoPane], ScopePane, SelectionPane, ReferenceListsPane, MiniatureGraphPane, ParentNodesPane, ContextTray - Graph: [MiniGraphCanvas] consuming shared graph lib per [graph_lib] - Host: [activity_bar_webview], [activity_bar_data], wire types in [activity_bar_messages] - HTML: [get_activity_bar_html] - Build: ["../../../packages/extension/webviews/activity-bar/vite.config.ts"] → media / webviews / activity-bar / Deferred ( not in priority release ): - IdeasetPane, FileReferencesPane, RecentPane - [graph_path_doc.graph_path_walk] UI pane - ExportSliceButton - Full workspace export via ["../export/export.rq".export_JSON] and ["../export/export.rq".export_csv]0.040
context_trayreqlan rq/extension/local-context/activitybar.rqPinned ideas for AI context — details in [current_context_scope.context_tray].0.072
file_references_panereqlan rq/extension/local-context/activitybar.rqFile-scoped edges only — inbound and outbound file references for the focused idea. Useful for tracing which source files implement or mention a requirement. - Group shared file targets per [graphical_graph_doc.referenced_files_grouping] when multiple ideas reference the same path. - Line-qualified references should navigate to the specific line when present.0.051
git_history_lensreqlan rq/extension/local-context/activitybar.rqFocus-centric git history in the git lens — details in [current_context_scope.git_history_lens].0.070
header_buttonsreqlan rq/extension/local-context/activitybar.rqCross-pane controls live in a compact header above the pane stack. - " Sync with editor " toggle: panes follow the active editor and cursor by default; when off, stay pinned on the last focused idea. - [hop_depth_control]: global graph hop depth for context search, graph slice, references, and ancestors — not a boolean toggle. - " Open in Ideas Summary ": reveal [ideas_summary_panel] with the ideas table filtered to the current file, or the graph tab centred on the current idea. - " Export slice ": JSON or CSV of the current neighbourhood only. This slice is lighter than workspace ["../export/export.rq".export_JSON] and ["../export/export.rq".export_csv]. - " Copy as markdown ": copy the focused idea plus parents and reference lists for pasting into chat or PRs. - Refresh control tied to index readiness. - [info_site_link] - Status / error line under the toolbar: [error_status_bar]0.056
hop_depth_controlreqlan rq/extension/local-context/activitybar.rqA **- / value / + ** button pair ( not a 1 - hop / 2 - hop toggle ) sets [context_scope_doc.global_hop_depth]. - Minimum hop depth is 1 ( direct neighbours only ); **-** is disabled at minimum. - Maximum hop depth is capped ( default 4 for the activity bar ); ** + ** is disabled at maximum. - Changing global depth rebuilds [context_scope_doc.reqlan_context_model], refreshes graph / refs / ancestors panes, and updates [context_scope_doc.context_footprint]. - When [context_scope_doc.context_footprint] has no centre, depth still updates session state. Panes refresh when a centre appears. - Legacy `setIncludeIndirect` maps to depth 2 / 1 for backward compatibility during migration.0.064
iconreqlan rq/extension/local-context/activitybar.rqthe activity bar icon should use the reqlan logo. [brand]0.040
ideaset_panereqlan rq/extension/local-context/activitybar.rqWhen the focused idea belongs to one or more ideasets. - List ideaset names with a dropdown of member chips ( same interaction model as [ideas_summary_doc.idea_sets_tab] ). - Path column links to the ideaset source file. - Hidden when the focus idea is not a member of any ideaset.0.051
implementation_priorityreqlan rq/extension/local-context/activitybar.rqSuggested build order: 1. [scope_pane] and [reference_lists_pane] ( index data only, no cytoscape ). 2. [miniature_graph_pane] with expand / collapse and handoff to Ideas Summary. 3. [parent_nodes_pane] with status rollup. 4. [context_tray] and create-stub integration with [commands.pallete_function_create_todo]. 5. [selection_pane], [ideaset_pane], [file_references_pane], [recent_pane].0.040
info_site_linkreqlan rq/extension/local-context/activitybar.rqThe header shows an info control that opens the project site in the system browser. Link id `site` from [phonebook_reqs.phonebook] per [phonebook_reqs.activity_bar_site_link]. Resolved in the extension host via ["../../../packages/extension/src/shared/phonebook.ts"] ( canonical data in ["../../phonebook.json"] ), not hardcoded in the webview. The webview receives the resolved label and href from [activity_bar_webview] and posts `openPhonebookLink` when the user activates the control.0.059
local_graph_viewreqlan rq/extension/local-context/activitybar.rqThe activity bar provides 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.0.055
miniature_graph_panereqlan rq/extension/local-context/activitybar.rqSmall interactive neighbourhood graph — details in [minigraph.miniature_graph_pane].0.069
panesreqlan rq/extension/local-context/activitybar.rq- [header_buttons] - [workspace_panel.workspace_pane] - [search_panel.search_pane] - [todo_panel.todo_pane] - [current_context_scope.current_file_pane] - [selection_pane] - [ideaset_pane] - [file_references_pane] - [recent_pane]0.047
parent_nodes_panereqlan rq/extension/local-context/activitybar.rqUpstream ancestor chain — details in [current_context_scope.parent_nodes_pane].0.045
recent_panereqlan rq/extension/local-context/activitybar.rqRecently touched ideas in the session ( configurable count and truncation basis per [graphical_graph_doc.node_truncation] ). - Click opens the idea; optional pin to [context_tray].0.051
reference_lists_panereqlan rq/extension/local-context/activitybar.rqInbound / outbound reference lists — details in [current_context_scope.reference_lists_pane]. Shared editor / panel resolution: [current_context_scope.reference_resolution_parity]. Unresolved idea create affordance: [current_context_scope.unresolved_reference_create].0.057
refernce_lists_pane_reference_tieringreqlan rq/extension/local-context/activitybar.rqInbound refernces may be direct, or via ideaset references. The [reference_lists_pane] should tier the references based on the reference type. Design must keep in mind that that the ideaset refernces are likely more numerous and lower signal.0.040
scope_panereqlan rq/extension/local-context/activitybar.rqComposed context inspector — details in [current_context_scope.scope_pane].0.065
selection_panereqlan rq/extension/local-context/activitybar.rqMulti-idea selection list — details in [current_context_scope.selection_pane].0.097
architecture_signalsreqlan rq/extension/local-context/context-scope-v2.rq0.055
development_history_signalsreqlan rq/extension/local-context/context-scope-v2.rqPrefer actionable history over staged / unstaged alone. development_context ( git reimagined ): current branch, active issue, release version, commits, authors, change frequency / velocity, historical and semantic hotspots, last meaningful modification, first introduction, ownership concentration, refactor / merge likelihood, stability score. First UI consumer beyond create / modify dates: [context_scope_v1.git_context] / ["./activitybar-panels/current_context_scope.rq".git_history_lens] — focus commit trail and authors; working-tree staging demoted to secondary.0.122
file_signalsreqlan rq/extension/local-context/context-scope-v2.rqactive file, related files, recently viewed, recently edited, high churn, frequently opened, ownership, generated / test / implementation / specification / documentation classification.0.048
project_activity_signalsreqlan rq/extension/local-context/context-scope-v2.rqcurrently changing subsystem, hot / cold modules, high activity area, merge conflicts nearby, active branch, recent issue cluster, recent requirement churn, release / milestone affected.0.080
quality_signalsreqlan rq/extension/local-context/context-scope-v2.rqmissing documentation, large files / requirements, broken references, failing diagnostics, lint / parse / test / build failures, coverage gaps.0.069
relationship_signalsreqlan rq/extension/local-context/context-scope-v2.rq0.090
requirement_lifecycle_signalsreqlan rq/extension/local-context/context-scope-v2.rq0.073
requirement_signalsreqlan rq/extension/local-context/context-scope-v2.rqrelated_requirements, parents, children, incoming / outgoing references, linked implementation files, coverage status, requirement age, stability, priority, verification state, orphaned, cycles, missing references.0.063
risk_signalsreqlan rq/extension/local-context/context-scope-v2.rq0.083
semantic_signalsreqlan rq/extension/local-context/context-scope-v2.rqconcept clusters, shared vocabulary, duplicate / near-duplicate / similar requirements, contradictions, implicit dependencies, missing abstraction, large / isolated concepts.0.068
temporal_signalsreqlan rq/extension/local-context/context-scope-v2.rqEnables queries: what changed this week, why this requirement changed, newly introduced risks, recent architectural evolution.0.062
user_signalsreqlan rq/extension/local-context/context-scope-v2.rqmanual pins, recent focus, navigation history, editing intent, copied context, AI conversation history, last searched, last graph traversal, frequently revisited.0.055
ai_context_exportreqlan rq/extension/local-context/context-scope.rq[activitybar.header_buttons] **Context** copies the composed [reqlan_context_model] as markdown: effective-centre requirement, non-. rq link sections, selection, pinned tray, and footprint summary. [features_ai.ai_add_to_context] should prefer the same composed context when the activity bar index is ready.0.078
any_file_scopereqlan rq/extension/local-context/context-scope.rqThe active editor may be a requirement file or implementation file ( Python, TypeScript, etc. ). [current_file_context] must surface requirement links even when the file contains no block ideas. Signals for non-. rq files ( and. rq files without a caret idea ): - [file_reference_links]: `.rq` ideas whose outbound `file_reference` edges target this file path ( for example `./apythonfile.py` ). - [folder_reference_links]: `.rq` ideas whose `file_reference` targets a parent folder of this file. - [comment_reference_links]: ideas resolved from `rq:[…]` tokens in this file's comments per [code_comment_refs.references_in_functional_code_comments]. - [git_context]: focus-centric git history ( recent commits, authors, branch ); working-tree dirty badge secondary. Focus behaviour: - `.rq` file with caret in a block → idea focus ( unchanged ). - Any file with linked requirements → file focus; `effectiveCenterId` defaults to the first linked requirement. - No links → file focus with empty related lists; graph / refs panes stay idle until a requirement is focused. Implementation: [context_model] uses [file_path_match] and `file_related_requirements` analyser; comment links are also resolved from live buffer text when indexed edges are absent.0.066
comment_reference_linksreqlan rq/extension/local-context/context-scope.rqMatched from `comment_link` index edges and / or `rq:[target]` spans parsed from the active buffer.0.048
context_contributionreqlan rq/extension/local-context/context-scope.rqPer dimension: id, label, enabled, pinned, weight, ideaCount, fileCount, summary, hopDepth, supportsHopControl. Disabled dimensions do not add to [context_footprint] but may still show a muted chip with zero count. Pinned dimensions stay expanded in [scope_pane_design] until collapsed by the user. Graph-searchable dimensions expose per-lens hop overrides via [dimension_hop_control].0.052
context_dimensionsreqlan rq/extension/local-context/context-scope.rqSeven dimensions contribute ideas and files to the effective context footprint. Each dimension has a stable id, human label, default weight, and a one-line summary for collapsed UI. - workspace [workspace_context] Ambient VS Code workspace chrome and multi-base index glance: discovered bases, active base readiness / idea / edge counts — not a full graph dump. Distinct from the active ["../../bases/base.rq".base] source in v2. - current_file [current_file_context] Active editor file. For `.rq`: caret idea, in-file outline, unresolved refs. For any file: [any_file_scope] links and git badge. - open_files [open_files_context] Other workspace editor tabs currently open ( any language ). - file_history [file_history_context] Session recency of visited workspace files ( navigation history ), distinct from edit history. - edit_history [edit_history_context] Session recency of edited workspace files and caret positions ( typing history ). - manual [manual_context] User-pinned ideas from [activitybar.context_tray] and explicit " add to context " actions. - git [git_context] Focus-centric development history ( branch, recent commits, authors ) per [index_reqs.git_information_capture]; working-tree changes demoted.0.085
context_focusreqlan rq/extension/local-context/context-scope.rqkind: idea | file | selection | none. When sync-with-editor is on, focus follows the caret idea in an active `.rq` editor, or file / selection context otherwise. When pinned, focus stays on the pinned idea until cleared. Selection focus applies when the user highlights text spanning one or more ideas ( [activitybar.selection_pane] ).0.058
context_footprintreqlan rq/extension/local-context/context-scope.rqMerged view across enabled dimensions. - deduped idea ids and file uris with provenance ( which dimensions contributed each entry ). - `summaryLine`: compact human text, e. g. " this file · 3 open · 2 git · 1 pinned ". - `effectiveCenterId`: graph / refs / ancestors panes use this; defaults to focus idea, selection's first idea, first linked requirement for non-. rq files, else first idea in current file.0.108
context_scopereqlan rq/extension/local-context/context-scope.rqReqlan sidebar and AI workflows reason about a composed [reqlan_context_model], not a single " current file " blob. Context applies to **any workspace file**, not only `.rq` sources — see [any_file_scope]. Context is built from orthogonal [context_dimensions] that the user can enable, pin, or collapse. The activity bar [activitybar.scope_pane] is the primary surface for inspecting and steering context; [activitybar.context_tray] holds the [manual_context] dimension. Token discipline per [features_ai.ai_integration]: show summaries and counts by default; expand a dimension only on intent. Parses per ["../../../reqlan rq/language/syntax.rq".reference_wikilink]. Decision-oriented v2 ( sources → signals → synthesis → views → consumers ) and show-don ' t-tell widgets: [context_scope_v2.context_scope_v2].0.064
context_selectionreqlan rq/extension/local-context/context-scope.rqUnion of ideas whose line ranges overlap the editor selection in a `.rq` file. Drives [activitybar.selection_pane] and contributes idea ids to [context_footprint].0.065
current_file_contextreqlan rq/extension/local-context/context-scope.rqweight: 1. 0 Default enabled and expanded lens when a workspace file is active.0.087
dimension_hop_controlreqlan rq/extension/local-context/context-scope.rqWhen a graph-searchable dimension lens is expanded in [scope_pane_design], show a local ** − / value / + ** pair. Applies to [current_file_context], [open_files_context], [file_history_context], [edit_history_context], and [manual_context] — not [workspace_context] or [git_context]. Per-dimension override inherits [global_hop_depth] until the user adjusts it; stored in dimensionHopDepth on the session and model. Edge cases match [activitybar.hop_depth_control]: disable − at min, + at max, clamp on apply.0.059
edit_history_contextreqlan rq/extension/local-context/context-scope.rqweight: 0. 5 Default enabled; capped list ( default 12 ); entries include last line touched.0.066
file_history_contextreqlan rq/extension/local-context/context-scope.rqweight: 0. 4 Default enabled; capped list ( configurable, default 12 ).0.066
file_reference_linksreqlan rq/extension/local-context/context-scope.rqMatched when an indexed `file_reference` edge target resolves to the active file path ( exact or suffix match ).0.048
folder_reference_linksreqlan rq/extension/local-context/context-scope.rqMatched when an indexed `file_reference` edge target is a folder prefix of the active file per [file_path_match.match_file_reference_target].0.048
git_contextreqlan rq/extension/local-context/context-scope.rqweight: 0. 7 Should detect symbol lifecycle using symbol identity rather than line history for creation: who introduced the symbol, when it was introduced, who last meaningfully changed it, the total number of changes, and the relative change rate versus peer symbols. Default enabled when repository detected. Primary: focus-centric git history — branch, HEAD short hash, recent commits touching the focus file / idea, top authors. Summary prefers history richness ( e. g. " main · 3 commits · 2 authors " ), not staged / unstaged counts. Working-tree dirty files remain available as a demoted nested section and optional footprint contributors. Focus hero shows a history cue ( last commit age / branch ) instead of a staged / unstaged chip. Consumes [index_reqs.git_information_capture] and ["./context-scope-v2.rq".development_history_signals]. Windows `git` spawns stay hidden per ["../../core_analysis/core.rq".consumption_silence]. UI: [activitybar.git_history_lens].0.137
global_hop_depthreqlan rq/extension/local-context/context-scope.rqSession default hop depth ( 1 - 4 ) stored in [context_session]. Drives graph slice expansion, reference list breadth, ancestor chain depth, and composed context export. Surfaced in [activitybar.hop_depth_control] and echoed on [reqlan_context_model]. globalHopDepth.0.069
implementation_priorityreqlan rq/extension/local-context/context-scope.rq1. [any_file_scope] types and [context_model] builder. 2. Host refresh for any workspace file; git / all-tab collection. 3. [scope_pane_design] non-. rq focus hero and grouped link panels. 4. [context_selection] + [activitybar.selection_pane]. 5. Lazy `loadFileLens` for file-list dimensions. 6. [ai_context_export]. 7. [graph_path_doc.graph_path_walk] ( future pane / Ideas Summary handoff ).0.045
manual_contextreqlan rq/extension/local-context/context-scope.rqweight: 0. 9 Enabled when tray non-empty; pins override sync focus for `effectiveCenterId` when user chooses " focus pinned ".0.101
open_files_contextreqlan rq/extension/local-context/context-scope.rqweight: 0. 6 Default enabled; summary lists tab count.0.066
reqlan_context_modelreqlan rq/extension/local-context/context-scope.rqCanonical composed context per [analytical_context_model]. Implementation: [context_model]. - [context_focus] is the single anchor ( idea, file, selection, or none ). - [context_dimensions] each contribute [context_contribution] records with counts and summary lines. - [context_footprint] merges enabled dimensions into deduped idea / file sets and an `effectiveCenterId` for graph / refs panes. - `currentFileSlice` is the projection used when the current-file lens is expanded. Includes `isRqFile`, `referencingIdeas`, `commentLinkedIdeas`, `folderReferencingIdeas`, and optional `gitChange`. - [context_selection] when the user highlights a non-empty range spanning one or more `.rq` ideas ( [activitybar.selection_pane] ). - [global_hop_depth] and [dimension_hop_control] overrides on the model. Host increments `revision` when any dimension or hop depth changes; webview ignores stale posts by revision.0.095
scope_pane_designreqlan rq/extension/local-context/context-scope.rqThe scope pane uses a **focus + lens** layout — not seven stacked lists. The experience should feel more like a wiki than a table: surfaced ideas, files, folders, commits, authors, and related context should prefer rich cross-links and drill-in navigation over flat tabular presentation. Grouping should adapt to available context rather than staying fixed: file-heavy views may group by folder / path, development-history views may group by git recency / authorship / churn, and mixed views should choose the most explanatory structure for the current focus.0.092
workspace_contextreqlan rq/extension/local-context/context-scope.rqweight: 0. 1 Always on; contributes multi-base readiness and counts ( active base + sibling summary ) unless user opens workspace pane. " Workspace " here means the VS Code workspace surface and ambient index health — not a single ontology base. Active-base routing for focus / graph / refs follows ["../../bases/base.rq".implied_context]; see [context_scope_v2.context_sources] `base`.0.066
graph_pathreqlan rq/extension/local-context/graph-path.rqOrdered nodes and edges from source to target. Each step records idea id, name, status, edge kind, and optional snippet / line for the traversed edge. Paths with unresolved hops are marked broken; UI offers jump-to-source like [activitybar.reference_lists_pane].0.047
graph_path_walkreqlan rq/extension/local-context/graph-path.rqFuture capability: walk the requirement graph **point-to-point** between two chosen ideas. Complements the activity bar's single-centre neighbourhood ( [activitybar.miniature_graph_pane] ) and Ideas Summary's unconstrained graph tab ( [graphical_graph.graphical_graph] ).0.058
implementation_notesreqlan rq/extension/local-context/graph-path.rqAnalytical: add `findPathsBetween(store, fromId, toId, options)` returning [path_result]. Wire: new `loadGraphPath` message alongside existing `loadGraph` / `loadAncestors`. UI: defer dedicated pane until [activitybar.selection_pane] and composed context are stable; prototype in Ideas Summary graph tab first.0.040
path_queryreqlan rq/extension/local-context/graph-path.rqInputs: - `fromIdeaId` ( source node ) - `toIdeaId` ( target node ) - optional `maxDepth` ( `graphHopDepth` in ["../../../packages/analytical/src/core/defaults.json"] ) - optional `edgeKinds` filter ( references, file_reference, incompatible, … ) - optional `direction` ( undirected default, or outbound-only / inbound-only for directed traces ) Output: [path_result] — zero or more shortest paths through the indexed graph, capped for token and UI limits.0.040
path_resultreqlan rq/extension/local-context/graph-path.rq- `found`: boolean - `paths`: ordered list of [graph_path] ( typically top 1 – 3 shortest ) - `truncated`: true when search hit depth or branch limits - `summaryLine`: e. g. " A → implements → B → depends on → C " for collapsed UI0.056
path_ui_designreqlan rq/extension/local-context/graph-path.rqEntry points: - Activity bar: " Path to … " on focus hero when a second idea is pinned or selected ( [context_scope.manual_context] + [activitybar.selection_pane] ). - Ideas Summary graph tab: shift-click two nodes to set endpoints. - Command palette: `Reqlan: Find path between requirements`. Presentation ( sidebar-first ): - Collapsed: [path_result] `summaryLine` under the scope footprint line. - Expanded: vertical stepper ( breadcrumb ) with edge kind labels; optional overlay on [graph_lib.graph_library] highlighting only path edges / nodes. - When no path: show closest partial path or " no connection within N hops " with expand-in-Summary action. Performance: - BFS / bidirectional BFS on sqlite edge tables via [indexer.local_graph_analysis] — never materialise full workspace graph. - Debounce endpoint changes; cache last path per `(from,to,depth)` revision tied to index catalog generation.0.040
problemreqlan rq/extension/local-context/graph-path.rqUsers often need to answer: " How does requirement A relate to requirement B? " — not the full ego-graph around A, and not an unbounded workspace dump. Today they manually expand hops or search references. A dedicated path walk would make dependency chains, impact routes, and gap analysis inspectable in the sidebar or graph tab.0.040
relationship_to_contextreqlan rq/extension/local-context/graph-path.rqPath endpoints should default from [context_scope.context_focus] and [context_scope.context_footprint]. A successful walk contributes traversed idea ids to a transient " path context " slice suitable for [context_scope.ai_context_export] without pinning every intermediate node.0.040
copy_requirementreqlan rq/extension/mutation/mutation-hooks.rqThe 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.0.040
create_requirementreqlan rq/extension/mutation/mutation-hooks.rqThe 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.0.040
merge_requirementsreqlan rq/extension/mutation/mutation-hooks.rqshould combine requirement attributes, and any references through the codebase.0.040
move_filereqlan rq/extension/mutation/mutation-hooks.rqif 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_module/register-file-mutation-hooks.ts"], ["../../../packages/extension/src/mutation_module/show-mutation-approval.ts"], and ["../../../packages/extension/src/mutation_module/file-mutation-gate.ts"].0.083
rename_filereqlan rq/extension/mutation/mutation-hooks.rqthis should update any referencess in rq files ( imports, inline references, etc ) it should also update any inline references in functional code files - per ["../language/comment-references/functional-code-comment-references.rq"] and ["./refactor_support.rq".comment_reference_refactor_support] Renaming a folder updates references to that folder and to every file inside it. The index watcher must not drop the pre-move file before inbound import planning ( ["./refactor_support.rq".refactor_file_moves] ). See also ["./refactor_support.rq".refactor_file_moves] and ["./refactor_support.rq".refactor_changes]. Implemented by ["../../../packages/extension/src/mutation_module/file-move-plan.ts"], ["../../../packages/extension/src/mutation_module/expand-renamed-paths.ts"], ["../../../packages/extension/src/mutation_module/register-file-mutation-hooks.ts"], ["../../../packages/extension/src/analytical_submodule/index-store/pending-rename-paths.ts"], ["../../../packages/language/src/file-path-rewrite.ts"], and ["../../../packages/extension/src/mutation_module/collect-inbound-referencers.ts"].0.083
split_requirementreqlan rq/extension/mutation/mutation-hooks.rqThe 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.0.040
refactor_changesreqlan rq/extension/mutation/refactor_support.rqOn 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] [comment_reference_refactor_support] 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_module/register-file-mutation-hooks.ts"].0.114
refactor_file_movesreqlan rq/extension/mutation/refactor_support.rqThe extension should watch for file moves and renames, including a renamed folder. A folder rename is expanded to every file inside it, then the index is migrated for moved . rq files, and imports and path references are updated both inside the moved file ( outbound ) and in other files that pointed at it or at the folder ( inbound ), including comment paths in code files ( [comment_reference_refactor_support] ). Import-root aliases such as `@/old/file.rq` are rewritten when that target moves ( `@/new/file.rq` ). There should be a single prompt per batch asking whether to apply path updates, aligned with [move_file] and [rename_file]. While a rename is in flight, the index file watcher must not delete the pre-move URI before inbound import planning runs — `onWillRenameFiles` marks pending paths and `migrateRenamedFile` clears the old URI after path edits are planned. Implemented by ["../../../packages/extension/src/mutation_module/register-file-mutation-hooks.ts"], ["../../../packages/extension/src/mutation_module/expand-renamed-paths.ts"], ["../../../packages/extension/src/mutation_module/file-move-plan.ts"], ["../../../packages/extension/src/mutation_module/file-mutation-gate.ts"], ["../../../packages/extension/src/mutation_module/collect-inbound-referencers-core.ts"], ["../../../packages/extension/src/analytical_submodule/index-store/pending-rename-paths.ts"], ["../../../packages/extension/src/analytical_submodule/index-store/index-service.ts"], ["../../../packages/language/src/file-path-rewrite.ts"], and ["../../../packages/language/src/reqlan-path-references.ts"].0.106
refactor_symbol_deletereqlan rq/extension/mutation/refactor_support.rqAn 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 ( [comment_reference_refactor_support] ), 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"], ["../../../crates/reqlan-lsp/src/code_actions.rs"], and ["../../../packages/extension/src/mutation_module/refactor/register-idea-refactor-commands.ts"].0.106
auto_reframereqlan rq/extension/presentation/graph.rqThe graph should automatically fit to the viewport when the loaded node set changes — without requiring the user to click " Fit to view ". After each successful syncSlice, GraphCyController compares the sorted node-id set of the incoming slice with fittedNodeSetKey ( the set the viewport was last fitted to ). When they differ, finishRender triggers an automatic reframe via reframeToViewport. Triggers when any node is added or removed from the slice ( new neighbourhood, focus change, filter change that changes membership ). Does not trigger for metadata-only updates on the same node ids ( label, colour, isCenter flag, etc. ) — those keep the user's current pan / zoom. Does not trigger on requestLayout relayout when the node-id set is unchanged.0.149
compound_graphreqlan rq/extension/presentation/graph.rqfolder hierarchy is to be supported with compound layouts. Hosting `.rq` files can also act as compound parents via ["../workspace-summary/ideas_summary/graphical_graph.rq".file_treatment_toggle] ( mode `compound` ). File compounds are styled distinctly ( ideaset accent, underlined title ), remain draggable with members, and open the hosting file on title click / double-click ( see [graph_cy_controller] ).0.067
graph_cy_controllerreqlan rq/extension/presentation/graph.rqthe cytoscape object should use event driven patterns; lifecycle is documented here. GraphCyController in ["../../../packages/extension/webviews/shared/graph/graph-cy-controller.ts"] owns the cytoscape instance with inline lifecycle state ( idle, syncing, layouting, physics ). syncGeneration cancels stale layout callbacks when the slice changes mid-layout. Selection and drag-pinned positions are tracked in userPositionedNodes on the controller. syncSlice diffs elements ( add / remove / update the delta ) via ["../../../packages/extension/webviews/shared/graph/graph-cy-elements.ts"] so surviving nodes keep positions; requestLayout restarts the active algorithm and clears user pins. Pointer / selection wiring lives in ["../../../packages/extension/webviews/shared/graph/graph-cy-interactions.ts"]; compound hover / selection / title-hit in ["../../../packages/extension/webviews/shared/graph/graph-cy-highlight.ts"]. Compound grab / drag / free pins and unpins all childless descendants so live physics does not snap members back while the container moves; released child positions are stored in userPositionedNodes. File compounds ( `isFileCompound` ): title-band tap or double-tap opens the hosting `.rq` via onOpen ( compoundId ); GraphView resolves `compound:rq-file:…` to a file URI. Live physics is the custom simulation in ["../../../packages/extension/webviews/shared/graph/graph-physics.ts"]; one instance persists with the cytoscape instance and is paused / resumed, never rebuilt. Grabbing a node pins it in the running sim ( its live position keeps exerting forces ); release unpins with no restart and no snap. ResizeObserver debounces cy. resize ( ) and re-triggers a pending sync when the container gains size. Mount only while the graph container is visible and non-zero — do not keep cytoscape alive under display: none; WebGL init on a zero-size hidden container can break the host webview before messaging is attached. Viewport fitting per [reframe_view]; tracks lastSyncedNodeSetKey vs fittedNodeSetKey to drive [auto_reframe]. Label visibility per [graph_label_modes] / [graph_label_auto]: setLabelMode updates text-opacity from zoom ( and hover / drag force-opaque in auto ).0.103
graph_cy_elementsreqlan rq/extension/presentation/graph.rqsyncGraphElements diffs the live cytoscape graph against the desired slice rather than remove-all / add-all on every sync. Surviving nodes keep positions; only added / removed / updated elements move. Mutable data fields ( label, color, flags ) can update without a structural relayout. per ["../../../packages/extension/webviews/shared/graph/graph-cy-elements.ts"].0.040
graph_cytoscapereqlan rq/extension/presentation/graph.rqbuilds cytoscape elements and stylesheet from a generic node / edge slice. registers batch layout options ( fcose, cola, breadthfirst, circle, concentric, grid, random ) and seeds positions for new nodes. exposes CompoundBasis ( single-membership folder tree ) and GroupBasis ( flat multi-membership ) as grouping inputs. per ["../../../packages/extension/webviews/shared/graph/graph-cytoscape.ts"] and ["../../../packages/extension/webviews/shared/graph/graph-theme.ts"]. getLayoutConfig sets fit: false for initial ( mode = = = ' initial' ) batch layouts so [auto_reframe] owns the first viewport fit; relayout modes may still fit via the layout algorithm.0.055
graph_designreqlan rq/extension/presentation/graph.rqThe graph should show nodes for ideas and files and edges for references. Used by Ideas Summary, activity-bar minigraph, and export previews.0.040
graph_libraryreqlan rq/extension/presentation/graph.rqReusable cytoscape-based graph visualization library for force-directed and compound graphs. Provides a mount → sync slice → layout → optional live physics → destroy lifecycle with a simplified API. Implementation lives in ["../../../packages/extension/webviews/shared/graph/graph-cytoscape.ts"], ["../../../packages/extension/webviews/shared/graph/graph-cy-controller.ts"], ["../../../packages/extension/webviews/shared/graph/graph-cy-elements.ts"], ["../../../packages/extension/webviews/shared/graph/graph-cy-interactions.ts"], ["../../../packages/extension/webviews/shared/graph/graph-cy-highlight.ts"], ["../../../packages/extension/webviews/shared/graph/graph-physics.ts"], ["../../../packages/extension/webviews/shared/graph/graph-groups.ts"], and ["../../../packages/extension/webviews/shared/graph/graph-theme.ts"]. Ideas Summary re-exports the shared modules from ["../../../packages/extension/webviews/ideas-summary/lib/"] for backward-compatible import paths. Consumers pass a node / edge slice and sync options; the library owns the cytoscape instance, diffing, layout runs, and optional continuous physics.0.064
layout_optionsreqlan rq/extension/presentation/graph.rq- user can select from a dropdown of layout options offered by cytoscape. js - user can select whether to use compound layouts ( where compound basis is based on the folder structure ) - compound basis should be flexible and expected as an input0.067
layout_physicsreqlan rq/extension/presentation/graph.rqdefaults to force-directed layout ( fcose ) with animation on, but callers can select other options offered by cytoscape. js. a toggle leaves layout animation and live physics on for force-directed layouts instead of settling immediately. live physics is the custom obsidian-style simulation in ["../../../packages/extension/webviews/shared/graph/graph-physics.ts"] ( force core: ["../../../packages/extension/webviews/shared/graph/physics-core.js"] ), regardless of which force-directed batch layout produced the initial settle. forces are central gravity toward the centroid, linear edge springs, and inverse-square node repulsion; every childless node participates, including disconnected orphans. group container constraints live in ["../../../packages/extension/webviews/shared/graph/graph-groups.ts"]: each leaf carries data ( ' groupIds' ); disjoint groups are pushed apart after batch cola / fcose and during Animate; groups that share a member ( multi-membership, e. g. tags ) may overlap around the shared node. the simulation is deterministic ( no randomness ) and converges slowly over tens of seconds, then sleeps; interactions wake it instead of restarting it. dragging pins the held node while the sim keeps running around it; release rejoins the node at rest with no snap; clicks never disturb the sim. Dragging a compound container pins every childless descendant for the same reason ( see [graph_cy_controller] ). cycling the Animate toggle pauses and resumes the same simulation state, so it converges to the same attractor as leaving it on.0.096
manual_reframereqlan rq/extension/presentation/graph.rqUsers can explicitly reframe the viewport when pan / zoom has moved the graph off-screen or they want to see the whole neighbourhood again. - " Fit to view " control in ["../../../packages/extension/webviews/ideas-summary/components/GraphControls.svelte"] dispatches to GraphView → GraphCyController. reframeToViewport ( ). - " Fit to view " control in ["../../../packages/extension/webviews/activity-bar/components/MiniGraphCanvas.svelte"] calls the same API on the mini-graph controller. Every graph surface that mounts GraphCyController should expose this control.0.150
physics_optionsreqlan rq/extension/presentation/graph.rq- user can select from a dropdown of physics options offered by cytoscape. js - the options for the physics should be exposed to the user in a menu too. - user can select whether to use live physics / animation - live physics uses the custom graph-physics simulation; cola remains selectable as a batch layout in the layout dropdown - Ideas Summary exposes layout, live-physics, and force sliders in ["../../../packages/extension/webviews/ideas-summary/components/GraphControlPanel.svelte"]0.067
reframe_animationreqlan rq/extension/presentation/graph.rqThe first reframe on a controller mount is instant ( synchronous cy. fit + cy. center ) so the graph appears immediately on first paint. Every subsequent reframe — automatic ( [auto_reframe] ) or manual ( [manual_reframe] ) — animates pan and zoom smoothly over GRAPH_REFRAME_ANIMATION_MS using cytoscape. animate ( { fit, easing: ' ease-out-cubic ' } ). Callers may pass `reframeToViewport({ animate: false })` to force an instant reframe. Initial batch layouts use fit: false ( see [graph_cytoscape] ) so the controller owns the first fit and later animated handoffs are not double-applied.0.113
reframe_viewreqlan rq/extension/presentation/graph.rqShared viewport behaviour for every surface that mounts GraphCyController ( Ideas Summary graph tab, activity bar mini graph, and future consumers ). Implementation: reframeGraphToViewport and GraphCyController. reframeToViewport in ["../../../packages/extension/webviews/shared/graph/graph-cy-controller.ts"]. [manual_reframe] [auto_reframe] [reframe_animation] Constants: GRAPH_VIEWPORT_PADDING ( 36 px padding around the element bounding box ), GRAPH_REFRAME_ANIMATION_MS ( 400 ms animated transition ). Reframes resize the cytoscape container first, then fit all elements and centre the camera. Does not clear selection, centreId, user-pinned drag positions, or live physics state — viewport only.0.118
technologyreqlan rq/extension/presentation/graph.rquses cytoscape. js for the graph layout and canvas. cytoscape-fcose provides the batch force-directed settle; cytoscape-cola is available as a batch layout option. continuous ( " live " ) physics is a custom simulation in ["../../../packages/extension/webviews/shared/graph/graph-physics.ts"]. the controller initialises cytoscape with Canvas 2 D only ( pixelRatio 1, no WebGL ) so webviews do not break on unresolved CSS variables. Body prose with inline parentheses must parse per ["../../../reqlan rq/language/syntax.rq".lists] and ["../../../reqlan rq/language/syntax.rq".round_brackets].0.040
view_controlsreqlan rq/extension/presentation/graph.rqpan, zoom, and drag repositioning are supported on the canvas. Leaf nodes and compound containers are both draggable; compound drag moves members with the parent. zoom range is wide rather than tightly capped so users can inspect fine detail or see the whole neighbourhood. [reframe_view] fits and centres the camera on the graph bounding box without changing node positions or restarting layout / physics. Zoom and Fit must continuously drive [graph_label_auto] opacity when Labels is in auto mode.0.131
webview_threadingreqlan rq/extension/presentation/graph.rqVS Code webviews run JavaScript on a single main thread, like a browser tab. Heavy synchronous work — cytoscape layout iterations, large element builds, unbounded loops — blocks UI updates until it finishes. Layout iteration count scales with node count ( capped ) rather than running unbounded defaults. Do not restart layout synchronously on layoutstop; hand off to the graph-physics simulation, which integrates one step per requestAnimationFrame instead of blocking.0.078
webviewreqlan rq/extension/presentation/webview.rqExtension webviews are Svelte UIs hosted by the VS Code extension per [development_core]. They should be performance conscious: prefer capped, paginated, or scoped slices and avoid full-graph dumps unless the user explicitly requests one. The extension host loads compiled assets from `packages/extension/media/webviews/`. UI state conventions: [typescript_codestyle.ui_state_management] / [typescript_codestyle.webview_app_state]. Webview modules in the extension: - Ideas Summary — overview, ontology tables ( bases / ideas / ideasets / attributes / references ), graph, and index ( last ): [ideas_summary] / ["../workspace-summary/ideas_summary/webview.rq".ideas_summary] / ["../workspace-summary/ideas_summary/webview.rq".ontology_aligned_tabs] - Activity bar — editor-adjacent sidebar panes: ["../local-context/activitybar.rq".activity_bar] - Export form — multi-format graph export: ["../export/export.rq".export_webview] - Onboarding — first-install / welcome webview: ["../host/onboarding/page-thanks-for-installing.rq".installation_event]0.100
cola_vs_phyicsreqlan rq/extension/workspace-summary/ideas_summary/graphical_graph.rqthe user should have a constraint based layout; and a physics based layout; and some other options.0.040
control_panelreqlan rq/extension/workspace-summary/ideas_summary/graphical_graph.rqFloating panel in ["../../../../packages/extension/webviews/ideas-summary/components/GraphControlPanel.svelte"], toggled from [ui_controls]. Provides layout algorithm selection, live-physics toggle, compound grouping, physics force sliders, max node count, and truncation basis. Physics tunables call GraphCyController. setPhysicsSettings; node budget changes re-request the graph slice via loadGraph. Mounted as a sibling of the cytoscape container ( not inside it ) so range sliders and selects work with native browser events. When positioned, a ResizeObserver on the surface wrap reclamps panelX / panelY so the panel stays fully inside after the webview is resized; Key panel uses the same reclamp. Open / closed state and all control values persist per [graph_ui_persistence].0.102
graph_loadingreqlan rq/extension/workspace-summary/ideas_summary/graphical_graph.rqthe extension pushes graphSlice when the index is ready — no empty waitingForIndex wedge. ["../../../../packages/extension/src/ideas_summary_module/ideas-summary-panel.ts"] sets graphSlicePending on loadGraph and delivers the slice when the index becomes ready ( including via index status updates ). Index status posts must not await graph slice builds, so sync progress keeps updating the Index tab. webview state in ["../../../../packages/extension/webviews/ideas-summary/state/app.svelte.ts"] is query, slice, loading, rendering, and error only. App. init attaches the window message listener during App. svelte script setup ( before child onMount ) so loadGraph replies are never dropped. GraphView marks a slice as synced only in onRendered ( after cytoscape flush + layout ), not before syncSlice is queued. Webview → extension posts go through ["../../../../packages/extension/webviews/ideas-summary/lib/vscode.ts"] which JSON-clones payloads so Svelte $ state proxies are structured-clone safe. GraphView remount reuses app. graph. slice when present; it only loadGraphs when there is no slice and nothing in flight, or force-retries after an error. GraphView mounts only while the graph tab is active ( see TabPanels ); per [graph_cy_controller] do not keep cytoscape alive under display: none.0.045
graph_ui_persistencereqlan rq/extension/workspace-summary/ideas_summary/graphical_graph.rqKey and Controls state is stored in VS Code ExtensionContext. workspaceState under key GRAPH_UI_WORKSPACE_STATE_KEY ( reqlan. ideasSummary. graphUi ). Shape and normalisation live in ["../../../../packages/extension/src/ideas_summary_module/shared/graph-ui-state.ts"]; the host reads / writes it from ["../../../../packages/extension/src/ideas_summary_module/ideas-summary-panel.ts"]. On webview ready the extension posts graphUiState; the webview posts persistGraphUiState ( debounced ) whenever AppState. patchGraphUi runs in ["../../../../packages/extension/webviews/ideas-summary/state/app.svelte.ts"]. Persisted fields: showKey, showControls, hiddenNodeTypes, layoutId, useCompound, compoundBasisId, animatePhysics, labelMode, fileTreatment, maxNodes, truncationBasis, and the five physics sliders ( gravity, repulsion, linkStrength, linkDistance, damping ). GraphView in ["../../../../packages/extension/webviews/ideas-summary/components/GraphView.svelte"] treats app. graph. ui as the source of truth and applies layout / physics / hidden types / label mode / fileTreatment to GraphCyController when those fields change. The first graph load waits for graphUiState so restored node budget is included in loadGraph.0.165
graphical_graphreqlan rq/extension/workspace-summary/ideas_summary/graphical_graph.rqThere should be a tab that renders requirement ideas and references as a force-directed web. The graph tab lives in the Ideas Summary webview per [ideas_summary]. UI is implemented in ["../../../../packages/extension/webviews/ideas-summary/components/GraphView.svelte"]. Graph slices are built in ["../../../../packages/analytical/src/index-store/webview-graph-queries.ts"] and served by ["../../../../packages/extension/src/ideas_summary_module/ideas-summary-panel.ts"]. By default the view focuses on the active editor file's first idea; without a focus it shows a capped slice of matching ideas rather than dumping the full graph. Users can filter by search text, path, multi-select @ status, and multi-select tags per [graph_status_tag_filters]. An " Indirect references " toggle expands neighbourhood depth from 1 to 2 hops. A " Wildcard refs " toggle includes or hides edges expanded from path + idea wildcards per [wildcard_refs_toggle] ["@/reqlan rq/language/imports.rq".wildcard_references] A " Files " dropdown selects hosting- `.rq` treatment per [file_treatment_toggle] ( hidden / compound containers / linked ideaset nodes ), with per-option info tooltips. Interactive graph controls that also exist on HTML export must stay aligned per [webview_export_graph_parity]. Clicking a node opens its source; double-click or " Focus graph " recenters the slice on that idea. Linked file ideaset nodes and file-compound titles open the hosting `.rq` file per [file_treatment_toggle]. External file references render as dashed edges to file nodes; wildcard-fan-out edges render dotted. A toggleable key explains node colours and edge styles and toggles node-type visibility per [key_panel_toggle]; a toggleable [control_panel] exposes layout, physics, and node-budget settings. Key and Controls state persist per workspace via [graph_ui_persistence]. Pan, zoom, and drag repositioning per [view_controls]. [manual_reframe] via " Fit to view " in [ui_controls]; [auto_reframe] when the loaded node set changes; [reframe_animation] for smooth transitions after the first paint. Node text labels per [graph_labels], [graph_label_modes], and [graph_label_auto]. Layout, compound grouping, and live physics behaviour per [layout_physics], [layout_options], [physics_options], and [compound_graph]. Cytoscape lifecycle and threading constraints per [graph_cy_controller] and [webview_threading].0.207
key_and_controlsreqlan rq/extension/workspace-summary/ideas_summary/graphical_graph.rqthere is a toggle that open a key; and a toggle that opens a [control_panel].0.040
key_panel_togglereqlan rq/extension/workspace-summary/ideas_summary/graphical_graph.rqthe key panel should be able to toggle inclusion / visibility of the different node types. Node-type rows in ["../../../../packages/extension/webviews/ideas-summary/components/GraphKeyPanel.svelte"] are toggle buttons; hidden types render dimmed with a struck-through label. Toggleable types are block, one-liner, ideaset, focused idea, and external file — GraphNodeTypeId in ["../../../../packages/extension/webviews/shared/graph/graph-theme.ts"], classified per node by graphNodeTypeId ( same priority as node fill colour ). Linked file ideaset nodes ( `isFileIdeaset` ) classify as ideaset for Key toggles; file compound containers are legend-only ( " File group " ) and follow member visibility like other compounds. GraphView tracks hidden types and calls GraphCyController. setHiddenNodeTypes in ["../../../../packages/extension/webviews/shared/graph/graph-cy-controller.ts"], which flags matching nodes with data typeHidden; a display: none stylesheet rule in ["../../../../packages/extension/webviews/shared/graph/graph-cytoscape.ts"] hides them, and cytoscape hides edges whose endpoint is hidden. Compound containers whose members are all hidden are hidden too. Hiding is client-side visibility only: the slice still contains the nodes, node / edge counts are unchanged, and flags reapply after every slice sync. Key open state and hidden node types persist per [graph_ui_persistence].0.067
libraryreqlan rq/extension/workspace-summary/ideas_summary/graphical_graph.rqshould consume the [graph_library]0.040
node_truncationreqlan rq/extension/workspace-summary/ideas_summary/graphical_graph.rqnodes are truncated if there are too many. the count should be configurable; as should the truncation basis ( last changed.., last accessed.., owned by etc. ) Max nodes and keep-by basis are edited in [control_panel]; query fields are maxNodes and truncationBasis on GraphViewQuery. Default budget is GRAPH_MAX_NODES ( 120 ); hard ceiling is GRAPH_NODES_HARD_CAP ( 1000 ) in ["../../../../packages/analytical/src/index-store/webview-graph-queries.ts"] — raise that constant to lift the cap. Supported bases today: path, git-modified, git-created ( git timestamps from the index ). Last-accessed / owned-by need index fields before UI can offer them.0.054
referenced_files_groupingreqlan rq/extension/workspace-summary/ideas_summary/graphical_graph.rq[referenced_files] should be grouped into a common node if they're referenced by multiple ideas. Line numbers should be treated like ideas if specified, such that the reference points to items in rendered graph.0.046
rootreqlan rq/extension/workspace-summary/ideas_summary/graphical_graph.rq["../../../../packages/extension/webviews/ideas-summary/components/GraphView.svelte"]0.040
ui_controlsreqlan rq/extension/workspace-summary/ideas_summary/graphical_graph.rqControls live in ["../../../../packages/extension/webviews/ideas-summary/components/GraphControls.svelte"] and dispatch events to GraphView. [manual_reframe] — " Fit to view " calls GraphCyController. reframeToViewport per [reframe_view]. [auto_reframe] and [reframe_animation] are handled by the shared controller; no extra UI beyond pan / zoom / drag. Labels control cycles [graph_label_modes] ( auto / on / off ) and applies [graph_label_auto] via GraphCyController. setLabelMode. Files dropdown ( [file_treatment_toggle] ) uses ["../../../../packages/extension/webviews/ideas-summary/components/FileTreatmentSelect.svelte"] with Hidden / Compound / Linked options and info tooltips; selection patches `fileTreatment` in [graph_ui_persistence]. Status and tag filters are multi-select dropdowns per [graph_status_tag_filters]. The Key button toggles a draggable legend panel in ["../../../../packages/extension/webviews/ideas-summary/components/GraphKeyPanel.svelte"] over the graph canvas. The Controls button toggles [control_panel]. Overlay panels ( Key and Controls ) are siblings of the cytoscape mount inside a graph-surface-wrap — never children of the cy container — so native form controls receive pointer events.0.167
attributes_tabreqlan rq/extension/workspace-summary/ideas_summary/webview.rqAttributes index for the active base, aligned with [html_export.html_export_attributes_index]: attribute key, idea count, distinct value count, sample values. Searchable and filterable; clicking a key opens Ideas with that attribute column enabled. Aggregated in [webview_table_queries] / sqlite store.0.045
graph_viewreqlan rq/extension/workspace-summary/ideas_summary/webview.rqIdeas Summary provides 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.0.040
graphical_graph_tabreqlan rq/extension/workspace-summary/ideas_summary/webview.rqsee [graphical_graph_doc.graphical_graph]0.040
group_by_typereqlan rq/extension/workspace-summary/ideas_summary/webview.rqIdeas table can group by idea kind ( block / oneliner ). References table can group by reference type ( file / comment / sub-idea ). Grouping is a toolbar toggle; rows are ordered by group then the active sort; UI shows collapsible group headers.0.061
ide_page_reportsreqlan rq/extension/workspace-summary/ideas_summary/webview.rqIdeas Summary provides dedicated report pages inside the IDE ( graph page and status table at minimum ). Report pages may render computed information that is not present as literal text in source files.0.040
idea_sets_tabreqlan rq/extension/workspace-summary/ideas_summary/webview.rqThe idea sets page should list the ideasets unlike the ideas page, it should not directly to the ideaset, but should have a dropdown to it's items. the path column should link to the ideaset source. members should appear as chips with a … control to expand and show all member chips when needed. per [IdeasetsTable]0.052
ideas_summaryreqlan rq/extension/workspace-summary/ideas_summary/webview.rqThe Ideas Summary webview is a workspace-wide page for tables ( and graph ) summarising ideas per [simple_views] and [webview_doc.webview]. Tabs align with salient [ontology] data and HTML export list views ( [html_export.html_export_list_views] ): [ontology_aligned_tabs]. It should be performance conscious and avoid full-graph dumps unless requested by the user. It should be paginated. It should be filterable and sortable via a ui-sql layer per [table_column_filters] and [table_column_options]. Webview UI is implemented with Svelte per [development_core] the extension host loads compiled assets from `packages/extension/media/webviews/ideas-summary` ( Vite output of [ideas_summary_webview] ) table queries are built in [webview_table_queries] the extension host forwards query state through [ideas_summary_panel] Ideas Summary chrome should include a link that opens [features_export.export_webview]. Multi-base scope and switcher: [ideas_summary_base.ideas_summary_base_scope].0.134
index_panelreqlan rq/extension/workspace-summary/ideas_summary/webview.rqLast tab: workspace index health — readiness, summary stats, sync progress, errors, refresh / cancel / clear-and-rebuild. per [index_reqs.idea_index_triggers] and ["../../../indexer/indexer.rq".nonblocking_index] Implemented by [IndexPanel].0.120
ontology_aligned_tabsreqlan rq/extension/workspace-summary/ideas_summary/webview.rqTab order: Overview, Bases, Ideas, Ideasets, Attributes, References, Graph, Timeline, Index. Index is last — workspace index health and maintenance, not the primary browsing surface. Covers [ontology.base], [ontology.idea], [ontology.ideaset], [ontology.attribute], [ontology.reference], the graph cartography tab, and [timeline_page]; Overview mirrors HTML export home metrics lightly. Files / clusters / print families stay export-only for now.0.086
overview_pagereqlan rq/extension/workspace-summary/ideas_summary/webview.rqFirst tab: a workspace overview for the active base — product-facing copy ( not index / debug jargon ). - At a glance: idea count, reference count, issues, bases, and a friendly readiness status. - Coverage: collapsible [overview_coverage_scores] ( lazy, non-blocking ). - Search: live cross-surface search over ideas, ideasets, attributes, and references for the active base; results group by surface with sample hits and actions to open the matching tab with the query applied ( [overview_search] ). - Export: buttons that open [features_export.export_webview] with HTML, Markdown, JSON, CSV, or PDF pre-selected ( or the form without a format override ). - Links: project site, support / email, GitHub. - Recent index / analyse activity preview ( idea names when available ) with a link to [timeline_page] for idea git history — this preview is not a git surface.0.057
overview_searchreqlan rq/extension/workspace-summary/ideas_summary/webview.rqOverview search fans out across Ideas, Ideasets, Attributes, and References using the same ui-sql filters as those tabs. Debounced; returns counts plus a short sample of hits per surface; clicking a hit opens the idea ( or the attribute → Ideas handoff ); " Open in … " applies the search string on that tab.0.047
pagesreqlan rq/extension/workspace-summary/ideas_summary/webview.rq- ideas summary [ideas_summary_panel] - header / status chrome with base switcher and link to [features_export.export_webview]; error state of the status chrome per ["../../local-context/activitybar.rq".error_status_bar] - [overview_page] [OverviewPanel] - [bases_tab] [BasesTable] - [ideas_list] - ideasets [IdeasetsTable] / [idea_sets_tab] - filterable and sortable via ui-sql layer; column filters and options - [attributes_tab] [AttributesTable] - references [ReferencesTable] - filterable and sortable via ui-sql layer; groupable by reference type per [group_by_type] - Graph view: see [graphical_graph_doc.graphical_graph] - [timeline_page] [TimelinePanel] - [index_panel] [IndexPanel] ( last tab — index health )0.040
simple_viewsreqlan rq/extension/workspace-summary/ideas_summary/webview.rqIdeas Summary tables cover ideas ( title, path / namespace, main and other attributes, reference counts ) and references ( source and target path / namespace, whether in `.rq`, reference type ).0.058
status_tablereqlan rq/extension/workspace-summary/ideas_summary/webview.rqIdeas Summary 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.0.040
table_column_optionsreqlan rq/extension/workspace-summary/ideas_summary/webview.rqEach table has an Options control ( [TableOptionsMenu] ) to show or hide columns. Visibility persists per tab in workspaceState via [table_ui_state].0.073
already_cachedreqlan rq/indexer/cache-reuse.rqMechanisms that already reuse stored state: - Soft sync mtime skip on [ideas_schema.documents_table] ( [nonblocking_index] ) - Idle stale check that indexes only dirty paths ( [indexing_trigger_auto] ) - Git date columns on [ideas_schema.ideas_table] ( no git walk on every UI paint ) - Fuzzy search and paged Ideas Summary SQL over SQLite ( avoid full in-memory dumps when used ) [index_cache_reuse]0.040
diagnostics_consumersreqlan rq/indexer/consumers.rqReaders of [diagnostics_schema.diagnostics_sqlite] / [index_diagnostics_store]: - Index diagnostics webview ( [diagnostics_panel] / [index_diagnostics_webview] ) - Soft / hard sync writers that append sync_runs and file_timings - Ideas Summary timeline / problem list for activity rings and file issues ( Rust schema v2 ) [index_consumers]0.068
extension_ui_consumersreqlan rq/indexer/consumers.rqVS Code surfaces that query the live ideas store through [editor_index_adapter]: - Activity bar workspace / search / minigraph / todo ( [activity_bar_host] ) - Ideas Summary panel ( [ideas_summary_panel] ) — prefer paged SQL and capped graph queries - Reference-search and wildcard-match panels ( may call `listAllIdeas`; see [cache_reuse.avoid_full_list_all_ideas] ) - Chat / AI commands that call `getFileContext`, `getLocalGraph`, or semantic search - Refactor and mutation hooks that read inbound edges from the store - Name and attribute catalog sync that pushes index rows into the language server The Rust language server may open the ideas index read-only for rename, find-references, and fallback completion. Open-file inbound inlays and file CodeLens use the host-pushed snapshot first ( no SQLite in those handlers ). [index_consumers]0.086
headless_consumersreqlan rq/indexer/consumers.rqCLI and MCP open the same per-base application memory via [analysis_runtime] / `openAnalysisApi`. They sync on activate or command ( ["./sequencing.rq".headless_sync_on_ready] ). They have no file watchers and no idle stale loop. Shared path rules: [application_memory], `REQLAN_INDEX_PATH` when set. [index_consumers] [cli_package] [mcp_server]0.054
activity_ring_tablesreqlan rq/indexer/diagnostics-schema.rqRust diagnostics schema v2 also keeps activity rings: - `document_updates` — Ideas Summary timeline “ index ” events ( `file_uri`, `idea_count`, `ideas`, `at` ) - `workspace_changes` — watcher create / change / delete activity ( `file_uri`, `change`, `at` ) Cap: 50 rows each ( [diagnostics_rust] `MAX_ACTIVITY` ). [diagnostics_sqlite]0.040
diagnostics_meta_tablereqlan rq/indexer/diagnostics-schema.rqTable `meta` — `key TEXT PRIMARY KEY`, `value TEXT NOT NULL`. Stores `schema_version` for [diagnostics_sqlite].0.040
file_index_issues_tablereqlan rq/indexer/diagnostics-schema.rqTable `file_index_issues` ( Rust diagnostics schema v2 ) persists parse / extract / persist problems. Columns: `file_uri`, `line`, `column`, `message`, `phase`, `idea_names`, `cause`, `at`. Cap: 500 rows. Survives editor restart for Ideas Summary problem lists. [diagnostics_sqlite]0.040
file_timings_tablereqlan rq/indexer/diagnostics-schema.rqTable `file_timings` stores per-file duration rows for a sync run. Columns: `id`, `run_id` ( FK → `sync_runs` ), `file_uri`, `duration_ms`, `outcome`, `path_depth`. Indexes: `idx_file_timings_run`, `idx_file_timings_duration`. [diagnostics_sqlite] [index_diagnostics_timing]0.040
sync_runs_tablereqlan rq/indexer/diagnostics-schema.rqTable `sync_runs` records one soft / hard / idle indexing pass. Columns include: `id`, `started_at`, `finished_at`, `duration_ms`, `trigger`, `total_files`, `skipped_mtime`, `indexed_files`, `error_files`, `cancelled`, `sum_file_duration_ms`, `avg_path_depth`. Retention keeps the latest 50 runs ( [diagnostics_rust] `MAX_RETAINED_RUNS` ). Feeds [index_diagnostics_metrics] and [index_diagnostics_webview]. [diagnostics_sqlite] ["./sequencing.rq".index_triggers]0.070
capabilitiesreqlan rq/indexer/indexer.rqProduct capabilities over the [index]: [index_ideas], [index_technology], [local_graph_analysis], [semantic_analysis], [git_dates], [completion_tracking], [deprecation_impact_analysis], [index_comment_reference_inclusion], and host triggers in [graph_analysers]. Indexing performance timing and diagnostic UI: ["../extension/index-host/index-diagnostics.rq".index_diagnostics].0.040
completion_trackingreqlan rq/indexer/indexer.rqTrack 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.0.050
consumptionreqlan rq/indexer/indexer.rqConsumers of the analytical [index]: - [extension] — thin VS Code adapter [editor_index_adapter] ( file watchers, Uri conversion, UI status ) - CLI ( `["../cli/cli_package.rq".cli_package]` ) and MCP — headless [analysis_runtime] The extension does not own the indexing engine; it only hosts the adapter. Module map: [consumers.index_consumers].0.146
definitionreqlan rq/indexer/indexer.rqThe indexer should live in the [core_analysis] module. On-disk schema: [sqlite_schema.ideas_index_sqlite] and [diagnostics_schema.diagnostics_sqlite]. Layout and WAL sidecars: [sidecars.reqlan_directory_layout]. Consumers: [consumers.index_consumers] ( extends [consumption] ). Sequencing and triggers: [sequencing.index_sequencing] ( extends [triggers] ). Cache reuse opportunities: [cache_reuse.index_cache_reuse].0.040
deprecation_impact_analysisreqlan rq/indexer/indexer.rqAnalyse the impact of deprecated ideas on dependent requirements. Deprecation analysis should report downstream ideas that reference or depend on deprecated items.0.050
indexreqlan rq/indexer/indexer.rqThe ideas graph indexer: parse `.rq` with the native engine, extract ideas / edges, persist to rusqlite SQLite. Same-file `[ideaset.member]` edges target the member leaf ( ["../language/syntax.rq".references_to_subidea] ). Wildcard path + idea fan-out: [wildcard_reference_edges] ( ["../language/imports.rq".wildcard_references] ). Ideas Summary graph can hide those edges via [ideas_summary_doc] / ["../extension/workspace-summary/ideas_summary/graphical_graph.rq".wildcard_refs_toggle]. Soft mtime sync skips unchanged files. `extract_version` in the ideas index meta is the extract-rule generation. When that number does not match the engine, sync rebuilds so stale edges do not remain ( ["../language/syntax.rq".inline_code] ). Owned by [ownership]; consumed per [consumption].0.587
index_diagnostics_timingreqlan rq/indexer/indexer.rqSoft sync and per-file index paths record durations into the diagnostic index under [app_memory_doc.index_diagnostics_store]. See ["../extension/index-host/index-diagnostics.rq".index_diagnostics_metrics]. Must not block [nonblocking_index]; recording failures are swallowed / logged by the store and must not fail the sync.0.096
index_ideasreqlan rq/indexer/indexer.rqEach ["../bases/base.rq".base] maintains an index of its ideas for fast lookup and navigation ( [index] ). The index should update incrementally as. rq files change within that base ( nested child bases excluded ). Persistence lives in [app_memory_doc.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].0.173
index_technologyreqlan rq/indexer/indexer.rqThe [index_ideas] graph database is rusqlite via the core native engine. On-disk location is [app_memory_doc.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.0.152
indexing_incrementalityreqlan rq/indexer/indexer.rqIndexing 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 ): [nonblocking_index].0.161
local_graph_analysisreqlan rq/indexer/indexer.rqProvide a function to access a small slice of the graph around a given idea.0.118
ownershipreqlan rq/indexer/indexer.rqThe [index] / indexer lives in `packages/analytical` ( `@reqlan/analytical` ). Canonical single-base engine: [workspace_index] ( `WorkspaceIndex` facade ). Sync / idle impl: [workspace_index_sync]; one-file parse + persist: [workspace_index_file]; mtime stale diff: [workspace_mtime]. Multi-base registry: one `WorkspaceIndex` per discovered ["../bases/base.rq".base] under [app_memory_doc.application_memory] ( `<base>/.reqlan/` ). Headless entry: [analysis_runtime] via native-only `openAnalysisApi` ( CLI / MCP ). On-disk store path: [application_memory_impl] under `<base>/.reqlan/` — see [app_memory_doc.application_memory].0.237
semantic_analysisreqlan rq/indexer/indexer.rqSearch the graph for ideas related to a given idea or ideaset.0.050
triggersreqlan rq/indexer/indexer.rqIndex refresh behaviour: - [indexing_incrementality] / [nonblocking_index] — incremental where possible - [graph_analysers.indexing_trigger_filesave] / [app_memory_doc.idea_index_triggers] — on `.rq` or indexed code-file change - [graph_analysers.indexing_trigger_manual] — manual reindex commands - [graph_analysers.indexing_trigger_open] — one soft sync after the activity-bar first-paint gate - [graph_analysers.indexing_trigger_auto] — idle background mtime staleness check ( cheap; not a full reindex ) Editor watches + idle scheduler: [editor_index_adapter]; headless syncs on runtime activate. Full sequence: [sequencing.index_sequencing].0.148
base_catch_upreqlan rq/indexer/sequencing.rqActivating or pinning a base schedules an open + soft sync when that base is not ready. Nested child bases stay excluded from the parent walk ( [index] ). [index_sequencing] [indexing_trigger_open]0.040
extension_startup_sequencereqlan rq/indexer/sequencing.rqExtension host order ( [first_paint_startup], [background_startup] ): 1. `activate` registers UI only; it must not await index sync. 2. Activity bar paints → startup gate; language client may start on a short fallback. 3. Index adapter activates after paint ( or a short fallback timer ). 4. One native scan ( [cache_reuse.single_sync_walk], [scan_limits] ) records bases and file paths. Soft [soft_sync] then runs for the **active** base only ( [indexing_trigger_open] ); other bases stay closed until pin / focus / file events ( ["../extension/index-host/sqlite-artifact-lifecycle.rq".event_driven_base_access] ). 5. Install watchers for `.rq` and code globs; watch `.reqlan` marker create / delete for rediscovery ( not SQLite child writes ). 6. Idle timer runs [idle_stale_check] on already-open bases, then releases unused SQLite artifacts ( ["../extension/index-host/sqlite-artifact-lifecycle.rq".release_when_idle] ). [index_sequencing] [editor_index_adapter] Open-file editor links follow ["../extension/language/support/open-file-sequencing.rq".open_file_algorithm] and must not wait for this crawl.0.054
hard_rebuildreqlan rq/indexer/sequencing.rqHard rebuild ( `clearAndRebuildIndex` / Clear & rebuild ) wipes ideas-index rows and reindexes every file. It must not delete [diagnostics_schema.diagnostics_sqlite]. Trigger: [indexing_trigger_manual]. [index_sequencing] [nonblocking_index]0.040
headless_sync_on_readyreqlan rq/indexer/sequencing.rqCLI and MCP call [analysis_runtime] `ensure_ready`, which runs a soft [soft_sync] from [cache_reuse.single_sync_walk] once before serving commands. No watchers and no idle loop ( [consumers.headless_consumers] ). [index_sequencing]0.054
idle_stale_checkreqlan rq/indexer/sequencing.rqWhen the editor is idle, use document paths already stored in SQLite ( do not scan the tree ), load mtimes in one SQLite read, compare FS mtimes in memory, and index only mismatched or new files; drop deleted docs in one batch. If nothing is stale: no state transition, no progress UI, no parse. Prefer unfocused windows; cancel if the user becomes active again. Only bases that are already open participate — idle must not reopen every discovered base ( ["../extension/index-host/sqlite-artifact-lifecycle.rq".release_when_idle] ). After the check, release unused SQLite artifacts ( inactive bases always; all bases when unfocused ). Extension host only — see [indexing_trigger_auto]. [index_sequencing]0.075
index_triggersreqlan rq/indexer/sequencing.rqTrigger map for [index_sequencing]: - [indexing_trigger_open] — one soft sync after activity-bar first paint / base activate - [indexing_trigger_filesave] — watcher create / change / delete on `.rq` and allowlisted code files - [indexing_trigger_manual] — Refresh ( soft ) or Clear & rebuild ( hard ) - [indexing_trigger_auto] — idle mtime stale check; index only dirty paths Git-dates fill is not an index trigger ( [idea_index_triggers] ). Each sync run may record a `trigger` string in [diagnostics_schema.sync_runs_table].0.049
soft_syncreqlan rq/indexer/sequencing.rqSoft full sync ( `syncWorkspace` / Refresh ) indexes the path list from [cache_reuse.single_sync_walk]. It skips files whose FS mtime matches [ideas_schema.documents_table]. `mtime_ms`, and upserts changed files only. Progress and cancel follow [nonblocking_index]. Prefer a single walk ( [cache_reuse.single_sync_walk] ). Triggers: [indexing_trigger_open], [indexing_trigger_manual] ( Refresh ). [index_sequencing]0.081
watcher_incrementalreqlan rq/indexer/sequencing.rqFile create / change / delete indexes or deletes that one path only — never a full base walk. Covers `.rq` sources and allowlisted code files for [index_code_files]. Trigger: [indexing_trigger_filesave]. [index_sequencing] [indexing_incrementality]0.040
json_siblingsreqlan rq/indexer/sidecars.rqJSON files under `.reqlan/` are application-memory siblings, not SQLite sidecars: - `config.json` — base import roots and settings ( [base_configuration] ) - `export_settings.json` — export form defaults for [export_webview] They do not hold idea graph rows. Tools must not treat them as index cache. [reqlan_directory_layout]0.063
vcs_ignore_for_storesreqlan rq/indexer/sidecars.rqNew bases seed `.reqlan/.gitignore` so SQLite databases and their WAL / SHM / journal sidecars stay out of version control ( [base_initialisation_ignore] ). `.rqignore` is separate: it filters discovery / index walks, not VCS ( [rqignore] ). [sqlite_wal_sidecars] [reqlan_directory_layout]0.063
documents_tablereqlan rq/indexer/sqlite-schema.rqTable `documents` tracks which files the indexer has seen. Columns: - `file_uri` TEXT PRIMARY KEY — base-relative path - `content_hash` TEXT NOT NULL - `indexed_at` TEXT NOT NULL - `mtime_ms` REAL ( schema v3 ) — soft sync skip when FS mtime matches Soft sync and idle stale checks use this table ( ["./sequencing.rq".soft_sync], ["./sequencing.rq".idle_stale_check] ). [ideas_index_sqlite]0.080
edge_kindsreqlan rq/indexer/sqlite-schema.rqPersisted edge `kind` values ( [index_types] / analytical `EdgeKind` ): - `references` — idea → idea bracket or wiki reference - `wildcard_reference` — one row per wildcard match ( or one unresolved row ) - `file_reference` — idea → file path reference - `ideaset_member` — ideaset → member idea - `import` — import relationship - `comment_link` — idea ← code-file `rq:` comment ( ["./indexer.rq".index_code_files] ) [edges_table]0.051
edges_tablereqlan rq/indexer/sqlite-schema.rqTable `edges` stores directed links in the ideas graph. Columns: - `id` TEXT PRIMARY KEY - `source_id` TEXT NOT NULL — FOREIGN KEY → `ideas(id)` ON DELETE CASCADE - `target_id` TEXT nullable — idea target when resolved - `target_file` TEXT nullable — file target ( for example comment links ) - `kind` TEXT NOT NULL — see [edge_kinds] - `label` TEXT nullable - `source_line` INTEGER ( schema v2 ) - `snippet` TEXT ( schema v2 ) - `is_resolved` INTEGER NOT NULL DEFAULT 1 ( schema v2 ) Indexes: `idx_edges_source`, `idx_edges_target`, `idx_edges_target_file`. [ideas_index_sqlite] ["./indexer.rq".wildcard_reference_edges] ["./indexer.rq".index_code_files]0.082
ideas_tablereqlan rq/indexer/sqlite-schema.rqTable `ideas` stores one row per idea, one-liner, or ideaset. Columns: - `id` TEXT PRIMARY KEY - `name` TEXT NOT NULL - `kind` TEXT NOT NULL — `block` | `oneliner` | `ideaset` ( [index_types] ) - `file_uri` TEXT NOT NULL — path relative to the owning base root - `line_start` / `line_end` INTEGER NOT NULL - `summary` TEXT NOT NULL - `attributes_json` TEXT NOT NULL DEFAULT `'{}'` - `content_hash` TEXT NOT NULL - `git_created_at` / `git_modified_at` TEXT nullable - `git_change_count` INTEGER nullable ( schema v4 ) Indexes: `idx_ideas_file(file_uri)`, `idx_ideas_name(name)`. [ideas_index_sqlite] ["../extension/index-host/git-codelens.rq".git_dates_background_indexing]0.045
meta_tablereqlan rq/indexer/sqlite-schema.rqTable `meta` holds key / value rows ( `key TEXT PRIMARY KEY`, `value TEXT NOT NULL` ). Known keys: - `schema_version` — string form of [ideas_index_sqlite] version ( `"4"` ). - `extract_version` — extract-rule generation from the native engine. When it does not match the running engine, soft sync rebuilds so stale edges do not remain ( ["./indexer.rq".index], ["../language/syntax.rq".inline_code] ). [ideas_index_sqlite]0.040
schema_migrationsreqlan rq/indexer/sqlite-schema.rqBase tables use `CREATE … IF NOT EXISTS` ( [schema_ts] `BASE_MIGRATIONS` / [schema_rust] ). Versioned upgrades run `(current+1)..=SCHEMA_VERSION`: - v2 — edge `source_line`, `snippet`, `is_resolved` - v3 — document `mtime_ms` - v4 — idea `git_change_count` Duplicate-column errors on ALTER are ignored so re-open is safe. Fresh databases create full v4 columns, then set `schema_version` to 4. Open pragmas: `foreign_keys=ON`, `journal_mode=WAL` ( [sidecars.sqlite_wal_sidecars] ). [ideas_index_sqlite]0.058
_filereqlan rq/ingest/ingest.rq- This file is used for preingestion of ideas into the graph - It is for ideas that are being drafted, haven't been placed, haven't been linked or represent a significant superseding descructive change to the graph - i. e. requiring careful integration to leave no trace of deprecated ideas, leave no duplication and leave no conflicts - ingestion must pass validation via `pnpm run val` ( ["../development/core.rq".pnpm_val]: check, test, build ) - ingestion requires reqiurement integration into the graph, followed by actual implementation if requested.0.046
attribute_namespaceingreqlan rq/ingest/ingest.rqan idea's attributes should be referenceable in links. an idea should be able to access `[attribute_namespacing.example]` Links should link appropriately the parser, lexer,... extension, html...0.040
code-action-duplicationreqlan rq/ingest/ingest.rqI don't know why, but sometimes, the code action drop down duplicates options until there are many. Without just truncating or deduplicating, resolve the explosion.0.040
code-comment-syntax-errorsreqlan rq/ingest/ingest.rqany time a comment line contains `rq:[*]`, or common patterns it should be parsed, and be considered in `reqlan check`...0.040
empty-attributesreqlan rq/ingest/ingest.rqit should be perfectly acceptable to have empty attributes e. g.: This should not break the parsing of the file. ( Including in extension errors as well as parser / lexer / tokenizer errors )0.040
html-export-changesreqlan rq/ingest/ingest.rqThe print page should be aware of the [idea-leading-whitespace]0.040
idea-leading-whitespacereqlan rq/ingest/ingest.rqBlock ideas often have leading whitespace The base level should be decided by the first line, subsequent lines should not be fully trimmed THis line has 4 spaces ( same as first line ). It should parse with no leading whitespace This line has 8 spaces ( 4 more than first line ) it should parse with 4 spaces as part of the content.0.045
reqlan-check-glob-patternsreqlan rq/ingest/ingest.rqWhen running `reqlan check` it should be possible to specify - - glob patterns to check specific files. It should be possible to specify multiple glob patterns. If the targets are outside of the glob, they should be checked, but, not recursively.0.040
attribute_configurationreqlan rq/language/attributes.rqThe extension should be largely unopinionated about attributes, allowing users to extend as they see fit. attributes should be as slim as possible to allow for minimised bloat.0.049
configuration_import_root_aliasreqlan rq/language/imports.rqAn import path may start with an alias string, then `/`, then a relative path under that alias's import-root directory. Default alias string: `@`, written as `@/` plus a path relative to the import root. Default import-root directory: the workspace folder that contains the `.rq` file ( not the document directory ). The path after `/` is joined to that alias's import-root directory; the alias itself must be followed by `/` ( e. g. `@reqs` is not aliased ). Alias strings and import-root directories are configured as [configuration.configuration_import_roots] in the applying `.reqlan/config.json` from [configuration.configuration_location]. A configured relative `root` resolves against the base root ( parent of `.reqlan` ); an omitted `root` keeps the workspace-folder default. When several configured aliases could match a path, the longest alias wins. Related path forms: [import_paths], ["../extension/language/comment-references/functional-code-comment-references.rq".comment_reference_import_root_alias]. Completion: ["../extension/language/syntax/features-syntax.rq".code_completion]. File references and the language server use the same locate rule as ["../core_analysis/check.rq".check]: load `importRoots` from the applying `.reqlan/config.json` for the source file ( [configuration.configuration_location] ), then `resolve_rq_path` and join the workspace when the result is relative — including paths with spaces such as `["@/my file.ts"]`.0.296
import_error_recoveryreqlan rq/language/imports.rqA malformed import must not invalidate the rest of the file. Recoverable invalid `from` shapes parse as local import nodes with a line-level diagnostic: - `from "path" as alias` ( mistaken namespace form ) — suggest `import "path" as alias` or `from "path" import <idea>` - bare `from "path"` — require the `import <idea>` clause - `from` without a quoted path — consume the remainder of the line as an invalid import Later imports and top-level ideas continue to parse and link normally. Same recovery posture for nameless top-level braces: ["./syntax.rq".no_name_idea_safe_warning]. If lex / parse never completes, see ["./parser_lexer.rq".parse_budget_timeout].0.058
import_fromreqlan rq/language/imports.rqFrom-import syntax uses from, a quoted path, import, and an idea name. From-import may list more than one idea. Separate the names with commas. From-import may include an alias using as. The parser records a span for the path, each idea name, and each alias. Each of those tokens is its own document link. The path links to the file. An idea name links to that declaration. An alias links to the same declaration. When the alias contains the imported idea name, Ctrl + click on a bracket reference still treats the whole alias as one link. See ["../extension/language/syntax/features-syntax-highlighting.rq".aliased_from_import_ctrl_click]. The language server uses the parser spans: ["../extension/language/support/language-server-rust.rq".language_server_rust].0.220
import_keywordsreqlan rq/language/imports.rqThe keywords import, from, and as are reserved for import statements. Import keywords may also appear as ordinary words in idea body text when not at statement start.0.047
import_namespacereqlan rq/language/imports.rqNamespace import syntax uses import and a quoted path. Namespace import may include an alias using as. A bracket reference to the alias alone — for example `[context_model]` — opens the imported file and links only the alias name, like an ideaset namespace. Qualified references through the alias — for example `[context_model.builder]` — resolve ideas from the imported module. A qualified reference may also name an import alias bound in that module. Example: `[core_arch.analysis_runtime]` when `analysis_runtime` is an import alias in the imported file. That name is not an idea. Check does not report it as a missing idea ( ["../core_analysis/check.rq".check_qualified_missing_idea] ). A from-import of that alias is still a missing idea.0.179
import_pathsreqlan rq/language/imports.rqImport path strings may use relative paths such as. / exampleimport. rq. Import path strings may use paths containing folders. The import target may be a file or a folder; see ["../extension/language/support/features-imports.rq".import_folder_targets]. Import path strings may use remote urls such as https://company.com/reqs/style.rq. Import path strings may use an import-root alias shorthand such as `@/path/relative/to/import/root`; see [configuration_import_root_alias]. Path forms apply to from-import, namespace import, qualified import, file references, and qualified comment references ( `rq:["@/path".idea]` ); see [import_from], [import_namespace], [import_qualified], ["./syntax.rq".reference_file], and ["../extension/language/comment-references/functional-code-comment-references.rq".comment_reference_import_root_alias]. Editor completion for path strings is covered by ["../extension/language/syntax/features-syntax.rq".code_completion].0.155
import_qualifiedreqlan rq/language/imports.rqQualified import syntax uses import, a quoted path, a dot, an ideaset name, a dot, and an idea name. Qualified import may include an alias using as.0.126
import_tokenisationreqlan rq/language/imports.rqif an import is given an alias, then the base name is still available as a variable name and should not cause a conflict. Only the alias binds in the importing file; the imported idea's base name may be reused for a local idea. e. g. The same rule applies to qualified imports with `as`. Unaliased imports still bind the idea name and conflict with a local idea of that name. Related: ["../extension/language/syntax/features-syntax.rq".sensible_alias_support].0.053
lexer_bridge_to_syntaxreqlan rq/language/parser_lexer.rqThe context-sensitive token builder is what makes [block_idea] and prose braces coexist: structural `{` / `}` are only those that open or close ideas, while [nested_curly_braces] stay body text. [context_sensitive_lexer_scaling] is the performance contract for that bridge; [code_snippets] is the opacity contract so fence interiors never feed the brace timeline. Index-path Rust port: ["../core_analysis/rust_port.rq".lexer_rust] / ["../core_analysis/rust_port.rq".parser_rust].0.077
recovery_vs_budgetreqlan rq/language/parser_lexer.rq[no_name_idea_safe_warning] and [import_error_recovery] keep a *finished* parse usable after local mistakes. They do not help when lex / parse never returns — that failure mode is [parse_budget_timeout]. Workspace load still isolates per-document throws so one bad file cannot abort LSP init; the budget turns non-termination into the same “ leave this file unloaded ” outcome, with diagnostics.0.069
closing_nested_curly_bracesreqlan rq/language/syntax-edge-cases.rqif, for some reason, there is a prose block containing only closing curly braces, they should be escaped and allowed \ } like this.0.040
nested_curly_bracesreqlan rq/language/syntax-edge-cases.rqif there is a prose block containing curly braces, { such as this one } they should be treated as part of the prose. Matching braces that end a line — including adjacent pairs like { { SITE_URL } } — stay in the body; they must not close the enclosing idea. A lone `}` on its own line still closes the structural block so an unbalanced prose `{` cannot swallow the idea closer.0.108
one_liner_curly_brace_contextreqlan rq/language/syntax-edge-cases.rqthis should { be acceptable } as well0.050
attribute_formsreqlan rq/language/syntax.rqA bare attribute name after @ denotes a true flag or render keyword. A negated flag uses a trailing bang after the attribute name. A valued attribute uses a space after the attribute name followed by a value. A colon after the attribute name is optional legacy syntax and is not part of the value. Common attributes include plan, status, priority, criticality, confirmation, owner, log, tags, and references with the @ prefix. Any custom attribute name is allowed.0.049
attribute_locationreqlan rq/language/syntax.rqMarked attributes must be at the start of a line. @ this_is_not_an_attribute0.049
attribute_markerreqlan rq/language/syntax.rqAttributes are introduced with the @ prefix. Attribute names follow identifier rules.0.066
attribute_valuesreqlan rq/language/syntax.rqAttribute values may be unstructured scalar text on the same line. Attribute values may be block values in curly braces. Attribute values may be list values in parentheses.0.049
block_ideareqlan rq/language/syntax.rqA block idea is a name followed by curly braces that contain a body and optional attributes. The opening `{` may share the line with the closing `}` ( `name {}`, `name {hello}` ). The opening `{` may also sit at the end of the name line, with the closer on a later line. `{` starts a block only when it is immediately after the name ( optional spaces ). If other text is between the name and `{`, the line is a [simple_idea] and the braces are body text. The first unstructured text in an idea body is the main description when no other body attribute is marked.0.099
code_snippetsreqlan rq/language/syntax.rqIdea bodies and block attribute values may embed fenced code blocks delimited by triple backticks. An opening fence is three backticks as the first non-whitespace characters on a line, optionally followed by a language tag such as python or rq. A closing fence is three backticks as the first non-whitespace characters on a line. Three backticks in the middle of a line are prose. They do not open a fence. Everything between the fences is literal opaque text — it is not parsed as reqlan syntax. Keywords, imports, attributes, braces, and quotes inside a fence are inert for the parser and may be shown as examples without parse errors. Fenced blocks may span multiple lines and preserve their inner content verbatim. Brace-depth tracking must skip fence interiors so example braces cannot desync surrounding structure ( [no_name_idea_safe_warning] ). Related: ["../core_analysis/rust_port.rq".comment_span_align].0.113
dash-or_undersore_delimited-ideareqlan rq/language/syntax.rqit should be possible to use dash or underscore delimited idea names.0.040
empty_attributereqlan rq/language/syntax.rqA line that contains only @ is insignificant whitespace. Spaces or tabs may precede that @. Spaces or tabs may follow that @. The lexer consumes that @ as hidden whitespace. The parser does not build an attribute for that line. That line does not cause a parser error. That line does not cause a lexer error. That line does not cause a tokenizer error. That line does not cause an extension error. A flag keeps the form @ name. A negated flag keeps the form @ name!. A valued attribute keeps its value after the name. A syntax error on a different line is still reported.0.040
example_ideasetreqlan rq/language/syntax.rqIdeaset (example_ideaset)0.062
file_suffixreqlan rq/language/syntax.rqReqlan requirement documents use the. rq file suffix.0.052
idea_namereqlan rq/language/syntax.rqIdea names are identifiers or double-quoted strings. Unquoted names follow identifier rules and may use letters, digits, underscores, and dashes, for example myidea, my_idea, or dash-or_underscore_delimited-idea. Quoted names allow spaces and other characters when wrapped in double quotes. Idea names must be unique within their ideaset or file. An idea, one-liner, and ideaset must not share a name in the same file. Idea names should not use reserved keywords.0.063
ideasetreqlan rq/language/syntax.rqAn ideaset is a parenthesized, comma-separated list of idea names. Ideaset members may be unquoted identifiers or quoted strings. Ideasets act as namespace containers for ideas, nested ideasets, and references. A bare bracket reference `[ideaset_name]` targets the ideaset declaration in the same file per [same_file_reference]. A bracket reference `[ideaset.member]` targets the member leaf per [references_to_subidea].0.108
listsreqlan rq/language/syntax.rqParenthesized lists contain newline-separated items. Each list item is either a one-liner or a nameless block idea in curly braces. Lists may appear as attribute values and inside block bodies. Named lists use a label followed by a parenthesized item list; the opening parenthesis must be followed by a newline before the first item. Nested lists may appear inside block values or as list items; the opening parenthesis must be followed by a newline before the first item. Inline parentheses in body prose — for example continuous ( " live " ) physics or ( pixelRatio 1, no WebGL ) — are plain text, not lists.0.055
main_desription_lists_allowedreqlan rq/language/syntax.rq- lists are valid in. - so this should not raise any error. s0.040
naked_strings_in_bodyreqlan rq/language/syntax.rqQuoted text in idea bodies, attribute values, and list items is plain prose, not a string literal. Quote characters are preserved in the body text. For example, " Fit to view " in a bullet line is body text. String literals are reserved for import paths, top-level quoted idea names, and quoted paths inside bracket references. Quoted path-like body text is not a ["../reference_types.rq".file_reference]: ["../reference_types.rq".reference_edgecase].0.065
name_only_ideas_it_should_be_possible_to_use_name_only_ideas_without_a_bodyreqlan rq/language/syntax.rq0.040
reference_bracketsreqlan rq/language/syntax.rqSingle-bracket references use square brackets around a target. Forms include ideaset-only, idea-only, ideaset dot idea, and idea dot attribute targets. An idea dot attribute target follows [attribute_namespacing].0.263
reference_embeddingreqlan rq/language/syntax.rqReferences may appear inline in description, plan, or other attribute values. References may be declared explicitly in @ references or implied by mention elsewhere. Reference kinds include dependency, incompatible with, applies to, and related to. References may use wildcards and apply to namespaces or ideasets — see ["./imports.rq".wildcard_references] for the qualified path + idea-pattern form.0.209
reference_filereqlan rq/language/syntax.rqReferences may target arbitrary files, not only. rq files. File reference syntax uses a bracketed quoted path. A relative path resolves from the document directory. When that path climbs with `..` and the file is not there, the same path is tried from each ancestor directory up to the workspace folder. The document-directory file wins when it exists. Line or line-range references append `L#n` or `L#n-m` after the path inside the brackets. Test-name references append `:` and the test title after the path ( for example `./app.test.ts:lists items` ). The first `:` after the path starts the title; later `:` characters stay in the title ( `e2e: …` ). `://` and a Windows drive `C:` / `C:/` are part of the path, not a test suffix. Symbol references append a dot-separated symbol path after the quoted file path. Quoted body text is not a file reference: ["../reference_types.rq".reference_edgecase].0.266
reference_qualifiedreqlan rq/language/syntax.rqCross-file references may qualify an import path or alias with an idea name. Qualified wikilinks may combine a quoted import path with a dot and idea name. A quoted path opens the target file as an ideaset ( ["./imports.rq".anonymous_imports_allowed] ). Partial from-import of that path does not restrict which ideas the quoted path can name.0.247
reference_wikilinkreqlan rq/language/syntax.rqDouble-bracket wikilinks use doubled square brackets around a target. Wikilinks may include an obsidian-style alias pipe with a display label after the target. A bare pipe character in body prose — for example kind: idea | file | selection — is plain text, not wikilink syntax.0.230
round_bracketsreqlan rq/language/syntax.rqRound brackets indicate a list of ideas or attributes. Items may be separated by commas or newlines. Attribute list values may use commas or newlines; see @ example_list_attribute_using_commas and @ example_list_attribute_using_newlines. Parentheses in body prose — including API call shapes like cytoscape. animate ( { fit, easing: ' ease-out-cubic ' } ) — are plain text, not list syntax.0.045
same_file_referencereqlan rq/language/syntax.rq[reference_brackets] and [reference_wikilink] may target an idea, one-liner, or [ideaset] in the same file. The target may be declared before or after the reference. Forward references are valid. Circular references between declarations in the same file are valid. Resolution order: [reference_resolution_order].0.100
simple_ideareqlan rq/language/syntax.rqA one-liner idea is written as a name followed by unstructured body text on the same line. A name-only idea is a one-liner with just the name and no body text. One-liner ideas do not continue onto subsequent lines. A `{` that is not immediately after the name is body text, not a block opener — see ["./syntax-edge-cases.rq".one_liner_curly_brace_context]. `name {}` and `name {hello}` are [block_idea] forms, not one-liners.0.075
string_and_reference_apostrophesreqlan rq/language/syntax.rqstrings should use double or single apostrophes interchangeably and support backslash escapes.0.040
string_literalsreqlan rq/language/syntax.rqString literals in import paths and quoted idea names may use double or single quotes. Escaped characters inside strings follow standard backslash escaping.0.064
subidea1reqlan rq/language/syntax.rqhello0.062
subidea2reqlan rq/language/syntax.rqhi, i'm a subidea0.040
idea-leading-whitespacereqlan rq/language/syntax_whitespace.rqA block body can have spaces or tabs before the text. The lexer counts a space and a tab as whitespace. A tab is one whitespace character. The parser does not replace a tab with spaces. The base indent is the whitespace at the start of the first body line. The first body line is the first line of body text in the block. The first body line can start after column 0. The base indent is still the whitespace on that line. A body line with the same whitespace as the base indent has no leading whitespace in the parsed text. A body line keeps the whitespace that remains after the base indent. The parser removes the base indent only when the line starts with that same whitespace. An attribute on its own line stays an attribute. Example: the first body line has four spaces. A later line with four spaces has no leading whitespace. A later line with eight spaces has four spaces in the parsed text. This line has the same four spaces as the first body line. This line has eight spaces.0.040
syntax_whitespacereqlan rq/language/syntax_whitespace.rqwhitespace is not significant in attributes. this line is not an idea, it is part of the main content attribute ["../ontology.rq".attribute]0.040
centroid_searchreqlan rq/modelling/advanced_analysis.rqallow user or agent to specify multiple nodes, and then to rank matches by lowest distance.0.040
markov_chainreqlan rq/modelling/advanced_analysis.rqgraph traveral should be tracked to inform a markov chain model of the graph.0.040
pagerankreqlan rq/modelling/advanced_analysis.rqSearch algorithm from google based on the graph structure?0.067
clickreqlan rq/ontology.rqA CLI / MCP function that returns compact local context for a given idea, file, or path. No match uses search. More than one match is ranked by distance from the session. One match returns idea content plus outbound, backlink, and sibling counts ( no edges ). Indexed code files are click targets. Uses a SQLite ["./cli/click.rq".click_session]. Count caps and session cache size are configurable. see ["./cli/click.rq".click]0.066
reference_typesreqlan rq/ontology.rq[reference] Kinds of [reference]. Details in ["./reference_types.rq"]. Index edge kinds live on [analytical_types] / [rust_index_types]. [idea_reference] [ideaset_reference] [comment_reference] [file_reference] [link_reference] [url_reference] [wildcard_reference]0.127
activity_bar_site_linkreqlan rq/phonebook.rqThe activity bar Context webview header info control opens phonebook link id `site` per ["./extension/local-context/activitybar.rq".info_site_link].0.047
extension_readme_linksreqlan rq/phonebook.rqThe extension VSIX README uses phonebook link ids `site`, `github`, `vsc`, `openvsx`, `discord`, `github-sponsors`, and `email` for site, repository, marketplace, Open VSX, Discord, sponsorship, and contact URLs. Generation is defined in ["./distribution/distribution.rq".extension_readme].0.054
npm_package_readme_linksreqlan rq/phonebook.rqPublishable npm package READMEs ( `@reqlan/language`, `@reqlan/analytical`, `@reqlan/cli`, `@reqlan/mcp` ) use the same phonebook link ids as [extension_readme_links]. Generation is defined in ["./distribution/distribution.rq".npm_package_readme].0.046
npm_packagesreqlan rq/phonebook.rqPublishable npm packages ( `@reqlan/language`, `@reqlan/analytical`, `@reqlan/cli`, `@reqlan/mcp` ) live under the `packages` key in ["./phonebook.json"]. Package ids are `language`, `analytical`, `cli`, and `mcp`. The site Links section renders them under Packages per ["./site/site.rq".links] / ["./site/site.rq".package_icons]. Typed helpers: `phonebookPackages`, `getPhonebookPackage` in ["../scripts/phonebook.ts"].0.095
phonebookreqlan rq/phonebook.rqCanonical project links and publishable npm package URLs live in ["./phonebook.json"]. Modules that need contact, repo, marketplace, Discord, sponsorship, or npm package URLs should read from there instead of hardcoding values. Typed access is shared via ["../scripts/phonebook.ts"] for the site and extension README generator.0.176
phonebook_iconsreqlan rq/phonebook.rqIcon sets and lookup URLs live under the `icons` key in ["./phonebook.json"]. A link or package can omit `icon`. If `icon` is present, it references a set id ( `simple-icons`, `mdi`, … ) and slug `name` from that set's catalog. Search a set at its `search` URL when renaming or replacing icons. Surfaces render icons with Iconify via the packages listed in each set's `package` field per ["./development/core.rq".iconify_stack]. Site registry: ["../site/src/lib/phonebook-icons.ts"] per ["./site/site.rq".icon_registry].0.057
root_readme_linksreqlan rq/phonebook.rqThe repository README uses phonebook link ids `site`, `github`, `vsc`, `openvsx`, `discord`, `github-sponsors`, and `email` for site, repository, marketplace, Open VSX, Discord, sponsorship, and contact URLs. Generation is defined in ["./distribution/distribution.rq".root_readme].0.046
absorbed_and_droppedreqlan rq/site/site.rqAbsorbed into the eleven: glue-semantics splits into [firmware_cloud_contract_showcase] and [module_surface_showcase]. agentic-planning and feature-tracking fold into [agent_context_showcase]. compliance becomes [audit_trail_showcase]. scattered-docs becomes [legacy_archaeology_showcase]. test-explanation upgrades into [test_proves_showcase]. arbitrary-attributes upgrades into [attribute_dialect_showcase]. static-connection upgrades into [firmware_cloud_contract_showcase]. data-not-ideas expands into [antipatterns_showcase]. graph-traversal upgrades into [graph_view_showcase]. control-system-sequencing upgrades into [interlock_showcase]. module-interface upgrades into [module_surface_showcase]. Dropped: todo-triage — too thin; triage is a byproduct of [agent_context_showcase], not a page. docs-attribute — sells tooling that does not exist; file refs to markdown belong inside other pages.0.040
assetsreqlan rq/site/site.rqthis site is published in in gh pages at the `/reqlan` path. Any assets in the / public folder should be referenced as `/reqlan/assets/...`. Embedded spec export hrefs follow the same base via [spec_html_export] / [html_export.html_export_url_base].0.046
bidirectional_comment_linksreqlan rq/site/site.rqrq-comment refs in TS, Python, C, ST, etc. Code points back, with working document links. A product story bound this way is [story_codebase_showcase].0.051
brandreqlan rq/site/site.rqmust be aligned with ["../brand.rq"]0.059
code_block_stylingreqlan rq/site/site.rqCode blocks should be styled per language as a function of a classname; or by using an appropriate lightweight external dependency. Language ids live in ["../../site/src/content/types.ts"]. CodeLanguage —. rq,. ts,. md,. py, plus st / c / json / yaml for showcases. If using a dependency, it should parse at build, not in the browser.0.052
componentsreqlan rq/site/site.rq- sidebar per [sidebar_nav] - footer per [footer] - hero per [hero_section] - sticky page nav graph per [nav_graph] - links / contact per [links] - showcases - tutorials per [tutorials_section] - certification per [certs_reqs.certs] - FAQ per [faq_page] - support per [support_page_reqs.support_page] - content per [copy] - elevator pitch per [elevator_pitch_section] - featured-in social proof per [featured_in_section] - motivation per [motivation_section] - syntax per [syntax_section] - example per [example_section] - roadmap per [roadmap_section] - CTA: - install the extension and the CLI per [cta_icon] per [install_cli_menu] - GitHub star on the hero action row per [hero_github_star] - sticky draggable action buttons per [sticky_cta_node] - home-only quiz sticker edge tab per [quiz_sticker_tab] - 404 page ( just something silly / a redirect )0.050
diagrams_are_never_dressed_as_codereqlan rq/site/site.rqASCII arrow diagrams must not sit inside language- " rq " blocks. They get their own visually distinct block kind. aligns with [showcase_module]0.052
every_rq_block_must_parsereqlan rq/site/site.rqEvery language- " rq " block in showcase content files must parse against the langium grammar. Prefer enforcement via a build step that runs the real parser over content. Site-wide ( landing + showcases ): [accurate_rq_snippets_must_parse]. aligns with [phase_1_parse_gate]0.057
every_showcase_ends_in_a_payoffreqlan rq/site/site.rqA diagnostic, a query response, a coverage report, or a graph. If there is no tooling output, it is not a showcase.0.051
features_not_demonstratedreqlan rq/site/site.rqDeliberately not demonstrated — they do not exist yet. Typed relation kinds, hover cards, autoformatting, JSON / CSV export palette commands, PDF binary, vector-embedding search. Keyword-scored search must not be marketed as semantic search / embeddings.0.040
features_tier_1reqlan rq/site/site.rqThe reasons to adopt. All verified as shipping today.0.040
features_tier_2reqlan rq/site/site.rqThe depth. Also shipping.0.040
imagesreqlan rq/site/site.rqThe source logo is in the / public folder. A sharp dev script is used to generate pngs and favicons etc which should be executed if the svg source logo changes. The script also writes the Open Graph image `/og.png` ( 1200 × 630 ) per [meta_tags].0.046
link_iconsreqlan rq/site/site.rqThe contact link row in [contact_component] renders an icon beside each phonebook link label that has an icon. Footer links that have an icon render through [phonebook_icon_component] per [footer]. per [links] per [development_core.current_link_icons]0.057
linksreqlan rq/site/site.rqper [phonebook_reqs.phonebook] per [phonebook_reqs.npm_packages] per [phonebook_reqs.show_in_footer] Contact copy lives in ["../../site/src/content/contact.ts"] per [copy]. Contact shows phonebook `links` that are not opted out of the footer, then a Packages subsection for phonebook `packages`. per [link_icons] per [package_icons]0.131
logoreqlan rq/site/site.rq- there is a logo in the sidebar.0.040
one_worked_example_per_pagereqlan rq/site/site.rqConsistent identifiers across every block on a page. The reader should trace one name from requirement to source to test to search result without re-orienting.0.051
package_iconsreqlan rq/site/site.rqThe contact Packages row in [contact_component] renders an icon beside each phonebook package label that has an icon. Package entries come from ["../phonebook.json"]. packages per [phonebook_reqs.npm_packages]. per [links] per [development_core.current_link_icons]0.070
phonebook_icon_componentreqlan rq/site/site.rq[phonebook_icon_tsx_component] is the site's single render entry point for phonebook icons ( `@iconify/react` ). It accepts an optional phonebook `icon` ref. If the ref is absent, it renders nothing. If the ref is present, it renders an inline SVG with `aria-hidden`. Default sizing uses the `.phonebook-icon` class in ["../../site/src/styles/globals.css"]. Must remain compatible with static export per [simple_lightweight_and_static]. per [development_core.iconify_stack]0.102
routesreqlan rq/site/site.rqMarketing routes are statically generated App Router pages under ["../../site/src/app"]. Home `/` hosts landing sections; other top-level pages include quickstart per [quickstart_page], tutorials, showcase, FAQ per [faq_page], support per [support_page_reqs.support_page], certification per [certs_reqs.certs], and the embedded `/spec` export. per [sidebar_nav] per [faq_page] per [quickstart_page] per [support_page_reqs.support_page] per [certs_reqs.certs]0.056
showcase_languagesreqlan rq/site/site.rq. rq blocks use the custom site tokenizer. Non-. rq blocks need Shiki coverage beyond today's ts / md / py — add st, c, json, yaml for the flagship domains. aligns with [phase_1_parse_gate]0.049
showcase_planreqlan rq/site/site.rqIdeaset (showcase_plan)0.040
showcase_problemsreqlan rq/site/site.rqThree concrete failures of the current set: Invalid reqlan. Samples use illegal attribute forms ( colon-list tags, pipe-scalar plans, nested reference objects ) that do not parse against the langium grammar. For a language project, shipping invalid samples on the marketing site is an own-goal. Prose dressed as semantics. A file ref followed by the word " implements " and an idea ref reads like a typed relation, but " implements " is body text. Reqlan has five edge kinds ( references, wildcard_reference, file_reference, ideaset_member, import, comment_link ) and none are user-declared. We imply a feature that does not exist while hiding the ones that do. Vapor features. Graph showcase tells people to run Reqlan: Export JSON, which is not registered. The docs-attribute page is built around an attribute with no special tooling.0.040
showcase_rulesreqlan rq/site/site.rqFour editorial rules. Enforced in content and, where possible, at build time. See [every_rq_block_must_parse], [every_showcase_ends_in_a_payoff], [one_worked_example_per_page], [diagrams_are_never_dressed_as_code].0.040
showcase_rules_setreqlan rq/site/site.rqIdeaset (showcase_rules_set)0.040
showcase_setreqlan rq/site/site.rqIdeaset (showcase_set)0.053
showcase_thesisreqlan rq/site/site.rqCurrent showcases demonstrate the syntax, not the toolset. A reader who finishes them thinks: you can write sentences in curly brackets. Nothing shows what you get back — no query and answer, no diagnostic, no graph, no round trip. The upgrade thesis: every showcase demonstrates one mechanism against a real domain problem. Code in, artifact out. No showcase ships without a payoff block.0.040
simple_lightweight_and_staticreqlan rq/site/site.rqmust be fully statically exported for GitHub Pages. All routes, including showcase detail pages, are generated at build time. The deploy workflow must upload only static HTML, JS, and assets from site / out. Build also embeds the workspace requirement graph under `/spec` per [spec_html_export].0.116
sitereqlan rq/site/site.rqthe / site folder contains a static Next. js App Router landing page for reqlan. should align with [brand] Copy modules: [copy] Document head: [meta_tags]0.040
styling_architecturereqlan rq/site/site.rqstyling should be handled primarily at the compoenent level with co-located css module files that are imported in the react components.0.094
sub_file_bindingreqlan rq/site/site.rqSymbol refs `["auth.ts".login]`, line ranges ["adc.cL#41-58"], and test-name anchors ["x.test.ts:rejects expired token"]. Requirements attach to code at symbol granularity, in any language.0.051
workflowreqlan rq/site/site.rqSite deployment runs when an `site/v*` tag is pushed. Tags are created automatically on main by the release workflow per [distribution_reqs.deployment_flow]. The site workflow does not deploy on ordinary commits. per [distribution_reqs.site_distribution]0.040
show_dont_tellreqlan rq/ui.rqcopy should be minimal and user facing. no long lists, no avoidable labels.0.052