Referenced by29
Labels52

Referencing ideas

IdeaStatusTagsSummaryKatz
analytical_rust_portin-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_aligndoneOn 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
parser_rustdoneRecursive-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
import_fromFrom-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_keywordsThe keywords import, from, and as are reserved for import statements. Import keywords may also appear as ordinary words in idea body text when not at statement start.0.047
lexer_bridge_to_syntaxThe context-sensitive token builder is what makes [block_idea] and prose braces coexist: structural `{` / `}` are only those that open or close ideas, while [nested_curly_braces] stay body text. [context_sensitive_lexer_scaling] is the performance contract for that bridge; [code_snippets] is the opacity contract so fence interiors never feed the brace timeline. Index-path Rust port: ["../core_analysis/rust_port.rq".lexer_rust] / ["../core_analysis/rust_port.rq".parser_rust].0.077
parse_budget_timeoutdoneLexing, 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_bracesif, for some reason, there is a prose block containing only closing curly braces, they should be escaped and allowed \ } like this.0.040
nested_curly_bracesif 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_namespacingdoneA 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_ideaA 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_snippetsIdea 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
empty_attributeA 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_layoutincompleteA 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
file_suffixReqlan requirement documents use the. rq file suffix.0.052
idea_nameIdea 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
naked_strings_in_bodyQuoted 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_warningdoneA 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_urldoneA 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
simple_ideaA 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
idea-leading-whitespaceA block body can have spaces or tabs before the text. The lexer counts a space and a tab as whitespace. A tab is one whitespace character. The parser does not replace a tab with spaces. The base indent is the whitespace at the start of the first body line. The first body line is the first line of body text in the block. The first body line can start after column 0. The base indent is still the whitespace on that line. A body line with the same whitespace as the base indent has no leading whitespace in the parsed text. A body line keeps the whitespace that remains after the base indent. The parser removes the base indent only when the line starts with that same whitespace. An attribute on its own line stays an attribute. Example: the first body line has four spaces. A later line with four spaces has no leading whitespace. A later line with eight spaces has four spaces in the parsed text. This line has the same four spaces as the first body line. This line has eight spaces.0.040
syntax_whitespacewhitespace is not significant in attributes. this line is not an idea, it is part of the main content attribute ["../ontology.rq".attribute]0.040
filedoneFiles 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_ruledoneGrammar 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
ideadoneA 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_namedoneThe 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
idea_referencedoneIdea-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
reference_edgecasedoneA 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_referencedoneA 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

Reference labels

"../../crates/reqlan-parse/tests/parser.rs:allows_escaped_closing_brace_in_body_prose", "../../crates/reqlan-parse/tests/parser.rs:bracketed_url_is_a_url_reference", "../../crates/reqlan-parse/tests/parser.rs:from_import_records_each_token_span", "../../crates/reqlan-parse/tests/parser.rs:keeps_end_of_line_matching_prose_braces", "../../crates/reqlan-parse/tests/parser.rs:keeps_ideas_after_mid_line_triple_backticks", "../../crates/reqlan-parse/tests/parser.rs:keeps_inline_prose_braces", "../../crates/reqlan-parse/tests/parser.rs:lone_at_keeps_surrounding_ideas", "../../crates/reqlan-parse/tests/parser.rs:one_liner_body_does_not_continue_on_the_next_line", "../../crates/reqlan-parse/tests/parser.rs:parse_dash_and_underscore_delimited_idea_names", "../../crates/reqlan-parse/tests/parser.rs:parse_syntax_rq", "../../crates/reqlan-parse/tests/parser.rs:parses_block_and_oneliner", "../../crates/reqlan-parse/tests/parser.rs:parses_idea_attribute_link_as_qualified_names", "../../crates/reqlan-parse/tests/parser.rs:parses_same_line_blocks_without_swallowing_later_ideas", "../../crates/reqlan-parse/tests/parser.rs:parses_top_level_nameless_braces_without_aborting_later_ideas", "../../crates/reqlan-parse/tests/parser.rs:recovers_invalid_from_import_and_keeps_later_ideas", "../../crates/reqlan-parse/tests/parser.rs:recovers_nameless_block", "../../crates/reqlan-parse/tests/parser.rs:relative_dedent_keeps_an_extra_tab", "../../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:syntax_error_elsewhere_is_still_reported", "../../crates/reqlan-parse/tests/parser.rs:times_out_hang_sentinel", "../../crates/reqlan-parse/tests/parser.rs:unbracketed_quoted_path_is_not_a_file_reference", "../crates/reqlan-parse/tests/parser.rs:bracketed_url_is_a_url_reference", "../crates/reqlan-parse/tests/parser.rs:parse_dash_and_underscore_delimited_idea_names", "../crates/reqlan-parse/tests/parser.rs:parse_syntax_rq", "../crates/reqlan-parse/tests/parser.rs:unbracketed_quoted_path_is_not_a_file_reference", ../../crates/reqlan-parse/tests/parser.rs:allows_escaped_closing_brace_in_body_prose, ../../crates/reqlan-parse/tests/parser.rs:bracketed_url_is_a_url_reference, ../../crates/reqlan-parse/tests/parser.rs:from_import_records_each_token_span, ../../crates/reqlan-parse/tests/parser.rs:keeps_end_of_line_matching_prose_braces, ../../crates/reqlan-parse/tests/parser.rs:keeps_ideas_after_mid_line_triple_backticks, ../../crates/reqlan-parse/tests/parser.rs:keeps_inline_prose_braces, ../../crates/reqlan-parse/tests/parser.rs:lone_at_keeps_surrounding_ideas, ../../crates/reqlan-parse/tests/parser.rs:one_liner_body_does_not_continue_on_the_next_line, ../../crates/reqlan-parse/tests/parser.rs:parse_dash_and_underscore_delimited_idea_names, ../../crates/reqlan-parse/tests/parser.rs:parse_syntax_rq, ../../crates/reqlan-parse/tests/parser.rs:parses_block_and_oneliner, ../../crates/reqlan-parse/tests/parser.rs:parses_idea_attribute_link_as_qualified_names, ../../crates/reqlan-parse/tests/parser.rs:parses_same_line_blocks_without_swallowing_later_ideas, ../../crates/reqlan-parse/tests/parser.rs:parses_top_level_nameless_braces_without_aborting_later_ideas, ../../crates/reqlan-parse/tests/parser.rs:recovers_invalid_from_import_and_keeps_later_ideas, ../../crates/reqlan-parse/tests/parser.rs:recovers_nameless_block, ../../crates/reqlan-parse/tests/parser.rs:relative_dedent_keeps_an_extra_tab, ../../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:syntax_error_elsewhere_is_still_reported, ../../crates/reqlan-parse/tests/parser.rs:times_out_hang_sentinel, ../../crates/reqlan-parse/tests/parser.rs:unbracketed_quoted_path_is_not_a_file_reference, ../crates/reqlan-parse/tests/parser.rs:bracketed_url_is_a_url_reference, ../crates/reqlan-parse/tests/parser.rs:parse_dash_and_underscore_delimited_idea_names, ../crates/reqlan-parse/tests/parser.rs:parse_syntax_rq, ../crates/reqlan-parse/tests/parser.rs:unbracketed_quoted_path_is_not_a_file_reference