Attribute detail
todo
38 ideas · 21 distinct values
| Idea | Value | Status | Tags | Summary | Katz |
|---|---|---|---|---|---|
| base_linking | true | A 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_modes | true | A base may be linked to | 0.040 | ||
| watch | true | The cli should be able to watch a base and maintain the index as files change. | 0.040 | ||
| analytical_rust_port | first `@reqlan/analytical-<platform>-<arch>` publish (Trusted Publisher on npmjs.com + analytical/v* tag) | in-progress | Port ["../core-architecture.rq".analytical_package] to Rust: lexer, parser ( index path ), extractor, SQLite index, search, and export. `@reqlan/analytical` remains the published JS facade ( `createAnalysisRuntime` / `AnalysisApi` / Zustand host state ). Native work lives in a `crates/` Cargo workspace and ships as per-architecture binaries per [distribution.rust_binary_distribution]. The editor language server is [lsp_rust.language_server_rust]. This analytical port does not replace that process. Component plans: [rust_crate_layout], [lexer_rust], [parser_rust], [parser_align], [indexer.indexer_rust], [search_rust], [export_rust], [native_bridge], [cutover]. | 0.243 | |
| native_bridge | publish first `@reqlan/analytical-<platform>-<arch>` release (Trusted Publisher on npmjs.com + analytical/v* tag) | in-progress | The Rust engine is the analytical core ( parse, index, search, export, typed queries, git-dates, overview coverage, barrel plan ) — not an optional addon. `@reqlan/analytical` is a typed napi facade ( specta `generated.ts` ) plus thin Node helpers ( `createBase`, path utils, `SqliteIndexStore` wrappers over typed napi ). It does not depend on Langium, `@reqlan/language`, or Zustand. Webview-only helpers ( search highlight, filter labels, file-treatment, context signals / model, graph physics ) live in the extension package. Interactive HTML JS stays in `crates/reqlan-export/assets`. Native owns: parse-for-index, persist, query, search, export execution, IndexService / WorkspaceIndex sync, and the index lifecycle FSM + status snapshot via `NativeWorkspaceIndex` + `NativeSqlDb`. The FSM ( `opening` / `syncing` / `ready` / `error` ), counts, in-memory sync progress / cancel, last error, file-index issues ( cap 500 ), and the document-update / workspace-change rings ( cap 50 ) live in `WorkspaceIndexRuntime`; TS reads them through `statusSnapshot()`. Durable diagnostics persist in `index-diagnostics.sqlite`. Consumers: [cli.cli_package] and MCP import `@reqlan/analytical/core` so they never load Langium; the extension host uses the per-target VSIX ( [distribution.vsix_export], [distribution.extension_host_target] ). The host-matching `.node` is required at runtime; there is no sql. js fallback. | 0.290 | |
| search | flesh out shared search UX / ranking contract across surfaces | Search 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_search | true | Broader token / edge-label search over candidates through [native_analysis_api]. Prefer [fuzzy_search] for fast name-oriented lookup with separator-insensitive matching. | 0.092 | ||
| extension_distribution | first multi-target Marketplace publish not yet run | in-progress | Azure DevOps builds, tests, packages, and publishes the VS Code extension only for tags matching `ext/v*`. Tags are created by ["./distribution.rq".deployment_flow]. The extension version comes from packages / extension / package. json at the tag; the pipeline must not overwrite it from the tag suffix. The implementation lives in ["../../azure-pipelines.yml"]. The pipeline builds language, packages, and the extension only; it does not run the site static build or install Playwright ( [site_distribution] owns site CI ). Native core-engine binaries for VSIX come from the Azure `build_native` matrix on this git tag ( [vsix_native_not_from_npm], [rust_binary_distribution], [vsix_export] ). GitHub Actions still builds and publishes platform packages on `analytical/v*` for CLI / MCP ( [npm_distribution] ). Before tests Azure stages matrix artifacts into workspace packages ( `prepare-native-packages.mjs --binary-dir` ) and checks the host optionalDependency ( `scripts/ensure-host-native.mjs --no-build` ). VSIX packaging follows ["./distribution.rq".vsix_export]: one VSIX per [native_targets] tuple; Marketplace selects the VSIX matching the extension-host target ( [extension_host_target] ). Marketplace publish is complemented by Open VSX per ["./distribution.rq".openvsx_registry]. Pipeline cache and publish parallelism: [extension_pipeline_cache], [extension_pipeline_publish]. | 0.243 | |
| extension_host_target | first `@reqlan/analytical-<platform>-<arch>` release not yet published | in-progress | The extension host must load the native core engine for its machine. The selection strategy is ["./native_host_binary.rq".native_host_binary]. IndexService and WorkspaceIndex use `NativeWorkspaceIndex` ( ["../core_analysis/rust_port.rq".native_bridge] ). If the engine is missing, activation fails. Loader: ["../../packages/analytical/src/native/load-native.ts"]. The extension registers search folders from ["../../packages/extension/src/analytical_submodule/index.ts"]. | 0.268 | |
| openvsx_registry | first multi-target Open VSX publish not yet run | in-progress | The extension should be published to the Open VSX registry at https://open-vsx.org so it is installable in editors that use Open VSX instead of the Visual Studio Marketplace. Publishing should use the same tag-driven `ext/v*` releases as ["./distribution.rq".extension_distribution]. Each per-target VSIX from ["./distribution.rq".vsix_export] is published to Open VSX ( Marketplace and Open VSX both select by extension-host `targetPlatform` ). Azure DevOps is the authoritative publish workflow; Open VSX publish belongs in ["../../azure-pipelines.yml"] alongside marketplace deploy. Publish path follows [extension_pipeline_publish]. | 0.166 | |
| rust_binary_distribution | Trusted Publisher registration for platform packages on npmjs.com | in-progress | One platform-specific npm package per [native_targets] tuple: `@reqlan/analytical-<platform>-<arch>` ( napi suffixes: `linux-x64-gnu`, `linux-arm64-gnu`, `darwin-x64`, `darwin-arm64`, `win32-x64-msvc`, `win32-arm64-msvc` ). Each package declares `os` and `cpu`, contains the matching core engine `.node`, and uses the `@reqlan/analytical` package. json version as the single source of truth. ["../../scripts/prepare-native-packages.mjs"] writes that version. Changesets ignores `@reqlan/analytical-*` in ["../../.changeset/config.json"]. Git `@reqlan/analytical` does not list platform packages as `optionalDependencies`; this workspace links them through `packageExtensions` in ["../../pnpm-workspace.yaml"]. The published tarball lists pinned optionalDependencies ( `--publish-versions` ) ( [version_management] ). CLI and MCP install the host-matching binary from those published optionalDependencies. The published tarball runs ["./native_host_binary.rq".published_host_native_install] so a host miss prints a warning. Published on the existing `analytical/v*` channel ( [npm_distribution] / [release_tagging] ); not a separate tag channel. The napi build runs when this channel moved: a direct `analytical/v*` tag, or `analytical_tag` from [deployment_flow]. The first npm tag ( `npm_ref` ) can be `language/v*` in the same release, so that ref is not the native-build gate. Website download listing and GitHub-release postinstall are later follow-ups ( out of scope here ). Engine port: ["../core_analysis/rust_port.rq".analytical_rust_port] / ["../core_analysis/rust_port.rq".native_bridge]. Per-target VSIX packaging uses the same package layout under ["../../packages/analytical-native/"], filled by Azure from this git commit ( [vsix_export], [vsix_native_not_from_npm] ). npm tarballs of those packages are for CLI / MCP only. `collect-napi-binary.mjs` copies `reqlan-lsp` only with `--with-lsp`. The npm workflow does not pass that flag. Azure does, because the VSIX ships `bin/reqlan-lsp` ( [vsix_export] ). Implementation: ["../../packages/analytical-native/"], ["../../scripts/prepare-native-packages.mjs"], ["../../scripts/require-natives-published.mjs"], ["../../packages/analytical/scripts/check-host-native.mjs"], ["../../.changeset/config.json"], ["../../.github/workflows/deploy-npm.yml"] build-native job, ["../../azure-pipelines.yml"] build_native job. | 0.380 | |
| vsix_export | first ext/v* release with six target VSIXes not yet shipped | in-progress | One VSIX is built per [native_targets] tuple via `vsce package --target <tuple> --no-dependencies`. Each VSIX keeps today's esbuild-bundled JS ( TS dependency graph stays bundled ); only the matching platform native package is staged into the VSIX so other targets' binaries are excluded. The same VSIX packs `bin/reqlan-lsp` for that target ( ["../extension/language/support/language-server-rust.rq".language_server_rust] ). Azure `collect-napi-binary.mjs --with-lsp` copies that binary into the native artifact. The pack script checks that zip entry by `file_size`. It does not read the binary through a pipe. The napi addon stays for the index host. npm platform packages do not contain it ( [rust_binary_distribution] ). Stamp `targetPlatform` so Marketplace / Open VSX route by extension host ( [extension_host_target], ["./native_host_binary.rq".native_host_binary_distributed] ). Artifact name shape: `reqlan-extension-<version>-<target>.vsix`. The VSIX includes logo assets from the extension media build: PNG for marketplace icon, language file icon, activity bar, and README; WebP as a raster fallback. Implementation: ["../../scripts/package-extension-targets.mjs"], ["../../scripts/prepare-native-packages.mjs"], ["../../scripts/collect-napi-binary.mjs"], ["../../packages/extension/.vscodeignore"] ( `native/`, `bin/` ), ["../../azure-pipelines.yml"]. | 0.446 | |
| native_host_binary_distributed | first multi-target VSIX and platform packages not yet published | in-progress | Use this procedure for a published VSIX and for published npm packages. VS Code extension: The registry installs the VSIX that has `targetPlatform` equal to the extension host. Each VSIX contains one `.node` file for one ["./distribution.rq".native_targets] tuple. The file name is `native/reqlan_napi.node`. The VSIX also contains `native/target.json`. At run time, read `process.platform` and `process.arch` on the extension host. If `target.json` records a different tuple, do not load `native/reqlan_napi.node`. Do not put binaries for other platforms in that VSIX. The Azure pipeline compiles each platform binary from this git commit ( `build_native` + `collect-napi-binary.mjs` + `prepare-native-packages.mjs --binary-dir` ). Package versions in git are canonical. The pipeline does not wait for npm. Related: ["./distribution.rq".vsix_export], ["./distribution.rq".extension_distribution], ["./distribution.rq".vsix_native_not_from_npm]. CLI and MCP: npm installs the host package from `optionalDependencies` on the published `@reqlan/analytical` tarball. Git does not list those entries. ["../../scripts/prepare-native-packages.mjs"] `--publish-versions` writes them at npm publish. The loader resolves that package from `@reqlan/analytical/package.json` ( `createRequire` ), which is where the optional dependency is attached after `npm install`. Published installs also run [published_host_native_install]. Related: ["./distribution.rq".rust_binary_distribution], [rust_port.native_bridge]. Implementation: ["../../scripts/package-extension-targets.mjs"], ["../../scripts/prepare-native-packages.mjs"], ["../../packages/analytical/src/native/load-native.ts"], ["../../packages/analytical/scripts/check-host-native.mjs"], ["../../azure-pipelines.yml"]. | 0.129 | |
| published_host_native_install | postinstall warning is not covered by automated tests; package-manager optional install is not a reliable unit-test guarantee | done | After a published install of `@reqlan/analytical`, the host platform package must resolve. The host is `process.platform` and `process.arch` of the install process ( [native_host_binary] ). Git `@reqlan/analytical` does not list `optionalDependencies`. The check exits 0 in this workspace. The published tarball lists pinned optionalDependencies ( ["./distribution.rq".rust_binary_distribution] ). That tarball runs ["../../packages/analytical/scripts/check-host-native.mjs"] as `postinstall`. If the host package name is missing from `optionalDependencies`, or `createRequire` from `@reqlan/analytical/package.json` cannot resolve that package to a file, the script prints a warning and exits 0. The warning text tells the user how to enable optional dependencies and how to limit pnpm to the host OS and CPU. Do not use `--force`. `--force` installs every optional platform package. Do not skip the script with `--ignore-scripts` on a published install. CLI install documentation: ["../../packages/cli/README.template.md"]. Implementation: ["../../packages/analytical/scripts/check-host-native.mjs"], ["../../packages/analytical/package.json"], ["../../packages/cli/README.template.md"], ["../../packages/analytical/README.template.md"]. | 0.114 | |
| decompose | true | A command pallete action for decomposition. Should replace an idea with a reference to a new file that holds the old contents. Should accept multiple inputs and put them in a list. | 0.090 | ||
| file_based_code_actions | true | Code 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_page | true | - set the whitespace etc appropriate for the page. | 0.040 | ||
| open_a_random_requirement | true | as it sounds | 0.040 | ||
| pallete_function_create_todo | true | A function that opens up a modal webview form allowing the user to write a rq-idea, search for references etc, and writes it to a specified output file. default folder is next to current file, but should be selectable in form. This behaviour should be configurable via ["./configuration.rq"] | 0.060 | ||
| git_based_history | CodeLens button to open idea git history | there should be a code lens button for viewing an idea history through git. Should accept close matches and likeley file moves should consume the same state as the [context_scope] Dates come from indexed [git_idea_timeline_analysis] state filled by [git_dates_background_indexing]. | 0.045 | ||
| git_date_inlayhints | true | Should 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 | ||
| language_server_rust | Move/delete and barrel-page host planners still call Langium DI. Finish those off napi/index/LSP. | in-progress | A Rust binary replaces the Langium language-server process. The extension launches `reqlan-lsp` over stdio. Open `.rq` buffers parse with [parser_rust]. The open sequence is ["open-file-sequencing.rq".open_file_algorithm]. Workspace names and rename targets come from the ideas index under [application_memory]. Inbound hints wait for the host snapshot of that index. The inbound inlay hover is markdown. It lists each referencer as a file link. An idea hover shows styled idea content when ["../syntax/features-syntax.rq".idea_content_tooltip] is on. A closed file has no retained syntax tree. Go-to-definition cost is ["../syntax/features-syntax-highlighting.rq".reference_goto_definition_speed]. When the engine is `rust`, the server also serves `rq:[…]` document links, go-to-definition, and missing-idea diagnostics in non- `.rq` comments. One resolution supplies the link, the definition target, and the underline. The host strips file document links; Ctrl + click uses definition ( ["../syntax/features-syntax-highlighting.rq".editor_reference_activation] ). The host serves those links when the engine is `node`. Host commands prefer LSP custom requests, napi extract, and the ideas index. Move / delete planners still use Langium until index-backed planners land. The setting `reqlan.languageServer.engine` selects the binary. The default is `rust`. `node` remains only when the setting says so, or when the binary is not on disk yet. A local extension build compiles this binary with the napi addon ( [extension_host_native_stage] ). The extension launches `bin/reqlan-lsp`, else that release build. It never launches a debug build, because a debug build is slow and the extension build does not refresh it. Code actions match ["../vsc-primitives.rq".code_actions]: ignore, create below, import fixes, search or wrap, idea move and delete, and barrel page. Attribute and name catalogs drive completion. Rename and find-references use open buffers plus the ideas index. Inlay hints honour `reqlan.referencesInlayHints.enabled` and the host inbound snapshot. An import link uses the parser token span ( [import_from] ). The path links to the file. An imported idea name and its alias each link to that declaration. A namespace reference links the alias and the idea as separate names. A missing leaf reports an unresolved idea on that name. Related: [language_server], [grammar_and_parser], [analytical_rust_port], [vsix_export]. | 0.580 | |
| comment_backlink_sequence | A change to a .rq file still republishes every comment buffer in the background pass, and unqualified lookup can call list_all_ideas. | in-progress | `rq:[idea]` and `rq:["path".idea]` in code comments use one resolution for the link and the underline. A qualified path reads that `.rq` file, parses idea names, then links or errors. That read belongs to the comment file. Opening a different `.rq` buffer must not re-resolve every comment buffer. An unqualified name searches open `.rq` buffers first. The index snapshot may add a match later ( [lazy_features_after_outbound] ). Do not call `list_all_ideas` for that search. Do not create a document link when the idea is not confirmed. Related: [comment_reference_resolution_error_state]. | 0.103 | |
| open_file_hot_path | Unqualified comment lookup can still fall back to the name catalog when no open buffer matches. | in-progress | Open-file work stays on the one parse of this buffer plus one parse per imported file. Reuse that model for document links, go-to-definition, hover, and diagnostics until the text or the import-root mapping changes. Keep that model, and the import name lists, only for open editors ( [native_cache_retention] ). Look up an open import by URI. Do not match on file basename. Do not read SQLite. Do not call `list_all_ideas`. At parse time, publish lex and parse diagnostics with same-file and import errors. The editor must not wait for a workspace link phase to see a broken parse. Handlers on this path read the open model. They do not build a workspace link graph. Related: [open_file_algorithm], [outbound_one_hop], [ast_lifecycle], [comment_backlink_sequence]. | 0.186 | |
| unresolved_reference_diagnostics | The qualified file link before idea confirmation is still open on ["../support/open-file-sequencing.rq".missing_reference_colour_sequence]. | in-progress | Unresolved idea references must report a linking error diagnostic. A same-file miss and an import-target miss have an error and no document link. A qualified reference may link to its file before the idea line is confirmed. After confirmation, a missing idea has an error and no document link ( ["../support/open-file-sequencing.rq".missing_reference_colour_sequence] ). A false idea link looked like a happy reference while Ctrl + click could not navigate. Missing file references stay on ["./features-syntax.rq".file_references] / ["../support/language-server-errors.rq".file_reference_errors] ( error, no document link ). Related: [reference_rendering], [non_web_reference_navigation]. | 0.117 | |
| refernce_lists_pane_reference_tiering | true | Inbound 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 | ||
| overview_page | deep links into HTML export pages when an export exists | First 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 | ||
| indexer_rust | surface per-file timing diagnostics from Rust sync into IndexDiagnosticsStore | in-progress | The [index] engine ( parse-for-index → extract → SQLite persist → incremental sync ) should be written in Rust. Crate: `reqlan-index` over `reqlan-parse` per ["../core_analysis/rust_port.rq".rust_crate_layout]. Extractor ports ["../../crates/reqlan-index/src/extract.rs"] including [wildcard_reference_edges]. Store ports schema v4 ( ["../../packages/analytical/src/index-store/schema.ts"] ) via rusqlite; diagnostics live in `index-diagnostics.sqlite` on the same engine. Sync keeps [nonblocking_index]: per-file upsert, mtime skip, hard rebuild, cancellable progress. Not the Langium LSP. Comment-file indexing: [index_code_files]. | 0.172 | |
| attribute_namespaceing | true | an 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-comment-syntax-errors | true | any time a comment line contains `rq:[*]`, or common patterns it should be parsed, and be considered in `reqlan check`... | 0.040 | ||
| empty-attributes | true | it 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-changes | true | The print page should be aware of the [idea-leading-whitespace] | 0.040 | ||
| idea-leading-whitespace | true | Block 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-patterns | true | When 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 | ||
| closing_nested_curly_braces | fix this - it's currently not working as expected. in the | if, for some reason, there is a prose block containing only closing curly braces, they should be escaped and allowed \ } like this. | 0.040 | ||
| pagerank | true | Search algorithm from google based on the graph structure? | 0.067 | ||
| atlas | specify atlas persistence and UI relative to ["./extension/workspace-summary/ideas_summary/graphical_graph.rq".graphical_graph] | draft | A challenge with navigating complex graphs is that they can be overwhelming. One extension to the product is to have atlases — named, reusable cartographic cuts beyond the live [cartographic_map]. | 0.046 | |
| roadmap_section | refresh items when product priorities shift | done | Landing page section `#roadmap` after example and before links. Compact vertical scaled-center carousel ( snap + distance-based scale / opacity peeks ). Flat Now / Next / Later items — one focused at a time; neighbours peek smaller. Copy lives in ["../../site/src/content/roadmap.ts"] ( per [copy] ); nav and sticky page graph include the section. Keep the list honest and thin — no fake dates, no wall of tickets. | 0.091 |