Attributes

AttributeIdeasValuesValue summary
status4587done (399); incomplete (29); in-progress (19); draft (7); pending (2); partial (1)
tests399359["../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"] (14); ["../../../../packages/language/test/completion.test.ts"] (9); ["../../packages/analytical/test/load-native.test.ts"], ["../../packages/analytical/test/native-packaging.test.ts"] (4); "../../../packages/extension/test/startup-gate.test.ts", "../../../packages/extension/test/safe-webview-post.test.ts", "../../../packages/analytical/src/index-store/workspace-index.ts" (3); ["../../../../packages/extension/webviews/activity-bar/components/SearchPane.svelte"], ["../../../../packages/extension/webviews/activity-bar/state/app.svelte.ts"] (3); ["../../packages/analytical/test/native-packaging.test.ts"] (3)
implementation350316[mcp_server] (5); ["../../../../packages/language/src/reqlan-path-completion.ts"], ["../../../../packages/language/src/reqlan-completion-provider.ts"] (4); ["../../crates/reqlan-export/src/html_template/mod.rs"], ["../../crates/reqlan-export/assets/styles.css"] (4); ["../../site/src/components/ElevatorPitch.tsx"], ["../../site/src/components/ElevatorPitch.module.css"] (4); ["../../../../packages/language/scripts/patch-textmate.mjs"], ["../../../../packages/language/syntaxes/reqlan.tmLanguage.json"], ["../../../../packages/language/src/reqlan-semantic-token-provider.ts"] (3); ["../../crates/reqlan-export/assets/app.js"], ["../../crates/reqlan-export/src/html_template/mod.rs"] (3)
tags5151ai, mcp, planning (1); antipattern, craft (1); attributes, extensibility (1); autocompletion (1); bases, ideas-summary, multi-base (1); bases, multi-base (1)
todo3821true (18); A change to a .rq file still republishes every comment buffer in the background pass, and unqualified lookup can call list_all_ideas. (1); CodeLens button to open idea git history (1); Move/delete and barrel-page host planners still call Langium DI. Finish those off napi/index/LSP. (1); The qualified file link before idea confirmation is still open on ["../support/open-file-sequencing.rq".missing_reference_colour_sequence]. (1); Trusted Publisher registration for platform packages on npmjs.com (1)
domain1212ai-tooling (1); craft (1); embedded-backend (1); extension-ui (1); hardware-manufacturing (1); industrial-control (1)
mechanism1212attribute_flags, negated_flags, block_values, nested_lists (1); comment_links, deprecated_attribute, deprecation_impact (1); cross_stack_file_refs, idea_as_connective_tissue, inbound_reference_inlay_hints (1); custom_attributes, completion_status, html_export (1); cytoscape_graph, status_tag_filters, indirect_reference_toggle (1); ideasets, imports, unresolved_import_diagnostics (1)
tier122depth (7); flagship (5)
apply_to108["../extension/**/*.rq".*webview*], ["../extension/local-context/activitybar-panels/*.rq".*_pane] (3); ["../extension/local-context/activitybar-panels/*.rq".*_pane], ["../extension/**/*.rq".*webview*], ["../extension/presentation/graph.rq".graph_*] (1); ["../extension/local-context/activitybar-panels/*.rq".*_pane], ["../extension/**/*.rq".*webview*], ["../extension/workspace-summary/ideas_summary/*.rq".*] (1); ["../extension/local-context/activitybar-panels/*.rq".*_pane], ["../extension/workspace-summary/ideas_summary/*.rq".*] (1); ["../extension/local-context/activitybar-panels/*.rq".*_pane], ["../extension/workspace-summary/ideas_summary/*.rq".*], ["../extension/presentation/webview.rq".webview] (1); ["../extension/presentation/graph.rq".graph_*], ["../extension/workspace-summary/ideas_summary/*.rq".graph_*], ["../extension/local-context/activitybar-panels/*.rq".*graph*] (1)
plan88goal A Rust language-server binary replaces the Langium process. Open buffers parse with reqlan-parse. Workspace names come from the ideas index. Closed files have no retained syntax tree. constraints - vscode-languageclient stays. Transport becomes stdio. - lsp-server and lsp-types only. No second parser. - Open-file links follow open_file_algorithm. - UTF-8 spans convert to UTF-16 LSP positions. - TextMate stays a checked-in grammar. The editor paints it before semantic tokens. - With the rust engine, non-.rq comment links come from the server. The node engine keeps the host provider. - Per-target VSIX ships bin/reqlan-lsp. The napi addon stays for the index host. - Default engine is rust. Node starts only as a fallback. steps 1. Write this idea and point language_server and grammar_and_parser at it. 2. Scaffold reqlan-lsp: initialize, didOpen, didChange, didClose, parse diagnostics. 3. Launch it from the extension. Default is rust. 4. Port open-file features: tokens, links, definition, hover, highlight, diagnostics. 5. Read the ideas index for completion, rename, code actions, lenses, and inlays. 6. Pack the binary in the VSIX matrix. 7. Keep Langium only for host helpers. The server process does not load it when the engine is rust. open - Host move/delete/barrel planners still use Langium DI. (1); goal Allow reqlan string literals in imports, idea names, and bracketed file/reference targets to use either double or single quotes with backslash escaping. constraints - [string_literals] documents escaping rules; double-quoted syntax must remain valid. - [reference_file] bracketed quoted paths must resolve with either quote style. - Embedded scanners and comment reference parsing must not treat // inside quoted strings as comments. steps 1. Extend grammar STRING terminal and shared unquote helper for both quote styles. 2. Update import/path/comment/embedded reference scanners and completion to accept single-quoted literals. 3. Update TextMate highlighting for single-quoted strings. 4. Add parsing and reference-resolution tests for single-quoted paths and idea names. open questions - None for initial scope; both quote styles apply everywhere STRING is used. (1); goal Native WorkspaceIndex: same rows and incremental behaviour, no Langium on the index path. constraints - Schema v4 rusqlite only (no sql.js fallback) after ["../core_analysis/rust_port.rq".cutover]. - [nonblocking_index] and [index_diagnostics_timing] still apply. - Wildcard fan-out stays [wildcard_reference_edges]. - Extension requires the host-matching core engine `.node` from the per-target VSIX. steps 1. Rust AST → IdeaRecord / EdgeRecord parity tests against the current extractor. 2. rusqlite store + migrations matching SCHEMA_VERSION 4. 3. Soft/hard sync, mtime skip, cancel, diagnostics. 4. Wire through ["../core_analysis/rust_port.rq".native_bridge] once parse+extract golden tests pass. open - Richer per-file timing rows from Rust sync into the diagnostics store. (1); goal Replace the TypeScript analysis engine (parse-for-index, extract, SQLite index, search, export) with a Rust library behind the existing `createAnalysisRuntime` / `AnalysisApi` facade, shipped as per-architecture binaries and per-target VSIXes. constraints - Distribution: [distribution.rust_binary_distribution] + [distribution.vsix_export] — npm optional platform packages and host-targeted VSIX; website downloads and GitHub-release postinstall out of scope. - Shared on-disk [ideas_index] under `<base>/.reqlan` is schema v4 rusqlite (native required; no sql.js fallback). - The language server is [lsp_rust.language_server_rust]. This analytical plan does not replace that process. Do not switch the language to tree-sitter ([grammar_and_parser]). - Port the context-sensitive lexer ([rust_port.lexer_rust]) rather than a parser-generator that cannot honour [syntax] brace/fence rules. - [indexer.nonblocking_index] and [parser_lexer.parse_budget_timeout] still apply; [development_core.rust_mindset] and [constitution.supply_chain] (mature crates). - Extension host requires the host-matching napi `.node` from the per-target VSIX ([distribution.extension_host_target]). - Zustand host state, webviews, and HTML-export client JS stay TypeScript. steps 1. Scaffold `crates/` + golden tests vs Langium ([rust_port.rust_crate_layout]). 2. Lexer, then parser with recovery and budget ([rust_port.lexer_rust], [rust_port.parser_rust]). 3. Extractor + rusqlite + incremental sync ([indexer.indexer_rust]). 4. Search analysers ([rust_port.search_rust]). 5. Export snapshot + writers; keep interactive HTML JS ([rust_port.export_rust]). 6. napi-rs per-arch host packages; CLI then MCP then extension via platform VSIX ([rust_port.native_bridge], [rust_port.cutover]). 7. Publish on `analytical/v*` and ship per-target VSIXes ([distribution.rust_binary_distribution], [distribution.vsix_export]). open - Language-server process: [lsp_rust.language_server_rust]. CLI `parse` uses the core Rust engine. (1); goal Same AnalysisApi behaviour, faster and native, distributed as per-arch npm packages and per-target VSIXes without breaking the shared `<base>/.reqlan` index. The editor LSP is Rust ([lsp_rust.language_server_rust]). constraints - Ship per [distribution.rust_binary_distribution] and [distribution.vsix_export]: npm platform packages + host-targeted VSIX; website listing and GitHub-release postinstall out of scope. - On-disk ideas index schema stays compatible ([indexer.index]) so TS and Rust share application memory during cutover. - Syntax requirements stay in [syntax]. The language server parses with `reqlan-parse` ([lsp_rust.language_server_rust]). Do not switch the language to tree-sitter (["../core-architecture.rq".grammar_and_parser]). - Port the context-sensitive lexer, not a naive parser-generator ([parser_lexer.lexer_bridge_to_syntax], [syntax_edges.nested_curly_braces], [syntax_edges.context_sensitive_lexer_scaling]). - Honour [indexer.nonblocking_index], [parser_lexer.parse_budget_timeout], [development_core.rust_mindset], [constitution.supply_chain]. - Extension host loads the host-matching napi `.node` from the per-target VSIX ([distribution.extension_host_target]); missing core engine is a hard error (no sql.js fallback). - Interactive HTML graph/search JS and graph physics stay JS assets ([html_export.html_export_graph_layout]). - Comment-file indexing is [indexer.index_code_files] (native sync, not a Langium comment-grammar pass). steps 1. Scaffold crates + CI + golden harness ([rust_crate_layout]). 2. Lexer then parser with recovery and budget ([lexer_rust], [parser_rust]). 3. Extractor + rusqlite index + incremental sync ([indexer.indexer_rust]). 4. Search and analysers ([search_rust]). 5. Export snapshot and writers ([export_rust]). 6. napi-rs loader in `@reqlan/analytical`; CLI/MCP first ([native_bridge], [cutover]). 7. Publish platform packages on `analytical/v*` and ship per-target VSIXes ([distribution.rust_binary_distribution], [distribution.vsix_export]). open - Language-server process: [lsp_rust.language_server_rust]. CLI `parse` uses the core Rust engine. (1); goal Ship per-architecture core engine binaries beside `@reqlan/analytical` so CLI, MCP, and per-target VSIXes can load the Rust engine for the extension-host platform. constraints - optionalDependencies (not devDependencies) for runtime consumers. - VSIX binaries come from Azure `build_native` on the `ext/v*` git tag, not from npm. - Trusted publishing and `analytical/v*` tagging stay [npm_distribution] / [release_tagging] for CLI/MCP. - gnu-only linux; musl and GitHub-release postinstall out of scope. - Website binary listing deferred. - Do not publish `@reqlan/analytical` until every platform package of that version is deployed ([npm_distribution]). steps 1. Scaffold six platform packages with os/cpu and the napi binary. (done) 2. Wire optionalDependencies on published `@reqlan/analytical` only; git omits them so Changesets can ignore platform packages. (done) 3. Cross-compile `reqlan-napi` for [native_targets] on the npm channel. The platform package contains only the `.node`. That job does not build `reqlan-lsp`. (done in deploy-npm.yml) 4. Publish platform packages on `analytical/v*` before `@reqlan/analytical`. 5. Prefer optionalDependency resolution in the loader; keep crates/target fallback for local dev by walking to repo-root `crates/Cargo.toml` (not `packages/crates` from `out/native`). (done) (1)
example76my subidea (2); //rq-ignore-error `from "@/path/relative/to/import/root.rq" import idea` (1); ``` from "@/links-to-file.rq" import ishouldlink, ishouldbeasecondlink as ishouldbeathirdvalidlink ``` (1); ```bash reqlan diff A B reqlan diff reqlan diff HEAD~1 reqlan diff --verbosity references reqlan diff --verbosity text reqlan diff --json ``` (1); ```python print("hello") ``` (1); simple_idea, block_idea (1)
idea41true (4)
subreqs44[sub_file_binding], [bidirectional_comment_links], refs_break_loudly { Unresolved references are error diagnostics with quick-fix code actions. File moves prompt to rewrite every inbound ref. The same check is ["../core_analysis/check.rq".check] (`reqlan check`, exit 1), so CI can reject rot. Demonstrated by [broken_links_showcase]. }, mcp_as_shaped_context { MCP `click` is the search and retrieval tool (["../extension/agent/skills-and-mcp.rq".mcp_click_retrieval]). Hand an agent compact unique context, ranked matches, or search hits — not forty files. } (1); duplicate_error { should be raised if a local idea or ideaset shares a name with an import binding (unaliased idea name, or the alias when present). @tests ( ["../../../../packages/language/test/validating.test.ts:reports duplicate when local idea shares unaliased import binding"] ["../../../../packages/language/test/validating.test.ts:reports duplicate when local idea shares import alias"] ["../../../../packages/language/test/validating.test.ts:reports duplicate when local ideaset shares a local idea name"] ) }, sensible_graph_resolution { the imported namespace should not be assosciated with the new idea: e.g. ``` from-import an idea as an alias, then declare a local idea with the original name ``` `myidea` in the import statement should not be assosciated with the new `myidea` definition - they're totally different. @tests ( ["../../../../packages/language/test/linking.test.ts:import idea reference resolves to imported file when local idea shares name"] ["../../../../packages/language/test/validating.test.ts:allows local idea when import uses an alias"] ) } (1); imports_aliases_and_root_config { Imports, aliases, and root-alias config. Ideasets as a module's published surface. }, attribute_grammar_breadth { Flags, negated flags, block values, nested and named lists. Arbitrary at-keys as a domain dialect. }, completion_and_deprecation_analysers { Reqlan: Completion Status and Reqlan: Deprecation Impact — real shipped analysers nobody is showing. }, cytoscape_graph_view { Status/tag filters, indirect-reference depth toggle, and Wildcard refs edge toggle (["../extension/workspace-summary/ideas_summary/graphical_graph.rq".wildcard_refs_toggle]). }, wildcard_path_idea_refs { Qualified path + idea-pattern references — `["../mod/**/*.rq".*_pane]` — fan out across files as `wildcard_reference` edges (["../indexer/indexer.rq".wildcard_reference_edges]); navigation opens a matches panel. See ["../language/imports.rq".wildcard_references], ["../extension/workspace-summary/ideas_summary/graphical_graph.rq".wildcard_refs_toggle]. }, html_multipage_export { HTML multi-page export as an actual deliverable. } (1); tags_list_indexing_gap { List-form tags parse but store true instead of a tag array in the idea extractor, so half of real-world tag usage never reaches the index. }, inbound_references_command { reqlan.openInboundReferencesSummary is declared in package.json with no handler. }, typo_cleanup { Former implementaion typo in this file — corrected to implementation. } (1)
items33focus_hero { Always visible when focus is non-none: idea name (or file name), status/tags, path:line, one-line summary. For non-.rq files: show git chip and up to four linked requirements inline. Primary actions: open source, pin to [manual_context], copy markdown / composed context. }, lens_strip { A single horizontal strip of dimension chips (icons + short labels + counts). - Filled chip = dimension enabled and contributing to [context_footprint]. - Outline chip = disabled or empty. - Click toggles enabled (except workspace, always ambient). - Alt-click or chevron expands that dimension's detail panel below the strip (only one expanded at a time). }, footprint_line{ One muted line under the lens strip: context_footprint.summaryLine. Replaces listing every dimension's items when collapsed. }, expanded_lens_panel{ Content depends on which lens is expanded: - current_file: for `.rq` — in-file idea list + nested outline; for other files — grouped file_reference_links, comment_reference_links, folder_reference_links. - open_files / file_history / edit_history: compact scrollable file rows (max 8 visible); click opens file; **Refs** loads linked requirements lazily via `loadFileLens`. - git: history-first panel per [activitybar.git_history_lens] — branch/HEAD header, focus commit trail, authors; dirty working tree nested secondary. - manual: chips from tray with remove. - workspace: link to workspace_panel.workspace_pane / Ideas Summary — no duplicate index UI. }, anomaly_strip Optional row for unresolved refs or index errors affecting focus file — one line, clickable., Collapsed_default focus hero + lens strip + footprint line. No outline tree until user expands current_file lens on a `.rq` file. (1); one_job { Each pane region hosts one primary widget job; secondary widgets collapse behind chevrons or appear on hover. }, shared_signals { Widgets never own private analyses — they bind to named signal / synthesis fields so graph, AI, and UI stay consistent. }, density_tiers { Focus hero: at most timeline + one meter + one pulse. Cards/lists: [requirement_card] defaults; expand for sparklines. Workspace: [project_weather] + [activity_river] + optional fingerprint. Graph: pick one of hotspot / constellation / impact encoding per view mode. }, token_discipline { AI export prefers synthesized meters and short stories from widgets (stability, risk, coverage gaps) over enumerating every signal — aligned with [features_ai.ai_integration] and [context_scope_v1.ai_context_export]. } (1); workspace, base, active_file, editor_state, selection, manual, git_repository, requirements_graph, project_index, language_server, build_system, diagnostics, tasks, terminal, external_tools (1)
bug21true (2)
bugfix21true (2)
ideating22. (1); true (1)
steps22node esbuild.mjs (1); npx vite build --config webviews/ideas-summary/vite.config.ts, npx vite build --config webviews/activity-bar/vite.config.ts, npx vite build --config webviews/onboarding/vite.config.ts (1)
this_is_an_attribute21true (2)
architecture_context11subsystem, bounded_context, layer, module, feature, package, service, deployment, ownership, technology_stack (1)
context_model11sources — [context_sources] signals — [context_signals] synthesis — [synthesized_context] views — [context_views] consumers — [context_consumers] (1)
demos11["./features-code-comment.text.js"], ["./features-code-comment.text.py"] (1)
deprecated11["../extension/language/syntax/features-syntax-highlighting.rq".traceable_inlay_hints] (1)
development_history11creation_date, last_modified, edit_frequency, authors, commit_count, time_since_touched, active_development, historical_hotspot, first_introduced, last_semantic_change, last_structural_change (1)
example_list_attribute_using_commas11idea1, idea2, idea3 (1)
example_list_attribute_using_newlines11idea1, idea2, idea3 (1)
example_list_containing_ideas11subidea1, subidea2 (1)
exampleattribute11the same goes for attributes in an idea (1)
history11First native VSIX design: GitHub Actions compiled napi on `analytical/v*`, published platform packages, and Azure fetched `--latest` from npm. Azure did not compile Rust. That design treated npm as a hand-off between the two pipelines. After a changeset release, platform packages stayed on the previous patch (received `1.11.0`) while analytical and the extension moved (expected `1.11.1`). ["../../packages/analytical/test/native-packaging.test.ts"] failed on that mismatch. The lag is structural: `changeset version`, a glob in the Changesets `fixed` group, and a registry wait are not one atomic git snapshot. Decision: keep npm for CLI and MCP; compile the matrix in Azure from git for VSIX. (1)
justification11Marketplace version is `reqlan-extension` package.json and can differ from `@reqlan/analytical` ([version_management]). Azure compiles the six host binaries from that `ext/v*` commit (`build_native` in ["../../azure-pipelines.yml"]). The VSIX then contains the engine that matches the extension checkout, not a different `@reqlan/analytical` npm tarball. (1)
negative11Do not feed [npm_distribution] into Marketplace or Open VSX packaging. Do not wait for an `analytical/v*` tag, and do not poll `npm view` or `npm pack` (`scripts/fetch-native-packages.mjs --latest`). That path couples two tag channels and two clocks. Changesets can bump `@reqlan/analytical` and `reqlan-extension` independently ([version_management]). `--latest` then packs a different `@reqlan/analytical` semver than the `ext/v*` tag, or the pipeline waits on packages that are not on the registry yet. (1)
perfectly_acceptable_attribute11to labour the point (1)
priority11P0 (1)
relationship_context11strongest_neighbours, most/least referenced, growing/shrinking dependencies, new/removed links, unstable neighbours, implementation distance, test distance (1)
required11true (1)
requirement_history11created, first_implemented, first_referenced, last_edited, last_reviewed, last_tested, last_verified, revision_count, breaking / major / minor revisions, active_duration, inactive_duration (1)
risk_context11high_churn, many_dependents, poor_documentation, large_implementation, high_complexity, missing_tests, recent_regressions, many_open_issues, ownership_risk, single_contributor, breaking_history, high_review_latency (1)
temporal_context11recent, today, this_week, this_sprint, this_release, historical, archived, obsolete, experimental (1)
test11["../../../../crates/reqlan-index/src/overview.rs"] (1)