Attribute detail
implementation
72 ideas · 62 distinct values
| Value | Distribution | Ideas | Share |
|---|---|---|---|
| ["../../../packages/language/src/reqlan-path-completion.ts"], ["../../../packages/language/src/reqlan-completion-provider.ts"] |
|
4 | 5.6% |
| ["../../packages/analytical/src/export/html-export-assets.ts"], ["../../packages/analytical/src/export/html-export-template.ts"] |
|
4 | 5.6% |
| ["../../packages/analytical/src/export/html-export-assets.ts"] |
|
2 | 2.8% |
| ["../../packages/analytical/src/export/html-export-assets.ts"], ["../../packages/analytical/src/graph/physics-core.js"], ["../../packages/extension/webviews/shared/graph/graph-physics.ts"] |
|
2 | 2.8% |
| ["../../packages/analytical/src/export/types.ts"], ["../../packages/analytical/src/export/build-export-snapshot.ts"], ["../../packages/analytical/src/export/html-export-template.ts"], ["../../packages/analytical/src/export/write-html-export.ts"], ["../../packages/language/src/reqlan-path-resolve.ts"], ["../../packages/extension/schemas/config.schema.json"], ["../../packages/extension/src/analytical_submodule/export/register-export-commands.ts"] |
|
2 | 2.8% |
| ["../../packages/language/src/reqlan-token-builder.ts"] |
|
2 | 2.8% |
| ["../../../../packages/extension/webviews/ideas-summary/lib/tabs.ts"], ["../../../../packages/extension/webviews/ideas-summary/components/TabPanels.svelte"] |
|
1 | 1.4% |
| ["../../../packages/analytical/src/core/filter-specials.ts"], ["../../../packages/analytical/src/export/build-export-snapshot.ts"], ["../../../packages/analytical/src/export/html-export-template.ts"], ["../../../packages/analytical/src/export/html-export-assets.ts"], ["../../../packages/analytical/src/export/html-export-utils.ts"], ["../../../packages/analytical/src/index-store/webview-graph-queries.ts"], ["../../../packages/analytical/src/index-store/sqlite-store.ts"], ["../../../packages/extension/webviews/ideas-summary/components/SearchableCheckboxDropdown.svelte"], ["../../../packages/extension/webviews/ideas-summary/components/GraphControls.svelte"], ["../../../packages/extension/webviews/ideas-summary/components/GraphView.svelte"], ["../../../packages/extension/src/webview_module/shared/messages.ts"] |
|
1 | 1.4% |
| ["../../../packages/analytical/src/index-store/index-diagnostics-store.ts"], [application_memory_impl] |
|
1 | 1.4% |
| ["../../../packages/extension/webviews/shared/graph/graph-cy-controller.ts"], ["../../../packages/analytical/src/export/html-export-assets.ts"] |
|
1 | 1.4% |
| ["../../../packages/extension/webviews/shared/graph/graph-cy-controller.ts"], ["../../../packages/extension/webviews/ideas-summary/components/GraphControls.svelte"], ["../../../packages/extension/src/webview_module/shared/graph-ui-state.ts"], ["../../../packages/analytical/src/export/html-export-assets.ts"], ["../../../packages/analytical/src/export/html-export-template.ts"] |
|
1 | 1.4% |
| ["../../../packages/language/src/reqlan-completion-provider.ts"], ["../../../packages/language/src/reqlan-path-completion.ts"] |
|
1 | 1.4% |
| ["../../../packages/language/src/reqlan-imports.ts"], ["../../../packages/language/src/reqlan-file-link-resolver.ts"] |
|
1 | 1.4% |
| ["../../../packages/language/src/reqlan-path-completion.ts"], ["../../../packages/language/src/reqlan-completion-provider.ts"], ["../../../packages/language/src/reqlan-completion-context.ts"] |
|
1 | 1.4% |
| ["../../../packages/language/src/reqlan-validator.ts"] |
|
1 | 1.4% |
| ["../../packages/analytical/src/core/create-base.ts"], ["../../packages/cli/src/commands/init.ts"], ["../../packages/extension/src/analytical_submodule/index-store/index-service.ts"] |
|
1 | 1.4% |
| ["../../packages/analytical/src/core/rqignore.ts"], ["../../packages/analytical/src/core/application-memory.ts"], ["../../packages/analytical/src/core/create-base.ts"], ["../../packages/analytical/src/core/base-discovery.ts"], ["../../packages/analytical/src/index-store/workspace-index.ts"] |
|
1 | 1.4% |
| ["../../packages/analytical/src/export/build-export-snapshot.ts"], ["../../packages/analytical/src/export/html-export-assets.ts"], ["../../packages/analytical/src/export/html-export-template.ts"], ["../../packages/analytical/src/index-store/webview-graph-queries.ts"], ["../../packages/extension/src/analytical_submodule/export/register-export-commands.ts"] |
|
1 | 1.4% |
| ["../../packages/analytical/src/export/html-export-assets.ts"], ["../../packages/analytical/src/export/html-export-template.ts"], ["../../packages/analytical/src/export/build-export-snapshot.ts"] |
|
1 | 1.4% |
| ["../../packages/analytical/src/export/html-export-template.ts"], ["../../packages/analytical/src/export/html-export-assets.ts"] |
|
1 | 1.4% |
| ["../../packages/analytical/src/export/html-export-template.ts"], ["../../packages/analytical/src/export/html-export-assets.ts"], ["../../packages/analytical/src/export/html-export-utils.ts"] |
|
1 | 1.4% |
| ["../../packages/analytical/src/export/types.ts"], ["../../packages/analytical/src/export/build-export-snapshot.ts"], ["../../packages/analytical/src/export/html-export-template.ts"], ["../../packages/analytical/src/export/html-export-assets.ts"], ["../../packages/cli/src/commands/export.ts"], ["../../site/scripts/export-spec.mts"] |
|
1 | 1.4% |
| ["../../packages/analytical/src/export/types.ts"], ["../../packages/analytical/src/export/build-export-snapshot.ts"], ["../../packages/analytical/src/export/html-export-template.ts"], ["../../packages/analytical/src/export/html-export-utils.ts"], ["../../packages/analytical/src/export/write-html-export.ts"], ["../../packages/language/src/reqlan-path-resolve.ts"], ["../../packages/extension/schemas/config.schema.json"], ["../../packages/extension/src/analytical_submodule/export/register-export-commands.ts"] |
|
1 | 1.4% |
| ["../../packages/analytical/src/export/types.ts"], ["../../packages/analytical/src/export/build-export-snapshot.ts"], ["../../packages/analytical/src/export/html-export-template.ts"], ["../../packages/analytical/src/export/write-html-export.ts"] |
|
1 | 1.4% |
| ["../../packages/analytical/src/export/types.ts"], ["../../packages/analytical/src/export/html-export-utils.ts"], ["../../packages/analytical/src/export/build-export-snapshot.ts"], ["../../packages/analytical/src/export/html-export-template.ts"], ["../../packages/cli/src/commands/export.ts"], ["../../site/scripts/export-spec.mts"] |
|
1 | 1.4% |
| ["../../packages/extension/src/analytical_submodule/export/export-form-panel.ts"], ["../../packages/extension/src/analytical_submodule/export/export-form-messages.ts"], ["../../packages/extension/webviews/export-form/"], ["../../packages/analytical/src/export/export-html.ts"], ["../../packages/analytical/src/export/write-html-export.ts"] |
|
1 | 1.4% |
| ["../../packages/extension/src/analytical_submodule/export/register-export-commands.ts"], ["../../packages/extension/src/analytical_submodule/export/export-form-panel.ts"], ["../../packages/extension/src/analytical_submodule/export/export-settings.ts"], ["../../packages/extension/src/analytical_submodule/export/export-form-settings-types.ts"], ["../../packages/extension/webviews/export-form/"], ["../../packages/analytical/src/export/export-html.ts"], ["../../packages/analytical/src/export/write-html-export.ts"], ["../../packages/analytical/src/export/types.ts"] |
|
1 | 1.4% |
| ["../../packages/language/src/reqlan-idea-reference-site.ts"], ["../../packages/language/src/reqlan-reference-search-site.ts"], ["../../packages/language/src/reqlan-code-action-provider.ts"], ["../../packages/extension/src/extension/reference-search-panel.ts"], ["../../packages/extension/src/extension/reference-search-import-path.ts"], ["../../packages/extension/src/extension/reference-search-scoring.ts"], ["../../packages/extension/src/extension/register-import-error-commands.ts"] |
|
1 | 1.4% |
| ["../../packages/language/src/reqlan-parse-budget.ts"], ["../../packages/language/src/reqlan-async-parser.ts"], ["../../packages/language/src/reqlan-parse-worker.ts"], ["../../packages/language/src/reqlan-document-factory.ts"], ["../../packages/language/src/reqlan-module.ts"], ["../../packages/language/src/reqlan-workspace-manager.ts"] |
|
1 | 1.4% |
| ["../../packages/language/src/reqlan-path-resolve.ts"], ["../../packages/language/src/file-path-rewrite.ts"], ["../../packages/language/src/reqlan-completion-provider.ts"], ["../../packages/language/src/reqlan-path-completion.ts"] |
|
1 | 1.4% |
| ["../../packages/language/src/reqlan-path-resolve.ts"], ["../../packages/language/src/file-path-rewrite.ts"], ["../../packages/language/src/reqlan-completion-provider.ts"], ["../../packages/language/src/reqlan-path-completion.ts"], ["../../packages/extension/schemas/config.schema.json"] |
|
1 | 1.4% |
| ["../../packages/language/src/reqlan.langium"], ["../../packages/language/src/reqlan-import-bindings.ts"], ["../../packages/language/src/reqlan-validator.ts"], ["../../packages/language/src/reqlan-scope.ts"] |
|
1 | 1.4% |
| ["../../packages/language/src/reqlan.langium"], ["../../packages/language/src/reqlan-token-builder.ts"], ["../../packages/language/src/reqlan-validator.ts"], ["../../packages/language/src/reqlan-workspace-manager.ts"] |
|
1 | 1.4% |
| ["../../packages/language/src/reqlan.langium"], ["../../packages/language/src/reqlan-validator.ts"] |
|
1 | 1.4% |
| ["../scripts/export-spec.mts"], ["../scripts/verify-static-export.mts"], ["../scripts/build-static.mts"] |
|
1 | 1.4% |
| ["../scripts/sync-presentations.mts"], ["../src/lib/parse-jsonc.ts"] |
|
1 | 1.4% |
| ["../src/app/tutorials/page.tsx"], ["../src/app/tutorials/[slug]/page.tsx"], ["../src/app/presentations/player/page.tsx"], ["../src/content/tutorials.ts"], ["../src/components/TutorialPlayerShell.tsx"], ["../src/components/PresentationPlayer.tsx"], ["../scripts/sync-presentations.mts"], ["../src/lib/parse-jsonc.ts"] |
|
1 | 1.4% |
| ["../src/components/TutorialPlayerShell.tsx"], ["../src/components/TutorialPlayerShell.module.css"] |
|
1 | 1.4% |
| ["@/site/src/content/showcases.ts"] |
|
1 | 1.4% |
| ["@/site/src/content/showcases.ts"], ["@/site/src/app/showcase"], ["@/site/src/views/ShowcaseListPage.tsx"], ["@/site/src/views/ShowcaseDetailPage.tsx"] |
|
1 | 1.4% |
| [application_memory_impl], [path_resolve], ["../../packages/extension/schemas/config.schema.json"] |
|
1 | 1.4% |
| [application_memory_impl], [workspace_index], [base_registry] |
|
1 | 1.4% |
| [AttributesTable], [webview_table_queries], [ideas_summary_panel] |
|
1 | 1.4% |
| [base_discovery], [base_registry] |
|
1 | 1.4% |
| [base_discovery], [base_registry], [application_memory_impl] |
|
1 | 1.4% |
| [base_discovery], [editor_index_adapter] |
|
1 | 1.4% |
| [base_registry], [base_discovery], [editor_index_adapter], [analysis_runtime] |
|
1 | 1.4% |
| [BasesTable], ["../../../../packages/extension/webviews/ideas-summary/lib/bases-filter.ts"] |
|
1 | 1.4% |
| [ColumnFilterRow], [TableToolbar], [webview_table_queries], [IdeasTable], [IdeasetsTable], [ReferencesTable], [AttributesTable], [BasesTable] |
|
1 | 1.4% |
| [create_base_impl], [editor_index_adapter], [register_commands], ["../../packages/extension/webviews/activity-bar/components/WorkspacePane.svelte"], ["../../packages/extension/webviews/ideas-summary/components/StatusBar.svelte"] |
|
1 | 1.4% |
| [diagnostics_panel], ["../../packages/extension/src/diagnostics_module/register-index-diagnostics.ts"], ["../../packages/extension/webviews/index-diagnostics/"] |
|
1 | 1.4% |
| [diagnostics_store], ["../../packages/analytical/src/index-store/workspace-index-file.ts"], ["../../packages/analytical/src/index-store/workspace-index-sync.ts"], [workspace_index] |
|
1 | 1.4% |
| [editor_index_adapter], [base_registry], [workspace_index], ["../../packages/extension/src/activity_bar_module/activity-bar-webview-provider.ts"], ["../../packages/extension/src/webview_module/ideas-summary-panel.ts"], ["../extension/module/activitybar-panels/workspace.rq".workspace_base_picker], ["../extension/module/ideas_summary/base-scope.rq".ideas_summary_base_scope] |
|
1 | 1.4% |
| [ideas_summary_panel] |
|
1 | 1.4% |
| [IdeasTable], [ReferencesTable], [webview_table_queries] |
|
1 | 1.4% |
| [OverviewPanel], [ideas_summary_panel] |
|
1 | 1.4% |
| [OverviewPanel], [ideas_summary_panel], ["../../../../packages/analytical/src/index-store/overview-coverage.ts"] |
|
1 | 1.4% |
| [OverviewPanel], [ideas_summary_panel], [webview_table_queries] |
|
1 | 1.4% |
| [path_resolve] |
|
1 | 1.4% |
| [rqignore_impl], [application_memory_impl], ["../../../packages/analytical/src/core/create-base.ts"], ["../../../packages/analytical/src/core/base-discovery.ts"], ["../../../packages/analytical/src/index-store/workspace-index.ts"] |
|
1 | 1.4% |
| [TableOptionsMenu], [table_ui_state], [ideas_summary_panel] |
|
1 | 1.4% |
| [TimelinePanel], [ideas_summary_panel], ["../../../../packages/analytical/src/index-store/sqlite-store.ts"], ["../../../../packages/analytical/src/analysis/git-dates-analyser.ts"] |
|
1 | 1.4% |
| Idea | Value | Status | Tags | Summary |
|---|---|---|---|---|
| active_base_switch | [editor_index_adapter], [base_registry], [workspace_index], ["../../packages/extension/src/activity_bar_module/activity-bar-webview-provider.ts"], ["../../packages/extension/src/webview_module/ideas-summary-panel.ts"], ["../extension/module/activitybar-panels/workspace.rq".workspace_base_picker], ["../extension/module/ideas_summary/base-scope.rq".ideas_summary_base_scope] | done | Changing 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/features-graph-analysers.rq".indexing_trigger_open], not a special switcher rebuild. - Idle staleness checks also heal unopened / never-synced bases ( they cannot mtime-diff without a store ). - `activateAll` isolates open failures 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. Surfaces: activity bar ["../extension/module/activitybar-panels/workspace.rq".workspace_base_picker], Ideas Summary ["../extension/module/ideas_summary/base-scope.rq".ideas_summary_base_scope]. Implemented by [editor_index_adapter] ( `setActiveBaseId` / `scheduleBaseCatchUp` ); engine: [base_registry] `ensureBaseReady`, [workspace_index] `ensureReady`. | |
| base | [base_discovery], [base_registry], [application_memory_impl] | 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]. | ||
| base_configuration | [path_resolve] | 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]. | ||
| base_configuration_provider | [application_memory_impl], [path_resolve], ["../../packages/extension/schemas/config.schema.json"] | Base-level settings live at `<base>/.reqlan/config.json`. Extension-level settings remain VS Code configuration for the product host. | ||
| base_nesting | [base_discovery], [base_registry] | 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] ). | ||
| base_ownership | [application_memory_impl], [workspace_index], [base_registry] | 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]. | ||
| create_base_onboarding | [create_base_impl], [editor_index_adapter], [register_commands], ["../../packages/extension/webviews/activity-bar/components/WorkspacePane.svelte"], ["../../packages/extension/webviews/ideas-summary/components/StatusBar.svelte"] | 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 ), rediscovers, and activates indexing for that base. With multiple workspace folders and no bases, prompt against the first folder. Headless create-base helper: [create_base_impl] ( also used by CLI `init` ). | ||
| implied_context | [base_discovery], [editor_index_adapter] | 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]. | ||
| multi_base_environment | [base_registry], [base_discovery], [editor_index_adapter], [analysis_runtime] | 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]. | ||
| init | ["../../packages/analytical/src/core/create-base.ts"], ["../../packages/cli/src/commands/init.ts"], ["../../packages/extension/src/analytical_submodule/index-store/index-service.ts"] | done | The 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. | |
| configuration_import_roots | ["../../packages/language/src/reqlan-path-resolve.ts"], ["../../packages/language/src/file-path-rewrite.ts"], ["../../packages/language/src/reqlan-completion-provider.ts"], ["../../packages/language/src/reqlan-path-completion.ts"], ["../../packages/extension/schemas/config.schema.json"] | `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 `@` 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]. Schema: [configuration_schema_file]. Applying file discovery: [configuration_location]. Editor completion of aliased import paths: ["./syntax/features-syntax.rq".code_completion]. | ||
| configuration_rqignore | ["../../packages/analytical/src/core/rqignore.ts"], ["../../packages/analytical/src/core/application-memory.ts"], ["../../packages/analytical/src/core/create-base.ts"], ["../../packages/analytical/src/core/base-discovery.ts"], ["../../packages/analytical/src/index-store/workspace-index.ts"] | done | Each 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, `*.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 ( ["./module/index.rq".rqignore] ). Missing or unreadable `.rqignore` still uses built-in defaults. Location convention: [configuration_location]. Application memory: ["./module/index.rq".application_memory]. | |
| search_code_actions | ["../../packages/language/src/reqlan-idea-reference-site.ts"], ["../../packages/language/src/reqlan-reference-search-site.ts"], ["../../packages/language/src/reqlan-code-action-provider.ts"], ["../../packages/extension/src/extension/reference-search-panel.ts"], ["../../packages/extension/src/extension/reference-search-import-path.ts"], ["../../packages/extension/src/extension/reference-search-scoring.ts"], ["../../packages/extension/src/extension/register-import-error-commands.ts"] | done | when 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. 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 | |
| export_webview | ["../../packages/extension/src/analytical_submodule/export/export-form-panel.ts"], ["../../packages/extension/src/analytical_submodule/export/export-form-messages.ts"], ["../../packages/extension/webviews/export-form/"], ["../../packages/analytical/src/export/export-html.ts"], ["../../packages/analytical/src/export/write-html-export.ts"] | partial | The extension should provide a single export webview for exporting the requirement graph in various formats ( [json_export], [csv_export], [html_export.html_export], and later formats such as pdf ). This generalizes the current HTML-only [html_export.html_export_form]: format choice is primary, and format-specific options ( e. g. HTML runtime mode, template, page families ) appear when that format is selected. Shared options: scope, output folder, and export name; defaults persist to ["./module/index.rq".application_memory] as `export_settings.json` under `<workspace>/.reqlan/`. While an export runs, the form should show a loading state with live progress ( phase message and, when known, completed / total or percent ) so the user can see HTML ( and other formats ) being built — not only a disabled button. The user should be able to open it from: - a link / control in the main [ideas_summary] chrome ( status bar or header ) - the [command_palette] | |
| html_export_attribute_pages | ["../../packages/analytical/src/export/types.ts"], ["../../packages/analytical/src/export/build-export-snapshot.ts"], ["../../packages/analytical/src/export/html-export-template.ts"], ["../../packages/analytical/src/export/write-html-export.ts"], ["../../packages/language/src/reqlan-path-resolve.ts"], ["../../packages/extension/schemas/config.schema.json"], ["../../packages/extension/src/analytical_submodule/export/register-export-commands.ts"] | 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. | ||
| html_export_attributes_index | ["../../packages/analytical/src/export/types.ts"], ["../../packages/analytical/src/export/build-export-snapshot.ts"], ["../../packages/analytical/src/export/html-export-template.ts"], ["../../packages/analytical/src/export/write-html-export.ts"] | 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. | ||
| html_export_code_reference_pages | ["../../packages/analytical/src/export/types.ts"], ["../../packages/analytical/src/export/build-export-snapshot.ts"], ["../../packages/analytical/src/export/html-export-template.ts"], ["../../packages/analytical/src/export/html-export-utils.ts"], ["../../packages/analytical/src/export/write-html-export.ts"], ["../../packages/language/src/reqlan-path-resolve.ts"], ["../../packages/extension/schemas/config.schema.json"], ["../../packages/extension/src/analytical_submodule/export/register-export-commands.ts"] | Html export should generate dedicated pages for outbound file_reference targets 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. | ||
| html_export_file_pages | ["../../packages/analytical/src/export/types.ts"], ["../../packages/analytical/src/export/build-export-snapshot.ts"], ["../../packages/analytical/src/export/html-export-template.ts"], ["../../packages/analytical/src/export/write-html-export.ts"], ["../../packages/language/src/reqlan-path-resolve.ts"], ["../../packages/extension/schemas/config.schema.json"], ["../../packages/extension/src/analytical_submodule/export/register-export-commands.ts"] | 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. | ||
| html_export_form | ["../../packages/extension/src/analytical_submodule/export/register-export-commands.ts"], ["../../packages/extension/src/analytical_submodule/export/export-form-panel.ts"], ["../../packages/extension/src/analytical_submodule/export/export-settings.ts"], ["../../packages/extension/src/analytical_submodule/export/export-form-settings-types.ts"], ["../../packages/extension/webviews/export-form/"], ["../../packages/analytical/src/export/export-html.ts"], ["../../packages/analytical/src/export/write-html-export.ts"], ["../../packages/analytical/src/export/types.ts"] | partial | HTML export options are hosted inside the general ["./features-export.rq".export_webview] ( not a separate HTML-only panel long-term ). When format is HTML: simple options include scope, output folder, export name, and runtime mode. Advanced HTML settings should be collapsed by default behind an expandable section ( template, cluster strategy, page-family toggles, file filters, url base, header link, print entry, neighbourhood graph node cap ). File filters: exclude `*.secret.rq` ideas ( `excludeSecretFiles` ) and / or exclude paths matched by `.reqlan/.rqignore` ( `excludeIgnoredFiles` ); both default off so indexed ideas from those files are included unless opted out. Form defaults persist to ["./module/index.rq".application_memory] as `export_settings.json` under `<workspace>/.reqlan/` ( shared with other export formats ). Saving settings or running export writes that file; reopening the form reloads the last values. HTML export still calls `@reqlan/analytical` `exportHtml` with an `ExportRequest` built from the form. While export runs, the webview shows progress from the analytical pipeline ( snapshot phases, then write completed / total ) via `exportProgress` messages — see ["./features-export.rq".export_webview]. Current implementation is HTML-only and should be generalized; until then the existing panel satisfies the HTML path. | |
| html_export_graph_animation | ["../../packages/analytical/src/export/html-export-assets.ts"], ["../../packages/analytical/src/graph/physics-core.js"], ["../../packages/extension/webviews/shared/graph/graph-physics.ts"] | Live physics in the HTML export should match Ideas Summary animatePhysics: continuous damped semi-implicit Euler using the defaults from ["../../packages/analytical/src/graph/physics-core.js"] ( same module as ["../../packages/extension/webviews/shared/graph/graph-physics.ts"] ). A Live physics toggle pauses and resumes the same simulation state ( default off ); when off, the graph batch-settles then sleeps. Simulation should converge and sleep when calm, waking on filter changes or when Live physics is turned back on, aligned with [layout_physics]. Large graphs use a spatial grid + repulsion cutoff in the shared core; all nodes and full labels remain visible. | ||
| html_export_graph_interaction | ["../../packages/analytical/src/export/html-export-assets.ts"], ["../../packages/analytical/src/export/html-export-template.ts"] | The interactive export graph should support dragging nodes and panning or zooming the viewport, aligned with [view_controls] and [manual_reframe]. Click-through to idea pages must remain available after drag via click-versus-drag discrimination. A Fit control should reframe the viewport to the current node set without restarting layout or clearing live physics state. Zoom and Fit must continuously drive [graph_label_auto] / [html_export_graph_label_auto] opacity when Labels is in auto mode. | ||
| html_export_graph_label_auto | ["../../packages/analytical/src/export/html-export-assets.ts"] | done | Export-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. Zoom and Fit from [html_export_graph_interaction] / [manual_reframe] update opacity each paint. | |
| html_export_graph_label_modes | ["../../packages/analytical/src/export/html-export-assets.ts"], ["../../packages/analytical/src/export/html-export-template.ts"] | done | Export-surface wiring for [graph_label_modes]: Labels control on every interactive export graph cycles auto / on / off; Reset restores auto. | |
| html_export_graph_labels | ["../../packages/analytical/src/export/html-export-assets.ts"] | HTML export canvas graphs implement shared [graph_labels] ( full names, no ellipsis truncation ). [html_export_graph_label_modes] [html_export_graph_label_auto] | ||
| html_export_graph_layout | ["../../packages/analytical/src/export/html-export-assets.ts"], ["../../packages/analytical/src/graph/physics-core.js"], ["../../packages/extension/webviews/shared/graph/graph-physics.ts"] | The interactive export graph should lay out nodes so labels and circles do not heavily overlap. Initial placement should settle with the same Obsidian-style force model as [layout_physics] ( central gravity, edge springs, inverse-square repulsion ). Rendering uses canvas 2 d ( not SVG DOM ) with shared physics from ["../../packages/analytical/src/graph/physics-core.js"]. | ||
| html_export_graph_links | ["../../packages/analytical/src/export/html-export-template.ts"], ["../../packages/analytical/src/export/html-export-assets.ts"], ["../../packages/analytical/src/export/html-export-utils.ts"] | 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. | ||
| html_export_graph_metadata | ["../../packages/analytical/src/export/html-export-assets.ts"], ["../../packages/analytical/src/export/html-export-template.ts"], ["../../packages/analytical/src/export/build-export-snapshot.ts"] | Graph nodes in the HTML export should surface tags, status, and attribute keys on or beside the node, not only as filter inputs. Attribute values declared on the idea should be reachable from the graph via the idea page and on-node attribute key summary. | ||
| html_export_graph_page | ["../../packages/analytical/src/export/build-export-snapshot.ts"], ["../../packages/analytical/src/export/html-export-assets.ts"], ["../../packages/analytical/src/export/html-export-template.ts"], ["../../packages/analytical/src/index-store/webview-graph-queries.ts"], ["../../packages/extension/src/analytical_submodule/export/register-export-commands.ts"] | 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. 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_subject] [html_export_graph_labels] [html_export_graph_label_modes] [html_export_graph_label_auto] [html_export_graph_interaction] [html_export_graph_metadata] | ||
| html_export_graph_subject | ["../../packages/analytical/src/export/html-export-template.ts"], ["../../packages/analytical/src/export/html-export-assets.ts"] | When a graph view has a subject or center idea, that node should be visually distinct from peers and externals. Subject styling should use the brand rust accent against cyan peer nodes. | ||
| html_export_header_link | ["../../packages/analytical/src/export/types.ts"], ["../../packages/analytical/src/export/build-export-snapshot.ts"], ["../../packages/analytical/src/export/html-export-template.ts"], ["../../packages/analytical/src/export/html-export-assets.ts"], ["../../packages/cli/src/commands/export.ts"], ["../../site/scripts/export-spec.mts"] | done | Html 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/reqs/core.rq".spec_html_export]. Often paired with [html_export_url_base] when the export is mounted under a parent static site. | |
| html_export_list_views | ["../../packages/analytical/src/export/html-export-assets.ts"], ["../../packages/analytical/src/export/html-export-template.ts"] | 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. Long lists that sit above other page content follow [html_export_scrollable_lists]. [html_export_attributes_index] [html_export_file_pages] [html_export_code_reference_pages] [html_export_scrollable_lists] | ||
| html_export_scrollable_lists | ["../../packages/analytical/src/export/html-export-assets.ts"], ["../../packages/analytical/src/export/html-export-template.ts"] | 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. | ||
| html_export_url_base | ["../../packages/analytical/src/export/types.ts"], ["../../packages/analytical/src/export/html-export-utils.ts"], ["../../packages/analytical/src/export/build-export-snapshot.ts"], ["../../packages/analytical/src/export/html-export-template.ts"], ["../../packages/cli/src/commands/export.ts"], ["../../site/scripts/export-spec.mts"] | done | Html 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/reqs/core.rq".spec_html_export]. Often paired with [html_export_header_link] when the export is mounted under a parent static site. | |
| index_diagnostics_metrics | [diagnostics_store], ["../../packages/analytical/src/index-store/workspace-index-file.ts"], ["../../packages/analytical/src/index-store/workspace-index-sync.ts"], [workspace_index] | done | For 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]. | |
| index_diagnostics_webview | [diagnostics_panel], ["../../packages/extension/src/diagnostics_module/register-index-diagnostics.ts"], ["../../packages/extension/webviews/index-diagnostics/"] | done | An editor webview panel displays index timing diagnostics for the active base. Capabilities: - Base / latest-run summary: total time, file counts, average depth - Drill into recent runs - Rank files by duration ( slowest first ); show outcome and path depth Opened by command `reqlan.openIndexDiagnostics` ( [commands.open_index_diagnostics] ). Optional entry from workspace index health ( [workspace_pane.workspace_pane] ) may link later; command is the primary entry. Implementation: [diagnostics_panel], [DiagnosticsApp]. | |
| anonymous_reference_code_completion | ["../../../packages/language/src/reqlan-path-completion.ts"], ["../../../packages/language/src/reqlan-completion-provider.ts"], ["../../../packages/language/src/reqlan-completion-context.ts"] | Anonymous imports should share the same code completion e. g. ["@/reqlan rq/extension/code_completion.rq"] should complete the same as `import "@/reqlan rq/extension/code_completion.rq" as code_completion`. they should share the same code and logic | ||
| implicit_file_extension | ["../../../packages/language/src/reqlan-imports.ts"], ["../../../packages/language/src/reqlan-file-link-resolver.ts"] | 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. A path that already carries any extension is resolved exactly as written. | ||
| import_code_completion_explicit_extension | ["../../../packages/language/src/reqlan-path-completion.ts"], ["../../../packages/language/src/reqlan-completion-provider.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`. | ||
| import_code_completion_path_segments | ["../../../packages/language/src/reqlan-path-completion.ts"], ["../../../packages/language/src/reqlan-completion-provider.ts"] | In a folder context, show next path segments ( directories with a trailing `/` ). After `../`, offer `../path/` before nested `../path/file.rq`. | ||
| import_code_completion_ranking | ["../../../packages/language/src/reqlan-path-completion.ts"], ["../../../packages/language/src/reqlan-completion-provider.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. | ||
| import_code_completion_substring_match | ["../../../packages/language/src/reqlan-path-completion.ts"], ["../../../packages/language/src/reqlan-completion-provider.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 ). | ||
| import_does_not_exist_error | ["../../../packages/language/src/reqlan-validator.ts"] | Imports show an underline error when the target file does not exist. Imports also show an underline error when a named imported idea does not exist in the target file. [general_errors] | ||
| graph_label_auto | ["../../../packages/extension/webviews/shared/graph/graph-cy-controller.ts"], ["../../../packages/analytical/src/export/html-export-assets.ts"] | done | In Labels auto mode, visibility follows viewport zoom continuously rather than a hard cut. 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 ). 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. | |
| graph_label_modes | ["../../../packages/extension/webviews/shared/graph/graph-cy-controller.ts"], ["../../../packages/extension/webviews/ideas-summary/components/GraphControls.svelte"], ["../../../packages/extension/src/webview_module/shared/graph-ui-state.ts"], ["../../../packages/analytical/src/export/html-export-assets.ts"], ["../../../packages/analytical/src/export/html-export-template.ts"] | done | Every 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 ["../module/ideas_summary/graphical_graph.rq".graph_ui_persistence]. HTML export: control in ["../../../packages/analytical/src/export/html-export-template.ts"] / ["../../../packages/analytical/src/export/html-export-assets.ts"]. Driven by the same viewport zoom as [view_controls]. | |
| graph_status_tag_filters | ["../../../packages/analytical/src/core/filter-specials.ts"], ["../../../packages/analytical/src/export/build-export-snapshot.ts"], ["../../../packages/analytical/src/export/html-export-template.ts"], ["../../../packages/analytical/src/export/html-export-assets.ts"], ["../../../packages/analytical/src/export/html-export-utils.ts"], ["../../../packages/analytical/src/index-store/webview-graph-queries.ts"], ["../../../packages/analytical/src/index-store/sqlite-store.ts"], ["../../../packages/extension/webviews/ideas-summary/components/SearchableCheckboxDropdown.svelte"], ["../../../packages/extension/webviews/ideas-summary/components/GraphControls.svelte"], ["../../../packages/extension/webviews/ideas-summary/components/GraphView.svelte"], ["../../../packages/extension/src/webview_module/shared/messages.ts"] | done | Status 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 ["../../../packages/analytical/src/export/html-export-assets.ts"]. | |
| ideas_summary_base_scope | [ideas_summary_panel] | done | bases, ideas-summary, multi-base | Ideas Summary is scoped to one ["bases".base] at a time. - Active base defaults to the longest-matching base root for the focused editor ( [bases.implied_context] ). - Chrome includes an explicit base switcher; Overview, Bases, Ideas, Ideasets, Attributes, References, Graph, Timeline, and Index tabs bind to the selected base's index only ( Bases lists all discovered bases; Index is last ). - Switching base is a pointer swap ( [bases.active_base_switch] ): pin via `setActiveBaseId`, rebind status / tables / graph UI immediately — do not await sync on the switch call; not-ready bases get fire-and-forget open + soft-sync catch-up. - Graph UI persistence is per-base: workspaceState key `reqlan.ideasSummary.graphUi.<baseId>` via [graph_ui_state]. - Activity bar " Open in Ideas Summary " passes the current active base id into [ideas_summary_panel]. - No merged cross-base tables or graphs in this pass ( [bases.multi_base_environment] ). |
| attributes_tab | [AttributesTable], [webview_table_queries], [ideas_summary_panel] | Attributes index for the active base, aligned with [html_export.html_export_attributes_index]: attribute key, idea count, distinct value count, sample values. Searchable and filterable; clicking a key opens Ideas with that attribute column enabled. Aggregated in [webview_table_queries] / sqlite store. | ||
| bases_tab | [BasesTable], ["../../../../packages/extension/webviews/ideas-summary/lib/bases-filter.ts"] | done | Table 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. | |
| group_by_type | [IdeasTable], [ReferencesTable], [webview_table_queries] | Ideas table can group by idea kind ( block / oneliner ). References table can group by reference type ( file / comment / sub-idea ). Grouping is a toolbar toggle; rows are ordered by group then the active sort; UI shows collapsible group headers. | ||
| ontology_aligned_tabs | ["../../../../packages/extension/webviews/ideas-summary/lib/tabs.ts"], ["../../../../packages/extension/webviews/ideas-summary/components/TabPanels.svelte"] | Tab order: Overview, Bases, Ideas, Ideasets, Attributes, References, Graph, Timeline, Index. Index is last — workspace index health and maintenance, not the primary browsing surface. Covers [ontology.base], [ontology.idea], [ontology.ideaset], [ontology.attribute], [ontology.reference], the graph cartography tab, and [timeline_page]; Overview mirrors HTML export home metrics lightly. Files / clusters / print families stay export-only for now. | ||
| overview_coverage_scores | [OverviewPanel], [ideas_summary_panel], ["../../../../packages/analytical/src/index-store/overview-coverage.ts"] | done | overview, coverage, metrics | Collapsible " Coverage " section on [overview_page] / [OverviewPanel]. Product-facing metrics for how thoroughly ideas map into the active base's project files ( respecting ["../../configuration.rq".configuration_rqignore] ): - Linked files: percent of project files ( non-requirement, non-ignored ) that ideas reference — exact path match after resolve, or under a referenced folder. Show " N of M project files ". - Requirement density: ideas per thousand lines of eligible project code; also show idea count and line count. - Linked paths: distinct files or folders referenced from ideas. - Requirement files: count of requirement documents in the base. Collapsed by default. Calculate only when the user expands the section ( not on Overview open / tab switch ). Non-blocking: host work must not stall Overview chrome or other tabs; show a loading state until the result arrives. When the index is not ready or calculation fails, show a clear message — never fake zero scores. Recalculate on expand when the active base changes or when the user refreshes; otherwise reuse the last result for the session. |
| overview_page | [OverviewPanel], [ideas_summary_panel] | First tab: a workspace overview for the active base — product-facing copy ( not index / debug jargon ). - At a glance: idea count, reference count, issues, bases, and a friendly readiness status. - Coverage: collapsible [overview_coverage_scores] ( lazy, non-blocking ). - Search: live cross-surface search over ideas, ideasets, attributes, and references for the active base; results group by surface with sample hits and actions to open the matching tab with the query applied ( [overview_search] ). - Export: buttons that open export functionality — Export form / HTML, and PDF ( [features_export.export_webview], [features_export] pdf path ). - Links: project site, support / email, GitHub. - Recent changes preview ( idea names when available ) with a link to [timeline_page]. | ||
| overview_search | [OverviewPanel], [ideas_summary_panel], [webview_table_queries] | Overview search fans out across Ideas, Ideasets, Attributes, and References using the same ui-sql filters as those tabs. Debounced; returns counts plus a short sample of hits per surface; clicking a hit opens the idea ( or the attribute → Ideas handoff ); " Open in … " applies the search string on that tab. | ||
| table_column_filters | [ColumnFilterRow], [TableToolbar], [webview_table_queries], [IdeasTable], [IdeasetsTable], [ReferencesTable], [AttributesTable], [BasesTable] | done | Every 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. 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]. | |
| table_column_options | [TableOptionsMenu], [table_ui_state], [ideas_summary_panel] | Each table has an Options control ( [TableOptionsMenu] ) to show or hide columns. Visibility persists per tab in workspaceState via [table_ui_state]. | ||
| timeline_page | [TimelinePanel], [ideas_summary_panel], ["../../../../packages/analytical/src/index-store/sqlite-store.ts"], ["../../../../packages/analytical/src/analysis/git-dates-analyser.ts"] | done | timeline, ideas, git | Timeline 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 ) Opening the tab backfills missing git dates via the `git_dates` analyser ( capped batch ) so the feed is useful without visiting every idea in the Activity Bar. 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. |
| index_diagnostics_store | ["../../../packages/analytical/src/index-store/index-diagnostics-store.ts"], [application_memory_impl] | done | Per-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 ["../features-index-diagnostics.rq".index_diagnostics_metrics]. Webview: ["../features-index-diagnostics.rq".index_diagnostics_webview]. | |
| rqignore | [rqignore_impl], [application_memory_impl], ["../../../packages/analytical/src/core/create-base.ts"], ["../../../packages/analytical/src/core/base-discovery.ts"], ["../../../packages/analytical/src/index-store/workspace-index.ts"] | 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, VCS / editor stores, database files ( `*.db3`, sqlite ), secrets, and hidden entries; new bases seed the file via create-base. Product configuration statement: [configuration.configuration_rqignore]. | |
| code_completion | ["../../../packages/language/src/reqlan-completion-provider.ts"], ["../../../packages/language/src/reqlan-path-completion.ts"] | The extension should support sensible code completion. - support for references - support for imports, including import-root alias paths such as `@/` from ["../../language/imports.rq".configuration_import_root_alias] and ["../configuration.rq".configuration_import_roots] - support for semantic search - support for graph-proximity based ranking | ||
| configuration_import_root_alias | ["../../packages/language/src/reqlan-path-resolve.ts"], ["../../packages/language/src/file-path-rewrite.ts"], ["../../packages/language/src/reqlan-completion-provider.ts"], ["../../packages/language/src/reqlan-path-completion.ts"] | 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]. Completion: ["../extension/syntax/features-syntax.rq".code_completion]. | ||
| import_error_recovery | ["../../packages/language/src/reqlan.langium"], ["../../packages/language/src/reqlan-validator.ts"] | 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]. | ||
| import_tokenisation | ["../../packages/language/src/reqlan.langium"], ["../../packages/language/src/reqlan-import-bindings.ts"], ["../../packages/language/src/reqlan-validator.ts"], ["../../packages/language/src/reqlan-scope.ts"] | 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/syntax/features-syntax.rq".sensible_alias_support]. | ||
| parse_budget_timeout | ["../../packages/language/src/reqlan-parse-budget.ts"], ["../../packages/language/src/reqlan-async-parser.ts"], ["../../packages/language/src/reqlan-parse-worker.ts"], ["../../packages/language/src/reqlan-document-factory.ts"], ["../../packages/language/src/reqlan-module.ts"], ["../../packages/language/src/reqlan-workspace-manager.ts"] | done | Lexing, parsing, or a parse subprocess for a single `.rq` file must finish within a wall-clock budget. 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. | |
| context_sensitive_lexer_scaling | ["../../packages/language/src/reqlan-token-builder.ts"] | done | Context-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]. | |
| nested_curly_braces | ["../../packages/language/src/reqlan-token-builder.ts"] | 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. | ||
| no_name_idea_safe_warning | ["../../packages/language/src/reqlan.langium"], ["../../packages/language/src/reqlan-token-builder.ts"], ["../../packages/language/src/reqlan-validator.ts"], ["../../packages/language/src/reqlan-workspace-manager.ts"] | done | A 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]. | |
| spec_html_export | ["../scripts/export-spec.mts"], ["../scripts/verify-static-export.mts"], ["../scripts/build-static.mts"] | 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. Pipeline: ["../scripts/build-static.mts"] → ["../scripts/export-spec.mts"] → ["../scripts/verify-static-export.mts"]. Host options come from [html_export.html_export] / CLI [cli_package.commands]. | |
| sync_presentations | ["../scripts/sync-presentations.mts"], ["../src/lib/parse-jsonc.ts"] | done | `scripts/sync-presentations.mts` reads authored `*.jsonc` decks and `manifest.jsonc`, emits comment-free `*.json` for the static player, and syncs assets / vendor into `public/presentations/`. | |
| tutorial_location_crumb | ["../src/components/TutorialPlayerShell.tsx"], ["../src/components/TutorialPlayerShell.module.css"] | done | Tutorial detail chrome shows a compact location trail: catalog → course → lesson → slide. Hierarchy must be obvious without a wide single-line title dump. Layout: each tier is a stacked chip — role ( and optional completion control ) on the top row; title / index value muted underneath. Titles colour up on hover, focus-within, or when the peer menu is open. * * Folder navigation: * * each tier acts like a path segment / folder. Hover or focus reveals a peer menu for that level of the tree so the user can jump without using the transport row: - catalog → courses ( enter first lesson of the chosen course, or the catalog index ) - course → peer courses - lesson → peer lessons in the active course - slide → peer slides in the active lesson ( updates the embedded player / `?slide=` ) Current peer is marked; menus stay keyboard-reachable via focus-within. * * Sizing: * * the crumb container grows to fit text; wrap before truncating. Ellipsis only as a last resort on very narrow viewports — do not cap chip width so aggressively that titles ellipsize while space remains. Course deep-links also exist at `/tutorials/#course-<series>`; catalog at `/tutorials/`. Slide shows `n/total` and updates live with the embedded player. Completion toggles stay on the role row. The crumb lesson tier always shows the * * current * * lesson only — it must not share hover / preview state with the transport lesson step dots. Step-dot hover may preview a title near the dots, never in the crumb. | |
| tutorials_section | ["../src/app/tutorials/page.tsx"], ["../src/app/tutorials/[slug]/page.tsx"], ["../src/app/presentations/player/page.tsx"], ["../src/content/tutorials.ts"], ["../src/components/TutorialPlayerShell.tsx"], ["../src/components/PresentationPlayer.tsx"], ["../scripts/sync-presentations.mts"], ["../src/lib/parse-jsonc.ts"] | done | The site exposes `/tutorials` and `/tutorials/[slug]/` as statically generated pages. Catalog and deck ids come from authored ["../../presentations/manifest.jsonc"]. Each detail page embeds the Reveal player iframe at `/presentations/player/?deck=<id>` using [assets] / SITE_BASE_PATH-aware `sitePath`. Each detail page hosts a unified transport chrome ( `<<` `<` steps `>` `>>` ) that drives slide nav in the embedded player via postMessage, plus lesson jumps. Location hierarchy chrome: [tutorial_location_crumb]. Blurb and try-this live on the catalog and inside the slides, not as page chrome. The player is an App Router page ( [presentation_player_route] ) so it static-exports under `trailingSlash` without colliding with `public/` HTML. Sync ( [sync_presentations] ) converts authored deck / catalog JSONC under ["../../presentations/"] into runtime JSON under `public/presentations/`, and copies assets plus vendored Reveal. js ( player shell excluded ). | |
| showcase | ["@/site/src/content/showcases.ts"], ["@/site/src/app/showcase"], ["@/site/src/views/ShowcaseListPage.tsx"], ["@/site/src/views/ShowcaseDetailPage.tsx"] | done | site, showcase, content | Every showcase demonstrates a mechanism, not a metaphor. Domain problem, the. rq that binds it, the real artifact in another language it binds to, and the thing the tooling hands back. Content is authored in TS objects per [showcase_module], not generated from this file at runtime. This file is the source of truth for intent, ordering, and editorial rules. |
| showcase_module | ["@/site/src/content/showcases.ts"] | done | Showcases are standardised and typed in TS content objects. 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. |