Code reference detail
api.rs
crates/reqlan-analytical/src/api.rs
| Idea | Status | Tags | Summary | Katz |
|---|---|---|---|---|
| diff | done | Compare 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 | |
| check | 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 | 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_skip_gitignored_targets | 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 | 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_wildcard_one | 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_zero | 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 | |
| analysis_scope | `@reqlan/analytical` — shared index + analysis API. Hosts: CLI, [extension], MCP. Native rewrite: [rust_port.analytical_rust_port]. [parse] [index] [search] [export] [analysers] [runtime] | 0.087 | ||
| test_references | done | The 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 | |
| export_pipeline | 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 | |
| html_export | 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_graph_page | 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 | ||
| katz_search | done | Search 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 | |
| search | Search over the requirement graph — find ideas by name, body, tags, and related signals. Surfaces: [fuzzy_search], [file_search], [contextual_search], [semantic_search], [katz_search]. Consumed by CLI `reqlan search`, MCP / chat tools, Ideas Summary, and the activity-bar search pane. Rust ranking engine: ["./rust_port.rq".search_rust]. | 0.046 | ||
| katz_centrality | done | Score 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 | |
| markov_chain | graph traveral should be tracked to inform a markov chain model of the graph. | 0.040 | ||
| site | the / site folder contains a static Next. js App Router landing page for reqlan. should align with [brand] Copy modules: [copy] Document head: [meta_tags] | 0.040 | ||
| spec_html_export | done | The 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 |
Reference labels
"../../crates/reqlan-analytical/src/api.rs", ../../crates/reqlan-analytical/src/api.rs