Cluster detail
core-architecture.rq
Ideas defined in reqlan rq/core-architecture.rq.
file
19 ideas
1 files
| Idea | File | Status | Summary | Katz |
|---|---|---|---|---|
| analytical_package | reqlan rq/core-architecture.rq | in-progress | `packages/analytical` ( `@reqlan/analytical` ) is the shared requirement graph index and analysis layer. It owns the [indexer]: extracts ideas and edges into a rusqlite store via the core native engine ( [workspace_index] ), holds Zustand analytical state, and exposes analysers and an analysis API. Headless CLI / MCP entry is `@reqlan/analytical/core` via `openAnalysisApi` ( native required; no Langium ). Consumers: [extension_package] ( thin editor adapter ), [mcp_package], [cli_package]. Depends on [language_package] for the editor LSP only. Published to npm alongside [cli_package]; version graph role: [package_versioning]. Rust engine port ( lexer / parser-for-index, indexer, search, export ): [rust_port.analytical_rust_port], shipped per [distribution.rust_binary_distribution]. | 0.167 |
| base_containers | reqlan rq/core-architecture.rq | Ideas 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_package | reqlan 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_package | reqlan 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_surfaces | reqlan rq/core-architecture.rq | Product 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_parser | reqlan rq/core-architecture.rq | The 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_truth | reqlan rq/core-architecture.rq | Align 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_index | reqlan rq/core-architecture.rq | The 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_package | reqlan 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_runtime | reqlan rq/core-architecture.rq | Ideaset (language_runtime) | 0.050 | |
| language_server | reqlan rq/core-architecture.rq | The 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_package | reqlan 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 | |
| monorepo | reqlan rq/core-architecture.rq | The 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_versioning | reqlan rq/core-architecture.rq | Separate 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_map | reqlan rq/core-architecture.rq | Ideaset (product_map) | 0.050 | |
| runtime_topology | reqlan rq/core-architecture.rq | The 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 | |
| scope | reqlan rq/core-architecture.rq | These 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_package | reqlan 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_packages | reqlan rq/core-architecture.rq | Ideaset (workspace_packages) | 0.050 |
Cluster graph
Initialising graph…