Ideas399
Values359

Value distribution

ValueDistributionIdeasShare
["../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"]143.5%
["../../../../packages/language/test/completion.test.ts"]92.3%
["../../packages/analytical/test/load-native.test.ts"], ["../../packages/analytical/test/native-packaging.test.ts"]41%
"../../../packages/extension/test/startup-gate.test.ts", "../../../packages/extension/test/safe-webview-post.test.ts", "../../../packages/analytical/src/index-store/workspace-index.ts"30.8%
["../../../../packages/extension/webviews/activity-bar/components/SearchPane.svelte"], ["../../../../packages/extension/webviews/activity-bar/state/app.svelte.ts"]30.8%
["../../packages/analytical/test/native-packaging.test.ts"]30.8%
["../../../packages/analytical/test/index-diagnostics.test.ts"]20.5%
["../../../packages/extension/src/activity_bar_module/lib/context-signals.ts"], ["../../../packages/extension/test/context-model.test.ts"]20.5%
["../../../packages/mcp/test/server.test.ts:MCP surface is click, check, diff, completion_status, and prompt"]20.5%
["../../crates/reqlan-export/tests/html_export.rs:interactive_layout_cards_are_reorderable_collapsible_with_heading_tips"]20.5%
["../../crates/reqlan-export/tests/html_export.rs:url_base_and_header_link_produce_root_relative_hrefs"], ["../../crates/reqlan-analytical/tests/export.rs:html_export_honours_graph_page_url_base_and_header_link"]20.5%
["../../packages/analytical/test/native-packaging.test.ts"], ["../../packages/analytical/test/native-packaging.test.ts:Azure extension pipeline caches rust and pnpm and publishes in parallel"]20.5%
["../../site/src/content/faq.test.ts"]20.5%
["../../site/src/content/install-actions.test.ts"]20.5%
["../../site/src/lib/phonebook-icons.test.ts"]20.5%
true20.5%
"../../../packages/analytical/src/index-store/workspace-index.ts"10.3%
"../../../packages/analytical/test/load-native.test.ts", "../../../packages/extension/test/extension-package.test.ts"10.3%
"../../../packages/extension/test/safe-webview-post.test.ts"10.3%
"../../../packages/extension/test/startup-gate.test.ts", "../../../packages/extension/test/safe-webview-post.test.ts"10.3%
["../../../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"], ["../../../../crates/reqlan-export/tests/html_export.rs:workspace_graph_includes_every_idea_when_max_graph_nodes_is_below_count"], ["../../../../packages/extension/webviews/shared/graph/file-treatment.ts"], ["../../../../crates/reqlan-index/tests/wildcard_reference_edges.rs:stores_wildcard_fan_out_as_wildcard_reference_kind"], ["../../../../crates/reqlan-index/tests/wildcard_reference_edges.rs:indexer_and_graphical_graph_rq_capture_wildcard_edge_and_toggle_ideas"], ["../../../../crates/reqlan-export/tests/html_export.rs:html_export_workspace_graph_includes_wildcard_refs_chip_and_edges"]10.3%
["../../../../crates/reqlan-index/tests/extract_parity.rs"], ["../../../../packages/analytical/test/file-reference-resolve.test.ts"], ["../../../../packages/language/test/linking.test.ts:does not report linking error for bare namespace alias references"]10.3%
["../../../../crates/reqlan-index/tests/wildcard_reference_edges.rs:stores_wildcard_fan_out_as_wildcard_reference_kind"], ["../../../../crates/reqlan-index/tests/wildcard_reference_edges.rs:indexer_and_graphical_graph_rq_capture_wildcard_edge_and_toggle_ideas"], ["../../../../crates/reqlan-index/tests/wildcard_reference_edges.rs"], ["../../../../crates/reqlan-index/tests/wildcard_reference_edges.rs:stores_wildcard_fan_out_as_wildcard_reference_kind"], ["../../../../crates/reqlan-export/tests/html_export.rs:html_export_workspace_graph_includes_wildcard_refs_chip_and_edges"], ["../../../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"], ["../../../../crates/reqlan-export/tests/html_export.rs:workspace_graph_includes_every_idea_when_max_graph_nodes_is_below_count"]10.3%
["../../../../crates/reqlan-lsp/tests/hover_content.rs:hover_shows_styled_idea_content_by_default"], ["../../../../crates/reqlan-lsp/tests/hover_content.rs:hover_omits_idea_content_when_the_setting_is_off"], ["../../../../crates/reqlan-lsp/tests/hover_content.rs:hover_shows_idea_content_from_another_file"], ["../../../../packages/extension/test/idea-content-tooltip.test.ts:package.json enables idea content tooltips by default"], ["../../../../packages/extension/test/idea-content-tooltip.test.ts:a missing value stays on"]10.3%
["../../../../crates/reqlan-lsp/tests/parity.rs:from_import_tokens_link_independently"], ["../../../../crates/reqlan-lsp/tests/parity.rs:reports_an_error_when_an_import_path_file_does_not_exist"], ["../../../../crates/reqlan-lsp/tests/parity.rs:extensionless_path_confirms_the_neighbor_idea"], ["../../../../packages/language/test/outbound-hop.test.ts:reuses a cached neighbor parse for the same content"], ["../../../../packages/language/test/outbound-hop.test.ts:does not parse a neighbor of the neighbor"]10.3%
["../../../../crates/reqlan-lsp/tests/parity.rs:missing_file_references_do_not_produce_document_links"], ["../../../../packages/language/test/outbound-hop.test.ts:keeps URL and wildcard document links"], ["../../../../packages/language/test/outbound-hop.test.ts:keeps a missing idea error on the same line as a confirmed neighbor idea"], ["../../../../packages/language/test/local-symbolic-links.test.ts:unresolved same-file ideas get no document link"]10.3%
["../../../../crates/reqlan-lsp/tests/session.rs:attribute_catalog_completion_and_find_references"], ["../../../../crates/reqlan-lsp/tests/session.rs:definition_hover_highlight_and_link"]10.3%
["../../../../crates/reqlan-lsp/tests/session.rs:comment_links_share_one_resolution"], ["../../../../packages/language/test/comment-reference-resolution.test.ts:reports a missing comment reference idea in a loaded file"], ["../../../../packages/language/test/comment-reference-resolution.test.ts:shares one presentation so a matching idea clears the underline and adds a link"]10.3%
["../../../../crates/reqlan-lsp/tests/session.rs:definition_uses_the_open_neighbor_parse"], ["../../../../crates/reqlan-lsp/tests/session.rs:definition_follows_a_changed_neighbor_to_the_name_token"], ["../../../../crates/reqlan-lsp/tests/session.rs:definition_of_an_imported_alias_reaches_the_neighbor"], ["../../../../crates/reqlan-lsp/tests/session.rs:folder_reference_link_is_a_command"], ["../../../../crates/reqlan-lsp/tests/hover_content.rs:hover_shows_idea_content_from_another_file"], ["../../../../crates/reqlan-lsp/tests/stdio.rs:stdio_initialize_and_shutdown"], ["../../../../packages/extension/test/editor-link-activation.test.ts:go-to-definition does not send the buffer"]10.3%
["../../../../crates/reqlan-lsp/tests/session.rs:open_file_diagnostics_and_close_drops_the_parse"], ["../../../../crates/reqlan-lsp/tests/session.rs:semantic_token_range_matches_the_source_name"], ["../../../../crates/reqlan-lsp/tests/session.rs:definition_hover_highlight_and_link"], ["../../../../crates/reqlan-lsp/tests/session.rs:definition_uses_the_open_neighbor_parse"], ["../../../../crates/reqlan-lsp/tests/session.rs:definition_does_not_reread_a_cached_neighbor"], ["../../../../crates/reqlan-lsp/tests/session.rs:folder_reference_link_is_a_command"], ["../../../../crates/reqlan-lsp/tests/hover_content.rs:hover_shows_styled_idea_content_by_default"], ["../../../../crates/reqlan-lsp/tests/hover_content.rs:hover_omits_idea_content_when_the_setting_is_off"], ["../../../../crates/reqlan-lsp/tests/hover_content.rs:hover_shows_idea_content_from_another_file"], ["../../../../crates/reqlan-lsp/tests/session.rs:neighbor_confirm_suppresses_missing_idea"], ["../../../../crates/reqlan-lsp/tests/session.rs:rq_ignore_suppresses_the_next_line"], ["../../../../crates/reqlan-lsp/tests/session.rs:completion_rename_and_code_action"], ["../../../../crates/reqlan-lsp/tests/session.rs:index_completion_inlay_and_custom_requests"], ["../../../../crates/reqlan-lsp/tests/session.rs:attribute_catalog_completion_and_find_references"], ["../../../../crates/reqlan-lsp/tests/stdio.rs:stdio_initialize_and_shutdown"], ["../../../../crates/reqlan-lsp/tests/parity.rs:same_file_idea_references_produce_document_links"], ["../../../../crates/reqlan-lsp/tests/parity.rs:missing_file_references_do_not_produce_document_links"], ["../../../../crates/reqlan-lsp/tests/parity.rs:import_root_alias_file_refs_match_check"], ["../../../../crates/reqlan-lsp/tests/parity.rs:import_root_config_file_refs_match_check"], ["../../../../crates/reqlan-lsp/tests/parity.rs:anonymous_import_path_does_not_report_an_unresolved_import"], ["../../../../crates/reqlan-lsp/tests/parity.rs:reports_an_error_when_an_import_path_file_does_not_exist"], ["../../../../crates/reqlan-lsp/tests/parity.rs:reports_an_error_when_an_imported_idea_does_not_exist"], ["../../../../crates/reqlan-lsp/tests/parity.rs:anonymous_qualified_idea_resolves_without_an_import_statement"], ["../../../../crates/reqlan-lsp/tests/parity.rs:quoted_path_reaches_an_idea_that_is_not_from_imported"], ["../../../../crates/reqlan-lsp/tests/parity.rs:extensionless_path_confirms_the_neighbor_idea"], ["../../../../crates/reqlan-lsp/tests/parity.rs:from_import_binds_a_local_reference"], ["../../../../crates/reqlan-lsp/tests/parity.rs:from_import_tokens_link_independently"], ["../../../../crates/reqlan-lsp/tests/parity.rs:import_document_link_covers_the_path_string"], ["../../../../crates/reqlan-lsp/tests/parity.rs:namespace_drill_links_each_segment"], ["../../../../crates/reqlan-lsp/tests/parity.rs:namespace_drill_missing_leaf_is_unresolved"], ["../../../../crates/reqlan-lsp/tests/parity.rs:namespace_alias_is_a_file_link"], ["../../../../crates/reqlan-lsp/tests/parity.rs:formats_inbound_referencers_as_an_inlayed_attribute"], ["../../../../crates/reqlan-lsp/tests/parity.rs:truncates_long_referencer_lists_with_a_remainder_suffix"], ["../../../../crates/reqlan-lsp/tests/parity.rs:omits_the_inlay_when_there_are_no_inbound_referencers"], ["../../../../crates/reqlan-lsp/tests/session.rs:comment_links_share_one_resolution"], ["../../../../crates/reqlan-lsp/tests/session.rs:comment_definition_follows_a_resolved_rq_reference"], ["../../../../packages/extension/test/language-server-launch.test.ts:defaults to the rust binary over stdio"], ["../../../../packages/extension/test/language-server-launch.test.ts:launches the release build and never a debug build"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:offers_ignore_error_quick_fix_on_a_line_with_a_linking_error"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:omits_ignore_error_when_only_refactor_is_requested"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:creates_the_missing_idea_below_the_containing_idea"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:offers_all_or_a_specific_unresolved_idea"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:omits_create_below_when_the_caret_idea_has_no_unresolved_local_references"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:omits_create_below_for_a_qualified_unresolved_reference"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:omits_create_below_when_only_refactor_is_requested"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:offers_add_import_and_rewrite_when_a_matching_idea_exists_elsewhere"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:uses_name_catalog_matches_when_documents_are_not_loaded"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:search_and_create_actions_invoke_extension_commands"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:appends_to_an_existing_from_import_for_the_same_path"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:offers_add_import_from_the_ideas_index"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:offers_search_code_action_when_cursor_is_inside_a_resolved_reference"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:offers_wrap_code_action_for_a_prose_selection"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:wraps_the_word_under_the_cursor_when_selection_is_empty"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:offers_move_and_delete_actions_at_an_idea_declaration"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:offers_barrel_page_source_action_when_the_file_has_top_level_ideas"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:omits_barrel_page_when_only_quickfix_is_requested_or_there_are_no_ideas"]10.3%
["../../../../crates/reqlan-lsp/tests/session.rs:open_file_diagnostics_and_close_drops_the_parse"], ["../../../../packages/language/test/lsp-memory.test.ts:drops a neighbor list when the last open editor closes"], ["../../../../packages/language/test/lsp-memory.test.ts:drops a neighbor list when the file watcher reports a delete"], ["../../../../packages/language/test/outbound-hop.test.ts:reuses a cached neighbor parse for the same content"]10.3%
["../../../../crates/reqlan-lsp/tests/session.rs:open_file_diagnostics_and_close_drops_the_parse"], ["../../../../packages/language/test/parse-budget.test.ts:times out a hung parse worker with warning and error"]10.3%
["../../../../crates/reqlan-lsp/tests/session.rs:semantic_token_range_matches_the_source_name"], ["../../../../crates/reqlan-lsp/tests/parity.rs:same_file_idea_references_produce_document_links"], ["../../../../crates/reqlan-lsp/tests/parity.rs:from_import_binds_a_local_reference"], ["../../../../crates/reqlan-lsp/tests/parity.rs:reports_an_error_when_an_imported_idea_does_not_exist"], ["../../../../packages/language/test/local-symbolic-links.test.ts:same-file idea links without DocumentBuilder / workspace link"]10.3%
["../../../../crates/reqlan-search/tests/fuzzy.rs"], ["../../../../crates/reqlan-search/tests/fuzzy.rs"], ["../../../../crates/reqlan-search/tests/fuzzy.rs"], ["../../../../crates/reqlan-search/tests/fuzzy.rs"], ["../../../../crates/reqlan-search/tests/fuzzy.rs"]10.3%
["../../../../crates/reqlan-search/tests/fuzzy.rs"], ["../../../../packages/analytical/test/workspace-index.test.ts:fuzzySearch ranks from the native index without listing all ideas in JS"], ["../../../../packages/extension/webviews/activity-bar/state/app.svelte.ts"], ["../../../../crates/reqlan-analytical/tests/fuzzy_search.rs:workspace_index_fuzzy_search_ranks_without_exporting_catalog"]10.3%
["../../../../crates/reqlan-search/tests/fuzzy.rs:ranks_file_name_hits_with_ideas"], ["../../../../crates/reqlan-search/tests/fuzzy.rs:ranks_file_name_hits_with_ideas"], ["../../../../packages/analytical/test/workspace-index.test.ts:fuzzySearch returns file-name hits and pages with offset"], ["../../../../packages/extension/test/search-results-meta.test.ts"]10.3%
["../../../../packages/analytical/test/idea-timeline.test.ts"], ["../../../../packages/analytical/test/idea-timeline.test.ts:listIdeaIdsMissingGitDates can filter or prefer a file"], ["../../../../packages/extension/test/git-dates-background.test.ts"], ["../../../../packages/extension/test/git-dates-background.test.ts:processes active-file priority ids before the global backlog"]10.3%
["../../../../packages/analytical/test/idea-timeline.test.ts"], ["../../../../packages/analytical/test/idea-timeline.test.ts:upsert preserves analyser git dates and change count across reindex"], ["../../../../packages/analytical/test/idea-timeline.test.ts:listIdeaIdsMissingGitDates includes ideas missing change count"], ["../../../../packages/analytical/test/webview-table-queries.test.ts:orders by git date and change count columns"], ["../../../../packages/analytical/test/ideas-git-columns-perf.test.ts"], ["../../../../packages/extension/test/format-git-date.test.ts"], ["../../../../crates/reqlan-index/src/git_dates.rs"]10.3%
["../../../../packages/analytical/test/ideas-git-columns-perf.test.ts"], ["../../../../packages/analytical/test/ideas-git-columns-perf.test.ts:listIdeasPage reads indexed git columns without running the analyser"], ["../../../../packages/analytical/test/ideas-git-columns-perf.test.ts:indexed git page load stays interactive and under simulated git-per-row cost"], ["../../../../packages/analytical/test/ideas-git-columns-perf.test.ts:listIdeaIdsMissingGitDates stays fast on a large filled index"], ["../../../../packages/analytical/test/ideas-git-columns-perf.test.ts:git change-count sort page stays within absolute budget"]10.3%
["../../../../packages/analytical/test/webview-table-queries.test.ts"]10.3%
["../../../../packages/analytical/test/webview-table-queries.test.ts"], ["../../../../packages/extension/test/bases-table-filter.test.ts"], ["../../../../packages/extension/test/table-column-filters-normalize.test.ts"]10.3%
["../../../../packages/analytical/test/workspace-index.test.ts"]10.3%
["../../../../packages/extension/src/activity_bar_module/lib/context-signals.ts"], ["../../../../packages/extension/src/activity_bar_module/lib/context-signals.ts"], ["../../../../packages/extension/webviews/activity-bar/components/widgets/ContextFingerprint.svelte"], ["../../../../packages/extension/webviews/activity-bar/components/ScopePane.svelte"]10.3%
["../../../../packages/extension/test/bases-table-filter.test.ts"]10.3%
["../../../../packages/extension/test/comment-reference-path-context.test.ts:resolves @/ against the workspace folder for extension comment links"], ["../../../../packages/language/test/comment-reference-resolution.test.ts:creates a document link for an import-root aliased comment reference"]10.3%
["../../../../packages/extension/test/definition-navigation.test.ts:tracks non-blocklisted languages for navigate-back"], ["../../../../packages/extension/test/definition-navigation.test.ts:records only landings in reqlan targets"], ["../../../../packages/extension/test/definition-navigation.test.ts:records a cross-file command jump from the prior caret"], ["../../../../packages/extension/test/definition-navigation.test.ts:navigate-back keybinding is not limited to .rq editors"]10.3%
["../../../../packages/extension/test/definition-navigation.test.ts:tracks non-blocklisted languages for navigate-back"], ["../../../../packages/extension/test/editor-link-activation.test.ts:package.json contributes comment.rq.injection"], ["../../../../packages/extension/test/comment-reference-languages.test.ts:blocklist excludes reqlan and editor chrome"]10.3%
["../../../../packages/extension/test/editor-link-activation.test.ts:comment injection link scope includes markup.underline"], ["../../../../packages/extension/test/editor-link-activation.test.ts:package.json contributes comment.rq.injection"]10.3%
["../../../../packages/extension/test/filter-bases.test.ts"], ["../../../../packages/extension/webviews/activity-bar/components/BasePicker.svelte"], ["../../../../packages/extension/webviews/activity-bar/components/WorkspacePane.svelte"], ["../../../../packages/extension/webviews/activity-bar/state/app.svelte.ts"], ["../../../../packages/extension/src/activity_bar_module/activity-bar-webview-provider.ts"]10.3%
["../../../../packages/extension/test/format-git-date.test.ts"], ["../../../../packages/extension/test/format-git-date.test.ts:formats git %aI timestamps as YYYY-MM-DD"], ["../../../../packages/extension/test/format-git-date.test.ts:keeps authored calendar day (does not shift across timezone)"], ["../../../../packages/extension/test/format-git-date.test.ts:renders empty and invalid values as an em dash"], ["../../../../crates/reqlan-index/src/git_dates.rs"], ["../../../../crates/reqlan-index/src/git_dates.rs:parses_iso_author_dates_and_ignores_patch_noise"]10.3%
["../../../../packages/extension/test/group-file-issues.test.ts"], ["../../../../packages/extension/webviews/activity-bar/components/NestedSection.svelte"], ["../../../../packages/extension/webviews/activity-bar/components/WorkspacePane.svelte"]10.3%
["../../../../packages/extension/test/insert-idea-reference.test.ts"], ["../../../../packages/extension/src/extension/insert-idea-reference.ts"], ["../../../../packages/extension/src/extension/insert-idea-reference-helpers.ts"]10.3%
["../../../../packages/extension/test/open-index-file.test.ts"], ["../../../../packages/extension/test/open-index-file.test.ts:prefers the document whose URI matches the workspace target"]10.3%
["../../../../packages/extension/test/search-results-meta.test.ts"], ["../../../../crates/reqlan-search/tests/fuzzy.rs:pages_ranked_hits_with_offset_and_truncated"], ["../../../../packages/analytical/test/workspace-index.test.ts:fuzzySearch returns file-name hits and pages with offset"]10.3%
["../../../../packages/extension/test/share-in-flight.test.ts"]10.3%
["../../../../packages/extension/test/wildcard-reference-open-search.test.ts"], ["../../../../packages/extension/src/activity_bar_module/activity-bar-webview-provider.ts"], ["../../../../packages/extension/webviews/activity-bar/state/app.svelte.ts"]10.3%
["../../../../packages/extension/webviews/activity-bar/components/NestedSection.svelte"], ["../../../../packages/extension/webviews/activity-bar/components/ScopePane.svelte"], ["../../../../packages/extension/webviews/activity-bar/components/ReferenceListsPane.svelte"]10.3%
["../../../../packages/extension/webviews/activity-bar/components/ReferenceListsPane.svelte"], ["../../../../packages/extension/src/activity_bar_module/activity-bar-webview-provider.ts"]10.3%
["../../../../packages/extension/webviews/activity-bar/components/ReferenceListsPane.svelte"], ["../../../../packages/extension/src/activity_bar_module/local-symbolic-context.ts"], ["../../../../packages/extension/test/local-symbolic-context.test.ts"], ["../../../../crates/reqlan-index/src/extract.rs"], ["../../../../crates/reqlan-index/tests/extract_parity.rs"]10.3%
["../../../../packages/extension/webviews/activity-bar/components/ScopePane.svelte"], ["../../../../packages/extension/webviews/activity-bar/components/widgets/ContextFingerprint.svelte"], ["../../../../packages/extension/src/activity_bar_module/git-context.ts"], ["../../../../packages/extension/src/activity_bar_module/git-context-helpers.ts"], ["../../../../packages/extension/test/git-context.test.ts"], ["../../../../packages/extension/src/activity_bar_module/lib/context-model.ts"], ["../../../../packages/extension/src/activity_bar_module/lib/context-signals.ts"]10.3%
["../../../../packages/extension/webviews/activity-bar/components/SearchPane.svelte"]10.3%
["../../../../packages/extension/webviews/activity-bar/components/SearchPane.svelte"], ["../../../../packages/extension/src/activity_bar_module/search-results-meta.ts"]10.3%
["../../../../packages/extension/webviews/activity-bar/components/SearchPane.svelte"], ["../../../../packages/extension/webviews/activity-bar/state/app.svelte.ts"], ["../../../../packages/extension/src/activity_bar_module/activity-bar-webview-provider.ts"]10.3%
["../../../../packages/extension/webviews/activity-bar/components/SearchPane.svelte"], ["../../../../packages/extension/webviews/activity-bar/state/app.svelte.ts"], ["../../../../packages/extension/src/activity_bar_module/activity-bar-webview-provider.ts"], ["../../../../packages/extension/src/activity_bar_module/activity-bar-messages.ts"], ["../../../../packages/analytical/test/workspace-index.test.ts:fuzzySearch ranks from the native index without listing all ideas in JS"]10.3%
["../../../../packages/extension/webviews/activity-bar/components/TodoPane.svelte"], ["../../../../packages/extension/webviews/activity-bar/components/TodoPane.svelte"], ["../../../../packages/extension/webviews/activity-bar/App.svelte"], ["../../../../packages/extension/webviews/activity-bar/state/app.svelte.ts"], ["../../../../packages/extension/src/activity_bar_module/activity-bar-webview-provider.ts"]10.3%
["../../../../packages/extension/webviews/activity-bar/components/widgets/ContextFingerprint.svelte"], ["../../../../packages/extension/webviews/activity-bar/components/ScopePane.svelte"]10.3%
["../../../../packages/extension/webviews/activity-bar/components/widgets/DependencyPulse.svelte"], ["../../../../packages/extension/webviews/activity-bar/components/ScopePane.svelte"]10.3%
["../../../../packages/extension/webviews/shared/graph/file-treatment.ts"], ["../../../../packages/extension/test/graph-ui-state.test.ts"], ["../../../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"]10.3%
["../../../../packages/language/test/ast-lifecycle.test.ts:populates the Langium AST at Parsed without DocumentBuilder"], ["../../../../packages/language/test/ast-lifecycle.test.ts:linking and validation do not replace the AST"], ["../../../../packages/language/test/ast-lifecycle.test.ts:neighbor hop does not populate a Langium AST"], ["../../../../packages/language/test/parsed-reference-sequencing.test.ts:definition hover highlight and links do not resolve refs before ComputedScopes"], ["../../../../packages/language/test/parsed-reference-sequencing.test.ts:reading every ref before ComputedScopes does not warn and linking still works"], ["../../../../packages/language/test/open-file-hot-path.test.ts:does not relink an unrelated file that still has linker errors"], ["../../../../packages/language/test/open-file-hot-path.test.ts:relinks a host when its neighbor file changes"]10.3%
["../../../../packages/language/test/code-actions.test.ts"], ["../../../../packages/language/test/import-edits.test.ts"], ["../../../../packages/language/test/import-edits.test.ts:inserts after an existing different-path from-import with a blank line"], ["../../../../packages/language/test/import-edits.test.ts:inserts after an existing from-import with no blank line"], ["../../../../packages/language/test/import-edits.test.ts:inserts after an existing namespace import"], ["../../../../packages/language/test/import-edits.test.ts:inserts at the top when the file has no imports"], ["../../../../packages/language/test/import-edits.test.ts:appends to an existing same-path from-import"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:offers_add_import_and_rewrite_when_a_matching_idea_exists_elsewhere"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:uses_name_catalog_matches_when_documents_are_not_loaded"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:search_and_create_actions_invoke_extension_commands"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:appends_to_an_existing_from_import_for_the_same_path"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:appends_after_aliased_specifier_on_existing_from_import"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:offers_add_import_from_the_ideas_index"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:inserts_new_from_import_after_existing_from_import_with_blank_line"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:inserts_new_from_import_after_existing_from_import_without_blank_line"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:inserts_new_from_import_after_existing_namespace_import"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:inserts_from_import_at_top_when_file_has_no_imports"]10.3%
["../../../../packages/language/test/code-lens.test.ts"]10.3%
["../../../../packages/language/test/code-lens.test.ts:shows file inbound referenced-by CodeLens at the top of the file"], ["../../../../packages/language/test/code-lens.test.ts:omits file inbound CodeLens when the snapshot has no file referencers"], ["../../../../packages/language/test/code-lens.test.ts:truncates file inbound CodeLens names the same way as idea inlays"], ["../../../../packages/analytical/test/inbound-file-referencers.test.ts"], ["../../../../packages/analytical/test/inbound-file-referencers.test.ts:resolves relative file_reference edges onto the target file"], ["../../../../packages/extension/test/inbound-file-snapshot.test.ts"], ["../../../../crates/reqlan-index/src/queries.rs:inbound_for_file_returns_file_reference_targeting_file"], ["../../../../crates/reqlan-index/src/queries.rs:inbound_for_file_returns_file_reference_targeting_code_file"]10.3%
["../../../../packages/language/test/comment-reference-resolution.test.ts:creates a document link for an import-root aliased comment reference"], ["../../../../packages/language/test/comment-reference-resolution.test.ts:does not treat @/ as a path relative to the source file"], ["../../../../packages/language/test/comment-reference-resolution.test.ts:resolves a configured alias in a comment reference"], ["../../../../packages/language/test/comment-reference-resolution.test.ts:accepts an import-root aliased comment reference in a loaded document"], ["../../../../packages/language/test/path-resolve.test.ts:resolveAuthoredFsPath joins aliased remainder to the workspace folder"], ["../../../../packages/language/test/path-resolve.test.ts:pathResolveContextFromWorkspaceFolders picks the longest matching folder"], ["../../../../packages/extension/test/comment-reference-path-context.test.ts:resolves @/ against the workspace folder for extension comment links"], ["../../../../crates/reqlan-index/src/comment.rs:resolves_aliased_qualified_comment_path"], ["../../../../crates/reqlan-lsp/tests/session.rs:comment_links_share_one_resolution"]10.3%
["../../../../packages/language/test/comment-reference-resolution.test.ts:shares one presentation so a matching idea clears the underline and adds a link"], ["../../../../packages/language/test/comment-reference-resolution.test.ts:publishes a missing-idea diagnostic and no document link until the idea exists"], ["../../../../packages/language/test/comment-reference-resolution.test.ts:clears the underline and creates a link after a matching idea is added"], ["../../../../packages/language/test/comment-reference-resolution.test.ts:relinks comment references only when the target file changes"], ["../../../../packages/language/test/comment-reference-resolution.test.ts:revalidates comment-reference underlines when a matching idea is created on disk"], ["../../../../packages/language/test/outbound-hop.test.ts:comment references confirm the neighbor idea without loading Langium"], ["../../../../crates/reqlan-lsp/tests/session.rs:comment_links_share_one_resolution"], ["../../../../crates/reqlan-lsp/tests/session.rs:comment_definition_follows_a_resolved_rq_reference"]10.3%
["../../../../packages/language/test/completion.test.ts:anonymous file references complete code files, folders, and .rq files"], ["../../../../packages/language/test/completion.test.ts:completes ideas and ideasets after a quoted file path"], ["../../../../packages/language/test/completion.test.ts:completes ideaset members after a dotted qualifier"]10.3%
["../../../../packages/language/test/completion.test.ts:anonymous file references complete code files, folders, and .rq files"], ["../../../../packages/language/test/completion.test.ts:completes ideas and ideasets after a quoted file path"], ["../../../../packages/language/test/completion.test.ts:completes ideaset members after a dotted qualifier"], ["../../../../packages/language/test/completion-perf.test.ts"], ["../../../../packages/language/test/completion-perf.test.ts:cached path completion does not re-read directories"], ["../../../../packages/language/test/completion-perf.test.ts:large-tree anonymous completion stays under budget"]10.3%
["../../../../packages/language/test/completion.test.ts:completes import-root alias paths"]10.3%
["../../../../packages/language/test/document-update-watch.test.ts"], ["../../../../packages/language/test/document-update-watch.test.ts:registers .rq globs only"], ["../../../../packages/language/test/document-update-watch.test.ts:classifies Windows and directory URIs by path segment"], ["../../../../packages/language/test/document-update-watch.test.ts:drops noisy events and keeps .rq files"], ["../../../../packages/language/test/ast-lifecycle.test.ts:replaces the AST when this buffer text changes"]10.3%
["../../../../packages/language/test/implicit-import-extension.test.ts"], ["../../../../packages/language/test/outbound-hop.test.ts:confirms a neighbor idea when the authored path has no .rq extension"]10.3%
["../../../../packages/language/test/implicit-import-extension.test.ts:filesystem lookups append .rq then accept an existing directory"], ["../../../../packages/language/test/validating.test.ts:does not report an error when an import path is an existing folder"], ["../../../../packages/language/test/linking.test.ts:folder import paths produce folder document links"]10.3%
["../../../../packages/language/test/inbound-referencer-index-perf.test.ts:inlay referencers come from the pushed snapshot, not findAllReferences"], ["../../../../crates/reqlan-lsp/tests/session.rs:index_completion_inlay_and_custom_requests"], ["../../../../crates/reqlan-lsp/tests/session.rs:neighbor_confirm_suppresses_missing_idea"], ["../../../../crates/reqlan-lsp/tests/parity.rs:formats_inbound_referencers_as_an_inlayed_attribute"]10.3%
["../../../../packages/language/test/inbound-referencer-index-perf.test.ts:inlay referencers come from the pushed snapshot, not findAllReferences"], ["../../../../packages/extension/test/inbound-snapshot-push.test.ts"], ["../../../../packages/language/test/inbound-snapshot-store.test.ts"]10.3%
["../../../../packages/language/test/inlay-hints.test.ts"], ["../../../../packages/language/test/inbound-referencer-index-perf.test.ts"], ["../../../../crates/reqlan-lsp/tests/parity.rs:formats_inbound_referencers_as_an_inlayed_attribute"]10.3%
["../../../../packages/language/test/inlay-hints.test.ts"], ["../../../../packages/language/test/inbound-referencer-index-perf.test.ts:inlay referencers come from the pushed snapshot, not findAllReferences"]10.3%
["../../../../packages/language/test/inlay-hints.test.ts"], ["../../../../packages/language/test/inlay-hints.test.ts:backlink tooltip opens the real file URI when the path has a space"], ["../../../../packages/language/test/inlay-hints.test.ts:attaches open command to clickable referencer label parts"], ["../../../../crates/reqlan-lsp/tests/parity.rs:formats_inbound_referencers_as_an_inlayed_attribute"], ["../../../../crates/reqlan-lsp/tests/parity.rs:backlink_inlay_command_and_tooltip_encode_spaces_like_gotos"]10.3%
["../../../../packages/language/test/linking.test.ts:comment references in source files resolve to rq ideas"], ["../../../../packages/language/test/references.test.ts:finds rq: references in feature demo source files"], ["../../../../packages/language/test/references.test.ts:finds rq: comment references in python triple-quoted comments"], ["../../../../crates/reqlan-lsp/tests/session.rs:comment_links_share_one_resolution"], ["../../../../crates/reqlan-lsp/tests/session.rs:comment_definition_follows_a_resolved_rq_reference"], ["../../../../packages/extension/test/editor-link-activation.test.ts:comment injection link scope includes markup.underline"], ["../../../../packages/extension/test/editor-link-activation.test.ts:package.json contributes comment.rq.injection"]10.3%
["../../../../packages/language/test/linking.test.ts:document links resolve test file references to the matching test"], ["../../../../packages/language/test/references.test.ts:keeps colons inside the test name suffix"], ["../../../../packages/language/test/linking.test.ts:classifyReferenceUri treats existing directories as folders"], ["../../../../packages/language/test/linking.test.ts:folder file references resolve without reading the directory as a file"], ["../../../../packages/language/test/linking.test.ts:empty file references produce document links and warning diagnostics"], ["../../../../packages/language/test/linking.test.ts:parse-error file references produce document links and warning diagnostics"], ["../../../../packages/language/test/linking.test.ts:missing file references do not produce document links"], ["../../../../packages/language/test/linking.test.ts:same-file idea references produce document links"]10.3%
["../../../../packages/language/test/linking.test.ts:missing file references do not produce document links"], ["../../../../packages/language/test/linking.test.ts:missing file reference errors are suppressed after //rq-ignore-error"], ["../../../../packages/language/test/linking.test.ts:remote file references are not reported as missing"], ["../../../../packages/language/test/linking.test.ts:empty file references produce document links and warning diagnostics"], ["../../../../packages/language/test/linking.test.ts:parse-error file references produce document links and warning diagnostics"], ["../../../../packages/language/test/ignore-error.test.ts:reports a missing file reference as an error"], ["../../../../packages/language/test/ignore-error.test.ts:suppresses missing file reference errors on the line after //rq-ignore-error"], ["../../../../packages/language/test/ignore-error.test.ts:does not report file references inside inline code"], ["../../../../crates/reqlan-lsp/tests/parity.rs:import_root_alias_file_refs_match_check"], ["../../../../crates/reqlan-lsp/tests/parity.rs:import_root_config_file_refs_match_check"], ["../../../../crates/reqlan-index/tests/broken_references.rs:check_accepts_import_root_alias_file_refs"], ["../../../../crates/reqlan-index/tests/broken_references.rs:check_honours_import_roots_from_applying_config"]10.3%
["../../../../packages/language/test/linking.test.ts:same-file idea references produce document links"], ["../../../../packages/language/test/linking.test.ts:cross-file imported idea references produce document links"], ["../../../../packages/language/test/linking.test.ts:qualified reference idea token produces document link"], ["../../../../packages/language/test/linking.test.ts:navigable document links include target and tooltip"], ["../../../../packages/language/test/local-symbolic-links.test.ts:aliased from-import whose name contains the imported idea is one link"]10.3%
["../../../../packages/language/test/local-symbolic-links.test.ts:aliased from-import whose name contains the imported idea is one link"], ["../../../../crates/reqlan-index/tests/local_symbolic.rs:analyze_local_symbolic_aliased_from_import_keeps_authored_path_and_written_name"]10.3%
["../../../../packages/language/test/local-symbolic-links.test.ts:same-file idea links without DocumentBuilder / workspace link"], ["../../../../packages/language/test/local-symbolic-links.test.ts:idea underlines match syntax tokens after non-ASCII text"], ["../../../../packages/language/test/outbound-hop.test.ts:links a neighbor idea after a depth-1 parse without loading the target document"], ["../../../../packages/language/test/linking.test.ts:same-file idea references produce document links"], ["../../../../packages/language/test/linking.test.ts:cross-file imported idea references produce document links"]10.3%
["../../../../packages/language/test/local-symbolic-links.test.ts:unresolved same-file ideas get no document link"], ["../../../../packages/language/test/outbound-hop.test.ts:does not link when the neighbor file exists but the idea is missing"], ["../../../../packages/language/test/outbound-hop.test.ts:drops a false unresolved diagnostic when the neighbor idea exists"], ["../../../../packages/language/test/ignore-error.test.ts:reports unresolved reference without ignore directive"]10.3%
["../../../../packages/language/test/lsp-memory.test.ts:drops scope cache entries when a document is removed"]10.3%
["../../../../packages/language/test/lsp-memory.test.ts:runs at most the concurrency limit"], ["../../../../packages/language/test/lsp-memory.test.ts:loads every workspace file with at most 8 parses in flight"]10.3%
["../../../../packages/language/test/open-file-hot-path.test.ts:reuses the host native extract for links and diagnostics"], ["../../../../packages/language/test/open-file-hot-path.test.ts:reparses the host native extract when this buffer text changes"], ["../../../../packages/language/test/open-file-hot-path.test.ts:does not treat a same-name file as the loaded neighbor"], ["../../../../crates/reqlan-lsp/tests/parity.rs:same_file_idea_references_produce_document_links"]10.3%
["../../../../packages/language/test/parsing.test.ts"], ["../../../../packages/language/test/parsing.test.ts"]10.3%
["../../../../packages/language/test/parsing.test.ts:parse thanks-for-installing template"], ["../../../../packages/extension/test/onboarding-rq-highlight.test.ts"]10.3%
["../../../../packages/language/test/textmate-idea-highlight.test.ts"], ["../../../../packages/language/test/textmate-idea-highlight.test.ts:same-line named block rule closes on the opening line"], ["../../../../packages/language/test/textmate-idea-highlight.test.ts:e2e: same-line named braces do not swallow later ideas"], ["../../../../packages/language/test/textmate-idea-highlight.test.ts:e2e: TextMate idea names match the Langium parse"], ["../../../../packages/language/test/parsing.test.ts:same-line braces after a name parse as a block"]10.3%
["../../../../packages/language/test/textmate-import-highlight.test.ts"], ["../../../../packages/language/test/semantic-tokens-wildcard.test.ts"], ["../../../../crates/reqlan-lsp/tests/session.rs:semantic_token_range_matches_the_source_name"]10.3%
["../../../../packages/language/test/textmate-import-highlight.test.ts"], ["../../../../packages/language/test/textmate-import-highlight.test.ts:e2e: from-import line scopes path and import keyword"], ["../../../../packages/language/test/textmate-import-highlight.test.ts:e2e: namespace import line scopes path and as"]10.3%
["../../../../packages/language/test/textmate-wildcard-highlight.test.ts"], ["../../../../packages/language/test/textmate-import-highlight.test.ts"], ["../../../../packages/language/test/textmate-idea-highlight.test.ts"], ["../../../../packages/language/test/semantic-tokens-wildcard.test.ts"]10.3%
["../../../../packages/language/test/textmate-wildcard-highlight.test.ts"], ["../../../../packages/language/test/textmate-wildcard-highlight.test.ts:e2e: bracket wildcard path ref matches link scope and not block comment"], ["../../../../packages/language/test/semantic-tokens-wildcard.test.ts"], ["../../../../packages/language/test/semantic-tokens-wildcard.test.ts:e2e: WildcardReference emits string + variable tokens"], ["../../../../packages/language/test/comment-in-string.test.ts:e2e: /**/ glob survives tokenize → parse in prose, naked quotes, and reference STRING"]10.3%
["../../../../packages/language/test/textmate-wildcard-highlight.test.ts:reference rules use the meta.link scope"], ["../../../../packages/extension/test/editor-link-activation.test.ts:keeps web URL and command document links"], ["../../../../packages/extension/test/editor-link-activation.test.ts:editor words are identifiers; reference tokens come from the parser"], ["../../../../packages/extension/test/editor-link-activation.test.ts:go-to-definition does not send the buffer"], ["../../../../packages/extension/test/editor-link-activation.test.ts:comment injection link scope includes markup.underline"], ["../../../../packages/extension/test/editor-link-activation.test.ts:package.json contributes comment.rq.injection"], ["../../../../packages/extension/test/definition-navigation.test.ts:records a command selection move as a definition jump"], ["../../../../packages/extension/test/definition-navigation.test.ts:records a cross-file command jump from the prior caret"], ["../../../../packages/extension/test/definition-navigation.test.ts:tracks non-blocklisted languages for navigate-back"], ["../../../../packages/extension/test/definition-navigation.test.ts:records only landings in reqlan targets"], ["../../../../packages/extension/test/definition-navigation.test.ts:navigate-back keybinding is not limited to .rq editors"], ["../../../../crates/reqlan-lsp/tests/session.rs:definition_origin_is_the_lexer_token_under_the_cursor"], ["../../../../crates/reqlan-lsp/tests/session.rs:comment_definition_follows_a_resolved_rq_reference"]10.3%
["../../../../packages/language/test/utf8-lsp-offset.test.ts"], ["../../../../packages/language/test/local-symbolic-links.test.ts:idea underlines match syntax tokens after non-ASCII text"], ["../../../../crates/reqlan-index/tests/local_symbolic.rs:analyze_local_symbolic_source_offsets_are_utf8_bytes"]10.3%
["../../../../packages/language/test/validating.test.ts"], ["../../../../packages/language/test/validating.test.ts:does not report an error when an import path is an existing folder"], ["../../../../crates/reqlan-index/tests/broken_references.rs:check_reports_missing_import_path"], ["../../../../crates/reqlan-index/tests/broken_references.rs:check_reports_missing_imported_idea"]10.3%
["../../../crates/reqlan-analytical/tests/file_context.rs:file_context_includes_indexed_comment_links"], ["../../../crates/reqlan-index/tests/code_file_index.rs:indexes_comment_references_from_non_rq_files"]10.3%
["../../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"], ["../../../packages/extension/webviews/shared/filter/filter-specials.ts"]10.3%
["../../../crates/reqlan-index/src/text.rs:nul_rejects"], ["../../../crates/reqlan-index/src/text.rs:utf16_bom_rejects"], ["../../../crates/reqlan-index/src/text.rs:invalid_utf8_rejects"], ["../../../crates/reqlan-index/src/text.rs:trailing_incomplete_utf8_is_not_a_reject"], ["../../../crates/reqlan-index/tests/scan.rs:prefix_skip_does_not_index_non_text"]10.3%
["../../../crates/reqlan-lsp/tests/session.rs:completion_rename_and_code_action"], ["../../../crates/reqlan-lsp/tests/session.rs:attribute_catalog_completion_and_find_references"], ["../../../packages/language/test/rename-provider.test.ts:rename updates declaration and wikilink references"], ["../../../packages/language/test/rename-provider.test.ts:rename also updates rq comment idea tokens in the same document"], ["../../../packages/language/test/comment-rename.test.ts:builds rename edits for matching comment idea tokens"], ["../../../packages/language/test/linking.test.ts:rename finds all idea references including wikilinks"]10.3%
["../../../packages/analytical/src/index-store/webview-graph-queries.ts"], ["../../../packages/extension/src/activity_bar_module/context-model.ts"]10.3%
["../../../packages/analytical/test/barrel-page.test.ts:creates one child file per idea and a container defaulting to file basename"], ["../../../packages/analytical/test/barrel-page.test.ts:writes child files and replaces the source with a container"], ["../../../packages/language/test/code-actions.test.ts:offers barrel page source action when the file has top-level ideas"], ["../../../packages/language/test/code-actions.test.ts:omits barrel page when only quickfix is requested or there are no ideas"], ["../../../crates/reqlan-lsp/tests/code_actions.rs:offers_barrel_page_source_action_when_the_file_has_top_level_ideas"], ["../../../crates/reqlan-lsp/tests/code_actions.rs:omits_barrel_page_when_only_quickfix_is_requested_or_there_are_no_ideas"], ["../../../packages/extension/test/barrel-page-apply.test.ts:maps child file names next to the source path"], ["../../../packages/extension/test/barrel-page-apply.test.ts:detects overwrite conflicts and source-self collision"]10.3%
["../../../packages/analytical/test/base-registry-refresh.test.ts:refresh rediscovers a base created after an empty discovery"], ["../../../packages/analytical/test/base-registry-refresh.test.ts:refresh rediscovers a nested base added after first discovery"]10.3%
["../../../packages/analytical/test/create-base.test.ts:seeds .reqlan/config.json when creating a new base"], ["../../../packages/language/test/config.test.ts:schema file documents importRoots mappings"], ["../../../crates/reqlan-index/src/ignore.rs:create_base_seeds_config_with_public_schema"]10.3%
["../../../packages/analytical/test/idea-timeline.test.ts"], ["../../../packages/analytical/test/idea-timeline.test.ts:upsert preserves analyser git dates and change count across reindex"], ["../../../packages/analytical/test/idea-timeline.test.ts:listIdeaIdsMissingGitDates returns ideas without dates"], ["../../../packages/analytical/test/idea-timeline.test.ts:listIdeaIdsMissingGitDates includes ideas missing change count"], ["../../../packages/analytical/test/idea-timeline.test.ts:listIdeaIdsMissingGitDates can filter or prefer a file"], ["../../../packages/extension/test/git-dates-background.test.ts:processes active-file priority ids before the global backlog"], ["../../../packages/analytical/test/ideas-git-columns-perf.test.ts"]10.3%
["../../../packages/analytical/test/rqignore.test.ts"], ["../../../packages/analytical/test/rqignore.test.ts:inverse rqignore patterns opt binary files back in"], ["../../../packages/analytical/test/create-base.test.ts:seeds .reqlan/.rqignore when creating a new base"], ["../../../packages/analytical/test/base-discovery.test.ts:skips node_modules and does not treat .reqlan as a walkable base root"], ["../../../packages/analytical/test/workspace-index.test.ts:skips .rq files under rqignore patterns"]10.3%
["../../../packages/analytical/test/rqignore.test.ts"], ["../../../packages/analytical/test/rqignore.test.ts:seeded rqignore comments explain all features"], ["../../../packages/analytical/test/create-base.test.ts:seeds .reqlan/.rqignore when creating a new base"], ["../../../packages/analytical/test/workspace-index.test.ts:skips .rq files under rqignore patterns"], ["../../../crates/reqlan-index/tests/sync.rs:default_rqignore_skips_node_modules"]10.3%
["../../../packages/analytical/test/rqignore.test.ts:defaultRqIgnoreFileContents documents gitignore-style defaults"], ["../../../packages/analytical/test/rqignore.test.ts:seeded rqignore comments explain all features"], ["../../../crates/reqlan-index/src/ignore.rs:seeded_rqignore_explains_features"], ["../../../packages/analytical/test/create-base.test.ts:seeds .reqlan/.rqignore when creating a new base"]10.3%
["../../../packages/analytical/test/rqignore.test.ts:defaults ignore json, sqlite sidecars, and files without comments"], ["../../../packages/analytical/test/rqignore.test.ts:inverse rqignore patterns opt json back in"], ["../../../crates/reqlan-index/src/ignore.rs:default_rqignore_skips_files_without_comments_until_negated"], ["../../../crates/reqlan-index/src/ignore.rs:seeded_rqignore_explains_features"]10.3%
["../../../packages/analytical/test/rqignore.test.ts:defaults ignore node_modules, venv, db3, and binary paths"], ["../../../packages/analytical/test/rqignore.test.ts:inverse rqignore patterns opt binary files back in"], ["../../../crates/reqlan-index/src/ignore.rs:default_rqignore_skips_binary_files_until_negated"], ["../../../crates/reqlan-index/tests/code_file_index.rs:skips_binary_comment_files_unless_rqignore_negation"], ["../../../crates/reqlan-index/tests/sync.rs:default_rqignore_skips_node_modules"]10.3%
["../../../packages/analytical/test/sqlite-artifact-release.test.ts:BaseRegistry releaseArtifacts closes handles but keeps descriptors"], ["../../../packages/analytical/test/base-registry-catchup.test.ts:deactivate returns to uninitialized so a base can be reopened"]10.3%
["../../../packages/analytical/test/sqlite-artifact-release.test.ts:BaseRegistry releaseArtifacts closes handles but keeps descriptors"], ["../../../packages/analytical/test/base-registry-catchup.test.ts:ensureBaseReady opens and soft-syncs an uninitialized base"]10.3%
["../../../packages/analytical/test/sqlite-artifact-release.test.ts:dispose releases ideas-index so the file can be unlinked"], ["../../../packages/analytical/test/sqlite-artifact-release.test.ts:WorkspaceIndex deactivate releases sqlite artifacts"], ["../../../packages/analytical/test/sqlite-artifact-release.test.ts:BaseRegistry releaseArtifacts closes handles but keeps descriptors"], ["../../../packages/analytical/test/open-analysis-api.test.ts:opens the native engine when the host .node is available"]10.3%
["../../../packages/analytical/test/sqlite-artifact-release.test.ts:dispose releases ideas-index so the file can be unlinked"], ["../../../packages/cli/test/runtime-engine.test.ts:CLI runtime opens AnalysisApi through the core engine"]10.3%
["../../../packages/analytical/test/workspace-index.test.ts"]10.3%
["../../../packages/extension/src/activity_bar_module/activity-bar-webview-provider.ts"]10.3%
["../../../packages/extension/src/activity_bar_module/activity-bar-webview-provider.ts"], ["../../../packages/extension/src/activity_bar_module/git-context.ts"]10.3%
["../../../packages/extension/src/activity_bar_module/lib/context-model.ts"], ["../../../packages/extension/src/activity_bar_module/lib/context-signals.ts"]10.3%
["../../../packages/extension/src/activity_bar_module/lib/context-signals.ts"], ["../../../packages/extension/test/context-model.test.ts"], ["../../../packages/extension/test/context-widgets.test.ts"]10.3%
["../../../packages/extension/src/analytical_submodule/index-store/open-index-file.ts"], ["../../../packages/extension/src/analytical_submodule/index-store/resolve-index-file-uri.ts"], ["../../../packages/extension/src/activity_bar_module/activity-bar-webview-provider.ts"], ["../../../packages/analytical/src/core/base-discovery.ts"], ["../../../packages/analytical/test/base-discovery.test.ts"], ["../../../packages/analytical/test/base-discovery.test.ts:nearestBaseRoot walks ancestors instead of scanning sibling trees"]10.3%
["../../../packages/extension/test/git-context.test.ts"], ["../../../packages/extension/src/activity_bar_module/git-context.ts"]10.3%
["../../../packages/extension/test/git-dates-background.test.ts"], ["../../../packages/extension/test/git-dates-background.test.ts:processes missing ids in small batches and yields between them"], ["../../../packages/extension/test/git-dates-background.test.ts:does nothing when the index is not ready"], ["../../../packages/extension/test/git-dates-background.test.ts:marks ids attempted even when the analyser fails"], ["../../../packages/extension/test/git-dates-background.test.ts:processes active-file priority ids before the global backlog"], ["../../../packages/extension/test/git-dates-background.test.ts:stops early when shouldStop flips so a new file can be prioritised"], ["../../../packages/extension/test/git-dates-background.test.ts:catalog events debounce and do not follow the short editor delay"], ["../../../packages/analytical/test/idea-timeline.test.ts:listIdeaIdsMissingGitDates returns ideas without dates"], ["../../../packages/analytical/test/idea-timeline.test.ts:listIdeaIdsMissingGitDates can filter or prefer a file"]10.3%
["../../../packages/extension/test/git-dates-background.test.ts:catalog events debounce and do not follow the short editor delay"], ["../../../packages/extension/test/git-dates-background.test.ts:catalog waves wait for the min gap after a fill"]10.3%
["../../../packages/extension/test/graph-label-opacity.test.ts"], ["../../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"]10.3%
["../../../packages/extension/test/graph-ui-state.test.ts"], ["../../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"]10.3%
["../../../packages/extension/test/group-file-issues.test.ts"], ["../../../packages/extension/webviews/activity-bar/components/NestedSection.svelte"], ["../../../packages/extension/webviews/activity-bar/components/WorkspacePane.svelte"], ["../../../packages/extension/webviews/activity-bar/components/ScopePane.svelte"], ["../../../packages/extension/webviews/activity-bar/components/ReferenceListsPane.svelte"]10.3%
["../../../packages/extension/test/index-status-text.test.ts"]10.3%
["../../../packages/extension/test/pane-layout.test.ts"], ["../../../packages/extension/webviews/activity-bar/App.svelte"], ["../../../packages/extension/webviews/activity-bar/components/CollapsiblePane.svelte"], ["../../../packages/extension/webviews/activity-bar/components/SelectionPane.svelte"], ["../../../packages/extension/webviews/activity-bar/styles/global.css"]10.3%
["../../../packages/extension/test/startup-gate.test.ts"], ["../../../packages/analytical/src/index-store/workspace-index.ts"], ["../../../crates/reqlan-search/tests/fuzzy.rs"], ["../../../packages/extension/test/git-context.test.ts"]10.3%
["../../../packages/extension/webviews/activity-bar/App.svelte"], ["../../../packages/extension/webviews/activity-bar/state/app.svelte.ts"], ["../../../packages/extension/webviews/activity-bar/components/BootstrapStatus.svelte"], ["../../../packages/extension/src/activity_bar_module/activity-bar-webview-provider.ts"], ["../../../packages/extension/src/activity_bar_module/get-activity-bar-html.ts"], ["../../../packages/extension/test/startup-gate.test.ts"]10.3%
["../../../packages/extension/webviews/activity-bar/components/HeaderBar.svelte"], ["../../../packages/extension/src/activity_bar_module/context-session.ts"]10.3%
["../../../packages/extension/webviews/activity-bar/components/ScopePane.svelte"], ["../../../packages/extension/src/activity_bar_module/context-session.ts"]10.3%
["../../../packages/extension/webviews/activity-bar/components/widgets"], ["../../../packages/extension/test/context-widgets.test.ts"]10.3%
["../../../packages/language/test/code-actions.test.ts"], ["../../../crates/reqlan-lsp/tests/code_actions.rs"], ["../../../packages/language/test/code-actions.test.ts:keeps one quick fix set after repeated builds"], ["../../../packages/extension/test/extension-package.test.ts"], ["../../../packages/extension/test/barrel-page-apply.test.ts"], ["../../../packages/language/test/idea-refactor.test.ts"], ["../../../packages/language/test/ignore-error-action.test.ts"], ["../../../packages/extension/test/ignore-error-code-action.test.ts"], ["../../../packages/language/test/code-actions.test.ts:creates the missing idea below the containing idea when only one is unresolved"], ["../../../packages/language/test/code-actions.test.ts:offers all or a specific unresolved idea when the caret idea has several"]10.3%
["../../../packages/language/test/code-actions.test.ts"], ["../../../packages/extension/test/reference-search.test.ts"], ["../../../packages/extension/test/extension-package.test.ts"], ["../../../crates/reqlan-search/tests/fuzzy.rs"], ["../../../crates/reqlan-lsp/tests/code_actions.rs:offers_search_code_action_when_cursor_is_inside_a_resolved_reference"], ["../../../crates/reqlan-lsp/tests/code_actions.rs:offers_wrap_code_action_for_a_prose_selection"], ["../../../crates/reqlan-lsp/tests/code_actions.rs:wraps_the_word_under_the_cursor_when_selection_is_empty"]10.3%
["../../../packages/language/test/code-actions.test.ts:creates the missing idea below the containing idea when only one is unresolved"], ["../../../packages/language/test/code-actions.test.ts:offers all or a specific unresolved idea when the caret idea has several"], ["../../../packages/language/test/code-actions.test.ts:omits create-below when the caret idea has no unresolved local references"], ["../../../packages/language/test/code-actions.test.ts:omits create-below for a qualified unresolved reference"], ["../../../packages/language/test/code-actions.test.ts:omits create-below when only refactor is requested"], ["../../../crates/reqlan-lsp/tests/code_actions.rs:creates_the_missing_idea_below_the_containing_idea"], ["../../../crates/reqlan-lsp/tests/code_actions.rs:offers_all_or_a_specific_unresolved_idea"], ["../../../crates/reqlan-lsp/tests/code_actions.rs:omits_create_below_when_the_caret_idea_has_no_unresolved_local_references"], ["../../../crates/reqlan-lsp/tests/code_actions.rs:omits_create_below_for_a_qualified_unresolved_reference"], ["../../../crates/reqlan-lsp/tests/code_actions.rs:omits_create_below_when_only_refactor_is_requested"]10.3%
["../../../packages/language/test/code-actions.test.ts:offers barrel page source action when the file has top-level ideas"]10.3%
["../../../packages/language/test/code-actions.test.ts:offers ignore-error quick fix on a line with a linking error"], ["../../../packages/language/test/code-actions.test.ts:omits ignore-error when only refactor is requested"], ["../../../crates/reqlan-lsp/tests/code_actions.rs:offers_ignore_error_quick_fix_on_a_line_with_a_linking_error"], ["../../../crates/reqlan-lsp/tests/code_actions.rs:omits_ignore_error_when_only_refactor_is_requested"], ["../../../packages/language/test/ignore-error-action.test.ts:inserts indented ignore comment before the error line"], ["../../../packages/language/test/ignore-error-action.test.ts:uses tab indent and CRLF when the error line uses them"], ["../../../packages/language/test/ignore-error-action.test.ts:wraps the ignore comment for a hash-comment error line"], ["../../../packages/language/test/ignore-error-action.test.ts:inserts at the start of the file for a first-line error"], ["../../../packages/language/test/ignore-error-action.test.ts:offers one action per diagnostic line"], ["../../../packages/language/test/ignore-error-action.test.ts:omits the action when //rq-ignore-error already suppresses the line"], ["../../../packages/extension/test/ignore-error-code-action.test.ts:accepts reqlan source and comment-reference codes"], ["../../../packages/extension/test/extension-package.test.ts:extension main registers ignore-error code actions for comment files"]10.3%
["../../../packages/language/test/config.test.ts:empty object uses default alias mapping"], ["../../../packages/language/test/config.test.ts:importRoots alias only overrides the alias"], ["../../../packages/language/test/config.test.ts:relative root resolves against the base root"], ["../../../packages/language/test/config.test.ts:absolute filesystem root is used directly"], ["../../../packages/language/test/config.test.ts:Windows drive-letter root is used as a file URI not scheme c:"], ["../../../packages/language/test/config.test.ts:file URI root is used directly"], ["../../../packages/language/test/config.test.ts:multiple importRoots map aliases to different roots"], ["../../../packages/language/test/config.test.ts:longest alias wins when mappings overlap"], ["../../../packages/language/test/config.test.ts:empty string alias entries are skipped"], ["../../../packages/language/test/config.test.ts:empty string root is ignored on a mapping"], ["../../../packages/language/test/config.test.ts:invalid importRoots entries are skipped"], ["../../../packages/language/test/config.test.ts:unknown properties are ignored while known keys still apply"], ["../../../packages/language/test/config.test.ts:invalid JSON falls back to undefined load"], ["../../../packages/language/test/config.test.ts:non-object JSON falls back to undefined load"], ["../../../packages/language/test/config.test.ts:non-array importRoots falls back to undefined load"], ["../../../packages/language/test/config.test.ts:empty importRoots array uses default alias mapping"], ["../../../packages/language/test/config.test.ts:resolveRqConfig falls back to defaults when applying JSON is invalid"], ["../../../packages/language/test/config.test.ts:aliased path uses relative root from applying config"], ["../../../packages/language/test/config.test.ts:aliased path uses workspace folder when root is omitted"], ["../../../packages/language/test/path-resolve.test.ts:loads importRoots list from nearest base config"], ["../../../packages/language/test/path-resolve.test.ts:resolves using config importRoots mapping"], ["../../../packages/language/test/path-resolve.test.ts:rewrite leaves aliased paths unchanged"], ["../../../packages/language/test/path-resolve.test.ts:toDirectoryUri does not parse a drive letter as a URI scheme"], ["../../../packages/language/test/completion.test.ts:completes import-root alias paths"], ["../../../packages/language/test/comment-reference-resolution.test.ts:creates a document link for an import-root aliased comment reference"], ["../../../crates/reqlan-index/src/path_resolve.rs:locate_uses_import_roots_from_applying_config"], ["../../../crates/reqlan-index/tests/broken_references.rs:check_honours_import_roots_from_applying_config"], ["../../../crates/reqlan-lsp/tests/parity.rs:import_root_config_file_refs_match_check"], ["../../../crates/reqlan-parse/src/path.rs:resolves_default_alias_against_workspace_folder"], ["../../../crates/reqlan-index/src/path_resolve.rs:missing_import_roots_uses_default_alias"], ["../../../crates/reqlan-index/src/path_resolve.rs:relative_root_resolves_against_base"]10.3%
["../../../packages/language/test/config.test.ts:returns undefined when no config exists"], ["../../../packages/language/test/config.test.ts:loads config from the owning base .reqlan"], ["../../../packages/language/test/config.test.ts:loads config from an ancestor base"], ["../../../packages/language/test/config.test.ts:nearest base config wins over farther ones"], ["../../../packages/language/test/config.test.ts:owning base without config does not inherit parent"], ["../../../packages/language/test/config.test.ts:resolveRqConfig uses defaults when no applying file exists"], ["../../../packages/language/test/path-resolve.test.ts:loads importRoots list from nearest base config"], ["../../../crates/reqlan-index/src/path_resolve.rs:missing_import_roots_uses_default_alias"], ["../../../crates/reqlan-index/src/path_resolve.rs:relative_root_resolves_against_base"]10.3%
["../../../packages/language/test/config.test.ts:unknown properties are ignored while known keys still apply"], ["../../../packages/language/test/config.test.ts:schema file documents importRoots mappings"], ["../../../packages/language/test/config.test.ts:schema $id matches public v1 host path"]10.3%
["../../../packages/language/test/file-path-rewrite.test.ts:rewrites inbound comment paths when the target rq file moves"], ["../../../packages/language/test/file-path-rewrite.test.ts:finds comment paths in moved rq files together with imports"], ["../../../packages/language/test/idea-refactor.test.ts:move plan rewrites qualified comment paths for the moved idea"], ["../../../packages/language/test/idea-refactor.test.ts:delete plan removes matching comment references"], ["../../../packages/extension/test/collect-inbound-referencers.test.ts:includes comment_link target files when an rq file moves"], ["../../../packages/language/test/comment-rename.test.ts:builds rename edits for matching comment idea tokens"]10.3%
["../../../packages/language/test/file-path-rewrite.test.ts:updates inbound import path when the target file moves"], ["../../../packages/language/test/file-path-rewrite.test.ts:preserves extensionless inbound paths"], ["../../../packages/language/test/file-path-rewrite.test.ts:buildInboundPathRewriteEdits quotes replacement paths"], ["../../../packages/language/test/file-path-rewrite.test.ts:updates paths when a file moves to a sibling directory"], ["../../../packages/language/test/file-path-rewrite.test.ts:finds comment paths in moved rq files together with imports"], ["../../../packages/language/test/file-path-rewrite.test.ts:updates a folder reference when the folder is renamed"], ["../../../packages/language/test/file-path-rewrite.test.ts:updates an aliased path when the target folder is renamed"], ["../../../packages/extension/test/collect-inbound-referencers.test.ts:includes comment_link target files when an rq file moves"], ["../../../packages/extension/test/expand-renamed-paths.test.ts:pairs each file under a renamed folder with its old path"], ["../../../packages/extension/test/pending-rename-paths.test.ts:suppresses watcher delete of the pre-move file until cleared"], ["../../../packages/extension/test/pending-rename-paths.test.ts:suppresses deletes under a renamed folder"]10.3%
["../../../packages/language/test/file-path-rewrite.test.ts:updates inbound import path when the target file moves"], ["../../../packages/language/test/file-path-rewrite.test.ts:updates a folder reference when the folder is renamed"], ["../../../packages/extension/test/expand-renamed-paths.test.ts:pairs each file under a renamed folder with its old path"], ["../../../packages/extension/test/pending-rename-paths.test.ts:suppresses watcher delete of the pre-move file until cleared"]10.3%
["../../../packages/language/test/file-path-rewrite.test.ts:updates paths when a file moves to a sibling directory"], ["../../../packages/language/test/file-path-rewrite.test.ts:finds import and embedded paths in rq files"], ["../../../packages/language/test/file-path-rewrite.test.ts:finds rq comment paths in code files"]10.3%
["../../../packages/language/test/idea-refactor.test.ts:delete plan removes declaration and bracket references"], ["../../../packages/language/test/idea-refactor.test.ts:delete plan removes matching comment references"], ["../../../crates/reqlan-lsp/tests/code_actions.rs:offers_move_and_delete_actions_at_an_idea_declaration"]10.3%
["../../../packages/language/test/idea-refactor.test.ts:move plan cuts from source and inserts into destination"], ["../../../packages/language/test/idea-refactor.test.ts:move plan rewrites qualified comment paths for the moved idea"], ["../../../packages/language/test/idea-refactor.test.ts:move plan removes unused source imports and copies them to destination"], ["../../../packages/language/test/idea-refactor.test.ts:move plan adds a sibling import on the destination"], ["../../../packages/language/test/idea-refactor.test.ts:move content plan leaves a source stub that imports the moved idea"], ["../../../packages/language/test/code-actions.test.ts:offers move and delete actions at an idea declaration"], ["../../../crates/reqlan-lsp/tests/code_actions.rs:offers_move_and_delete_actions_at_an_idea_declaration"], ["../../../packages/extension/test/extension-package.test.ts:package.json contributes move idea and move idea content commands"]10.3%
["../../../packages/mcp/test/server.test.ts:MCP surface is click, check, diff, completion_status, and prompt"], ["../../../crates/reqlan-analytical/tests/click.rs:click_falls_through_to_search_when_nothing_matches"]10.3%
["../../../packages/mcp/test/server.test.ts:MCP surface is click, check, diff, completion_status, and prompt"], ["../../../crates/reqlan-analytical/tests/click.rs:click_returns_unique_idea_without_edges"], ["../../../crates/reqlan-analytical/tests/click.rs:click_code_file_returns_backlinks_and_comment_refs"]10.3%
["../../../packages/mcp/test/server.test.ts:MCP surface is click, check, diff, completion_status, and prompt"], ["../../../crates/reqlan-analytical/tests/click.rs:click_revisit_returns_connected_content"]10.3%
["../../../packages/mcp/test/server.test.ts:MCP surface is click, check, diff, completion_status, and prompt"], ["../../../packages/analytical/test/click.test.ts:click API returns session key and unique then revisit"]10.3%
["../../../packages/mcp/test/server.test.ts:MCP surface is click, check, diff, completion_status, and prompt"], ["../../../packages/mcp/test/server.test.ts:check returns JSON issue rows"]10.3%
["../../../packages/mcp/test/server.test.ts:MCP surface is click, check, diff, completion_status, and prompt"], ["../../../packages/mcp/test/server.test.ts:diff returns created JSON and text bodies"], ["../../../packages/mcp/test/server.test.ts:omitted targets follow the clean and dirty defaults"], ["../../../packages/mcp/test/server.test.ts:a bad revision is a tool error"]10.3%
["../../crates/reqlan-analytical/tests/click.rs:check_name_ambiguity_classifies_none_unique_and_ambiguous"], ["../../crates/reqlan-analytical/tests/click.rs:click_prints_file_when_name_is_ambiguous"], ["../../crates/reqlan-analytical/tests/click.rs:click_ambiguous_code_file_basename"]10.3%
["../../crates/reqlan-analytical/tests/click.rs:click_caps_lists_and_reports_omitted"], ["../../crates/reqlan-index/src/path_resolve.rs:click_list_limits_read_config"], ["../../packages/language/test/config.test.ts:loads click list caps from applying config"], ["../../packages/language/test/config.test.ts:schema file documents click maxSessions"]10.3%
["../../crates/reqlan-analytical/tests/click.rs:click_code_file_returns_backlinks_and_comment_refs"], ["../../crates/reqlan-analytical/tests/click.rs:click_ambiguous_code_file_basename"]10.3%
["../../crates/reqlan-analytical/tests/click.rs:click_returns_unique_idea_without_edges"], ["../../crates/reqlan-analytical/tests/click.rs:click_accepts_file_path_as_one_file_node"], ["../../crates/reqlan-analytical/tests/click.rs:click_falls_through_to_search_when_nothing_matches"], ["../../crates/reqlan-analytical/tests/click.rs:click_ranks_ambiguous_names_by_session_distance"], ["../../crates/reqlan-analytical/tests/click.rs:click_omits_hops_when_session_has_no_ideas"]10.3%
["../../crates/reqlan-analytical/tests/click.rs:click_returns_unique_idea_without_edges"], ["../../crates/reqlan-analytical/tests/click.rs:click_outbound_lists_content_refs_only"], ["../../crates/reqlan-analytical/tests/click.rs:click_accepts_file_path_as_one_file_node"], ["../../crates/reqlan-analytical/tests/click.rs:click_revisit_returns_connected_content"], ["../../crates/reqlan-analytical/tests/click.rs:click_falls_through_to_search_when_nothing_matches"], ["../../crates/reqlan-analytical/tests/click.rs:click_ranks_ambiguous_names_by_session_distance"], ["../../packages/analytical/test/click.test.ts:click API returns session key and unique then revisit"], ["../../packages/cli/test/click.test.ts:click command emits session and unique context"]10.3%
["../../crates/reqlan-analytical/tests/click.rs:click_returns_unique_idea_without_edges"], ["../../crates/reqlan-analytical/tests/click.rs:click_outbound_lists_content_refs_only"], ["../../crates/reqlan-analytical/tests/click.rs:click_prints_file_when_name_is_ambiguous"], ["../../crates/reqlan-analytical/tests/click.rs:click_caps_lists_and_reports_omitted"], ["../../crates/reqlan-analytical/tests/click.rs:click_revisit_returns_connected_content"], ["../../packages/analytical/test/click.test.ts:click API returns session key and unique then revisit"], ["../../crates/reqlan-analytical/tests/click.rs:click_omits_hops_when_session_has_no_ideas"]10.3%
["../../crates/reqlan-analytical/tests/click.rs:click_revisit_returns_connected_content"], ["../../crates/reqlan-analytical/tests/click.rs:content_hash_change_allows_resurface"], ["../../crates/reqlan-analytical/tests/click.rs:session_cache_evicts_by_count_and_last_touched"]10.3%
["../../crates/reqlan-analytical/tests/click.rs:max_sessions_reads_base_config"], ["../../crates/reqlan-analytical/tests/click.rs:session_cache_evicts_by_count_and_last_touched"], ["../../packages/language/test/config.test.ts:schema file documents click maxSessions"], ["../../packages/language/test/config.test.ts:loads click.maxSessions from applying config"]10.3%
["../../crates/reqlan-analytical/tests/diff.rs:created_idea_is_listed_without_the_unchanged_idea"], ["../../crates/reqlan-analytical/tests/diff.rs:modified_body_is_modified"], ["../../crates/reqlan-analytical/tests/diff.rs:attribute_change_is_modified"], ["../../crates/reqlan-analytical/tests/diff.rs:deleted_idea_is_deleted"], ["../../crates/reqlan-analytical/tests/diff.rs:line_shift_is_not_a_change"], ["../../crates/reqlan-analytical/tests/diff.rs:one_argument_compares_with_head"], ["../../crates/reqlan-analytical/tests/diff.rs:tilde_count_matches_head_tilde"], ["../../crates/reqlan-analytical/tests/diff.rs:branch_against_head_and_two_branches"], ["../../crates/reqlan-analytical/tests/diff.rs:pending_unstaged_staged_and_layered_edits"], ["../../crates/reqlan-analytical/tests/diff.rs:clean_tree_compares_head_with_parent_and_ignores_non_rq"], ["../../crates/reqlan-analytical/tests/diff.rs:head_without_parent_lists_current_ideas_as_created"], ["../../crates/reqlan-analytical/tests/diff.rs:moved_idea_reports_both_paths"], ["../../crates/reqlan-analytical/tests/diff.rs:ambiguous_name_does_not_move"], ["../../crates/reqlan-analytical/tests/diff.rs:renamed_idea_is_deleted_and_created"], ["../../crates/reqlan-analytical/tests/diff.rs:same_revision_is_empty"], ["../../crates/reqlan-analytical/tests/diff.rs:missing_repository_and_revision_are_errors"], ["../../crates/reqlan-analytical/tests/diff.rs:implicit_targets_report_resolved_labels"], ["../../packages/cli/test/diff.test.ts:lists a created idea and omits the unchanged idea"], ["../../packages/cli/test/diff.test.ts:one argument matches an explicit HEAD on the right"], ["../../packages/cli/test/diff.test.ts:tilde count matches HEAD~N"], ["../../packages/cli/test/diff.test.ts:compares a branch with HEAD and with another branch"], ["../../packages/cli/test/diff.test.ts:pending edits use the worktree, including a later unstaged layer"], ["../../packages/cli/test/diff.test.ts:a clean tree compares HEAD~1 with HEAD and ignores a non-rq edit"], ["../../packages/cli/test/diff.test.ts:a missing repository or revision exits 2"]10.3%
["../../crates/reqlan-analytical/tests/diff.rs:summary_json_omits_references_and_text"], ["../../crates/reqlan-analytical/tests/diff.rs:reference_verbosity_lists_added_and_removed_names"], ["../../crates/reqlan-analytical/tests/diff.rs:text_verbosity_returns_before_and_after_body"], ["../../crates/reqlan-analytical/tests/diff.rs:text_verbosity_includes_attributes"], ["../../packages/cli/test/diff.test.ts:verbosity flags and JSON omit unused fields"], ["../../packages/mcp/test/server.test.ts:diff returns created JSON and text bodies"], ["../../packages/extension/test/diff-webview.test.ts:references lists added and removed names and hides the body"], ["../../packages/extension/test/diff-webview.test.ts:text shows the before and after body"]10.3%
["../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"], ["../../crates/reqlan-export/tests/html_export.rs:ideas_index_splits_inbound_and_outbound_counts"]10.3%
["../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"], ["../../crates/reqlan-export/tests/html_export.rs:url_base_and_header_link_produce_root_relative_hrefs"]10.3%
["../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"], ["../../crates/reqlan-export/tests/html_export.rs:workspace_graph_includes_every_idea_when_max_graph_nodes_is_below_count"], ["../../crates/reqlan-analytical/tests/export.rs:html_export_honours_graph_page_url_base_and_header_link"], ["../../packages/analytical/test/export-html.test.ts"], ["../../packages/extension/test/export-html-native.test.ts"]10.3%
["../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"], ["../../crates/reqlan-export/tests/html_export.rs:workspace_graph_includes_every_idea_when_max_graph_nodes_is_below_count"], ["../../crates/reqlan-export/tests/html_export.rs:html_export_workspace_graph_includes_wildcard_refs_chip_and_edges"], ["../../crates/reqlan-analytical/tests/export.rs:html_export_honours_graph_page_url_base_and_header_link"]10.3%
["../../crates/reqlan-export/tests/html_export.rs:idea_links_show_content_tooltips"]10.3%
["../../crates/reqlan-export/tests/html_export.rs:idea_tables_show_a_katz_column"]10.3%
["../../crates/reqlan-export/tests/html_export.rs:ideas_index_splits_inbound_and_outbound_counts"]10.3%
["../../crates/reqlan-export/tests/html_export.rs:interactive_layout_cards_are_reorderable_collapsible_with_heading_tips"], ["../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"]10.3%
["../../crates/reqlan-export/tests/html_export.rs:overview_status_and_tag_rollups_link_with_filters"]10.3%
["../../crates/reqlan-export/tests/html_export.rs:print_pages_keep_relative_body_indent"]10.3%
["../../crates/reqlan-export/tests/json_export.rs:json_export_lists_persisted_ideas"]10.3%
["../../crates/reqlan-export/tests/json_export.rs:json_export_lists_persisted_ideas"], ["../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"], ["../../crates/reqlan-export/tests/html_export.rs:overview_status_and_tag_rollups_link_with_filters"], ["../../crates/reqlan-export/tests/html_export.rs:url_base_and_header_link_produce_root_relative_hrefs"]10.3%
["../../crates/reqlan-index/src/comment.rs:ignores_rq_inside_strings"], ["../../crates/reqlan-index/src/comment.rs:ignores_rq_inside_rust_raw_strings"], ["../../crates/reqlan-index/src/comment.rs:click_rs_fixture_string_is_not_a_comment_ref"], ["../../crates/reqlan-index/src/comment.rs:still_finds_line_comment_after_a_raw_string"], ["../../packages/language/test/references.test.ts:skips rq tokens inside Rust raw strings"], ["../../packages/language/test/comment-reference-resolution.test.ts:creates a document link for an import-root aliased comment reference"], ["../../crates/reqlan-index/src/comment.rs:resolves_aliased_qualified_comment_path"]10.3%
["../../crates/reqlan-index/src/comment.rs:reports_a_malformed_comment_reference"], ["../../crates/reqlan-index/src/comment.rs:reports_an_unclosed_comment_reference"], ["../../crates/reqlan-index/src/comment.rs:keeps_a_quoted_bracket_inside_a_qualified_comment_reference"], ["../../crates/reqlan-index/src/comment.rs:ignores_malformed_rq_inside_strings_and_raw_strings"], ["../../crates/reqlan-index/tests/broken_references.rs:check_reports_a_malformed_comment_reference"], ["../../crates/reqlan-index/tests/broken_references.rs:check_skips_comment_syntax_on_rq_ignore_error"]10.3%
["../../crates/reqlan-index/src/git_dates.rs:create_no_window_matches_win32_flag"], ["../../packages/extension/test/hidden-exec-file.test.ts"], ["../../packages/extension/test/git-context.test.ts:git CLI spawns hide the Windows console"], ["../../packages/extension/test/language-server-runtime.test.ts"]10.3%
["../../crates/reqlan-index/src/queries.rs:inbound_for_file_returns_edges_targeting_ideas_in_file"], ["../../crates/reqlan-index/src/queries.rs:inbound_for_file_returns_file_reference_targeting_file"], ["../../packages/language/test/inbound-referencer-index-perf.test.ts:inlay referencers come from the pushed snapshot, not findAllReferences"], ["../../packages/analytical/test/inbound-file-referencers.test.ts"], ["../../packages/extension/test/inbound-snapshot-push.test.ts"]10.3%
["../../crates/reqlan-index/src/rq_ignore.rs"], ["../../crates/reqlan-index/tests/broken_references.rs:skips_idea_and_comment_refs_on_rq_ignore_error_lines"], ["../../packages/analytical/test/ignore-error.test.ts"], ["../../packages/analytical/test/load-native.test.ts:exposes findRqIgnoreErrorTargetLines on the engine when present"], ["../../packages/language/test/ignore-error.test.ts"], ["../../packages/cli/test/check.test.ts"]10.3%
["../../crates/reqlan-index/tests/broken_references.rs:check_orders_issues_by_missing_target"], ["../../packages/cli/test/check.test.ts:orders json rows by missing target"], ["../../packages/cli/test/format-broken-refs.test.ts:groups rows that share a missing target under one heading"]10.3%
["../../crates/reqlan-index/tests/broken_references.rs:check_reports_missing_import_path"], ["../../crates/reqlan-index/tests/broken_references.rs:check_reports_missing_imported_idea"], ["../../crates/reqlan-index/tests/broken_references.rs:check_accepts_resolved_imports"], ["../../crates/reqlan-index/tests/broken_references.rs:check_skips_import_on_rq_ignore_error"], ["../../crates/reqlan-index/tests/broken_references.rs:check_accepts_folder_and_implicit_extension_imports"], ["../../crates/reqlan-index/tests/broken_references.rs:check_skips_remote_import_urls"], ["../../crates/reqlan-index/tests/broken_references.rs:check_skips_gitignored_import_paths"], ["../../packages/cli/test/check.test.ts:reports unresolved imports and exits 1"]10.3%
["../../crates/reqlan-index/tests/broken_references.rs:check_reports_qualified_reference_to_a_missing_file"], ["../../crates/reqlan-index/tests/broken_references.rs:check_accepts_qualified_reference_when_the_file_exists"]10.3%
["../../crates/reqlan-index/tests/broken_references.rs:check_reports_qualified_reference_to_a_missing_idea"], ["../../crates/reqlan-index/tests/broken_references.rs:check_reports_namespace_qualified_reference_to_a_missing_idea"], ["../../crates/reqlan-index/tests/broken_references.rs:check_skips_qualified_missing_idea_on_rq_ignore_error"], ["../../crates/reqlan-index/tests/broken_references.rs:check_accepts_qualified_reference_when_the_file_exists"], ["../../crates/reqlan-index/tests/broken_references.rs:check_reports_qualified_reference_to_a_missing_file"], ["../../crates/reqlan-index/tests/golden_corpus.rs:qualified_reference_to_an_import_alias_is_not_a_missing_idea"], ["../../crates/reqlan-lsp/tests/parity.rs:golden_corpus_import_alias_is_not_an_unresolved_idea"]10.3%
["../../crates/reqlan-index/tests/broken_references.rs:check_skips_gitignored_file_targets"], ["../../crates/reqlan-index/src/ignore.rs:workspace_gitignore_matches_root_and_nested_rules"], ["../../crates/reqlan-analytical/tests/broken_references.rs:analysis_api_check_honours_skip_gitignored_targets"], ["../../packages/cli/test/check.test.ts:honours skip-gitignored-targets"], ["../../packages/analytical/test/release-ci-gate.test.ts:CI check skips gitignored targets"], ["../../crates/reqlan-index/tests/broken_references.rs:check_skips_gitignored_import_paths"]10.3%
["../../crates/reqlan-index/tests/broken_references.rs:check_skips_targets_that_match_skip_globs"], ["../../crates/reqlan-index/tests/broken_references.rs:path_glob_matches_cursor_skip_glob"], ["../../crates/reqlan-analytical/tests/broken_references.rs:analysis_api_check_honours_skip_targets"], ["../../packages/cli/test/check.test.ts:honours skip-target globs"]10.3%
["../../crates/reqlan-index/tests/broken_references.rs:check_two_globs_report_an_outside_target_and_skip_outside_directories"], ["../../crates/reqlan-index/tests/broken_references.rs:check_includes_an_explicit_file_outside_the_globs"], ["../../crates/reqlan-index/tests/broken_references.rs:check_rejects_an_empty_path_glob"], ["../../crates/reqlan-analytical/tests/broken_references.rs:analysis_api_check_honours_multiple_globs_and_extra_paths"], ["../../packages/cli/test/check.test.ts:checks files from two globs and one file outside them"], ["../../packages/cli/test/check.test.ts:does not recurse into a directory outside the globs"], ["../../packages/cli/test/check.test.ts:rejects an empty glob"], ["../../packages/mcp/test/server.test.ts:check accepts one glob or a list of globs"]10.3%
["../../crates/reqlan-index/tests/broken_references.rs:check_warns_when_a_wildcard_matches_zero_or_one_idea"], ["../../crates/reqlan-index/tests/broken_references.rs:check_skips_sparse_wildcard_warning_on_rq_ignore_error"], ["../../packages/cli/test/check.test.ts:warns on wildcards with 0 or 1 match"], ["../../packages/cli/test/format-broken-refs.test.ts:marks wildcard sparse rows as warnings"], ["../../packages/language/test/wildcard-references.test.ts:warns when wildcard matches nothing"], ["../../packages/language/test/wildcard-references.test.ts:warns when wildcard matches only one idea"]10.3%
["../../crates/reqlan-index/tests/broken_references.rs:check_warns_when_a_wildcard_matches_zero_or_one_idea"], ["../../crates/reqlan-index/tests/broken_references.rs:check_wildcard_one_flag_off_omits_singleton_match"], ["../../crates/reqlan-index/tests/broken_references.rs:check_wildcard_one_flag_error_sets_severity"], ["../../packages/cli/test/check.test.ts:warns on wildcards with 0 or 1 match"], ["../../packages/cli/test/check.test.ts:honours wildcard-zero and wildcard-one handling flags"], ["../../packages/language/test/wildcard-references.test.ts:warns when wildcard matches only one idea"]10.3%
["../../crates/reqlan-index/tests/broken_references.rs:check_warns_when_a_wildcard_matches_zero_or_one_idea"], ["../../crates/reqlan-index/tests/broken_references.rs:check_wildcard_zero_flag_off_omits_empty_match"], ["../../crates/reqlan-index/tests/broken_references.rs:check_wildcard_zero_flag_error_sets_severity"], ["../../packages/cli/test/check.test.ts:warns on wildcards with 0 or 1 match"], ["../../packages/cli/test/check.test.ts:honours wildcard-zero and wildcard-one handling flags"]10.3%
["../../crates/reqlan-index/tests/broken_references.rs:lists_broken_idea_references_and_filters_by_glob"], ["../../crates/reqlan-index/tests/broken_references.rs:optionally_includes_broken_comment_references"], ["../../crates/reqlan-analytical/tests/broken_references.rs:analysis_api_lists_broken_refs_with_glob_and_comments"], ["../../packages/cli/test/broken-references.test.ts:lists broken idea refs and optional comment refs with a path glob"]10.3%
["../../crates/reqlan-index/tests/broken_references.rs:skips_idea_and_comment_refs_on_rq_ignore_error_lines"], ["../../crates/reqlan-index/tests/broken_references.rs:check_reports_missing_file_refs_and_skips_existing"], ["../../crates/reqlan-index/tests/broken_references.rs:check_reports_qualified_reference_to_a_missing_file"], ["../../crates/reqlan-index/tests/broken_references.rs:check_accepts_qualified_reference_when_the_file_exists"], ["../../crates/reqlan-index/tests/broken_references.rs:check_reports_qualified_reference_to_a_missing_idea"], ["../../crates/reqlan-index/tests/broken_references.rs:check_reports_namespace_qualified_reference_to_a_missing_idea"], ["../../crates/reqlan-index/tests/broken_references.rs:check_skips_qualified_missing_idea_on_rq_ignore_error"], ["../../crates/reqlan-index/tests/broken_references.rs:check_strips_test_name_and_line_suffix_before_file_exists"], ["../../crates/reqlan-index/tests/broken_references.rs:check_accepts_test_names_that_contain_colons_from_nested_rq"], ["../../crates/reqlan-index/tests/broken_references.rs:check_skips_same_file_idea_refs_and_reports_true_missing"], ["../../crates/reqlan-index/tests/broken_references.rs:check_accepts_import_root_alias_file_refs"], ["../../crates/reqlan-analytical/tests/broken_references.rs:analysis_api_lists_broken_refs_with_glob_and_comments"], ["../../packages/cli/test/check.test.ts:checks files from two globs and one file outside them"], ["../../packages/cli/test/check.test.ts:reports unresolved idea, comment, and file refs and exits 1"], ["../../packages/cli/test/check.test.ts:reports unresolved imports and exits 1"], ["../../crates/reqlan-index/tests/broken_references.rs:check_reports_a_malformed_comment_reference"], ["../../crates/reqlan-index/tests/broken_references.rs:check_reports_missing_import_path"], ["../../crates/reqlan-index/tests/broken_references.rs:check_reports_missing_imported_idea"], ["../../packages/cli/test/check.test.ts:exits 0 when there are no issues"], ["../../packages/cli/test/check.test.ts:quotes source paths that contain spaces"], ["../../packages/cli/test/check.test.ts:orders json rows by missing target"], ["../../packages/cli/test/format-broken-refs.test.ts:quotes paths that contain spaces"], ["../../crates/reqlan-index/tests/broken_references.rs:check_orders_issues_by_missing_target"], ["../../crates/reqlan-index/tests/broken_references.rs:check_warns_when_a_wildcard_matches_zero_or_one_idea"], ["../../packages/mcp/test/server.test.ts:check returns JSON issue rows"]10.3%
["../../crates/reqlan-index/tests/code_file_index.rs:indexes_comment_references_from_non_rq_files"], ["../../crates/reqlan-index/tests/code_file_index.rs:unqualified_comment_ref_matches_catalog_idea_name"], ["../../crates/reqlan-index/tests/code_file_index.rs:rq_reindex_restores_comment_links"], ["../../crates/reqlan-index/tests/code_file_index.rs:rq_reindex_relinks_code_files_only_when_idea_names_change"], ["../../crates/reqlan-index/tests/code_file_index.rs:index_one_file_drops_an_rqignored_rq_file"], ["../../crates/reqlan-index/tests/code_file_index.rs:skips_binary_comment_files_unless_rqignore_negation"], ["../../crates/reqlan-analytical/tests/file_context.rs:file_context_includes_indexed_comment_links"], ["../../crates/reqlan-analytical/tests/fuzzy_search.rs:workspace_index_fuzzy_search_includes_comment_code_files"]10.3%
["../../crates/reqlan-index/tests/extract_parity.rs:block_idea_body_populates_summary_from_rich_text_parts"], ["../../crates/reqlan-index/tests/extract_parity.rs:block_idea_body_populates_summary_from_rich_text_parts"], ["../../crates/reqlan-parse/tests/parser.rs:parses_block_and_oneliner"], ["../../crates/reqlan-parse/tests/parser.rs:parses_same_line_blocks_without_swallowing_later_ideas"], ["../../packages/language/test/parsing.test.ts:same-line braces after a name parse as a block"], ["../../packages/language/test/textmate-idea-highlight.test.ts"]10.3%
["../../crates/reqlan-index/tests/extract_parity.rs:indexes_scalar_list_block_and_flag_attribute_values"], ["../../crates/reqlan-index/tests/extract_parity.rs:qualified_ideaset_member_reference_targets_leaf_idea_not_ideaset"], ["../../crates/reqlan-index/tests/golden_corpus.rs:corpus_idea_names_match_langium_extract"], ["../../crates/reqlan-index/tests/schema.rs:opens_at_schema_version_4"], ["../../crates/reqlan-index/tests/sync.rs:soft_sync_skips_unchanged_mtime"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:expands_wildcard_refs_to_one_edge_per_matching_idea"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:sync_persists_wildcard_reference_edges"]10.3%
["../../crates/reqlan-index/tests/golden_corpus.rs:corpus_idea_names_match_langium_extract"], ["../../packages/language/test/langium-corpus-golden.test.ts:committed dump matches live Langium extract"], ["../../packages/analytical/test/release-ci-gate.test.ts:pnpm test runs crate tests"]10.3%
["../../crates/reqlan-index/tests/local_symbolic.rs:analyze_local_symbolic_returns_outbound_without_catalog"], ["../../crates/reqlan-index/tests/local_symbolic.rs:analyze_local_symbolic_ignores_catalog_candidates"], ["../../crates/reqlan-index/tests/local_symbolic.rs:analyze_local_symbolic_includes_same_file_inbound_backlinks"], ["../../crates/reqlan-index/tests/local_symbolic.rs:analyze_local_symbolic_source_offsets_are_utf8_bytes"], ["../../crates/reqlan-index/tests/golden_corpus.rs:qualified_reference_to_an_import_alias_is_not_a_missing_idea"], ["../../packages/analytical/test/load-native.test.ts:exposes analyzeLocalSymbolic on the engine when present"], ["../../packages/analytical/test/local-symbolic-references.test.ts"], ["../../packages/language/test/local-symbolic-links.test.ts:same-file idea links without DocumentBuilder / workspace link"], ["../../packages/language/test/local-symbolic-links.test.ts:idea underlines match syntax tokens after non-ASCII text"], ["../../packages/cli/test/local-symbolic.test.ts"], ["../../packages/extension/test/local-symbolic-context.test.ts"]10.3%
["../../crates/reqlan-index/tests/scan.rs:depth_2_does_not_return_a_deeper_base_or_rq"], ["../../crates/reqlan-index/tests/scan.rs:entry_cap_stops_and_reports_truncation"], ["../../packages/analytical/test/scan-limits.test.ts:clamps depth and entries into the allowed range"], ["../../packages/analytical/test/scan-limits.test.ts:editor scan settings match defaults.json"], ["../../crates/reqlan-index/tests/sync.rs:default_rqignore_skips_node_modules"], ["../../packages/analytical/test/base-discovery.test.ts:skips target build trees"]10.3%
["../../crates/reqlan-index/tests/scan.rs:one_walk_returns_bases_rq_and_code_and_skips_ignored_dirs"], ["../../packages/extension/test/refresh-rediscovers-bases.test.ts:startup scan does not call findFiles"]10.3%
["../../crates/reqlan-index/tests/schema.rs"], ["../../packages/analytical/test/schema-v4-roundtrip.test.ts"]10.3%
["../../crates/reqlan-index/tests/schema.rs:opens_at_schema_version_4"], ["../../crates/reqlan-index/tests/schema.rs:schema_v4_columns_round_trip_git_count_and_mtime"], ["../../crates/reqlan-index/tests/schema.rs:schema_v4_file_reopens_after_drop"], ["../../crates/reqlan-index/tests/schema.rs:opens_sqljs_written_schema_v4_fixture"], ["../../packages/analytical/test/schema-v4-roundtrip.test.ts"], ["../../packages/analytical/test/open-analysis-api.test.ts"], ["../../packages/cli/test/runtime-engine.test.ts"], ["../../packages/analytical/test/native-headless-entry.test.ts"]10.3%
["../../crates/reqlan-index/tests/schema.rs:opens_at_schema_version_4"], ["../../crates/reqlan-index/tests/schema.rs:schema_v4_columns_round_trip_git_count_and_mtime"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:sync_persists_wildcard_reference_edges"], ["../../crates/reqlan-index/tests/extract_parity.rs:qualified_ideaset_member_reference_targets_leaf_idea_not_ideaset"], ["../../crates/reqlan-index/tests/broken_references.rs:sync_drops_stale_inline_code_file_refs_when_extract_version_changes"]10.3%
["../../crates/reqlan-index/tests/schema.rs:opens_at_schema_version_4"], ["../../crates/reqlan-index/tests/schema.rs:schema_v4_columns_round_trip_git_count_and_mtime"], ["../../packages/analytical/test/schema-v4-roundtrip.test.ts"]10.3%
["../../crates/reqlan-index/tests/wildcard_reference_edges.rs"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:expands_wildcard_refs_to_one_edge_per_matching_idea"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:emits_unresolved_edge_when_catalog_has_no_matches"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:stores_wildcard_fan_out_as_wildcard_reference_kind"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:extract_indexed_document_fans_out_edges_for_matching_catalog_ideas"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:sync_persists_wildcard_reference_edges"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:sync_persists_unresolved_wildcard_edge_when_catalog_has_no_matches"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:indexer_and_graphical_graph_rq_capture_wildcard_edge_and_toggle_ideas"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:stores_wildcard_fan_out_as_wildcard_reference_kind"], ["../../crates/reqlan-export/tests/html_export.rs:html_export_workspace_graph_includes_wildcard_refs_chip_and_edges"]10.3%
["../../crates/reqlan-parse/tests/lexer.rs:prose_braces_stay_other"], ["../../crates/reqlan-parse/tests/parser.rs:keeps_inline_prose_braces"], ["../../crates/reqlan-index/tests/extract_parity.rs:indexes_scalar_list_block_and_flag_attribute_values"], ["../../crates/reqlan-index/tests/golden_corpus.rs:corpus_idea_names_match_langium_extract"], ["../../packages/language/test/langium-corpus-golden.test.ts:committed dump matches live Langium extract"], ["../../crates/reqlan-search/tests/fuzzy.rs:ranks_exact_and_prefix_matches_ahead_of_subsequence_fuzzy_hits"]10.3%
["../../crates/reqlan-parse/tests/lexer.rs:structural_braces_around_named_block"], ["../../crates/reqlan-parse/tests/lexer.rs:prose_braces_stay_other"], ["../../crates/reqlan-parse/tests/lexer.rs:glob_star_star_is_not_a_block_comment"], ["../../crates/reqlan-parse/tests/lexer.rs:at_only_at_line_start"], ["../../crates/reqlan-parse/tests/lexer.rs:url_slashes_are_not_line_comments"], ["../../crates/reqlan-parse/tests/lexer.rs:mid_line_triple_backticks_are_not_a_code_fence"], ["../../crates/reqlan-parse/tests/lexer.rs:line_start_triple_backticks_are_a_code_fence"], ["../../crates/reqlan-parse/tests/lexer.rs:middle_dot_before_brace_does_not_panic"]10.3%
["../../crates/reqlan-parse/tests/parser.rs:keeps_inline_prose_braces"], ["../../crates/reqlan-parse/tests/parser.rs:recovers_nameless_block"], ["../../crates/reqlan-parse/tests/parser.rs:from_import_records_each_token_span"], ["../../crates/reqlan-parse/tests/parser.rs:recovers_invalid_from_import_and_keeps_later_ideas"], ["../../crates/reqlan-parse/tests/parser.rs:times_out_hang_sentinel"], ["../../crates/reqlan-parse/tests/parser.rs:keeps_ideas_after_mid_line_triple_backticks"], ["../../crates/reqlan-parse/tests/lexer.rs:mid_line_at_plan_brace_stays_prose"], ["../../crates/reqlan-index/tests/golden_corpus.rs:corpus_idea_names_match_langium_extract"], ["../../crates/reqlan-index/tests/golden_corpus.rs:tutorials_rq_keeps_ideas_after_nested_slides_lists"], ["../../packages/language/test/parsing.test.ts:keeps later ideas after nested @slides lists with mid-line @plan braces"], ["../../packages/language/test/parsing.test.ts:parse tutorials.rq nested @slides lists without parser errors"], ["../../packages/language/test/langium-rust-parse-align.test.ts:golden corpus matches live Langium and Rust snapshots"], ["../../packages/cli/test/runtime-engine.test.ts:parse command uses native parseReqlanSource"], ["../../packages/analytical/test/load-native.test.ts:exposes parseReqlanSource on the engine when present"]10.3%
["../../crates/reqlan-parse/tests/parser.rs:relative_dedent_keeps_extra_spaces_on_a_later_body_line"], ["../../crates/reqlan-parse/tests/parser.rs:relative_dedent_uses_the_indent_of_a_first_body_line_that_is_not_at_column_0"], ["../../crates/reqlan-parse/tests/parser.rs:relative_dedent_keeps_an_extra_tab"], ["../../packages/language/test/parsing.test.ts:keeps extra indent on a later body line"], ["../../packages/language/test/parsing.test.ts:uses the first body line indent when that line is not at column 0"], ["../../packages/language/test/parsing.test.ts:keeps an extra tab on a later body line"]10.3%
["../../crates/reqlan-search/tests/contextual.rs:nearer_ideas_rank_above_farther_with_equal_text_scores"], ["../../crates/reqlan-search/tests/contextual.rs:reranks_using_graph_edges_from_context_seeds"]10.3%
["../../crates/reqlan-search/tests/fuzzy.rs:collapses_underscore_hyphen_dots_ellipsis_and_whitespace"], ["../../crates/reqlan-search/tests/fuzzy.rs:matches_across_separator_substitutions"], ["../../crates/reqlan-search/tests/fuzzy.rs:matches_reordered_and_partial_word_queries"]10.3%
["../../crates/reqlan-search/tests/fuzzy.rs:pages_ranked_hits_with_offset_and_truncated"], ["../../packages/analytical/test/workspace-index.test.ts:fuzzySearch returns file-name hits and pages with offset"]10.3%
["../../crates/reqlan-search/tests/fuzzy.rs:ranks_exact_and_prefix_matches_ahead_of_subsequence_fuzzy_hits"], ["../../crates/reqlan-search/tests/fuzzy.rs:matches_across_separator_substitutions"], ["../../crates/reqlan-search/tests/fuzzy.rs:fuzzy_search_reads_sqlite_and_returns_ranked_hits"], ["../../crates/reqlan-search/tests/fuzzy.rs:ranks_file_name_hits_with_ideas"], ["../../crates/reqlan-search/tests/fuzzy.rs:pages_ranked_hits_with_offset_and_truncated"], ["../../crates/reqlan-analytical/tests/fuzzy_search.rs:workspace_index_fuzzy_search_ranks_without_exporting_catalog"], ["../../crates/reqlan-analytical/tests/fuzzy_search.rs:workspace_index_fuzzy_search_includes_file_name_hits"], ["../../crates/reqlan-search/tests/contextual.rs:nearer_ideas_rank_above_farther_with_equal_text_scores"], ["../../crates/reqlan-search/tests/contextual.rs:reranks_using_graph_edges_from_context_seeds"], ["../../crates/reqlan-search/tests/semantic.rs:ranks_name_hits_ahead_of_summary_and_tag_hits"], ["../../crates/reqlan-search/tests/semantic.rs:scores_reference_labels_and_query_tokens"]10.3%
["../../crates/reqlan-search/tests/fuzzy.rs:ranks_file_name_hits_with_ideas"], ["../../packages/analytical/test/workspace-index.test.ts:fuzzySearch returns file-name hits and pages with offset"], ["../../crates/reqlan-analytical/tests/fuzzy_search.rs:workspace_index_fuzzy_search_includes_file_name_hits"], ["../../crates/reqlan-analytical/tests/fuzzy_search.rs:workspace_index_fuzzy_search_includes_comment_code_files"]10.3%
["../../crates/reqlan-search/tests/katz.rs:chain_ranks_the_cited_end_highest"], ["../../crates/reqlan-search/tests/katz.rs:graph_with_no_citation_edges_scores_every_idea_at_one"], ["../../crates/reqlan-search/tests/katz.rs:citation_edges_skip_unresolved_and_non_reference_kinds"]10.3%
["../../crates/reqlan-search/tests/katz.rs:katz_bias_is_off_by_default_and_lifts_the_higher_score_when_on"], ["../../crates/reqlan-search/tests/katz.rs:katz_bias_reports_a_missing_score"]10.3%
["../../packages/analytical/src/native/generated.ts"], ["../../packages/analytical/test/generated-native-types.test.ts"], ["../../crates/reqlan-analytical/tests/export_ts.rs:committed_generated_ts_matches_specta_export"], ["../../crates/reqlan-analytical/tests/export_ts.rs:rewrite_generated_ts_comment_paths_adds_one_hop"]10.3%
["../../packages/analytical/test/application-memory.test.ts:defaults to <workspace>/.reqlan"], ["../../packages/analytical/test/application-memory.test.ts:honours storagePath override"]10.3%
["../../packages/analytical/test/base-discovery.test.ts:baseForPath picks longest matching root"], ["../../packages/analytical/test/base-discovery.test.ts:selectDefaultBase prefers cwd containment"]10.3%
["../../packages/analytical/test/base-discovery.test.ts:discovers nested bases and excludes child files from parent ownership"], ["../../packages/analytical/test/base-discovery.test.ts:baseForPath picks longest matching root"]10.3%
["../../packages/analytical/test/base-discovery.test.ts:discovers nested bases and excludes child files from parent ownership"], ["../../packages/analytical/test/base-discovery.test.ts:baseForPath picks longest matching root"], ["../../packages/analytical/test/base-discovery.test.ts:selectDefaultBase prefers cwd containment"]10.3%
["../../packages/analytical/test/base-discovery.test.ts:returns empty when no .reqlan exists"], ["../../packages/analytical/test/base-discovery.test.ts:discovers base at workspace root"], ["../../packages/analytical/test/base-discovery.test.ts:skips node_modules and does not treat .reqlan as a walkable base root"], ["../../packages/analytical/test/base-discovery.test.ts:isPathInsideOrEqual treats Windows drive paths as case-insensitive"], ["../../packages/analytical/test/application-memory.test.ts:defaults to <workspace>/.reqlan"]10.3%
["../../packages/analytical/test/base-registry-catchup.test.ts:ensureBaseReady opens and soft-syncs an uninitialized base"], ["../../packages/analytical/test/base-registry-catchup.test.ts:checkStaleAll heals an uninitialized base"], ["../../packages/analytical/test/base-registry-catchup.test.ts:deactivate returns to uninitialized so a base can be reopened"], ["../../packages/analytical/test/sqlite-artifact-release.test.ts:BaseRegistry releaseArtifacts closes handles but keeps descriptors"]10.3%
["../../packages/analytical/test/base-registry-refresh.test.ts:refresh rediscovers a base created after an empty discovery"], ["../../packages/analytical/test/base-registry-refresh.test.ts:refresh rediscovers a nested base added after first discovery"], ["../../packages/analytical/test/base-registry-refresh.test.ts:refresh after createBase registers the new base"], ["../../packages/extension/test/refresh-rediscovers-bases.test.ts:IndexService.syncWorkspace calls registry.refresh"], ["../../packages/extension/test/refresh-rediscovers-bases.test.ts:IndexService.createBase calls createBase then registry.refresh"], ["../../packages/extension/test/refresh-rediscovers-bases.test.ts:reqlan.refreshIndex command uses syncWorkspace"]10.3%
["../../packages/analytical/test/create-base.test.ts:creates .reqlan marker and reports created"], ["../../packages/analytical/test/base-registry-refresh.test.ts:refresh after createBase registers the new base"]10.3%
["../../packages/analytical/test/create-base.test.ts:creates .reqlan marker and reports created"], ["../../packages/analytical/test/create-base.test.ts:is idempotent when marker already exists"], ["../../packages/cli/test/windows-esm-entry.test.ts:CLI bin loads the compiled entry via an ESM file URL helper"]10.3%
["../../packages/analytical/test/create-base.test.ts:seeds .reqlan/.gitignore that excludes sqlite artifacts"], ["../../crates/reqlan-index/src/ignore.rs:create_base_seeds_gitignore_for_sqlite_artifacts"]10.3%
["../../packages/analytical/test/export-json-csv.test.ts"]10.3%
["../../packages/analytical/test/export-json-csv.test.ts"], ["../../crates/reqlan-export/tests/json_export.rs:json_export_lists_persisted_ideas"]10.3%
["../../packages/analytical/test/export-markdown.test.ts"]10.3%
["../../packages/analytical/test/index-diagnostics.test.ts"]10.3%
["../../packages/analytical/test/load-native.test.ts"], ["../../packages/analytical/test/native-packaging.test.ts"], ["../../packages/analytical/test/native-headless-entry.test.ts"], ["../../packages/analytical/test/open-analysis-api.test.ts"], ["../../packages/analytical/test/native-export-request.test.ts"], ["../../packages/analytical/test/workspace-paths.test.ts"], ["../../packages/analytical/test/index-windows-paths.test.ts"], ["../../crates/reqlan-analytical/tests/export.rs:html_export_honours_graph_page_url_base_and_header_link"]10.3%
["../../packages/analytical/test/load-native.test.ts"], ["../../packages/analytical/test/native-packaging.test.ts"], ["../../packages/analytical/test/native-packaging.test.ts:deploy-npm publishes platform packages before @reqlan/analytical"], ["../../packages/analytical/test/native-packaging.test.ts:deploy-npm builds natives when analytical was bumped, not when npm_ref is language"], ["../../packages/analytical/test/native-packaging.test.ts:analytical version is SSOT for platform packages; Changesets ignores them"], ["../../packages/analytical/test/native-packaging.test.ts:@reqlan/analytical optionalDependencies are publish-only, not in git"], ["../../packages/analytical/test/require-natives-published.test.ts"]10.3%
["../../packages/analytical/test/native-packaging.test.ts"], ["../../packages/analytical/test/native-packaging.test.ts:analytical version is SSOT for platform packages; Changesets ignores them"], ["../../packages/analytical/test/native-packaging.test.ts:@reqlan/analytical optionalDependencies are publish-only, not in git"]10.3%
["../../packages/analytical/test/native-packaging.test.ts"], ["../../packages/analytical/test/native-packaging.test.ts:deploy-npm publishes platform packages before @reqlan/analytical"], ["../../packages/analytical/test/native-packaging.test.ts:deploy-npm builds natives when analytical was bumped, not when npm_ref is language"], ["../../packages/analytical/test/native-packaging.test.ts:analytical version is SSOT for platform packages; Changesets ignores them"], ["../../packages/analytical/test/native-packaging.test.ts:@reqlan/analytical optionalDependencies are publish-only, not in git"], ["../../packages/analytical/test/require-natives-published.test.ts"]10.3%
["../../packages/analytical/test/native-packaging.test.ts"], ["../../packages/cli/test/readme-native-install.test.ts"]10.3%
["../../packages/analytical/test/native-packaging.test.ts:analytical version is SSOT for platform packages; Changesets ignores them"]10.3%
["../../packages/analytical/test/release-ci-gate.test.ts"], ["../../packages/analytical/test/release-ci-gate.test.ts:TypeScript compile generates Langium sources first"], ["../../packages/language/test/langium-generate-config.test.ts"], ["../../packages/language/test/langium-generate-config.test.ts:langium-cli schema validates langium-config.json"]10.3%
["../../packages/analytical/test/release-ci-gate.test.ts"], ["../../packages/analytical/test/release-ci-gate.test.ts:one build is reused by crate tests, check, and package tests"], ["../../packages/analytical/test/release-ci-gate.test.ts:pnpm test runs crate tests"], ["../../packages/analytical/test/release-ci-gate.test.ts:TypeScript compile generates Langium sources first"]10.3%
["../../packages/analytical/test/release-ci-gate.test.ts"], ["../../packages/analytical/test/release-ci-gate.test.ts:release calls sequential CI before versioning"], ["../../packages/analytical/test/release-ci-gate.test.ts:CI is one sequential pull-request job"], ["../../packages/analytical/test/release-ci-gate.test.ts:one build is reused by crate tests, check, and package tests"], ["../../packages/analytical/test/release-ci-gate.test.ts:reference check uses workspace packages not npm"]10.3%
["../../packages/analytical/test/release-ci-gate.test.ts"], ["../../packages/analytical/test/release-ci-gate.test.ts:release calls sequential CI before versioning"], ["../../packages/analytical/test/release-ci-gate.test.ts:CI is one sequential pull-request job"], ["../../packages/analytical/test/release-ci-gate.test.ts:one build is reused by crate tests, check, and package tests"], ["../../packages/analytical/test/release-ci-gate.test.ts:reference check uses workspace packages not npm"], ["../../packages/analytical/test/release-ci-gate.test.ts:TypeScript compile generates Langium sources first"], ["../../packages/analytical/test/release-ci-gate.test.ts:CI check skips gitignored targets"]10.3%
["../../packages/analytical/test/repo-license.test.ts"], ["../../packages/analytical/test/repo-license.test.ts:root LICENSE is AGPL-3.0 and matches extension LICENSE"], ["../../packages/analytical/test/repo-license.test.ts:publishable packages and crates declare AGPL-3.0-only"]10.3%
["../../packages/analytical/test/rqignore.test.ts:defaults ignore json, sqlite sidecars, and files without comments"], ["../../crates/reqlan-index/src/ignore.rs:default_rqignore_skips_files_without_comments_until_negated"]10.3%
["../../packages/analytical/test/workspace-index.test.ts"], ["../../packages/analytical/test/sqlite-artifact-release.test.ts:BaseRegistry releaseArtifacts closes handles but keeps descriptors"]10.3%
["../../packages/analytical/test/workspace-index.test.ts:fuzzySearch ranks from the native index without listing all ideas in JS"], ["../../packages/analytical/test/workspace-index.test.ts:fuzzySearch returns file-name hits and pages with offset"], ["../../crates/reqlan-search/tests/fuzzy.rs:ranks_exact_and_prefix_matches_ahead_of_subsequence_fuzzy_hits"], ["../../crates/reqlan-search/tests/fuzzy.rs:fuzzy_search_reads_sqlite_and_returns_ranked_hits"], ["../../crates/reqlan-search/tests/fuzzy.rs:ranks_file_name_hits_with_ideas"], ["../../crates/reqlan-search/tests/fuzzy.rs:pages_ranked_hits_with_offset_and_truncated"], ["../../crates/reqlan-analytical/tests/fuzzy_search.rs:workspace_index_fuzzy_search_ranks_without_exporting_catalog"]10.3%
["../../packages/cli/test/argv.test.ts:drops a lone end-of-options marker"], ["../../packages/cli/test/check.test.ts:accepts skip-target after a pnpm end-of-options marker"]10.3%
["../../packages/cli/test/click.test.ts:click command emits session and unique context"]10.3%
["../../packages/cli/test/diff.test.ts:color is opt-in when stdout is not a terminal"]10.3%
["../../packages/cli/test/readme-native-install.test.ts"]10.3%
["../../packages/cli/test/runtime-engine.test.ts:CLI runtime opens AnalysisApi through the core engine"], ["../../packages/cli/test/runtime-engine.test.ts:CLI commands do not statically import Langium or @reqlan/language"], ["../../packages/cli/test/runtime-engine.test.ts:search does not load the Langium language module"], ["../../packages/analytical/test/native-headless-entry.test.ts:native module graph does not value-import Langium or @reqlan/language"]10.3%
["../../packages/cli/test/windows-esm-entry.test.ts:does not treat a Windows drive letter as a URL scheme"], ["../../packages/cli/test/windows-esm-entry.test.ts:CLI bin loads the compiled entry via an ESM file URL helper"], ["../../packages/cli/test/windows-esm-entry.test.ts:MCP bin converts the compiled entry with pathToFileURL"]10.3%
["../../packages/extension/test/diff-webview.test.ts:a created row uses the added theme token and hides the body"], ["../../packages/extension/test/diff-webview.test.ts:references lists added and removed names and hides the body"], ["../../packages/extension/test/diff-webview.test.ts:text shows the before and after body"], ["../../packages/extension/test/diff-webview.test.ts:modified and moved map to their git decoration classes"]10.3%
["../../packages/extension/test/graph-ui-state.test.ts"]10.3%
["../../packages/extension/test/graph-ui-state.test.ts"], ["../../packages/extension/test/onboarding-state.test.ts"]10.3%
["../../packages/extension/test/inbound-snapshot-push.test.ts"], ["../../packages/language/test/inbound-snapshot-store.test.ts"], ["../../packages/analytical/test/workspace-index.test.ts:enqueueIndex notifies catalog when ready"]10.3%
["../../packages/extension/test/incremental-build.test.ts"], ["../../packages/extension/test/incremental-build.test.ts:ignores node_modules when fingerprinting a directory tree"], ["../../packages/analytical/test/native-packaging.test.ts"]10.3%
["../../packages/extension/test/local-symbolic-context.test.ts"], ["../../packages/extension/test/context-model.test.ts"]10.3%
["../../packages/extension/test/wildcard-reference-open-search.test.ts"], ["../../packages/extension/test/wildcard-reference-open-search.test.ts:e2e: buildWildcardMatchesPayload lists stats, ideas, and files"], ["../../packages/extension/test/wildcard-reference-open-search.test.ts:e2e: wildcardSearchSeed maps command args to focusIdeaSearch payload"], ["../../packages/extension/test/wildcard-reference-open-search.test.ts:e2e: command args → seed → pathFilter gates search hits"], ["../../packages/language/test/wildcard-references.test.ts:e2e: tokenize → parse → resolve → document link → definition → command args"], ["../../packages/language/test/textmate-wildcard-highlight.test.ts"], ["../../packages/language/test/semantic-tokens-wildcard.test.ts"]10.3%
["../../packages/extension/test/wildcard-reference-open-search.test.ts"], ["../../packages/extension/test/wildcard-reference-open-search.test.ts:e2e: command args → seed → pathFilter gates search hits"]10.3%
["../../packages/language/test/comment-in-string.test.ts"], ["../../packages/language/test/comment-in-string.test.ts:e2e: /**/ glob survives tokenize → parse in prose, naked quotes, and reference STRING"], ["../../packages/language/test/comment-in-string.test.ts:e2e: real block comments still hide body text"], ["../../packages/language/test/comment-in-string.test.ts:e2e: reference STRING with // tokenizes, parses, and keeps path text"], ["../../packages/language/test/references.test.ts:ignores // inside string literals when locating line comments"], ["../../packages/language/test/references.test.ts:ignores // inside complete backtick fences when locating line comments"], ["../../packages/language/test/references.test.ts:e2e: findCommentSpansInText skips empty /**/ glob segments"], ["../../packages/language/test/comment-span-align.test.ts:golden corpus C-style comment ranges match lexer, scanner, and TextMate"], ["../../packages/language/test/comment-in-string.test.ts:backticked @reqlan/* in block body is not a block comment"], ["../../packages/language/test/references.test.ts:findCommentSpansInText skips /* inside complete backtick fences"], ["../../packages/language/test/ignore-error.test.ts"], ["../../packages/language/test/wildcard-references.test.ts:e2e: ** path glob matches nested fixture files"], ["../../crates/reqlan-parse/tests/lexer.rs:url_slashes_are_not_line_comments"], ["../../crates/reqlan-parse/tests/lexer.rs:glob_star_star_is_not_a_block_comment"], ["../../crates/reqlan-parse/tests/lexer.rs:meta_line_comment_after_content_is_hidden"]10.3%
["../../packages/language/test/comment-reference-resolution.test.ts"], ["../../packages/language/test/comment-reference-resolution.test.ts:reports an error when a comment reference file does not exist"], ["../../packages/language/test/comment-reference-resolution.test.ts:does not create a document link for a missing comment reference file"], ["../../packages/language/test/comment-reference-resolution.test.ts:creates a document link when the comment reference file and idea exist"], ["../../packages/language/test/comment-reference-resolution.test.ts:reports an error when the comment reference idea is missing from the file"], ["../../packages/language/test/comment-reference-resolution.test.ts:suppresses comment reference errors on the line after //rq-ignore-error"], ["../../packages/language/test/comment-reference-resolution.test.ts:reports a missing comment reference file in a loaded document"], ["../../packages/language/test/comment-reference-resolution.test.ts:reports a missing comment reference idea in a loaded file"], ["../../packages/language/test/comment-reference-resolution.test.ts:accepts a resolved comment reference in a loaded document"]10.3%
["../../packages/language/test/comment-span-align.test.ts:golden corpus C-style comment ranges match lexer, scanner, and TextMate"], ["../../packages/language/test/comment-span-align.test.ts:backticked @reqlan/* is not a block comment"], ["../../packages/language/test/comment-span-align.test.ts:TextMate line-fences run before comments"], ["../../packages/language/test/comment-span-align.test.ts:mid-line triple backticks are not a fence"], ["../../packages/language/test/comment-span-align.test.ts:line-start triple backticks lex as CODE_FENCE and hide inner comments"], ["../../packages/language/test/comment-span-align.test.ts:TextMate code-snippets fences are line-start only"], ["../../packages/language/test/comment-in-string.test.ts:backticked @reqlan/* in block body is not a block comment"], ["../../packages/language/test/references.test.ts:findCommentSpansInText skips /* inside complete backtick fences"], ["../../packages/language/test/references.test.ts:findCommentSpansInText does not treat mid-line ``` as a fence"], ["../../packages/language/test/parsing.test.ts:keeps later ideas after mid-line triple backticks"], ["../../packages/language/test/parsing.test.ts:parse rust_port.rq keeps ideas after comment_span_align fence prose"], ["../../crates/reqlan-parse/tests/lexer.rs:backticked_slash_star_is_not_a_comment"], ["../../crates/reqlan-parse/tests/lexer.rs:mid_line_triple_backticks_are_not_a_code_fence"], ["../../crates/reqlan-parse/tests/parser.rs:keeps_ideas_after_mid_line_triple_backticks"]10.3%
["../../packages/language/test/config.test.ts:returns undefined when no config exists"], ["../../packages/language/test/config.test.ts:loads config from the owning base .reqlan"], ["../../packages/language/test/config.test.ts:loads config from an ancestor base"], ["../../packages/language/test/config.test.ts:nearest base config wins over farther ones"], ["../../packages/language/test/config.test.ts:owning base without config does not inherit parent"], ["../../packages/language/test/path-resolve.test.ts:loads importRoots list from nearest base config"]10.3%
["../../packages/language/test/config.test.ts:schema $id matches public v1 host path"], ["../../packages/language/test/config.test.ts:schema file documents importRoots mappings"]10.3%
["../../packages/language/test/langium-corpus-golden.test.ts:committed dump matches live Langium extract"], ["../../crates/reqlan-index/tests/golden_corpus.rs:corpus_idea_names_match_langium_extract"], ["../../packages/language/test/langium-rust-parse-align.test.ts:golden corpus matches live Langium and Rust snapshots"], ["../../packages/language/test/comment-span-align.test.ts:golden corpus C-style comment ranges match lexer, scanner, and TextMate"], ["../../packages/language/test/parsing.test.ts:parse ontology.rq ideas"], ["../../packages/language/test/parsing.test.ts:parse mid-line triple backticks corpus without swallowing later ideas"], ["../../crates/reqlan-index/tests/golden_corpus.rs:opaque_file_examples_do_not_extract_inline_or_fenced_paths"], ["../../crates/reqlan-index/tests/golden_corpus.rs:mid_line_triple_backticks_keep_later_ideas"], ["../../crates/reqlan-index/tests/golden_corpus.rs:qualified_reference_to_an_import_alias_is_not_a_missing_idea"]10.3%
["../../packages/language/test/langium-rust-parse-align.test.ts:golden corpus matches live Langium and Rust snapshots"], ["../../packages/language/test/langium-rust-parse-align.test.ts:inline_code_file_example"], ["../../packages/language/test/langium-rust-parse-align.test.ts:inline_code_file_only_line_range"], ["../../packages/language/test/langium-rust-parse-align.test.ts:fenced_file_example"], ["../../packages/language/test/langium-rust-parse-align.test.ts:mid_line_triple_backticks"], ["../../crates/reqlan-parse/tests/align.rs:inline_code_file_example_is_not_a_live_ref"], ["../../crates/reqlan-parse/tests/align.rs:inline_code_file_only_line_range_is_not_a_live_ref"], ["../../crates/reqlan-parse/tests/align.rs:fence_body_is_one_code_snippet_not_inner_refs"], ["../../crates/reqlan-parse/tests/align.rs:mid_line_triple_backticks_are_not_a_code_snippet"]10.3%
["../../packages/language/test/linking.test.ts:resolve anonymous import in bracket reference without import statement"], ["../../packages/language/test/linking.test.ts:quoted-path qualified idea is not limited to from-import specifiers"], ["../../packages/language/test/linking.test.ts:quoted-path qualified idea is not limited to a qualified import of the same file"], ["../../packages/language/test/linking.test.ts:sqlite-schema quoted path reaches indexer ideas that are not from-imported"]10.3%
["../../packages/language/test/linking.test.ts:resolve forward reference to later idea in the same file"], ["../../packages/language/test/linking.test.ts:resolve forward reference to later ideaset in the same file"], ["../../packages/language/test/linking.test.ts:resolve local ideaset before imports"], ["../../crates/reqlan-index/tests/extract_parity.rs:same_file_forward_ideaset_reference_is_resolved"]10.3%
["../../packages/language/test/linking.test.ts:resolve ideaset-qualified bracket reference to member leaf not ideaset"], ["../../packages/language/test/linking.test.ts:resolve ideaset member forward reference"], ["../../crates/reqlan-index/tests/extract_parity.rs:qualified_ideaset_member_reference_targets_leaf_idea_not_ideaset"], ["../../crates/reqlan-index/tests/extract_parity.rs:qualified_namespace_import_reference_targets_leaf_in_imported_file"]10.3%
["../../packages/language/test/linking.test.ts:resolve import path in qualified wikilink"], ["../../packages/language/test/linking.test.ts:quoted-path qualified idea is not limited to from-import specifiers"], ["../../packages/language/test/linking.test.ts:sqlite-schema quoted path reaches indexer ideas that are not from-imported"]10.3%
["../../packages/language/test/linking.test.ts:resolve namespace import references to files"], ["../../packages/language/test/linking.test.ts:namespace import bracket reference links only the alias name"], ["../../crates/reqlan-index/tests/golden_corpus.rs:qualified_reference_to_an_import_alias_is_not_a_missing_idea"], ["../../crates/reqlan-lsp/tests/parity.rs:golden_corpus_import_alias_is_not_an_unresolved_idea"]10.3%
["../../packages/language/test/linking.test.ts:resolve same-file bracket reference to local idea"], ["../../packages/language/test/linking.test.ts:resolve forward reference to later idea in the same file"], ["../../packages/language/test/linking.test.ts:resolve circular same-file references"], ["../../packages/language/test/linking.test.ts:resolve ideaset member forward reference"], ["../../packages/language/test/linking.test.ts:resolve forward reference to later ideaset in the same file"], ["../../packages/language/test/linking.test.ts:resolve local ideaset before imports"], ["../../crates/reqlan-index/tests/extract_parity.rs:same_file_forward_reference_is_resolved"], ["../../crates/reqlan-index/tests/extract_parity.rs:same_file_forward_ideaset_reference_is_resolved"]10.3%
["../../packages/language/test/linking.test.ts:resolves an idea attribute link to that attribute"], ["../../packages/language/test/linking.test.ts:reports a missing idea attribute and does not open another idea"], ["../../crates/reqlan-parse/tests/lexer.rs:bracket_attribute_link_lexes_a_dot_between_two_names"], ["../../crates/reqlan-parse/tests/parser.rs:parses_idea_attribute_link_as_qualified_names"], ["../../crates/reqlan-index/tests/extract_parity.rs:idea_attribute_reference_targets_owner_not_a_same_named_idea"], ["../../crates/reqlan-export/tests/html_export.rs:attribute_link_opens_the_attribute_on_the_idea_page"]10.3%
["../../packages/language/test/linking.test.ts:sqlite-schema quoted path reaches indexer ideas that are not from-imported"]10.3%
["../../packages/language/test/parse-budget.test.ts:times out a hung parse worker with warning and error"], ["../../packages/language/test/parse-budget.test.ts:returns incomplete result when worker parse fails"], ["../../packages/language/test/parse-budget.test.ts:parses a normal file within budget"], ["../../packages/language/test/parse-budget.test.ts:parses small files on the calling thread without a worker"], ["../../packages/language/test/parse-budget.test.ts:escalates large files to the worker path"], ["../../packages/language/test/parse-budget.test.ts:forceWorker escalates a small file"], ["../../packages/language/test/ast-lifecycle.test.ts:incomplete parse stores an empty model"], ["../../crates/reqlan-parse/tests/parser.rs:times_out_hang_sentinel"]10.3%
["../../packages/language/test/parsing.test.ts:allows escaped closing brace in body prose"], ["../../crates/reqlan-parse/tests/parser.rs:allows_escaped_closing_brace_in_body_prose"]10.3%
["../../packages/language/test/parsing.test.ts:keeps inline parentheses in body prose as text"], ["../../packages/language/test/parsing.test.ts:keeps inline braces in body prose as text"], ["../../packages/language/test/parsing.test.ts:parse extension graph.rq library"]10.3%
["../../packages/language/test/parsing.test.ts:keeps inline prose brace pairs as text"], ["../../packages/language/test/parsing.test.ts:keeps end-of-line matching prose braces as text"], ["../../packages/language/test/parsing.test.ts:parse thanks-for-installing template"], ["../../crates/reqlan-parse/tests/parser.rs:keeps_inline_prose_braces"], ["../../crates/reqlan-parse/tests/parser.rs:keeps_end_of_line_matching_prose_braces"], ["../../crates/reqlan-parse/tests/lexer.rs:prose_braces_stay_other"]10.3%
["../../packages/language/test/parsing.test.ts:keeps naked quoted phrases in block body text"], ["../../packages/language/test/parsing.test.ts:keeps naked quoted phrases in attribute scalar values"], ["../../packages/language/test/parsing.test.ts:keeps single-quoted naked phrases in block body text"], ["../../packages/language/test/parsing.test.ts:keeps naked quoted phrases in one-liner body after the idea name"], ["../../packages/language/test/parsing.test.ts:keeps naked quoted phrases in list items"], ["../../packages/language/test/parsing.test.ts:keeps naked quotes alongside bracket references on one line"], ["../../packages/language/test/parsing.test.ts:does not treat naked quoted path-like prose as an import reference"], ["../../packages/language/test/parsing.test.ts:does not parse unbracketed quoted paths as file references"], ["../../packages/language/test/parsing.test.ts:parses reframe requirement snippets with naked quoted UI labels"], ["../../packages/language/test/parsing.test.ts:parses self-contained ideas with apostrophe contractions in body prose"], ["../../packages/language/test/naked-strings.test.ts"], ["../../packages/language/test/comment-in-string.test.ts:single-quoted URL in block body is naked prose"], ["../../crates/reqlan-parse/tests/lexer.rs:unbracketed_quoted_path_in_body_is_not_string"], ["../../crates/reqlan-parse/tests/parser.rs:unbracketed_quoted_path_is_not_a_file_reference"]10.3%
["../../packages/language/test/parsing.test.ts:keeps pipe characters in body prose as text"], ["../../packages/language/test/parsing.test.ts:parse extension context-scope.rq module"], ["../../packages/language/test/linking.test.ts:resolve wikilink to idea declaration in main.rq"]10.3%
["../../packages/language/test/parsing.test.ts:malformed from-as import keeps later ideas parseable"], ["../../packages/language/test/validating.test.ts:reports local diagnostic for from-as mistaken import"], ["../../packages/language/test/validating.test.ts:reports local diagnostic for unquoted from-import"]10.3%
["../../packages/language/test/parsing.test.ts:parse code snippet in block idea"], ["../../packages/language/test/parsing.test.ts:parse fenced code block in attribute value"], ["../../packages/language/test/parsing.test.ts:treats fenced rq example as opaque text"], ["../../packages/language/test/parsing.test.ts:treats fenced TypeScript braces as opaque for surrounding structure"], ["../../packages/language/test/parsing.test.ts:keeps later ideas after mid-line triple backticks"], ["../../packages/language/test/parsing.test.ts:parse rust_port.rq keeps ideas after comment_span_align fence prose"], ["../../packages/language/test/parsing.test.ts:parse mid-line triple backticks corpus without swallowing later ideas"], ["../../packages/language/test/references.test.ts:embedded file reference scan ignores fenced code blocks"], ["../../packages/language/test/references.test.ts:findCommentSpansInText does not treat mid-line ``` as a fence"], ["../../packages/language/test/langium-rust-parse-align.test.ts:fenced_file_example"], ["../../packages/language/test/langium-rust-parse-align.test.ts:mid_line_triple_backticks"], ["../../packages/language/test/comment-span-align.test.ts:mid-line triple backticks are not a fence"], ["../../packages/language/test/comment-span-align.test.ts:line-start triple backticks lex as CODE_FENCE and hide inner comments"], ["../../crates/reqlan-parse/tests/align.rs:fence_body_is_one_code_snippet_not_inner_refs"], ["../../crates/reqlan-parse/tests/align.rs:mid_line_triple_backticks_are_not_a_code_snippet"], ["../../crates/reqlan-parse/tests/lexer.rs:mid_line_triple_backticks_are_not_a_code_fence"], ["../../crates/reqlan-parse/tests/lexer.rs:line_start_triple_backticks_are_a_code_fence"], ["../../crates/reqlan-parse/tests/parser.rs:keeps_ideas_after_mid_line_triple_backticks"], ["../../crates/reqlan-index/tests/broken_references.rs:check_skips_file_refs_inside_inline_code_and_fences"], ["../../crates/reqlan-index/tests/golden_corpus.rs:opaque_file_examples_do_not_extract_inline_or_fenced_paths"], ["../../crates/reqlan-index/tests/golden_corpus.rs:mid_line_triple_backticks_keep_later_ideas"]10.3%
["../../packages/language/test/parsing.test.ts:parse dash and underscore delimited idea names"], ["../../crates/reqlan-parse/tests/parser.rs:parse_dash_and_underscore_delimited_idea_names"], ["../../packages/language/test/validating.test.ts:reports duplicate when local ideaset shares a local idea name"]10.3%
["../../packages/language/test/parsing.test.ts:parse list items as one-liners and anonymous blocks"], ["../../packages/language/test/parsing.test.ts:keeps inline parentheses in body prose as text"], ["../../packages/language/test/parsing.test.ts:keeps later ideas after nested @slides lists with mid-line @plan braces"], ["../../packages/language/test/parsing.test.ts:parse tutorials.rq nested @slides lists without parser errors"], ["../../crates/reqlan-index/tests/golden_corpus.rs:tutorials_rq_keeps_ideas_after_nested_slides_lists"]10.3%
["../../packages/language/test/parsing.test.ts:parse markdown links without treating label as a reference"], ["../../packages/language/test/parsing.test.ts:parse docs.rq markdown folder link"], ["../../packages/language/test/parsing.test.ts:markdown link labels are not treated as reference prefix context"], ["../../packages/language/test/references.test.ts:parses markdown link label and target from raw link text"], ["../../packages/language/test/references.test.ts:embedded file reference scan ignores markdown link labels"]10.3%
["../../packages/language/test/parsing.test.ts:parse name-only ideas without a body"], ["../../packages/language/test/parsing.test.ts:same-line braces after a name parse as a block"], ["../../crates/reqlan-index/tests/extract_parity.rs:one_liner_idea_body_populates_summary"], ["../../crates/reqlan-parse/tests/parser.rs:one_liner_body_does_not_continue_on_the_next_line"], ["../../crates/reqlan-parse/tests/parser.rs:parses_same_line_blocks_without_swallowing_later_ideas"]10.3%
["../../packages/language/test/parsing.test.ts:parse syntax-edge-cases.rq"], ["../../packages/language/test/comment-in-string.test.ts:isInsideLineFence treats only complete same-line fences as fences"], ["../../packages/language/test/comment-in-string.test.ts:quoted //this line in block body is not a line comment"], ["../../packages/language/test/comment-in-string.test.ts:backticked //this line in block body is not a line comment"], ["../../packages/language/test/comment-in-string.test.ts:unclosed backtick then // is a line comment"], ["../../packages/language/test/comment-in-string.test.ts:unclosed quote then // is a line comment"], ["../../packages/language/test/references.test.ts:ignores // inside complete backtick fences when locating line comments"], ["../../packages/language/test/references.test.ts:findCommentSpansInText treats unclosed fences as comments and closed fences as prose"], ["../../packages/language/test/references.test.ts:findCommentSpansInText skips /* inside complete backtick fences"], ["../../packages/language/test/comment-in-string.test.ts:backticked @reqlan/* in block body is not a block comment"], ["../../packages/language/test/comment-span-align.test.ts:backticked @reqlan/* is not a block comment"], ["../../packages/language/test/langium-rust-parse-align.test.ts:fencing_comments"], ["../../crates/reqlan-parse/tests/lexer.rs:backticked_slash_star_is_not_a_comment"], ["../../crates/reqlan-parse/tests/lexer.rs:quoted_slash_slash_in_body_is_not_a_comment"], ["../../crates/reqlan-parse/tests/lexer.rs:backticked_slash_slash_in_body_is_not_a_comment"], ["../../crates/reqlan-parse/tests/lexer.rs:unclosed_backtick_then_slash_slash_is_a_comment"], ["../../crates/reqlan-parse/tests/lexer.rs:unclosed_quote_then_slash_slash_is_a_comment"], ["../../crates/reqlan-index/src/rq_ignore.rs:does_not_treat_marker_inside_backticks_as_a_directive"]10.3%
["../../packages/language/test/parsing.test.ts:parse syntax.rq"], ["../../crates/reqlan-parse/tests/parser.rs:parse_syntax_rq"]10.3%
["../../packages/language/test/parsing.test.ts:parses a large import prelude without repeated full-document brace scans"], ["../../packages/language/test/parsing.test.ts:treats fenced TypeScript braces as opaque for surrounding structure"]10.3%
["../../packages/language/test/parsing.test.ts:parses a lone @ without a parser error and keeps later ideas"], ["../../packages/language/test/parsing.test.ts:still reports a syntax error when another line is invalid"], ["../../packages/language/test/validating.test.ts:does not report an extension error for a lone @"], ["../../crates/reqlan-parse/tests/lexer.rs:lone_at_is_hidden_whitespace"], ["../../crates/reqlan-parse/tests/parser.rs:lone_at_keeps_surrounding_ideas"], ["../../crates/reqlan-parse/tests/parser.rs:syntax_error_elsewhere_is_still_reported"]10.3%
["../../packages/language/test/parsing.test.ts:parses bracketed url references"], ["../../packages/language/test/parsing.test.ts:does not parse unbracketed urls as url references"], ["../../packages/language/test/linking.test.ts:url references produce document links and no missing diagnostics"], ["../../crates/reqlan-parse/tests/lexer.rs:bracketed_url_is_one_url_token"], ["../../crates/reqlan-parse/tests/parser.rs:bracketed_url_is_a_url_reference"]10.3%
["../../packages/language/test/parsing.test.ts:parses from-import example line inside an attribute block value"], ["../../packages/language/test/local-symbolic-links.test.ts:aliased from-import whose name contains the imported idea is one link"], ["../../crates/reqlan-parse/tests/parser.rs:from_import_records_each_token_span"], ["../../crates/reqlan-lsp/tests/parity.rs:from_import_tokens_link_independently"]10.3%
["../../packages/language/test/parsing.test.ts:parses top-level nameless braces without aborting later ideas"], ["../../packages/language/test/parsing.test.ts:treats fenced TypeScript braces as opaque for surrounding structure"], ["../../packages/language/test/validating.test.ts:warns on top-level nameless braces without invalidating later ideas"], ["../../crates/reqlan-parse/tests/parser.rs:parses_top_level_nameless_braces_without_aborting_later_ideas"], ["../../crates/reqlan-parse/tests/parser.rs:recovers_nameless_block"]10.3%
["../../packages/language/test/parsing.test.ts:parses valued attributes without a colon"], ["../../packages/language/test/parsing.test.ts:still accepts optional colon before attribute values"], ["../../crates/reqlan-index/tests/extract_parity.rs:indexes_scalar_list_block_and_flag_attribute_values"], ["../../crates/reqlan-index/tests/extract_parity.rs:indexes_scalar_list_block_and_flag_attribute_values"]10.3%
["../../packages/language/test/parsing.test.ts:treats mid-line @ as body text and line-start @ as attribute"], ["../../packages/language/test/parsing.test.ts:backslash before @ at line start keeps it as body text"], ["../../crates/reqlan-parse/tests/lexer.rs:at_only_at_line_start"]10.3%
["../../packages/language/test/path-resolve.test.ts:resolves import-root alias against the workspace folder"], ["../../packages/language/test/path-resolve.test.ts:leaves non-aliased relative paths document-relative"], ["../../packages/language/test/path-resolve.test.ts:matchImportRootAlias requires alias then slash"], ["../../packages/language/test/path-resolve.test.ts:loads importRoots list from nearest base config"], ["../../packages/language/test/path-resolve.test.ts:resolves using config importRoots mapping"], ["../../packages/language/test/path-resolve.test.ts:rewrite leaves aliased paths unchanged"], ["../../packages/language/test/completion.test.ts:completes import-root alias paths"], ["../../packages/language/test/config.test.ts:multiple importRoots map aliases to different roots"], ["../../packages/language/test/config.test.ts:longest alias wins when mappings overlap"], ["../../packages/language/test/config.test.ts:aliased path uses relative root from applying config"], ["../../packages/language/test/config.test.ts:aliased path uses workspace folder when root is omitted"], ["../../crates/reqlan-parse/src/path.rs:match_import_root_alias_requires_alias_then_slash"], ["../../crates/reqlan-parse/src/path.rs:resolves_default_alias_against_workspace_folder"], ["../../crates/reqlan-index/src/path_resolve.rs:locate_aliased_file_ref_joins_workspace_root"], ["../../crates/reqlan-index/src/path_resolve.rs:locate_uses_import_roots_from_applying_config"], ["../../crates/reqlan-index/tests/broken_references.rs:check_accepts_import_root_alias_file_refs"], ["../../crates/reqlan-index/tests/broken_references.rs:check_honours_import_roots_from_applying_config"], ["../../crates/reqlan-lsp/tests/parity.rs:import_root_alias_file_refs_match_check"], ["../../crates/reqlan-lsp/tests/parity.rs:import_root_config_file_refs_match_check"], ["../../packages/language/test/comment-reference-resolution.test.ts:creates a document link for an import-root aliased comment reference"], ["../../crates/reqlan-index/src/comment.rs:resolves_aliased_qualified_comment_path"]10.3%
["../../packages/language/test/references.test.ts:embedded file reference scan ignores inline code examples"], ["../../packages/language/test/comment-span-align.test.ts:backticked @reqlan/* is not a block comment"], ["../../packages/language/test/references.test.ts:embedded file reference scan ignores site showcase interlock inline example"], ["../../packages/language/test/ignore-error.test.ts:does not report file references inside inline code"], ["../../packages/language/test/parsing.test.ts:does not parse a backticked file-only line range as a bracket reference"], ["../../packages/language/test/langium-rust-parse-align.test.ts:inline_code_file_example"], ["../../packages/language/test/langium-rust-parse-align.test.ts:inline_code_file_only_line_range"], ["../../crates/reqlan-parse/tests/align.rs:inline_code_file_example_is_not_a_live_ref"], ["../../crates/reqlan-parse/tests/align.rs:inline_code_file_only_line_range_is_not_a_live_ref"], ["../../crates/reqlan-parse/tests/lexer.rs:backticked_bracketed_file_ref_is_one_inline_code_token"], ["../../crates/reqlan-index/tests/broken_references.rs:check_skips_file_refs_inside_inline_code_and_fences"], ["../../crates/reqlan-index/src/extract.rs:embedded_scan_skips_backticked_file_ref_with_line_range"], ["../../crates/reqlan-index/src/extract.rs:extract_skips_backticked_file_only_ref"], ["../../crates/reqlan-index/src/extract.rs:site_rq_does_not_index_backticked_interlock_path"], ["../../crates/reqlan-index/tests/broken_references.rs:sync_drops_stale_inline_code_file_refs_when_extract_version_changes"], ["../../crates/reqlan-index/tests/golden_corpus.rs:opaque_file_examples_do_not_extract_inline_or_fenced_paths"]10.3%
["../../packages/language/test/references.test.ts:parses L# line suffix from file reference strings"], ["../../packages/language/test/references.test.ts:parses :test name suffix from file reference strings"], ["../../packages/language/test/references.test.ts:keeps colons inside the test name suffix"], ["../../crates/reqlan-parse/src/path.rs:strips_test_name_and_line_suffix"], ["../../crates/reqlan-parse/src/path.rs:test_name_suffix_keeps_colons_in_the_title"], ["../../crates/reqlan-index/tests/broken_references.rs:check_strips_test_name_and_line_suffix_before_file_exists"], ["../../crates/reqlan-index/tests/broken_references.rs:check_accepts_test_names_that_contain_colons_from_nested_rq"], ["../../packages/language/test/linking.test.ts:document links resolve test file references to the matching test"], ["../../packages/language/test/path-resolve.test.ts:a climbing relative path resolves from an ancestor directory"], ["../../packages/language/test/path-resolve.test.ts:a file next to the document wins over an ancestor"]10.3%
["../../packages/language/test/references.test.ts:unquotes single-quoted reqlan string literals"], ["../../packages/language/test/parsing.test.ts:parse single-quoted import paths and idea names"]10.3%
["../../packages/language/test/testing.test.ts:each test file includes rq comment references to its requirements"]10.3%
["../../packages/language/test/validating.test.ts:allows local idea when import uses an alias"], ["../../packages/language/test/validating.test.ts:allows local idea when qualified import uses an alias"], ["../../packages/language/test/validating.test.ts:reports duplicate when local idea shares unaliased import binding"], ["../../packages/language/test/linking.test.ts:import idea reference resolves to imported file when local idea shares name"]10.3%
["../../packages/language/test/wildcard-references.test.ts"], ["../../packages/language/test/wildcard-references.test.ts:e2e: tokenize → parse → resolve → document link → definition → command args"], ["../../packages/language/test/wildcard-references.test.ts:e2e: ** path glob matches nested fixture files"], ["../../packages/language/test/wildcard-references.test.ts:e2e: imports.rq captures wildcard ideas with status and implementation"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:expands_wildcard_refs_to_one_edge_per_matching_idea"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:stores_wildcard_fan_out_as_wildcard_reference_kind"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:extract_indexed_document_fans_out_edges_for_matching_catalog_ideas"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:nested_path_glob_matches_catalog_ideas"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:imports_rq_extract_includes_webview_and_path_filter_ideas"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:indexer_and_graphical_graph_rq_capture_wildcard_edge_and_toggle_ideas"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:sync_persists_wildcard_reference_edges"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:stores_wildcard_fan_out_as_wildcard_reference_kind"]10.3%
["../../site/scripts/verify-static-export.mts"], ["../../packages/analytical/test/native-export-request.test.ts"], ["../../packages/analytical/test/load-native.test.ts"], ["../../packages/analytical/test/native-packaging.test.ts"], ["../../crates/reqlan-analytical/tests/export.rs:html_export_honours_graph_page_url_base_and_header_link"]10.3%
["../../site/src/components/ui/hover-border-gradient.test.ts"]10.3%
["../../site/src/content/assessment.test.ts"], ["../../site/src/lib/certificate-token.test.ts"]10.3%
["../../site/src/content/assessment.test.ts"], ["../../site/src/lib/certs-paths.test.ts"]10.3%
["../../site/src/content/contact.test.ts"]10.3%
["../../site/src/content/example.test.ts"], ["../../site/src/content/rq-snippets.test.ts"], ["../../site/scripts/validate-showcase-rq.mts"]10.3%
["../../site/src/content/example.test.ts:parses as valid reqlan"]10.3%
["../../site/src/content/featured.test.ts"]10.3%
["../../site/src/content/hero.test.ts"], ["../../site/src/components/HeroActions.test.ts"]10.3%
["../../site/src/content/install-actions.test.ts"], ["../../site/src/lib/package-manager.test.ts"]10.3%
["../../site/src/content/nav.test.ts"]10.3%
["../../site/src/content/quiz-sticker.test.ts"], ["../../site/src/components/QuizStickerTab.test.ts"]10.3%
["../../site/src/content/showcases.test.ts"], ["../../site/src/content/showcases.test.ts:gives each showcase its own file with rq comment references"]10.3%
["../../site/src/content/showcases.test.ts:broken-links shows reqlan check as a CI gate"]10.3%
["../../site/src/content/showcases.test.ts:story-codebase binds a story to source and tests"], ["../../site/src/content/showcases.test.ts:gives each showcase its own file with rq comment references"], ["../../site/scripts/validate-showcase-rq.mts"]10.3%
["../../site/src/lib/certs-paths.test.ts"], ["../../site/src/lib/certificate-token.test.ts"]10.3%
["../../site/src/lib/certs-paths.test.ts"], ["../../site/src/lib/certificate-token.test.ts"], ["../../site/src/content/assessment.test.ts"]10.3%
["../../site/src/lib/google-form-embed.test.ts"]10.3%
["../../site/src/lib/package-manager.test.ts"]10.3%
["../../site/src/lib/phonebook.test.ts"]10.3%
["../../site/src/lib/site-metadata.test.ts"], ["../../site/src/content/meta.test.ts"], ["../../site/scripts/verify-static-export.mts"]10.3%
["../../site/src/lib/tutorial-transport.test.ts"], ["../../site/src/components/TutorialPlayerShell.test.ts"]10.3%
["../crates/reqlan-index/tests/extract_parity.rs:block_idea_body_populates_summary_from_rich_text_parts"], ["../crates/reqlan-index/tests/extract_parity.rs:block_idea_body_populates_summary_from_rich_text_parts"], ["../crates/reqlan-index/tests/extract_parity.rs:one_liner_idea_body_populates_summary"]10.3%
["../crates/reqlan-index/tests/wildcard_reference_edges.rs:stores_wildcard_fan_out_as_wildcard_reference_kind"], ["../crates/reqlan-index/tests/wildcard_reference_edges.rs:expands_wildcard_refs_to_one_edge_per_matching_idea"], ["../crates/reqlan-index/tests/wildcard_reference_edges.rs:emits_unresolved_edge_when_catalog_has_no_matches"], ["../crates/reqlan-index/tests/wildcard_reference_edges.rs:sync_persists_wildcard_reference_edges"]10.3%
["../packages/analytical/test/base-discovery.test.ts:returns empty when no .reqlan exists"], ["../packages/analytical/test/base-discovery.test.ts:discovers base at workspace root"], ["../packages/analytical/test/application-memory.test.ts:defaults to <workspace>/.reqlan"]10.3%
["../packages/analytical/test/file-reference-resolve.test.ts"], ["../packages/language/test/linking.test.ts:empty file references produce document links and warning diagnostics"], ["../packages/language/test/linking.test.ts:folder file references resolve without reading the directory as a file"], ["../packages/language/test/references.test.ts:finds embedded file references in @tests lists"]10.3%
["../packages/analytical/test/file-reference-resolve.test.ts"], ["../packages/language/test/references.test.ts:finds rq: bracket comment references in line comments"], ["../packages/language/test/references.test.ts:finds rq: comment references in block comments"], ["../crates/reqlan-index/tests/code_file_index.rs:indexes_comment_references_from_non_rq_files"]10.3%
["../packages/cli/test/windows-esm-entry.test.ts:MCP bin converts the compiled entry with pathToFileURL"], ["../packages/mcp/test/server.test.ts:MCP surface is click, check, diff, completion_status, and prompt"]10.3%
["../packages/language/test/config.test.ts:returns undefined when no config exists"], ["../packages/language/test/config.test.ts:loads config from the owning base .reqlan"], ["../packages/language/test/path-resolve.test.ts:loads importRoots list from nearest base config"]10.3%
["../packages/language/test/linking.test.ts:resolve ideaset member forward reference"], ["../packages/language/test/linking.test.ts:resolve forward reference to later ideaset in the same file"], ["../packages/language/test/linking.test.ts:resolve namespace import references to files"], ["../packages/language/test/linking.test.ts:namespace import bracket reference links only the alias name"]10.3%
["../packages/language/test/linking.test.ts:resolve same-file bracket reference to local idea"], ["../packages/language/test/linking.test.ts:resolve forward reference to later idea in the same file"], ["../packages/language/test/linking.test.ts:same-file idea references produce document links"], ["../packages/language/test/linking.test.ts:cross-file imported idea references produce document links"], ["../packages/language/test/linking.test.ts:resolve ideaset-qualified bracket reference to member leaf not ideaset"], ["../crates/reqlan-index/tests/extract_parity.rs:qualified_ideaset_member_reference_targets_leaf_idea_not_ideaset"]10.3%
["../packages/language/test/linking.test.ts:resolve same-file bracket reference to local idea"], ["../packages/language/test/linking.test.ts:resolve wikilink to idea declaration in main.rq"], ["../packages/language/test/linking.test.ts:resolve namespace import references to files"]10.3%
["../packages/language/test/linking.test.ts:resolve wikilink to idea declaration in main.rq"], ["../packages/language/test/parsing.test.ts:keeps pipe characters in body prose as text"], ["../packages/language/test/references.test.ts:parses markdown link label and target from raw link text"], ["../packages/language/test/references.test.ts:embedded file reference scan ignores markdown link labels"]10.3%
["../packages/language/test/parsing.test.ts:parse dash and underscore delimited idea names"], ["../crates/reqlan-parse/tests/parser.rs:parse_dash_and_underscore_delimited_idea_names"]10.3%
["../packages/language/test/parsing.test.ts:parse example sub idea.rq"], ["../packages/language/test/parsing.test.ts:malformed from-as import keeps later ideas parseable"]10.3%
["../packages/language/test/parsing.test.ts:parse ontology.rq ideas"], ["../packages/language/test/linking.test.ts:resolve ideaset member forward reference"], ["../packages/language/test/linking.test.ts:resolve forward reference to later ideaset in the same file"]10.3%
["../packages/language/test/parsing.test.ts:parse ontology.rq ideas"], ["../packages/language/test/parsing.test.ts:parse one-liner ideas"], ["../crates/reqlan-index/tests/extract_parity.rs:block_idea_body_populates_summary_from_rich_text_parts"], ["../crates/reqlan-index/tests/extract_parity.rs:block_idea_body_populates_summary_from_rich_text_parts"], ["../crates/reqlan-index/tests/extract_parity.rs:one_liner_idea_body_populates_summary"]10.3%
["../packages/language/test/parsing.test.ts:parse syntax.rq"], ["../crates/reqlan-parse/tests/parser.rs:parse_syntax_rq"]10.3%
["../packages/language/test/parsing.test.ts:parse syntax.rq"], ["../crates/reqlan-parse/tests/parser.rs:parse_syntax_rq"], ["../crates/reqlan-index/tests/golden_corpus.rs:corpus_idea_names_match_langium_extract"]10.3%
["../packages/language/test/parsing.test.ts:parses bracketed url references"], ["../packages/language/test/parsing.test.ts:does not parse unbracketed urls as url references"], ["../packages/language/test/linking.test.ts:url references produce document links and no missing diagnostics"], ["../crates/reqlan-parse/tests/lexer.rs:bracketed_url_is_one_url_token"], ["../crates/reqlan-parse/tests/parser.rs:bracketed_url_is_a_url_reference"], ["../crates/reqlan-index/src/extract.rs:indexes_bracketed_url_as_url_reference"], ["../crates/reqlan-index/src/extract.rs:unbracketed_url_is_not_a_url_reference"], ["../crates/reqlan-index/tests/broken_references.rs:check_accepts_url_references"]10.3%
["../packages/language/test/parsing.test.ts:parses from-import example line inside an attribute block value"], ["../packages/language/test/linking.test.ts:resolve namespace import references to files"], ["../packages/language/test/linking.test.ts:namespace import bracket reference links only the alias name"]10.3%
["../packages/language/test/parsing.test.ts:parses valued attributes without a colon"], ["../packages/language/test/parsing.test.ts:treats mid-line @ as body text and line-start @ as attribute"], ["../crates/reqlan-index/tests/extract_parity.rs:indexes_scalar_list_block_and_flag_attribute_values"], ["../crates/reqlan-index/tests/extract_parity.rs:indexes_scalar_list_block_and_flag_attribute_values"]10.3%
["../packages/language/test/references.test.ts:embedded file reference scan ignores unbracketed quoted paths"], ["../packages/language/test/parsing.test.ts:does not parse unbracketed quoted paths as file references"], ["../packages/language/test/naked-strings.test.ts:does not emit STRING tokens for unbracketed quoted paths in body"], ["../packages/language/test/linking.test.ts:unbracketed quoted paths do not produce document links or missing-file diagnostics"], ["../packages/language/test/file-path-rewrite.test.ts:does not treat unbracketed quoted paths as embedded path references"], ["../crates/reqlan-parse/tests/lexer.rs:unbracketed_quoted_path_in_body_is_not_string"], ["../crates/reqlan-parse/tests/parser.rs:unbracketed_quoted_path_is_not_a_file_reference"], ["../crates/reqlan-index/src/extract.rs:unbracketed_quoted_path_is_not_a_file_reference"], ["../crates/reqlan-index/src/extract.rs:import_quoted_path_is_not_an_embedded_file_reference"]10.3%
["../packages/language/test/references.test.ts:finds rq: bracket comment references in line comments"], ["../packages/language/test/references.test.ts:finds rq: comment references in block comments"], ["../packages/language/test/linking.test.ts:comment references in source files resolve to rq ideas"], ["../crates/reqlan-index/tests/code_file_index.rs:indexes_comment_references_from_non_rq_files"], ["../packages/language/test/comment-reference-resolution.test.ts:creates a document link for an import-root aliased comment reference"], ["../packages/extension/test/comment-reference-path-context.test.ts:resolves @/ against the workspace folder for extension comment links"]10.3%
["../site/src/lib/phonebook.test.ts"], ["../site/src/content/contact.test.ts"]10.3%
["@/site/src/content/support.test.ts"], ["@/site/src/lib/support-graph-cola.test.ts"]10.3%
[mcp_server_test], ["../../../packages/mcp/test/server.test.ts:MCP surface is click, check, diff, completion_status, and prompt"]10.3%
[rust_fmt_tests], ["../../packages/analytical/test/rust-fmt-hook.test.ts:selects only staged crate rust sources"], ["../../packages/analytical/test/rust-fmt-hook.test.ts:runs cargo fmt --all in crates then restages the rust files"], ["../../packages/analytical/test/rust-fmt-hook.test.ts:CI formats crates and auto-commits on same-repo PRs"], ["../../packages/analytical/test/release-ci-gate.test.ts:release calls sequential CI before versioning"]10.3%
[workspace_index_tests], ["../../packages/analytical/src/index-store/workspace-index.ts"], ["../../packages/analytical/test/workspace-index.test.ts:soft sync drops rqignored paths supplied by base discovery"], ["../../crates/reqlan-index/tests/sync.rs:soft_sync_skips_unchanged_mtime"], ["../../crates/reqlan-index/tests/sync.rs:hard_rebuild_reindexes_despite_mtime"]10.3%

Ideas with this attribute

IdeaValueStatusTagsSummaryKatz
active_base_switch["../../packages/analytical/test/base-registry-catchup.test.ts:ensureBaseReady opens and soft-syncs an uninitialized base"], ["../../packages/analytical/test/base-registry-catchup.test.ts:checkStaleAll heals an uninitialized base"], ["../../packages/analytical/test/base-registry-catchup.test.ts:deactivate returns to uninitialized so a base can be reopened"], ["../../packages/analytical/test/sqlite-artifact-release.test.ts:BaseRegistry releaseArtifacts closes handles but keeps descriptors"]doneChanging the active base is a **pointer swap** onto a per-base `WorkspaceIndex` / store. - Do **not** await soft-sync, hard-rebuild, or a full `.rq` walk on the switch call itself. - Host surfaces rebind views to the newly active store ( status snapshot, tables, context panes ) immediately. - If the selected base is not yet ready, show its readiness / progress and **schedule** the normal activate catch-up ( open if needed, then one soft sync ) fire-and-forget — same path as ["../indexer/indexer.rq".triggers] / ["../extension/index-host/graph-analysers.rq".indexing_trigger_open], not a special switcher rebuild. - Idle staleness checks only touch bases that are already open; they must not reopen every discovered base ( ["../extension/index-host/sqlite-artifact-lifecycle.rq".release_when_idle] ). - Open failures stay isolated per base so one bad base cannot leave siblings stranded in `uninitialized`. - Editor-follow must not overwrite a user pin on the same refresh that applies the selection. - Inactive bases release SQLite artifacts when the active pointer moves away ( ["../extension/index-host/sqlite-artifact-lifecycle.rq".sqlite_artifact_lifecycle] ). Surfaces: activity bar ["../extension/local-context/activitybar-panels/workspace.rq".workspace_base_picker], Ideas Summary ["../extension/workspace-summary/ideas_summary/base-scope.rq".ideas_summary_base_scope]. Implemented by [editor_index_adapter] ( `setActiveBaseId` / `scheduleBaseCatchUp` ); engine: [base_registry] `ensureBaseReady` / `releaseArtifacts`, [workspace_index] `ensureReady` / `deactivate`.0.093
base["../../packages/analytical/test/base-discovery.test.ts:returns empty when no .reqlan exists"], ["../../packages/analytical/test/base-discovery.test.ts:discovers base at workspace root"], ["../../packages/analytical/test/base-discovery.test.ts:skips node_modules and does not treat .reqlan as a walkable base root"], ["../../packages/analytical/test/base-discovery.test.ts:isPathInsideOrEqual treats Windows drive paths as case-insensitive"], ["../../packages/analytical/test/application-memory.test.ts:defaults to <workspace>/.reqlan"]A 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_configuration["../../packages/language/test/config.test.ts:returns undefined when no config exists"], ["../../packages/language/test/config.test.ts:loads config from the owning base .reqlan"], ["../../packages/language/test/config.test.ts:loads config from an ancestor base"], ["../../packages/language/test/config.test.ts:nearest base config wins over farther ones"], ["../../packages/language/test/config.test.ts:owning base without config does not inherit parent"], ["../../packages/language/test/path-resolve.test.ts:loads importRoots list from nearest base config"]Base 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_initialisation_ignore["../../packages/analytical/test/create-base.test.ts:seeds .reqlan/.gitignore that excludes sqlite artifacts"], ["../../crates/reqlan-index/src/ignore.rs:create_base_seeds_gitignore_for_sqlite_artifacts"]doneNew bases seed `<base>/.reqlan/.gitignore` so Git does not track SQLite application-memory files. Patterns cover the ideas index ( [base_ownership] ), the diagnostics store ( [app_memory_doc.index_diagnostics_store] ), and SQLite sidecars ( `*.sqlite`, `*.sqlite-journal`, `*.sqlite-shm`, `*.sqlite-wal` ). This file is Git ignore for `.reqlan/`. Path filters for discovery stay in `.rqignore` ( [extension_configuration.configuration_rqignore] / [app_memory_doc.rqignore] ). Written by [create_base_impl] as part of [base_initialisation] / ["../extension/host/installation.rq".base_installation].0.182
base_nesting["../../packages/analytical/test/base-discovery.test.ts:discovers nested bases and excludes child files from parent ownership"], ["../../packages/analytical/test/base-discovery.test.ts:baseForPath picks longest matching root"]Bases 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_ownership["../../packages/analytical/test/application-memory.test.ts:defaults to <workspace>/.reqlan"], ["../../packages/analytical/test/application-memory.test.ts:honours storagePath override"]Each 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_onboarding["../../packages/analytical/test/create-base.test.ts:creates .reqlan marker and reports created"], ["../../packages/analytical/test/base-registry-refresh.test.ts:refresh after createBase registers the new base"]When 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_context["../../packages/analytical/test/base-discovery.test.ts:baseForPath picks longest matching root"], ["../../packages/analytical/test/base-discovery.test.ts:selectDefaultBase prefers cwd containment"]The **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_environment["../../packages/analytical/test/base-discovery.test.ts:discovers nested bases and excludes child files from parent ownership"], ["../../packages/analytical/test/base-discovery.test.ts:baseForPath picks longest matching root"], ["../../packages/analytical/test/base-discovery.test.ts:selectDefaultBase prefers cwd containment"]Analytical 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
refresh_rediscovers_bases["../../packages/analytical/test/base-registry-refresh.test.ts:refresh rediscovers a base created after an empty discovery"], ["../../packages/analytical/test/base-registry-refresh.test.ts:refresh rediscovers a nested base added after first discovery"], ["../../packages/analytical/test/base-registry-refresh.test.ts:refresh after createBase registers the new base"], ["../../packages/extension/test/refresh-rediscovers-bases.test.ts:IndexService.syncWorkspace calls registry.refresh"], ["../../packages/extension/test/refresh-rediscovers-bases.test.ts:IndexService.createBase calls createBase then registry.refresh"], ["../../packages/extension/test/refresh-rediscovers-bases.test.ts:reqlan.refreshIndex command uses syncWorkspace"]doneManual Refresh ( command `reqlan.refreshIndex`, activity-bar / Ideas Summary Refresh buttons ) and Clear & rebuild must **always rediscover** `.reqlan` markers under workspace roots before soft-sync or rebuild. Do not skip discovery when bases are already registered — a new nested or sibling base created on disk must appear after Refresh. Discovery and registration live in [base_registry] ( `refresh` → `rediscover` → optional `ensureBaseReady` for the active base ). The extension adapter ( [editor_index_adapter] ) calls that analytical API; it must not invent a parallel discovery walk. Create Base follows the same refresh path after [create_base_impl] so the new marker is visible immediately ( [create_base_onboarding] ). Related: [multi_base_environment], ["../extension/index-host/graph-analysers.rq".indexing_trigger_manual], ["../extension/index-host/sqlite-artifact-lifecycle.rq".event_driven_base_access].0.075
cli_package["../../packages/cli/test/runtime-engine.test.ts:CLI runtime opens AnalysisApi through the core engine"], ["../../packages/cli/test/runtime-engine.test.ts:CLI commands do not statically import Langium or @reqlan/language"], ["../../packages/cli/test/runtime-engine.test.ts:search does not load the Langium language module"], ["../../packages/analytical/test/native-headless-entry.test.ts:native module graph does not value-import Langium or @reqlan/language"]`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
init["../../packages/analytical/test/create-base.test.ts:creates .reqlan marker and reports created"], ["../../packages/analytical/test/create-base.test.ts:is idempotent when marker already exists"], ["../../packages/cli/test/windows-esm-entry.test.ts:CLI bin loads the compiled entry via an ESM file URL helper"]doneThe cli should be able to initialise a new [base]. Creates `<path>/.reqlan/` ( empty directory is a valid marker ), matching [create_base_onboarding]. Headless helper lives in `@reqlan/analytical` so CLI and extension share one create-base path.0.162
pnpm_extra_args["../../packages/cli/test/argv.test.ts:drops a lone end-of-options marker"], ["../../packages/cli/test/check.test.ts:accepts skip-target after a pnpm end-of-options marker"]done`pnpm run <script> -- <flags>` inserts a lone `--` between the script body and the extra flags. Clipanion treats `--` as end of options, so `reqlan check -- --skip-target glob` reads `--skip-target` as a command and fails. The CLI drops lone `--` tokens from argv before Clipanion runs, so package-manager extra args stay flags. Related: [commands] ["../core_analysis/check.rq".check_meta_implementation]0.142
windows_esm_entry["../../packages/cli/test/windows-esm-entry.test.ts:does not treat a Windows drive letter as a URL scheme"], ["../../packages/cli/test/windows-esm-entry.test.ts:CLI bin loads the compiled entry via an ESM file URL helper"], ["../../packages/cli/test/windows-esm-entry.test.ts:MCP bin converts the compiled entry with pathToFileURL"]doneNode's ESM loader on Windows requires `file://` URLs for absolute dynamic `import()`. A native path such as `C:\...\out\main.js` is read as protocol `c:` and crashes every command, including `init`. `bin/cli.js` converts the compiled entry with `fsPathToEsmSpecifier` ( `pathToFileURL` ). The MCP stdio entry ["../../packages/mcp/bin/mcp.js"] uses the same `pathToFileURL` conversion.0.083
agent_advisory["../../packages/cli/test/click.test.ts:click command emits session and unique context"]doneAgents must pass the [click_session] ID ( `sessionKey` ) to the next click action. This keeps one agent thread on the same session so a revisit can expand connected content and so ranking can use session distance. MCP tool text states this rule and the unique / ambiguous / search paths clearly ( [mcp_server] `click` ).0.101
click["../../crates/reqlan-analytical/tests/click.rs:click_returns_unique_idea_without_edges"], ["../../crates/reqlan-analytical/tests/click.rs:click_outbound_lists_content_refs_only"], ["../../crates/reqlan-analytical/tests/click.rs:click_accepts_file_path_as_one_file_node"], ["../../crates/reqlan-analytical/tests/click.rs:click_revisit_returns_connected_content"], ["../../crates/reqlan-analytical/tests/click.rs:click_falls_through_to_search_when_nothing_matches"], ["../../crates/reqlan-analytical/tests/click.rs:click_ranks_ambiguous_names_by_session_distance"], ["../../packages/analytical/test/click.test.ts:click API returns session key and unique then revisit"], ["../../packages/cli/test/click.test.ts:click command emits session and unique context"]doneThe [click_ontology] function returns compact local context for one target. Input: an idea name, a `path#idea` ref, a `.rq` file path, or an indexed code file ( [click_input], [click_code_file] ). Resolution uses [click_ambiguity]: no match uses search; more than one match is ranked; one match uses [click_output]. Optional [click_max_detail] flags cap how many names and bodies are listed. Optional `sessionKey` continues a [click_session]. A second click on a centre already clicked in that session returns the connected content ( [click_session] ). Surfaces: CLI `reqlan click` ( [click_cli] ), MCP `click` ( [mcp_server] ), and [native_analysis_api] `click`. MCP search and retrieval use this tool only ( ["../extension/agent/skills-and-mcp.rq".mcp_click_retrieval] ). Engine: [click_rust] on ["./cli_package.rq".architecture] / ["../core_analysis/rust_port.rq".analytical_rust_port]. Related: [function_parity], [commands], [agent_advisory], [click_session], [click_input], [click_max_detail], [click_output].0.200
click_ambiguity["../../crates/reqlan-analytical/tests/click.rs:check_name_ambiguity_classifies_none_unique_and_ambiguous"], ["../../crates/reqlan-analytical/tests/click.rs:click_prints_file_when_name_is_ambiguous"], ["../../crates/reqlan-analytical/tests/click.rs:click_ambiguous_code_file_basename"]doneEngine function that classifies a name or target as none, unique, or ambiguous. A name is ambiguous when more than one indexed idea or indexed file shares that exact name. Names are unique inside one file ( [idea_name] ); ambiguity is across files. `path#idea` and a full indexed path are unique when that record exists. Click uses this function to choose the [click_input] path and to decide when [click_output] prints a file path next to a name. Outbound [wildcard_reference] targets are ambiguous: print their matching paths. Surfaces: AnalysisApi `checkNameAmbiguity` ( engine ). Click must call it. CLI / MCP exposure is not required.0.103
click_code_file["../../crates/reqlan-analytical/tests/click.rs:click_code_file_returns_backlinks_and_comment_refs"], ["../../crates/reqlan-analytical/tests/click.rs:click_ambiguous_code_file_basename"]doneAn indexed code file is a first-class click target ( [index_code_files], [referenced_files] ). Click accepts the same path forms as [file_search] ( relative path, basename when unique ). Unique output for a code file: - the file path ( no idea body ) - count and names of backlinks: ideas with a [file_reference] to this file; print the idea file when the name is ambiguous - count and names of [comment_reference] targets ( `comment_link` from this file ); print the idea file when the name is ambiguous - siblings do not apply Data is the same indexed edges as [file_related_requirements].0.195
click_input["../../crates/reqlan-analytical/tests/click.rs:click_returns_unique_idea_without_edges"], ["../../crates/reqlan-analytical/tests/click.rs:click_accepts_file_path_as_one_file_node"], ["../../crates/reqlan-analytical/tests/click.rs:click_falls_through_to_search_when_nothing_matches"], ["../../crates/reqlan-analytical/tests/click.rs:click_ranks_ambiguous_names_by_session_distance"], ["../../crates/reqlan-analytical/tests/click.rs:click_omits_hops_when_session_has_no_ideas"]doneAccept any of: - idea name ( trimmed optional surrounding brackets `[name]` ) - `path#idea` ( indexed file URI + idea name ) — this form is unique - `.rq` file path — the file is one centre, not every idea in the file - indexed code file path ( [click_code_file] ) Resolution uses [click_ambiguity] after the same ref normalisation as ( ["../core_analysis/search.rq".contextual_search] / `resolve_search_context_refs` ). When no centre matches, click uses [fuzzy_search] ( and [file_search] ) with the target as the query and returns those hits. Do not return an empty slice. When more than one centre matches, and the [click_session] already has ideas, rank the matches by undirected hop distance from those ideas ( [idea_graph_distance] / [contextual_search] ). Nearer ranks first. Put the hop count on each candidate. When there is no session key, or the session has no ideas yet, do not calculate hop distance. Do not print hops. Rank by name and file path. On the search path, rank by [fuzzy_search] score only. When exactly one centre matches, return [click_output]. Always return or create a [click_session] key.0.156
click_max_detail["../../crates/reqlan-analytical/tests/click.rs:click_caps_lists_and_reports_omitted"], ["../../crates/reqlan-index/src/path_resolve.rs:click_list_limits_read_config"], ["../../packages/language/test/config.test.ts:loads click list caps from applying config"], ["../../packages/language/test/config.test.ts:schema file documents click maxSessions"]doneFlags that cap how many names and bodies click lists. Invalid or missing values use the default. Values less than 1 use 1. Defaults live in `.reqlan/config.json` under `click` ( [configuration_location], [configuration_schema_file] ). CLI and MCP flags override config. - `maxBacklinks` / `--max-backlinks` / `click.maxBacklinks` — first n backlink names in [click_output], then " + m more ". - `maxSiblings` / `--max-siblings` / `click.maxSiblings` — first n sibling names, then " + m more ". - `maxOutbound` / `--max-outbound` / `click.maxOutbound` — first n outbound names or paths, then " + m more ". - `maxCandidates` / `--max-candidates` / `click.maxCandidates` — search hits and ranked ambiguous matches. The default for each list is `click.listLimit` in ["../../packages/analytical/src/core/defaults.json"]. `maxDetail` / `--max-detail` is the old hop-depth for a neighbourhood dump. Unique [click_output] does not use hop depth. The flag is still accepted and ignored on the unique path.0.122
click_output["../../crates/reqlan-analytical/tests/click.rs:click_returns_unique_idea_without_edges"], ["../../crates/reqlan-analytical/tests/click.rs:click_outbound_lists_content_refs_only"], ["../../crates/reqlan-analytical/tests/click.rs:click_prints_file_when_name_is_ambiguous"], ["../../crates/reqlan-analytical/tests/click.rs:click_caps_lists_and_reports_omitted"], ["../../crates/reqlan-analytical/tests/click.rs:click_revisit_returns_connected_content"], ["../../packages/analytical/test/click.test.ts:click API returns session key and unique then revisit"], ["../../crates/reqlan-analytical/tests/click.rs:click_omits_hops_when_session_has_no_ideas"]doneThe result always includes `sessionKey` ( [agent_advisory] ). The result does not include an `edges` list. Links are implied by the lists below. Shape depends on [click_input]: Unique ( one centre ): - the idea ( or file ) and its content ( indexed unmarked body / summary ) - count of outbound links from that content only: idea refs and [file_reference] that occur in the unmarked body. Do not list refs that occur only in `@tests`, `@implementation`, or `@todo`. Do not list [comment_reference] code files as outbound. List names. When [click_ambiguity] says the name is ambiguous, print the file path with the name. File names are unquoted basenames. - count of backlinks and the first n names ( [click_max_detail] ); print the file when the name is ambiguous or shared; then " + m more " for the remainder - count of siblings ( same [ideaset] / file ), not the ideas named in the content, and the first n names, with file when the name is ambiguous or shared - for a code-file centre, see [click_code_file] Ambiguous ( more than one match ): ranked candidate names with file paths. Include hop distance only when the session has prior ideas. No idea bodies. Cap with `maxCandidates`. Search ( no exact match ): [fuzzy_search] / [file_search] hits. Cap with `maxCandidates`. Revisit: see [click_session]. Show content of the connected nodes, not the centre body again.0.117
click_session["../../crates/reqlan-analytical/tests/click.rs:click_revisit_returns_connected_content"], ["../../crates/reqlan-analytical/tests/click.rs:content_hash_change_allows_resurface"], ["../../crates/reqlan-analytical/tests/click.rs:session_cache_evicts_by_count_and_last_touched"]doneClick sessions live in SQLite under [application_memory] as `click-sessions.sqlite` ( sibling of `ideas-index.sqlite`; not deleted by ideas-index rebuild ). Each session has a stable `sessionKey`. Sessions are keyed against ideas. Each surfaced idea stores a fingerprint of its name, summary, status, and tags. When that fingerprint changes, the idea may resurface on the next click. Record clicked centres ( unique or revisit targets ) separately from names that were only listed. When the target is a centre already clicked in this session, return the content of the connected nodes ( outbound, backlinks, and siblings that the first click listed ), capped by [click_max_detail]. Do not repeat the centre body. Do not return an empty suppressed slice. Skip a connected body that this session already showed as content, unless its fingerprint changed. Session cache size is [click_session_limit]. Eviction uses last-touched order: when the store exceeds the limit, drop the least recently touched sessions first. Touch the active session on every successful click. Path helper: ["../../packages/analytical/src/core/application-memory.ts"] / [click_sessions_rust]. Layout: ["../indexer/sidecars.rq".reqlan_directory_layout].0.225
click_session_limit["../../crates/reqlan-analytical/tests/click.rs:max_sessions_reads_base_config"], ["../../crates/reqlan-analytical/tests/click.rs:session_cache_evicts_by_count_and_last_touched"], ["../../packages/language/test/config.test.ts:schema file documents click maxSessions"], ["../../packages/language/test/config.test.ts:loads click.maxSessions from applying config"]doneMaximum stored click sessions per base is `click.maxSessions` in ["../../packages/analytical/src/core/defaults.json"]. Configure with `click.maxSessions` in `.reqlan/config.json` ( [configuration_location], [configuration_schema_file] ). Invalid or missing values use that default. Values below `click.minimum` use `click.minimum`. Eviction is by session count and last-touched time ( [click_session] ). Count caps for one click result are [click_max_detail], not this limit.0.070
diff["../../crates/reqlan-analytical/tests/diff.rs:created_idea_is_listed_without_the_unchanged_idea"], ["../../crates/reqlan-analytical/tests/diff.rs:modified_body_is_modified"], ["../../crates/reqlan-analytical/tests/diff.rs:attribute_change_is_modified"], ["../../crates/reqlan-analytical/tests/diff.rs:deleted_idea_is_deleted"], ["../../crates/reqlan-analytical/tests/diff.rs:line_shift_is_not_a_change"], ["../../crates/reqlan-analytical/tests/diff.rs:one_argument_compares_with_head"], ["../../crates/reqlan-analytical/tests/diff.rs:tilde_count_matches_head_tilde"], ["../../crates/reqlan-analytical/tests/diff.rs:branch_against_head_and_two_branches"], ["../../crates/reqlan-analytical/tests/diff.rs:pending_unstaged_staged_and_layered_edits"], ["../../crates/reqlan-analytical/tests/diff.rs:clean_tree_compares_head_with_parent_and_ignores_non_rq"], ["../../crates/reqlan-analytical/tests/diff.rs:head_without_parent_lists_current_ideas_as_created"], ["../../crates/reqlan-analytical/tests/diff.rs:moved_idea_reports_both_paths"], ["../../crates/reqlan-analytical/tests/diff.rs:ambiguous_name_does_not_move"], ["../../crates/reqlan-analytical/tests/diff.rs:renamed_idea_is_deleted_and_created"], ["../../crates/reqlan-analytical/tests/diff.rs:same_revision_is_empty"], ["../../crates/reqlan-analytical/tests/diff.rs:missing_repository_and_revision_are_errors"], ["../../crates/reqlan-analytical/tests/diff.rs:implicit_targets_report_resolved_labels"], ["../../packages/cli/test/diff.test.ts:lists a created idea and omits the unchanged idea"], ["../../packages/cli/test/diff.test.ts:one argument matches an explicit HEAD on the right"], ["../../packages/cli/test/diff.test.ts:tilde count matches HEAD~N"], ["../../packages/cli/test/diff.test.ts:compares a branch with HEAD and with another branch"], ["../../packages/cli/test/diff.test.ts:pending edits use the worktree, including a later unstaged layer"], ["../../packages/cli/test/diff.test.ts:a clean tree compares HEAD~1 with HEAD and ignores a non-rq edit"], ["../../packages/cli/test/diff.test.ts:a missing repository or revision exits 2"]doneCompare ideas in two git snapshots. The key is the file path plus the [idea_name]. The command reads `.rq` files from git and parses each snapshot. It does not read or write the ideas index. Line position does not count. The same body and attributes at a different line are unchanged. Content is the idea body plus its attributes. Change kinds: - created — the key exists only on the right snapshot - deleted — the key exists only on the left snapshot - modified — the key exists on both snapshots and the content differs - moved — the name exists in exactly one file on each side, the paths differ, and the content is the same The same name in more than one file on one side stays on the path-plus-name key. A renamed idea is deleted plus created. Unchanged ideas are omitted. A reference-only edit stays modified. No arguments: if any `.rq` path is staged, unstaged, or untracked and not gitignored, the left side is `HEAD` and the right side is that pending snapshot. Otherwise the left side is `HEAD~1` and the right side is `HEAD`. A non- `.rq` change does not select the pending snapshot. One argument: that revision against `HEAD`. Two arguments: the first revision against the second. A target is a branch, a commit, `HEAD`, `~N` ( `HEAD~N` ), or `<rev>~N`. The pending snapshot uses the working-tree file for an unstaged edit, the index blob when the working tree matches `HEAD`, and the working-tree file when a path is both staged and unstaged. An untracked `.rq` file that git does not ignore is included. If `HEAD` has no parent, the left snapshot is empty and every idea on `HEAD` is created. A missing revision or a directory that is not a git repository is an error. Exit status is 2. A successful diff exits 0, including an empty diff. When a side is filled by a default, the human CLI and [diff_webview] print a header `Comparing <from> -> <to>` before the rows. Explicit two-argument runs omit that header. `--json` and MCP stay a row array only. Surfaces: CLI `reqlan diff` ( [commands] ), MCP [skills_and_mcp.mcp_diff], and [diff_webview]. Engine: ["../../crates/reqlan-analytical/src/diff.rs"]. Git spawns stay hidden ( [consumption_silence] ). Related: [architecture] [function_parity] [idea] [idea_reference] [diff_verbosity] [diff_cli_color]0.163
diff_cli_color["../../packages/cli/test/diff.test.ts:color is opt-in when stdout is not a terminal"]doneColor the human text when stdout is a terminal and `NO_COLOR` is unset. `--color` forces color. `--no-color` forces plain text. `--json` is never colored. Created and added lines are green. Deleted and removed lines are red. Modified is yellow. Moved is cyan.0.061
diff_verbosity["../../crates/reqlan-analytical/tests/diff.rs:summary_json_omits_references_and_text"], ["../../crates/reqlan-analytical/tests/diff.rs:reference_verbosity_lists_added_and_removed_names"], ["../../crates/reqlan-analytical/tests/diff.rs:text_verbosity_returns_before_and_after_body"], ["../../crates/reqlan-analytical/tests/diff.rs:text_verbosity_includes_attributes"], ["../../packages/cli/test/diff.test.ts:verbosity flags and JSON omit unused fields"], ["../../packages/mcp/test/server.test.ts:diff returns created JSON and text bodies"], ["../../packages/extension/test/diff-webview.test.ts:references lists added and removed names and hides the body"], ["../../packages/extension/test/diff-webview.test.ts:text shows the before and after body"]doneThree levels. The default is summary. CLI: `--verbosity summary|references|text`, or `-v` / `-vv`. MCP and [diff_webview] use the same three values. - summary — change kind, idea name, and file. `fromFile` only for moved. - references — summary, plus [idea_reference] targets added on the right and removed from the left. Order each list by name. Omit a target that is on both sides. - text — summary, plus the body and attributes before and after. Created shows the right side. Deleted shows the left side. Modified shows both. Moved has no text change. Do not list reference names at this level. Attributes stay inside modified. The references level does not print attribute text. The text level prints body lines, then attribute lines as `@name` / `@name value`. `--json` omits `references` and `text` at summary. It adds `references` at references only. It adds `text` at text only.0.071
diff_webview["../../packages/extension/test/diff-webview.test.ts:a created row uses the added theme token and hides the body"], ["../../packages/extension/test/diff-webview.test.ts:references lists added and removed names and hides the body"], ["../../packages/extension/test/diff-webview.test.ts:text shows the before and after body"], ["../../packages/extension/test/diff-webview.test.ts:modified and moved map to their git decoration classes"]doneCommand palette title Diff Ideas, category reqlan, id `reqlan.diffIdeas` ( [features_commands.command_palette] ). The panel takes the same two targets and the same verbosity as [diff]. Controls sit in a sticky themed strip: From, To, Detail, Diff. Inputs and the primary button use editor input and button theme tokens. Enter in a control runs Diff. The panel runs once on open with empty targets. Each row uses the editor git decoration colors for created, deleted, and modified, and a distinct color for moved. A row shows kind, idea name, and path as separate fields. Moved shows both paths. The references level lists added and removed reference names. The text level shows monospaced before and after body blocks; modified uses a two-column layout when width allows. Empty results say there are no idea changes. Errors use validation theme colors. Diffing disables the Diff control and shows a loading status. The panel calls the shared engine. It does not parse git output. When a side uses a default, the panel shows the same `Comparing <from> -> <to>` header as the CLI under the strip.0.083
persistence_tiers["../../packages/extension/test/graph-ui-state.test.ts"], ["../../packages/extension/test/onboarding-state.test.ts"]doneThree persistence tiers — pick the shallowest that matches lifetime: 1. `acquireVsCodeApi().getState` / `setState` — ephemeral webview session ( pane expand / heights, active tab ). 2. `ExtensionContext.workspaceState` — durable UI prefs shared across reloads ( graph / table UI keys under `reqlan.ideasSummary.*`, optionally per-base ). Normalize + default on read ( `normalizeGraphUiState` / table defaults ); never trust raw JSON shape. 3. `ExtensionContext.globalState` — install / user-level flags ( e. g. onboarding ), not pane view-models. Debounce persist posts ( ~ 200 – 250 ms ) when UI controls churn. Related: [webview_app_state].0.050
webview_app_state["../../packages/extension/test/graph-ui-state.test.ts"]doneComplex webviews ( activity bar, Ideas Summary ) own a single `AppState` class in `state/app.svelte.ts`. Fields that drive UI are Svelte 5 `$state` properties on that class; side effects and host I / O are methods. Export one module singleton ( `export const app = new AppState()` ) and inject it via [svelte_app_context]. Do not use `svelte/store` writable / readable stores for new UI, and do not put zustand inside webview code ( [zustand_boundary] ). Simple panels ( export form, onboarding, index diagnostics ) may keep `$state` on the root `App.svelte` instead of a separate AppState module when the surface is a single form / flow. Related: ["../extension/workspace-summary/ideas_summary/webview.rq".table_column_filters] `$derived` binding rule; ["../extension/workspace-summary/ideas_summary/graphical_graph.rq".graph_ui_persistence].0.070
mcp_package["../packages/cli/test/windows-esm-entry.test.ts:MCP bin converts the compiled entry with pathToFileURL"], ["../packages/mcp/test/server.test.ts:MCP surface is click, check, diff, completion_status, and prompt"]`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
check["../../crates/reqlan-index/tests/broken_references.rs:skips_idea_and_comment_refs_on_rq_ignore_error_lines"], ["../../crates/reqlan-index/tests/broken_references.rs:check_reports_missing_file_refs_and_skips_existing"], ["../../crates/reqlan-index/tests/broken_references.rs:check_reports_qualified_reference_to_a_missing_file"], ["../../crates/reqlan-index/tests/broken_references.rs:check_accepts_qualified_reference_when_the_file_exists"], ["../../crates/reqlan-index/tests/broken_references.rs:check_reports_qualified_reference_to_a_missing_idea"], ["../../crates/reqlan-index/tests/broken_references.rs:check_reports_namespace_qualified_reference_to_a_missing_idea"], ["../../crates/reqlan-index/tests/broken_references.rs:check_skips_qualified_missing_idea_on_rq_ignore_error"], ["../../crates/reqlan-index/tests/broken_references.rs:check_strips_test_name_and_line_suffix_before_file_exists"], ["../../crates/reqlan-index/tests/broken_references.rs:check_accepts_test_names_that_contain_colons_from_nested_rq"], ["../../crates/reqlan-index/tests/broken_references.rs:check_skips_same_file_idea_refs_and_reports_true_missing"], ["../../crates/reqlan-index/tests/broken_references.rs:check_accepts_import_root_alias_file_refs"], ["../../crates/reqlan-analytical/tests/broken_references.rs:analysis_api_lists_broken_refs_with_glob_and_comments"], ["../../packages/cli/test/check.test.ts:checks files from two globs and one file outside them"], ["../../packages/cli/test/check.test.ts:reports unresolved idea, comment, and file refs and exits 1"], ["../../packages/cli/test/check.test.ts:reports unresolved imports and exits 1"], ["../../crates/reqlan-index/tests/broken_references.rs:check_reports_a_malformed_comment_reference"], ["../../crates/reqlan-index/tests/broken_references.rs:check_reports_missing_import_path"], ["../../crates/reqlan-index/tests/broken_references.rs:check_reports_missing_imported_idea"], ["../../packages/cli/test/check.test.ts:exits 0 when there are no issues"], ["../../packages/cli/test/check.test.ts:quotes source paths that contain spaces"], ["../../packages/cli/test/check.test.ts:orders json rows by missing target"], ["../../packages/cli/test/format-broken-refs.test.ts:quotes paths that contain spaces"], ["../../crates/reqlan-index/tests/broken_references.rs:check_orders_issues_by_missing_target"], ["../../crates/reqlan-index/tests/broken_references.rs:check_warns_when_a_wildcard_matches_zero_or_one_idea"], ["../../packages/mcp/test/server.test.ts:check returns JSON issue rows"]done`reqlan check` should run perform the following checks: - ensure all rq [reference] point to real nodes, unless rq ignored with [comment_reference_ignore]. - this tests rqcomments point to real parts of the namespace, that code references exist, and that rq references exists. - report unresolved imports: [check_unresolved_imports]. - report a comment reference with invalid syntax: [code_comment_syntax_errors]. - report a qualified reference whose file is not on disk: [check_qualified_missing_file]. - report a qualified reference whose `.rq` file does not declare the idea: [check_qualified_missing_idea]. - it should really just be a wrapper of the [index] and return the issues ( as a pipe, terminal output, or json ). Issue order: [check_order_by_target]. Sparse wildcards: [check_wildcard_sparse] via flags [check_wildcard_zero] and [check_wildcard_one]. Path globs: [check_glob_patterns]. Skip missing targets: [check_skip_targets] [check_skip_gitignored_targets]. CLI: ["../cli/cli_package.rq".commands]. MCP: ["../extension/agent/skills-and-mcp.rq".mcp_check]. CI: [check_meta_implementation]. Site demo: ["../site/site.rq".broken_links_showcase].1.000
check_glob_patterns["../../crates/reqlan-index/tests/broken_references.rs:check_two_globs_report_an_outside_target_and_skip_outside_directories"], ["../../crates/reqlan-index/tests/broken_references.rs:check_includes_an_explicit_file_outside_the_globs"], ["../../crates/reqlan-index/tests/broken_references.rs:check_rejects_an_empty_path_glob"], ["../../crates/reqlan-analytical/tests/broken_references.rs:analysis_api_check_honours_multiple_globs_and_extra_paths"], ["../../packages/cli/test/check.test.ts:checks files from two globs and one file outside them"], ["../../packages/cli/test/check.test.ts:does not recurse into a directory outside the globs"], ["../../packages/cli/test/check.test.ts:rejects an empty glob"], ["../../packages/mcp/test/server.test.ts:check accepts one glob or a list of globs"]done[check] accepts more than one `--glob` pattern. Repeat `--glob` for each pattern. A file is in the recursive scan when it matches any glob. One `--glob` selects the same files as one path glob. A reference target that matches no glob is still checked. That target must resolve. [check] does not walk a directory that matches no glob. A positional path can name a file outside the globs. [check] checks that file. A positional path that is a directory outside the globs is not walked. An empty `--glob` value is an error. API: `AnalysisApi.check({ pathGlobs, paths })`. CLI: ["../cli/cli_package.rq".commands]. MCP: ["../extension/agent/skills-and-mcp.rq".mcp_check]. Related: [check]0.308
check_meta_implementation["../../packages/analytical/test/release-ci-gate.test.ts"], ["../../packages/analytical/test/release-ci-gate.test.ts:release calls sequential CI before versioning"], ["../../packages/analytical/test/release-ci-gate.test.ts:CI is one sequential pull-request job"], ["../../packages/analytical/test/release-ci-gate.test.ts:one build is reused by crate tests, check, and package tests"], ["../../packages/analytical/test/release-ci-gate.test.ts:reference check uses workspace packages not npm"], ["../../packages/analytical/test/release-ci-gate.test.ts:TypeScript compile generates Langium sources first"], ["../../packages/analytical/test/release-ci-gate.test.ts:CI check skips gitignored targets"]done[check] is a step in the sequential GitHub CI job after one workspace build. Pull requests use ["../../.github/workflows/ci.yml"]. Main uses the same workflow through ["../../.github/workflows/release.yml"] ( ["../distribution/distribution.rq".ci_gate] ). The job installs workspace packages once ( `pnpm install --frozen-lockfile` ), asserts `@reqlan/*` resolve under `packages/` ( ["../../scripts/assert-workspace-reqlan.mjs"] ), compiles crates and TypeScript, then runs crate tests, `node packages/cli/bin/cli.js check`, and JS / TS tests against that build. Do not install `@reqlan/cli` or other `@reqlan/*` packages from npm. Platform natives in this workspace come from `packages/analytical-native/` via `packageExtensions` in ["../../pnpm-workspace.yaml"], not from the registry. Do not call a global `reqlan` binary. Do not run a second install before check. GitHub and Azure pass `--skip-gitignored-targets` because gitignored files are not in a CI checkout ( [check_skip_gitignored_targets] ). Azure uses the same workspace CLI after its package build on `ext/v*` tags. Related: [check] [check_skip_targets] [check_skip_gitignored_targets] ["../distribution/distribution.rq".ci_gate]0.355
check_order_by_target["../../crates/reqlan-index/tests/broken_references.rs:check_orders_issues_by_missing_target"], ["../../packages/cli/test/check.test.ts:orders json rows by missing target"], ["../../packages/cli/test/format-broken-refs.test.ts:groups rows that share a missing target under one heading"]done[check] returns issues ordered by the missing [reference] target, not by the source file. Rows that share the same missing idea, comment target, file path, or import target stay together so you can see every site that points at one missing thing. Inside a target group, order by kind, then source file, then line. JSON and pipe keep a flat list in that order. Terminal output uses one heading per missing target. Related: [check] ["../cli/cli_package.rq".commands]0.370
check_qualified_missing_file["../../crates/reqlan-index/tests/broken_references.rs:check_reports_qualified_reference_to_a_missing_file"], ["../../crates/reqlan-index/tests/broken_references.rs:check_accepts_qualified_reference_when_the_file_exists"]doneA qualified [reference] names a file and an idea. Example: `["../../../../my/non-existentfile.ts".term]`. [check] reports an error when that file is not on disk. The issue kind is `file_reference`. The label is the resolved file path. A qualified reference to a file that exists is not this error. A same-file idea reference is not this error. The editor already underlines this target. Related: [check] [check_qualified_missing_idea] ["../language/syntax.rq".reference_file] ["../extension/language/syntax/features-syntax-highlighting.rq".unresolved_reference_diagnostics]0.211
check_qualified_missing_idea["../../crates/reqlan-index/tests/broken_references.rs:check_reports_qualified_reference_to_a_missing_idea"], ["../../crates/reqlan-index/tests/broken_references.rs:check_reports_namespace_qualified_reference_to_a_missing_idea"], ["../../crates/reqlan-index/tests/broken_references.rs:check_skips_qualified_missing_idea_on_rq_ignore_error"], ["../../crates/reqlan-index/tests/broken_references.rs:check_accepts_qualified_reference_when_the_file_exists"], ["../../crates/reqlan-index/tests/broken_references.rs:check_reports_qualified_reference_to_a_missing_file"], ["../../crates/reqlan-index/tests/golden_corpus.rs:qualified_reference_to_an_import_alias_is_not_a_missing_idea"], ["../../crates/reqlan-lsp/tests/parity.rs:golden_corpus_import_alias_is_not_an_unresolved_idea"]doneA qualified [reference] names a file and an idea. Example: `["../extension/index-host/graph-analysers.rq".not_an_idea]`. The same rule applies to a namespace alias: `[alias.idea]` ( [import_namespace] ). [check] reports an error when that file is an `.rq` file, the file does not declare the idea, and the file does not bind that name as an import alias. The issue kind is `references`. The label is the missing idea name. A path with no extension means `.rq` first ( [implicit_file_extension] ). A qualified reference to an idea that the `.rq` file declares is not this error. A qualified reference to an import alias bound in that file is not this error. A namespace import binds its `as` name. A from-import or qualified import binds its `as` name, or the idea name when `as` is absent. A from-import of an import alias stays [check_unresolved_imports]. The alias is not an idea. A qualified reference to a code file is not this error. That form uses [check_qualified_missing_file]. A missing file stays [check_qualified_missing_file]. [check] does not also report a missing idea for that file. [comment_reference_ignore] suppresses this error. Related: [check] [check_qualified_missing_file] ["../language/syntax.rq".reference_qualified]0.278
check_skip_gitignored_targets["../../crates/reqlan-index/tests/broken_references.rs:check_skips_gitignored_file_targets"], ["../../crates/reqlan-index/src/ignore.rs:workspace_gitignore_matches_root_and_nested_rules"], ["../../crates/reqlan-analytical/tests/broken_references.rs:analysis_api_check_honours_skip_gitignored_targets"], ["../../packages/cli/test/check.test.ts:honours skip-gitignored-targets"], ["../../packages/analytical/test/release-ci-gate.test.ts:CI check skips gitignored targets"], ["../../crates/reqlan-index/tests/broken_references.rs:check_skips_gitignored_import_paths"]done[check] omits a file [reference] issue when Git ignore rules ignore the missing target. The analyser function `check_references` takes `skip_gitignored_targets` ( default false ). Match uses the workspace ["../../.gitignore"] and nested `.gitignore` files on the target path. Match uses the resolved path from the workspace root, not the authored path in the source file. Idea references, comment references, and missing imported idea names stay in the issue list. Missing import paths follow the same skip as file references ( [check_unresolved_imports] ). Use this when a referenced file is build output or editor config that git does not store. Examples: `.cursor/` for ["../extension/agent/chat-participant.rq".mcp], and `packages/extension/media/webviews/` for ["../extension/host/onboarding/page-thanks-for-installing.rq".installation_event]. CLI: `--skip-gitignored-targets` ( ["../cli/cli_package.rq".commands] ). API: `AnalysisApi.check({ skipGitignoredTargets })`. CI: ["../../.github/workflows/ci.yml"] and ["../../azure-pipelines.yml"] pass `--skip-gitignored-targets` because a CI checkout does not contain gitignored files ( [check_meta_implementation] ). Related: [check] [check_skip_targets] [check_unresolved_imports] [check_meta_implementation]0.445
check_skip_targets["../../crates/reqlan-index/tests/broken_references.rs:check_skips_targets_that_match_skip_globs"], ["../../crates/reqlan-index/tests/broken_references.rs:path_glob_matches_cursor_skip_glob"], ["../../crates/reqlan-analytical/tests/broken_references.rs:analysis_api_check_honours_skip_targets"], ["../../packages/cli/test/check.test.ts:honours skip-target globs"]done[check] omits an issue when the missing [reference] target matches a skip glob. The analyser function `check_references` takes `skip_targets`: a list of globs. Match uses the same path glob rules as `--glob`. Match is against the issue `label` ( the missing target ), not the source file. An empty skip glob has no effect. Use this when a referenced file is not in git and you name the skip glob. For all Git ignore rules, use [check_skip_gitignored_targets]. CLI: repeatable `--skip-target <glob>` ( ["../cli/cli_package.rq".commands] ). API: `AnalysisApi.check({ skipTargets })`. Related: [check] [check_skip_gitignored_targets] [check_meta_implementation]0.445
check_unresolved_imports["../../crates/reqlan-index/tests/broken_references.rs:check_reports_missing_import_path"], ["../../crates/reqlan-index/tests/broken_references.rs:check_reports_missing_imported_idea"], ["../../crates/reqlan-index/tests/broken_references.rs:check_accepts_resolved_imports"], ["../../crates/reqlan-index/tests/broken_references.rs:check_skips_import_on_rq_ignore_error"], ["../../crates/reqlan-index/tests/broken_references.rs:check_accepts_folder_and_implicit_extension_imports"], ["../../crates/reqlan-index/tests/broken_references.rs:check_skips_remote_import_urls"], ["../../crates/reqlan-index/tests/broken_references.rs:check_skips_gitignored_import_paths"], ["../../packages/cli/test/check.test.ts:reports unresolved imports and exits 1"]done[check] reports an error when an import does not resolve. A missing import path is an error. A named imported idea that is not in the target file is an error. Do not report imported idea names when the path is missing. An existing folder is a valid import path ( [import_folder_targets] ). A remote URL is not a missing path. Import paths with no extension mean `.rq` first ( [implicit_file_extension] ). Ignore a site with [comment_reference_ignore]. Issue kind is `import`. The `label` is the missing path or the missing idea name. Forms: [import_from], [import_namespace], [import_qualified]. Editor underline: [import_does_not_exist_error]. [check_skip_targets] matches that label. [check_skip_gitignored_targets] omits a missing import path that Git ignore rules ignore. Related: [check] [check_order_by_target] [import_does_not_exist_error]0.425
check_wildcard_one["../../crates/reqlan-index/tests/broken_references.rs:check_warns_when_a_wildcard_matches_zero_or_one_idea"], ["../../crates/reqlan-index/tests/broken_references.rs:check_wildcard_one_flag_off_omits_singleton_match"], ["../../crates/reqlan-index/tests/broken_references.rs:check_wildcard_one_flag_error_sets_severity"], ["../../packages/cli/test/check.test.ts:warns on wildcards with 0 or 1 match"], ["../../packages/cli/test/check.test.ts:honours wildcard-zero and wildcard-one handling flags"], ["../../packages/language/test/wildcard-references.test.ts:warns when wildcard matches only one idea"]done`check_references` flag `wildcard_one` ( default `warn` ) controls a ["../reference_types.rq".wildcard_reference] that matches exactly 1 idea. 1 match means the pattern is too narrow — use a concrete [reference] instead. `warn` — emit the row with severity `warning` and match count 1. `error` — emit the row with severity `error` and match count 1. `off` — omit the row. CLI: `--wildcard-one <warn|error|off>` ( ["../cli/cli_package.rq".commands] ). API: `AnalysisApi.check({ wildcardOne })`. Related: [check] [check_wildcard_sparse] [check_wildcard_zero] ["../language/imports.rq".wildcard_references]0.507
check_wildcard_sparse["../../crates/reqlan-index/tests/broken_references.rs:check_warns_when_a_wildcard_matches_zero_or_one_idea"], ["../../crates/reqlan-index/tests/broken_references.rs:check_skips_sparse_wildcard_warning_on_rq_ignore_error"], ["../../packages/cli/test/check.test.ts:warns on wildcards with 0 or 1 match"], ["../../packages/cli/test/format-broken-refs.test.ts:marks wildcard sparse rows as warnings"], ["../../packages/language/test/wildcard-references.test.ts:warns when wildcard matches nothing"], ["../../packages/language/test/wildcard-references.test.ts:warns when wildcard matches only one idea"]doneA ["../reference_types.rq".wildcard_reference] is for many matches. [check] recounts each wildcard against the full idea catalog, not the stored edges, so files that the indexer visited first still get the true match count. How 0 - match and 1 - match rows are handled is controlled by [check_wildcard_zero] and [check_wildcard_one] ( both default `warn` ). Ignore a site with [comment_reference_ignore]. The language server already warns when a wildcard matches nothing ( ["../language/imports.rq".wildcard_references] ); it also warns when the match count is 1. Related: [check] ["../language/imports.rq".wildcard_references]0.417
check_wildcard_zero["../../crates/reqlan-index/tests/broken_references.rs:check_warns_when_a_wildcard_matches_zero_or_one_idea"], ["../../crates/reqlan-index/tests/broken_references.rs:check_wildcard_zero_flag_off_omits_empty_match"], ["../../crates/reqlan-index/tests/broken_references.rs:check_wildcard_zero_flag_error_sets_severity"], ["../../packages/cli/test/check.test.ts:warns on wildcards with 0 or 1 match"], ["../../packages/cli/test/check.test.ts:honours wildcard-zero and wildcard-one handling flags"]done`check_references` flag `wildcard_zero` ( default `warn` ) controls a ["../reference_types.rq".wildcard_reference] that matches 0 ideas. 0 matches means the pattern hits nothing. `warn` — emit the row with severity `warning` and match count 0. `error` — emit the row with severity `error` and match count 0. `off` — omit the row. CLI: `--wildcard-zero <warn|error|off>` ( ["../cli/cli_package.rq".commands] ). API: `AnalysisApi.check({ wildcardZero })`. Related: [check] [check_wildcard_sparse] [check_wildcard_one]0.507
code_comment_syntax_errors["../../crates/reqlan-index/src/comment.rs:reports_a_malformed_comment_reference"], ["../../crates/reqlan-index/src/comment.rs:reports_an_unclosed_comment_reference"], ["../../crates/reqlan-index/src/comment.rs:keeps_a_quoted_bracket_inside_a_qualified_comment_reference"], ["../../crates/reqlan-index/src/comment.rs:ignores_malformed_rq_inside_strings_and_raw_strings"], ["../../crates/reqlan-index/tests/broken_references.rs:check_reports_a_malformed_comment_reference"], ["../../crates/reqlan-index/tests/broken_references.rs:check_skips_comment_syntax_on_rq_ignore_error"]doneA comment reference uses `rq:[idea]` or `rq:["path".idea]`. A path string uses double quotes or single quotes. A qualified reference may use dotted idea names after the path. Line comments use `//` and `#`. The same forms apply in every comment span that the indexer reads. [check] reads each comment reference in a non- `.rq` source file. A comment reference with invalid syntax is a syntax error. [check] reports the syntax error. The issue kind is `comment_syntax`. The issue label is the error reason and the comment reference text. The issue severity is `error`. A valid comment reference stays a ["../language/syntax.rq".comment_reference] site. An unresolved valid target stays a `comment_link` issue. A source file that contains only a syntax error stays in the code index. [comment_reference_ignore] suppresses the syntax error on the next line. Related: [check] ["../extension/language/comment-references/functional-code-comment-references.rq".references_in_functional_code_comments]0.174
consumption_silence["../../crates/reqlan-index/src/git_dates.rs:create_no_window_matches_win32_flag"], ["../../packages/extension/test/hidden-exec-file.test.ts"], ["../../packages/extension/test/git-context.test.ts:git CLI spawns hide the Windows console"], ["../../packages/extension/test/language-server-runtime.test.ts"]doneHosts that consume the native core ( and helper CLI tools such as `git` / `node` ) must not open a visible console window. On Windows, a GUI editor host that spawns a console-subsystem process without `CREATE_NO_WINDOW` / `windowsHide` flashes a CLI window. Git-dates fill in the core engine and Activity Bar git history were the repeating flashes after `.rq` change; the language-server Node probe can flash once at start on old hosts. Index parse itself stays in-process ( napi `.node` / `.dll` ) and does not spawn a console. Related: ["../indexer/indexer.rq".git_dates], ["../extension/index-host/git-codelens.rq".git_dates_background_indexing], ["../extension/index-host/git-codelens.rq".git_dates_rate_cap], ["../extension/local-context/context-scope.rq".git_context], ["../extension/index-host/index.rq".git_information_capture].0.131
test_references["../../crates/reqlan-index/tests/broken_references.rs:lists_broken_idea_references_and_filters_by_glob"], ["../../crates/reqlan-index/tests/broken_references.rs:optionally_includes_broken_comment_references"], ["../../crates/reqlan-analytical/tests/broken_references.rs:analysis_api_lists_broken_refs_with_glob_and_comments"], ["../../packages/cli/test/broken-references.test.ts:lists broken idea refs and optional comment refs with a path glob"]doneThe indexer lists broken references in a [index] base. A broken reference is an unresolved idea or wildcard reference. You can give an optional path glob so that the list covers only a subset of the base. You can optionally include unresolved [comment_reference] sites. The function is in the core analysis module. The CLI exposes it on [commands] ( `analyse --broken-refs` ). Related: [analysers] [runtime] [indexer.index_code_files] ["../language/syntax.rq".comment_reference_resolution_error]0.201
csv_export["../../packages/analytical/test/export-json-csv.test.ts"]doneCSV export writes `ideas.csv` with tags and non-status / tag attributes flattened into columns ( `attr:<key>` ), plus `references.csv` for inbound / outbound / unresolved edges. Shared base / scope / output / name and file filters apply. Pipeline: `exportCsv` / `writeCsvExport` ( [export_pipeline] ). Extension UI host: ["../extension/export/export.rq".export_webview].0.055
export_pipeline["../../crates/reqlan-export/tests/json_export.rs:json_export_lists_persisted_ideas"]done`@reqlan/analytical` owns export execution for every format. Shared contract: `ExportRequest` / progress callbacks / snapshot build, then format writers. Hosts ( extension webview, CLI ) assemble an `ExportRequest` and call `NativeAnalysisApi.exportHtml` / `exportMarkdown` / `exportJson` / `exportCsv` — they do not reimplement writers. Formats: ["./html_export.rq".html_export], [markdown_export], [json_export], [csv_export], [pdf_export]. Progress phases ( snapshot, then write completed / total ) are reported to hosts for loading UI. Consumed under [analysis_scope]. Rust port of snapshot + writers: ["./rust_port.rq".export_rust].0.114
json_export["../../packages/analytical/test/export-json-csv.test.ts"], ["../../crates/reqlan-export/tests/json_export.rs:json_export_lists_persisted_ideas"]doneJSON export writes `export.json` for the selected base: ideas ( with attributes and reference lists ), files, clusters, attributes, and status / tag rollups — suitable for tooling and AI consumption. Shared base / scope / output / name and file filters apply. Pipeline: `exportJson` / `writeJsonExport` ( [export_pipeline] ). Extension UI host: ["../extension/export/export.rq".export_webview].0.055
markdown_export["../../packages/analytical/test/export-markdown.test.ts"]doneMarkdown export writes a `README.md` index for the selected base ( counts, status / tag rollups, idea list, file list ) and optional per-idea `.md` pages under `ideas/` with attributes and inbound / outbound references as relative markdown links. When per-idea pages are disabled, idea bodies are inlined in the README. Shared base / scope / output / name and file filters apply; HTML-only page families ( graph, clusters, attributes, print ) are omitted. Pipeline: `exportMarkdown` / `writeMarkdownExport` using the same snapshot builder as HTML ( [export_pipeline] ). Extension UI host: ["../extension/export/export.rq".export_webview].0.055
html_export["../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"], ["../../crates/reqlan-export/tests/html_export.rs:workspace_graph_includes_every_idea_when_max_graph_nodes_is_below_count"], ["../../crates/reqlan-analytical/tests/export.rs:html_export_honours_graph_page_url_base_and_header_link"], ["../../packages/analytical/test/export-html.test.ts"], ["../../packages/extension/test/export-html-native.test.ts"]done`@reqlan/analytical` builds documentation as HTML from the requirement graph ( ["./export.rq".export_pipeline], [analysis_scope] ). Html export should render ideas, attributes, references, and navigable structure suitable for sharing. Pipeline: `NativeAnalysisApi.exportHtml` / `AnalysisRuntime.export` → `reqlan-export` snapshot ( `build_export_snapshot` ) → multi-file static site ( `write_html_export` ). Single-file mode remains optional via [html_export_runtime_modes]. Interactive graph / search JS stays bundled static assets ( [html_export_graph_layout] ), not a second writer ( ["./rust_port.rq".export_rust] ). Thin hosts: extension UI ( ["../extension/export/export.rq".export_webview], ["../extension/export/html-export.rq".html_export_form], ["../extension/export/export.rq".export_html] ) and CLI ( `reqlan export` / ["../cli/cli_package.rq".commands] ). Export is scoped to a selected ["../bases/base.rq".base] ( not a merged multi-base workspace graph ). [html_export_multi_file] [html_export_internal_links] [html_export_idea_tooltips] [html_export_layout_cards] [html_export_heading_tooltips] [html_export_table_columns] [html_export_search] [html_export_list_views] [html_export_overview_links] [html_export_idea_pages] [html_export_file_pages] [html_export_code_reference_pages] [html_export_cluster_pages] [html_export_graph_page] [html_export_attributes_index] [html_export_attribute_pages] [html_export_printable_pages] [html_export_print_idea_cards] [html_export_print_body_whitespace] [html_export_print_in_page_anchors] [html_export_print_all_attributes] [html_export_print_button] [html_export_print_order_by] [html_export_runtime_modes] [html_export_scrollable_lists] [html_export_header_link] [html_export_url_base] [html_export_katz_column]0.201
html_export_attribute_pages["../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"]Html export should generate a dedicated page per attribute key used in the export scope. Attribute pages should show a distribution of distinct values ( counts and share of ideas ), and a searchable full list of ideas that declare the attribute with their values for that key. Emission defaults on and is controllable via includeAttributePages so this page family can be flagged in or out without changing the export pipeline shape. The attributes index, idea attribute tables, and search results should link to these pages when enabled.0.078
html_export_attributes_index["../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"]Html export should provide a searchable attributes index page listing every attribute key used in the export scope. Each attribute entry should summarize distinct values and idea counts, and link to the dedicated attribute page when [html_export_attribute_pages] is enabled.0.089
html_export_code_reference_pages["../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"]Html 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_pages["../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"]Html export should generate dedicated pages for reqlan source files that host ideas in the export scope. File pages should list hosted ideas, related clusters, and a local graph view when available. Emission defaults on and is controllable via includeFilePages so page families can be flagged in or out without changing the export pipeline shape. Graph nodes and idea source-file links for hosting files should resolve to these pages when enabled.0.119
html_export_graph_background_load["../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"]doneInteractive HTML export graph boot and layout settle must not monopolise the main thread on large graphs. Page chrome ( nav, filters, search, other controls ) should stay responsive while the graph initialises. Graph wiring should start after the first paint / idle opportunity rather than synchronously blocking `DOMContentLoaded`. When Live physics is off, the initial batch settle should run in yielded chunks ( animation frames or idle callbacks ) so the browser can paint and handle input between steps; keep the boot spinner until the first usable canvas frame, then show progressive settle status. A new filter / refresh or remount must cancel any in-flight background settle before starting another. Cross-refs [html_export_graph_page], [html_export_graph_animation], [html_export_graph_interaction].0.093
html_export_graph_label_auto["../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"]doneExport-surface wiring for [graph_label_auto]: canvas paint applies continuous zoom opacity ( GRAPH_LABEL_FADE_START → GRAPH_LABEL_FADE_END ); hover / drag stays fully opaque. Labels stay fully invisible while the graph is initialising or batch-settling so text paint does not lag those phases; zoom fade applies only after settle completes. Zoom and Fit from [html_export_graph_interaction] / [manual_reframe] update opacity each paint.0.081
html_export_graph_label_modes["../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"]doneExport-surface wiring for [graph_label_modes]: Labels control on every interactive export graph cycles auto / on / off; Reset restores auto.0.070
html_export_graph_labels["../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"]HTML 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_links["../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"], ["../../crates/reqlan-export/tests/html_export.rs:url_base_and_header_link_produce_root_relative_hrefs"]Graph node hrefs must resolve to idea pages from every export page depth, including nested idea, file, and cluster pages. Node urls should be export-root-relative so path segments such as ideas / are not dropped when resolving from nested pages. When [html_export_url_base] is set, runtime resolution of those urls must honour the mount prefix ( same contract as page and asset hrefs ). External file nodes should resolve to [html_export_file_pages] or [html_export_code_reference_pages] when those page families are enabled. 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_page["../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"], ["../../crates/reqlan-export/tests/html_export.rs:workspace_graph_includes_every_idea_when_max_graph_nodes_is_below_count"], ["../../crates/reqlan-export/tests/html_export.rs:html_export_workspace_graph_includes_wildcard_refs_chip_and_edges"], ["../../crates/reqlan-analytical/tests/export.rs:html_export_honours_graph_page_url_base_and_header_link"]Html export should provide an interactive graph page with search, filters, and links back into idea and cluster pages. The graph should support scoped views for workspace, file, cluster, and idea contexts. The workspace graph page must include every idea in the export scope — blocks, oneliners, and ideasets — and must not apply the interactive Ideas Summary GRAPH_MAX_NODES budget. Ideasets are visible by default with a Hide ideasets / Show ideasets toggle, matching the external-file visibility control ( 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_header_link["../../crates/reqlan-export/tests/html_export.rs:url_base_and_header_link_produce_root_relative_hrefs"], ["../../crates/reqlan-analytical/tests/export.rs:html_export_honours_graph_page_url_base_and_header_link"]doneHtml export should accept an optional header link ( href + label ) rendered in the topbar ahead of section navigation. Hosts such as the marketing site build can set this so readers can return to the parent site from any exported page. When omitted, the topbar shows only the export section nav. Site embed consumption: ["../site/site.rq".spec_html_export]. Often paired with [html_export_url_base] when the export is mounted under a parent static site.0.222
html_export_heading_tooltips["../../crates/reqlan-export/tests/html_export.rs:interactive_layout_cards_are_reorderable_collapsible_with_heading_tips"]doneSection headings on layout panels show a short descriptive tip via the styled tooltip panel when pointer or keyboard focus rests on the heading. Entity-card title headings tip with that card's short summary text. Idea title headings tip with the idea summary when present. Heading tips must not use the browser title text. Reuses the tooltip surface from [html_export_idea_tooltips]. Cross-refs [html_export_layout_cards].0.092
html_export_idea_tooltips["../../crates/reqlan-export/tests/html_export.rs:idea_links_show_content_tooltips"]doneA link to an idea must show a tooltip when the pointer or keyboard focus rests on the link. The tooltip must show the idea name, the source file, and the idea body text. The tooltip must show the status when the idea has a status. The tooltip must be a styled panel. The tooltip must not use the browser title text. The tooltip must stay inside the viewport. An unresolved reference must not show an idea tooltip. Section and card heading tips follow [html_export_heading_tooltips].0.099
html_export_ideas_ref_columns["../../crates/reqlan-export/tests/html_export.rs:ideas_index_splits_inbound_and_outbound_counts"]doneThe ideas index table shows inbound reference counts and outbound reference counts in two columns. The first count column is In. The second count column is Out. Each cell shows one integer. Each column has its own header sort and column filter. Filter keys are `in` and `out`.0.056
html_export_katz_column["../../crates/reqlan-export/tests/html_export.rs:idea_tables_show_a_katz_column"]doneHTML export shows the inbound Katz score ( ["../modelling/advanced_analysis.rq".katz_centrality] ) for each idea. The ideas index adds a Katz column after Out. File idea tables, code-file idea tables, cluster member tables, and attribute idea tables add a Katz column. The printable file sheet, code-file sheet, and cluster sheet add the same column. The idea page and the printable idea sheet show the same score as a metric. The cell text uses 3 decimal places. The sort value is the full score. The filter key is `katz`. File, cluster, and attribute index tables do not show this column.0.075
html_export_layout_cards["../../crates/reqlan-export/tests/html_export.rs:interactive_layout_cards_are_reorderable_collapsible_with_heading_tips"]doneIn interactive runtime mode, detail-page panels ( panel, table-shell, graph-shell ) and entity-card tiles are drag-reorderable within their layout group and collapsible. In interactive mode, cards that are direct children of a page layout group and use panel, table-shell, or graph-shell chrome are width-resizable by column span. Entity-card tiles inside an entity-list layout group are drag-reorderable and collapsible, but they are not width-resizable. Column hide and column width on tables stay separate from card width. Width-resizable cards sit in a responsive multi-column grid and snap to column spans so a card can take one column, several columns, or the full row. Double-click on the card width handle fills the row. A second double-click restores the last non-full span. Collapsed cards ignore fill. Narrow viewports collapse spans so cards stack without horizontal overflow. The full card header is the drag handle. Links, buttons, and inputs in the header still activate on click. The collapse caret stays hidden until the card is hovered or has focus within. Collapse hides the card body and shrinks the card chrome so the layout does not keep empty body space. Card-width and header drag must not lose control to text selection: pointer capture, select lock, and preventDefault on resize pointerdown. Order, collapse, column-span, and fill-restore state persist in localStorage for that page path. Document and print runtime modes keep a static layout with no rearrange, resize, or collapse behaviour. Printable-report idea cards stay outside this idea ( [html_export_print_idea_cards], [html_export_print_order_by] ). Table column chrome follows [html_export_table_columns]. Cross-refs [html_export_runtime_modes], [html_export_heading_tooltips].0.092
html_export_list_views["../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"], ["../../crates/reqlan-export/tests/html_export.rs:ideas_index_splits_inbound_and_outbound_counts"]Html export should provide searchable list views for ideas, files, code files, references, clusters, and attributes. List views should preserve the usability of the current ideas summary tables with counts, sorting, filters, and quick navigation. Every interactive table column should be sortable by header click and filterable with a per-column filter, in addition to any page-level search bar. 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_overview_links["../../crates/reqlan-export/tests/html_export.rs:overview_status_and_tag_rollups_link_with_filters"]doneThe interactive overview page status rollup, tags rollup, and highlighted clusters must be interactive navigation, not plain labels. Status and tag rollup entries should open the matching status / tag cluster page when [html_export_cluster_pages] is enabled; otherwise they should open the ideas list with the Status or Tags column filter seeded from the rollup key. Highlighted clusters should open the matching cluster page ( or the clusters index when cluster pages are disabled ). List pages must honour URL query parameters that seed per-column filters ( for example `ideas.html?status=todo` or `ideas.html?tags=export` ) so overview and in-table facet links land with the filter already applied. Query keys match stable `data-filter-key` values on table headers; filter values use the same display labels as the rollup ( including Not present / Empty ). Cross-refs [html_export_list_views], [html_export_cluster_pages], [html_export_internal_links].0.103
html_export_print_all_attributes["../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"]donePrintable report idea cards and per-idea printable sheets must show every declared attribute for the idea, not only status ( or status + tags ). Attribute values that contain idea refs follow the link rules of the hosting print surface ( [html_export_print_in_page_anchors] on the report page ). Cross-refs [html_export_printable_pages], [html_export_idea_pages].0.110
html_export_print_body_whitespace["../../crates/reqlan-export/tests/html_export.rs:print_pages_keep_relative_body_indent"]doneThe printable report must show the idea body text that the parser stores. Each per-idea printable sheet must show the stored idea body text. The parser removes the base indent. The base indent is the indent of the first body line. Extra indent on a later line is part of the body text. A later line with 4 more spaces than the first body line is stored with those 4 spaces. Print HTML must keep those leading spaces. Print HTML must not collapse those spaces. The body text must still wrap inside the card width. Cross-refs [html_export_printable_pages], [html_export_print_idea_cards].0.110
html_export_print_button["../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"]donePrintable report and printable idea sheets include a Print control that opens the browser print dialog ( `window.print` ). The control must work without the interactive javascript bundle ( inline handler is acceptable ) and should be hidden in the printed output. Cross-refs [html_export_printable_pages].0.090
html_export_print_idea_cards["../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"]doneThe printable report page lists ideas as cards in a single column that must remain within the page width on narrow viewports — no horizontal spill from long summaries, file paths, refs, or attribute values. Cards use a one-column grid ( `minmax(0, 1fr)` ) and wrapping / overflow rules so content reflows instead of overflowing the layout. Stored idea body spaces on these cards follow [html_export_print_body_whitespace]. Cross-refs [html_export_printable_pages], [html_export_print_in_page_anchors], [html_export_print_all_attributes].0.153
html_export_print_in_page_anchors["../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"]doneOn the printable report page, each idea card has a stable html `id` derived from the idea identity. Cross-idea links rendered on that page ( title links and inline idea refs in summaries / attributes ) must resolve to same-page `#` fragment urls targeting those ids, not separate idea detail pages. When browsed with the sticky site topbar, fragment navigation must leave the target card fully visible below the header ( scroll padding / scroll-margin ), not clipped behind it. Aligns with stable in-page anchors in [html_export_internal_links]. Cross-refs [html_export_printable_pages], [html_export_print_idea_cards].0.145
html_export_printable_pages["../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"]Html export should provide static printable pages alongside the interactive site. Print pages should not depend on the interactive javascript bundle. Status and tags are nullable: when absent, printable sheets must omit those fields rather than inventing placeholders such as unspecified or empty dashes. When print pages are browsed in interactive runtime mode, long lists with content below them follow [html_export_scrollable_lists]. 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_scrollable_lists["../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"]In interactive runtime mode, long list and table sections that have additional content below them should render inside a scrollable viewport with a max height so lower sections remain reachable without endless page scrolling. Toolbar titles and filters for those sections should stay outside the scroll viewport. In document and print runtime modes, those same lists should expand to their full natural height so the export remains readable as a continuous document and suitable for printing. Browser print of interactive pages should also expand constrained lists to full height.0.117
html_export_table_columns["../../crates/reqlan-export/tests/html_export.rs:interactive_layout_cards_are_reorderable_collapsible_with_heading_tips"], ["../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"]doneIn interactive runtime mode, tables inside layout cards let the user hide and resize columns. An eye control on each column header toggles that column. The eye shows when the header cell is hovered or focused. A column-selector control in the table card header opens a multiselect panel with search, select all, clear, and shift-click range selection. Column resize must not lose control to text selection: pointer capture, select lock, and a resize handle above selectable header text. Hidden columns and column widths persist in localStorage for that page path and table. Document and print runtime modes keep all columns visible at default widths with no column chrome. Cross-refs [html_export_layout_cards], [html_export_list_views].0.095
html_export_url_base["../../crates/reqlan-export/tests/html_export.rs:url_base_and_header_link_produce_root_relative_hrefs"], ["../../crates/reqlan-analytical/tests/export.rs:html_export_honours_graph_page_url_base_and_header_link"]doneHtml export should accept an optional urlBase mount prefix ( for example `/spec` or `/reqlan/spec` ). When set, page and asset hrefs must be root-relative under that prefix so static hosts resolve correctly whether the directory URL includes a trailing slash. When omitted, exports keep document-relative hrefs suitable for local folder browsing. Applies across [html_export_internal_links] and [html_export_graph_links]; site embed consumption: ["../site/site.rq".spec_html_export]. Often paired with [html_export_header_link] when the export is mounted under a parent static site.0.259
analytical_rust_port["../../crates/reqlan-parse/tests/lexer.rs:prose_braces_stay_other"], ["../../crates/reqlan-parse/tests/parser.rs:keeps_inline_prose_braces"], ["../../crates/reqlan-index/tests/extract_parity.rs:indexes_scalar_list_block_and_flag_attribute_values"], ["../../crates/reqlan-index/tests/golden_corpus.rs:corpus_idea_names_match_langium_extract"], ["../../packages/language/test/langium-corpus-golden.test.ts:committed dump matches live Langium extract"], ["../../crates/reqlan-search/tests/fuzzy.rs:ranks_exact_and_prefix_matches_ahead_of_subsequence_fuzzy_hits"]in-progressPort ["../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
comment_span_align["../../packages/language/test/comment-span-align.test.ts:golden corpus C-style comment ranges match lexer, scanner, and TextMate"], ["../../packages/language/test/comment-span-align.test.ts:backticked @reqlan/* is not a block comment"], ["../../packages/language/test/comment-span-align.test.ts:TextMate line-fences run before comments"], ["../../packages/language/test/comment-span-align.test.ts:mid-line triple backticks are not a fence"], ["../../packages/language/test/comment-span-align.test.ts:line-start triple backticks lex as CODE_FENCE and hide inner comments"], ["../../packages/language/test/comment-span-align.test.ts:TextMate code-snippets fences are line-start only"], ["../../packages/language/test/comment-in-string.test.ts:backticked @reqlan/* in block body is not a block comment"], ["../../packages/language/test/references.test.ts:findCommentSpansInText skips /* inside complete backtick fences"], ["../../packages/language/test/references.test.ts:findCommentSpansInText does not treat mid-line ``` as a fence"], ["../../packages/language/test/parsing.test.ts:keeps later ideas after mid-line triple backticks"], ["../../packages/language/test/parsing.test.ts:parse rust_port.rq keeps ideas after comment_span_align fence prose"], ["../../crates/reqlan-parse/tests/lexer.rs:backticked_slash_star_is_not_a_comment"], ["../../crates/reqlan-parse/tests/lexer.rs:mid_line_triple_backticks_are_not_a_code_fence"], ["../../crates/reqlan-parse/tests/parser.rs:keeps_ideas_after_mid_line_triple_backticks"]doneOn every frozen [golden_corpus] `.rq` file, `//` and `/* … */` comment character ranges must be identical across: - the Langium lexer ( hidden `SL_COMMENT` / `ML_COMMENT` ) - `findCommentSpansInText` C-style spans ( host `#` / triple-quote spans are not `.rq` comments ) - TextMate `comment.line.reqlan` and `comment.block.reqlan` scopes Same-line fences, glob `/**/`, URL `://`, and fenced ` ` ` bodies must not open comments. Mid-line triple backticks are prose. They must not open a fence or hide later ideas. Example: `@reqlan/*` in inline code must not open a block comment. Related: [parser_align], ["../language/syntax.rq".code_snippets], ["../language/syntax.rq".comments], ["../language/syntax-edge-cases.rq".fencing_comments], ["../language/syntax.rq".inline_code].0.141
cutover["../../crates/reqlan-index/tests/schema.rs:opens_at_schema_version_4"], ["../../crates/reqlan-index/tests/schema.rs:schema_v4_columns_round_trip_git_count_and_mtime"], ["../../crates/reqlan-index/tests/schema.rs:schema_v4_file_reopens_after_drop"], ["../../crates/reqlan-index/tests/schema.rs:opens_sqljs_written_schema_v4_fixture"], ["../../packages/analytical/test/schema-v4-roundtrip.test.ts"], ["../../packages/analytical/test/open-analysis-api.test.ts"], ["../../packages/cli/test/runtime-engine.test.ts"], ["../../packages/analytical/test/native-headless-entry.test.ts"]doneNative engine is required for CLI, MCP, and the extension IndexService path ( no `REQLAN_ANALYTICAL_ENGINE=js` escape hatch ). Order: golden parse / extract → headless CLI `analyse` / `search` / `export` → MCP → extension via platform VSIX ( host-matching napi `.node` required ). Shared [bases.base] `.reqlan` DB is schema v4 rusqlite; fixtures verify reopen compatibility. The default editor LSP is [lsp_rust.language_server_rust]. Langium remains only as the transitional `node` engine fallback and dual-parser oracle ( [parser_align] ).0.118
export_rust["../../crates/reqlan-export/tests/json_export.rs:json_export_lists_persisted_ideas"], ["../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"], ["../../crates/reqlan-export/tests/html_export.rs:overview_status_and_tag_rollups_link_with_filters"], ["../../crates/reqlan-export/tests/html_export.rs:url_base_and_header_link_produce_root_relative_hrefs"]donePort [export_reqs.export_pipeline]: `buildExportSnapshot` then HTML / markdown / JSON / CSV writers in `reqlan-export`. Interactive HTML JS ( graph canvas, list filters, search bars ) stays static assets bundled into the export — not rewritten in Rust ( [html_export.html_export], [html_export.html_export_graph_animation] ). Hosts still call `NativeAnalysisApi.exportHtml` / `exportMarkdown` / `exportJson` / `exportCsv`; they do not grow format writers. PDF remains print-HTML ( [export_reqs.pdf_export] ); [html_export.html_export_print_order_by] stays a product follow-up, not a port blocker.0.137
golden_corpus["../../packages/language/test/langium-corpus-golden.test.ts:committed dump matches live Langium extract"], ["../../crates/reqlan-index/tests/golden_corpus.rs:corpus_idea_names_match_langium_extract"], ["../../packages/language/test/langium-rust-parse-align.test.ts:golden corpus matches live Langium and Rust snapshots"], ["../../packages/language/test/comment-span-align.test.ts:golden corpus C-style comment ranges match lexer, scanner, and TextMate"], ["../../packages/language/test/parsing.test.ts:parse ontology.rq ideas"], ["../../packages/language/test/parsing.test.ts:parse mid-line triple backticks corpus without swallowing later ideas"], ["../../crates/reqlan-index/tests/golden_corpus.rs:opaque_file_examples_do_not_extract_inline_or_fenced_paths"], ["../../crates/reqlan-index/tests/golden_corpus.rs:mid_line_triple_backticks_keep_later_ideas"], ["../../crates/reqlan-index/tests/golden_corpus.rs:qualified_reference_to_an_import_alias_is_not_a_missing_idea"]doneParser / extractor alignment uses a frozen `.rq` tree under `testdata/golden-corpus/`, not live product requirements in `reqlan rq/`. Production idea lists may change without regenerating the dump. Copy a representative file into the corpus and refresh `crates/reqlan-index/tests/golden/langium-corpus-names.json` only when grammar or extract behaviour needs a new sample. Langium and Rust both extract name + kind from that tree and must match the committed dump. Live parse alignment ( elements and refs, both engines in one test ): [parser_align]. Comment character ranges on the same tree: [comment_span_align].0.104
lexer_rust["../../crates/reqlan-parse/tests/lexer.rs:structural_braces_around_named_block"], ["../../crates/reqlan-parse/tests/lexer.rs:prose_braces_stay_other"], ["../../crates/reqlan-parse/tests/lexer.rs:glob_star_star_is_not_a_block_comment"], ["../../crates/reqlan-parse/tests/lexer.rs:at_only_at_line_start"], ["../../crates/reqlan-parse/tests/lexer.rs:url_slashes_are_not_line_comments"], ["../../crates/reqlan-parse/tests/lexer.rs:mid_line_triple_backticks_are_not_a_code_fence"], ["../../crates/reqlan-parse/tests/lexer.rs:line_start_triple_backticks_are_a_code_fence"], ["../../crates/reqlan-parse/tests/lexer.rs:middle_dot_before_brace_does_not_panic"]doneHand-written Rust lexer that ports ["../../packages/language/src/reqlan-token-builder.ts"]: structural vs prose `{` / `}`, fence opacity, quote-aware comments, `@` only at line start, glob `/**/` not a block comment. Linear in document size with sparse brace-depth lookup ( [syntax_edges.context_sensitive_lexer_scaling] ). Owned by `reqlan-parse`; consumed by [parser_rust] and by [lsp_rust.language_server_rust]. The Langium token builder remains only for the transitional `node` engine fallback and dual-parser tests.0.105
native_bridge["../../packages/analytical/test/load-native.test.ts"], ["../../packages/analytical/test/native-packaging.test.ts"], ["../../packages/analytical/test/native-headless-entry.test.ts"], ["../../packages/analytical/test/open-analysis-api.test.ts"], ["../../packages/analytical/test/native-export-request.test.ts"], ["../../packages/analytical/test/workspace-paths.test.ts"], ["../../packages/analytical/test/index-windows-paths.test.ts"], ["../../crates/reqlan-analytical/tests/export.rs:html_export_honours_graph_page_url_base_and_header_link"]in-progressThe 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
parser_align["../../packages/language/test/langium-rust-parse-align.test.ts:golden corpus matches live Langium and Rust snapshots"], ["../../packages/language/test/langium-rust-parse-align.test.ts:inline_code_file_example"], ["../../packages/language/test/langium-rust-parse-align.test.ts:inline_code_file_only_line_range"], ["../../packages/language/test/langium-rust-parse-align.test.ts:fenced_file_example"], ["../../packages/language/test/langium-rust-parse-align.test.ts:mid_line_triple_backticks"], ["../../crates/reqlan-parse/tests/align.rs:inline_code_file_example_is_not_a_live_ref"], ["../../crates/reqlan-parse/tests/align.rs:inline_code_file_only_line_range_is_not_a_live_ref"], ["../../crates/reqlan-parse/tests/align.rs:fence_body_is_one_code_snippet_not_inner_refs"], ["../../crates/reqlan-parse/tests/align.rs:mid_line_triple_backticks_are_not_a_code_snippet"]doneLangium and `reqlan-parse` stay two engines as a dual-parser **test oracle**. Grammar truth is [syntax] / ["../../packages/language/src/reqlan.langium"]. The same source must yield the same parse snapshot: top-level elements, live bracket and wiki refs, inline-code count, and fence count. One Node test runs Langium and native `parseReqlanSource` ( `parseAlignSnapshot` ) together. A committed name dump is not the only check. The default editor LSP already uses Rust ( [lsp_rust.language_server_rust] ); this idea does not gate that cutover. Related: [golden_corpus], [parser_rust], [comment_span_align].0.150
parser_rust["../../crates/reqlan-parse/tests/parser.rs:keeps_inline_prose_braces"], ["../../crates/reqlan-parse/tests/parser.rs:recovers_nameless_block"], ["../../crates/reqlan-parse/tests/parser.rs:from_import_records_each_token_span"], ["../../crates/reqlan-parse/tests/parser.rs:recovers_invalid_from_import_and_keeps_later_ideas"], ["../../crates/reqlan-parse/tests/parser.rs:times_out_hang_sentinel"], ["../../crates/reqlan-parse/tests/parser.rs:keeps_ideas_after_mid_line_triple_backticks"], ["../../crates/reqlan-parse/tests/lexer.rs:mid_line_at_plan_brace_stays_prose"], ["../../crates/reqlan-index/tests/golden_corpus.rs:corpus_idea_names_match_langium_extract"], ["../../crates/reqlan-index/tests/golden_corpus.rs:tutorials_rq_keeps_ideas_after_nested_slides_lists"], ["../../packages/language/test/parsing.test.ts:keeps later ideas after nested @slides lists with mid-line @plan braces"], ["../../packages/language/test/parsing.test.ts:parse tutorials.rq nested @slides lists without parser errors"], ["../../packages/language/test/langium-rust-parse-align.test.ts:golden corpus matches live Langium and Rust snapshots"], ["../../packages/cli/test/runtime-engine.test.ts:parse command uses native parseReqlanSource"], ["../../packages/analytical/test/load-native.test.ts:exposes parseReqlanSource on the engine when present"]doneRecursive-descent parser matching ["../../packages/language/src/reqlan.langium"] productions into a Rust AST the extractor can walk. Recovery: nameless `{...}` and local import mistakes still yield a usable document ( [parser_lexer.recovery_vs_budget] ). Wall-clock [parser_lexer.parse_budget_timeout] via native timeout / cancel — no Node worker process required on the index path. Open `.rq` buffers and CLI `parse` use `reqlan-parse` ( [lsp_rust.language_server_rust] ). Langium remains a dual-parser test oracle and the transitional `node` engine fallback — not the default editor LSP. Alignment contract: [parser_align].0.217
rust_crate_layout["../../crates/reqlan-index/tests/golden_corpus.rs:corpus_idea_names_match_langium_extract"], ["../../packages/language/test/langium-corpus-golden.test.ts:committed dump matches live Langium extract"], ["../../packages/analytical/test/release-ci-gate.test.ts:pnpm test runs crate tests"]doneCargo workspace at repo-root `crates/` ( not inside `packages/analytical` ), crates: - `reqlan-parse` — lexer, parser, AST, recovery, parse budget - `reqlan-index` — extract, rusqlite store, mtime sync, diagnostics - `reqlan-search` — fuzzy / contextual / semantic ranking - `reqlan-export` — snapshot + html / md / json / csv writers; embed existing HTML JS assets - `reqlan-analytical` — facade matching `AnalysisApi` + `WorkspaceIndex` operations - `reqlan-napi` — Node binding for the core engine ( [native_bridge] ) - `reqlan-lsp` — editor language server ( [lsp_rust.language_server_rust] ) Mature crates only ( rusqlite, napi ): no experimental parser generators for the lexer. Golden tests compare Rust extract against Langium on the frozen [golden_corpus], plus the language-test fixtures ported into `reqlan-parse` / `reqlan-index` tests. Format: ["../development/commit.rq".rust_fmt]. Root `pnpm test` runs `test:js` then `test:rust` from ["../../package.json"]. `test:rust` is `cargo test --workspace --exclude reqlan-napi`. GitHub CI compiles crates once, then runs `cargo test` as its own step so crate tests reuse that build ( ["../distribution/distribution.rq".ci_gate] ).0.138
search_rust["../../crates/reqlan-search/tests/fuzzy.rs:ranks_exact_and_prefix_matches_ahead_of_subsequence_fuzzy_hits"], ["../../crates/reqlan-search/tests/fuzzy.rs:matches_across_separator_substitutions"], ["../../crates/reqlan-search/tests/fuzzy.rs:fuzzy_search_reads_sqlite_and_returns_ranked_hits"], ["../../crates/reqlan-search/tests/fuzzy.rs:ranks_file_name_hits_with_ideas"], ["../../crates/reqlan-search/tests/fuzzy.rs:pages_ranked_hits_with_offset_and_truncated"], ["../../crates/reqlan-analytical/tests/fuzzy_search.rs:workspace_index_fuzzy_search_ranks_without_exporting_catalog"], ["../../crates/reqlan-analytical/tests/fuzzy_search.rs:workspace_index_fuzzy_search_includes_file_name_hits"], ["../../crates/reqlan-search/tests/contextual.rs:nearer_ideas_rank_above_farther_with_equal_text_scores"], ["../../crates/reqlan-search/tests/contextual.rs:reranks_using_graph_edges_from_context_seeds"], ["../../crates/reqlan-search/tests/semantic.rs:ranks_name_hits_ahead_of_summary_and_tag_hits"], ["../../crates/reqlan-search/tests/semantic.rs:scores_reference_labels_and_query_tokens"]donePort [search_reqs.fuzzy_search] ( separator-insensitive ranking ), [search_reqs.contextual_search] ( hop-distance rerank ), and [search_reqs.semantic_search] into `reqlan-search`. Same `AnalysisApi.searchRequirements` / `--context` contract ( [cli.commands] ). Activity-bar idea search uses `WorkspaceIndexRuntime.fuzzy_search` / napi `NativeWorkspaceIndex.fuzzySearch` so ranking stays next to rusqlite and only capped hits cross into JS. Mixed list includes indexed `.rq` file-name hits ( `kind` `file` ) and pages with `offset` / `limit` ( `truncated` ). Client-side highlight helpers used by webviews may stay in the TS `./fuzzy-search` export until a shared WASM / JS copy is needed.0.137
ts_interface["../../packages/analytical/src/native/generated.ts"], ["../../packages/analytical/test/generated-native-types.test.ts"], ["../../crates/reqlan-analytical/tests/export_ts.rs:committed_generated_ts_matches_specta_export"], ["../../crates/reqlan-analytical/tests/export_ts.rs:rewrite_generated_ts_comment_paths_adds_one_hop"]doneThe TS interface over the Rust functionality stays fully typed via specta ( `crates/reqlan-analytical` `export-ts` → `packages/analytical/src/native/generated.ts` ). Specta copies Rust doc comments. `export-ts` rewrites those `rq:` paths from crate-src depth to `packages/analytical/src/native` depth.0.040
contextual_search["../../crates/reqlan-search/tests/contextual.rs:nearer_ideas_rank_above_farther_with_equal_text_scores"], ["../../crates/reqlan-search/tests/contextual.rs:reranks_using_graph_edges_from_context_seeds"]doneSearch string plus an optional context list of relative `.rq` paths, `path#idea` refs, or bare idea names. Runs [semantic_search], then re-ranks with min undirected hop distance from any resolved context idea and exponential decay ( [idea_graph_distance] ): `finalScore = textScore * 2^(-minHop)` ( unreachable floor = 8 hops ). Surfaces: [native_analysis_api] `searchRequirements(..., { context })` and CLI `reqlan search --context` ( [search_cli] ). Implements [search_with_context]. PageRank ( [pagerank] ) and full [context_scope_v2] ingestion remain future work. Default ranking does not use Katz. Opt in with [katz_search]. Complements [fuzzy_search] when neighbourhood / context should bias ranking. ["../cli/click.rq".click_input] ranks ambiguous click matches the same way, with session ideas as context.0.208
file_search["../../crates/reqlan-search/tests/fuzzy.rs:ranks_file_name_hits_with_ideas"], ["../../packages/analytical/test/workspace-index.test.ts:fuzzySearch returns file-name hits and pages with offset"], ["../../crates/reqlan-analytical/tests/fuzzy_search.rs:workspace_index_fuzzy_search_includes_file_name_hits"], ["../../crates/reqlan-analytical/tests/fuzzy_search.rs:workspace_index_fuzzy_search_includes_comment_code_files"]doneRank indexed `.rq` files and comment-bearing code files by basename, stem, and path using the same separator-insensitive matching as [fuzzy_search] / [fuzzy_search_whitespace]. Hits use kind `file`; id is the indexed file URI; name is the basename; line start is 0. Empty query does not dump the file catalog. Mixed into [fuzzy_search] so one list ranks ideas and files together. Code files are those persisted by ["../indexer/indexer.rq".index_code_files]. Surfaces: native `fuzzy_search` via [native_workspace_index], ["../extension/local-context/activitybar-panels/search.rq".search_pane_file_hits]. ["../cli/click.rq".click_input] uses this mix when click has no exact match.0.244
fuzzy_search["../../packages/analytical/test/workspace-index.test.ts:fuzzySearch ranks from the native index without listing all ideas in JS"], ["../../packages/analytical/test/workspace-index.test.ts:fuzzySearch returns file-name hits and pages with offset"], ["../../crates/reqlan-search/tests/fuzzy.rs:ranks_exact_and_prefix_matches_ahead_of_subsequence_fuzzy_hits"], ["../../crates/reqlan-search/tests/fuzzy.rs:fuzzy_search_reads_sqlite_and_returns_ranked_hits"], ["../../crates/reqlan-search/tests/fuzzy.rs:ranks_file_name_hits_with_ideas"], ["../../crates/reqlan-search/tests/fuzzy.rs:pages_ranked_hits_with_offset_and_truncated"], ["../../crates/reqlan-analytical/tests/fuzzy_search.rs:workspace_index_fuzzy_search_ranks_without_exporting_catalog"]doneQuick ranked idea search by name, summary, and tags. Separator and word-order behaviour: [fuzzy_search_whitespace]. Also supports prefix, substring, and character-subsequence ( fuzzy ) ranking. Skips ideaset container rows; empty query returns all non-ideaset ideas ( callers may require a non-empty query ). Ranking engine: ["./rust_port.rq".search_rust] `reqlan-search` ( `fuzzy_search` / `search_ideas` ). Also returns [file_search] hits mixed into the same ranked list ( kind `file` ). Pagination: [fuzzy_search_pages]. Activity-bar search calls [native_workspace_index] `NativeWorkspaceIndex.fuzzySearch` so the host never copies the idea catalog into JS. Client-side highlight helpers stay in [fuzzy_search_impl].0.268
fuzzy_search_pages["../../crates/reqlan-search/tests/fuzzy.rs:pages_ranked_hits_with_offset_and_truncated"], ["../../packages/analytical/test/workspace-index.test.ts:fuzzySearch returns file-name hits and pages with offset"]done[fuzzy_search] accepts `offset` + `limit` over the already-ranked mixed idea + file list. `truncated` is true when more hits exist after the returned page ( callers show `{n}+` rather than a full count ). Used by ["../extension/local-context/activitybar-panels/search.rq".search_pane_load_more].0.097
fuzzy_search_whitespace["../../crates/reqlan-search/tests/fuzzy.rs:collapses_underscore_hyphen_dots_ellipsis_and_whitespace"], ["../../crates/reqlan-search/tests/fuzzy.rs:matches_across_separator_substitutions"], ["../../crates/reqlan-search/tests/fuzzy.rs:matches_reordered_and_partial_word_queries"]doneMatching treats `_`, `-`, `.` / `...` / `…`, and whitespace as interchangeable separators so queries like `cli package`, `cli_package`, and `cli-package` hit the same idea. Prefers query word order, but still matches when words are reordered or when intermediate name words are missing ( e. g. `package cli` → `cli_package`, `search actions` → `search_code_actions` ). Extends [fuzzy_search]; implementation [fuzzy_search_impl].0.117
katz_search["../../crates/reqlan-search/tests/katz.rs:katz_bias_is_off_by_default_and_lifts_the_higher_score_when_on"], ["../../crates/reqlan-search/tests/katz.rs:katz_bias_reports_a_missing_score"]doneSearch can bias matches by inbound Katz centrality ( [katz_centrality] ). The bias is off unless the caller sets it. CLI flag: `reqlan search <query> --katz`. API field: `SearchRequirementsOptions.katz`. When the bias is on, the score is `textScore * (1 + katzScore)`. The match reasons include `katz:<score>`. Context hop decay runs first. The Katz multiplier runs second. When the bias is off, match order and scores stay on the text ranking.0.082
extension_host_native_stage["../../packages/analytical/test/native-packaging.test.ts"]doneLocal F5 and `pnpm run build` / `build:ext` stage the host-matching core engine `.node` into `packages/extension/native/` so activation loads the same layout as a per-target VSIX ( [distribution.vsix_export], ["../distribution/native_host_binary.rq".native_host_binary_development] ). The same build copies the `.node` into `packages/analytical-native/<napiSuffix>/` so the workspace optionalDependency matches a production npm install ( [distribution.rust_binary_distribution] ). The orchestrator builds `cargo build -p reqlan-napi -p reqlan-lsp --release` when needed, then copies `reqlan_napi.node` beside the extension. It is not a separate manual install. That command writes `reqlan-lsp` into `crates/target` ( ["../extension/language/support/language-server-rust.rq".language_server_rust] ). Azure compiles the [distribution.native_targets] matrix, then stages those binaries with `prepare-native-packages.mjs --binary-dir` before tests and VSIX packaging. Versions come from git at the `ext/v*` tag. Do not fetch platform packages from npm on Azure ( [distribution.extension_distribution] ). Implementation: ["../../scripts/stage-host-native.mjs"], ["../../scripts/ensure-host-native.mjs"], ["../../packages/extension/scripts/build.mjs"], ["../../azure-pipelines.yml"].0.140
incremental_extension_build["../../packages/extension/test/incremental-build.test.ts"], ["../../packages/extension/test/incremental-build.test.ts:ignores node_modules when fingerprinting a directory tree"], ["../../packages/analytical/test/native-packaging.test.ts"]doneExtension builds fingerprint inputs and outputs per independently cacheable artifact: - Langium generated sources / TextMate grammar - logo media - generated marketplace README - each of the five Vite webviews separately - extension-host / language-server esbuild outputs Host napi staging ( [extension_host_native_stage] ) always runs: cargo is incremental locally; Azure stages matrix artifacts and skips a second cargo compile in the package job. A step is skipped only when its command / input fingerprint and current output-content fingerprint both match the cache under `packages/extension/out/`. Missing, changed, or manually edited output invalidates that step. Fingerprint walks skip `node_modules` so Vite scratch files under `.vite-temp` and installed deps do not race or inflate hashes; dependency identity stays in `pnpm-lock.yaml` via shared inputs. Webview output fingerprints cover each complete emitted directory, including future lazy chunks. Host-bundle inputs include bundled phonebook data as well as workspace package output. TypeScript retains its native `tsc -b` project-reference incrementality. TextMate syntax copies are cached by content; Cursor-skill sync still runs because it targets workspace-external state. `pnpm run build:force` / `node scripts/build.mjs --force` bypasses all cache entries. `vscode:prepublish` uses forced mode with `--skip-native` so `vsce package --target` cannot replace a staged per-target `native/` with the packaging agent's host binary ( [distribution.vsix_export] ). `clean` removes `out/`, including the cache, so clean builds remain cold. Root `pnpm run build:ext` delegates only to the extension package. The extension build generates Langium artifacts when their fingerprints change, then its `tsc -b` builds language / analytical project references before downstream fingerprints are evaluated. It does not rebuild unrelated CLI, MCP, site, or test projects.0.045
typescript_compile["../../packages/analytical/test/release-ci-gate.test.ts"], ["../../packages/analytical/test/release-ci-gate.test.ts:TypeScript compile generates Langium sources first"], ["../../packages/language/test/langium-generate-config.test.ts"], ["../../packages/language/test/langium-generate-config.test.ts:langium-cli schema validates langium-config.json"]doneLangium writes `packages/language/src/generated` ( ast, grammar, module ). That directory is gitignored. `tsc -b tsconfig.build.json` fails on a clean checkout if those files are missing. Root script `build:tsc` is `langium:generate` then that `tsc -b`. Full `pnpm run build` starts with `build:tsc`. GitHub CI, Azure package build, and npm deploy use `build:tsc` so compile matches a clean local build ( [distribution.prerelease_tests], [distribution.ci_gate], [distribution.npm_distribution] ). GitHub CI compiles the TypeScript workspace once in the sequential job, then reuses that emit for [check.check] and package tests ( [check.check_meta_implementation] ). `langium generate` validates ["../../packages/language/langium-config.json"] against the langium-cli schema. langium-cli 4. 3. 0 does not set schema `$id`. jsonschema 1. 5. 0 then throws `ERR_INVALID_URL` for `#/$defs/languageItem` on Node 24. The workspace pins jsonschema 1. 4. 1 for langium-cli in ["../../pnpm-workspace.yaml"] until a langium-cli release includes that `$id`.0.045
rust_fmt[rust_fmt_tests], ["../../packages/analytical/test/rust-fmt-hook.test.ts:selects only staged crate rust sources"], ["../../packages/analytical/test/rust-fmt-hook.test.ts:runs cargo fmt --all in crates then restages the rust files"], ["../../packages/analytical/test/rust-fmt-hook.test.ts:CI formats crates and auto-commits on same-repo PRs"], ["../../packages/analytical/test/release-ci-gate.test.ts:release calls sequential CI before versioning"]doneCI runs `cargo fmt --all` in write mode on all crates ( [rust_port.rust_crate_layout], [rustfmt_toml] ). Format is a chore, not a gate: an unformatted tree does not fail the job. On same-repo pull requests, if fmt changes files, CI commits `chore: cargo fmt` and pushes to the PR branch. Fork PRs and `workflow_call` ( release ) only format the working tree; they do not push. Recursion stops because: ( 1 ) pushes with the default `GITHUB_TOKEN` do not start new workflow runs; ( 2 ) a second run finds no diff after fmt, so it does not commit again. Pull requests and the release workflow share the same sequential CI job ( ["../distribution/distribution.rq".ci_gate] ). Git pre-commit runs the same formatter in write mode so local commits stay formatted. Skip when no crate Rust is staged, format in place and restage, skip merge / rebase, `SKIP_RUST_FMT=1` escape hatch. [workspace_package] `prepare` sets `core.hooksPath` to `.githooks`.0.081
phonebook_icon_keys["../../site/src/lib/phonebook-icons.test.ts"]doneper [phonebook_reqs.phonebook_icons] A phonebook link or package can omit `icon`. If `icon` is present, it is an object with `set` and `name`. Set ids and lookup URLs are canonical in ["../phonebook.json"]. icons. Use each set's `search` URL to find replacement slugs when a name changes or an icon is removed upstream. Typed helpers live in [phonebook_script]: `formatPhonebookIconKey`, `getPhonebookIconSearchUrl`.0.048
testing["../../packages/language/test/testing.test.ts:each test file includes rq comment references to its requirements"]tests should have comment references to the requirements they serve to test. per ["../extension/language/comment-references/functional-code-comment-references.rq"]0.061
ci_gate["../../packages/analytical/test/release-ci-gate.test.ts"], ["../../packages/analytical/test/release-ci-gate.test.ts:release calls sequential CI before versioning"], ["../../packages/analytical/test/release-ci-gate.test.ts:CI is one sequential pull-request job"], ["../../packages/analytical/test/release-ci-gate.test.ts:one build is reused by crate tests, check, and package tests"], ["../../packages/analytical/test/release-ci-gate.test.ts:reference check uses workspace packages not npm"]donePull-request CI and the main release pipeline share one sequential workflow: ["../../.github/workflows/ci.yml"]. ["./distribution.rq".deployment_flow] must not apply changesets or create tags until that workflow succeeds. Order in one job: install workspace packages, compile crates and TypeScript once, then crate tests, ["../core_analysis/check.rq".check], then JS / TS tests ( ["./distribution.rq".prerelease_tests], ["../core_analysis/check.rq".check_meta_implementation], ["../development/commit.rq".rust_fmt] ). `@reqlan/*` packages come from this git checkout ( `workspace:*` ), not from the npm registry. Platform native packages are linked the same way in this workspace through `packageExtensions` in ["../../pnpm-workspace.yaml"]; they are not listed in git `@reqlan/analytical` `optionalDependencies`. A push to main does not start CI a second time as an independent workflow; ["../../.github/workflows/release.yml"] calls ["../../.github/workflows/ci.yml"] with `workflow_call`. Because ["../../.github/workflows/ci.yml"] declares `permissions.contents: write`, the caller job in ["../../.github/workflows/release.yml"] must grant `contents: write` when invoking it. The version-bump commit ( `chore(release):` ) skips the gate and the version job to prevent a recursive run.0.172
extension_host_target["../../packages/analytical/test/load-native.test.ts"], ["../../packages/analytical/test/native-packaging.test.ts"]in-progressThe 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
extension_package["../../packages/analytical/test/native-packaging.test.ts:analytical version is SSOT for platform packages; Changesets ignores them"]doneThe VS Code extension lives in packages / extension with npm package name `reqlan-extension` ( Marketplace / Open VSX id `reqlan.reqlan-extension` ). Its package. json version is the Marketplace and Open VSX release version. That version is independent of `@reqlan/analytical` ( [version_management] ).0.088
extension_pipeline_cache["../../packages/analytical/test/native-packaging.test.ts"], ["../../packages/analytical/test/native-packaging.test.ts:Azure extension pipeline caches rust and pnpm and publishes in parallel"]doneAzure `build_native` mirrors GitHub `Swatinem/rust-cache` via `Cache@2`: cache rustup + cargo home under `$(Pipeline.Workspace)/rust-cache` ( `CARGO_HOME` / `RUSTUP_HOME` ) and `crates/target`, keyed by OS, `rustTarget`, and `crates/Cargo.lock`. Install rustup only when `$CARGO_HOME/bin/rustc` is missing after restore; otherwise reuse the cached toolchain ( `--no-modify-path` ). Azure `build_test_package` caches the pnpm store keyed by OS and `pnpm-lock.yaml` ( same role as `cache: pnpm` on GitHub ). Do not cache VSIX or napi pipeline artifacts across tags; git at `ext/v*` stays canonical ( [vsix_native_not_from_npm] ). Implementation: ["../../azure-pipelines.yml"]. Related: [extension_distribution], ["./distribution.rq".ci_gate] ( GitHub rust-cache + pnpm ).0.072
extension_pipeline_publish["../../packages/analytical/test/native-packaging.test.ts"], ["../../packages/analytical/test/native-packaging.test.ts:Azure extension pipeline caches rust and pnpm and publishes in parallel"]doneMarketplace and Open VSX publish every per-target VSIX in parallel ( `ForEach-Object -ThrottleLimit 6 -Parallel` ), not one after another. Open VSX uses the workspace `ovsx` package ( `pnpm --filter./packages/extension exec ovsx` ); do not `pnpm dlx ovsx` per file. Local `--openvsx` in ["../../scripts/package-extension-targets.mjs"] uses the same `pnpm exec ovsx` path. Implementation: ["../../azure-pipelines.yml"], ["../../packages/extension/package.json"], ["../../scripts/package-extension-targets.mjs"]. Related: [extension_distribution], [openvsx_registry], [vsix_export].0.094
npm_distribution["../../packages/analytical/test/native-packaging.test.ts"], ["../../packages/analytical/test/native-packaging.test.ts:deploy-npm publishes platform packages before @reqlan/analytical"], ["../../packages/analytical/test/native-packaging.test.ts:deploy-npm builds natives when analytical was bumped, not when npm_ref is language"], ["../../packages/analytical/test/native-packaging.test.ts:analytical version is SSOT for platform packages; Changesets ignores them"], ["../../packages/analytical/test/native-packaging.test.ts:@reqlan/analytical optionalDependencies are publish-only, not in git"], ["../../packages/analytical/test/require-natives-published.test.ts"]in-progressnpm publishing runs only when a `language/v*`, `analytical/v*`, `cli/v*`, or `mcp/v*` tag is pushed. Tags are created by ["./distribution.rq".deployment_flow]; the npm workflow does not publish on ordinary commits. The workflow builds platform binaries when `@reqlan/analytical` was bumped ( `analytical/v*` tag, or `analytical_tag` from the release workflow ). It does not use `github.event_name == 'workflow_call'` for that gate: in a reusable workflow that name is the caller event ( `push` ), and `npm_ref` is the first language / analytical / cli / mcp tag, so a language bump would skip natives. It then publishes each package in sequence with `pnpm --filter <pkg> publish --access public --no-git-checks`. The sequence is language, then all platform packages for [native_targets], then `@reqlan/analytical`, then cli, then mcp. The workflow does not publish `@reqlan/analytical` until every platform package of that `@reqlan/analytical` version is on the npm registry or was published in the same job ( [rust_binary_distribution] ). ["../../scripts/require-natives-published.mjs"] enforces that gate from the analytical package. json version ( not Changesets ). Before each package publishes, ["../../scripts/skip-already-published.mjs"] with `--filter <pkg>` checks the public npm registry and skips that step when the version is already published ( sets `should_publish=false` ). That avoids re-attempting already-published versions under OIDC. Auth uses npm trusted publishing ( OIDC ) from GitHub Actions — no long-lived `NPM_TOKEN`. Workflow requirements: `permissions.id-token: write`, Node ≥ 22. 14 with npm ≥ 11. 5. 1, registry `https://registry.npmjs.org`. Each of `@reqlan/language`, `@reqlan/analytical`, `@reqlan/cli`, `@reqlan/mcp`, and every `@reqlan/analytical-<platform>-<arch>` platform package must have a Trusted Publisher on npmjs. com for GitHub Actions with org / user `littletuna4`, repository `reqlan`, workflow filename `deploy-npm.yml`, allowed action `npm publish`. Package `repository.url` must match `https://github.com/littletuna4/reqlan.git`. Provenance attestations are generated automatically for public packages from this public repo. Bootstrap: first publish of each scoped package can be done locally ( you must be logged in to npm as an `@reqlan` org member ) with `pnpm --filter @reqlan/language publish --access public --no-git-checks`, then platform packages, then analytical, then cli, then mcp — or wait for the trusted-publisher CI path after packages exist and Trusted Publisher is configured. Note: Packages must be `private: true` to skip local `changeset publish` ( `pnpm run release:npm` ), as with `reqlan-extension`. Platform packages are in the Changesets `ignore` list ( `@reqlan/analytical-*` ). Git `@reqlan/analytical` does not list them as `optionalDependencies`. ["../../scripts/prepare-native-packages.mjs"] `--publish-versions` writes pinned optionalDependencies for the npm checkout only. CI publishes platform packages per-package after binaries are built and does not use `changeset publish` for those tarballs. Published packages declare `publishConfig.access: public`. Trusted Publisher is configured on npmjs. com for each `@reqlan/analytical-<platform>-<arch>` package0.266
npm_package_readme["../../packages/cli/test/readme-native-install.test.ts"]donePublishable npm packages ( `@reqlan/language`, `@reqlan/analytical`, `@reqlan/cli`, `@reqlan/mcp` ) ship README. md generated from each package's `README.template.md`. Pattern matches [extension_readme]: centered logo, package name, description, features, phonebook links, and Changesets changelog body. Generated by ["../../scripts/generate-npm-package-readmes.ts"] via root `pnpm run build:readme`. Contact, Discord, sponsorship, and repository links come from [phonebook_reqs.phonebook] via ["../../scripts/phonebook.ts"] per [phonebook_reqs.npm_package_readme_links]. CLI native-engine install note: ["./native_host_binary.rq".published_host_native_install].0.046
prerelease_tests["../../packages/analytical/test/release-ci-gate.test.ts"], ["../../packages/analytical/test/release-ci-gate.test.ts:one build is reused by crate tests, check, and package tests"], ["../../packages/analytical/test/release-ci-gate.test.ts:pnpm test runs crate tests"], ["../../packages/analytical/test/release-ci-gate.test.ts:TypeScript compile generates Langium sources first"]doneJS / TS package tests ( `pnpm run test:js` ) run after the shared TypeScript compile ( `pnpm run build:tsc` ) from this git checkout. GitHub CI runs them in the same job as crate tests and ["../core_analysis/check.rq".check], after that compile ( ["./distribution.rq".ci_gate] ). This job runs on every pull request and on main before versioning. Host native addon is required because analytical and language tests load `reqlan-napi`. The host release build compiles `reqlan-napi` only. Crate tests compile `reqlan-lsp`. That binary ships in the VSIX, not in this host package. Azure runs `pnpm run test:js` before VSIX publish ( [extension_distribution] ). Local `pnpm run test` runs `test:js` then `test:rust` ( ["../core_analysis/rust_port.rq".rust_crate_layout] ). The implementation lives in ["../../.github/workflows/ci.yml"]; ["../../.github/workflows/release.yml"] calls it with `workflow_call` as part of ["./distribution.rq".ci_gate]. Related: ["../core_analysis/check.rq".check_meta_implementation]0.069
rust_binary_distribution["../../packages/analytical/test/load-native.test.ts"], ["../../packages/analytical/test/native-packaging.test.ts"], ["../../packages/analytical/test/native-packaging.test.ts:deploy-npm publishes platform packages before @reqlan/analytical"], ["../../packages/analytical/test/native-packaging.test.ts:deploy-npm builds natives when analytical was bumped, not when npm_ref is language"], ["../../packages/analytical/test/native-packaging.test.ts:analytical version is SSOT for platform packages; Changesets ignores them"], ["../../packages/analytical/test/native-packaging.test.ts:@reqlan/analytical optionalDependencies are publish-only, not in git"], ["../../packages/analytical/test/require-natives-published.test.ts"]in-progressOne 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
site_distribution["../../packages/analytical/test/native-packaging.test.ts"]GitHub 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
version_management["../../packages/analytical/test/native-packaging.test.ts"], ["../../packages/analytical/test/native-packaging.test.ts:analytical version is SSOT for platform packages; Changesets ignores them"], ["../../packages/analytical/test/native-packaging.test.ts:@reqlan/analytical optionalDependencies are publish-only, not in git"]donePackage versions are managed with Changesets via ["../../.changeset/config.json"]. Publishable channels ( each tag-driven ): - Marketplace / Open VSX: ["./distribution.rq".extension_package] ( private npm package; tagged `ext/v*` ) - GitHub Pages: ["./distribution.rq".site_package] ( tagged `site/v*` ) - npm: `@reqlan/language`, `@reqlan/analytical`, `@reqlan/cli`, and `@reqlan/mcp` ( tagged `language/v*`, `analytical/v*`, `cli/v*`, `mcp/v*` ) `reqlan-extension` has its own semver. It is not version-locked to `@reqlan/analytical`. The extension can update independently of the analytical surfaces it uses ( [extension_package] ). The version of `@reqlan/analytical` is the single source of truth for every `@reqlan/analytical-<platform>-<arch>` package ( [rust_binary_distribution] ). Platform packages are in the Changesets `ignore` list ( `@reqlan/analytical-*` ). Git `@reqlan/analytical` does not list them as `optionalDependencies`, so `changeset version` can run. This workspace still links the checkout packages during `pnpm install` via `packageExtensions` in ["../../pnpm-workspace.yaml"] ( `workspace:*`, not npm ). After `changeset version`, ["../../scripts/prepare-native-packages.mjs"] copies the analytical version onto each platform package. The published tarball lists pinned `optionalDependencies` ( `--publish-versions` ) so CLI and MCP customers get the host binary. Platform native packages are not a separate tag channel; they ride `analytical/v*` ( [rust_binary_distribution] ). VSIX packaging uses the package. json versions in that git commit ( [vsix_native_not_from_npm] ). `@reqlan/language`, `@reqlan/cli`, `@reqlan/mcp`, and the site keep their own versions. Contributors record release intent by adding a changeset file when a publishable package changes.0.233
vsix_native_not_from_npm["../../packages/analytical/test/native-packaging.test.ts"]doneAzure must not use the npm deploy path as an input when it packs VSIXes. Git at the `ext/v*` tag is canonical. Azure compiles the [native_targets] matrix from that commit ( [vsix_export], [extension_distribution] ). npm stays the install path for CLI and MCP only ( [npm_distribution], [rust_binary_distribution] ).0.241
repo_license["../../packages/analytical/test/repo-license.test.ts"], ["../../packages/analytical/test/repo-license.test.ts:root LICENSE is AGPL-3.0 and matches extension LICENSE"], ["../../packages/analytical/test/repo-license.test.ts:publishable packages and crates declare AGPL-3.0-only"]doneThe repository root must declare the same licence as the publishable packages and crates. SPDX id: `AGPL-3.0-only`. The root must hold a `LICENSE` file with the GNU Affero General Public License version 3 text. The extension package `LICENSE` must use the same text as the root `LICENSE`. Package metadata must set `"license": "AGPL-3.0-only"` for the workspace root and for every publishable package under `packages/`. The Rust workspace must set `license = "AGPL-3.0-only"` in ["../../crates/Cargo.toml"].0.040
native_host_binary["../../packages/analytical/test/load-native.test.ts"], ["../../packages/analytical/test/native-packaging.test.ts"]doneSelect the native core-engine binary from the extension host. The host is the Node process that runs the extension. Read `process.platform` and `process.arch` from that process. Do not use the platform of the VS Code UI client. Examples: - UI on Windows and host on Linux SSH: use a linux tuple. - UI on Windows and host on WSL: use a linux tuple. - UI and host on macOS: use a darwin tuple. Map the platform and the arch to one tuple in ["./distribution.rq".native_targets]. Load only the binary that matches that tuple. Do not load a binary for a different tuple. If the platform and the arch are not in ["./distribution.rq".native_targets], fail. If the binary is missing, fail. Do not use sql. js. Keep the loader map the same as ["../../scripts/native-targets.mjs"]. Local development: [native_host_binary_development]. Production distribution: [native_host_binary_distributed]. Implementation: ["../../packages/analytical/src/native/load-native.ts"].0.144
native_host_binary_development["../../packages/analytical/test/load-native.test.ts"], ["../../packages/analytical/test/native-packaging.test.ts"]doneUse this procedure on a developer machine ( F5 and `pnpm run build` ). Identify the host from `process.platform` and `process.arch` of the build process. The build process and the extension host must be the same machine. Copy the matching `.node` file to `packages/extension/native/reqlan_napi.node`. Write `packages/extension/native/target.json` with the host tuple. If the binary is not present, build it with `cargo build -p reqlan-napi -p reqlan-lsp --release`. At run time, search in this order: 1. The `native/` folder of the extension, if `target.json` records the host tuple. 2. The resolved `main` of the host npm package ( `createRequire` from `@reqlan/analytical/package.json` ). 3. The host file in `packages/analytical-native/<napiSuffix>/` ( workspace package directory, same layout as a published package ). 4. The host npm package name. 5. `crates/target/<rustTarget>/release` and `crates/target/release`. 6. The debug folders with the same names. Do not search packages for other platforms. If `target.json` records a different tuple, do not load `native/reqlan_napi.node`. Windows cargo emits `reqlan_napi.dll`; the loader uses `process.dlopen` for `.dll` and `.node` ( Node `require` only loads `.node` ). Windows UI with a WSL extension host uses the linux tuple ( [native_host_binary] ). Windows UI with a Windows extension host cannot load a `.node` staged from WSL; restage on Windows or open the folder in a WSL remote window. Before tests, the workspace host package must contain the `.node` so loaders behave like production ( [native_host_binary_distributed] ). `scripts/ensure-host-native.mjs` uses an existing matrix binary, or cargo locally. Azure compiles the ["./distribution.rq".native_targets] matrix from git and stages those artifacts; it does not fetch binaries from npm. Detail: [development_build.extension_host_native_stage]. Implementation: ["../../scripts/stage-host-native.mjs"], ["../../scripts/ensure-host-native.mjs"], ["../../packages/extension/src/analytical_submodule/index.ts"].0.078
native_host_binary_distributed["../../packages/analytical/test/load-native.test.ts"], ["../../packages/analytical/test/native-packaging.test.ts"]in-progressUse 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["../../packages/analytical/test/native-packaging.test.ts"], ["../../packages/cli/test/readme-native-install.test.ts"]doneAfter 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
mcp_check["../../../packages/mcp/test/server.test.ts:MCP surface is click, check, diff, completion_status, and prompt"], ["../../../packages/mcp/test/server.test.ts:check returns JSON issue rows"]doneMCP `check` wraps [check] for AI clients ( [mcp_server] ). The tool returns JSON issue rows in [check_order_by_target] order. An empty list means that there are no issues. Optional arguments match the CLI [check] flags: glob, wildcard-zero, wildcard-one, skip-targets, and skip-gitignored-targets. `glob` is one path pattern or a list of path patterns ( [check_glob_patterns] ). A file that matches any pattern is in the scan. Related: [mcp_tools] [check] ["../../core_analysis/check.rq".check_unresolved_imports]0.243
mcp_click_retrieval["../../../packages/mcp/test/server.test.ts:MCP surface is click, check, diff, completion_status, and prompt"], ["../../../packages/analytical/test/click.test.ts:click API returns session key and unique then revisit"]doneMCP `click` is the canonical search and retrieval tool ( [click], [mcp_server] ). One tool returns compact unique context, ranked ambiguous matches, or search hits. A second click on the same centre in the session returns connected content ( [agent_advisory] ). This surface maximises the token-to-insight ratio: names, short bodies, and caps — not edge dumps or full-graph lists. Keyword search, file context, local graph, and subtree expansion are click paths, not extra MCP tools. Agents must pass `sessionKey` on the next click. Related: [mcp_keyword_search], [mcp_tree_interrogation], [mcp_tree_summarisation].0.144
mcp_diff["../../../packages/mcp/test/server.test.ts:MCP surface is click, check, diff, completion_status, and prompt"], ["../../../packages/mcp/test/server.test.ts:diff returns created JSON and text bodies"], ["../../../packages/mcp/test/server.test.ts:omitted targets follow the clean and dirty defaults"], ["../../../packages/mcp/test/server.test.ts:a bad revision is a tool error"]doneMCP `diff` wraps [diff] for AI clients ( [mcp_server] ). Arguments are optional `from`, optional `to`, and optional `verbosity` ( [diff_verbosity] ). The tool returns the same JSON array as `reqlan diff --json`. An empty array means that no idea changed. A missing revision is a tool error. Related: [mcp_tools] [diff]0.074
mcp_interaction_discovery["../../../packages/mcp/test/server.test.ts:MCP surface is click, check, diff, completion_status, and prompt"]doneMCP clients discover tools through the MCP protocol tool list. Do not expose a list_interactions MCP tool.0.040
mcp_keyword_search["../../../packages/mcp/test/server.test.ts:MCP surface is click, check, diff, completion_status, and prompt"], ["../../../crates/reqlan-analytical/tests/click.rs:click_falls_through_to_search_when_nothing_matches"]doneKeyword search across idea names, bodies, and attributes is a [click] path when no centre matches. Do not expose a separate MCP search tool.0.059
mcp_tools[mcp_server_test], ["../../../packages/mcp/test/server.test.ts:MCP surface is click, check, diff, completion_status, and prompt"]doneThe MCP server ( `@reqlan/mcp`, [mcp_server] ) exposes a small tool set for AI clients. Search and retrieval use [mcp_click_retrieval] only. Reference checks use [mcp_check]. Idea diffs use [mcp_diff]. Do not expose parse, search, list, file context, local graph, summarise subtree, requirement_reference, file_reference, or list_interactions as MCP tools. Those operations stay on AnalysisApi and CLI when they exist. Headless index storage follows [application_memory] ( `<base>/.reqlan` ), shared with the extension and CLI.0.097
mcp_tools_prompt["../../../packages/mcp/test/server.test.ts:MCP surface is click, check, diff, completion_status, and prompt"]doneAn mcp tool may provide a prompt-oriented entry point for working with the requirement graph. That tool must call [mcp_click_retrieval] for search and retrieval. It must not call the removed tools.0.040
mcp_tree_interrogation["../../../packages/mcp/test/server.test.ts:MCP surface is click, check, diff, completion_status, and prompt"], ["../../../crates/reqlan-analytical/tests/click.rs:click_returns_unique_idea_without_edges"], ["../../../crates/reqlan-analytical/tests/click.rs:click_code_file_returns_backlinks_and_comment_refs"]doneFile and idea neighbourhoods are a [click] unique result ( outbound, backlinks, siblings ). Do not expose a separate MCP file-context or local-graph tool.0.059
mcp_tree_summarisation["../../../packages/mcp/test/server.test.ts:MCP surface is click, check, diff, completion_status, and prompt"], ["../../../crates/reqlan-analytical/tests/click.rs:click_revisit_returns_connected_content"]doneCompact subtree context is a [click] revisit: connected content for a centre already clicked in the session. Do not expose a separate MCP summarise-subtree tool.0.059
first_paint_startup"../../../packages/extension/test/startup-gate.test.ts", "../../../packages/extension/test/safe-webview-post.test.ts", "../../../packages/analytical/src/index-store/workspace-index.ts"doneThe activity-bar HTML shell is assigned by ["../../../packages/extension/src/activity_bar_module/activity-bar-webview-provider.ts"] after one event-loop turn ( retry once on invalid-state ). Host `postMessage` starts only after the webview `ready` handshake; disposed / invalid-state errors are swallowed by ["../../../packages/extension/src/shared/safe-webview-post.ts"]. Its Svelte app installs the host message listener before mount, then sends the one-shot `ready` handshake from a task queued after its first animation frame. ["../../../packages/extension/src/extension/startup-gate.ts"] resolves that handshake once; `IndexService.activate` then discovers bases and syncs. If no view opens, a bounded three-second fallback starts the index without any visible first paint to contend with. Index open / sync requires the host-matching core engine ( rusqlite ); missing `.node` fails activate. Windows claim / dispose races: ["./startup-performance.rq".webview_claim_race].0.148
configuration_import_roots["../../../packages/language/test/config.test.ts:empty object uses default alias mapping"], ["../../../packages/language/test/config.test.ts:importRoots alias only overrides the alias"], ["../../../packages/language/test/config.test.ts:relative root resolves against the base root"], ["../../../packages/language/test/config.test.ts:absolute filesystem root is used directly"], ["../../../packages/language/test/config.test.ts:Windows drive-letter root is used as a file URI not scheme c:"], ["../../../packages/language/test/config.test.ts:file URI root is used directly"], ["../../../packages/language/test/config.test.ts:multiple importRoots map aliases to different roots"], ["../../../packages/language/test/config.test.ts:longest alias wins when mappings overlap"], ["../../../packages/language/test/config.test.ts:empty string alias entries are skipped"], ["../../../packages/language/test/config.test.ts:empty string root is ignored on a mapping"], ["../../../packages/language/test/config.test.ts:invalid importRoots entries are skipped"], ["../../../packages/language/test/config.test.ts:unknown properties are ignored while known keys still apply"], ["../../../packages/language/test/config.test.ts:invalid JSON falls back to undefined load"], ["../../../packages/language/test/config.test.ts:non-object JSON falls back to undefined load"], ["../../../packages/language/test/config.test.ts:non-array importRoots falls back to undefined load"], ["../../../packages/language/test/config.test.ts:empty importRoots array uses default alias mapping"], ["../../../packages/language/test/config.test.ts:resolveRqConfig falls back to defaults when applying JSON is invalid"], ["../../../packages/language/test/config.test.ts:aliased path uses relative root from applying config"], ["../../../packages/language/test/config.test.ts:aliased path uses workspace folder when root is omitted"], ["../../../packages/language/test/path-resolve.test.ts:loads importRoots list from nearest base config"], ["../../../packages/language/test/path-resolve.test.ts:resolves using config importRoots mapping"], ["../../../packages/language/test/path-resolve.test.ts:rewrite leaves aliased paths unchanged"], ["../../../packages/language/test/path-resolve.test.ts:toDirectoryUri does not parse a drive letter as a URI scheme"], ["../../../packages/language/test/completion.test.ts:completes import-root alias paths"], ["../../../packages/language/test/comment-reference-resolution.test.ts:creates a document link for an import-root aliased comment reference"], ["../../../crates/reqlan-index/src/path_resolve.rs:locate_uses_import_roots_from_applying_config"], ["../../../crates/reqlan-index/tests/broken_references.rs:check_honours_import_roots_from_applying_config"], ["../../../crates/reqlan-lsp/tests/parity.rs:import_root_config_file_refs_match_check"], ["../../../crates/reqlan-parse/src/path.rs:resolves_default_alias_against_workspace_folder"], ["../../../crates/reqlan-index/src/path_resolve.rs:missing_import_roots_uses_default_alias"], ["../../../crates/reqlan-index/src/path_resolve.rs:relative_root_resolves_against_base"]`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_location["../../../packages/language/test/config.test.ts:returns undefined when no config exists"], ["../../../packages/language/test/config.test.ts:loads config from the owning base .reqlan"], ["../../../packages/language/test/config.test.ts:loads config from an ancestor base"], ["../../../packages/language/test/config.test.ts:nearest base config wins over farther ones"], ["../../../packages/language/test/config.test.ts:owning base without config does not inherit parent"], ["../../../packages/language/test/config.test.ts:resolveRqConfig uses defaults when no applying file exists"], ["../../../packages/language/test/path-resolve.test.ts:loads importRoots list from nearest base config"], ["../../../crates/reqlan-index/src/path_resolve.rs:missing_import_roots_uses_default_alias"], ["../../../crates/reqlan-index/src/path_resolve.rs:relative_root_resolves_against_base"]An optional `.reqlan/config.json` may appear under a base's `.reqlan` directory. For a given `.rq` file, the applying base is the nearest ancestor directory that owns a `.reqlan` folder. The applying config is that base's `.reqlan/config.json` when present. If the owning base has no `config.json`, or no owning base is found, defaults from [configuration_import_roots] apply. A child base does not inherit a parent base's config.0.190
configuration_rqignore["../../../packages/analytical/test/rqignore.test.ts"], ["../../../packages/analytical/test/rqignore.test.ts:inverse rqignore patterns opt binary files back in"], ["../../../packages/analytical/test/create-base.test.ts:seeds .reqlan/.rqignore when creating a new base"], ["../../../packages/analytical/test/base-discovery.test.ts:skips node_modules and does not treat .reqlan as a walkable base root"], ["../../../packages/analytical/test/workspace-index.test.ts:skips .rq files under rqignore patterns"]doneEach base may define path ignore rules in `.reqlan/.rqignore` using **gitignore syntax**. Patterns are relative to the base root ( parent of `.reqlan` ), not the `.reqlan` directory. Owned by `@reqlan/analytical` so the CLI, MCP, and extension share one filter for discovery and indexing walks. Built-in defaults always apply ( dependencies, venvs, build output, VCS / editor stores, `*.db3` / sqlite DBs and SQLite sidecars, binary globs per ["../index-host/index.rq".binary_ignore], files that have no comments per ["../index-host/index.rq".commentless_file_ignore], `*.secret.rq`, hidden entries, and `.reqlan/` itself ); the on-disk file adds or overrides via the same syntax, including `!` negation. New bases seed `.reqlan/.rqignore` with those defaults ( ["../index-host/index.rq".rqignore] ). Missing or unreadable `.rqignore` still uses built-in defaults. Location convention: [configuration_location]. Application memory: ["../index-host/index.rq".application_memory].0.223
configuration_schema_file["../../../packages/language/test/config.test.ts:unknown properties are ignored while known keys still apply"], ["../../../packages/language/test/config.test.ts:schema file documents importRoots mappings"], ["../../../packages/language/test/config.test.ts:schema $id matches public v1 host path"]doneThe machine-readable JSON Schema for `.reqlan/config.json` is ["../../../packages/extension/schemas/config.schema.json"]. That file is the single authoring source. Its `$id` is the public URL `https://reqlan.com/schemas/v1/config.schema.json`. Path segment `v1` is schema compatibility version: additive keys stay on `v1`; breaking shape changes introduce `v2` and a new seed URL. The site hosts a synced copy under `/schemas/v1/` ( ["../../site/site.rq".sync_config_schema] ). The extension contributes the local schema for `**/.reqlan/config.json` via `jsonValidation` in ["../../../packages/extension/package.json"] ( offline editor path ). New bases seed `$schema` to the public `$id` ( ["./installation.rq".base_config_seed] ). `.reqlan/config.json` is a JSON object. Unknown properties are not part of the schema and are ignored when loading. `$schema` is an allowed property.0.105
barrel_page["../../../packages/analytical/test/barrel-page.test.ts:creates one child file per idea and a container defaulting to file basename"], ["../../../packages/analytical/test/barrel-page.test.ts:writes child files and replaces the source with a container"], ["../../../packages/language/test/code-actions.test.ts:offers barrel page source action when the file has top-level ideas"], ["../../../packages/language/test/code-actions.test.ts:omits barrel page when only quickfix is requested or there are no ideas"], ["../../../crates/reqlan-lsp/tests/code_actions.rs:offers_barrel_page_source_action_when_the_file_has_top_level_ideas"], ["../../../crates/reqlan-lsp/tests/code_actions.rs:omits_barrel_page_when_only_quickfix_is_requested_or_there_are_no_ideas"], ["../../../packages/extension/test/barrel-page-apply.test.ts:maps child file names next to the source path"], ["../../../packages/extension/test/barrel-page-apply.test.ts:detects overwrite conflicts and source-self collision"]doneWhen a `.rq` page grows large, barrel it into a container: create one sibling file per top-level idea, import those files into the current page, and replace the page body with a single container idea whose name the user chooses ( default: the sanitized file basename ). Same-file sibling refs are rewritten to qualified imports in the child files. Existing page imports are copied into each child. Top-level ideasets are preserved in the container file. Behaviour lives in ["../../core-architecture.rq".analytical_package] and is exposed via [cli] / ["../../cli/cli_package.rq".commands] ( `reqlan barrel` ). Extension: file-level source code action **Barrel page into container … ** and command palette **Barrel Page** ( `reqlan.barrelPage` ) prompt for the container name, confirm, then create child files and rewrite the active page via WorkspaceEdit. Related: [file_based_code_actions] [decompose]0.184
code_actions_ignore_error["../../../packages/language/test/code-actions.test.ts:offers ignore-error quick fix on a line with a linking error"], ["../../../packages/language/test/code-actions.test.ts:omits ignore-error when only refactor is requested"], ["../../../crates/reqlan-lsp/tests/code_actions.rs:offers_ignore_error_quick_fix_on_a_line_with_a_linking_error"], ["../../../crates/reqlan-lsp/tests/code_actions.rs:omits_ignore_error_when_only_refactor_is_requested"], ["../../../packages/language/test/ignore-error-action.test.ts:inserts indented ignore comment before the error line"], ["../../../packages/language/test/ignore-error-action.test.ts:uses tab indent and CRLF when the error line uses them"], ["../../../packages/language/test/ignore-error-action.test.ts:wraps the ignore comment for a hash-comment error line"], ["../../../packages/language/test/ignore-error-action.test.ts:inserts at the start of the file for a first-line error"], ["../../../packages/language/test/ignore-error-action.test.ts:offers one action per diagnostic line"], ["../../../packages/language/test/ignore-error-action.test.ts:omits the action when //rq-ignore-error already suppresses the line"], ["../../../packages/extension/test/ignore-error-code-action.test.ts:accepts reqlan source and comment-reference codes"], ["../../../packages/extension/test/extension-package.test.ts:extension main registers ignore-error code actions for comment files"]doneA Quick Fix [code_actions] on a line with diagnostics inserts [comment_reference_ignore] ( `//rq-ignore-error` ) on the line before the error. The inserted comment uses the same indent as the error line. One action is offered per line when that line has one or more diagnostics. The action is omitted when that line is already suppressed, and when the client asks only for non-quickfix kinds. Available in `.rq` files and in a comment context in a code file ( ["../language/comment-references/functional-code-comment-references.rq".references_in_functional_code_comments] ). In `#` comments the action inserts `# //rq-ignore-error` so the line stays a comment.0.074
create_idea_below_idea_containing_unresolved_reference_under_cursor["../../../packages/language/test/code-actions.test.ts:creates the missing idea below the containing idea when only one is unresolved"], ["../../../packages/language/test/code-actions.test.ts:offers all or a specific unresolved idea when the caret idea has several"], ["../../../packages/language/test/code-actions.test.ts:omits create-below when the caret idea has no unresolved local references"], ["../../../packages/language/test/code-actions.test.ts:omits create-below for a qualified unresolved reference"], ["../../../packages/language/test/code-actions.test.ts:omits create-below when only refactor is requested"], ["../../../crates/reqlan-lsp/tests/code_actions.rs:creates_the_missing_idea_below_the_containing_idea"], ["../../../crates/reqlan-lsp/tests/code_actions.rs:offers_all_or_a_specific_unresolved_idea"], ["../../../crates/reqlan-lsp/tests/code_actions.rs:omits_create_below_when_the_caret_idea_has_no_unresolved_local_references"], ["../../../crates/reqlan-lsp/tests/code_actions.rs:omits_create_below_for_a_qualified_unresolved_reference"], ["../../../crates/reqlan-lsp/tests/code_actions.rs:omits_create_below_when_only_refactor_is_requested"]doneIf a local idea reference does not resolve, a Quick Fix [code_actions] creates a new idea below the idea that contains the reference. The action uses the unresolved local idea names in the idea that contains the caret: - one unresolved name: apply `Create '<name>' below` directly - several unresolved names: offer `Create all unresolved ideas below` and one action per name Qualified file / import references are omitted. The new idea is an empty block inserted after the containing idea.0.074
file_based_code_actions["../../../packages/language/test/code-actions.test.ts:offers barrel page source action when the file has top-level ideas"]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
search_code_actions["../../../packages/language/test/code-actions.test.ts"], ["../../../packages/extension/test/reference-search.test.ts"], ["../../../packages/extension/test/extension-package.test.ts"], ["../../../crates/reqlan-search/tests/fuzzy.rs"], ["../../../crates/reqlan-lsp/tests/code_actions.rs:offers_search_code_action_when_cursor_is_inside_a_resolved_reference"], ["../../../crates/reqlan-lsp/tests/code_actions.rs:offers_wrap_code_action_for_a_prose_selection"], ["../../../crates/reqlan-lsp/tests/code_actions.rs:wraps_the_word_under_the_cursor_when_selection_is_empty"]donewhen cursor is in a `[reference]`, there shouls be a code action to search for references to that idea. it should also allow wrapping a selected string, or the word at the cursor when in idea-body prose, as a new `[reference]`. it should open up a webview modal that shows a search dialog that allows the user to search for potential references. the search menu should preserve / show the context of the would-be reference: the rest of the containing idea, with styling, and with the selected text pulsing / styled prominently. it should support fuzzy / partial searching via [search_analysis.fuzzy_search]. it should list the closest matches in a paginated view. selecting the idea should fill / replace the reference ( or wrap the selection as `[name]` ) and an import ( if required ) appropiately The lightbulb command ( `reqlan.searchReference` ) is arg-less because VS Code caches arg-bearing code-action commands and may dispose them on refresh ( error text like Actual command not found ). At invoke time the extension resolves the site via LSP `reqlan/referenceSearchSite`, or a local parse of the active editor when the language client is not yet running — it must not fail with a false " language server is not ready " when a local site can be resolved.0.116
base_config_seed["../../../packages/analytical/test/create-base.test.ts:seeds .reqlan/config.json when creating a new base"], ["../../../packages/language/test/config.test.ts:schema file documents importRoots mappings"], ["../../../crates/reqlan-index/src/ignore.rs:create_base_seeds_config_with_public_schema"]doneNew bases write `.reqlan/config.json` with `$schema` pointing at the public v1 schema URL via [create_base_impl]. Seed shape: `{"$schema":"https://reqlan.com/schemas/v1/config.schema.json"}`. Semantics and discovery of applying config: [configuration.configuration_location], [configuration.configuration_import_roots], [bases.base_configuration]. Schema / editor validation: [configuration.configuration_schema_file]. A child base does not inherit a parent base's config file. Existing bases are not rewritten ( idempotent create leaves them alone ).0.076
installation_event["../../../../packages/language/test/parsing.test.ts:parse thanks-for-installing template"], ["../../../../packages/extension/test/onboarding-rq-highlight.test.ts"]doneOn installation of the extension a webview should be opened showing: - A welcome message - Resolved links to site, github, docs etc. ( not template placeholders ) - A syntax-highlighted example `.rq` with real URLs ( clickable ) from ["../../../../packages/extension/templates/thanks-for-installing.template.rq"] after placeholder substitution - A control to open that example as an untitled `.rq` editor beside the webview - Short tips for the activity bar and `@reqlan` chat - A thanks to sponsors Place in overall install sequencing: ["../installation.rq".welcome_webview_install] / ["../installation.rq".extension_installation]. Implemented as a Svelte webview under ["../../../../packages/extension/webviews/onboarding"] bundled to ["../../../../packages/extension/media/webviews/onboarding"] and opened once on first activation by ["../../../../packages/extension/src/extension/open-thanks-for-installing.ts"] via ["../../../../packages/extension/src/extension/onboarding-panel.ts"]. Resource links and template values are resolved at runtime from [phonebook_reqs.phonebook] through ["../../../../packages/extension/src/shared/phonebook.ts"] and posted to the webview; the example block imports ["../../../../packages/extension/templates/thanks-for-installing.template.rq"] via Vite `?raw` and substitutes `{{…}}` placeholders before display. Highlighting uses the onboarding tokenizer in ["../../../../packages/extension/webviews/onboarding/lib/rq-highlight.ts"]. The source template still uses placeholders such as { { SITE_URL } }; those matching braces are body prose per ["../../../language/syntax-edge-cases.rq".nested_curly_braces] and must parse without errors. Activation state is stored in extension global state key `onboarding` with `onboardingMessageShown` and `lastVersion` per ["../../../../packages/extension/src/extension/onboarding-state.ts"]. VS Code persists `globalState` in the extension global storage directory ( `globalStorage/reqlan.reqlan-extension/state.vscdb` under the editor user data folder ).0.141
extension_startup_reliability"../../../packages/extension/test/startup-gate.test.ts", "../../../packages/extension/test/safe-webview-post.test.ts", "../../../packages/analytical/src/index-store/workspace-index.ts"doneReqlan startup must make the activity-bar shell and contributed commands available before optional indexing, parser construction, database initialization, or language-client startup can monopolize the extension host. The implementation contract is [first_paint_contract], [webview_claim_race], [deferred_startup_sequence], [lazy_runtime_dependencies], and [development_bundle_freshness]. Operational diagnosis follows [startup_diagnostics]. [activation.activation_sequence] [activitybar.loading_state] [indexer.nonblocking_index] [build.extension_bundle]0.046
first_paint_contract"../../../packages/extension/test/startup-gate.test.ts", "../../../packages/extension/test/safe-webview-post.test.ts"doneThe platform spinner ends only after VS Code loads the host module, calls `activate`, the provider registers, and `resolveWebviewView` assigns HTML. `resolveWebviewView` is async: it binds the view, yields one turn so the overlay can be claimed, then assigns the lightweight HTML / Svelte shell ( retry once on invalid-state ). It does **not** `postMessage` in that method. The webview installs its host message listener, mounts, waits for its first animation frame, then posts the one-shot `ready` signal from a queued task. Host messages start only after that handshake. Index discovery / sync waits for the same signal so synchronous parser or database setup cannot race the first visible frame. Windows overlay restore can dispose and re-resolve the sidebar; the provider rebinds and waits for a new `ready`. [activation.first_paint_startup] [webview_claim_race] ["../../../packages/extension/webviews/activity-bar/App.svelte"] ["../../../packages/extension/webviews/activity-bar/state/app.svelte.ts"] ["../../../packages/extension/src/extension/startup-gate.ts"] ["../../../packages/extension/src/shared/safe-webview-post.ts"]0.058
invalid_url_activation_failure"../../../packages/analytical/test/load-native.test.ts", "../../../packages/extension/test/extension-package.test.ts"doneThe concrete incident failed while requiring `out/extension/main.cjs`, before `activate()` ran: `TypeError: Invalid URL` in `embedPhysicsCoreSource`. Runtime `readFileSync(new URL(..., import.meta.url))` is unsafe when esbuild emits CommonJS for an ES2017 target: `import.meta.url` is unavailable / empty and source-relative assets do not exist beside the bundled entry. The HTML export used to embed physics via `html-export-assets.ts` `embedPhysicsCoreSource`. That writer is gone; export now inlines assets from ["../../../crates/reqlan-export/assets/app.js"]. Code that still needs a module directory or `createRequire` ( core engine loader and parse worker ) must not mention `import.meta` statically in a way that esbuild CJS empties: prefer CJS `__dirname` / `__filename` when those exist ( extension host bundle ), and `import.meta.url` on the Node ESM path ( CLI / MCP ). The host esbuild step defines `import.meta.url` as `import_meta_url` from this file's `__filename` so the CJS bundle stays valid and does not warn `empty-import-meta`. CLI / MCP keep the TypeScript `import.meta.url` emit. Do not eval `import.meta.url` — Node 24 treats that as a script eval and throws `Cannot use 'import.meta' outside a module`. ["../../../packages/analytical/src/native/load-native.ts"] ["../../../packages/language/src/reqlan-async-parser.ts"] ["../../../packages/extension/esbuild.mjs"]0.040
lazy_runtime_dependencies"../../../packages/analytical/src/index-store/workspace-index.ts"doneBase discovery must be cheap: - Constructing `WorkspaceIndex` does not construct Langium / Chevrotain services; index sync uses the core native engine ( rusqlite ). - The host-matching `reqlan_napi` `.node` is required at activate; there is no sql. js vendor bundle in the extension host. - Export / physics source is generated at build time rather than read via extension-runtime URLs. ["../../../packages/analytical/src/index-store/workspace-index.ts"] ["../../../packages/analytical/src/index-store/sqlite-store.ts"] ["../../../packages/analytical/src/index-store/index-diagnostics-store.ts"] ["../../../packages/extension/esbuild.mjs"]0.046
verification_contract"../../../packages/extension/test/startup-gate.test.ts", "../../../packages/extension/test/safe-webview-post.test.ts", "../../../packages/analytical/src/index-store/workspace-index.ts"doneStartup changes are complete only when: - The production extension build succeeds and emits `out/extension/main.cjs`. - The main bundle does not embed a sql. js vendor; index open requires the core native engine. - Extension startup-gate, webview-claim, and analytical lazy-service tests pass. - Activity-bar shell paint is visually checked in a newly restarted F5 development host; activation failures are cached for the lifetime of a failed host session. - Requirement analysis resolves the updated startup graph.0.040
webview_claim_race"../../../packages/extension/test/safe-webview-post.test.ts"doneSetting `webview.html` or calling `postMessage` before the workbench has claimed the overlay ( or after it has disposed it ) can fail with `Webview is in an invalid state` / `Webview is disposed`. This is intermittent and more common on Windows during extension init, when the activity-bar view is restored in the same tick as another webview ( first-run onboarding ). Contract: - Activity-bar host posts only after the webview's `ready` signal; `post` is a no-op until then and swallows disposed / invalid-state errors. - `resolveWebviewView` may run more than once: dispose prior view listeners, clear `webviewReady`, rebind, reassign HTML. - First-run onboarding waits for the activity-bar paint gate or 400 ms, whichever first, so it does not register a second webview service worker during sidebar claim. Palette `reqlan.showOnboarding` stays immediate. Index and language-client startup still use the existing paint / timeout fallbacks — a dead sidebar must not strand indexing. [first_paint_contract] [activation.onboarding_check] ["../../../packages/extension/src/activity_bar_module/activity-bar-webview-provider.ts"] ["../../../packages/extension/src/extension/main.ts"] ["../../../packages/extension/src/shared/safe-webview-post.ts"]0.091
git_dates_background_indexing["../../../packages/extension/test/git-dates-background.test.ts"], ["../../../packages/extension/test/git-dates-background.test.ts:processes missing ids in small batches and yields between them"], ["../../../packages/extension/test/git-dates-background.test.ts:does nothing when the index is not ready"], ["../../../packages/extension/test/git-dates-background.test.ts:marks ids attempted even when the analyser fails"], ["../../../packages/extension/test/git-dates-background.test.ts:processes active-file priority ids before the global backlog"], ["../../../packages/extension/test/git-dates-background.test.ts:stops early when shouldStop flips so a new file can be prioritised"], ["../../../packages/extension/test/git-dates-background.test.ts:catalog events debounce and do not follow the short editor delay"], ["../../../packages/analytical/test/idea-timeline.test.ts:listIdeaIdsMissingGitDates returns ideas without dates"], ["../../../packages/analytical/test/idea-timeline.test.ts:listIdeaIdsMissingGitDates can filter or prefer a file"]doneHost wiring for [git_idea_timeline_analysis] / [indexer.git_dates]: after the ideas index is ready ( and when the catalog updates ), missing idea git dates must be filled by a mostly silent background process: - small batches - yields between batches so the extension host stays interactive - no progress UI / no blocking of Activity Bar context load or Timeline tab open - session-scoped attempted set so failed lookups are not hammered repeatedly - queue priority: ideas in the active `.rq` editor file are attempted before the global backlog; switching the active editor re-prioritises ( in-flight wave may stop and reschedule ) - catalog / save scheduling follows [git_dates_rate_cap] - git / node helper processes stay hidden per ["../../core_analysis/core.rq".consumption_silence] Consumers only read indexed columns; they must not invoke `git_dates` on the UI path. [git_idea_timeline_analysis] [indexer.git_dates] [git_dates_rate_cap] [ideas_summary_webview.timeline_page]0.158
git_dates_rate_cap["../../../packages/extension/test/git-dates-background.test.ts:catalog events debounce and do not follow the short editor delay"], ["../../../packages/extension/test/git-dates-background.test.ts:catalog waves wait for the min gap after a fill"]doneGit history analysis is expensive ( `git log -L` and follow logs per idea ). Do not start a git_dates wave on every `.rq` save or catalog notify. Catalog and index-status events must debounce ( quiet period after the last notify ) and must wait a minimum gap after a wave that actually filled dates. Editor-switch priority and draining a capped wave may use the short idle delay. Distinct from ["./graph-analysers.rq".indexing_trigger_filesave]: the ideas index still updates on save; only git analysis is rate-capped. Related: [git_dates_background_indexing], [indexer.git_dates], ["./index.rq".idea_index_triggers], ["./index.rq".git_information_capture], ["../../core_analysis/core.rq".consumption_silence].0.123
git_idea_timeline_analysis["../../../packages/analytical/test/idea-timeline.test.ts"], ["../../../packages/analytical/test/idea-timeline.test.ts:upsert preserves analyser git dates and change count across reindex"], ["../../../packages/analytical/test/idea-timeline.test.ts:listIdeaIdsMissingGitDates returns ideas without dates"], ["../../../packages/analytical/test/idea-timeline.test.ts:listIdeaIdsMissingGitDates includes ideas missing change count"], ["../../../packages/analytical/test/idea-timeline.test.ts:listIdeaIdsMissingGitDates can filter or prefer a file"], ["../../../packages/extension/test/git-dates-background.test.ts:processes active-file priority ids before the global backlog"], ["../../../packages/analytical/test/ideas-git-columns-perf.test.ts"]doneIdea creation and last-modified dates, plus change count, are derived from git history by the `git_dates` analyser and stored on the ideas index ( `git_created_at` / `git_modified_at` / `git_change_count` ). Calculation is owned by [git_dates_background_indexing] / [indexer.git_dates] — not by on-the-fly editor, Activity Bar focus, Timeline open, or Ideas table load. Active-editor queue priority for fill-in is specified on [git_dates_background_indexing]. Implemented by ["../../../crates/reqlan-index/src/git_dates.rs"] and ["../../../packages/analytical/src/index-store/sqlite-store.ts"]. [git_dates_background_indexing] [git_dates_rate_cap] [indexer.git_dates] [ideas_summary_webview.ideas_list]0.091
file_related_requirements["../../../crates/reqlan-analytical/tests/file_context.rs:file_context_includes_indexed_comment_links"], ["../../../crates/reqlan-index/tests/code_file_index.rs:indexes_comment_references_from_non_rq_files"]The extension should provide a view or command to get requirements relating to the currently open file. File-related lookup should follow both explicit file references and comment rq: links in that file. 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
indexing_trigger_auto["../../../packages/analytical/test/workspace-index.test.ts"]doneWhen the editor host is idle, run a **background staleness check** — not a reindex and not a soft full sync UI pass. Philosophy: computationally cheap. Load document mtimes in **one** SQLite read, compare each file's FS mtime in memory, and only then index mismatched or new files; drop deleted docs in one batched delete. A single MAX ( mtime ) watermark is not sufficient ( one file can get newer while another gets older ). If nothing is stale: no state transition, no progress UI, no parse. If some files are stale: index **only those files** under [indexer.nonblocking_index]. Schedule after a quiet period with no index activity; prefer running when the window is unfocused; defer or cancel if the user becomes active again. Extension host only ( [editor_index_adapter] ); CLI / MCP have no idle loop ( they sync on activate / command ).0.113
indexing_trigger_manual["../../../packages/analytical/test/base-registry-refresh.test.ts:refresh rediscovers a base created after an empty discovery"], ["../../../packages/analytical/test/base-registry-refresh.test.ts:refresh rediscovers a nested base added after first discovery"]Indexing 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
index_diagnostics_metrics["../../../packages/analytical/test/index-diagnostics.test.ts"]doneFor each sync / index run on a base, record: - wall-clock **sum / total duration** of the pass - **file count** ( visited ), skipped-by-mtime count, indexed ( parse / persist attempted ) count, error count - **average path depth** of visited files ( segments under the base root ) - per-file **duration** and outcome ( `mtime_skip` | `mtime_refresh` | `hash_skip` | `persisted` | `error` ) Runs are attributable to a trigger ( `soft_sync` | `rebuild` | `enqueue` | `stale` ). Instrumentation wraps [workspace_index] soft sync and [indexer.nonblocking_index] single-file paths via [diagnostics_store].0.120
binary_ignore["../../../packages/analytical/test/rqignore.test.ts:defaults ignore node_modules, venv, db3, and binary paths"], ["../../../packages/analytical/test/rqignore.test.ts:inverse rqignore patterns opt binary files back in"], ["../../../crates/reqlan-index/src/ignore.rs:default_rqignore_skips_binary_files_until_negated"], ["../../../crates/reqlan-index/tests/code_file_index.rs:skips_binary_comment_files_unless_rqignore_negation"], ["../../../crates/reqlan-index/tests/sync.rs:default_rqignore_skips_node_modules"]doneDiscovery, coverage, and index walks skip binary files by default. Built-in [rqignore] patterns include a broad set of binary globs ( images, archives, packages, native objects, fonts, media, and office files ). Opt in with a gitignore negation in `.reqlan/.rqignore`. Example: `!*.bin` includes files with a `.bin` extension. Opted-in files can receive ["../../indexer/indexer.rq".index_code_files] comment indexing. They are not parsed as `.rq` sources. The editor source watcher stays on allowlisted text extensions. A soft sync indexes opted-in binary paths from the scan list. Idle stats stored paths and does not walk. Same filter as [configuration.configuration_rqignore].0.201
commentless_file_ignore["../../../packages/analytical/test/rqignore.test.ts:defaults ignore json, sqlite sidecars, and files without comments"], ["../../../packages/analytical/test/rqignore.test.ts:inverse rqignore patterns opt json back in"], ["../../../crates/reqlan-index/src/ignore.rs:default_rqignore_skips_files_without_comments_until_negated"], ["../../../crates/reqlan-index/src/ignore.rs:seeded_rqignore_explains_features"]doneDiscovery, coverage, and index walks skip common files that have no comment syntax. The set includes JSON ( `.json`, `.jsonl`, `.ndjson` ), tabular data ( `.csv`, `.tsv` ), lockfiles, checksums, minified scripts, source maps, notebooks, and certificates. These files cannot hold `rq:` comment references. SQLite WAL, SHM, and journal sidecars stay with the database patterns in [rqignore] ( `*.sqlite-wal`, `*.sqlite-shm`, `*.sqlite-journal`, and the same suffixes on `.sqlite3`, `.db`, and `.db3` ). Opt in with a gitignore negation in `.reqlan/.rqignore`. Example: `!*.json`. JSON with comments ( `.jsonc`, `.json5` ) stays eligible for ["../../indexer/indexer.rq".index_code_files]. The seeded file lists the same patterns ( [rqignore_initialisation] ).0.188
index_diagnostics_store["../../../packages/analytical/test/index-diagnostics.test.ts"]donePer-base diagnostic timing index at `<base>/.reqlan/index-diagnostics.sqlite`. Sibling of `ideas-index.sqlite`; not deleted by Clear & rebuild. Records sync runs and per-file durations for ["./index-diagnostics.rq".index_diagnostics_metrics]. Webview: ["./index-diagnostics.rq".index_diagnostics_webview].0.223
rqignore["../../../packages/analytical/test/rqignore.test.ts"], ["../../../packages/analytical/test/rqignore.test.ts:seeded rqignore comments explain all features"], ["../../../packages/analytical/test/create-base.test.ts:seeds .reqlan/.rqignore when creating a new base"], ["../../../packages/analytical/test/workspace-index.test.ts:skips .rq files under rqignore patterns"], ["../../../crates/reqlan-index/tests/sync.rs:default_rqignore_skips_node_modules"]done`.reqlan/.rqignore` filters which paths discovery and indexing crawl, using gitignore syntax relative to the base root. Owned by [rqignore_impl] in `@reqlan/analytical` so CLI and editor share behaviour. Defaults cover `node_modules/`, virtualenvs, build dirs ( `bin/`, `generated/`, `out/` ), VCS / editor stores, database files ( `*.db3`, sqlite ) and SQLite sidecars, binary globs ( [binary_ignore] ), `*.html`, secrets, and hidden entries. Walks also skip common files that have no comments ( [commentless_file_ignore] ). New bases seed the file via [rqignore_initialisation]. Product configuration statement: [configuration.configuration_rqignore].0.296
rqignore_initialisation["../../../packages/analytical/test/rqignore.test.ts:defaultRqIgnoreFileContents documents gitignore-style defaults"], ["../../../packages/analytical/test/rqignore.test.ts:seeded rqignore comments explain all features"], ["../../../crates/reqlan-index/src/ignore.rs:seeded_rqignore_explains_features"], ["../../../packages/analytical/test/create-base.test.ts:seeds .reqlan/.rqignore when creating a new base"]doneNew bases seed `.reqlan/.rqignore` with comments that explain every feature of [rqignore], [binary_ignore], and [commentless_file_ignore]. Written when a base is created: ["../host/installation.rq".base_rqignore_seed] / ["../../bases/base.rq".base_initialisation]. Comments cover purpose ( discovery and index walks ), base-root relative paths, gitignore syntax, last matching rule, `!` negation, built-in defaults that always apply, binary opt-in, hidden paths, `*.secret.rq`, SQLite sidecars, files that have no comments ( [commentless_file_ignore] ), and `.reqlan/` itself. The seeded file is the editable surface. Built-in rules still apply if a user deletes a line. Existing `.rqignore` files are not rewritten ( ["../host/installation.rq".base_installation] is idempotent ).0.125
text_prefix_skip["../../../crates/reqlan-index/src/text.rs:nul_rejects"], ["../../../crates/reqlan-index/src/text.rs:utf16_bom_rejects"], ["../../../crates/reqlan-index/src/text.rs:invalid_utf8_rejects"], ["../../../crates/reqlan-index/src/text.rs:trailing_incomplete_utf8_is_not_a_reject"], ["../../../crates/reqlan-index/tests/scan.rs:prefix_skip_does_not_index_non_text"]doneBefore any index content read, inspect at most the first 8 KiB. Skip the file when that prefix has a NUL, a UTF-16 BOM ( `FF FE` or `FE FF` ), or invalid UTF-8. A trailing incomplete UTF-8 code unit is not a skip: the rest of the file may finish the character. Skip when the file is larger than 1 MiB. A rejected prefix is not followed by a read of the remainder. `.rq` files and allowlisted code files use the same check. This is in addition to [binary_ignore] extension globs.0.092
analysis_api_dispose["../../../packages/analytical/test/sqlite-artifact-release.test.ts:dispose releases ideas-index so the file can be unlinked"], ["../../../packages/cli/test/runtime-engine.test.ts:CLI runtime opens AnalysisApi through the core engine"]done[analysis_runtime] `openAnalysisApi` dispose must close the native analysis runtime and drop its SQLite connection ( ideas index and click-sessions ). A no-op dispose is a defect. Extension commands use a short-lived `withAnalysisApi` ( open → run → dispose ) mediated by [analysis_runtime]; they must not cache `NativeAnalysisApi` for the session.0.040
event_driven_base_access["../../../packages/analytical/test/sqlite-artifact-release.test.ts:BaseRegistry releaseArtifacts closes handles but keeps descriptors"], ["../../../packages/analytical/test/base-registry-catchup.test.ts:ensureBaseReady opens and soft-syncs an uninitialized base"]doneExtension interaction with bases is event-driven and goes through the analytical package: - Discover / pin / focus / file watch / command / UI query → open or `ensureBaseReady` - Sync, stale check, or analysis work runs - Quiet idle → [release_when_idle] No always-on connection and no continuous reconnect loop. Headless CLI / MCP already open per command via [analysis_runtime] ( [headless_sync_on_ready] ).0.057
release_when_idle["../../../packages/analytical/test/sqlite-artifact-release.test.ts:BaseRegistry releaseArtifacts closes handles but keeps descriptors"], ["../../../packages/analytical/test/base-registry-catchup.test.ts:deactivate returns to uninitialized so a base can be reopened"]doneAfter an index or analysis pass finishes, and after the idle quiet period ( [idle_stale_check] / indexing_trigger_auto ), [editor_index_adapter] must release every open base SQLite handle via [base_registry] `releaseArtifacts` → [workspace_index] `deactivate`. Descriptors stay registered so the next event can reopen the same base. Idle must not leave connections open after a heal / sync, and must not schedule another open unless a real host event arrives ( file change, pin / switch, focus reopen, command, UI query ).0.077
sqlite_artifact_lifecycle["../../../packages/analytical/test/sqlite-artifact-release.test.ts:dispose releases ideas-index so the file can be unlinked"], ["../../../packages/analytical/test/sqlite-artifact-release.test.ts:WorkspaceIndex deactivate releases sqlite artifacts"], ["../../../packages/analytical/test/sqlite-artifact-release.test.ts:BaseRegistry releaseArtifacts closes handles but keeps descriptors"], ["../../../packages/analytical/test/open-analysis-api.test.ts:opens the native engine when the host .node is available"]doneBase SQLite artifacts under `<base>/.reqlan/` ( [base_ownership] ) must not stay locked for the whole extension session. The host opens them only while work runs, then releases file handles so users can delete or replace the files. Aligns with [event_driven]: open and close are reactions to index or analysis events, not a permanent connection or a reconnect loop. Mediation: only [workspace_index] / [analysis_runtime] own SQLite connections. The extension adapter ( [editor_index_adapter] ) must not keep a second long-lived analysis runtime beside the index, and must not call native open without a matching dispose / release. Related: [index_sequencing], [idle_stale_check], [headless_consumers], [multi_base_environment].0.052
comment_reference_import_root_alias["../../../../packages/language/test/comment-reference-resolution.test.ts:creates a document link for an import-root aliased comment reference"], ["../../../../packages/language/test/comment-reference-resolution.test.ts:does not treat @/ as a path relative to the source file"], ["../../../../packages/language/test/comment-reference-resolution.test.ts:resolves a configured alias in a comment reference"], ["../../../../packages/language/test/comment-reference-resolution.test.ts:accepts an import-root aliased comment reference in a loaded document"], ["../../../../packages/language/test/path-resolve.test.ts:resolveAuthoredFsPath joins aliased remainder to the workspace folder"], ["../../../../packages/language/test/path-resolve.test.ts:pathResolveContextFromWorkspaceFolders picks the longest matching folder"], ["../../../../packages/extension/test/comment-reference-path-context.test.ts:resolves @/ against the workspace folder for extension comment links"], ["../../../../crates/reqlan-index/src/comment.rs:resolves_aliased_qualified_comment_path"], ["../../../../crates/reqlan-lsp/tests/session.rs:comment_links_share_one_resolution"]doneQualified comment references use the same path forms as imports, including import-root aliases such as `@/`. `rq:["@/path/relative/to/import/root.rq".idea]` resolves against the alias's import-root directory ( workspace folder by default ), not the source file directory. `@reqs` without a following `/` is not an alias. Configured aliases and roots follow ["../../../language/imports.rq".configuration_import_root_alias] and ["../../host/configuration.rq".configuration_import_roots]. The language server applies this when resolving comment references in `.rq` files. The extension applies the same core resolver for `rq:[…]` links in non- `.rq` source. Related: ["../../../language/syntax.rq".comment_reference], [references_in_functional_code_comments], ["../../../language/imports.rq".import_paths].0.235
comment_reference_language_blocklist["../../../../packages/extension/test/definition-navigation.test.ts:tracks non-blocklisted languages for navigate-back"], ["../../../../packages/extension/test/editor-link-activation.test.ts:package.json contributes comment.rq.injection"], ["../../../../packages/extension/test/comment-reference-languages.test.ts:blocklist excludes reqlan and editor chrome"]doneComment rq editor features ( goto, diagnostics, ignore actions, navigate-back origin tracking ) apply to every language except a small blocklist. The blocklist is `reqlan` plus non-source editor buffers ( log, search-result, SCM input, git commit / rebase, github-issues ). The rust language client uses a file-scheme document selector and skips sync for blocklisted languages. TextMate resting underline injects into a wide `injectTo` scope list ( best-effort; goto still works without a matching grammar scope ). Related: [references_in_functional_code_comments], [comment_reference_resting_underline], ["../../../language/syntax.rq".comment_reference].0.178
comment_reference_navigate_back["../../../../packages/extension/test/definition-navigation.test.ts:tracks non-blocklisted languages for navigate-back"], ["../../../../packages/extension/test/definition-navigation.test.ts:records only landings in reqlan targets"], ["../../../../packages/extension/test/definition-navigation.test.ts:records a cross-file command jump from the prior caret"], ["../../../../packages/extension/test/definition-navigation.test.ts:navigate-back keybinding is not limited to .rq editors"]doneA go-to-definition JUMP from a comment `rq:[…]` host must push the pre-jump caret onto the same navigate-back stack as `.rq` jumps. The stack tracks every non-blocklisted language ( ["../../../../packages/extension/src/extension/comment-reference-languages.ts"] ) as well as `.rq`. Only landings in `.rq` / `reqlan` are recorded, so other language servers do not fill the stack. Alt + Left ( `reqlan.navigateBack` ) restores that caret when `reqlan.canNavigateBack` is set, in any focused editor. Related: [references_in_functional_code_comments], [comment_reference_language_blocklist], ["../syntax/features-syntax-highlighting.rq".editor_reference_activation].0.114
comment_reference_resolution_error_state["../../../../packages/language/test/comment-reference-resolution.test.ts:shares one presentation so a matching idea clears the underline and adds a link"], ["../../../../packages/language/test/comment-reference-resolution.test.ts:publishes a missing-idea diagnostic and no document link until the idea exists"], ["../../../../packages/language/test/comment-reference-resolution.test.ts:clears the underline and creates a link after a matching idea is added"], ["../../../../packages/language/test/comment-reference-resolution.test.ts:relinks comment references only when the target file changes"], ["../../../../packages/language/test/comment-reference-resolution.test.ts:revalidates comment-reference underlines when a matching idea is created on disk"], ["../../../../packages/language/test/outbound-hop.test.ts:comment references confirm the neighbor idea without loading Langium"], ["../../../../crates/reqlan-lsp/tests/session.rs:comment_links_share_one_resolution"], ["../../../../crates/reqlan-lsp/tests/session.rs:comment_definition_follows_a_resolved_rq_reference"]done[comment_reference_resolution_error] The language server must share one resolution result for clickable links and the error underline. Resolve comment references once against the loaded idea index, then reuse that result for both consumers. When you create an idea that matches a comment reference, the language server must clear the underline and the missing-idea message. Resolution and the index should be performed once and shared between consumers.0.053
comment_reference_resting_underline["../../../../packages/extension/test/editor-link-activation.test.ts:comment injection link scope includes markup.underline"], ["../../../../packages/extension/test/editor-link-activation.test.ts:package.json contributes comment.rq.injection"]doneIn non- `.rq` source comments, every `rq:[…]` token must show a resting underline so it is clear the site is link-shaped. Use TextMate scope `meta.link.reqlan markup.underline` via the comment injection grammar. Do not rely on file document links for that cue — those stay stripped ( ["../syntax/features-syntax-highlighting.rq".editor_reference_activation] ). Navigation remains Ctrl + click go-to-definition for resolved sites ( [references_in_functional_code_comments] ). Related: [references_in_functional_code_comments], ["../syntax/features-syntax.rq".comment_support].0.146
references_in_functional_code_comments["../../../../packages/language/test/linking.test.ts:comment references in source files resolve to rq ideas"], ["../../../../packages/language/test/references.test.ts:finds rq: references in feature demo source files"], ["../../../../packages/language/test/references.test.ts:finds rq: comment references in python triple-quoted comments"], ["../../../../crates/reqlan-lsp/tests/session.rs:comment_links_share_one_resolution"], ["../../../../crates/reqlan-lsp/tests/session.rs:comment_definition_follows_a_resolved_rq_reference"], ["../../../../packages/extension/test/editor-link-activation.test.ts:comment injection link scope includes markup.underline"], ["../../../../packages/extension/test/editor-link-activation.test.ts:package.json contributes comment.rq.injection"]doneComments in functional code should be able to reference reqlan ideas using the an `rq:` prefixed to an idea: `rq:[idea]` as demonstrated in python, but actually applicable to any language's comment context: Editor hosts are every language except [comment_reference_language_blocklist]. With the rust language server, a resolved `rq:[…]` site is Ctrl + click navigable via go-to-definition. File document links stay out of the editor ( ["../syntax/features-syntax-highlighting.rq".editor_reference_activation] ). Comment `rq:[…]` sites use TextMate `meta.link.reqlan markup.underline` so the resting editor shows they are link-shaped ( [comment_reference_resting_underline] ). After that goto, Alt + Left restores the comment-host caret ( [comment_reference_navigate_back] ). Missing ideas keep the error underline and have no definition target. Relates to ["../../mutation/refactor_support.rq".comment_reference_refactor_support], [comment_reference_import_root_alias], ["../support/language-server-rust.rq".language_server_rust], ["../syntax/features-syntax-highlighting.rq".editor_reference_activation].0.300
anonymous_reference_code_completion["../../../../packages/language/test/completion.test.ts"]Anonymous 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
implicit_file_extension["../../../../packages/language/test/implicit-import-extension.test.ts"], ["../../../../packages/language/test/outbound-hop.test.ts:confirms a neighbor idea when the authored path has no .rq extension"]The 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_completion_auto_file_import["../../../../packages/language/test/completion.test.ts"]doneWhen a code completion for an idea in another file is selected, the import should be automatically added to the current file. This prevents the user from selecting a presented idea, and then having to add the import for the same thing. Uses the same from-import insertion as [import_error] quick fixes; skips the edit when the idea is already imported. [reference_code_completion] [import_code_completion] [import_code_completion_rendering] [import_error]0.066
import_code_completion_explicit_extension["../../../../packages/language/test/completion.test.ts"]Completions 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_segments["../../../../packages/language/test/completion.test.ts"]In a folder context, show next path segments ( directories with a trailing `/` ). After `../`, offer `../path/` before nested `../path/file.rq`.0.047
import_code_completion_ranking["../../../../packages/language/test/completion.test.ts"]Rank 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_rendering["../../../../packages/language/test/completion.test.ts"]doneReference code completion for ideas from other files shows the relative import path in the completion detail. Same-file ideas omit the path detail. [reference_code_completion] [import_code_completion] [import_code_completion_auto_file_import]0.066
import_code_completion_substring_match["../../../../packages/language/test/completion.test.ts"]Filter 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_error["../../../../packages/language/test/validating.test.ts"], ["../../../../packages/language/test/validating.test.ts:does not report an error when an import path is an existing folder"], ["../../../../crates/reqlan-index/tests/broken_references.rs:check_reports_missing_import_path"], ["../../../../crates/reqlan-index/tests/broken_references.rs:check_reports_missing_imported_idea"]Imports 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
import_error["../../../../packages/language/test/code-actions.test.ts"], ["../../../../packages/language/test/import-edits.test.ts"], ["../../../../packages/language/test/import-edits.test.ts:inserts after an existing different-path from-import with a blank line"], ["../../../../packages/language/test/import-edits.test.ts:inserts after an existing from-import with no blank line"], ["../../../../packages/language/test/import-edits.test.ts:inserts after an existing namespace import"], ["../../../../packages/language/test/import-edits.test.ts:inserts at the top when the file has no imports"], ["../../../../packages/language/test/import-edits.test.ts:appends to an existing same-path from-import"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:offers_add_import_and_rewrite_when_a_matching_idea_exists_elsewhere"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:uses_name_catalog_matches_when_documents_are_not_loaded"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:search_and_create_actions_invoke_extension_commands"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:appends_to_an_existing_from_import_for_the_same_path"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:appends_after_aliased_specifier_on_existing_from_import"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:offers_add_import_from_the_ideas_index"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:inserts_new_from_import_after_existing_from_import_with_blank_line"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:inserts_new_from_import_after_existing_from_import_without_blank_line"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:inserts_new_from_import_after_existing_namespace_import"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:inserts_from_import_at_top_when_file_has_no_imports"]done" Could not resolve reference " errors offer Quick Fix code actions ( lightbulb and editor right-click Quick Fix ). Fixes: - Add import from a matching idea found in loaded documents or the name catalog pushed from the index - Rewrite the reference to an anonymous qualified form `["path".name]` - Search the index for matching ideas, ideasets, or files ( same `reqlan.searchReference` path as [code_actions] / ["../../host/features-commands.rq".search_code_actions] ), then insert an import - Create the idea in a new. rq file and import it [general_errors] [code_actions] [quick_fixes]0.078
import_folder_targets["../../../../packages/language/test/implicit-import-extension.test.ts:filesystem lookups append .rq then accept an existing directory"], ["../../../../packages/language/test/validating.test.ts:does not report an error when an import path is an existing folder"], ["../../../../packages/language/test/linking.test.ts:folder import paths produce folder document links"]doneAn import path may refer to a folder. A folder is a valid import target when that path exists as a directory. Namespace import of a folder binds the alias to that folder, the same as a file. Extensionless paths still prefer a `.rq` file: [implicit_file_extension]. Related: ["../../../language/imports.rq".import_paths], [import_does_not_exist_error], ["../syntax/features-syntax.rq".file_references].0.164
index_file_search_coalesce["../../../../packages/extension/test/share-in-flight.test.ts"]doneIndex startup does not call `findFiles` or ripgrep / `searchtext.exe`. The native workspace scan ( ["../../../indexer/cache-reuse.rq".single_sync_walk] ) is the one directory walk. Overlapping rediscover and sync callers share that in-flight scan. The scan applies `.rqignore` ( ["../../../indexer/indexer.rq".nonblocking_index] ). Related: [lsp_file_watch], ["../../index-host/index.rq".rqignore], ["../../../indexer/sequencing.rq".scan_limits].0.051
lsp_file_watch["../../../../packages/language/test/document-update-watch.test.ts"], ["../../../../packages/language/test/document-update-watch.test.ts:registers .rq globs only"], ["../../../../packages/language/test/document-update-watch.test.ts:classifies Windows and directory URIs by path segment"], ["../../../../packages/language/test/document-update-watch.test.ts:drops noisy events and keeps .rq files"], ["../../../../packages/language/test/ast-lifecycle.test.ts:replaces the AST when this buffer text changes"]doneThe language server must register workspace file watchers for `.rq` files only. It must not register a recursive all-files watcher. Watched-file events whose path contains a `node_modules`, `.git`, `.reqlan`, `out`, or `dist` segment must not start a document rebuild. Directory URIs without a trailing slash, Windows paths, and percent-encoded URIs must use the same segment rules. A kept `.rq` change replaces that buffer's model when the text changed ( [ast_lifecycle] ). Related: [language_server], [index_file_search_coalesce], [open_file_algorithm].0.085
file_reference_errors["../../../../packages/language/test/linking.test.ts:missing file references do not produce document links"], ["../../../../packages/language/test/linking.test.ts:missing file reference errors are suppressed after //rq-ignore-error"], ["../../../../packages/language/test/linking.test.ts:remote file references are not reported as missing"], ["../../../../packages/language/test/linking.test.ts:empty file references produce document links and warning diagnostics"], ["../../../../packages/language/test/linking.test.ts:parse-error file references produce document links and warning diagnostics"], ["../../../../packages/language/test/ignore-error.test.ts:reports a missing file reference as an error"], ["../../../../packages/language/test/ignore-error.test.ts:suppresses missing file reference errors on the line after //rq-ignore-error"], ["../../../../packages/language/test/ignore-error.test.ts:does not report file references inside inline code"], ["../../../../crates/reqlan-lsp/tests/parity.rs:import_root_alias_file_refs_match_check"], ["../../../../crates/reqlan-lsp/tests/parity.rs:import_root_config_file_refs_match_check"], ["../../../../crates/reqlan-index/tests/broken_references.rs:check_accepts_import_root_alias_file_refs"], ["../../../../crates/reqlan-index/tests/broken_references.rs:check_honours_import_roots_from_applying_config"]doneIf a [file_reference] is not found, is broken, or cannot be resolved, the language server must show an underline. Do not show the underline when [comment_reference_ignore] ( `//rq-ignore-error` ) is on the line before. Missing files: error underline, no document link. Do not underline examples inside [inline_code] or ["../../../language/syntax.rq".code_snippets]. Empty files and files with parse errors: warning underline; the document link stays. Import-root aliases such as `@/` resolve the same way as ["../../../core_analysis/check.rq".check] and ["../../../language/imports.rq".configuration_import_root_alias]. Related: [general_errors], [comment_reference_resolution_error], [inline_code], ["./features-imports.rq".import_does_not_exist_error], ["../syntax/features-syntax.rq".file_references].0.092
language_server_rust["../../../../crates/reqlan-lsp/tests/session.rs:open_file_diagnostics_and_close_drops_the_parse"], ["../../../../crates/reqlan-lsp/tests/session.rs:semantic_token_range_matches_the_source_name"], ["../../../../crates/reqlan-lsp/tests/session.rs:definition_hover_highlight_and_link"], ["../../../../crates/reqlan-lsp/tests/session.rs:definition_uses_the_open_neighbor_parse"], ["../../../../crates/reqlan-lsp/tests/session.rs:definition_does_not_reread_a_cached_neighbor"], ["../../../../crates/reqlan-lsp/tests/session.rs:folder_reference_link_is_a_command"], ["../../../../crates/reqlan-lsp/tests/hover_content.rs:hover_shows_styled_idea_content_by_default"], ["../../../../crates/reqlan-lsp/tests/hover_content.rs:hover_omits_idea_content_when_the_setting_is_off"], ["../../../../crates/reqlan-lsp/tests/hover_content.rs:hover_shows_idea_content_from_another_file"], ["../../../../crates/reqlan-lsp/tests/session.rs:neighbor_confirm_suppresses_missing_idea"], ["../../../../crates/reqlan-lsp/tests/session.rs:rq_ignore_suppresses_the_next_line"], ["../../../../crates/reqlan-lsp/tests/session.rs:completion_rename_and_code_action"], ["../../../../crates/reqlan-lsp/tests/session.rs:index_completion_inlay_and_custom_requests"], ["../../../../crates/reqlan-lsp/tests/session.rs:attribute_catalog_completion_and_find_references"], ["../../../../crates/reqlan-lsp/tests/stdio.rs:stdio_initialize_and_shutdown"], ["../../../../crates/reqlan-lsp/tests/parity.rs:same_file_idea_references_produce_document_links"], ["../../../../crates/reqlan-lsp/tests/parity.rs:missing_file_references_do_not_produce_document_links"], ["../../../../crates/reqlan-lsp/tests/parity.rs:import_root_alias_file_refs_match_check"], ["../../../../crates/reqlan-lsp/tests/parity.rs:import_root_config_file_refs_match_check"], ["../../../../crates/reqlan-lsp/tests/parity.rs:anonymous_import_path_does_not_report_an_unresolved_import"], ["../../../../crates/reqlan-lsp/tests/parity.rs:reports_an_error_when_an_import_path_file_does_not_exist"], ["../../../../crates/reqlan-lsp/tests/parity.rs:reports_an_error_when_an_imported_idea_does_not_exist"], ["../../../../crates/reqlan-lsp/tests/parity.rs:anonymous_qualified_idea_resolves_without_an_import_statement"], ["../../../../crates/reqlan-lsp/tests/parity.rs:quoted_path_reaches_an_idea_that_is_not_from_imported"], ["../../../../crates/reqlan-lsp/tests/parity.rs:extensionless_path_confirms_the_neighbor_idea"], ["../../../../crates/reqlan-lsp/tests/parity.rs:from_import_binds_a_local_reference"], ["../../../../crates/reqlan-lsp/tests/parity.rs:from_import_tokens_link_independently"], ["../../../../crates/reqlan-lsp/tests/parity.rs:import_document_link_covers_the_path_string"], ["../../../../crates/reqlan-lsp/tests/parity.rs:namespace_drill_links_each_segment"], ["../../../../crates/reqlan-lsp/tests/parity.rs:namespace_drill_missing_leaf_is_unresolved"], ["../../../../crates/reqlan-lsp/tests/parity.rs:namespace_alias_is_a_file_link"], ["../../../../crates/reqlan-lsp/tests/parity.rs:formats_inbound_referencers_as_an_inlayed_attribute"], ["../../../../crates/reqlan-lsp/tests/parity.rs:truncates_long_referencer_lists_with_a_remainder_suffix"], ["../../../../crates/reqlan-lsp/tests/parity.rs:omits_the_inlay_when_there_are_no_inbound_referencers"], ["../../../../crates/reqlan-lsp/tests/session.rs:comment_links_share_one_resolution"], ["../../../../crates/reqlan-lsp/tests/session.rs:comment_definition_follows_a_resolved_rq_reference"], ["../../../../packages/extension/test/language-server-launch.test.ts:defaults to the rust binary over stdio"], ["../../../../packages/extension/test/language-server-launch.test.ts:launches the release build and never a debug build"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:offers_ignore_error_quick_fix_on_a_line_with_a_linking_error"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:omits_ignore_error_when_only_refactor_is_requested"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:creates_the_missing_idea_below_the_containing_idea"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:offers_all_or_a_specific_unresolved_idea"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:omits_create_below_when_the_caret_idea_has_no_unresolved_local_references"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:omits_create_below_for_a_qualified_unresolved_reference"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:omits_create_below_when_only_refactor_is_requested"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:offers_add_import_and_rewrite_when_a_matching_idea_exists_elsewhere"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:uses_name_catalog_matches_when_documents_are_not_loaded"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:search_and_create_actions_invoke_extension_commands"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:appends_to_an_existing_from_import_for_the_same_path"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:offers_add_import_from_the_ideas_index"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:offers_search_code_action_when_cursor_is_inside_a_resolved_reference"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:offers_wrap_code_action_for_a_prose_selection"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:wraps_the_word_under_the_cursor_when_selection_is_empty"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:offers_move_and_delete_actions_at_an_idea_declaration"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:offers_barrel_page_source_action_when_the_file_has_top_level_ideas"], ["../../../../crates/reqlan-lsp/tests/code_actions.rs:omits_barrel_page_when_only_quickfix_is_requested_or_there_are_no_ideas"]in-progressA 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
ast_lifecycle["../../../../crates/reqlan-lsp/tests/session.rs:open_file_diagnostics_and_close_drops_the_parse"], ["../../../../packages/language/test/parse-budget.test.ts:times out a hung parse worker with warning and error"]doneThe open buffer has one model. That model is the Rust parse of this buffer. [local_symbolic_analysis] is a file-local extract. The hot path does not run it as a second parse. Related: [open_file_algorithm], [open_file_sequence_diagram], [outbound_one_hop], [token_colour_sequence], [parse_budget_timeout], ["./initialisation-and-sequencing.rq".lsp_file_watch], [language_server_rust]. Populate. Parse this buffer when the editor opens it. Semantic tokens, same-file links, and the import list come from that parse. Replace. When this buffer text changes, parse again and replace the model. Do not patch the old model. A watched `.rq` change uses the same replace path ( [document_update_handler] ). When the text is unchanged, keep the current model. Drop. When the editor closes the buffer, drop the model. A closed file keeps no syntax tree ( [language_server_rust] ). Import files. [outbound_one_hop] stores a name list for each imported file. That list is not an open-buffer model. A change to an imported file does not replace this buffer's model. Read the imported file again when its content hash changes. Incomplete parse. When the budget fails, store an empty model plus diagnostics ( [parse_budget_timeout] ). Idea names stay empty until a later successful parse. The node engine follows [node_engine_open_path].0.249
comment_backlink_sequence["../../../../crates/reqlan-lsp/tests/session.rs:comment_links_share_one_resolution"], ["../../../../packages/language/test/comment-reference-resolution.test.ts:reports a missing comment reference idea in a loaded file"], ["../../../../packages/language/test/comment-reference-resolution.test.ts:shares one presentation so a matching idea clears the underline and adds a link"]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
file_crawl_sequence["../../../../packages/analytical/test/workspace-index.test.ts"]doneWorkspace crawl is the indexer ( [index], [index_sequencing] ). It is not the open-file path. Native sync walks `.rq` files, then allowlisted code files, and writes SQLite. Open-file links must not wait for that walk ( [open_file_algorithm] ). The language server watches `.rq` files only ( ["./initialisation-and-sequencing.rq".lsp_file_watch] ). Related: [extension_startup_sequence], [background_startup].0.040
lazy_features_after_outbound["../../../../packages/language/test/inbound-referencer-index-perf.test.ts:inlay referencers come from the pushed snapshot, not findAllReferences"], ["../../../../crates/reqlan-lsp/tests/session.rs:index_completion_inlay_and_custom_requests"], ["../../../../crates/reqlan-lsp/tests/session.rs:neighbor_confirm_suppresses_missing_idea"], ["../../../../crates/reqlan-lsp/tests/parity.rs:formats_inbound_referencers_as_an_inlayed_attribute"]doneAfter the hot path is on screen, show the rest when its data is ready. This pass must not delay [open_file_algorithm] steps 1 – 5. Related: [language_server], [unify_inbound_indexes], [background_startup], [inlay_hints], [codelens]. Work: - Confirm each qualified reference. Read that target file once, at depth 1. Then paint the idea line or the missing-idea error ( [missing_reference_colour_sequence] ). - Inbound backlinks: inlay hints and the file-top CodeLens, from the host snapshot ( [unify_inbound_indexes] ). - Attribute and name catalogs for completion and quick fixes. - Unqualified comment matches from that snapshot ( [comment_backlink_sequence] ). Until the first ready snapshot arrives, inlay hints and the file CodeLens stay empty. Those handlers do not open SQLite and do not call `list_all_ideas`. Later updates are incremental ready-state events ( ["../../../indexer/cache-reuse.rq".inbound_snapshot_events] ); last-good stays until replaced. When a ready snapshot arrives, refresh the visible editors.0.283
missing_reference_colour_sequence["../../../../crates/reqlan-lsp/tests/parity.rs:missing_file_references_do_not_produce_document_links"], ["../../../../packages/language/test/outbound-hop.test.ts:keeps URL and wildcard document links"], ["../../../../packages/language/test/outbound-hop.test.ts:keeps a missing idea error on the same line as a confirmed neighbor idea"], ["../../../../packages/language/test/local-symbolic-links.test.ts:unresolved same-file ideas get no document link"]donePaint links and errors in two steps. The hot path paints same-file names and import targets ( [outbound_one_hop] ). The background pass paints qualified-reference idea lines ( [lazy_features_after_outbound] ). Related: [unresolved_reference_diagnostics], [reference_rendering], [file_reference_errors], [import_does_not_exist_error]. Hot path: - URL references: document link, no error. - Wildcard references: document link, no error underline for zero matches. - Import path missing: error underline, no document link. - Imported idea present: document link to that idea line. - Imported idea missing: error underline, no document link. - Same-file idea missing: error underline, no document link. - Qualified reference: document link to the file from the path token. Do not underline a missing idea yet. Background pass: - Qualified idea present: document link to that idea line. - Qualified idea missing: error underline, and remove the document link. - Drop a false missing-idea error only for the range that this pass confirms. Keep a different missing name on the same line.0.153
native_cache_retention["../../../../crates/reqlan-lsp/tests/session.rs:open_file_diagnostics_and_close_drops_the_parse"], ["../../../../packages/language/test/lsp-memory.test.ts:drops a neighbor list when the last open editor closes"], ["../../../../packages/language/test/lsp-memory.test.ts:drops a neighbor list when the file watcher reports a delete"], ["../../../../packages/language/test/outbound-hop.test.ts:reuses a cached neighbor parse for the same content"]doneThe language server keeps the open-buffer model for each open editor. It keeps a depth-1 name list for each imported file, and for each qualified-reference file the background pass has confirmed, while an open editor still needs that list. A closed editor drops its model. It also drops name lists that no open editor still needs. A file-watcher delete drops that URI from both caches. A check of a closed file may parse it once. That result is not stored. Related: [open_file_hot_path], [outbound_one_hop], [ast_lifecycle].0.072
node_engine_open_path["../../../../packages/language/test/ast-lifecycle.test.ts:populates the Langium AST at Parsed without DocumentBuilder"], ["../../../../packages/language/test/ast-lifecycle.test.ts:linking and validation do not replace the AST"], ["../../../../packages/language/test/ast-lifecycle.test.ts:neighbor hop does not populate a Langium AST"], ["../../../../packages/language/test/parsed-reference-sequencing.test.ts:definition hover highlight and links do not resolve refs before ComputedScopes"], ["../../../../packages/language/test/parsed-reference-sequencing.test.ts:reading every ref before ComputedScopes does not warn and linking still works"], ["../../../../packages/language/test/open-file-hot-path.test.ts:does not relink an unrelated file that still has linker errors"], ["../../../../packages/language/test/open-file-hot-path.test.ts:relinks a host when its neighbor file changes"]doneThis idea applies when `reqlan.languageServer.engine` is `node`. The default engine is [language_server_rust]. The node server populates a Langium AST for the open buffer at `DocumentState.Parsed`. Later builder phases attach scopes, links, and diagnostics. They must not replace that AST. Parsed-time handlers must not read Langium `.ref`. Use `$refText`, the symbolic extract, or `peekResolvedRef` until `ComputedScopes`. The linker must not resolve a cross-reference while that document is below `ComputedScopes`. Do not log the Langium warning. Do not store a failed link. Scope lookup, code lens, completion, and idea summaries use `readResolvedRef` or `peekResolvedRef` until that phase. When another `.rq` file changes, relink this document when the index says it is affected, when comment references name that file, or when this document's outbound targets include the changed URI. Do not relink every document that still has a linker error. Workspace load parses at most 8 files at a time ( [workspace_parse_concurrency] ). `fileIdeasCache` and `importPathCache` drop a URI when that document is removed ( [scope_cache_release] ). Related: [open_file_algorithm], [ast_lifecycle].0.133
open_file_algorithm["../../../../crates/reqlan-lsp/tests/session.rs:semantic_token_range_matches_the_source_name"], ["../../../../crates/reqlan-lsp/tests/parity.rs:same_file_idea_references_produce_document_links"], ["../../../../crates/reqlan-lsp/tests/parity.rs:from_import_binds_a_local_reference"], ["../../../../crates/reqlan-lsp/tests/parity.rs:reports_an_error_when_an_imported_idea_does_not_exist"], ["../../../../packages/language/test/local-symbolic-links.test.ts:same-file idea links without DocumentBuilder / workspace link"]doneWhen the editor opens or changes a `.rq` buffer, `reqlan-lsp` runs this sequence. Do not wait for the ideas index. Do not wait for a workspace crawl. Detail: [open_file_sequence_diagram]. Related: [open_file_reference_sequencing], [language_server_rust], [ast_lifecycle], [outbound_one_hop], [open_file_hot_path], [token_colour_sequence], [missing_reference_colour_sequence], [lazy_features_after_outbound]. The hot path finishes before the first diagnostics publish. 1. Parse this buffer once ( [ast_lifecycle] ). 2. Colour tokens from that parse ( [token_colour_sequence] ). 3. Emit same-file links and same-file missing-idea errors from that parse. 4. Parse each imported file once, at depth 1, for idea names and lines ( [outbound_one_hop] ). Link an imported name that exists. Underline an imported name that does not ( [missing_reference_colour_sequence] ). 5. Return. A qualified reference may link to its file from the path token. Do not read that file on this path. After that publish, a background pass fills the rest ( [lazy_features_after_outbound] ). That pass must not delay steps 1 – 5. The server sends the hot publish before it starts that pass. It runs that pass only while no client message waits. A hover or a definition request goes first. A change reuses the import roots loaded at open. It does not read the config again. The node engine keeps [node_engine_open_path].0.330
open_file_hot_path["../../../../packages/language/test/open-file-hot-path.test.ts:reuses the host native extract for links and diagnostics"], ["../../../../packages/language/test/open-file-hot-path.test.ts:reparses the host native extract when this buffer text changes"], ["../../../../packages/language/test/open-file-hot-path.test.ts:does not treat a same-name file as the loaded neighbor"], ["../../../../crates/reqlan-lsp/tests/parity.rs:same_file_idea_references_produce_document_links"]in-progressOpen-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
outbound_one_hop["../../../../crates/reqlan-lsp/tests/parity.rs:from_import_tokens_link_independently"], ["../../../../crates/reqlan-lsp/tests/parity.rs:reports_an_error_when_an_import_path_file_does_not_exist"], ["../../../../crates/reqlan-lsp/tests/parity.rs:extensionless_path_confirms_the_neighbor_idea"], ["../../../../packages/language/test/outbound-hop.test.ts:reuses a cached neighbor parse for the same content"], ["../../../../packages/language/test/outbound-hop.test.ts:does not parse a neighbor of the neighbor"]doneThe hot path parses imported files only. For each import in the open buffer, parse that file once, then stop. Read idea names, idea lines, and import aliases. Do not parse files that the import references. Do not read SQLite. Prefer the open buffer text when that import is already open and dirty. Cache each parse by path plus file stamp ( modified time and size ) ( [lsp_session] ). A current stamp is one `stat`. Read and parse the file only when the stamp changed. Cache the open buffer by URI plus text fingerprint ( [open_file_hot_path] ). [local_symbolic_analysis] stays file-local. This hop is outside that extract. An extensionless import path prefers `.rq`, then the path as written ( [implicit_file_extension] ). A qualified reference that is not an import waits for [lazy_features_after_outbound]. Related: [open_file_algorithm], [non_web_reference_navigation].0.246
scope_cache_release["../../../../packages/language/test/lsp-memory.test.ts:drops scope cache entries when a document is removed"]doneThis idea applies when the engine is `node` ( [node_engine_open_path] ). `fileIdeasCache` and `importPathCache` drop a URI when that Langium document is removed. A version change still replaces the entry for a document that stays. The rust server drops the open model in [native_cache_retention]. Related: [open_file_hot_path], [native_cache_retention].0.057
token_colour_sequence["../../../../packages/language/test/textmate-import-highlight.test.ts"], ["../../../../packages/language/test/semantic-tokens-wildcard.test.ts"], ["../../../../crates/reqlan-lsp/tests/session.rs:semantic_token_range_matches_the_source_name"]doneToken colour has two layers. They must not wait for the ideas index. TextMate paints first from the buffer text. Semantic tokens paint from the one parse ( [ast_lifecycle] ). A second extract does not paint tokens. A missing reference keeps the same token colour. The error underline is a diagnostic ( [missing_reference_colour_sequence], [reference_rendering] ). Related: [syntax_highlighting].0.117
workspace_parse_concurrency["../../../../packages/language/test/lsp-memory.test.ts:runs at most the concurrency limit"], ["../../../../packages/language/test/lsp-memory.test.ts:loads every workspace file with at most 8 parses in flight"]doneThis idea applies when the engine is `node` ( [node_engine_open_path] ). Workspace load parses `.rq` files with a fixed limit of 8 in flight. One file that fails to parse does not cancel the other files. The steady-state set is still every workspace `.rq` file. The rust server does not parse the workspace. A closed file keeps no syntax tree ( [language_server_rust] ). Related: [ast_lifecycle], [workspace_manager].0.057
aliased_from_import_ctrl_click["../../../../packages/language/test/local-symbolic-links.test.ts:aliased from-import whose name contains the imported idea is one link"], ["../../../../crates/reqlan-index/tests/local_symbolic.rs:analyze_local_symbolic_aliased_from_import_keeps_authored_path_and_written_name"]doneA from-import alias that contains the imported idea name as a suffix or substring must offer one Ctrl + click destination for the whole written alias. Example: `from "@/_charter/plant-ontology.rq" import simulation as ontology-simulation` then `[ontology-simulation]`. The document-link underline must cover `ontology-simulation`, not only `simulation`. Ctrl + click on any character of that alias must open the imported idea in the import-root target file. Do not resolve the import path a second time against the current file directory. Do not offer a second interactive link on the original idea-name suffix. Related: [reference_document_links], [reference_underline_syntax_align], [non_web_reference_navigation], ["../../../language/imports.rq".import_from], ["../../../language/imports.rq".configuration_import_root_alias].0.086
code_lens_reference_types["../../../../packages/language/test/code-lens.test.ts"]doneReferences should have a ["../vsc-primitives.rq".codelens] button. The button should be togleable in settings. The button should the classification of the reference. e. g. ' open reqlan file', " open { extension } file', ' open folder', ' open idea' Clicking the CodeLens should open a reference card with summary stats — not navigate, because references already act as editor links. The card should offer open / reveal / file-selector actions when useful. Folders should be handled by focusing on the ide explorer, or by opening a file selector. Some summary stats should be shown for references - e. g. last edited, count of references, count of referencers, etc. File-top inbound file references are [file_inbound_code_lens], not this outbound classification lens. Implemented by ["../../../../packages/language/src/reqlan-code-lens-provider.ts"], ["../../../../packages/language/src/reqlan-reference-code-lens.ts"], ["../../../../packages/language/src/reqlan-code-lens-settings.ts"], ["../../../../packages/extension/src/extension/register-reference-code-lens.ts"], and ["../../../../packages/extension/src/extension/reference-code-lens-card.ts"]. [file_inbound_code_lens]0.069
editor_reference_activation["../../../../packages/language/test/textmate-wildcard-highlight.test.ts:reference rules use the meta.link scope"], ["../../../../packages/extension/test/editor-link-activation.test.ts:keeps web URL and command document links"], ["../../../../packages/extension/test/editor-link-activation.test.ts:editor words are identifiers; reference tokens come from the parser"], ["../../../../packages/extension/test/editor-link-activation.test.ts:go-to-definition does not send the buffer"], ["../../../../packages/extension/test/editor-link-activation.test.ts:comment injection link scope includes markup.underline"], ["../../../../packages/extension/test/editor-link-activation.test.ts:package.json contributes comment.rq.injection"], ["../../../../packages/extension/test/definition-navigation.test.ts:records a command selection move as a definition jump"], ["../../../../packages/extension/test/definition-navigation.test.ts:records a cross-file command jump from the prior caret"], ["../../../../packages/extension/test/definition-navigation.test.ts:tracks non-blocklisted languages for navigate-back"], ["../../../../packages/extension/test/definition-navigation.test.ts:records only landings in reqlan targets"], ["../../../../packages/extension/test/definition-navigation.test.ts:navigate-back keybinding is not limited to .rq editors"], ["../../../../crates/reqlan-lsp/tests/session.rs:definition_origin_is_the_lexer_token_under_the_cursor"], ["../../../../crates/reqlan-lsp/tests/session.rs:comment_definition_follows_a_resolved_rq_reference"]doneA file reference and an idea reference have no underline in the resting editor. The editor shows an underline when the user holds Ctrl and the pointer is on that reference. Ctrl + click follows the reference in the active editor. A target in the open file moves the cursor in that editor. A target in another file opens in the active editor group. The editor does not open a second copy of the current file. The editor does not open a browser page for a file or idea reference. Alt + Left is navigate-back. It restores the caret from before go-to-definition. The extension keeps that JUMP on a reqlan stack because Cursor often skips the editor history entry for same-file definition. The stack also records jumps that start in comment-reference host languages ( ["../comment-references/functional-code-comment-references.rq".comment_reference_navigate_back] ). Definition targets prefer an open workspace tab URI so Cursor does not open a detached file copy. The definition target range must move the caret ( not an empty 0: 0 – 0: 0 range ). A click that is already on the declaration name is not a JUMP. The TextMate scope is `meta.link.reqlan`. A `markup.underline` scope forces an underline in the resting editor. `.rq` file and idea references omit `markup.underline` — no resting underline. Comment `rq:[…]` sites add `markup.underline` via the comment injection grammar ( ["../comment-references/functional-code-comment-references.rq".comment_reference_resting_underline] ). A file document link is always underlined, and its `#L` URI opens another editor. The extension does not give the editor a file document link. Ctrl + hover uses the definition request. That request is [reference_goto_definition_speed]. The interactive underline is the lexer token under the cursor: the path string or the idea id from the parser. Definition returns `LocationLink.originSelectionRange` for that token so the editor does not invent a word from brackets or quotes. Path segment names inside a quoted path are not reference tokens. The host does not register a DefinitionProvider for other languages, and does not rescan open source files for this activation. When the engine is rust, the language-server document selector includes all file-scheme documents except the comment-host blocklist, and definition navigates resolved `rq:[…]` sites ( ["../comment-references/functional-code-comment-references.rq".references_in_functional_code_comments], ["../comment-references/functional-code-comment-references.rq".comment_reference_language_blocklist] ). A web URL and a command link ( folder, wildcard ) stay document links. A click on a web URL opens that URL in the browser. Related: [reference_document_links], [non_web_reference_navigation], [reference_goto_definition_speed].0.254
file_inbound_code_lens["../../../../packages/language/test/code-lens.test.ts:shows file inbound referenced-by CodeLens at the top of the file"], ["../../../../packages/language/test/code-lens.test.ts:omits file inbound CodeLens when the snapshot has no file referencers"], ["../../../../packages/language/test/code-lens.test.ts:truncates file inbound CodeLens names the same way as idea inlays"], ["../../../../packages/analytical/test/inbound-file-referencers.test.ts"], ["../../../../packages/analytical/test/inbound-file-referencers.test.ts:resolves relative file_reference edges onto the target file"], ["../../../../packages/extension/test/inbound-file-snapshot.test.ts"], ["../../../../crates/reqlan-index/src/queries.rs:inbound_for_file_returns_file_reference_targeting_file"], ["../../../../crates/reqlan-index/src/queries.rs:inbound_for_file_returns_file_reference_targeting_code_file"]doneThe editor shows inbound file references in a ["../vsc-primitives.rq".codelens] at the top of the file. The CodeLens uses the same `@referenced-by: (name, …)` list form as idea inlay hints ( [view_references_as_inlay_hints] ). Idea declarations keep `@referenced-by` for idea-to-idea inbound. The file CodeLens lists ideas that point at this file with a ["../../../reference_types.rq".file_reference] ( path-only and path-with-symbol ). Click the CodeLens to open the inbound referencers summary for this file. Hide the CodeLens when the file has no inbound file references. Read referencers from the SQLite inbound snapshot ( ["../../../indexer/cache-reuse.rq".unify_inbound_indexes] ). Show the CodeLens when that snapshot arrives ( ["../support/open-file-sequencing.rq".lazy_features_after_outbound] ). Do not scan Langium IndexManager. The file CodeLens is independent of the outbound classification toggle on [code_lens_reference_types]. Applies to `.rq` files and to other indexed files that ideas reference. Implemented by ["../../../../packages/language/src/reqlan-code-lens-provider.ts"], ["../../../../packages/language/src/reqlan-file-inbound-code-lens.ts"], ["../../../../packages/language/src/reqlan-inbound-snapshot.ts"], ["../../../../packages/analytical/src/core/inbound-file-referencers.ts"], ["../../../../packages/analytical/src/index-store/sqlite-store.ts"], ["../../../../packages/extension/src/extension/inbound-file-snapshot.ts"], ["../../../../packages/extension/src/extension/register-inbound-sqlite-sync.ts"], ["../../../../packages/extension/src/extension/register-file-inbound-code-lens.ts"], ["../../../../packages/extension/src/ideas_summary_module/register-webview.ts"], and ["../../../../packages/language/src/reqlan-inlay-hint-settings.ts"]. [view_references_as_inlay_hints] [code_lens_reference_types] [inbound_inlay_index_performance]0.120
import_statement_highlighting["../../../../packages/language/test/textmate-import-highlight.test.ts"], ["../../../../packages/language/test/textmate-import-highlight.test.ts:e2e: from-import line scopes path and import keyword"], ["../../../../packages/language/test/textmate-import-highlight.test.ts:e2e: namespace import line scopes path and as"]doneTextMate highlighting for import lines must colour the whole statement, not only the leading `from` / `import` keyword. After `import` ( and after `from` … `import` ), the quoted path, the `import` / `as` keywords, and idea / alias names must receive scopes — they must not stay default-white while still looking interactive from a path document link alone. Root cause: a short `^\\b(from|import)\\b` match ran before the path patterns and consumed the keyword so the path never scoped. Fix: line-scoped `meta.import.reqlan` begin / end rules that paint path, keywords, and names. Semantic tokens still paint import AST nodes ( and must `return` after handling them ).0.064
inbound_inlay_hints_whole_graph["../../../../packages/language/test/inlay-hints.test.ts"], ["../../../../packages/language/test/inbound-referencer-index-perf.test.ts:inlay referencers come from the pushed snapshot, not findAllReferences"]doneInbound references shown in [view_references_as_inlay_hints] should include referencers from the whole requirement graph across the workspace, not only ideas declared in the current file. Coverage comes from SQLite ["../../../indexer/sqlite-schema.rq".edges_table] via ["../../../indexer/cache-reuse.rq".unify_inbound_indexes], not from Langium IndexManager. Whole-graph coverage must not regress to per-idea full-index scans — see [inbound_inlay_index_performance]. Implemented by ["../../../../packages/language/src/reqlan-inbound-reference-inlay-label.ts"], ["../../../../packages/language/src/reqlan-inlay-hint-provider.ts"]. [view_references_as_inlay_hints] [traceable_inlay_hints] [inbound_inlay_index_performance]0.056
inbound_inlay_index_performance["../../../../packages/language/test/inbound-referencer-index-perf.test.ts:inlay referencers come from the pushed snapshot, not findAllReferences"], ["../../../../packages/extension/test/inbound-snapshot-push.test.ts"], ["../../../../packages/language/test/inbound-snapshot-store.test.ts"]doneComputing inbound reference inlay hints for a document with many ideas must look up a pre-pushed SQLite inbound snapshot ( ["../../../indexer/cache-reuse.rq".unify_inbound_indexes] ) in near-constant time per declaration. Show the hints when that snapshot arrives ( ["../support/open-file-sequencing.rq".lazy_features_after_outbound] ). Until the first ready snapshot arrives, hints stay empty. Later index sync must not clear last-good with an empty mid-sync push ( ["../../../indexer/cache-reuse.rq".inbound_snapshot_events] ). Must not call Langium `findAllReferences` / equivalent full-index scans once per idea ( that is O ( ideas × workspace refs ) and freezes the editor on dense graphs ). Implemented by ["../../../../packages/language/src/reqlan-inbound-reference-inlay-label.ts"] and ["../../../../packages/language/src/reqlan-inlay-hint-provider.ts"]. [view_references_as_inlay_hints] [inbound_inlay_hints_whole_graph]0.122
non_web_reference_navigation["../../../../packages/language/test/local-symbolic-links.test.ts:same-file idea links without DocumentBuilder / workspace link"], ["../../../../packages/language/test/local-symbolic-links.test.ts:idea underlines match syntax tokens after non-ASCII text"], ["../../../../packages/language/test/outbound-hop.test.ts:links a neighbor idea after a depth-1 parse without loading the target document"], ["../../../../packages/language/test/linking.test.ts:same-file idea references produce document links"], ["../../../../packages/language/test/linking.test.ts:cross-file imported idea references produce document links"]doneNon-web references ( idea brackets / wikilinks, local file paths, import paths ) must be Ctrl + click navigable via document links and / or go-to-definition. Built-in http ( s ) link detection is not enough. The rust engine builds same-file links and import-target links on the open path ( ["../../../language/syntax.rq".open_file_reference_sequencing], ["../support/open-file-sequencing.rq".outbound_one_hop] ). When the engine is node, idea underlines use the path-local Rust extract ( ["../../../indexer/indexer.rq".local_symbolic_analysis] ), and go-to-definition uses Langium when the idea ref is already linked. Qualified-reference idea lines follow ["../support/open-file-sequencing.rq".lazy_features_after_outbound]. Related: [reference_document_links], [reference_goto_definition_speed], [reference_underline_syntax_align], ["../../../language/syntax.rq".open_file_reference_sequencing].0.163
reference_code_completion["../../../../packages/language/test/completion.test.ts"]autocompletionreferences 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_objects["../../../../packages/language/test/completion.test.ts:anonymous file references complete code files, folders, and .rq files"], ["../../../../packages/language/test/completion.test.ts:completes ideas and ideasets after a quoted file path"], ["../../../../packages/language/test/completion.test.ts:completes ideaset members after a dotted qualifier"]done[reference_code_completion] must offer code completion for all valid reqlan references: - reqlan files ( `.rq` ) - ideas and ideasets in a reqlan file after a quoted path ( `["path".idea]` ) - ideasets and ideaset members ( `[ideaset.member]` ) - code files - folders, including folders that do not contain `.rq` files Import path completion stays limited to `.rq` files. Anonymous file-reference paths share ranking and alias logic with import paths, but they include every file and folder target. Scanning every workspace file on each keystroke is too expensive: [reference_code_completion_performance].0.051
reference_code_completion_performance["../../../../packages/language/test/completion.test.ts:anonymous file references complete code files, folders, and .rq files"], ["../../../../packages/language/test/completion.test.ts:completes ideas and ideasets after a quoted file path"], ["../../../../packages/language/test/completion.test.ts:completes ideaset members after a dotted qualifier"], ["../../../../packages/language/test/completion-perf.test.ts"], ["../../../../packages/language/test/completion-perf.test.ts:cached path completion does not re-read directories"], ["../../../../packages/language/test/completion-perf.test.ts:large-tree anonymous completion stays under budget"]done[reference_code_completion_objects] must stay interactive on large workspaces. Path completion must not re-walk the filesystem on every keystroke: cache directory listings and reuse them for import and anonymous file-reference completion. Ranking must precompute proximity keys rather than recomputing hop distance per comparator call. Idea-graph ranking must reuse per-document adjacency across completion requests while document versions are unchanged. Anonymous file-reference completion may omit distant candidates after proximity ranking so the list stays bounded. Implemented by ["../../../../packages/language/src/reqlan-path-completion.ts"] ( `clearPathCompletionCaches`, listing cache, `sortPathCompletionCandidates` ), ["../../../../packages/language/src/reqlan-completion-provider.ts"], and ["../../../../packages/language/src/reqlan-completion-context.ts"]. [reference_code_completion] [reference_code_completion_objects]0.046
reference_code_completion_sequencing["../../../../packages/language/test/completion.test.ts"][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_document_links["../../../../packages/language/test/linking.test.ts:same-file idea references produce document links"], ["../../../../packages/language/test/linking.test.ts:cross-file imported idea references produce document links"], ["../../../../packages/language/test/linking.test.ts:qualified reference idea token produces document link"], ["../../../../packages/language/test/linking.test.ts:navigable document links include target and tooltip"], ["../../../../packages/language/test/local-symbolic-links.test.ts:aliased from-import whose name contains the imported idea is one link"]doneBracket and wikilink idea references — both same-file and cross-file — must emit a document link so the editor can follow them the same way as file-path references. Editor activation is [editor_reference_activation]. All resolved `LocalReference` and `QualifiedReference` idea / ideaset tokens should emit links targeting the declaration name, regardless of whether the target lives in the same file or an imported one. Namespace-import alias tokens ( `[alias]` → file ) keep their existing file-target link. Each link must include a `target` and a `tooltip` so VS Code does not show " Loading... ". Implemented by ["../../../../packages/language/src/reqlan-file-link-resolver.ts"] ( `resolveIdeaReferenceLinks`, `collectFileLinks` ) and ["../../../../packages/language/src/reqlan-document-link-provider.ts"].0.124
reference_goto_definition_speed["../../../../crates/reqlan-lsp/tests/session.rs:definition_uses_the_open_neighbor_parse"], ["../../../../crates/reqlan-lsp/tests/session.rs:definition_follows_a_changed_neighbor_to_the_name_token"], ["../../../../crates/reqlan-lsp/tests/session.rs:definition_of_an_imported_alias_reaches_the_neighbor"], ["../../../../crates/reqlan-lsp/tests/session.rs:folder_reference_link_is_a_command"], ["../../../../crates/reqlan-lsp/tests/hover_content.rs:hover_shows_idea_content_from_another_file"], ["../../../../crates/reqlan-lsp/tests/stdio.rs:stdio_initialize_and_shutdown"], ["../../../../packages/extension/test/editor-link-activation.test.ts:go-to-definition does not send the buffer"]doneHover and go-to-definition are lookups on the open parse. The parse keeps its references sorted by start byte. A request finds the reference under the cursor by binary search. A request does not walk the syntax tree and does not convert each reference to a line and column. A request resolves each authored path once per parse. It does not `stat` that path again. A same-file idea uses that parse. An open neighbor uses that neighbor's buffer. A closed neighbor is parsed once. The server keeps its model, idea names, and name-token ranges. A later request does one `stat`. It reads and parses the file again only when the modified time or the size changed. A hover on a cross-file idea renders from that cached model. It does not read the file. The target is the name token of the idea, in the open editor when the target is open. An imported alias such as `[other]` reaches the imported idea. A folder reference has no definition. Its link is the folder-picker command. A hover renders idea content only when ["./features-syntax.rq".idea_content_tooltip] is on. A request does not wait behind the confirm pass of ["../support/open-file-sequencing.rq".lazy_features_after_outbound]. The editor calls this request on Ctrl + hover. The extension does not send the document text from that handler. The extension does not open a folder picker or a wildcard panel from that handler. A folder click and a wildcard click use the command document link. When the engine is node, the provider uses cached Langium ref objects for idea tokens. It does not scan the document text when the CST already covers the cursor. Related: [editor_reference_activation], ["../../../language/imports.rq".wildcard_references_webview].0.179
reference_underline_syntax_align["../../../../packages/language/test/utf8-lsp-offset.test.ts"], ["../../../../packages/language/test/local-symbolic-links.test.ts:idea underlines match syntax tokens after non-ASCII text"], ["../../../../crates/reqlan-index/tests/local_symbolic.rs:analyze_local_symbolic_source_offsets_are_utf8_bytes"]doneIdea document-link and error underlines must cover the same UTF-16 range as the syntax token ( Langium `$refNode` / semantic token ), including when non-ASCII text appears earlier in the file. Native extract spans are UTF-8 byte offsets ( ["../../../indexer/indexer.rq".local_symbolic_analysis] ); LSP `Position.character` is UTF-16. Convert before `positionAt` so the underline does not drift off the token. Related: [non_web_reference_navigation], [reference_document_links], [unresolved_reference_diagnostics], [aliased_from_import_ctrl_click].0.125
same_line_named_block_highlighting["../../../../packages/language/test/textmate-idea-highlight.test.ts"], ["../../../../packages/language/test/textmate-idea-highlight.test.ts:same-line named block rule closes on the opening line"], ["../../../../packages/language/test/textmate-idea-highlight.test.ts:e2e: same-line named braces do not swallow later ideas"], ["../../../../packages/language/test/textmate-idea-highlight.test.ts:e2e: TextMate idea names match the Langium parse"], ["../../../../packages/language/test/parsing.test.ts:same-line braces after a name parse as a block"]doneTextMate-only highlighting ( no semantic tokens ) must follow the canonical lexer for named `{` / `}`: a top-level `name {}` or `name {hello}` is a complete ["../../../language/syntax.rq".block_idea] on that line. The grammar must close on the same line. It must not leave a block open until a later own-line `}`. An open block swallows later one-liners such as a name-only idea. `name {` at end of line is a multiline block. Close it only on an own-line `}` so matching prose pairs at end of line ( `{{SITE_URL}}` ) stay in the body per ["../../../language/syntax-edge-cases.rq".nested_curly_braces]. `name text {braces}` is a ["../../../language/syntax.rq".simple_idea]. `{` after other body text must not start a block. TextMate idea-name scopes on a file must match the Langium parse of that file.0.052
traceable_inlay_hints["../../../../packages/language/test/inlay-hints.test.ts"], ["../../../../packages/language/test/inlay-hints.test.ts:backlink tooltip opens the real file URI when the path has a space"], ["../../../../packages/language/test/inlay-hints.test.ts:attaches open command to clickable referencer label parts"], ["../../../../crates/reqlan-lsp/tests/parity.rs:formats_inbound_referencers_as_an_inlayed_attribute"], ["../../../../crates/reqlan-lsp/tests/parity.rs:backlink_inlay_command_and_tooltip_encode_spaces_like_gotos"]doneA click on one inbound referencer opens that idea via `reqlan.openInboundReferencer` → host openIndexFile ( same path as activity-bar / index opens ). The inlay label part must not use raw LSP Location for the click gesture — Cursor rejects detached file: / / opens that Location would trigger. A click on the remainder opens the inbound summary for that idea. The backlink tooltip uses the shared document-link file URI builder ( encoded path, `#L` fragment ). The Rust server emits the same markdown tooltip and open command ( ["../support/language-server-rust.rq".language_server_rust] ). A file path with a space opens that file from the inlay click and from the tooltip. A directory segment " reqlan rq " opens that file. Implemented by ["../../../../packages/language/src/reqlan-inbound-reference-inlay-label.ts"], ["../../../../packages/language/src/reqlan-inlay-hint-provider.ts"], ["../../../../packages/language/src/reqlan-inlay-hint-settings.ts"], ["../../../../packages/extension/src/extension/register-reference-inlay-hints.ts"], ["../../../../packages/language/src/reqlan-file-link-resolver.ts"], ["../../../../packages/language/src/reqlan-path-resolve.ts"], and ["../../../../crates/reqlan-lsp/src/analysis.rs"].0.052
unresolved_reference_diagnostics["../../../../packages/language/test/local-symbolic-links.test.ts:unresolved same-file ideas get no document link"], ["../../../../packages/language/test/outbound-hop.test.ts:does not link when the neighbor file exists but the idea is missing"], ["../../../../packages/language/test/outbound-hop.test.ts:drops a false unresolved diagnostic when the neighbor idea exists"], ["../../../../packages/language/test/ignore-error.test.ts:reports unresolved reference without ignore directive"]in-progressUnresolved 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
view_references_as_inlay_hints["../../../../packages/language/test/inlay-hints.test.ts"], ["../../../../packages/language/test/inbound-referencer-index-perf.test.ts"], ["../../../../crates/reqlan-lsp/tests/parity.rs:formats_inbound_referencers_as_an_inlayed_attribute"]doneReferences should be shown as inlay hints in the editor. This should be a toggleable setting, which should be available in the command palette. N-lines ( configurable setting ) of hints should be shown below the idea. Inbound lookup must stay interactive on large graphs via [inbound_inlay_index_performance]. The Rust server honours `reqlan.referencesInlayHints.enabled` and the host inbound snapshot ( `byIdeaName` + `fileReferencers` ). Implemented by ["../../../../packages/language/src/reqlan-inlay-hint-provider.ts"], ["../../../../packages/language/src/reqlan-inbound-reference-inlay-label.ts"], ["../../../../packages/language/src/reqlan-inlay-hint-settings.ts"], ["../../../../packages/extension/src/extension/register-reference-inlay-hints.ts"], and ["../../../../crates/reqlan-lsp/src/session.rs"].0.093
wildcard_reference_highlighting["../../../../packages/language/test/textmate-wildcard-highlight.test.ts"], ["../../../../packages/language/test/textmate-wildcard-highlight.test.ts:e2e: bracket wildcard path ref matches link scope and not block comment"], ["../../../../packages/language/test/semantic-tokens-wildcard.test.ts"], ["../../../../packages/language/test/semantic-tokens-wildcard.test.ts:e2e: WildcardReference emits string + variable tokens"], ["../../../../packages/language/test/comment-in-string.test.ts:e2e: /**/ glob survives tokenize → parse in prose, naked quotes, and reference STRING"]doneBracket and wikilink forms of ["../../../language/imports.rq".wildcard_references] ( `["path/**/*.rq".idea_*]`, `[["path/*.rq".*_pane|label]]` ) must TextMate-scope as `meta.link.reqlan` with the path as `string.other.link.reqlan` — never as `comment.block.reqlan`. The grey " comment " paint happened when `#bracket-references` only allowed ID suffixes, so `/*` inside an unmatched path opened a block comment. Fixes: TextMate `#bracket-references` / wiki path patterns accept `WILDCARD_NAME` suffixes; `#comments` block begin rejects empty slash-star-star-slash; body rules try references before comments. Semantic tokens paint `WildcardReference.pathPattern` as string and `ideaPattern` as variable ( ["./features-syntax.rq".syntax_highlighting] ). Related: ["../../../language/syntax.rq".comments], ["../../../language/imports.rq".wildcard_references_webview].0.079
at_sign_in_idea_text_block["../../../../packages/language/test/parsing.test.ts"], ["../../../../packages/language/test/parsing.test.ts"]the @ 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_completion["../../../../packages/language/test/completion.test.ts:completes import-root alias paths"]The 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
comment_support["../../../../packages/extension/test/comment-reference-path-context.test.ts:resolves @/ against the workspace folder for extension comment links"], ["../../../../packages/language/test/comment-reference-resolution.test.ts:creates a document link for an import-root aliased comment reference"]The 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_references["../../../../packages/language/test/linking.test.ts:document links resolve test file references to the matching test"], ["../../../../packages/language/test/references.test.ts:keeps colons inside the test name suffix"], ["../../../../packages/language/test/linking.test.ts:classifyReferenceUri treats existing directories as folders"], ["../../../../packages/language/test/linking.test.ts:folder file references resolve without reading the directory as a file"], ["../../../../packages/language/test/linking.test.ts:empty file references produce document links and warning diagnostics"], ["../../../../packages/language/test/linking.test.ts:parse-error file references produce document links and warning diagnostics"], ["../../../../packages/language/test/linking.test.ts:missing file references do not produce document links"], ["../../../../packages/language/test/linking.test.ts:same-file idea references produce document links"]A 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
idea_content_tooltip["../../../../crates/reqlan-lsp/tests/hover_content.rs:hover_shows_styled_idea_content_by_default"], ["../../../../crates/reqlan-lsp/tests/hover_content.rs:hover_omits_idea_content_when_the_setting_is_off"], ["../../../../crates/reqlan-lsp/tests/hover_content.rs:hover_shows_idea_content_from_another_file"], ["../../../../packages/extension/test/idea-content-tooltip.test.ts:package.json enables idea content tooltips by default"], ["../../../../packages/extension/test/idea-content-tooltip.test.ts:a missing value stays on"]doneA hover on an idea name or on a reference shows that idea's content. The tooltip is markdown. It uses a heading, body lines, attributes, lists, and code fences. A reference in another file shows that file's idea content. The setting `reqlan.ideaContentTooltip.enabled` controls this hover. The default is on. When the setting is off, the hover shows the idea name and the one-line summary. Related: [syntax_hovering] ["../support/language-server-rust.rq".language_server_rust]0.149
syntax_features["../../../../crates/reqlan-lsp/tests/session.rs:attribute_catalog_completion_and_find_references"], ["../../../../crates/reqlan-lsp/tests/session.rs:definition_hover_highlight_and_link"]The 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_highlighting["../../../../packages/language/test/textmate-wildcard-highlight.test.ts"], ["../../../../packages/language/test/textmate-import-highlight.test.ts"], ["../../../../packages/language/test/textmate-idea-highlight.test.ts"], ["../../../../packages/language/test/semantic-tokens-wildcard.test.ts"]done. rq files should receive full syntax highlighting coverage for all reqlan constructs. Semantic token highlighting should distinguish ideas, attributes, references, imports, and keywords. Path + wildcard idea refs ( `["…/*.rq".idea_*]` ) must highlight as links / strings — not comment-grey — see ["./features-syntax-highlighting.rq".wildcard_reference_highlighting]. Import lines must colour path and keywords after `import` / `from` — see ["./features-syntax-highlighting.rq".import_statement_highlighting]. Same-line named braces ( `name {}`, `name {hello}` ) must close in TextMate so later one-liners stay visible — see ["./features-syntax-highlighting.rq".same_line_named_block_highlighting].0.093
code_actions["../../../packages/language/test/code-actions.test.ts"], ["../../../crates/reqlan-lsp/tests/code_actions.rs"], ["../../../packages/language/test/code-actions.test.ts:keeps one quick fix set after repeated builds"], ["../../../packages/extension/test/extension-package.test.ts"], ["../../../packages/extension/test/barrel-page-apply.test.ts"], ["../../../packages/language/test/idea-refactor.test.ts"], ["../../../packages/language/test/ignore-error-action.test.ts"], ["../../../packages/extension/test/ignore-error-code-action.test.ts"], ["../../../packages/language/test/code-actions.test.ts:creates the missing idea below the containing idea when only one is unresolved"], ["../../../packages/language/test/code-actions.test.ts:offers all or a specific unresolved idea when the caret idea has several"]doneLanguage-server code actions for `.rq` files, plus comment-file Quick Fixes for ignore-error: - Quick fixes for unresolved references ( add import, rewrite qualified ref, search, create file ) — ["./support/features-imports.rq".import_error] - Refactor: search / replace or wrap as idea reference — ["../host/features-commands.rq".search_code_actions] - Refactor: move or delete an idea declaration — ["../mutation/refactor_support.rq".refactor_symbol_move] ["../mutation/refactor_support.rq".refactor_symbol_delete] - File-level source action: barrel page — ["../host/features-commands.rq".barrel_page] - Quick Fix: insert `//rq-ignore-error` before a line with diagnostics — ["../host/features-commands.rq".code_actions_ignore_error] - Quick Fix: create a missing local idea below the idea that contains the unresolved reference — ["../host/features-commands.rq".create_idea_below_idea_containing_unresolved_reference_under_cursor] The Rust server returns the same set ( ["./support/language-server-rust.rq".language_server_rust] ). Command-backed search / replace and barrel actions omit LSP command arguments so VS Code does not cache disposable delegating ids; the extension resolves the active editor ( or document ) when the command runs. The same Quick Fix appears once in one request. Langium appends validation diagnostics when a document already has diagnostics. The diagnostic list stays when the document state is below Validated. The document builder removes previous built-in diagnostics before that append. One linking error gives one Quick Fix after repeated builds.0.169
context_content_styling["../../../../packages/extension/webviews/activity-bar/components/NestedSection.svelte"], ["../../../../packages/extension/webviews/activity-bar/components/ScopePane.svelte"], ["../../../../packages/extension/webviews/activity-bar/components/ReferenceListsPane.svelte"]donePane bodies must not grow unbounded. Nested lists use [NestedSection] ( collapse + scroll ) under [CollapsiblePane]. Priority: [scope_pane]; [reference_lists_pane] kind groups; also selection / parents. [ScopePane] [ReferenceListsPane]0.046
dependency_pulse_table["../../../../packages/extension/webviews/activity-bar/components/widgets/DependencyPulse.svelte"], ["../../../../packages/extension/webviews/activity-bar/components/ScopePane.svelte"]doneThe focus-hero [DependencyPulse] compass ( ↑ parents, → outbound, ← inbound, ↓ dependents, ● centre ) is clickable. Clicking any arm or the centre toggles a compact reference table below with Dir, Role, Idea, and Status. Rows open / focus the related idea. Duplicates of always-on inbound / outbound lists are omitted from the hero; the current-file lens still lists them. Aligns with [context_scope_v2.dependency_pulse]. Implemented by [DependencyPulse] [ScopePane].0.059
fingerprint_axis_drilldown["../../../../packages/extension/webviews/activity-bar/components/widgets/ContextFingerprint.svelte"], ["../../../../packages/extension/webviews/activity-bar/components/ScopePane.svelte"]doneEach [ContextFingerprint] axis row ( Files, Requirements, History, Architecture, Git, Diagnostics, Coverage ) is clickable. Clicking a row toggles a compact contributor table below it ( Source, Item, Detail ) listing what filled that axis — e. g. which lenses included a file, which ideas are in the footprint, git focus commits / authors ( dirty paths secondary ), anomalies, or relationship edges. Table rows open / focus the related idea or file when actionable. Empty axes show a short “ why care / how to fill ” message. Mirrors the interaction pattern of [dependency_pulse_table]. Aligns with [context_scope_v2.context_fingerprint] and [tooltip_detail]. Implemented by [ContextFingerprint] [ScopePane].0.075
git_history_lens["../../../../packages/extension/webviews/activity-bar/components/ScopePane.svelte"], ["../../../../packages/extension/webviews/activity-bar/components/widgets/ContextFingerprint.svelte"], ["../../../../packages/extension/src/activity_bar_module/git-context.ts"], ["../../../../packages/extension/src/activity_bar_module/git-context-helpers.ts"], ["../../../../packages/extension/test/git-context.test.ts"], ["../../../../packages/extension/src/activity_bar_module/lib/context-model.ts"], ["../../../../packages/extension/src/activity_bar_module/lib/context-signals.ts"]doneExpanded git dimension in [scope_pane]: focus-centric development history, not a Source Control duplicate. Layout: - Header: branch name, HEAD short hash, muted summary ( e. g. " main · 3 commits · 2 authors " ). - Focus history ( primary ): up to ~ 8 commits touching the focus file / idea line range — relative time, short hash, subject, author. Prefer `git log -L` for `.rq` ideas; fall back to path log. Non-. rq uses path `--follow`. - Authors: compact chip row of top authors from that log window. - Working tree ( secondary, collapsed by default ): dirty staged / unstaged paths for caution / footprint only. Focus hero: history cue ( last commit age / branch ), not `git: staged|unstaged`. Fingerprint Git axis and drilldown list commits / authors ( dirty paths secondary ) per [fingerprint_axis_drilldown] and [tooltip_detail]. Aligns with ["../context-scope.rq".git_context] and [context_scope_v2.development_history_signals]. Performance: heavy focus history must not block link open or first context paint — see ["../activitybar.rq".link_open_decoupled_from_git] and ["../activitybar.rq".git_focus_cache_by_head]. Implemented by [ScopePane] [ContextFingerprint].0.107
reference_lists_pane["../../../../packages/extension/webviews/activity-bar/components/ReferenceListsPane.svelte"], ["../../../../packages/extension/src/activity_bar_module/local-symbolic-context.ts"], ["../../../../packages/extension/test/local-symbolic-context.test.ts"], ["../../../../crates/reqlan-index/src/extract.rs"], ["../../../../crates/reqlan-index/tests/extract_parity.rs"]Actionable 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
reference_resolution_parity["../../../../crates/reqlan-index/tests/extract_parity.rs"], ["../../../../packages/analytical/test/file-reference-resolve.test.ts"], ["../../../../packages/language/test/linking.test.ts:does not report linking error for bare namespace alias references"]doneReference resolution for the activity-bar references pane must use the same shared rules as the editor ( document links / go-to-definition ), not a second ad-hoc classifier. - Bare namespace-alias bracket refs such as `[ActivityBarApp]` that open a file in the editor must index as resolved `file_reference` edges ( import path ), not unresolved idea refs — per ["../../../language/imports.rq".import_namespace]. - Quoted file paths and markdown file links use the same file-target treatment as the language file-link resolver in ["../../../../packages/language/src/reqlan-file-link-resolver.ts"] / ["../../../../packages/language/src/reqlan-namespace-import-links.ts"]. - File targets are opened relative to the defining `.rq` file ( same path join as the miniature graph ), not the workspace root. - If a target resolves in the file view, it must resolve ( and be openable ) in [reference_lists_pane]. Implemented by ["../../../../crates/reqlan-index/src/extract.rs"], ["../../../../packages/analytical/src/core/file-reference-resolve.ts"], [ReferenceListsPane].0.064
tooltip_detail["../../../../packages/extension/src/activity_bar_module/lib/context-signals.ts"], ["../../../../packages/extension/src/activity_bar_module/lib/context-signals.ts"], ["../../../../packages/extension/webviews/activity-bar/components/widgets/ContextFingerprint.svelte"], ["../../../../packages/extension/webviews/activity-bar/components/ScopePane.svelte"]doneScope pane tooltips are detailed enough to explain *what* a meter means and *why it matters*. - [scope_pane] widgets ( stability, dependency pulse, timeline, churn, lens chips, footprint line ) expose granular hover copy on the control and its sub-items. - [ContextFingerprint] has an ⓘ info button with semantic scoring help, per-axis hover copy, and [fingerprint_axis_drilldown]. - Scoring copy is sourced from [context_signals] ( `CONTEXT_FINGERPRINT_HELP`, `CONTEXT_FINGERPRINT_AXIS_HELP`, `buildContextFingerprint` ) so UI stays aligned with [context_scope_v2.context_fingerprint] and [context_scope_v2.ai_readiness_gauge]. Implemented by [ContextFingerprint] [ScopePane].0.075
unresolved_reference_create["../../../../packages/extension/webviews/activity-bar/components/ReferenceListsPane.svelte"], ["../../../../packages/extension/src/activity_bar_module/activity-bar-webview-provider.ts"]doneWhen an outbound reference remains unresolved after shared resolution ( missing idea, not a file / namespace-alias target ): - Do **not** treat the label as a file path or navigate to a non-existent file. - Show an unresolved badge and a ** + ** control with tooltip " Create idea ". - Activating ** + ** opens create-idea ( reuse [commands.pallete_function_create_todo] when available; until then, the existing import-error create-file flow prefilled with the reference name and source document ). Implemented by [ReferenceListsPane] and the activity-bar host message handler.0.064
search_pane["../../../../packages/extension/webviews/activity-bar/components/SearchPane.svelte"], ["../../../../packages/extension/webviews/activity-bar/state/app.svelte.ts"], ["../../../../packages/extension/src/activity_bar_module/activity-bar-webview-provider.ts"]doneWorkspace idea search in the activity bar — find rq ideas by name, summary, or tags without leaving the sidebar. Complements the modal from [commands.search_code_actions]; this pane stays open for repeated lookups and inserts. Implemented by [SearchPane] under [CollapsiblePane]; host wire in [activity_bar_webview] / [activity_bar_messages] / [app_state]. [search_pane_query] [search_pane_layout] [search_pane_results] [search_pane_open_live_file] [search_pane_load_more] [search_pane_file_hits] [search_pane_insert_reference] [search_add_to_chat] [search_pane_advanced] [search_pane_empty_query] [search_pane_scoped_status] [search_progress] [search_pane_seed] [search_pane_match_highlighting]0.176
search_pane_advanced["../../../../packages/extension/webviews/activity-bar/components/SearchPane.svelte"], ["../../../../packages/extension/webviews/activity-bar/state/app.svelte.ts"]done[search_pane] header link **Advanced** opens [ideas_summary_doc.ideas_list] with the current query prefilled.0.063
search_pane_empty_query["../../../../packages/extension/webviews/activity-bar/components/SearchPane.svelte"], ["../../../../packages/extension/webviews/activity-bar/state/app.svelte.ts"]doneEmpty query in [search_pane]: prompt to type ideas or files ( do not dump the full catalog into the pane ).0.063
search_pane_file_hits["../../../../crates/reqlan-search/tests/fuzzy.rs:ranks_file_name_hits_with_ideas"], ["../../../../crates/reqlan-search/tests/fuzzy.rs:ranks_file_name_hits_with_ideas"], ["../../../../packages/analytical/test/workspace-index.test.ts:fuzzySearch returns file-name hits and pages with offset"], ["../../../../packages/extension/test/search-results-meta.test.ts"]done[search_pane] mixes [core_search.file_search] hits ( kind `file` ) into the ranked list with ideas. Click opens the file at line 0. File hits do not offer Insert ref or Pin ( those are idea actions ). Empty-state and placeholder copy mention files.0.115
search_pane_insert_reference["../../../../packages/extension/test/insert-idea-reference.test.ts"], ["../../../../packages/extension/src/extension/insert-idea-reference.ts"], ["../../../../packages/extension/src/extension/insert-idea-reference-helpers.ts"]doneEach [search_pane] hit has an **Insert reference** button that inserts `[idea_name]` at the active editor cursor ( or replaces the selection ) via [insert_idea_reference], adding an import when the target is in another file — same rules as [commands.search_code_actions]. Helpers: [insert_idea_reference_helpers].0.063
search_pane_layout["../../../../packages/extension/webviews/activity-bar/components/SearchPane.svelte"]done[search_pane] results fill the pane body ( 100 % width ) and scroll inside the pane; do not nest a second capped [NestedSection] scroll.0.069
search_pane_load_more["../../../../packages/extension/test/search-results-meta.test.ts"], ["../../../../crates/reqlan-search/tests/fuzzy.rs:pages_ranked_hits_with_offset_and_truncated"], ["../../../../packages/analytical/test/workspace-index.test.ts:fuzzySearch returns file-name hits and pages with offset"]doneWhen ranked hits exceed the visible page, [search_pane] shows an exceeded-count label ( `40+ matches`, or `{n}+ matches` after further pages ) instead of a full total, and a **Show more** control at the bottom of the list that fetches the next page and appends. A new query resets to the first page. Uses [core_search.fuzzy_search_pages] ( `offset` + `truncated` ).0.095
search_pane_match_highlighting["../../../../crates/reqlan-search/tests/fuzzy.rs"], ["../../../../crates/reqlan-search/tests/fuzzy.rs"], ["../../../../crates/reqlan-search/tests/fuzzy.rs"], ["../../../../crates/reqlan-search/tests/fuzzy.rs"], ["../../../../crates/reqlan-search/tests/fuzzy.rs"]doneThe [search_pane_results] list highlights the parts of name, path, and summary that matched the query via [SearchHighlight]. Resilient to [core_search.fuzzy_search] / [core_search.fuzzy_search_whitespace]: contiguous and separator-insensitive spans, token prefixes / part matches, reordered words, and character-subsequence ( fuzzy / acronym ) marks on short fields such as the idea name — not scattered letters in long summaries.0.063
search_pane_open_live_file["../../../../packages/extension/test/open-index-file.test.ts"], ["../../../../packages/extension/test/open-index-file.test.ts:prefers the document whose URI matches the workspace target"]doneA click on a [search_pane] hit must show the live workspace file at that path. If that file is already open in a workspace tab, focus that tab and move the caret. Do not open a second read-only tab with stale content ( a detached `file://` copy that Cursor does not sync ). Keep the click path cheap: no extra index read, no base discovery.0.074
search_pane_query["../../../../crates/reqlan-search/tests/fuzzy.rs"], ["../../../../packages/analytical/test/workspace-index.test.ts:fuzzySearch ranks from the native index without listing all ideas in JS"], ["../../../../packages/extension/webviews/activity-bar/state/app.svelte.ts"], ["../../../../crates/reqlan-analytical/tests/fuzzy_search.rs:workspace_index_fuzzy_search_ranks_without_exporting_catalog"]done[search_pane] search input posts a debounced host query. Ranking uses [core_search.fuzzy_search] in the native search module ( `NativeWorkspaceIndex.fuzzySearch` ); separator-insensitive `_` / `-` / `...` / whitespace. File-name hits: [search_pane_file_hits] / [core_search.file_search]. Pages: [search_pane_load_more] / [core_search.fuzzy_search_pages]. Highlighting stays in the TS `./fuzzy-search` export.0.063
search_pane_results["../../../../packages/extension/webviews/activity-bar/components/SearchPane.svelte"], ["../../../../packages/extension/src/activity_bar_module/search-results-meta.ts"]done[search_pane] results list is paged ( default page size 40 ) with name, path, and one-line summary; click opens the idea or file ( [search_pane_open_live_file] ). Exceeded counts and further pages: [search_pane_load_more]. File hits: [search_pane_file_hits].0.078
search_pane_scoped_status["../../../../packages/extension/webviews/activity-bar/components/SearchPane.svelte"], ["../../../../packages/extension/webviews/activity-bar/state/app.svelte.ts"]done[search_pane] soft-waits when the index is not ready; scoped errors stay in the pane. Loading UX: [search_progress].0.063
search_pane_seed["../../../../packages/extension/test/wildcard-reference-open-search.test.ts"], ["../../../../packages/extension/src/activity_bar_module/activity-bar-webview-provider.ts"], ["../../../../packages/extension/webviews/activity-bar/state/app.svelte.ts"]doneHost may seed [search_pane] via `focusIdeaSearch` ( query + optional pathFilter ) from the wildcard-matches webview **Open in Search** action ( ["../../../language/imports.rq".wildcard_references_webview] ). Path filter is a hard AND after ranking ( ["../../../language/imports.rq".idea_path_filter] ).0.090
search_progress["../../../../packages/extension/webviews/activity-bar/components/SearchPane.svelte"], ["../../../../packages/extension/webviews/activity-bar/state/app.svelte.ts"], ["../../../../packages/extension/src/activity_bar_module/activity-bar-webview-provider.ts"], ["../../../../packages/extension/src/activity_bar_module/activity-bar-messages.ts"], ["../../../../packages/analytical/test/workspace-index.test.ts:fuzzySearch ranks from the native index without listing all ideas in JS"]doneActivity-bar search ranks in the native [core_search.fuzzy_search] module ( rusqlite read + score in-process ). The host must not hydrate a JS idea catalog or worker before scoring — return only the capped hit list. A static " Searching … " / " Loading … " label must not be the only signal: the pane should show **live progress** so a slow wait reads as working, not hung. - Host posts progress for the in-flight search request while native scoring runs ( `Scoring ideas…` ). - [SearchPane] displays the phase label with a continuous activity affordance ( spinner / indeterminate bar ) and elapsed time while loading, for both the empty initial wait and the " Updating … " refresh path. - Stale progress from superseded queries must not overwrite a newer request; clear progress when results or a scoped error arrive.0.080
todo_pane["../../../../packages/extension/webviews/activity-bar/components/TodoPane.svelte"], ["../../../../packages/extension/webviews/activity-bar/components/TodoPane.svelte"], ["../../../../packages/extension/webviews/activity-bar/App.svelte"], ["../../../../packages/extension/webviews/activity-bar/state/app.svelte.ts"], ["../../../../packages/extension/src/activity_bar_module/activity-bar-webview-provider.ts"]doneWorkspace todo list in the activity bar — ideas that carry the `@todo` special attribute ( [ai_support.special_attributes] ), not ideas whose `@status` happens to be `todo`. Complements the planned Overview todos rollup in [ideas_summary_doc.overview_page]; this pane stays open for quick triage beside the editor. Layout matches [search_panel.search_pane_layout]: flat list in the pane body, not a nested boxed subsection. - List ideas in the active base where the `todo` attribute is present ( bare `@todo` / flag, or `@todo` with a note ). - Each row: idea name, source path, and the todo note when present ( omit empty / bare-true values ). - Click opens the idea in the editor ( same navigation as [search_panel.search_pane_results] ). - Results fill the pane body ( 100 % width ) and scroll inside the pane; do not nest a second capped NestedSection scroll. - List capped ( default ~ 40 ) with a “ showing N of M ” meta line when truncated; do not dump unbounded index results into the pane. - Soft-wait when the index is not ready; scoped errors stay in the pane. - Pane header **Refresh** reloads the list; also reload on index health / sync completion for the active base. - Optional affordance to create a stub via [commands.pallete_function_create_todo] when that command ships — do not block the list on it. Host query + wire: [activity_bar_webview] / [activity_bar_data] / [activity_bar_messages] / [app_state]; store query [sqlite_store]. Implemented by [TodoPane] under [CollapsiblePane]; same scroll / fill pattern as [SearchPane].0.046
workspace_base_picker["../../../../packages/extension/test/filter-bases.test.ts"], ["../../../../packages/extension/webviews/activity-bar/components/BasePicker.svelte"], ["../../../../packages/extension/webviews/activity-bar/components/WorkspacePane.svelte"], ["../../../../packages/extension/webviews/activity-bar/state/app.svelte.ts"], ["../../../../packages/extension/src/activity_bar_module/activity-bar-webview-provider.ts"]doneBases in the Workspace pane are chosen via a **searchable dropdown**, not a stacked list of base rows. - Closed: shows the active base label ( and compact ready / issue hint when useful ). - Open: type-to-filter over discovered bases by label and path; selecting a match **pins** the active base ( [bases.active_base_switch] ) — a pointer swap, not a sync. - Options surface label / path plus ready state and idea / edge / issue counts so the user can distinguish bases before committing. - Single-base workspaces still use the same control ( no special flat list ); empty discovery stays on the Create Base CTA. - Prefer VS Code dropdown tokens for chrome; keep the control compact so health / stats / actions remain the focus of the pane. Switch UX: - Selecting a base posts immediately; the picker may flash **Switching … ** until `indexHealth` confirms `activeBaseId` ( should be near-instant ). - Never kick soft / hard sync on switch; readiness / progress for a not-yet-ready base is whatever the index already reports. - Editor-follow must not overwrite a user-selected base on the same refresh that applies the selection. Implemented by [BasePicker] in [WorkspacePane]; filter helpers in [filter_bases].0.072
workspace_content_styling["../../../../packages/extension/test/group-file-issues.test.ts"], ["../../../../packages/extension/webviews/activity-bar/components/NestedSection.svelte"], ["../../../../packages/extension/webviews/activity-bar/components/WorkspacePane.svelte"]donePane bodies must not grow unbounded. Nested lists use [NestedSection] ( collapse + scroll ) under [CollapsiblePane]. File → errors grouping via [group_file_issues] in [WorkspacePane].0.046
activity_bar_styling["../../../packages/extension/test/pane-layout.test.ts"], ["../../../packages/extension/webviews/activity-bar/App.svelte"], ["../../../packages/extension/webviews/activity-bar/components/CollapsiblePane.svelte"], ["../../../packages/extension/webviews/activity-bar/components/SelectionPane.svelte"], ["../../../packages/extension/webviews/activity-bar/styles/global.css"]doneActivity bar chrome for the [panes] stack under [ActivityBarApp] / [CollapsiblePane]. - **Open panes fill** the remaining bar height ( flex grow ); collapsed panes stay header-sized. A single open pane takes the full stack; multiple open panes share space by persisted relative weights. - Each expanded pane is **resizable** when more than one is open ( drag handle adjusts weight ); heights / weights persist with expand state via [ActivityBarApp] view state. - The bar itself **scrolls** when minimum pane sizes exceed the webview viewport; otherwise pane bodies scroll internally. - Pane shells **persist** across bootstrap / empty / invalid states — hide or soften **content** inside the pane ( e. g. [SelectionPane] empty copy ), do not unmount the section for phase or missing data. Bootstrap banner remains per [loading_state]; list overflow still uses [panel_content_styling] / [NestedSection]. Layout helpers: ["../../../packages/extension/webviews/activity-bar/lib/pane-layout.ts"].0.054
error_status_bar["../../../packages/extension/test/index-status-text.test.ts"]doneWhen the activity bar status line ( ["../../../packages/extension/webviews/activity-bar/components/HeaderBar.svelte"] ) or Ideas Summary status chrome ( ["../../../packages/extension/webviews/ideas-summary/components/StatusBar.svelte"] ) is in an error state ( `statusError` ), surface the error **prominently** — do not mute it or bury it behind healthy index counts. - Lead the status text with the error summary or issue count; healthy idea / reference counts may follow as secondary context. - Use error foreground, error validation background, a distinct error label, and `role="alert"` so the message is visually and accessibly distinct from idle status. - Bootstrap error banner ( ["../../../packages/extension/webviews/activity-bar/components/BootstrapStatus.svelte"] in [loading_state] ) must not apply muted styling to the error detail. Soft-waits for an unready index stay non-error per [loading_state] / [workspace_panel.workspace_loading]; this idea covers true error states only. Shared copy helper: ["../../../packages/extension/webviews/ideas-summary/lib/index-status-text.ts"].0.075
git_focus_cache_by_head["../../../packages/extension/test/git-context.test.ts"], ["../../../packages/extension/src/activity_bar_module/git-context.ts"]doneFocus git history / stats caches are not TTL-evicted on a fixed wall-clock window. Refresh a cache entry only when its write timestamp is **before** the repository's latest commit authored time ( HEAD ); while `cache.at >= latestCommitAuthoredAt`, reuse the entry. Applies to focus history, focus stats, and range-commit count caches in ["../../../packages/extension/src/activity_bar_module/git-context.ts"]. Related UX: [current_context_scope.git_history_lens].0.059
header_buttons["../../../packages/extension/webviews/activity-bar/components/HeaderBar.svelte"], ["../../../packages/extension/src/activity_bar_module/context-session.ts"]Cross-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
lean_resolved_open["../../../packages/extension/src/analytical_submodule/index-store/open-index-file.ts"], ["../../../packages/extension/src/analytical_submodule/index-store/resolve-index-file-uri.ts"], ["../../../packages/extension/src/activity_bar_module/activity-bar-webview-provider.ts"], ["../../../packages/analytical/src/core/base-discovery.ts"], ["../../../packages/analytical/test/base-discovery.test.ts"], ["../../../packages/analytical/test/base-discovery.test.ts:nearestBaseRoot walks ancestors instead of scanning sibling trees"]doneWhen a link already carries a resolved `fileUri` / `targetPath`, open that URI at the given line — do not re-classify resolution or walk base discovery on the click path. Pass the active base root into ["../../../packages/extension/src/analytical_submodule/index-store/open-index-file.ts"] so ["../../../packages/extension/src/analytical_submodule/index-store/resolve-index-file-uri.ts"] skips tree discovery. `toIndexFileUri` fallbacks ( editor selection, git chrome, open-tab scan ) must use ["../../../packages/analytical/src/core/base-discovery.ts".nearestBaseRoot] ( ancestor `.reqlan` walk ), never `discoverBases` ( full workspace scan ). Clicking a search hit that already has `fileUri` + line must not wait on catalog scoring or base rediscovery.0.045
link_open_decoupled_from_git["../../../packages/extension/src/activity_bar_module/activity-bar-webview-provider.ts"], ["../../../packages/extension/src/activity_bar_module/git-context.ts"]doneOpening a resolved idea / file link must not await git focus history or idea-at-revision parsing. Host posts index-backed context ( scope, references, graph, ancestors ) first; [current_context_scope.git_history_lens] enrichment runs asynchronously afterward and may re-post context when ready. Light git chrome ( branch / dirty from the VS Code git API ) may ride along with the first paint; `git log -L`, `git show` + Langium parse-at-revision, and focus stats must not block open or the first context post. Implemented by ["../../../packages/extension/src/activity_bar_module/activity-bar-webview-provider.ts"] and ["../../../packages/extension/src/activity_bar_module/git-context.ts"].0.059
link_open_interactive_quiet["../../../packages/extension/src/activity_bar_module/activity-bar-webview-provider.ts"]doneProgrammatic and editor file-switch navigation share the interactive quiet path with webview `openIdea`: cancel in-flight search / refresh and briefly suppress editor-driven pane rebuilds so the open settles before context rebuild. Selection moves within the same document keep the short debounce only ( no full interactive cancel ). Document-link / go-to-definition opens that change the active file are covered by active-editor-switch quieting. Implemented by ["../../../packages/extension/src/activity_bar_module/activity-bar-webview-provider.ts"].0.045
loading_state["../../../packages/extension/webviews/activity-bar/App.svelte"], ["../../../packages/extension/webviews/activity-bar/state/app.svelte.ts"], ["../../../packages/extension/webviews/activity-bar/components/BootstrapStatus.svelte"], ["../../../packages/extension/src/activity_bar_module/activity-bar-webview-provider.ts"], ["../../../packages/extension/src/activity_bar_module/get-activity-bar-html.ts"], ["../../../packages/extension/test/startup-gate.test.ts"]doneAfter the activity bar shell mounts, the header may appear before pane data. Cover every sequencing beat with an explicit loading or error affordance — never a blank content area: 1. HTML shell ( before Svelte boots ): inline waiting markup in [get_activity_bar_html]. 2. Connecting: header visible; a post-first-frame `ready` handshake starts the index and requests the first host state. 3. Waiting for index: [workspace_panel.workspace_loading]. 4. Ready panes: [current_context_scope.context_panes_loading], [minigraph.minigraph_loading], and [search_panel.search_progress]. Index sync progress belongs in [workspace_panel.workspace_pane]; graph slice waits stay in [miniature_graph_pane]; idea-search phases stay in [search_panel.search_pane] — not a second global overlay. Host posts index health on `ready` and on subsequent status changes; soft-waits when the index is not ready instead of erroring the whole bar. Pane shells stay mounted through these phases per [activity_bar_styling]; only content / bootstrap banner reflect invalid or loading states. True error states ( status line + bootstrap banner ) must show the error prominently per [error_status_bar].0.063
panel_content_styling["../../../packages/extension/test/group-file-issues.test.ts"], ["../../../packages/extension/webviews/activity-bar/components/NestedSection.svelte"], ["../../../packages/extension/webviews/activity-bar/components/WorkspacePane.svelte"], ["../../../packages/extension/webviews/activity-bar/components/ScopePane.svelte"], ["../../../packages/extension/webviews/activity-bar/components/ReferenceListsPane.svelte"]donePane bodies must not grow unbounded. Nested lists use [NestedSection] ( collapse + scroll ) under [CollapsiblePane]. Shell resize / fill / scroll behaviour: [activity_bar_styling]. Details: [workspace_panel.workspace_content_styling], [current_context_scope.context_content_styling]. [WorkspacePane] [ScopePane] [ReferenceListsPane]0.047
performance["../../../packages/extension/test/startup-gate.test.ts"], ["../../../packages/analytical/src/index-store/workspace-index.ts"], ["../../../crates/reqlan-search/tests/fuzzy.rs"], ["../../../packages/extension/test/git-context.test.ts"]doneSidebar webviews share the same constraints as [graph_lib.webview_threading]. - The HTML / Svelte shell paints before index discovery begins; the post-paint `ready` handshake starts indexing. - Require the host-matching core engine at activate; do not embed a sql. js vendor in the activation-critical host bundle. - Default neighbourhood slices; never load the full workspace graph into a pane. - Debounce editor selection and cursor events before rebuilding slices. - Lazy-mount cytoscape only for visible sub-panes; destroy when collapsed or hidden. - Reuse [indexer.local_graph_analysis] and graph query builders rather than ad-hoc index walks in the webview. - Interactive actions ( `openIdea`, insert ref, add to chat, phonebook / Ideas Summary links ) are handled on a priority path: they cancel in-flight search / refresh work and briefly quiet editor-driven rebuilds so subsequent clicks stay snappy. - Idea search scoring runs in a worker thread with a preloaded catalog; catalog load yields so it cannot monopolize the host. - Link navigation must stay snappy once a target is already resolved: [link_open_decoupled_from_git], [link_open_interactive_quiet], [lean_resolved_open], [git_focus_cache_by_head].0.040
context_model_layers["../../../packages/extension/src/activity_bar_module/lib/context-model.ts"], ["../../../packages/extension/src/activity_bar_module/lib/context-signals.ts"]doneCanonical v2 layers. Implementation builds on [context_scope_v1.reqlan_context_model]; consumers must not reconstruct project understanding independently.0.045
context_scope_v2["../../../packages/extension/src/activity_bar_module/lib/context-signals.ts"], ["../../../packages/extension/test/context-model.test.ts"], ["../../../packages/extension/test/context-widgets.test.ts"]in-progresscontext, ui, knowledge, v2Evolves [context_scope_v1.context_scope] from a **source-oriented** model ( " where did this context come from? " ) to a **decision-oriented** model ( " what information helps a human or AI make the next decision? " ). v1 [context_scope_v1.context_dimensions] remain valid *producers* ( workspace, current file, open files, file history, edit history, manual, git ). v2 separates those producers from extracted signals, synthesized knowledge, presentation views, and consumers — so new analyses can be added without inventing new dimensions each time. Primary UI principle: [ui.show_dont_tell] — make project health, momentum, relationships, and intent legible at a glance. Host fact chips ( " 17 modified files " ) remain useful; widgets below are the preferred default for conveying meaning. Surfaces: extend [activitybar.scope_pane] / [context_scope_v1.scope_pane_design], Ideas Summary ( [ideas_summary_doc.ideas_summary] ), and graph overlays ( [graphical_graph_doc.graphical_graph] ) — same signals, different projections.0.089
context_signals["../../../packages/extension/src/activity_bar_module/lib/context-signals.ts"], ["../../../packages/extension/test/context-model.test.ts"]doneExtracted facts. Answer: " What useful information exists? " One source may emit many signals ( e. g. git → development history, not only staged / unstaged ). Families: - [requirement_signals] - [file_signals] - [development_history_signals] - [project_activity_signals] - [semantic_signals] - [quality_signals] - [user_signals] - [relationship_signals] - [temporal_signals] - [risk_signals] - [architecture_signals] - [requirement_lifecycle_signals] - [base_signals] Signals are evidence; [synthesized_context] merges them into actionable knowledge.0.060
show_dont_tell["../../../packages/extension/webviews/activity-bar/components/widgets"], ["../../../packages/extension/test/context-widgets.test.ts"]in-progressui, widgets, show-dont-tellMake project state **legible at a glance**. Prefer visual evidence of health, momentum, relationships, and intent over numeric fact lists. Widgets below are show-don ' t-tell components for [context_scope_v2]; each consumes [context_signals] / [synthesized_context] and may appear in activity bar, Ideas Summary, focus heroes, search results, or graph overlays. Placement guidance: - Focus / card density: [timeline_ribbon], [churn_heat_bar], [dependency_pulse], [stability_meter], [change_velocity], [requirement_lifecycle_wheel], [requirement_card], [confidence_card], [ai_readiness_gauge] - Workspace chrome / dashboard denser: [activity_river], [project_weather], [context_fingerprint], [architectural_map] - Graph / Ideas Summary: [hotspot_overlay], [impact_radius], [activity_constellation], [historical_replay_slider], [relationship_cloud] - Coverage / ownership / density: [knowledge_coverage], [traceability_matrix], [ownership_distribution], [concept_density], [context_radar], [semantic_diff_viewer]0.051
synthesized_context["../../../packages/extension/src/activity_bar_module/lib/context-signals.ts"], ["../../../packages/extension/test/context-model.test.ts"]doneSignals merged into decision-oriented knowledge not tied to a single source. Example projection on a requirement: - Importance, Confidence, Stability, Recent Activity - Dependencies, Implementations, Tests, Documentation - AI Risk Synthesis powers [show_dont_tell] widgets and [features_ai.ai_integration] exports — preference for compact synthesized facts over raw dimension dumps ( [context_scope_v1.ai_context_export] ).0.082
dimension_hop_control["../../../packages/extension/webviews/activity-bar/components/ScopePane.svelte"], ["../../../packages/extension/src/activity_bar_module/context-session.ts"]When 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
reqlan_context_model["../../../packages/analytical/src/index-store/webview-graph-queries.ts"], ["../../../packages/extension/src/activity_bar_module/context-model.ts"]Canonical 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
move_file["../../../packages/language/test/file-path-rewrite.test.ts:updates paths when a file moves to a sibling directory"], ["../../../packages/language/test/file-path-rewrite.test.ts:finds import and embedded paths in rq files"], ["../../../packages/language/test/file-path-rewrite.test.ts:finds rq comment paths in code files"]if a file is moved, a prompt should be shown to the user to update any references in the file to the new path. if multiple files are moved there should be only one prompt. the trigger should only happen if the reqlan file has inbound or outbound references, or the non-reqlan file has inbound reqlan references. " reqlan wants to make refactoring changes to your codebase. Do you approve? " " yes ", " no ", " view changes " See also ["./refactor_support.rq".refactor_file_moves]. Implemented by ["../../../packages/extension/src/mutation_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_file["../../../packages/language/test/file-path-rewrite.test.ts:updates inbound import path when the target file moves"], ["../../../packages/language/test/file-path-rewrite.test.ts:updates a folder reference when the folder is renamed"], ["../../../packages/extension/test/expand-renamed-paths.test.ts:pairs each file under a renamed folder with its old path"], ["../../../packages/extension/test/pending-rename-paths.test.ts:suppresses watcher delete of the pre-move file until cleared"]this 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
comment_reference_refactor_support["../../../packages/language/test/file-path-rewrite.test.ts:rewrites inbound comment paths when the target rq file moves"], ["../../../packages/language/test/file-path-rewrite.test.ts:finds comment paths in moved rq files together with imports"], ["../../../packages/language/test/idea-refactor.test.ts:move plan rewrites qualified comment paths for the moved idea"], ["../../../packages/language/test/idea-refactor.test.ts:delete plan removes matching comment references"], ["../../../packages/extension/test/collect-inbound-referencers.test.ts:includes comment_link target files when an rq file moves"], ["../../../packages/language/test/comment-rename.test.ts:builds rename edits for matching comment idea tokens"]doneFile and symbol refactors must update [comment_reference] tokens in code files and in `.rq` comments. When a file or folder moves or is renamed, rewrite `rq:["path".idea]` paths relative to the referencing file: outbound paths inside the moved file, and inbound paths in other files that pointed at it. Aliased paths such as `rq:["@/old/file.rq".idea]` keep the alias and update the remainder. When an idea is renamed, update matching comment idea tokens. When an idea moves to another `.rq` file, rewrite qualified comment paths that targeted the old file for that idea. Pathless `rq:[idea]` tokens stay as name-only links. When an idea is deleted, remove comment references that targeted it. Relates to [refactor_file_moves], [refactor_symbol_rename], [refactor_symbol_move], [refactor_symbol_delete], [refactor_changes], ["./mutation-hooks.rq".move_file], ["./mutation-hooks.rq".rename_file], ["../language/comment-references/functional-code-comment-references.rq".references_in_functional_code_comments].0.215
refactor_file_moves["../../../packages/language/test/file-path-rewrite.test.ts:updates inbound import path when the target file moves"], ["../../../packages/language/test/file-path-rewrite.test.ts:preserves extensionless inbound paths"], ["../../../packages/language/test/file-path-rewrite.test.ts:buildInboundPathRewriteEdits quotes replacement paths"], ["../../../packages/language/test/file-path-rewrite.test.ts:updates paths when a file moves to a sibling directory"], ["../../../packages/language/test/file-path-rewrite.test.ts:finds comment paths in moved rq files together with imports"], ["../../../packages/language/test/file-path-rewrite.test.ts:updates a folder reference when the folder is renamed"], ["../../../packages/language/test/file-path-rewrite.test.ts:updates an aliased path when the target folder is renamed"], ["../../../packages/extension/test/collect-inbound-referencers.test.ts:includes comment_link target files when an rq file moves"], ["../../../packages/extension/test/expand-renamed-paths.test.ts:pairs each file under a renamed folder with its old path"], ["../../../packages/extension/test/pending-rename-paths.test.ts:suppresses watcher delete of the pre-move file until cleared"], ["../../../packages/extension/test/pending-rename-paths.test.ts:suppresses deletes under a renamed folder"]The 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_delete["../../../packages/language/test/idea-refactor.test.ts:delete plan removes declaration and bracket references"], ["../../../packages/language/test/idea-refactor.test.ts:delete plan removes matching comment references"], ["../../../crates/reqlan-lsp/tests/code_actions.rs:offers_move_and_delete_actions_at_an_idea_declaration"]An idea declaration should offer a code action to delete it and update references. Deleting should remove the declaration, clear or rewrite AST and comment references that targeted it ( [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
refactor_symbol_move["../../../packages/language/test/idea-refactor.test.ts:move plan cuts from source and inserts into destination"], ["../../../packages/language/test/idea-refactor.test.ts:move plan rewrites qualified comment paths for the moved idea"], ["../../../packages/language/test/idea-refactor.test.ts:move plan removes unused source imports and copies them to destination"], ["../../../packages/language/test/idea-refactor.test.ts:move plan adds a sibling import on the destination"], ["../../../packages/language/test/idea-refactor.test.ts:move content plan leaves a source stub that imports the moved idea"], ["../../../packages/language/test/code-actions.test.ts:offers move and delete actions at an idea declaration"], ["../../../crates/reqlan-lsp/tests/code_actions.rs:offers_move_and_delete_actions_at_an_idea_declaration"], ["../../../packages/extension/test/extension-package.test.ts:package.json contributes move idea and move idea content commands"]doneAn idea can move to another existing `.rq` file from a code action or the [command_palette]. Palette commands use the idea under the cursor, or a pick list when the cursor is not on an idea. 1. Move idea ( `reqlan.refactor.moveIdea` ) - Cut the declaration from the source file. - Insert it into the destination file. - Remove source imports that the move makes unused. - Add the imports that the moved idea needs to the destination. - If the source file still refers to the idea, import it from the destination. - Rewrite comment references per [comment_reference_refactor_support]. - Reindex without duplicate idea rows for the old hosting file. 2. Move idea content ( `reqlan.refactor.moveIdeaContent` ) - Do the same as ( 1 ). - Always import the destination file in the source. - Leave a one-liner stub in the source: `idea_name [alias.idea_name]`. Do not overlap [decompose]: decompose writes a new file. Move and decompose share the resolve-plan-apply sequence in ["../../../packages/extension/src/mutation_module/refactor/idea-extract-flow.ts"]. [refactor_support] [refactor_changes]0.106
refactor_symbol_rename["../../../crates/reqlan-lsp/tests/session.rs:completion_rename_and_code_action"], ["../../../crates/reqlan-lsp/tests/session.rs:attribute_catalog_completion_and_find_references"], ["../../../packages/language/test/rename-provider.test.ts:rename updates declaration and wikilink references"], ["../../../packages/language/test/rename-provider.test.ts:rename also updates rq comment idea tokens in the same document"], ["../../../packages/language/test/comment-rename.test.ts:builds rename edits for matching comment idea tokens"], ["../../../packages/language/test/linking.test.ts:rename finds all idea references including wikilinks"]doneSyntactic symbols ( ideas, ideasets, import aliases, and import paths ) should be renamable via the editor rename action ( F2 / LSP rename ). Rename should update AST references across. rq files and matching `rq:["path".idea]` comment idea tokens in source files ( [comment_reference_refactor_support] ). The Rust server renames open buffers, open comment buffers, and closed files reached via the ideas index. Non- `.rq` comment rename stays on the host provider until Rust owns those buffers. [refactor_support] Implemented by ["../../../crates/reqlan-lsp/src/session.rs"], ["../../../packages/language/src/reqlan-rename-provider.ts"], ["../../../packages/language/src/reqlan-comment-rename.ts"], ["../../../packages/language/src/reqlan-name-provider.ts"], and ["../../../packages/extension/src/mutation_module/refactor/register-comment-rename-provider.ts"].0.084
graph_label_auto["../../../packages/extension/test/graph-label-opacity.test.ts"], ["../../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"]doneIn Labels auto mode, visibility follows viewport zoom continuously rather than a hard cut. ( fade ) Below a low zoom threshold labels are fully hidden; above a slightly higher threshold they are fully opaque; between those thresholds opacity ramps briefly through a muted / semi-transparent phase ( GRAPH_LABEL_FADE_START → GRAPH_LABEL_FADE_END ). Labels start fully invisible during graph initialisation and layout settling so text paint does not lag those phases; zoom fade only applies once settle / reframe has finished. Hovered or dragged nodes remain fully opaque even when ambient auto opacity is low or zero. Zoom and Fit from [view_controls] / [reframe_view] must update this opacity on each paint or zoom event. Applies to Ideas Summary GraphCyController and HTML export canvas graph alike.0.184
graph_label_modes["../../../packages/extension/test/graph-ui-state.test.ts"], ["../../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"]doneEvery interactive graph should provide a Labels control that cycles auto ( default ), on, and off without changing graph membership. On forces full opacity; off hides all labels; auto follows [graph_label_auto]. Reset / default restore auto. Ideas Summary: control in ["../../../packages/extension/webviews/ideas-summary/components/GraphControls.svelte"], mode persisted via ["../workspace-summary/ideas_summary/graphical_graph.rq".graph_ui_persistence]. HTML export: control in ["../../../crates/reqlan-export/src/html_template/mod.rs"] / ["../../../crates/reqlan-export/assets/app.js"]. Driven by the same viewport zoom as [view_controls].0.148
graph_status_tag_filters["../../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"], ["../../../packages/extension/webviews/shared/filter/filter-specials.ts"]doneStatus and tag graph filters are searchable checkbox dropdowns ( still a dropdown trigger; multi-select via checkboxes; OR within each field ). They must distinguish attribute absence from an empty declaration and from a literal unspecified value: - Not present — attribute key absent ( no `@status` / no `@tags` ) - Empty — attribute declared with no value ( `@status`, `@tags`, `@status ""`, bare flag ) - unspecified — literal authored value " unspecified " Do not invent unspecified for missing attributes in rollups, clusters, or filter options. Special options render differently from concrete values ( italic muted Not present; info-tint Empty; warning-tint unspecified ). Shared helpers live in ["../../../packages/analytical/src/core/filter-specials.ts"]. Surfaces: Ideas Summary SearchableCheckboxDropdown; HTML export SCD in ["../../../crates/reqlan-export/assets/app.js"].0.134
file_treatment_toggle["../../../../packages/extension/webviews/shared/graph/file-treatment.ts"], ["../../../../packages/extension/test/graph-ui-state.test.ts"], ["../../../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"]doneToolbar dropdown selects how hosting `.rq` files ( implicit ideasets ) appear in the graph — distinct from explicit AST `ideaset` declarations and from external `file:` reference nodes. Options ( with info tooltips / help text ): - invisible / Hidden — no file containers or file leaf nodes; ideas float free - compound — one compound parent per hosting file ( basename label ); nests under folder / tag compounds when Controls → Compound is also on. Containers are draggable ( members move with the box; live physics pins descendants while dragging ). Clicking the title opens the file; double-click also opens. - linked / Linked nodes ( default ) — synthetic ideaset-styled leaf per hosting file ( `rq-file:…` ) with `ideaset_member` edges to ideas in that file; click / dbl-click opens the hosting file like other nodes. Client reshape via `applyFileTreatment` in ["../../../../packages/extension/webviews/shared/graph/file-treatment.ts"]; no re-query on mode flip. Ideas Summary: `FileTreatmentSelect` on GraphControls; persisted as `fileTreatment` in [graph_ui_persistence]. HTML export: same three options via a select; compound boxes are hittable / draggable with clickable titles; linked nodes carry `pageUrl` / `hostFilePageUrl` for navigation. Related: [graphical_graph], [ui_controls], [webview_export_graph_parity], ["../../../ontology.rq".file], ["../../../ontology.rq".ideaset], [html_export_graph_page].0.170
webview_export_graph_parity["../../../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"], ["../../../../crates/reqlan-export/tests/html_export.rs:workspace_graph_includes_every_idea_when_max_graph_nodes_is_below_count"], ["../../../../packages/extension/webviews/shared/graph/file-treatment.ts"], ["../../../../crates/reqlan-index/tests/wildcard_reference_edges.rs:stores_wildcard_fan_out_as_wildcard_reference_kind"], ["../../../../crates/reqlan-index/tests/wildcard_reference_edges.rs:indexer_and_graphical_graph_rq_capture_wildcard_edge_and_toggle_ideas"], ["../../../../crates/reqlan-export/tests/html_export.rs:html_export_workspace_graph_includes_wildcard_refs_chip_and_edges"]doneInteractive graph behaviour that authors rely on in Ideas Summary must have a matching affordance on the HTML export workspace graph ( [html_export_graph_page] ) unless a requirement explicitly scopes it to one host. Shared today: Labels auto / on / off, live physics, Fit, status / tag filters, path / search filters, hide external files, hide ideasets ( explicit AST ), [file_treatment_toggle] ( dropdown with the same three modes, compound drag / title-open, linked-node open ), and [wildcard_refs_toggle] ( default on; dotted wildcard edges ). Ideas Summary may still differ where the host model differs: Indirect refs rebuilds hop depth via `buildGraphViewSlice` ( export freezes neighbourhood at snapshot time — no Indirect chip ); Key / Controls panels and node-budget controls are webview-only; export uses client-side filters on the embedded graph JSON rather than re-querying the index; Ideas Summary uses cytoscape compound parents while export draws AABB compound boxes on canvas. When adding a new Ideas Summary graph chip or edge style, update [html_export_graph_page] ( or document an intentional exception here ) and keep labels / defaults aligned across surfaces. Related: [graphical_graph], [wildcard_refs_toggle], [file_treatment_toggle], [ui_controls], [graph_labels], [graph_label_modes], [graph_status_tag_filters].0.165
wildcard_refs_toggle["../../../../crates/reqlan-index/tests/wildcard_reference_edges.rs:stores_wildcard_fan_out_as_wildcard_reference_kind"], ["../../../../crates/reqlan-index/tests/wildcard_reference_edges.rs:indexer_and_graphical_graph_rq_capture_wildcard_edge_and_toggle_ideas"], ["../../../../crates/reqlan-index/tests/wildcard_reference_edges.rs"], ["../../../../crates/reqlan-index/tests/wildcard_reference_edges.rs:stores_wildcard_fan_out_as_wildcard_reference_kind"], ["../../../../crates/reqlan-export/tests/html_export.rs:html_export_workspace_graph_includes_wildcard_refs_chip_and_edges"], ["../../../../crates/reqlan-export/tests/html_export.rs:html_export_writes_ts_page_template_set_and_embeds_assets"], ["../../../../crates/reqlan-export/tests/html_export.rs:workspace_graph_includes_every_idea_when_max_graph_nodes_is_below_count"]doneToolbar chip " Wildcard refs " ( next to Indirect refs ) on GraphControls toggles `GraphViewQuery.includeWildcardRefs`. Default true — edges of kind `wildcard_reference` from the indexer fan-out stay visible ( ["../../../indexer/indexer.rq".wildcard_reference_edges] ). When false, `buildGraphViewSlice` omits those edges and does not expand neighbourhood through them ( `includeWildcardRefs!== false` normalisation in Ideas Summary host + analytical query ). Distinct from plain `references` and from the Indirect refs depth toggle; Key legend shows a dotted " Wildcard reference " row; cytoscape marks `edge[?isWildcard]` with `line-style: dotted`. Query field flows Ideas Summary loadGraph → `buildGraphViewSlice` in ["../../../../packages/analytical/src/index-store/webview-graph-queries.ts"]. HTML export workspace graph has the same chip ( client filter on embedded edges; dotted stroke ) per [webview_export_graph_parity] and [html_export_graph_page]. Related: ["../../../language/imports.rq".wildcard_references], ["../../../indexer/indexer.rq".wildcard_reference_edges], ["../../../indexer/indexer.rq".index], [graphical_graph], [ui_controls], [webview_export_graph_parity].0.308
bases_tab["../../../../packages/extension/test/bases-table-filter.test.ts"]doneTable of discovered [ontology.base] entries in the workspace ( label, path, ready, idea / edge / issue counts, state ). Selecting a row pins that base ( pointer swap ) per [ideas_summary_base.ideas_summary_base_scope]. Filterable / sortable / column options like other tables; data comes from index status, not a merged cross-base SQLite dump. Client-side search and column filters via [BasesTable] / bases-filter matcher.0.045
ideas_list["../../../../packages/analytical/test/idea-timeline.test.ts"], ["../../../../packages/analytical/test/idea-timeline.test.ts:upsert preserves analyser git dates and change count across reindex"], ["../../../../packages/analytical/test/idea-timeline.test.ts:listIdeaIdsMissingGitDates includes ideas missing change count"], ["../../../../packages/analytical/test/webview-table-queries.test.ts:orders by git date and change count columns"], ["../../../../packages/analytical/test/ideas-git-columns-perf.test.ts"], ["../../../../packages/extension/test/format-git-date.test.ts"], ["../../../../crates/reqlan-index/src/git_dates.rs"]doneideas, git, table- [IdeasTable] - filterable and sortable via [TableToolbar], [ColumnFilterRow], and [SortableTh] - column show / hide via [TableOptionsMenu] / [table_column_options] - wide tables scroll horizontally in a `.table-scroll` viewport ( columns keep min widths; no crush-to-fit ) - groupable by idea kind ( block / oneliner ) per [group_by_type] - other attributes shown as expandable chips per [ChipList] - clicking an attribute chip adds a column, filters to ideas with a non-null value for that attribute, and sorts by it ( combinable with other filters ) - references split into outbound and inbound chip columns with counts - clicking a reference chip filters ideas that share that edge ( combinable with other filters ) - block idea bodies shown in a scrollable cell per [IdeaBodyCell] - columns for [git_idea_timeline_analysis]: first committed, last modified, and change count - read from indexed `git_created_at` / `git_modified_at` / `git_change_count` only - empty cells until ["../../index-host/git-codelens.rq".git_dates_background_indexing] fills them; main table load never runs git [ideas_list_git_columns_performance] [ideas_list_git_date_format]0.079
ideas_list_git_columns_performance["../../../../packages/analytical/test/ideas-git-columns-perf.test.ts"], ["../../../../packages/analytical/test/ideas-git-columns-perf.test.ts:listIdeasPage reads indexed git columns without running the analyser"], ["../../../../packages/analytical/test/ideas-git-columns-perf.test.ts:indexed git page load stays interactive and under simulated git-per-row cost"], ["../../../../packages/analytical/test/ideas-git-columns-perf.test.ts:listIdeaIdsMissingGitDates stays fast on a large filled index"], ["../../../../packages/analytical/test/ideas-git-columns-perf.test.ts:git change-count sort page stays within absolute budget"]doneideas, git, performanceIdeas table pages that show [git_idea_timeline_analysis] columns must read indexed `git_created_at` / `git_modified_at` / `git_change_count` only — never invoke git or the `git_dates` analyser on the UI query path. At ~ 2 k ideas, a 50 - row page ( including sorts by git modified / change count ) must stay interactive: absolute budgets plus relative guards vs path sort and vs a simulated per-row git walk. Missing-id backlog queries for background fill must also stay fast once the index is filled. Implemented by ["../../../../packages/analytical/src/index-store/sqlite-store.ts"] ( `listIdeasPage`, `listIdeaIdsMissingGitDates` ). [ideas_list] [git_idea_timeline_analysis]0.050
ideas_list_git_date_format["../../../../packages/extension/test/format-git-date.test.ts"], ["../../../../packages/extension/test/format-git-date.test.ts:formats git %aI timestamps as YYYY-MM-DD"], ["../../../../packages/extension/test/format-git-date.test.ts:keeps authored calendar day (does not shift across timezone)"], ["../../../../packages/extension/test/format-git-date.test.ts:renders empty and invalid values as an em dash"], ["../../../../crates/reqlan-index/src/git_dates.rs"], ["../../../../crates/reqlan-index/src/git_dates.rs:parses_iso_author_dates_and_ignores_patch_noise"]doneideas, git, formattingFirst committed / last modified cells in [ideas_list] must display a stable `YYYY-MM-DD` authored calendar date from indexed git `%aI` timestamps ( not locale-dependent `toLocaleDateString`, and not raw ISO / patch junk ). Invalid, empty, or non-date values render as an em dash ( `—` ). The `git_dates` analyser must only persist ISO author-date lines so patch hunks never become stored " dates ". Implemented by ["../../../../packages/extension/webviews/ideas-summary/lib/format-git-date.ts"] and ["../../../../crates/reqlan-index/src/git_dates.rs"] ( `parseGitAuthorDates` ). [ideas_list] [git_idea_timeline_analysis]0.050
ideas_table_filters["../../../../packages/analytical/test/webview-table-queries.test.ts"]donethe ideas table should support text search, column sorting, and attribute-column filters driven by chip clicks. attribute filters require a non-null attribute value in sqlite json per [webview_table_queries] reference chip filters match outbound / inbound edges by target or source id per [webview_table_queries] chips are right-aligned so truncated labels keep the informative suffix visible. active attribute and reference filters appear as removable chips in the table toolbar. Also [table_column_filters], [table_column_options], and [group_by_type].0.040
table_column_filters["../../../../packages/analytical/test/webview-table-queries.test.ts"], ["../../../../packages/extension/test/bases-table-filter.test.ts"], ["../../../../packages/extension/test/table-column-filters-normalize.test.ts"]doneEvery data table supports a global search and a per-column filter row ( [ColumnFilterRow] ), matching the usability of [html_export.html_export_list_views]. Text / path / body columns use searchable inputs; closed sets ( idea kind, reference type, ideaset kind, base ready ) use select / multi-select from a fixed option list. Typed filter / search text must keep spaces through the host round-trip ( do not trim the echoed query — SQL matchers may trim only when building LIKE patterns ). Select filters must support deselect / clear back to " All " ( controlled select value + clear control for multi-select ). Column filters are applied in the ui-sql layer ( [webview_table_queries] ) together with existing chip filters. Table panels must bind AppState query / rows via Svelte 5 `$derived` ( not legacy `$:` ) so filtered results from the extension message listener re-render — same pattern as [graphical_graph_doc.graphical_graph] / GraphView. Bases table filters client-side in the webview; other tables round-trip search through [ideas_summary_panel].0.072
timeline_page["../../../../packages/analytical/test/idea-timeline.test.ts"], ["../../../../packages/analytical/test/idea-timeline.test.ts:listIdeaIdsMissingGitDates can filter or prefer a file"], ["../../../../packages/extension/test/git-dates-background.test.ts"], ["../../../../packages/extension/test/git-dates-background.test.ts:processes active-file priority ids before the global backlog"]donetimeline, ideas, gitTimeline tab shows the evolution of ideas for the active base — not raw file-index noise. Sources: - Git idea lifecycle from indexed `git_created_at` / `git_modified_at` ( created + last edited as separate events when they differ ) - Session idea reindex activity ( one event per idea persisted, with name / status / summary when available ) Missing git dates are filled by the silent background indexer ( ["../../../indexer/indexer.rq".git_dates] / ["../../index-host/git-codelens.rq".git_dates_background_indexing] ) — opening Timeline must not run git log on the UI path. Reindex must preserve existing git dates across upsert. Entries are reverse-chronological, filterable by source ( git / reindexed ), and clickable to open the idea. Each event surfaces idea-centric info: name, short summary, status, kind / tags, and path. Full live multi-commit git log browsing remains out of scope; this surfaces indexed idea history first.0.085
inbound_snapshot_events["../../packages/extension/test/inbound-snapshot-push.test.ts"], ["../../packages/language/test/inbound-snapshot-store.test.ts"], ["../../packages/analytical/test/workspace-index.test.ts:enqueueIndex notifies catalog when ready"]doneHost → LSP inbound snapshots are event-driven and incremental. Push only when the ideas index is ready ( catalog update, ready-edge, visible-editor change, or window focus ). While Syncing or not ready, do not push an empty batch that clears the language-server last-good map; set a deferred flag and flush on the next ready event. The language client often starts before the index — registration must ensure-open / defer, not skip forever. Each notification is a per-document merge for visible editors; URIs not in the batch stay as last-good until replaced or the document closes. After a single-file enqueue reaches ready, notify catalog so consumers get a ready-state event ( mid-sync catalog notifies alone are not enough ). Coalesce concurrent push work so catalog spam drains to one ready pass. Related: [unify_inbound_indexes], ["../extension/language/support/open-file-sequencing.rq".lazy_features_after_outbound], ["../extension/language/syntax/features-syntax-highlighting.rq".inbound_inlay_index_performance].0.133
single_sync_walk["../../crates/reqlan-index/tests/scan.rs:one_walk_returns_bases_rq_and_code_and_skips_ignored_dirs"], ["../../packages/extension/test/refresh-rediscovers-bases.test.ts:startup scan does not call findFiles"]doneOne native directory walk records base roots, `.rq` paths, and allowlisted code paths. The walk does not read file bodies. Startup, Refresh, and create-base each run that walk once. They do not call `findFiles` and they do not run a second native `syncWorkspace` walk. Soft sync indexes the path list and skips unchanged mtimes. Idle stale check stats paths already stored in SQLite. New files arrive from the file watcher. The language server does not walk. The extension sends the base roots after the scan. Overlapping callers share one in-flight scan. CLI and MCP `sync_workspace` uses the same walk ( one pass, stop at nested bases ). [index_cache_reuse] [sequencing.soft_sync] [sequencing.scan_limits]0.080
unify_inbound_indexes["../../crates/reqlan-index/src/queries.rs:inbound_for_file_returns_edges_targeting_ideas_in_file"], ["../../crates/reqlan-index/src/queries.rs:inbound_for_file_returns_file_reference_targeting_file"], ["../../packages/language/test/inbound-referencer-index-perf.test.ts:inlay referencers come from the pushed snapshot, not findAllReferences"], ["../../packages/analytical/test/inbound-file-referencers.test.ts"], ["../../packages/extension/test/inbound-snapshot-push.test.ts"]doneInlay hints and code lens must read inbound edges from [ideas_schema.edges_table], not Langium IndexManager. Query: edges whose `target_id` is an idea in the open file, plus `comment_link` / `file_reference` rows whose `target_file` matches that file. File-top CodeLens uses the `file_reference` subset ( ["../extension/language/syntax/features-syntax-highlighting.rq".file_inbound_code_lens] ). The extension host runs the query and pushes a snapshot to the language server. The language server does not open SQLite ( [consumers.extension_ui_consumers] ). Updates follow index sync independently of open-file parse ( ["../language/syntax.rq".open_file_reference_sequencing], [inbound_snapshot_events] ). Mutation hooks already use the same store. Share one graph. Related: [index_cache_reuse], ["../indexer/indexer.rq".local_symbolic_analysis], ["../extension/language/syntax/features-syntax-highlighting.rq".inbound_inlay_index_performance].0.213
diagnostics_sqlite["../../packages/analytical/test/index-diagnostics.test.ts"]donePer-base timing and index-issue store at `<base>/.reqlan/index-diagnostics.sqlite` ( [index_diagnostics_store] / [application_memory] ). Sibling of [ideas_schema.ideas_index_sqlite]; Clear & rebuild of the ideas index must not delete it. Authoritative schema lives in Rust ( [diagnostics_rust], `DIAGNOSTICS_SCHEMA_VERSION = 2` ). The TypeScript facade ( [diagnostics_store_ts] ) is thinner and focuses on timing rows. Related: [index_diagnostics_timing], [index_diagnostics], [index_diagnostics_metrics], [index_diagnostics_webview], [sidecars.sqlite_wal_sidecars], [consumers.diagnostics_consumers].0.210
index["../../crates/reqlan-index/tests/schema.rs:opens_at_schema_version_4"], ["../../crates/reqlan-index/tests/schema.rs:schema_v4_columns_round_trip_git_count_and_mtime"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:sync_persists_wildcard_reference_edges"], ["../../crates/reqlan-index/tests/extract_parity.rs:qualified_ideaset_member_reference_targets_leaf_idea_not_ideaset"], ["../../crates/reqlan-index/tests/broken_references.rs:sync_drops_stale_inline_code_file_refs_when_extract_version_changes"]The 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_code_files["../../crates/reqlan-index/tests/code_file_index.rs:indexes_comment_references_from_non_rq_files"], ["../../crates/reqlan-index/tests/code_file_index.rs:unqualified_comment_ref_matches_catalog_idea_name"], ["../../crates/reqlan-index/tests/code_file_index.rs:rq_reindex_restores_comment_links"], ["../../crates/reqlan-index/tests/code_file_index.rs:rq_reindex_relinks_code_files_only_when_idea_names_change"], ["../../crates/reqlan-index/tests/code_file_index.rs:index_one_file_drops_an_rqignored_rq_file"], ["../../crates/reqlan-index/tests/code_file_index.rs:skips_binary_comment_files_unless_rqignore_negation"], ["../../crates/reqlan-analytical/tests/file_context.rs:file_context_includes_indexed_comment_links"], ["../../crates/reqlan-analytical/tests/fuzzy_search.rs:workspace_index_fuzzy_search_includes_comment_code_files"]doneIndex non- `.rq` source files that contain [comment_reference] ( `rq:[idea]` / `rq:["path".idea]` ). The same directory scan records allowlisted text paths ( respecting `.rqignore`, [app_memory_doc.binary_ignore], [app_memory_doc.commentless_file_ignore], and nested child bases ). Content reads use that list. They are not a second directory walk. [app_memory_doc.text_prefix_skip] skips non-text before a full read. Binary files stay out unless a negation such as `!*.bin` opts them in. The walk cheap-filters on `rq:`, and persists matching files as documents plus `comment_link` edges. Edge shape: source = referenced idea, `target_file` = code file URI, kind `comment_link` ( no synthetic file ideas ). Reindex of a `.rq` file updates kept ideas in place, so their comment links stay. Deletion of a removed idea cascades to its links. Code documents are re-linked only when the set of idea names in that `.rq` file changes, because links resolve on names only. A body edit must not read the code files again. Watcher + idle stale check cover code documents as well as `.rq` files ( [triggers], [nonblocking_index] ). Consumers: [graph_analysers.file_related_requirements], ["../core_analysis/search.rq".file_search], ["../core_analysis/html_export.rq".html_export_code_reference_pages], Ideas Summary comment-reference rows, local graph ( idea → external file node ), ["../cli/click.rq".click_code_file]. See [index_comment_reference_inclusion], ["../ontology.rq".referenced_files].0.394
indexer_rust["../../crates/reqlan-index/tests/extract_parity.rs:indexes_scalar_list_block_and_flag_attribute_values"], ["../../crates/reqlan-index/tests/extract_parity.rs:qualified_ideaset_member_reference_targets_leaf_idea_not_ideaset"], ["../../crates/reqlan-index/tests/golden_corpus.rs:corpus_idea_names_match_langium_extract"], ["../../crates/reqlan-index/tests/schema.rs:opens_at_schema_version_4"], ["../../crates/reqlan-index/tests/sync.rs:soft_sync_skips_unchanged_mtime"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:expands_wildcard_refs_to_one_edge_per_matching_idea"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:sync_persists_wildcard_reference_edges"]in-progressThe [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
local_symbolic_analysis["../../crates/reqlan-index/tests/local_symbolic.rs:analyze_local_symbolic_returns_outbound_without_catalog"], ["../../crates/reqlan-index/tests/local_symbolic.rs:analyze_local_symbolic_ignores_catalog_candidates"], ["../../crates/reqlan-index/tests/local_symbolic.rs:analyze_local_symbolic_includes_same_file_inbound_backlinks"], ["../../crates/reqlan-index/tests/local_symbolic.rs:analyze_local_symbolic_source_offsets_are_utf8_bytes"], ["../../crates/reqlan-index/tests/golden_corpus.rs:qualified_reference_to_an_import_alias_is_not_a_missing_idea"], ["../../packages/analytical/test/load-native.test.ts:exposes analyzeLocalSymbolic on the engine when present"], ["../../packages/analytical/test/local-symbolic-references.test.ts"], ["../../packages/language/test/local-symbolic-links.test.ts:same-file idea links without DocumentBuilder / workspace link"], ["../../packages/language/test/local-symbolic-links.test.ts:idea underlines match syntax tokens after non-ASCII text"], ["../../packages/cli/test/local-symbolic.test.ts"], ["../../packages/extension/test/local-symbolic-context.test.ts"]doneOpen-file symbolic analysis must run in Rust on one file only. Input: file URI plus source text ( and optional import-root mappings ). Output: ideas in that file, import binding names in that file, outbound edges with UTF-8 source byte spans, and same-file inbound backlinks ( edges whose target is an idea declared in this file ). Import binding names let a qualified reference name an import alias ( ["../core_analysis/check.rq".check_qualified_missing_idea] ). LSP document-link and error underlines must convert those spans to UTF-16 ( ["../extension/language/syntax/features-syntax-highlighting.rq".reference_underline_syntax_align] ). Cross-file inbound still comes from SQLite via ["./cache-reuse.rq".unify_inbound_indexes]. Do not read SQLite. Do not walk other workspace documents. Do not load an idea catalog. The open-buffer model is ["../extension/language/support/open-file-sequencing.rq".ast_lifecycle]. The hot path parses this buffer once. It does not run this extract as a second parse. Import-target confirmation is a separate depth-1 parse ( ["../extension/language/support/open-file-sequencing.rq".outbound_one_hop] ). That parse is not this extract. The language server caches the open buffer by URI plus text fingerprint ( ["../extension/language/support/open-file-sequencing.rq".open_file_hot_path] ). Wildcard forms stay one `wildcard_reference` pattern edge ( unresolved ); sync still expands them later via [wildcard_reference_edges]. Flag: `ExtractOptions.local_symbolic` forces an empty candidate list. CLI: ["../cli/cli_package.rq".commands] `analyse --local-symbolic <file>`. Sidebar: ["../extension/local-context/activitybar-panels/current_context_scope.rq".reference_lists_pane] merges live same-file inbound / outbound with indexed refs ( [local_symbolic_sidebar] ). Related: ["../language/syntax.rq".open_file_reference_sequencing], [index], ["./cache-reuse.rq".unify_inbound_indexes].0.387
local_symbolic_sidebar["../../packages/extension/test/local-symbolic-context.test.ts"], ["../../packages/extension/test/context-model.test.ts"]doneThe activity bar reference lists and current-file scope must consume [local_symbolic_analysis] for the open buffer text so same-file inbound backlinks and outbound refs appear even when the SQLite index is stale or not ready. Merge live local rows with indexed `listReferencesForIdea` / hop-depth rows; dedupe by direction plus edge id ( and by idea id for scope idea chips ). Prefer the referencer name as the inbound label ( not the edge target label ).0.108
nonblocking_index[workspace_index_tests], ["../../packages/analytical/src/index-store/workspace-index.ts"], ["../../packages/analytical/test/workspace-index.test.ts:soft sync drops rqignored paths supplied by base discovery"], ["../../crates/reqlan-index/tests/sync.rs:soft_sync_skips_unchanged_mtime"], ["../../crates/reqlan-index/tests/sync.rs:hard_rebuild_reindexes_despite_mtime"]doneIndex sync must stay non-blocking for the host UI ( notably [activity_bar_doc.activity_bar] and [workspace_pane_doc.workspace_loading] ). Editor startup is gated by ["../extension/host/activation.rq".first_paint_startup]; discovering a base must not construct Langium services, which are initialized lazily on the first parse. While syncing, surface progress — state, processed / total, and the current file — in [workspace_pane_doc.workspace_pane] and [ideas_summary_doc.index_panel]. In-flight sync must be cancellable from those surfaces; cancel keeps already-indexed rows and returns the index to ready. Incremental behaviour ( see also [indexing_incrementality] ): - Single-file create / change / delete via watchers indexes only that file — never a full base walk. - Soft full sync ( `syncWorkspace` / Refresh ) skips parse + persist when the file's mtime matches the value stored on the documents row. - Hard refresh ( `clearAndRebuildIndex` / Clear & rebuild ) wipes the store and reindexes every file. - Every sync and stale check applies `.rqignore` to the paths it receives, the same as the base walk; the native single-file index also drops an ignored path. Thus base discovery cannot make the first sync index ignored files. Implemented by [workspace_index]; editor adapter [editor_index_adapter].0.372
wildcard_reference_edges["../../crates/reqlan-index/tests/wildcard_reference_edges.rs"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:expands_wildcard_refs_to_one_edge_per_matching_idea"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:emits_unresolved_edge_when_catalog_has_no_matches"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:stores_wildcard_fan_out_as_wildcard_reference_kind"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:extract_indexed_document_fans_out_edges_for_matching_catalog_ideas"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:sync_persists_wildcard_reference_edges"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:sync_persists_unresolved_wildcard_edge_when_catalog_has_no_matches"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:indexer_and_graphical_graph_rq_capture_wildcard_edge_and_toggle_ideas"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:stores_wildcard_fan_out_as_wildcard_reference_kind"], ["../../crates/reqlan-export/tests/html_export.rs:html_export_workspace_graph_includes_wildcard_refs_chip_and_edges"]doneNative extract ( `["../../crates/reqlan-index/src/extract.rs"]` ) expands each AST wildcard against the idea catalog ( `match_wildcard` / workspace candidate list ). Persist one edge of kind `wildcard_reference` per matching idea ( label = target idea name ); never emit plain `references` for wildcard forms. Zero matches → one unresolved edge of the same kind ( `isResolved: false`, label = pattern text ). Edge ids use `edgeId(source, 'wildcard_reference', targetOrUnresolvedKey)`. Sync walks sorted `.rq` files and grows the catalog as it goes, so a wildcard file is expanded against ideas already stored plus files earlier in that walk ( ["../../crates/reqlan-index/src/sync.rs"] ). Ancestor / reference-chain walks treat `wildcard_reference` like `references` ( ["../../packages/analytical/src/index-store/sqlite-store.ts"] ). Ideas Summary references table groups them under sub-idea with other idea-to-idea links; graph visibility is [ideas_summary_doc] / ["../extension/workspace-summary/ideas_summary/graphical_graph.rq".wildcard_refs_toggle]. Soft mtime sync skips unchanged files — after introducing this edge kind, reindex ( or touch ) `.rq` files that contain wildcards so stored rows leave any legacy `references` fan-out. Langium `idea-extractor` keeps the same kind for remaining TS extract paths. Open-file local extract ( [local_symbolic_analysis] ) does not expand wildcards against a catalog. Related: ["../language/imports.rq".wildcard_references], [index], [indexer_rust], ["../extension/workspace-summary/ideas_summary/graphical_graph.rq".wildcard_refs_toggle], [local_symbolic_analysis].0.353
idle_stale_check["../../packages/analytical/test/workspace-index.test.ts"], ["../../packages/analytical/test/sqlite-artifact-release.test.ts:BaseRegistry releaseArtifacts closes handles but keeps descriptors"]When 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
scan_limits["../../crates/reqlan-index/tests/scan.rs:depth_2_does_not_return_a_deeper_base_or_rq"], ["../../crates/reqlan-index/tests/scan.rs:entry_cap_stops_and_reports_truncation"], ["../../packages/analytical/test/scan-limits.test.ts:clamps depth and entries into the allowed range"], ["../../packages/analytical/test/scan-limits.test.ts:editor scan settings match defaults.json"], ["../../crates/reqlan-index/tests/sync.rs:default_rqignore_skips_node_modules"], ["../../packages/analytical/test/base-discovery.test.ts:skips target build trees"]doneThe workspace scan has two caps. There is no unlimited setting. Defaults and clamp bounds are the `scan` object in ["../../packages/analytical/src/core/defaults.json"]. `reqlan.scan.maxDepth` uses `defaultMaxDepth`, `minDepth`, and `maxDepthLimit` from that file. The workspace folder is depth 0. A directory deeper than the cap is not entered. `reqlan.scan.maxEntries` uses `defaultMaxEntries`, `minEntries`, and `maxEntriesLimit` from that file. The count is directories plus files visited. When a cap hits, the walk stops, keeps the partial result, and the editor shows a warning. It does not start another scan to finish. Refresh uses the same caps. CLI and MCP use the same defaults. Built-in ignore also skips `target/` so a Cargo tree does not consume the entry budget. [extension_startup_sequence] [cache_reuse.single_sync_walk]0.064
sqlite_wal_sidecars["../../packages/analytical/test/rqignore.test.ts:defaults ignore json, sqlite sidecars, and files without comments"], ["../../crates/reqlan-index/src/ignore.rs:default_rqignore_skips_files_without_comments_until_negated"]doneWhen a SQLite file opens in WAL mode, the engine may create sibling files next to the DB: - `ideas-index.sqlite-wal` / `ideas-index.sqlite-shm` / `ideas-index.sqlite-journal` - `index-diagnostics.sqlite-wal` / `-shm` / `-journal` - `click-sessions.sqlite-wal` / `-shm` / `-journal` These are true sidecars of the open database, not separate product stores. Index walks skip them through [rqignore] ( `*.sqlite-wal`, `*.sqlite-shm`, `*.sqlite-journal`, and the same suffixes on `.sqlite3`, `.db`, and `.db3` ). Seeded `.reqlan/.gitignore` must keep `*.sqlite*` artifacts out of VCS ( [base_initialisation_ignore], [ignore_rust] `default_gitignore_file_contents` ). [reqlan_directory_layout] [ideas_schema.schema_migrations]0.138
edges_table["../../packages/language/test/linking.test.ts:sqlite-schema quoted path reaches indexer ideas that are not from-imported"]Table `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_index_sqlite["../../crates/reqlan-index/tests/schema.rs:opens_at_schema_version_4"], ["../../crates/reqlan-index/tests/schema.rs:schema_v4_columns_round_trip_git_count_and_mtime"], ["../../packages/analytical/test/schema-v4-roundtrip.test.ts"]doneThe ideas graph for one [base_ownership] lives at `<base>/.reqlan/ideas-index.sqlite` under [application_memory]. Schema version is in ( `SCHEMA_VERSION` in [schema_ts] and [schema_rust] ). Runtime migrate runs in Rust ( [store_rust] ); TypeScript opens the store and calls native migrate ( [sqlite_store] ). Keep [schema_ts] aligned with [schema_rust]. Related: [index], [indexer_rust], [ownership], [sidecars.sqlite_wal_sidecars], [diagnostics_schema.diagnostics_sqlite], [consumers.index_consumers].0.226
schema_migrations["../../crates/reqlan-index/tests/schema.rs"], ["../../packages/analytical/test/schema-v4-roundtrip.test.ts"]Base 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
idea-leading-whitespacetrueBlock 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-patternstrueWhen 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
anonymous_imports_allowed["../../packages/language/test/linking.test.ts:resolve anonymous import in bracket reference without import statement"], ["../../packages/language/test/linking.test.ts:quoted-path qualified idea is not limited to from-import specifiers"], ["../../packages/language/test/linking.test.ts:quoted-path qualified idea is not limited to a qualified import of the same file"], ["../../packages/language/test/linking.test.ts:sqlite-schema quoted path reaches indexer ideas that are not from-imported"]doneA quoted path plus idea — for example `["../ontology.rq".attribute]` — opens that file as an ideaset. Every idea in the target file is in scope for that reference. A from-import or qualified import of the same path only binds the listed names for bare `[name]` references. It must not hide other ideas from a quoted-path reference.0.073
configuration_import_root_alias["../../packages/language/test/path-resolve.test.ts:resolves import-root alias against the workspace folder"], ["../../packages/language/test/path-resolve.test.ts:leaves non-aliased relative paths document-relative"], ["../../packages/language/test/path-resolve.test.ts:matchImportRootAlias requires alias then slash"], ["../../packages/language/test/path-resolve.test.ts:loads importRoots list from nearest base config"], ["../../packages/language/test/path-resolve.test.ts:resolves using config importRoots mapping"], ["../../packages/language/test/path-resolve.test.ts:rewrite leaves aliased paths unchanged"], ["../../packages/language/test/completion.test.ts:completes import-root alias paths"], ["../../packages/language/test/config.test.ts:multiple importRoots map aliases to different roots"], ["../../packages/language/test/config.test.ts:longest alias wins when mappings overlap"], ["../../packages/language/test/config.test.ts:aliased path uses relative root from applying config"], ["../../packages/language/test/config.test.ts:aliased path uses workspace folder when root is omitted"], ["../../crates/reqlan-parse/src/path.rs:match_import_root_alias_requires_alias_then_slash"], ["../../crates/reqlan-parse/src/path.rs:resolves_default_alias_against_workspace_folder"], ["../../crates/reqlan-index/src/path_resolve.rs:locate_aliased_file_ref_joins_workspace_root"], ["../../crates/reqlan-index/src/path_resolve.rs:locate_uses_import_roots_from_applying_config"], ["../../crates/reqlan-index/tests/broken_references.rs:check_accepts_import_root_alias_file_refs"], ["../../crates/reqlan-index/tests/broken_references.rs:check_honours_import_roots_from_applying_config"], ["../../crates/reqlan-lsp/tests/parity.rs:import_root_alias_file_refs_match_check"], ["../../crates/reqlan-lsp/tests/parity.rs:import_root_config_file_refs_match_check"], ["../../packages/language/test/comment-reference-resolution.test.ts:creates a document link for an import-root aliased comment reference"], ["../../crates/reqlan-index/src/comment.rs:resolves_aliased_qualified_comment_path"]An 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
idea_path_filter["../../packages/extension/test/wildcard-reference-open-search.test.ts"], ["../../packages/extension/test/wildcard-reference-open-search.test.ts:e2e: command args → seed → pathFilter gates search hits"]doneShared path-filter helper for [wildcard_references_webview] search seeding. Glob or substring match against workspace-relative path and file URI; leading `./` / `../` segments are stripped for relative filters; `**/` is implied when the filter has glob meta but is not already rooted with `**/`. Used only as a hard AND after fuzzy ranking — it never replaces the idea-name query.0.078
import_error_recovery["../../packages/language/test/parsing.test.ts:malformed from-as import keeps later ideas parseable"], ["../../packages/language/test/validating.test.ts:reports local diagnostic for from-as mistaken import"], ["../../packages/language/test/validating.test.ts:reports local diagnostic for unquoted from-import"]A 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_from["../../packages/language/test/parsing.test.ts:parses from-import example line inside an attribute block value"], ["../../packages/language/test/local-symbolic-links.test.ts:aliased from-import whose name contains the imported idea is one link"], ["../../crates/reqlan-parse/tests/parser.rs:from_import_records_each_token_span"], ["../../crates/reqlan-lsp/tests/parity.rs:from_import_tokens_link_independently"]From-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_namespace["../../packages/language/test/linking.test.ts:resolve namespace import references to files"], ["../../packages/language/test/linking.test.ts:namespace import bracket reference links only the alias name"], ["../../crates/reqlan-index/tests/golden_corpus.rs:qualified_reference_to_an_import_alias_is_not_a_missing_idea"], ["../../crates/reqlan-lsp/tests/parity.rs:golden_corpus_import_alias_is_not_an_unresolved_idea"]Namespace 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_tokenisation["../../packages/language/test/validating.test.ts:allows local idea when import uses an alias"], ["../../packages/language/test/validating.test.ts:allows local idea when qualified import uses an alias"], ["../../packages/language/test/validating.test.ts:reports duplicate when local idea shares unaliased import binding"], ["../../packages/language/test/linking.test.ts:import idea reference resolves to imported file when local idea shares name"]if 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
wildcard_references["../../packages/language/test/wildcard-references.test.ts"], ["../../packages/language/test/wildcard-references.test.ts:e2e: tokenize → parse → resolve → document link → definition → command args"], ["../../packages/language/test/wildcard-references.test.ts:e2e: ** path glob matches nested fixture files"], ["../../packages/language/test/wildcard-references.test.ts:e2e: imports.rq captures wildcard ideas with status and implementation"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:expands_wildcard_refs_to_one_edge_per_matching_idea"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:stores_wildcard_fan_out_as_wildcard_reference_kind"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:extract_indexed_document_fans_out_edges_for_matching_catalog_ideas"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:nested_path_glob_matches_catalog_ideas"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:imports_rq_extract_includes_webview_and_path_filter_ideas"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:indexer_and_graphical_graph_rq_capture_wildcard_edge_and_toggle_ideas"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:sync_persists_wildcard_reference_edges"], ["../../crates/reqlan-index/tests/wildcard_reference_edges.rs:stores_wildcard_fan_out_as_wildcard_reference_kind"]doneQualified path + idea-pattern references match multiple ideas across files. Surface forms: bracket `[…]` and wikilink `[[…]]` ( same `WildcardReference` target ). Path is a quoted string that may include shell-style globs ( `*`, `**`, `?` ) and `@/` import-root aliases ( [configuration_import_root_alias] ). Relative globs resolve against the defining document directory; `.` / `..` segments are collapsed before matching. Idea pattern is an unquoted `WILDCARD_NAME` that must contain at least one `*` or `?` Exact quoted-path plus idea stays ["./syntax.rq".reference_qualified]. Matching uses anchored globs ( not full JS regex ): path `*` is one segment, `**` crosses segments; idea `*` / `?` match within the idea name. Zero matches produce a warning diagnostic. One match also produces a warning — a wildcard is for many ideas; use a concrete ["./syntax.rq".reference_qualified] when only one idea matches ( ["../core_analysis/check.rq".check_wildcard_one] ). Path segment `/**/` must not be lexed as an empty block comment — see ["./syntax.rq".comments]. Lexer note: `ID` is a prefix of many wildcard names ( `import_` vs `import_*` ); the token builder sets `ID.LONGER_ALT = WILDCARD_NAME` so `import_*` is one token. Body prose `*` tokens are accepted via `WILDCARD_NAME` in PlainText so ordinary `*` characters still parse. Without that longer-alt, a live wildcard inside a block body can fail Idea recovery and leave later top-level ideas unindexed ( soft mtime sync will not rebuild until the `.rq` file changes ). Navigation does not emit N LocationLinks. A document-link click opens `reqlan.openWildcardReference` with `{ pathPattern, ideaPattern, fromUri }` ( see [wildcard_references_webview] ). Go-to-definition does not open that panel. Indexing fans out per ["../indexer/indexer.rq".wildcard_reference_edges] ( owned under ["../indexer/indexer.rq".index] ): native extract writes one `wildcard_reference` edge per catalog match; empty catalog / zero matches → one unresolved edge of that kind labeled with the pattern text. ["../core_analysis/check.rq".check] handles 0 - match and 1 - match fan-out through ["../core_analysis/check.rq".check_wildcard_zero] and ["../core_analysis/check.rq".check_wildcard_one] ( ["../core_analysis/check.rq".check_wildcard_sparse] ). Ideas Summary graph toggles those edges via ["../extension/workspace-summary/ideas_summary/graphical_graph.rq".wildcard_refs_toggle]. The server can answer `reqlan/wildcardReferenceAt`. Go-to-definition does not call it. Related: ["./syntax.rq".reference_embedding], ["./syntax.rq".reference_brackets], ["./syntax.rq".reference_wikilink], ["../indexer/indexer.rq".wildcard_reference_edges], ["../core_analysis/check.rq".check_wildcard_sparse], ["../core_analysis/check.rq".check_wildcard_zero], ["../core_analysis/check.rq".check_wildcard_one]. Illustrative forms ( fenced so this file does not embed live wildcards ):0.486
wildcard_references_webview["../../packages/extension/test/wildcard-reference-open-search.test.ts"], ["../../packages/extension/test/wildcard-reference-open-search.test.ts:e2e: buildWildcardMatchesPayload lists stats, ideas, and files"], ["../../packages/extension/test/wildcard-reference-open-search.test.ts:e2e: wildcardSearchSeed maps command args to focusIdeaSearch payload"], ["../../packages/extension/test/wildcard-reference-open-search.test.ts:e2e: command args → seed → pathFilter gates search hits"], ["../../packages/language/test/wildcard-references.test.ts:e2e: tokenize → parse → resolve → document link → definition → command args"], ["../../packages/language/test/textmate-wildcard-highlight.test.ts"], ["../../packages/language/test/semantic-tokens-wildcard.test.ts"]doneA click on the command document link for a [wildcard_references] target runs `reqlan.openWildcardReference` and opens a dedicated **wildcard matches** webview ( beside the editor ) that lists: - Stats: matching idea count, distinct file count, and @ status breakdown - Requirements: each matching idea with name, status, path, and summary ( click opens the idea ) - Files: each matching file with idea count ( click opens the file ) Secondary action **Open in Search** seeds the activity-bar ["../extension/local-context/activitybar-panels/search.rq".search_pane_seed] via `focusIdeaSearch` with: - `query`: idea pattern with glob meta softened for fuzzy search ( `import_*` → `import` ) - `pathFilter`: the path glob as a hard AND filter ( [idea_path_filter] ) Payload builder: `buildWildcardMatchesPayload` filters the index catalog by idea glob + path filter. Protocol for the matches panel is inline host ↔ webview ( `init` / `openIdea` / `openFile` / `openSearch` ). The document-link target is the command URI. Go-to-definition does not open the panel. Highlighting of the source reference must stay link-styled — see ["../extension/language/syntax/features-syntax.rq".syntax_highlighting] and ["../extension/language/syntax/features-syntax-highlighting.rq".wildcard_reference_highlighting].0.199
parse_budget_timeout["../../packages/language/test/parse-budget.test.ts:times out a hung parse worker with warning and error"], ["../../packages/language/test/parse-budget.test.ts:returns incomplete result when worker parse fails"], ["../../packages/language/test/parse-budget.test.ts:parses a normal file within budget"], ["../../packages/language/test/parse-budget.test.ts:parses small files on the calling thread without a worker"], ["../../packages/language/test/parse-budget.test.ts:escalates large files to the worker path"], ["../../packages/language/test/parse-budget.test.ts:forceWorker escalates a small file"], ["../../packages/language/test/ast-lifecycle.test.ts:incomplete parse stores an empty model"], ["../../crates/reqlan-parse/tests/parser.rs:times_out_hang_sentinel"]doneLexing, parsing, or a parse subprocess for a single `.rq` file must finish within `parseBudgetMs` from ["../../packages/analytical/src/core/defaults.json"]. If it cannot, do not hang the language server or block the rest of the workspace. Surface both a warning ( budget exceeded; semantic features may be incomplete ) and an error ( file left unloaded ) on that document, then continue with other files. Happy path stays in-process ( sync ) for typical file sizes so edits and workspace load stay fast. Killable worker enforcement is used when the input is large, a file previously hit the budget ( sticky escalate ), or a caller forces the worker path; sync throws still become the same incomplete result shape. The open buffer stores that result as an empty model plus diagnostics ( ["../extension/language/support/open-file-sequencing.rq".ast_lifecycle] ).0.197
closing_nested_curly_braces["../../packages/language/test/parsing.test.ts:allows escaped closing brace in body prose"], ["../../crates/reqlan-parse/tests/parser.rs:allows_escaped_closing_brace_in_body_prose"]if, for some reason, there is a prose block containing only closing curly braces, they should be escaped and allowed \ } like this.0.040
context_sensitive_lexer_scaling["../../packages/language/test/parsing.test.ts:parses a large import prelude without repeated full-document brace scans"], ["../../packages/language/test/parsing.test.ts:treats fenced TypeScript braces as opaque for surrounding structure"]doneContext-sensitive token classification for structural / prose braces and top-level import keywords must remain linear in document size. The lexer records brace-depth changes sparsely ( not per-character tables ) and looks them up in log time while tokenising, so workspace language-server initialization and editor re-lexes stay bounded. Code fences are skipped during the brace scan so example braces cannot inflate work or desync depth. Bounded work still assumes the lexer / parser *returns*; unbounded hangs are cut by ["./parser_lexer.rq".parse_budget_timeout].0.097
fencing_comments["../../packages/language/test/parsing.test.ts:parse syntax-edge-cases.rq"], ["../../packages/language/test/comment-in-string.test.ts:isInsideLineFence treats only complete same-line fences as fences"], ["../../packages/language/test/comment-in-string.test.ts:quoted //this line in block body is not a line comment"], ["../../packages/language/test/comment-in-string.test.ts:backticked //this line in block body is not a line comment"], ["../../packages/language/test/comment-in-string.test.ts:unclosed backtick then // is a line comment"], ["../../packages/language/test/comment-in-string.test.ts:unclosed quote then // is a line comment"], ["../../packages/language/test/references.test.ts:ignores // inside complete backtick fences when locating line comments"], ["../../packages/language/test/references.test.ts:findCommentSpansInText treats unclosed fences as comments and closed fences as prose"], ["../../packages/language/test/references.test.ts:findCommentSpansInText skips /* inside complete backtick fences"], ["../../packages/language/test/comment-in-string.test.ts:backticked @reqlan/* in block body is not a block comment"], ["../../packages/language/test/comment-span-align.test.ts:backticked @reqlan/* is not a block comment"], ["../../packages/language/test/langium-rust-parse-align.test.ts:fencing_comments"], ["../../crates/reqlan-parse/tests/lexer.rs:backticked_slash_star_is_not_a_comment"], ["../../crates/reqlan-parse/tests/lexer.rs:quoted_slash_slash_in_body_is_not_a_comment"], ["../../crates/reqlan-parse/tests/lexer.rs:backticked_slash_slash_in_body_is_not_a_comment"], ["../../crates/reqlan-parse/tests/lexer.rs:unclosed_backtick_then_slash_slash_is_a_comment"], ["../../crates/reqlan-parse/tests/lexer.rs:unclosed_quote_then_slash_slash_is_a_comment"], ["../../crates/reqlan-index/src/rq_ignore.rs:does_not_treat_marker_inside_backticks_as_a_directive"]doneA complete same-line fence keeps `//` and `/*` as prose, not comments. Closed double quotes: " / / this line " contains no comment. Closed backticks: `//this line` contains no comment. Closed backticks with a glob: `@reqlan/*` does not open a block comment. An unclosed backtick is not a fence, so this line ` An unclosed quote is not a fence, so as does " The Langium lexer, the Rust lexer, comment scanners, and TextMate must use this rule. Related: ["./syntax.rq".comments], ["./syntax.rq".inline_code], ["./syntax.rq".naked_strings_in_body], ["../core_analysis/rust_port.rq".comment_span_align].0.078
nested_curly_braces["../../packages/language/test/parsing.test.ts:keeps inline prose brace pairs as text"], ["../../packages/language/test/parsing.test.ts:keeps end-of-line matching prose braces as text"], ["../../packages/language/test/parsing.test.ts:parse thanks-for-installing template"], ["../../crates/reqlan-parse/tests/parser.rs:keeps_inline_prose_braces"], ["../../crates/reqlan-parse/tests/parser.rs:keeps_end_of_line_matching_prose_braces"], ["../../crates/reqlan-parse/tests/lexer.rs:prose_braces_stay_other"]if 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
attribute_forms["../../packages/language/test/parsing.test.ts:parses valued attributes without a colon"], ["../../packages/language/test/parsing.test.ts:still accepts optional colon before attribute values"], ["../../crates/reqlan-index/tests/extract_parity.rs:indexes_scalar_list_block_and_flag_attribute_values"], ["../../crates/reqlan-index/tests/extract_parity.rs:indexes_scalar_list_block_and_flag_attribute_values"]A 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_location["../../packages/language/test/parsing.test.ts:treats mid-line @ as body text and line-start @ as attribute"], ["../../packages/language/test/parsing.test.ts:backslash before @ at line start keeps it as body text"], ["../../crates/reqlan-parse/tests/lexer.rs:at_only_at_line_start"]Marked attributes must be at the start of a line. @ this_is_not_an_attribute0.049
attribute_namespacing["../../packages/language/test/linking.test.ts:resolves an idea attribute link to that attribute"], ["../../packages/language/test/linking.test.ts:reports a missing idea attribute and does not open another idea"], ["../../crates/reqlan-parse/tests/lexer.rs:bracket_attribute_link_lexes_a_dot_between_two_names"], ["../../crates/reqlan-parse/tests/parser.rs:parses_idea_attribute_link_as_qualified_names"], ["../../crates/reqlan-index/tests/extract_parity.rs:idea_attribute_reference_targets_owner_not_a_same_named_idea"], ["../../crates/reqlan-export/tests/html_export.rs:attribute_link_opens_the_attribute_on_the_idea_page"]doneA bracket link `[idea.attribute]` targets one attribute of that idea. The first name is the idea name. The second name is the attribute name. The grammar types that name as an attribute or an idea declaration. `[attribute_namespacing.example]` targets the `example` attribute of this idea. The form `[ideaset.member]` still targets an ideaset member. See [references_to_subidea]. The editor opens the attribute when the first name is an idea. The editor reports an error when that idea has no attribute with the second name. The link target is only that attribute on that idea. HTML export uses the same link form. The export link opens that attribute on the idea page. See [attribute_namespacing.example]. Related: [reference_brackets], [attribute_marker], ["../core_analysis/html_export.rq".html_export_internal_links].0.129
block_idea["../../crates/reqlan-index/tests/extract_parity.rs:block_idea_body_populates_summary_from_rich_text_parts"], ["../../crates/reqlan-index/tests/extract_parity.rs:block_idea_body_populates_summary_from_rich_text_parts"], ["../../crates/reqlan-parse/tests/parser.rs:parses_block_and_oneliner"], ["../../crates/reqlan-parse/tests/parser.rs:parses_same_line_blocks_without_swallowing_later_ideas"], ["../../packages/language/test/parsing.test.ts:same-line braces after a name parse as a block"], ["../../packages/language/test/textmate-idea-highlight.test.ts"]A 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_snippets["../../packages/language/test/parsing.test.ts:parse code snippet in block idea"], ["../../packages/language/test/parsing.test.ts:parse fenced code block in attribute value"], ["../../packages/language/test/parsing.test.ts:treats fenced rq example as opaque text"], ["../../packages/language/test/parsing.test.ts:treats fenced TypeScript braces as opaque for surrounding structure"], ["../../packages/language/test/parsing.test.ts:keeps later ideas after mid-line triple backticks"], ["../../packages/language/test/parsing.test.ts:parse rust_port.rq keeps ideas after comment_span_align fence prose"], ["../../packages/language/test/parsing.test.ts:parse mid-line triple backticks corpus without swallowing later ideas"], ["../../packages/language/test/references.test.ts:embedded file reference scan ignores fenced code blocks"], ["../../packages/language/test/references.test.ts:findCommentSpansInText does not treat mid-line ``` as a fence"], ["../../packages/language/test/langium-rust-parse-align.test.ts:fenced_file_example"], ["../../packages/language/test/langium-rust-parse-align.test.ts:mid_line_triple_backticks"], ["../../packages/language/test/comment-span-align.test.ts:mid-line triple backticks are not a fence"], ["../../packages/language/test/comment-span-align.test.ts:line-start triple backticks lex as CODE_FENCE and hide inner comments"], ["../../crates/reqlan-parse/tests/align.rs:fence_body_is_one_code_snippet_not_inner_refs"], ["../../crates/reqlan-parse/tests/align.rs:mid_line_triple_backticks_are_not_a_code_snippet"], ["../../crates/reqlan-parse/tests/lexer.rs:mid_line_triple_backticks_are_not_a_code_fence"], ["../../crates/reqlan-parse/tests/lexer.rs:line_start_triple_backticks_are_a_code_fence"], ["../../crates/reqlan-parse/tests/parser.rs:keeps_ideas_after_mid_line_triple_backticks"], ["../../crates/reqlan-index/tests/broken_references.rs:check_skips_file_refs_inside_inline_code_and_fences"], ["../../crates/reqlan-index/tests/golden_corpus.rs:opaque_file_examples_do_not_extract_inline_or_fenced_paths"], ["../../crates/reqlan-index/tests/golden_corpus.rs:mid_line_triple_backticks_keep_later_ideas"]Idea 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
comment_reference["../../crates/reqlan-index/src/comment.rs:ignores_rq_inside_strings"], ["../../crates/reqlan-index/src/comment.rs:ignores_rq_inside_rust_raw_strings"], ["../../crates/reqlan-index/src/comment.rs:click_rs_fixture_string_is_not_a_comment_ref"], ["../../crates/reqlan-index/src/comment.rs:still_finds_line_comment_after_a_raw_string"], ["../../packages/language/test/references.test.ts:skips rq tokens inside Rust raw strings"], ["../../packages/language/test/comment-reference-resolution.test.ts:creates a document link for an import-root aliased comment reference"], ["../../crates/reqlan-index/src/comment.rs:resolves_aliased_qualified_comment_path"]doneReqlan references may appear in line comments of arbitrary source files. Comment reference syntax is `rq:[idea]` or `rq:["path".idea]` ( quoted path, optional extra qualification ). Qualified paths use the same path forms as imports, including import-root aliases such as `@/` — ["imports.rq".configuration_import_root_alias], ["../extension/language/comment-references/functional-code-comment-references.rq".comment_reference_import_root_alias]. Discovery skips quoted strings, including Rust raw strings ( `r#"…"#`, `r##"…"##`, `br#"…"#` ), so `rq:[…]` text in a string is not a live comment. Editor language coverage is a blocklist, not an allowlist: ["../extension/language/comment-references/functional-code-comment-references.rq".comment_reference_language_blocklist]. Indexed as `comment_link` by ["../indexer/indexer.rq".index_code_files]. Unresolved targets: [comment_reference_resolution_error]. Indexer listing: ["../core_analysis/core.rq".test_references]. Refactors: ["../extension/mutation/refactor_support.rq".comment_reference_refactor_support].0.365
comment_reference_ignore["../../crates/reqlan-index/src/rq_ignore.rs"], ["../../crates/reqlan-index/tests/broken_references.rs:skips_idea_and_comment_refs_on_rq_ignore_error_lines"], ["../../packages/analytical/test/ignore-error.test.ts"], ["../../packages/analytical/test/load-native.test.ts:exposes findRqIgnoreErrorTargetLines on the engine when present"], ["../../packages/language/test/ignore-error.test.ts"], ["../../packages/cli/test/check.test.ts"]doneComment reference ignore syntax uses `//rq-ignore-error`. Comment reference ignore suppresses diagnostics on the immediately following line. The language server and the CLI use the same core scanner [rq_ignore].0.511
comment_reference_resolution_error["../../packages/language/test/comment-reference-resolution.test.ts"], ["../../packages/language/test/comment-reference-resolution.test.ts:reports an error when a comment reference file does not exist"], ["../../packages/language/test/comment-reference-resolution.test.ts:does not create a document link for a missing comment reference file"], ["../../packages/language/test/comment-reference-resolution.test.ts:creates a document link when the comment reference file and idea exist"], ["../../packages/language/test/comment-reference-resolution.test.ts:reports an error when the comment reference idea is missing from the file"], ["../../packages/language/test/comment-reference-resolution.test.ts:suppresses comment reference errors on the line after //rq-ignore-error"], ["../../packages/language/test/comment-reference-resolution.test.ts:reports a missing comment reference file in a loaded document"], ["../../packages/language/test/comment-reference-resolution.test.ts:reports a missing comment reference idea in a loaded file"], ["../../packages/language/test/comment-reference-resolution.test.ts:accepts a resolved comment reference in a loaded document"]doneIf a comment reference cannot be resolved, show it as an error diagnostic. Do not create a document link to a missing file ( that underline then raises a generic cannot-find-file editor error ). Related: [comment_reference], [comment_reference_ignore], ["../reference_types.rq".comment_reference], ["../extension/language/comment-references/functional-code-comment-references.rq".references_in_functional_code_comments].0.151
comments["../../packages/language/test/comment-in-string.test.ts"], ["../../packages/language/test/comment-in-string.test.ts:e2e: /**/ glob survives tokenize → parse in prose, naked quotes, and reference STRING"], ["../../packages/language/test/comment-in-string.test.ts:e2e: real block comments still hide body text"], ["../../packages/language/test/comment-in-string.test.ts:e2e: reference STRING with // tokenizes, parses, and keeps path text"], ["../../packages/language/test/references.test.ts:ignores // inside string literals when locating line comments"], ["../../packages/language/test/references.test.ts:ignores // inside complete backtick fences when locating line comments"], ["../../packages/language/test/references.test.ts:e2e: findCommentSpansInText skips empty /**/ glob segments"], ["../../packages/language/test/comment-span-align.test.ts:golden corpus C-style comment ranges match lexer, scanner, and TextMate"], ["../../packages/language/test/comment-in-string.test.ts:backticked @reqlan/* in block body is not a block comment"], ["../../packages/language/test/references.test.ts:findCommentSpansInText skips /* inside complete backtick fences"], ["../../packages/language/test/ignore-error.test.ts"], ["../../packages/language/test/wildcard-references.test.ts:e2e: ** path glob matches nested fixture files"], ["../../crates/reqlan-parse/tests/lexer.rs:url_slashes_are_not_line_comments"], ["../../crates/reqlan-parse/tests/lexer.rs:glob_star_star_is_not_a_block_comment"], ["../../crates/reqlan-parse/tests/lexer.rs:meta_line_comment_after_content_is_hidden"]doneLine comments use `//` through end of line ( hidden `SL_COMMENT` ). Block comments use `/* … */` and may span multiple lines ( hidden `ML_COMMENT` ). Meta comments on the same line after content are allowed ( `keep this // meta` ). Comments must not open inside a string / reference-string context: - Naked body quotes ( ["naked_strings_in_body"] ): a quoted slash-slash that is not a comment, quoted urls, `"../mod/**/*.rq"`. - Reference / import `STRING` paths ( `["…"]`, `from "…" import …` ) — the lexer consumes the whole quoted path as one `STRING`, so neither `//` nor `/*` inside the quotes starts a comment. Example: a file reference whose path text contains slash-slash, `["../extension/**/*.rq".*webview*]`. - URL / path-segment guard: `//` immediately after `:` or `/` is not a line comment. Same-line fences: ["./syntax-edge-cases.rq".fencing_comments] — complete `"…"`, `'…'`, and ` ` ` … ` ` ` spans keep ` Unclosed quote or backtick openers are not fences, so `//` after them is a comment. Comment-range identity across lexer, scanner, and TextMate: ["../core_analysis/rust_port.rq".comment_span_align]. Multiline / glob clash: the empty block form `/**/` is **not** a comment — it is the recursive glob segment used in paths such as `../mod/**/*.rq`. A real block comment needs a non-empty body ( `/* note */`, `/*\n note\n*/` ). The token builder rejects length-4 `/**/` matches; comment-span scanners skip the same sequence so embedded `rq:[…]` discovery stays aligned. Related: [comment_reference_ignore], [string_literals], ["./imports.rq".wildcard_references], ["../core_analysis/rust_port.rq".comment_span_align].0.145
empty_attribute["../../packages/language/test/parsing.test.ts:parses a lone @ without a parser error and keeps later ideas"], ["../../packages/language/test/parsing.test.ts:still reports a syntax error when another line is invalid"], ["../../packages/language/test/validating.test.ts:does not report an extension error for a lone @"], ["../../crates/reqlan-parse/tests/lexer.rs:lone_at_is_hidden_whitespace"], ["../../crates/reqlan-parse/tests/parser.rs:lone_at_keeps_surrounding_ideas"], ["../../crates/reqlan-parse/tests/parser.rs:syntax_error_elsewhere_is_still_reported"]A 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
file_layout["../../packages/language/test/parsing.test.ts:parse syntax.rq"], ["../../crates/reqlan-parse/tests/parser.rs:parse_syntax_rq"]incompleteA file begins with zero or more import statements, followed by top-level ideas and ideasets. The file forms an implicit ideaset; its name may default to the filename without the suffix. Front matter syntax is not yet specified.0.070
idea_name["../../packages/language/test/parsing.test.ts:parse dash and underscore delimited idea names"], ["../../crates/reqlan-parse/tests/parser.rs:parse_dash_and_underscore_delimited_idea_names"], ["../../packages/language/test/validating.test.ts:reports duplicate when local ideaset shares a local idea name"]Idea 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
inline_code["../../packages/language/test/references.test.ts:embedded file reference scan ignores inline code examples"], ["../../packages/language/test/comment-span-align.test.ts:backticked @reqlan/* is not a block comment"], ["../../packages/language/test/references.test.ts:embedded file reference scan ignores site showcase interlock inline example"], ["../../packages/language/test/ignore-error.test.ts:does not report file references inside inline code"], ["../../packages/language/test/parsing.test.ts:does not parse a backticked file-only line range as a bracket reference"], ["../../packages/language/test/langium-rust-parse-align.test.ts:inline_code_file_example"], ["../../packages/language/test/langium-rust-parse-align.test.ts:inline_code_file_only_line_range"], ["../../crates/reqlan-parse/tests/align.rs:inline_code_file_example_is_not_a_live_ref"], ["../../crates/reqlan-parse/tests/align.rs:inline_code_file_only_line_range_is_not_a_live_ref"], ["../../crates/reqlan-parse/tests/lexer.rs:backticked_bracketed_file_ref_is_one_inline_code_token"], ["../../crates/reqlan-index/tests/broken_references.rs:check_skips_file_refs_inside_inline_code_and_fences"], ["../../crates/reqlan-index/src/extract.rs:embedded_scan_skips_backticked_file_ref_with_line_range"], ["../../crates/reqlan-index/src/extract.rs:extract_skips_backticked_file_only_ref"], ["../../crates/reqlan-index/src/extract.rs:site_rq_does_not_index_backticked_interlock_path"], ["../../crates/reqlan-index/tests/broken_references.rs:sync_drops_stale_inline_code_file_refs_when_extract_version_changes"], ["../../crates/reqlan-index/tests/golden_corpus.rs:opaque_file_examples_do_not_extract_inline_or_fenced_paths"]doneSingle-backtick spans ( `…` ) are opaque `INLINE_CODE`. They may show example syntax such as a quoted path plus idea. The grammar does not parse bracket or file references inside the span. Check and the language server must not report those examples as unresolved ["../reference_types.rq".file_reference] or idea refs. Related: [code_snippets], ["../core_analysis/rust_port.rq".comment_span_align].0.165
lists["../../packages/language/test/parsing.test.ts:parse list items as one-liners and anonymous blocks"], ["../../packages/language/test/parsing.test.ts:keeps inline parentheses in body prose as text"], ["../../packages/language/test/parsing.test.ts:keeps later ideas after nested @slides lists with mid-line @plan braces"], ["../../packages/language/test/parsing.test.ts:parse tutorials.rq nested @slides lists without parser errors"], ["../../crates/reqlan-index/tests/golden_corpus.rs:tutorials_rq_keeps_ideas_after_nested_slides_lists"]Parenthesized 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
markdown_links["../../packages/language/test/parsing.test.ts:parse markdown links without treating label as a reference"], ["../../packages/language/test/parsing.test.ts:parse docs.rq markdown folder link"], ["../../packages/language/test/parsing.test.ts:markdown link labels are not treated as reference prefix context"], ["../../packages/language/test/references.test.ts:parses markdown link label and target from raw link text"], ["../../packages/language/test/references.test.ts:embedded file reference scan ignores markdown link labels"]doneMarkdown `[label](target)` links are supported; the label is not treated as an idea reference. Example: testing requirements and the golden corpus. Related: ["../development/core.rq".testing], ["../core_analysis/rust_port.rq".golden_corpus].0.055
naked_strings_in_body["../../packages/language/test/parsing.test.ts:keeps naked quoted phrases in block body text"], ["../../packages/language/test/parsing.test.ts:keeps naked quoted phrases in attribute scalar values"], ["../../packages/language/test/parsing.test.ts:keeps single-quoted naked phrases in block body text"], ["../../packages/language/test/parsing.test.ts:keeps naked quoted phrases in one-liner body after the idea name"], ["../../packages/language/test/parsing.test.ts:keeps naked quoted phrases in list items"], ["../../packages/language/test/parsing.test.ts:keeps naked quotes alongside bracket references on one line"], ["../../packages/language/test/parsing.test.ts:does not treat naked quoted path-like prose as an import reference"], ["../../packages/language/test/parsing.test.ts:does not parse unbracketed quoted paths as file references"], ["../../packages/language/test/parsing.test.ts:parses reframe requirement snippets with naked quoted UI labels"], ["../../packages/language/test/parsing.test.ts:parses self-contained ideas with apostrophe contractions in body prose"], ["../../packages/language/test/naked-strings.test.ts"], ["../../packages/language/test/comment-in-string.test.ts:single-quoted URL in block body is naked prose"], ["../../crates/reqlan-parse/tests/lexer.rs:unbracketed_quoted_path_in_body_is_not_string"], ["../../crates/reqlan-parse/tests/parser.rs:unbracketed_quoted_path_is_not_a_file_reference"]Quoted 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
no_name_idea_safe_warning["../../packages/language/test/parsing.test.ts:parses top-level nameless braces without aborting later ideas"], ["../../packages/language/test/parsing.test.ts:treats fenced TypeScript braces as opaque for surrounding structure"], ["../../packages/language/test/validating.test.ts:warns on top-level nameless braces without invalidating later ideas"], ["../../crates/reqlan-parse/tests/parser.rs:parses_top_level_nameless_braces_without_aborting_later_ideas"], ["../../crates/reqlan-parse/tests/parser.rs:recovers_nameless_block"]doneA top-level nameless curly-brace block — `{... }` with no idea name — must not take down the parser or the language server workspace. Parse the block as a recoverable anonymous top-level element, emit a descriptive warning that a name is required before `{`, and continue so later ideas, imports, and links still work. Nameless blocks inside parenthesized lists remain valid list items per [lists]; only top-level nameless blocks warn. Related recovery posture: ["./imports.rq".import_error_recovery]. Block shape: [block_idea]. Fenced examples must stay opaque per [code_snippets] so braces inside snippets cannot desync structural depth. Non-termination ( lex / parse never finishes ) is a different failure mode: ["./parser_lexer.rq".parse_budget_timeout].0.072
reference_file["../../packages/language/test/references.test.ts:parses L# line suffix from file reference strings"], ["../../packages/language/test/references.test.ts:parses :test name suffix from file reference strings"], ["../../packages/language/test/references.test.ts:keeps colons inside the test name suffix"], ["../../crates/reqlan-parse/src/path.rs:strips_test_name_and_line_suffix"], ["../../crates/reqlan-parse/src/path.rs:test_name_suffix_keeps_colons_in_the_title"], ["../../crates/reqlan-index/tests/broken_references.rs:check_strips_test_name_and_line_suffix_before_file_exists"], ["../../crates/reqlan-index/tests/broken_references.rs:check_accepts_test_names_that_contain_colons_from_nested_rq"], ["../../packages/language/test/linking.test.ts:document links resolve test file references to the matching test"], ["../../packages/language/test/path-resolve.test.ts:a climbing relative path resolves from an ancestor directory"], ["../../packages/language/test/path-resolve.test.ts:a file next to the document wins over an ancestor"]References 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_qualified["../../packages/language/test/linking.test.ts:resolve import path in qualified wikilink"], ["../../packages/language/test/linking.test.ts:quoted-path qualified idea is not limited to from-import specifiers"], ["../../packages/language/test/linking.test.ts:sqlite-schema quoted path reaches indexer ideas that are not from-imported"]Cross-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_resolution_order["../../packages/language/test/linking.test.ts:resolve forward reference to later idea in the same file"], ["../../packages/language/test/linking.test.ts:resolve forward reference to later ideaset in the same file"], ["../../packages/language/test/linking.test.ts:resolve local ideaset before imports"], ["../../crates/reqlan-index/tests/extract_parity.rs:same_file_forward_ideaset_reference_is_resolved"]doneFor each `.rq` file, identify the names in local scope, then resolve references. Sequence: 1. Collect all idea, one-liner, and ideaset declarations in the file. Declaration order does not change which names are in scope. 2. Collect reference candidates in the file. 3. Resolve each candidate against those local declarations. 4. Resolve imports only for candidates that have no local match. Stop import lookup for a candidate when a local match exists. The language server and the indexer must use this sequence. Open-file editor underlines follow [open_file_reference_sequencing]. Related: [same_file_reference], [ideaset], ["./imports.rq".import_tokenisation], ["../indexer/indexer.rq".local_symbolic_analysis].0.053
reference_url["../../packages/language/test/parsing.test.ts:parses bracketed url references"], ["../../packages/language/test/parsing.test.ts:does not parse unbracketed urls as url references"], ["../../packages/language/test/linking.test.ts:url references produce document links and no missing diagnostics"], ["../../crates/reqlan-parse/tests/lexer.rs:bracketed_url_is_one_url_token"], ["../../crates/reqlan-parse/tests/parser.rs:bracketed_url_is_a_url_reference"]doneA bracket reference may target an unquoted absolute URL ( `scheme://…` ). Example: `[https://reqlan.com/]`. The URL is one token; `://` is not a line comment. Unbracketed URLs in body prose stay text. Quoted remote paths stay [reference_file] ( `["https://example.com/file.ts"]` ). Index and check: ["../reference_types.rq".url_reference].0.137
reference_wikilink["../../packages/language/test/parsing.test.ts:keeps pipe characters in body prose as text"], ["../../packages/language/test/parsing.test.ts:parse extension context-scope.rq module"], ["../../packages/language/test/linking.test.ts:resolve wikilink to idea declaration in main.rq"]Double-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
references_to_subidea["../../packages/language/test/linking.test.ts:resolve ideaset-qualified bracket reference to member leaf not ideaset"], ["../../packages/language/test/linking.test.ts:resolve ideaset member forward reference"], ["../../crates/reqlan-index/tests/extract_parity.rs:qualified_ideaset_member_reference_targets_leaf_idea_not_ideaset"], ["../../crates/reqlan-index/tests/extract_parity.rs:qualified_namespace_import_reference_targets_leaf_in_imported_file"]doneIt is valid to reference a member of an [ideaset] as `[ideaset.member]`, for example [example_ideaset.subidea1]. The indexer must record that reference on the namespace leaf node. In this example the leaf is [subidea1], not [example_ideaset]. Related: [reference_brackets], [same_file_reference], ["../reference_types.rq".idea_reference], ["../indexer/indexer.rq".index].0.167
round_brackets["../../packages/language/test/parsing.test.ts:keeps inline parentheses in body prose as text"], ["../../packages/language/test/parsing.test.ts:keeps inline braces in body prose as text"], ["../../packages/language/test/parsing.test.ts:parse extension graph.rq library"]Round 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_reference["../../packages/language/test/linking.test.ts:resolve same-file bracket reference to local idea"], ["../../packages/language/test/linking.test.ts:resolve forward reference to later idea in the same file"], ["../../packages/language/test/linking.test.ts:resolve circular same-file references"], ["../../packages/language/test/linking.test.ts:resolve ideaset member forward reference"], ["../../packages/language/test/linking.test.ts:resolve forward reference to later ideaset in the same file"], ["../../packages/language/test/linking.test.ts:resolve local ideaset before imports"], ["../../crates/reqlan-index/tests/extract_parity.rs:same_file_forward_reference_is_resolved"], ["../../crates/reqlan-index/tests/extract_parity.rs:same_file_forward_ideaset_reference_is_resolved"][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_idea["../../packages/language/test/parsing.test.ts:parse name-only ideas without a body"], ["../../packages/language/test/parsing.test.ts:same-line braces after a name parse as a block"], ["../../crates/reqlan-index/tests/extract_parity.rs:one_liner_idea_body_populates_summary"], ["../../crates/reqlan-parse/tests/parser.rs:one_liner_body_does_not_continue_on_the_next_line"], ["../../crates/reqlan-parse/tests/parser.rs:parses_same_line_blocks_without_swallowing_later_ideas"]A 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_apostrophes["../../packages/language/test/references.test.ts:unquotes single-quoted reqlan string literals"], ["../../packages/language/test/parsing.test.ts:parse single-quoted import paths and idea names"]strings should use double or single apostrophes interchangeably and support backslash escapes.0.040
idea-leading-whitespace["../../crates/reqlan-parse/tests/parser.rs:relative_dedent_keeps_extra_spaces_on_a_later_body_line"], ["../../crates/reqlan-parse/tests/parser.rs:relative_dedent_uses_the_indent_of_a_first_body_line_that_is_not_at_column_0"], ["../../crates/reqlan-parse/tests/parser.rs:relative_dedent_keeps_an_extra_tab"], ["../../packages/language/test/parsing.test.ts:keeps extra indent on a later body line"], ["../../packages/language/test/parsing.test.ts:uses the first body line indent when that line is not at column 0"], ["../../packages/language/test/parsing.test.ts:keeps an extra tab on a later body line"]A 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
katz_centrality["../../crates/reqlan-search/tests/katz.rs:chain_ranks_the_cited_end_highest"], ["../../crates/reqlan-search/tests/katz.rs:graph_with_no_citation_edges_scores_every_idea_at_one"], ["../../crates/reqlan-search/tests/katz.rs:citation_edges_skip_unresolved_and_non_reference_kinds"]doneScore each idea by inbound Katz centrality on the citation graph. An idea scores higher when important ideas reference it. The score uses resolved reference edges and wildcard reference edges between ideas. The analysis package exposes the scores as `katzCentrality()`. The top score is 1. A graph with no citation edges gives every idea the score 1. Search can opt in through ["../core_analysis/search.rq".katz_search]. HTML export shows the score through ["../core_analysis/html_export.rq".html_export_katz_column].0.061
attribute["../packages/language/test/parsing.test.ts:parses valued attributes without a colon"], ["../packages/language/test/parsing.test.ts:treats mid-line @ as body text and line-start @ as attribute"], ["../crates/reqlan-index/tests/extract_parity.rs:indexes_scalar_list_block_and_flag_attribute_values"], ["../crates/reqlan-index/tests/extract_parity.rs:indexes_scalar_list_block_and_flag_attribute_values"]doneAttributes are classification, functional, or nonfunctional metadata. Syntax: ["./language/syntax.rq".attribute_marker], ["./language/syntax.rq".attribute_forms], ["./language/syntax.rq".attribute_values], ["./language/syntax.rq".attribute_location]. Policy: ["./language/attributes.rq".attribute_configuration]. Indexed on [analytical_types] `IdeaAttributeMap`; extract: [idea_extractor], [rust_extract]. Product surface: [ideas_summary_tabs] Attributes tab.0.070
attribute_body["../crates/reqlan-index/tests/extract_parity.rs:block_idea_body_populates_summary_from_rich_text_parts"], ["../crates/reqlan-index/tests/extract_parity.rs:block_idea_body_populates_summary_from_rich_text_parts"], ["../crates/reqlan-index/tests/extract_parity.rs:one_liner_idea_body_populates_summary"]doneThe first attribute in an idea, if not marked otherwise, is the main body attribute. It is unstructured text. Syntax: ["./language/syntax.rq".block_idea]; extract summary from that body: [idea_extractor], [rust_extract].0.054
base["../packages/analytical/test/base-discovery.test.ts:returns empty when no .reqlan exists"], ["../packages/analytical/test/base-discovery.test.ts:discovers base at workspace root"], ["../packages/analytical/test/application-memory.test.ts:defaults to <workspace>/.reqlan"]doneA base is a container for ideas, ideasets, and files — the boundary of one ideas graph. Discovery: a directory is a base only when it owns a `.reqlan` application-memory folder. There is no implicit base from a bare workspace folder; the product prompts the user to create `.reqlan` at the workspace-folder root when none exist. Bases may be nested: a child directory with its own `.reqlan` is a separate base; the parent base's index stops at that child boundary. Each base holds its own ideas index under its `.reqlan`. Details: ["./bases/base.rq".base].0.251
configuration["../packages/language/test/config.test.ts:returns undefined when no config exists"], ["../packages/language/test/config.test.ts:loads config from the owning base .reqlan"], ["../packages/language/test/path-resolve.test.ts:loads importRoots list from nearest base config"]doneThere are multiple scopes for configuration: at the [base] level and at the [extension] level. Base config: ["./extension/host/configuration.rq".configuration_location] ( `<base>/.reqlan/config.json` ). Base vs extension split: ["./bases/base.rq".base_configuration].0.040
file["../packages/language/test/parsing.test.ts:parse syntax.rq"], ["../crates/reqlan-parse/tests/parser.rs:parse_syntax_rq"]doneFiles store ideas and form ideasets. Documents use the `.rq` suffix ( ["./language/syntax.rq".file_suffix] ) and ["./language/syntax.rq".file_layout]. Indexed as ideaset kind `file` in [analytical_types].0.094
grammar_rule["../packages/language/test/parsing.test.ts:parse syntax.rq"], ["../crates/reqlan-parse/tests/parser.rs:parse_syntax_rq"], ["../crates/reqlan-index/tests/golden_corpus.rs:corpus_idea_names_match_langium_extract"]doneGrammar rules describe the syntax features. Requirements: ["./language/syntax.rq"]; lexer bridge: ["./language/parser_lexer.rq".lexer_bridge_to_syntax]. Langium: [reqlan_grammar]; comment grammar: [comment_grammar]; index-path AST: [rust_ast].0.040
idea["../packages/language/test/parsing.test.ts:parse ontology.rq ideas"], ["../packages/language/test/parsing.test.ts:parse one-liner ideas"], ["../crates/reqlan-index/tests/extract_parity.rs:block_idea_body_populates_summary_from_rich_text_parts"], ["../crates/reqlan-index/tests/extract_parity.rs:block_idea_body_populates_summary_from_rich_text_parts"], ["../crates/reqlan-index/tests/extract_parity.rs:one_liner_idea_body_populates_summary"]doneA reqlan core unit is an idea. Syntax: ["./language/syntax.rq".simple_idea], ["./language/syntax.rq".block_idea]. Grammar: [reqlan_grammar] `Idea` / `OneLinerIdea`; index records: [analytical_types] `IdeaRecord`. Extract: [idea_extractor], [rust_extract]; AST: [rust_ast]. Product surface: [ideas_summary_tabs] Ideas tab per ["./extension/workspace-summary/ideas_summary/webview.rq".ontology_aligned_tabs].0.110
idea_name["../packages/language/test/parsing.test.ts:parse dash and underscore delimited idea names"], ["../crates/reqlan-parse/tests/parser.rs:parse_dash_and_underscore_delimited_idea_names"]doneThe idea name is a string / handle / variable that uniquely identifies the idea ( within the ideaset / file ). It should not be a reserved [keyword]. Syntax: ["./language/syntax.rq".idea_name]; grammar: [reqlan_grammar] `IdeaName`.0.069
ideaset["../packages/language/test/parsing.test.ts:parse ontology.rq ideas"], ["../packages/language/test/linking.test.ts:resolve ideaset member forward reference"], ["../packages/language/test/linking.test.ts:resolve forward reference to later ideaset in the same file"]doneIdeasets are namespace containers for ideas. Syntax: ["./language/syntax.rq".ideaset]. Grammar: [reqlan_grammar] `IdeaSet`. Index kind `ideaset` plus `ideaset_member` edges: [analytical_types], [idea_extractor], [rust_index_types]. A [file] is an implicit ideaset ( ["./language/syntax.rq".file_layout] ). Product surface: [ideas_summary_tabs] Ideasets tab.0.134
import_statement["../packages/language/test/parsing.test.ts:parses from-import example line inside an attribute block value"], ["../packages/language/test/linking.test.ts:resolve namespace import references to files"], ["../packages/language/test/linking.test.ts:namespace import bracket reference links only the alias name"]doneImports describe references. Some [keyword] s are reserved for imports. Forms: ["./language/imports.rq".import_from], ["./language/imports.rq".import_namespace], ["./language/imports.rq".import_qualified]. Grammar: [reqlan_grammar] `Import`; resolve: [import_resolver].0.063
keyword["../packages/language/test/parsing.test.ts:parse example sub idea.rq"], ["../packages/language/test/parsing.test.ts:malformed from-as import keeps later ideas parseable"]doneAs a language, reqlan has keywords that are reserved in some contexts. Import statement keywords: ["./language/imports.rq".import_keywords] ( `import`, `from`, `as` ). Grammar: [reqlan_grammar] — those tokens are keywords only at statement start. Idea names should not use reserved keywords ( [idea_name] ).0.057
reference["../packages/language/test/linking.test.ts:resolve same-file bracket reference to local idea"], ["../packages/language/test/linking.test.ts:resolve wikilink to idea declaration in main.rq"], ["../packages/language/test/linking.test.ts:resolve namespace import references to files"]doneReferences link ideas to other ideas, files, and symbols. Syntax: ["./language/syntax.rq".reference_brackets], ["./language/syntax.rq".reference_wikilink], ["./language/syntax.rq".reference_qualified], ["./language/syntax.rq".reference_file], ["./language/syntax.rq".reference_url], ["./language/syntax.rq".reference_embedding]. Kinds: [reference_types]. Grammar: [reqlan_grammar] `ReferenceTarget`; index edges: [idea_extractor], [rust_extract].0.655
referenced_files["../packages/analytical/test/file-reference-resolve.test.ts"], ["../packages/language/test/references.test.ts:finds rq: bracket comment references in line comments"], ["../packages/language/test/references.test.ts:finds rq: comment references in block comments"], ["../crates/reqlan-index/tests/code_file_index.rs:indexes_comment_references_from_non_rq_files"]doneNon- `.rq` files that ideas reference, or that reference ideas. These may be shared. They should be captured in the ["./indexer/indexer.rq".index]. Outbound file refs: ["./language/syntax.rq".reference_file], [file_reference_resolve], edge kind `file_reference` in [analytical_types]. Inbound comment refs: ["./extension/language/comment-references/functional-code-comment-references.rq".references_in_functional_code_comments] via [comment_resolver] / [comment_grammar]. Full non- `.rq` file indexing of comment-bearing sources: ["./indexer/indexer.rq".index_code_files]. Click treats those files as centres: ["./cli/click.rq".click_code_file].0.169
show_in_footer["../site/src/lib/phonebook.test.ts"], ["../site/src/content/contact.test.ts"]doneEach entry under `links` in ["./phonebook.json"] may set `show-in-footer`. The property is optional. Omitted means true. Set `show-in-footer` to false to keep a link out of the site footer and the landing contact list. Packages do not have this property. Schema: ["./phonebook.schema.json"]. Typed helpers: `isShownInFooter`, `phonebookFooterLinks` in ["../scripts/phonebook.ts"] and ["../site/src/lib/phonebook.ts"]. per ["./site/site.rq".footer] per ["./site/site.rq".links]0.072
comment_reference["../packages/language/test/references.test.ts:finds rq: bracket comment references in line comments"], ["../packages/language/test/references.test.ts:finds rq: comment references in block comments"], ["../packages/language/test/linking.test.ts:comment references in source files resolve to rq ideas"], ["../crates/reqlan-index/tests/code_file_index.rs:indexes_comment_references_from_non_rq_files"], ["../packages/language/test/comment-reference-resolution.test.ts:creates a document link for an import-root aliased comment reference"], ["../packages/extension/test/comment-reference-path-context.test.ts:resolves @/ against the workspace folder for extension comment links"]doneInbound ["./ontology.rq".reference] from comments in non- `.rq` source: `rq:[idea]` / `rq:["path".idea]`. Qualified paths may use import-root aliases ( `rq:["@/path".idea]` ) per ["./language/imports.rq".configuration_import_root_alias] and ["./extension/language/comment-references/functional-code-comment-references.rq".comment_reference_import_root_alias]. Spec: ["./extension/language/comment-references/functional-code-comment-references.rq".references_in_functional_code_comments] Syntax note: ["./language/syntax.rq".comment_reference]. Resolve: [comment_resolver]. Unresolved: ["./language/syntax.rq".comment_reference_resolution_error]. Index edge kind `comment_link`. Related capture of those files: ["./ontology.rq".referenced_files]. Indexer: ["./indexer/indexer.rq".index_code_files].0.119
file_reference["../packages/analytical/test/file-reference-resolve.test.ts"], ["../packages/language/test/linking.test.ts:empty file references produce document links and warning diagnostics"], ["../packages/language/test/linking.test.ts:folder file references resolve without reading the directory as a file"], ["../packages/language/test/references.test.ts:finds embedded file references in @tests lists"]doneOutbound ["./ontology.rq".reference] to a file, folder, or symbol — not only `.rq`. Syntax: ["./language/syntax.rq".reference_file] ( bracketed quoted path, optional `L#` / symbol path ). Index edge kind `file_reference`. Resolve: [file_reference_resolve]; extract: [idea_extractor]. Editor links: ["./extension/language/syntax/features-syntax.rq".file_references]. Inbound file-reference CodeLens at the top of the target file: ["./extension/language/syntax/features-syntax-highlighting.rq".file_inbound_code_lens]. Non- `.rq` targets and inbound comment traffic: ["./ontology.rq".referenced_files]. Markdown `[label](target)` also stores this edge kind — see [link_reference]. Quoted body text is not this kind: [reference_edgecase].0.211
idea_reference["../packages/language/test/linking.test.ts:resolve same-file bracket reference to local idea"], ["../packages/language/test/linking.test.ts:resolve forward reference to later idea in the same file"], ["../packages/language/test/linking.test.ts:same-file idea references produce document links"], ["../packages/language/test/linking.test.ts:cross-file imported idea references produce document links"], ["../packages/language/test/linking.test.ts:resolve ideaset-qualified bracket reference to member leaf not ideaset"], ["../crates/reqlan-index/tests/extract_parity.rs:qualified_ideaset_member_reference_targets_leaf_idea_not_ideaset"]doneIdea-to-idea ["./ontology.rq".reference]: bracket `[name]` / `[ideaset.name]` targets a local, imported, or same-file idea. Syntax: ["./language/syntax.rq".reference_brackets], ["./language/syntax.rq".same_file_reference], ["./language/syntax.rq".reference_qualified], ["./language/syntax.rq".reference_embedding], ["./language/syntax.rq".references_to_subidea]. Index edge kind `references` on [analytical_types] / [rust_index_types]. Extract: [idea_extractor], [rust_extract]. A `[ideaset.member]` form records the edge on the member leaf, not on the ideaset container. An attribute uses the same brackets. See ["./language/syntax.rq".attribute_namespacing]. Wikilink surface for the same edge kind: [link_reference]. Fan-out across files: [wildcard_reference].0.125
ideaset_reference["../packages/language/test/linking.test.ts:resolve ideaset member forward reference"], ["../packages/language/test/linking.test.ts:resolve forward reference to later ideaset in the same file"], ["../packages/language/test/linking.test.ts:resolve namespace import references to files"], ["../packages/language/test/linking.test.ts:namespace import bracket reference links only the alias name"]doneReferences to an ["./ontology.rq".ideaset] or a namespace that behaves as one. Syntax: ["./language/syntax.rq".ideaset]; namespace import alias: ["./language/imports.rq".import_namespace] ( `[alias]` opens the imported file and links only the alias name ). Membership edges are `ideaset_member`; a bare namespace-alias bracket is stored as `file_reference` ( [idea_extractor] ), not `references`.0.057
link_reference["../packages/language/test/linking.test.ts:resolve wikilink to idea declaration in main.rq"], ["../packages/language/test/parsing.test.ts:keeps pipe characters in body prose as text"], ["../packages/language/test/references.test.ts:parses markdown link label and target from raw link text"], ["../packages/language/test/references.test.ts:embedded file reference scan ignores markdown link labels"]doneLink-shaped ["./ontology.rq".reference] surfaces that are not a bare `[idea]` bracket. Wikilink `[[target]]` ( optional alias pipe ): ["./language/syntax.rq".reference_wikilink] — indexes as idea-to-idea `references`, same as [idea_reference]. Markdown `[label](target)`: ["./language/syntax.rq".markdown_links] — label is not an idea ref; the target indexes as `file_reference` ( [file_reference] ).0.112
reference_edgecase["../packages/language/test/references.test.ts:embedded file reference scan ignores unbracketed quoted paths"], ["../packages/language/test/parsing.test.ts:does not parse unbracketed quoted paths as file references"], ["../packages/language/test/naked-strings.test.ts:does not emit STRING tokens for unbracketed quoted paths in body"], ["../packages/language/test/linking.test.ts:unbracketed quoted paths do not produce document links or missing-file diagnostics"], ["../packages/language/test/file-path-rewrite.test.ts:does not treat unbracketed quoted paths as embedded path references"], ["../crates/reqlan-parse/tests/lexer.rs:unbracketed_quoted_path_in_body_is_not_string"], ["../crates/reqlan-parse/tests/parser.rs:unbracketed_quoted_path_is_not_a_file_reference"], ["../crates/reqlan-index/src/extract.rs:unbracketed_quoted_path_is_not_a_file_reference"], ["../crates/reqlan-index/src/extract.rs:import_quoted_path_is_not_an_embedded_file_reference"]doneA quoted string is a [file_reference] only when it is inside brackets. Example of a file reference: ["./reference_types.rq"] Example of body text: " this is not a reference. rq " The file suffix does not change this rule. The parser must not make a file reference from quoted body text. The language server must not make a document link or a missing-file error from quoted body text. Related: [file_reference], ["./language/syntax.rq".naked_strings_in_body], ["./language/syntax.rq".reference_file].0.112
url_reference["../packages/language/test/parsing.test.ts:parses bracketed url references"], ["../packages/language/test/parsing.test.ts:does not parse unbracketed urls as url references"], ["../packages/language/test/linking.test.ts:url references produce document links and no missing diagnostics"], ["../crates/reqlan-parse/tests/lexer.rs:bracketed_url_is_one_url_token"], ["../crates/reqlan-parse/tests/parser.rs:bracketed_url_is_a_url_reference"], ["../crates/reqlan-index/src/extract.rs:indexes_bracketed_url_as_url_reference"], ["../crates/reqlan-index/src/extract.rs:unbracketed_url_is_not_a_url_reference"], ["../crates/reqlan-index/tests/broken_references.rs:check_accepts_url_references"]doneA bracket reference whose target is an absolute URL with a scheme and `://`. Example: [https://reqlan.com/]. Syntax: ["./language/syntax.rq".reference_url]. Index edge kind `url_reference` on [analytical_types] / [rust_index_types]. Extract: [idea_extractor], [rust_extract]. [check] does not treat a URL reference as a missing idea or a missing file. Unbracketed URLs in body prose stay text, not this kind. Related: [file_reference], [link_reference].0.075
wildcard_reference["../crates/reqlan-index/tests/wildcard_reference_edges.rs:stores_wildcard_fan_out_as_wildcard_reference_kind"], ["../crates/reqlan-index/tests/wildcard_reference_edges.rs:expands_wildcard_refs_to_one_edge_per_matching_idea"], ["../crates/reqlan-index/tests/wildcard_reference_edges.rs:emits_unresolved_edge_when_catalog_has_no_matches"], ["../crates/reqlan-index/tests/wildcard_reference_edges.rs:sync_persists_wildcard_reference_edges"]doneOne ["./ontology.rq".reference] that matches many ideas: quoted path glob + idea pattern ( `*` / `?` ). Syntax and navigation: ["./language/imports.rq".wildcard_references], ["./language/imports.rq".wildcard_references_webview]. Index: one `wildcard_reference` edge per catalog match ( ["./indexer/indexer.rq".wildcard_reference_edges] ); never stored as plain `references`. Native extract: ["../crates/reqlan-index/src/extract.rs"]. Sparse match handling: ["./core_analysis/check.rq".check_wildcard_sparse] ( ["./core_analysis/check.rq".check_wildcard_zero], ["./core_analysis/check.rq".check_wildcard_one] ).0.279
assessment["../../site/src/content/assessment.test.ts"], ["../../site/src/lib/certificate-token.test.ts"]doneA named quiz with a stable id, a title, a blurb, and sections of questions. Questions live in ["../../site/src/content/assessment.ts"] per ["./site.rq".copy]. Current sole quiz id `core`. Sections: ontology, installation, syntax, graph, cli. Ontology covers [idea], [ideaset], [file], [base], [attribute], [attribute_body], [reference]. Advanced syntax covers imports, file refs, wildcards, and comment refs. CLI covers click and `reqlan check` for reference integrity in CI / CD. Pass at 80 %. Then collect a display name and mint a certificate token. The token claim `a` identifies this assessment. After mint, go to [certificate_page] with the token and the just-completed query param.0.065
assessment_page["../../site/src/content/assessment.test.ts"], ["../../site/src/lib/certs-paths.test.ts"]done`/certs/assessment/` shows the sole [assessment] quiz when there is one. When there is more than one [assessment], it lists them. `/certs/assessment/[id]/` is that assessment's quiz. Unknown ids are not found. Legacy `/assessment/` and `/tutorials/assessment/` redirect here and keep the query string. The home ["./site.rq".quiz_sticker_tab] links here. It does not run the quiz in the tab.0.075
certificate_page["../../site/src/lib/certs-paths.test.ts"], ["../../site/src/lib/certificate-token.test.ts"]done`/certs/certificate/` shows a minted certificate. Token query param `c` holds the packed claims, including [assessment] id `a`. Query param `just=1` marks the just-completed view: - show the certificate - show a shareable link that omits `just` - embed the sticker form per [sticker_form_embed] Without `just`, the page is the shareable certificate only. Do not embed the form. Invalid or missing tokens send the user back to [assessment_page]. The completion line on a valid certificate names the [assessment] and links to that quiz. Legacy `/tutorials/certificate/` redirects here and keeps the query string.0.062
certs["../../site/src/lib/certs-paths.test.ts"], ["../../site/src/lib/certificate-token.test.ts"], ["../../site/src/content/assessment.test.ts"]doneCertification lives under `/certs/`. Pages: - [assessment_page] at `/certs/assessment/` ( sole quiz when one [assessment]; catalog when more ) - one quiz per [assessment] at `/certs/assessment/[id]/` - [certificate_page] at `/certs/certificate/` The tutorials catalog and ["./support-page.rq".support_page] advocacy link send the user to [assessment_page]. Tokens are honor-system claims in ["../../site/src/lib/certificate-token.ts"]. Claim `a` is the [assessment] id ( not a section id ).0.054
sticker_form_embed["../../site/src/lib/google-form-embed.test.ts"]doneThe just-completed [certificate_page] embeds phonebook link id `sticker-form` as a Google Form iframe. Href comes from [phonebook], not a hardcoded URL in the view. Convert the href to an embed `src` ( `viewform` plus `embedded=true` ). Keep a direct link to the same phonebook href if the iframe does not load. Hide the form when the user prints the certificate.0.048
accurate_rq_snippets_must_parse["../../site/src/content/example.test.ts"], ["../../site/src/content/rq-snippets.test.ts"], ["../../site/scripts/validate-showcase-rq.mts"]doneEvery site snippet that demonstrates accurate reqlan must parse against the Langium grammar. In scope: language- " rq " blocks ( landing syntax pairs, the example slice, the hero snippet, showcase `.rq` blocks ). Out of scope: ts / md / py snippets that only show `rq:` comment links. Invalid-on-purpose samples must not be labelled language- " rq ". Enforced by tests plus the content parse gate in ["../../site/scripts/validate-showcase-rq.mts"]. Showcases are a subset per [every_rq_block_must_parse] / [phase_1_parse_gate].0.090
broken_links_showcase["../../site/src/content/showcases.test.ts:broken-links shows reqlan check as a CI gate"]donediagnostics, refactor, cli, ciFlagship. Links that break loudly. Someone renames a file. Show the diagnostic, the quick-fix menu, and the rewritten refs. Then the same issue from ["../core_analysis/check.rq".check] ( `reqlan check`, exit 1 ) and that command as a CI step so a merge cannot land rot. This is the argument against a wiki. Domain: refactor safety, any stack.0.190
cta_icon["../../site/src/content/install-actions.test.ts"]doneThe hero has a separate " Install extension " menu button. The menu lists Cursor, VS Code, and Download VSIX. It must not include Open VSX. Open VSX stays on [quickstart_page]. It must not assume the user's editor or pre-select one silently. The CLI control is a separate button per [install_cli_menu]. Get-started CTA copy lives in ["../../site/src/content/hero.ts"] per [hero_section]. Each menu row shows the target's icon beside its full label; icons resolve through [phonebook_icon_registry] via the quickstart icon set / name refs in ["../../site/src/content/install-actions.ts"]. per [components] per [development_core.iconify_stack]0.078
elevator_pitch_section["../../site/src/content/nav.test.ts"]doneLanding `#elevator-pitch` after [hero_section] and before [featured_in_section]. This is the home " Why reqlan " destination: [sidebar_nav] child and [nav_graph] Why node use this id. One-line thesis plus rotating claims. Copy lives in ["../../site/src/content/meta.ts"] per [copy]. Thesis follows ["../constitution.rq".elevator_pitch]. Behaviours: [claim_cycle], [claim_progress], [claim_reduced_motion], [claim_expand]. Styling per [styling_architecture]. Must stay compatible with [simple_lightweight_and_static].0.123
example_section["../../site/src/content/example.test.ts:parses as valid reqlan"]doneLanding `#example`: one worked graph slice ( imports, file anchors, wildcards, status, tags, tests ). Copy lives in ["../../site/src/content/example.ts"] per [copy]. The slice must parse as accurate reqlan per [accurate_rq_snippets_must_parse].0.091
faq_drift["../../site/src/content/faq.test.ts"]doneThe FAQ includes this question: How do you keep `.rq` files from drifting once the code moves on? `.rq` files are code. They are the source of truth. They are not a document. Specify material work as an idea first. Implementation and tests point back with rq-comments per [development_core.code_comment_references] and [development_core.testing]. A check requires each test to serve a requirement. Agents see only the ideas that attach to the files they touch. Mark a replaced idea deprecated and point to the new idea. The indexer flags missing references like a compile check. Copy lives in ["../../site/src/content/faq.ts"] ( item id `drift` ) per [copy] and [faq_page]. The sidebar nests this question as a same-page child per [sidebar_nav].0.057
faq_page["../../site/src/content/faq.test.ts"]doneThe site exposes `/faq/` as a statically generated page answering a short set of common questions. Copy lives in ["../../site/src/content/faq.ts"] and stays minimal per [copy]. Support answers point at [support_page_reqs.support_page] and at phonebook surfaces ( GitHub stars, marketplace stars, issues / contribution, GitHub Sponsors, Discord ) rather than inventing URLs. Required topics: - how reqlan supports token efficiency - whether reqlan is the de facto standard for efficient developer-centric context management and semantic mapping - when to use reqlan - how `.rq` files stay in sync with code per [faq_drift] - how to support reqlan ( GitHub stars, GitHub Sponsors, VS Marketplace stars, Discord, contribution, bug reporting ) Sidebar nests FAQ question anchors as same-page children per [sidebar_nav]. Landing nav graph includes FAQ as a page node.0.132
featured_in_section["../../site/src/content/featured.test.ts"]doneLanding `#featured-in` after [elevator_pitch_section] and before [motivation_section]. Rolling social-proof banner: label " As featured in: " plus catalogue cards that scroll slowly in a continuous loop. Each card shows an icon and an outbound link label. Required listings ( labels match the catalogue names ): - agentlanguages. dev → https://agentlanguages.dev/languages/reqlan/ - awesome-spec-driven-development → https://github.com/Engineering4AI/awesome-spec-driven-development - awesome-docs → https://github.com/testthedocs/awesome-docs Copy and icons live in ["../../site/src/content/featured.ts"] per [copy]. Icons resolve through [phonebook_icon_component] / [icon_registry]. Links open in a new tab with `rel="noopener noreferrer"`. Pause the scroll on hover or focus. When the visitor prefers reduced motion, show a static row of the same cards with no scroll. Do not put these URLs in the phonebook footer / contact list. Styling per [styling_architecture]. Must stay compatible with [simple_lightweight_and_static].0.122
footer["../../site/src/lib/phonebook.test.ts"]doneThe site footer is on every page via ["../../site/src/components/SiteShell.tsx"]. Copyright copy lives in ["../../site/src/content/meta.ts"] per [copy]. The footer shows phonebook `links` where `show-in-footer` is not false per [phonebook_reqs.show_in_footer]. Icons render through [phonebook_icon_component].0.109
get_started_cta_motion["../../site/src/components/ui/hover-border-gradient.test.ts"]doneThe get-started control on [hero_section] shows a moving colour wash on the border and on the button fill. The wash uses the aqua and rust brand colours. The border wash and the fill wash share one spin period and one spin direction. When the visitor prefers reduced motion, show a static fill and a static border. per [styling_architecture]0.058
hero_github_star["../../site/src/content/hero.test.ts"], ["../../site/src/components/HeroActions.test.ts"]doneThe [hero_section] action row shows a Star on GitHub control next to get-started and the install controls. The control opens the GitHub repository from [phonebook_reqs.phonebook] in a new tab. The icon comes from [phonebook_icon_component]. Copy lives in ["../../site/src/content/hero.ts"] per [copy]. The hero control is in addition to [sticky_cta_node] and [support_page_reqs.support_page].0.064
icon_registry["../../site/src/lib/phonebook-icons.test.ts"]done[phonebook_icon_registry] maps phonebook icon keys to bundled Iconify data for the site. A link or package can omit `icon`. If `icon` is present, it must have a matching registry entry. The module throws at startup if a present icon does not resolve. When you add or change an icon in ["../phonebook.json"], update the registry import for that slug. per [development_core.iconify_stack] per [development_core.phonebook_icon_keys]0.064
install_cli_menu["../../site/src/content/install-actions.test.ts"], ["../../site/src/lib/package-manager.test.ts"]doneThe hero has a separate " Install CLI " control. It must not nest inside [cta_icon]. The primary action copies the selected package manager command for [cli_package.cli_package] per [package_manager_preference]. A chevron menu lists npm, pnpm, yarn, and bun. Each command uses the CLI package name from [phonebook_reqs.npm_packages]. A click copies the selected command to the clipboard and stores the preference. The [quickstart_page] CLI and MCP install rows use the same package manager options and the same preference. A copy must not change the last-used editor.0.099
links["../../site/src/content/contact.test.ts"]per [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
meta_tags["../../site/src/lib/site-metadata.test.ts"], ["../../site/src/content/meta.test.ts"], ["../../site/scripts/verify-static-export.mts"]doneThe site HTML head must include a document title, a description, a canonical URL, Open Graph tags, and Twitter card tags. Canonical origin is the phonebook `site` href per [phonebook_reqs.phonebook]. Default title and description live in ["../../site/src/content/meta.ts"] per [copy]. Root layout ["../../site/src/app/layout.tsx"] sets the shared metadata: title template `%s · reqlan`, description, icons, manifest, theme colour, Open Graph image, and Twitter `summary_large_image`. Each marketing page must set a title and a description. Showcase and tutorial detail pages use the item title and summary. Open Graph image is 1200 × 630 PNG at `/og.png`, generated with favicons per [images]. Compatible with [simple_lightweight_and_static]. Do not index the presentation player route per [presentation_player_route].0.051
package_manager_preference["../../site/src/lib/package-manager.test.ts"]doneThe site keeps one global JavaScript package manager value: npm, pnpm, yarn, or bun. The default is npm. All CLI and MCP install commands read and write this one value. Do not keep a separate choice on each control. The value persists in the browser across pages and reloads. Surfaces: [install_cli_menu], [quickstart_page]. Compatible with [simple_lightweight_and_static].0.068
quickstart_page["../../site/src/content/install-actions.test.ts"]doneThe site exposes `/quickstart/` as the install / get-started page. Primary path: editor install chooser. Also explains headless [cli_package.cli_package] ( `@reqlan/cli` ) and ["../core-architecture.rq".mcp_package] ( `@reqlan/mcp` ) on the same `.reqlan` index. Package npm hrefs come from [phonebook_reqs.npm_packages], not hardcoded URLs. CLI and MCP install commands offer npm, pnpm, yarn, and bun per [install_cli_menu]. They share one stored preference per [package_manager_preference]. After install steps, it links onward to Tutorials, Showcases, and FAQ so visitors can continue without returning to the home nav. Related link copy lives in ["../../site/src/content/quickstart.ts"] per [copy]. Sidebar nests Extension / CLI / MCP as same-page children per [sidebar_nav].0.113
quiz_sticker_tab["../../site/src/content/quiz-sticker.test.ts"], ["../../site/src/components/QuizStickerTab.test.ts"]doneHome only: a right-edge tab on the home page. It does not mount in root layout or on other routes. Collapsed: a vertical label and the [phonebook_reqs.phonebook] `sticker-form` icon. Open: a short panel. The CTA is a link to [certs_reqs.assessment_page] through ["../../site/src/lib/certs-paths.ts"]. It is not an in-place quiz. Copy lives in ["../../site/src/content/quiz-sticker.ts"] per [copy]. Style with CSS modules per [styling_architecture] and [brand]. Use theme colour tokens. Hide on narrow viewports so it does not cover content. Keep it compatible with [simple_lightweight_and_static] and [sticky_cta_node]. No looping decorative motion. Open and close may change width once. When the visitor prefers reduced motion, do not animate.0.101
showcase_module["../../site/src/content/showcases.test.ts"], ["../../site/src/content/showcases.test.ts:gives each showcase its own file with rq comment references"]doneShowcases are standardised and typed in TS content objects. Types live in ["../../site/src/content/showcases/types.ts"]. Each showcase is its own file under ["../../site/src/content/showcases"]. ["../../site/src/content/showcases/index.ts"] composes them in [showcase_set] order. Each showcase file carries rq: comment references to its showcase idea and to the product ideas it demonstrates. Short version ( list card ): id, title, summary, tags, mechanism badge. Long version ( detail page ): full blocks array including payoff. Exist as a list page and as a full page per slug. Routes: `/showcase/` and `/showcase/[slug]/` — static export. Block kinds needed beyond today's code | features union: callout — the one-sentence point of the page exchange — query + response, terminal-styled diagnostic — editor-style error with quick-fixes diagram — visually distinct from code; never language- " rq " caption / mechanism fields on the showcase object Copy stays minimal and show-don ' t-tell, aligned with site copy rules.0.057
spec_html_export["../../site/scripts/verify-static-export.mts"], ["../../packages/analytical/test/native-export-request.test.ts"], ["../../packages/analytical/test/load-native.test.ts"], ["../../packages/analytical/test/native-packaging.test.ts"], ["../../crates/reqlan-analytical/tests/export.rs:html_export_honours_graph_page_url_base_and_header_link"]doneThe site static build exports the workspace requirement graph ( excluding `*.secret.rq` ) under `out/spec/` via `reqlan export`. It must pass [html_export.html_export_url_base] for `/spec` ( honouring `SITE_BASE_PATH`, e. g. `/reqlan/spec` in production ) so `/spec` loads with or without a trailing slash. It must pass [html_export.html_export_header_link] pointing at the marketing site home so readers can leave the embedded spec and return to the parent site. Embedded `/spec` graph pages inherit [html_export.html_export_graph_background_load] so large workspace graphs do not freeze the page while settling. Pipeline: ["../../site/scripts/build-static.mts"] → ["../../site/scripts/export-spec.mts"] → ["../../site/scripts/verify-static-export.mts"]. Host options come from [html_export.html_export] / CLI [cli_package.commands], including native CLI export via ["../core_analysis/rust_port.rq".native_bridge]. CI must build / stage host `reqlan-napi` before this pipeline ( [distribution_reqs.site_distribution] ); the loader probes repo-root `crates/target`, not `packages/crates`.0.142
story_codebase_showcase["../../site/src/content/showcases.test.ts:story-codebase binds a story to source and tests"], ["../../site/src/content/showcases.test.ts:gives each showcase its own file with rq comment references"], ["../../site/scripts/validate-showcase-rq.mts"]donestory, traceability, deliveryFlagship. A story that ships with the code. Write the feature as one idea. Bind source with @ implementation. Bind proof with @ tests. Point back with rq: comments. Click on that name returns the bound files — not a ticket outside the repo. Domain: product delivery. One worked name across every block per [one_worked_example_per_page]. Payoff is click output per [every_showcase_ends_in_a_payoff] and ["../cli/click.rq".click]. Uses [development_core.code_comment_references] and [development_core.testing]. Demonstrates [sub_file_binding] and [bidirectional_comment_links].0.046
sync_config_schema["../../packages/language/test/config.test.ts:schema $id matches public v1 host path"], ["../../packages/language/test/config.test.ts:schema file documents importRoots mappings"]done`scripts/sync-config-schema.mts` copies the canonical base config JSON Schema from ["../../packages/extension/schemas/config.schema.json"] into `public/schemas/v1/config.schema.json`. Public URL: `https://reqlan.com/schemas/v1/config.schema.json` ( path `v1` is schema compatibility; not site package semver ). Canonical authoring and `$id`: ["../extension/host/configuration.rq".configuration_schema_file]. Init seed `$schema`: ["../extension/host/installation.rq".base_config_seed]. Wired into site `predev` and `build-static` ( same pattern as [sync_presentations] ). Deployed with existing `site/v*` pipeline. Synced artifact is not a second authoring source; do not edit under `public/schemas/`.0.054
tutorial_player_transport["../../site/src/lib/tutorial-transport.test.ts"], ["../../site/src/components/TutorialPlayerShell.test.ts"]doneThe `<` control must show the previous slide when the player can go back. When the player cannot go back, `<` must open the previous lesson if that lesson exists. Open that lesson on the last slide. The `>` control must show the next slide when the player can go forward. When the player cannot go forward, `>` must open the next lesson if that lesson exists. Open that lesson on the first slide. The Left Arrow key and the Right Arrow key must do the same as `<` and `>`. Shift + Left Arrow and Shift + Right Arrow must open the adjacent lesson from any slide. The `<<` and `>>` controls must continue to open the adjacent lesson. After the current lesson player is ready, the shell must start to load the next lesson player in the background. The shell must prefetch the next lesson page. The shell must ignore state messages from the background player.0.046
support_page["@/site/src/content/support.test.ts"], ["@/site/src/lib/support-graph-cola.test.ts"]doneRank actions by ease and likelihood to nudge. Star on GitHub is first. Default view is a graph. Toggle Graph / Tiles / Table as icon buttons on the right of the header, with hover tooltips. Graph: cola layout, settled on first paint to the visible window; copy has no graph coordinates; each node moves with its label; nodes are draggable; a drop keeps the new position; a drag does not start the action; all nodes offset slightly toward the cursor; nodes repel so some canvas edges stay open; action radius is impact × ease and stays latent to users; action nodes are solid and flat; each action links to a smaller passive original-group node in secondary colour ( advocacy, community, cite, contribute, sponsor ); group labels grow on group hover; labels do not overlap. Hover on an action node shows a tooltip with the action blurb. Star and sponsor tags are featured in the orange brand colour: the Star action, sponsor actions, and the Sponsor group. Tiles: responsive flex layout. Table: action and group only. Ease, impact, and score stay latent. Action names use the aqua link colour in Graph, Tiles, and Table, including copy and share, except featured graph tags. Each table row runs the same action as the graph and tiles: open a link, copy, or share. Support via, in tile order: - one click - star on github - share - discord - a minute - cite - issues - post your certificate - say something nice on the Visual Studio Marketplace - say something nice on Open VSX - FREE stickers: show the world you are a reqling, via [phonebook] sticker-form - write - reach out and send an email - write a testimonial - sponsor - github sponsorship - direct sponsorship integrated with [phonebook]. Copy lives in ["../../site/src/content/support.ts"] per ["./site.rq".copy]. The site exposes `/support/` as a statically generated page. Sidebar nests Support section anchors as same-page children per ["./site.rq".sidebar_nav]. Landing nav graph includes Support as a page node per ["./site.rq".nav_graph].0.112