Referenced by20
Labels18

Referencing ideas

IdeaStatusTagsSummaryKatz
baseA 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_initialisation_ignoredoneNew 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
clickdoneThe [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_sessiondoneClick 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
checkdone`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_skip_gitignored_targetsdone[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
configuration_locationAn 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_schema_filedoneThe 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
base_config_seeddoneNew 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
installationreqlan installation has **two sequenced layers** that must not be conflated: 1. [extension_installation] — host product ( VS Code / Cursor extension ) install and first activation. 2. [base_installation] — marking a filesystem directory as a reqlan [bases.base] and seeding its `.reqlan` application memory. Extension install alone does **not** create a base. Base install alone does **not** open the welcome webview or install host agent skills. CLI `init` shares the base path with the editor ( [cli.init] / [bases.create_base_onboarding] ).0.046
application_memorydoneBase-local application memory for reqlan tools lives under `<base>/.reqlan/`. The presence of `.reqlan` **marks** a directory as a ["../../bases/base.rq".base]; each base owns its own store. Shared by the VS Code extension, ["../../cli/cli_package.rq".cli_package], and MCP ( [mcp_server] ) — not VS Code `globalStorageUri` / extension-private storage. The ideas graph index ( [indexer.index_ideas] and [indexer.index_technology] ) persists as `ideas-index.sqlite` inside that directory. Schema: ["../../indexer/sqlite-schema.rq".ideas_index_sqlite]. Index timing diagnostics persist separately as `index-diagnostics.sqlite` ( [index_diagnostics_store] / ["./index-diagnostics.rq".index_diagnostics] ) so rebuilds of the ideas index do not wipe history. Click session state persists as `click-sessions.sqlite` ( ["../../cli/click.rq".click_session] ) so agent / CLI click cursors survive ideas-index rebuilds. Diagnostics schema: ["../../indexer/diagnostics-schema.rq".diagnostics_sqlite]. WAL sidecars and JSON siblings: ["../../indexer/sidecars.rq".reqlan_directory_layout]. Export form defaults ( all formats via ["../export/export.rq".export_webview], including HTML options in ["../export/html-export.rq".html_export_form] ) persist as `export_settings.json` in the same directory ( active base ). Path ignore rules live as `.rqignore` in the same directory ( [rqignore] / [configuration.configuration_rqignore] ). Git ignore for SQLite stores lives as `.gitignore` in the same directory ( ["../../bases/base.rq".base_initialisation_ignore] ). Path resolution is owned by [application_memory_impl] ( `resolveApplicationMemoryPath` ); consumers must use it ( or `REQLAN_INDEX_PATH` override for a single store ) so tools read and write the same store for a given base. Multi-base discovery / registry: ["../../bases/base.rq".multi_base_environment]. Index engine ownership: ["../../indexer/indexer.rq".ownership]. Extension wiring: [analytical_submodule]. Aligns with ["../../cli/cli_package.rq".function_parity]: shared analytical memory, not host-only state.0.494
binary_ignoredoneDiscovery, 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_ignoredoneDiscovery, 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
rqignoredone`.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_initialisationdoneNew 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
index_sequencingdoneDescribe when the ideas index starts, updates, and idles, and which trigger owns each pass. Capability aliases live in [triggers] and [idea_index_triggers]. Detail ideas below; keep [nonblocking_index] and [indexing_incrementality] as the UX rules. Related: [consumers.index_consumers], [cache_reuse.index_cache_reuse], [ideas_schema.documents_table], [diagnostics_schema.sync_runs_table].0.179
scan_limitsdoneThe 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
reqlan_directory_layoutdoneEach base owns `<base>/.reqlan/` ( [application_memory] ). Contents: - `ideas-index.sqlite` — [ideas_schema.ideas_index_sqlite] - `index-diagnostics.sqlite` — [diagnostics_schema.diagnostics_sqlite] / [index_diagnostics_store] - `click-sessions.sqlite` — ["../cli/click.rq".click_session] - SQLite WAL / SHM / journal sidecars — [sqlite_wal_sidecars] - `config.json` — [json_siblings] / [base_configuration] - `.rqignore` — [rqignore] - `.gitignore` — [base_initialisation_ignore] / [vcs_ignore_for_stores] - `export_settings.json` — [json_siblings] Path helpers: [application_memory_impl]. Override: `REQLAN_INDEX_PATH` for a single store.0.177
sqlite_wal_sidecarsdoneWhen 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
vcs_ignore_for_storesNew bases seed `.reqlan/.gitignore` so SQLite databases and their WAL / SHM / journal sidecars stay out of version control ( [base_initialisation_ignore] ). `.rqignore` is separate: it filters discovery / index walks, not VCS ( [rqignore] ). [sqlite_wal_sidecars] [reqlan_directory_layout]0.063

Reference labels

"../../../crates/reqlan-index/src/ignore.rs", "../../../crates/reqlan-index/src/ignore.rs:create_base_seeds_config_with_public_schema", "../../../crates/reqlan-index/src/ignore.rs:default_rqignore_skips_binary_files_until_negated", "../../../crates/reqlan-index/src/ignore.rs:default_rqignore_skips_files_without_comments_until_negated", "../../../crates/reqlan-index/src/ignore.rs:seeded_rqignore_explains_features", "../../crates/reqlan-index/src/ignore.rs", "../../crates/reqlan-index/src/ignore.rs:create_base_seeds_gitignore_for_sqlite_artifacts", "../../crates/reqlan-index/src/ignore.rs:default_rqignore_skips_files_without_comments_until_negated", "../../crates/reqlan-index/src/ignore.rs:workspace_gitignore_matches_root_and_nested_rules", ../../../crates/reqlan-index/src/ignore.rs, ../../../crates/reqlan-index/src/ignore.rs:create_base_seeds_config_with_public_schema, ../../../crates/reqlan-index/src/ignore.rs:default_rqignore_skips_binary_files_until_negated, ../../../crates/reqlan-index/src/ignore.rs:default_rqignore_skips_files_without_comments_until_negated, ../../../crates/reqlan-index/src/ignore.rs:seeded_rqignore_explains_features, ../../crates/reqlan-index/src/ignore.rs, ../../crates/reqlan-index/src/ignore.rs:create_base_seeds_gitignore_for_sqlite_artifacts, ../../crates/reqlan-index/src/ignore.rs:default_rqignore_skips_files_without_comments_until_negated, ../../crates/reqlan-index/src/ignore.rs:workspace_gitignore_matches_root_and_nested_rules