Attribute detail
status
135 ideas · 6 distinct values
| Value | Distribution | Ideas | Share |
|---|---|---|---|
| done |
|
93 | 68.9% |
| incomplete |
|
30 | 22.2% |
| draft |
|
4 | 3% |
| in-progress |
|
4 | 3% |
| partial |
|
2 | 1.5% |
| pending |
|
2 | 1.5% |
| Idea | Value | Status | Tags | Summary |
|---|---|---|---|---|
| my idea2 | pending | pending | todo, highpriority | it should be compatible with [[myidea]]. [[myidea|We can use obsidian-style-aliases]] which are also supported. |
| cli | done | done | Headless twin of extension / MCP analysis: [cli_package] ( `reqlan` / `rq` ), same `<base>/.reqlan` index. [commands]: `init` · `parse <file>` · `analyse` / `analyze` · `search <query>` · `export` / `export html`. `--json` for machines; `--cwd` / `REQLAN_WORKSPACE`; `REQLAN_INDEX_PATH` overrides index dir. | |
| skills | done | done | rq- * skills ( [chat_skill_naming], [cursor_skills_install] ) teach the graph, not the whole repo. Ontology in one breath — this project as example: - [idea] — named unit of intent ( `cli_package`, `skills` ) - [file] / [ideaset] — containers ( `reqlan rq/cli/cli_package.rq`; file = implicit ideaset ) - [base] — `.reqlan` boundary; one ideas index per base - [reference] — `[idea]` / `[[wiki]]` / `["./path".idea]` to ideas and code - [attribute] / [attribute_body] — `@name …`; first unmarked text is the body Prefer focused search / file context / local graph over full dumps ( [ai_integration] ). | |
| special_attributes | done | done | When creating or updating ideas, skills MUST set: - `@status` — lifecycle ( `draft` | `pending` | `in-progress` | `done` | … ) - `@todo` — open gaps / follow-ups ( bare or with a note ) - `@tests` — quoted test paths that prove the idea ( optional `:test name` suffix ) Do not bury status, todos, or test links in body prose. | |
| active_base_switch | done | 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`. | |
| function_parity | done | done | CLI shares headless function definitions with MCP and other tools through `@reqlan/analytical` `AnalysisApi`, not VS Code host APIs from [extension]. On-disk index storage follows [application_memory] ( same `.reqlan` path as the extension ); optional override via `REQLAN_INDEX_PATH`. | |
| init | done | 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. | |
| incremental_extension_build | done | done | Extension builds fingerprint inputs and outputs per independently cacheable artifact: - Langium generated sources / TextMate grammar - generated shared graph-physics source - logo media - generated marketplace README - each of the five Vite webviews separately - extension-host / language-server / lazy sql. js esbuild outputs A step is skipped only when its command / input fingerprint and current output-content fingerprint both match the cache under `packages/extension/out/`. Missing, changed, or manually edited output invalidates that step. Webview output fingerprints cover each complete emitted directory, including future lazy chunks. Host-bundle inputs include bundled phonebook data and the sql. js vendor source as well as workspace package output. TypeScript retains its native `tsc -b` project-reference incrementality. TextMate syntax copies are cached by content; Cursor-skill sync still runs because it targets workspace-external state. `pnpm run build:force` / `node scripts/build.mjs --force` bypasses all cache entries; `vscode:prepublish` uses this forced mode for release correctness. `clean` removes `out/`, including the cache, so clean builds remain cold. Root `pnpm run build:ext` delegates only to the extension package. The extension build generates Langium / physics artifacts when their fingerprints change, then its `tsc -b` builds language / analytical project references before downstream fingerprints are evaluated. It does not rebuild unrelated CLI, MCP, site, or test projects. | |
| first_paint_startup | done | done | The activity-bar HTML shell is assigned synchronously by ["../../packages/extension/src/activity_bar_module/activity-bar-webview-provider.ts"]. Its Svelte app installs the host message listener before mount, then sends the one-shot `ready` handshake from a task queued after its first animation frame. ["../../packages/extension/src/extension/startup-gate.ts"] resolves that handshake once; `IndexService.activate` then discovers bases and syncs. If no view opens, a bounded three-second fallback starts the index without any visible first paint to contend with. Parser services inside each `WorkspaceIndex` are lazy and are created only when a file is actually parsed, not while bases are discovered. The sql. js asm implementation is emitted as a separate lazy vendor bundle, so loading `main.cjs` does not parse the database engine before `activate`. | |
| configuration_rqignore | done | 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]. | |
| add_to_chat | done | done | A set of [command_palette] functions that add the selected idea, ideaset, or file to the chat. Commands: Add Idea to Chat, Add Ideaset to Chat, Add File to Chat ( category Reqlan ). Uses the idea / ideaset under the cursor ( or ideas overlapping the editor selection ) when in a. rq file; otherwise QuickPick. Opens chat with # requirement / # file context, with clipboard fallback. | |
| open_index_diagnostics | done | done | Command palette action * * Open Index Diagnostics * * ( `reqlan.openIndexDiagnostics` ) opens the timing diagnostics webview for the active base. Shows total index time, run drill-down, and per-file ranking ( duration, depth, outcome ). Details: ["./features-index-diagnostics.rq".index_diagnostics_webview]. | |
| search_code_actions | done | 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 | partial | 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] | |
| indexing_trigger_auto | done | done | When the editor host is idle, run a * * background staleness check * * — not a reindex and not a soft full sync UI pass. Philosophy: computationally cheap. Load document mtimes in * * one * * SQLite read, compare each file's FS mtime in memory, and only then index mismatched or new files; drop deleted docs in one batched delete. A single MAX ( mtime ) watermark is not sufficient ( one file can get newer while another gets older ). If nothing is stale: no state transition, no progress UI, no parse. If some files are stale: index * * only those files * * under ["../indexer/indexer.rq".nonblocking_index]. Schedule after a quiet period with no index activity; prefer running when the window is unfocused; defer or cancel if the user becomes active again. Extension host only ( [editor_index_adapter] ); CLI / MCP have no idle loop ( they sync on activate / command ). | |
| html_export_form | partial | 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_label_auto | done | 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 | done | done | Export-surface wiring for [graph_label_modes]: Labels control on every interactive export graph cycles auto / on / off; Reset restores auto. | |
| html_export_header_link | done | 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_url_base | done | 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 | done | done | Indexing performance diagnostics: measure and inspect time spent indexing a [indexer.index] base. Timing is persisted in a dedicated * * diagnostic index * * under application memory ( [app_memory.index_diagnostics_store] ), not in `ideas-index.sqlite`, so history survives Clear & rebuild. Surfaces: [index_diagnostics_webview]. Owned by `@reqlan/analytical` for recording; the extension hosts the webview. | |
| index_diagnostics_metrics | done | 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 | done | 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]. | |
| welcome_webview_install | done | done | The * * Welcome to Reqlan * * onboarding webview is the extension-install UX surface. Opened once on first activation when `onboardingMessageShown` is false ( [welcome.installation_event] / [welcome.installation_event_trigger] / [welcome.onboarding_state] ). Content: welcome copy, resolved phonebook links, syntax-highlighted example `.rq`, open-as-untitled control, activity bar / `@reqlan` tips, sponsor thanks. Must not block [activation.activation_sequence]; errors are logged only. Reopen on demand via [welcome.show_onboarding_command] without resetting shown state unless product policy changes. Implementation: ["../../packages/extension/src/extension/open-thanks-for-installing.ts"], ["../../packages/extension/src/extension/onboarding-panel.ts"], ["../../packages/extension/webviews/onboarding/"]. | |
| graph_label_auto | done | 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 | done | 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_labels | done | done | Graph node labels must show the full idea name without character truncation. Wrapping is allowed; ellipsis truncation of display names is not. Shared contract for Ideas Summary ( cytoscape ) and HTML export ( canvas ); surface-specific wiring lives under consumers. [graph_label_modes] [graph_label_auto] | |
| graph_status_tag_filters | done | 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"]. | |
| context_content_styling | done | done | Pane bodies must not grow unbounded. Nested lists use [NestedSection] ( collapse + scroll ) under [CollapsiblePane]. Priority: [scope_pane]; [reference_lists_pane] kind groups; also selection / parents. [ScopePane] [ReferenceListsPane] | |
| dependency_pulse_table | done | done | The focus-hero [DependencyPulse] compass ( ↑ parents, → outbound, ← inbound, ↓ dependents, ● centre ) is clickable. Clicking any arm or the centre toggles a compact reference table below with Dir, Role, Idea, and Status. Rows open / focus the related idea. Duplicates of always-on inbound / outbound lists are omitted from the hero; the current-file lens still lists them. Aligns with [context_scope_v2.dependency_pulse]. Implemented by [DependencyPulse] [ScopePane]. | |
| fingerprint_axis_drilldown | done | done | Each [ContextFingerprint] axis row ( Files, Requirements, History, Architecture, Git, Diagnostics, Coverage ) is clickable. Clicking a row toggles a compact contributor table below it ( Source, Item, Detail ) listing what filled that axis — e. g. which lenses included a file, which ideas are in the footprint, git focus commits / authors ( dirty paths secondary ), anomalies, or relationship edges. Table rows open / focus the related idea or file when actionable. Empty axes show a short “ why care / how to fill ” message. Mirrors the interaction pattern of [dependency_pulse_table]. Aligns with [context_scope_v2.context_fingerprint] and [tooltip_detail]. Implemented by [ContextFingerprint] [ScopePane]. | |
| git_history_lens | done | done | Expanded git dimension in [scope_pane]: focus-centric development history, not a Source Control duplicate. Layout: - Header: branch name, HEAD short hash, muted summary ( e. g. " main · 3 commits · 2 authors " ). - Focus history ( primary ): up to ~ 8 commits touching the focus file / idea line range — relative time, short hash, subject, author. Prefer `git log -L` for `.rq` ideas; fall back to path log. Non-. rq uses path `--follow`. - Authors: compact chip row of top authors from that log window. - Working tree ( secondary, collapsed by default ): dirty staged / unstaged paths for caution / footprint only. Focus hero: history cue ( last commit age / branch ), not `git: staged|unstaged`. Fingerprint Git axis and drilldown list commits / authors ( dirty paths secondary ) per [fingerprint_axis_drilldown] and [tooltip_detail]. Aligns with ["../context-scope.rq".git_context] and [context_scope_v2.development_history_signals]. Implemented by [ScopePane] [ContextFingerprint]. | |
| reference_resolution_parity | done | done | Reference resolution for the activity-bar references pane must use the same shared rules as the editor ( document links / go-to-definition ), not a second ad-hoc classifier. - Bare namespace-alias bracket refs such as `[ActivityBarApp]` that open a file in the editor must index as resolved `file_reference` edges ( import path ), not unresolved idea refs — per ["../../language/imports.rq".import_namespace]. - Quoted file paths and markdown file links use the same file-target treatment as the language file-link resolver in ["../../../../packages/language/src/reqlan-file-link-resolver.ts"] / ["../../../../packages/language/src/reqlan-namespace-import-links.ts"]. - File targets are opened relative to the defining `.rq` file ( same path join as the miniature graph ), not the workspace root. - If a target resolves in the file view, it must resolve ( and be openable ) in [reference_lists_pane]. Implemented by ["../../../../packages/analytical/src/index-store/idea-extractor.ts"], ["../../../../packages/analytical/src/core/file-reference-resolve.ts"], [ReferenceListsPane]. | |
| tooltip_detail | done | done | Scope pane tooltips are detailed enough to explain * what * a meter means and * why it matters *. - [scope_pane] widgets ( stability, dependency pulse, timeline, churn, lens chips, footprint line ) expose granular hover copy on the control and its sub-items. - [ContextFingerprint] has an ⓘ info button with semantic scoring help, per-axis hover copy, and [fingerprint_axis_drilldown]. - Scoring copy is sourced from [context_signals] ( `CONTEXT_FINGERPRINT_HELP`, `CONTEXT_FINGERPRINT_AXIS_HELP`, `buildContextFingerprint` ) so UI stays aligned with [context_scope_v2.context_fingerprint] and [context_scope_v2.ai_readiness_gauge]. Implemented by [ContextFingerprint] [ScopePane]. | |
| unresolved_reference_create | done | done | When an outbound reference remains unresolved after shared resolution ( missing idea, not a file / namespace-alias target ): - Do * * not * * treat the label as a file path or navigate to a non-existent file. - Show an unresolved badge and a * * + * * control with tooltip " Create idea ". - Activating * * + * * opens create-idea ( reuse [commands.pallete_function_create_todo] when available; until then, the existing import-error create-file flow prefilled with the reference name and source document ). Implemented by [ReferenceListsPane] and the activity-bar host message handler. | |
| minigraph_file_reference_links | done | done | when the user clicks on a file reference link in the miniature graph, we should open the file in the editor if the file is defined as relative, it should be opened relative to the defining file, not the workspace root Fixed in [graph_analysers.local_graph_analysis]: external file nodes now resolve their path against the defining file's folder ( via the edge source id ) when the slice is built, so a workspace-relative path is handed to the editor open action. | |
| workspace_base_picker | done | done | Bases in the Workspace pane are chosen via a * * searchable dropdown * *, not a stacked list of base rows. - Closed: shows the active base label ( and compact ready / issue hint when useful ). - Open: type-to-filter over discovered bases by label and path; selecting a match * * pins * * the active base ( [bases.active_base_switch] ) — a pointer swap, not a sync. - Options surface label / path plus ready state and idea / edge / issue counts so the user can distinguish bases before committing. - Single-base workspaces still use the same control ( no special flat list ); empty discovery stays on the Create Base CTA. - Prefer VS Code dropdown tokens for chrome; keep the control compact so health / stats / actions remain the focus of the pane. Switch UX: - Selecting a base posts immediately; the picker may flash * * Switching … * * until `indexHealth` confirms `activeBaseId` ( should be near-instant ). - Never kick soft / hard sync on switch; readiness / progress for a not-yet-ready base is whatever the index already reports. - Editor-follow must not overwrite a user-selected base on the same refresh that applies the selection. Implemented by [BasePicker] in [WorkspacePane]; filter helpers in [filter_bases]. | |
| workspace_content_styling | done | done | Pane bodies must not grow unbounded. Nested lists use [NestedSection] ( collapse + scroll ) under [CollapsiblePane]. File → errors grouping via [group_file_issues] in [WorkspacePane]. | |
| loading_state | done | done | After the activity bar shell mounts, the header may appear before pane data. Cover every sequencing beat with an explicit loading or error affordance — never a blank content area: 1. HTML shell ( before Svelte boots ): inline waiting markup in [get_activity_bar_html]. 2. Connecting: header visible; a post-first-frame `ready` handshake starts the index and requests the first host state. 3. Waiting for index: [workspace_panel.workspace_loading]. 4. Ready panes: [current_context_scope.context_panes_loading] and [minigraph.minigraph_loading]. Index sync progress belongs in [workspace_pane]; graph slice waits stay in [miniature_graph_pane], not a second global overlay. Host posts index health on `ready` and on subsequent status changes; soft-waits when the index is not ready instead of erroring the whole bar. | |
| minigraph_file_reference_links | done | done | File-ref click open behaviour — details in [minigraph.minigraph_file_reference_links]. | |
| panel_content_styling | done | done | Pane bodies must not grow unbounded. Nested lists use [NestedSection] ( collapse + scroll ) under [CollapsiblePane]. Details: [workspace_panel.workspace_content_styling], [current_context_scope.context_content_styling]. [WorkspacePane] [ScopePane] [ReferenceListsPane] | |
| performance | done | done | Sidebar webviews share the same constraints as [graph_lib.webview_threading]. - The HTML / Svelte shell paints before index discovery begins; the post-paint `ready` handshake starts indexing. - Keep sql. js outside the activation-critical host bundle and load it only when a database opens. - Default neighbourhood slices; never load the full workspace graph into a pane. - Debounce editor selection and cursor events before rebuilding slices. - Lazy-mount cytoscape only for visible sub-panes; destroy when collapsed or hidden. - Reuse [graph_analysers.local_graph_analysis] and graph query builders rather than ad-hoc index walks in the webview. | |
| activity_constellation | incomplete | incomplete | widget, activity, graph | Spatial glow of nodes by activity ( GitHub-contribution feel, but layout- aware ). Shows hotspots without a separate legend dump. Complements [hotspot_overlay]; prefer one encoding per surface to avoid competing visual channels. |
| activity_river | incomplete | incomplete | widget, activity | Workspace-top ribbon of recent activity density ( yesterday / today bursts ). Shows momentum, not a file list. Consumes [project_activity_signals] and [user_signals]. |
| ai_readiness_gauge | incomplete | incomplete | widget, ai | Ready-to-assist gauge: requirements ✓, implementation ✓, history ✓, tests ✕, risk low — plus readiness %. Tells the user whether AI has enough synthesized context before [features_ai.ai_add_to_context] / export. Pairs with [context_fingerprint] ( what is in context ) vs readiness ( is it enough / safe ). |
| architectural_map | incomplete | incomplete | widget, architecture | Tiny layered minimap ( UI / Services / Core / Infra … ) with current focus highlighted and bar width for effort concentration. Consumes [architecture_signals] and [project_activity_signals]. Links out to Ideas Summary graph rather than duplicating full layout. |
| base_signals | in-progress | in-progress | bases, multi-base | Multi-base facts for [context_signals] / [synthesized_context]: active_base_id, active_base_root, active_base_ready, idea / edge counts for the active base, sibling_bases ( id, path, ready, counts ), discovery_empty ( prompt create-base ). Consumed by [activitybar.workspace_pane], Ideas Summary base switcher, and [project_weather]. |
| change_velocity | incomplete | incomplete | widget, velocity | Slow ↔ Fast bar from edits / week ( or equivalent ). Complements [churn_heat_bar] ( shape over time ) with a single magnitude readout. |
| churn_heat_bar | incomplete | incomplete | widget, churn | Compact sparkline of edit intensity over time for a requirement, file, folder, or subsystem ( e. g. ▁ ▁ ▂ ▁ ▁ ▇ █ ▆ ▂ ▁ ▁ ). Hover reveals synthesized story ( stable / large rewrite / quiet since ). Consumes [development_history_signals] and [project_activity_signals]. |
| concept_density | incomplete | incomplete | widget, semantic | Per-folder or per-subsystem bars of conceptual richness ( Authentication █ █ █ █ █ █ █ █ █ █ vs Payments █ █ █ ). Consumes [semantic_signals]; useful in Ideas Summary folders / index panel. |
| confidence_card | incomplete | incomplete | widget, confidence, ai | Pre-edit checklist card: High / Medium / Low confidence with check / warn rows ( stable, reviewed, tested, high fanout, … ) and a confidence %. Shown before AI modify workflows ( [features_ai.ai_integration] ) and on focus when synthesis is available. |
| context_consumers | incomplete | incomplete | Shared semantic representation for: UI widgets, graph traversal, AI agents, search, diagnostics, navigation-by-intent. New analyses register as signal producers; consumers bind to signals / synthesis, not to ad-hoc dimension lists. | |
| context_fingerprint | incomplete | incomplete | widget, context, ai | Compact bars of what the current AI / composed context actually contains: Files, Requirements, History, Architecture, Git, Diagnostics, Coverage. Lets the user see expansion when LLM reports " context expanded " ( [context_scope_v1.ai_context_export], [features_ai.ai_integration] ). Hover / info / drill-down affordances: ["./activitybar-panels/current_context_scope.rq".tooltip_detail], ["./activitybar-panels/current_context_scope.rq".fingerprint_axis_drilldown]. |
| context_model_layers | done | done | Canonical v2 layers. Implementation builds on [context_scope_v1.reqlan_context_model]; consumers must not reconstruct project understanding independently. | |
| context_radar | incomplete | incomplete | widget, context | Polar / radar chart of context richness axes ( Tests, Docs, Dependencies, History, AI, … ). Filled polygon shows what the current [context_scope_v1.context_footprint] actually covers. |
| context_scope_v2 | in-progress | in-progress | context, ui, knowledge, v2 | Evolves [context_scope_v1.context_scope] from a * * source-oriented * * model ( " where did this context come from? " ) to a * * decision-oriented * * model ( " what information helps a human or AI make the next decision? " ). v1 [context_scope_v1.context_dimensions] remain valid * producers * ( workspace, current file, open files, file history, edit history, manual, git ). v2 separates those producers from extracted signals, synthesized knowledge, presentation views, and consumers — so new analyses can be added without inventing new dimensions each time. Primary UI principle: [ui.show_dont_tell] — make project health, momentum, relationships, and intent legible at a glance. Host fact chips ( " 17 modified files " ) remain useful; widgets below are the preferred default for conveying meaning. Surfaces: extend [activitybar.scope_pane] / [context_scope_v1.scope_pane_design], Ideas Summary ( [ideas_summary_doc.ideas_summary] ), and graph overlays ( [graphical_graph_doc.graphical_graph] ) — same signals, different projections. |
| context_signals | done | done | Extracted facts. Answer: " What useful information exists? " One source may emit many signals ( e. g. git → development history, not only staged / unstaged ). Families: - [requirement_signals] - [file_signals] - [development_history_signals] - [project_activity_signals] - [semantic_signals] - [quality_signals] - [user_signals] - [relationship_signals] - [temporal_signals] - [risk_signals] - [architecture_signals] - [requirement_lifecycle_signals] - [base_signals] Signals are evidence; [synthesized_context] merges them into actionable knowledge. | |
| context_sources | incomplete | incomplete | Stable raw producers. Answer: " Where are we collecting information from? " Map from v1: [context_scope_v1.workspace_context], [context_scope_v1.current_file_context], [context_scope_v1.open_files_context], [context_scope_v1.file_history_context], [context_scope_v1.edit_history_context], [context_scope_v1.manual_context], [context_scope_v1.git_context] become sources ( and contributions ), not the whole model. `workspace` = VS Code workspace chrome / ambient multi-base glance ( folder roots, discovery empty state ). `base` = the active ontology [ontology_base] ( `.reqlan` - marked container ): its index, readiness, and path ( [bases.implied_context] ). Requirements graph and project index bind to the active base's store, not a merged workspace graph. | |
| context_views | incomplete | incomplete | Projections over the same signals — not separate data models. Timeline · Graph · File · Requirement · Subsystem · Concept · Implementation · History · Risk · AI Summary. | |
| dependency_pulse | incomplete | incomplete | widget, dependencies | Spatial dependency summary instead of " Parents: 4 / Children: 12 ". Compact compass ( ↑ parents, → children, ← siblings, ↓ dependents ) and / or a filled * * Dependency Load * * bar showing centrality growth. Consumes [requirement_signals] and [relationship_signals]. Surfaced on focus hero and graph node details. Click any arm or the centre toggles a reference table below the compass ( Dir / Role / Idea / Status ) per ["../activitybar-panels/current_context_scope.rq".dependency_pulse_table]. |
| historical_replay_slider | incomplete | incomplete | widget, timeline, graph | Time slider across the graph ( e. g. 2023 → Now ). Nodes and edges appear / disappear; dependencies animate. Extremely powerful for architectural storytelling; performance-capped neighbourhoods only in the activity bar; fuller replay in Ideas Summary. Consumes [temporal_signals], [requirement_lifecycle_signals], [relationship_signals]. |
| hotspot_overlay | incomplete | incomplete | widget, graph, hotspot | Graph-node encoding of churn / risk / discussion / instability ( size rings ○ ◎ ⬤ or green → red ). Same signal set as [activity_constellation]. Applies to [activitybar.miniature_graph_pane] and [graphical_graph_doc.graphical_graph]. |
| impact_radius | incomplete | incomplete | widget, impact, graph | On select / focus, fade in affected neighbours; opacity ∝ downstream impact. Consumes [relationship_signals] and [risk_signals]. Works in miniature graph and Ideas Summary graph. |
| implementation_priority_v2 | in-progress | in-progress | After v1 [context_scope_v1.implementation_priority] is solid: 1. [context_model_layers] types: sources → signals → synthesis contracts ( extend analytical context model; keep v1 dimensions as sources ). ✓ 2. Seed signal producers: [development_history_signals], [requirement_lifecycle_signals], [relationship_signals], [risk_signals] from index + git ( reimagined, not staged / unstaged-only ). ✓ ( thin ) 3. [synthesized_context] rollups for focus entity ( stability, confidence, AI risk, coverage ). ✓ 4. First widgets on focus hero: [stability_meter], [dependency_pulse], [timeline_ribbon], [churn_heat_bar]. ✓ 5. [requirement_card] in search / Ideas Summary lists; [context_fingerprint] + [ai_readiness_gauge] on AI context export. ✓ 6. Graph overlays: [hotspot_overlay], [impact_radius]. ✓ 7. Workspace glance: [project_weather], [activity_river], [architectural_map]. deferred 8. Deeper storytelling: [historical_replay_slider], [semantic_diff_viewer], [relationship_cloud], [traceability_matrix]. deferred | |
| knowledge_coverage | incomplete | incomplete | widget, coverage | Stacked coverage bars: Requirements / Implementation / Tests / Docs — prefer filled bars over bare percentages. Consumes [quality_signals] and [requirement_signals]. Pair with [traceability_matrix]. |
| ownership_distribution | incomplete | incomplete | widget, ownership | Horizontal author share bars ( bus-factor at a glance ). Consumes [development_history_signals] ownership and [risk_signals] ( e. g. single_contributor ). |
| project_weather | incomplete | incomplete | widget, dashboard, health | Synthesized workspace health widget — the engineering " dashboard " glance: Stable / Risk / Momentum / Knowledge / Recent Change, or compact meters for Project Health, Momentum, Risk, Confidence. Consumes [synthesized_context] across [risk_signals], [project_activity_signals], [quality_signals], and [base_signals] ( per-base readiness when multiple bases exist ). Belongs in activity bar workspace lens / Ideas Summary index panel — not as competing hero noise on every focus. |
| relationship_cloud | incomplete | incomplete | widget, semantic, relationships | Compact spatial alternative to a full graph: related concepts laid out by semantic closeness ( distance encodes similarity ). Click focuses; " Open in Graph " hands off to [graphical_graph_doc.graphical_graph]. Consumes [semantic_signals] and [relationship_signals]. |
| requirement_card | incomplete | incomplete | widget, card | GitHub-issue-style compact card for search results and lists: name, stability chip, meter %, last edited, ref / impl / test counts, urgency flag ( e. g. recently changing ). Composes [stability_meter], [churn_heat_bar], [dependency_pulse] as optional rows — not all at once by default ( token / UI density ). |
| requirement_lifecycle_wheel | incomplete | incomplete | widget, lifecycle | Four-quadrant wheel: Specify · Implement · Test · Review. Segments fill as evidence accumulates from [requirement_lifecycle_signals] and [quality_signals]. Compact lifecycle for engineering projects. |
| semantic_diff_viewer | incomplete | incomplete | widget, diff, semantic | Conceptual change summary instead of ( or above ) line diffs: Added / Changed / Removed ideas or policies, plus impact count ( e. g. 17 requirements ). Higher signal for AI and review than textual diffs alone. Consumes [semantic_signals], [relationship_signals], [development_history_signals]. |
| show_dont_tell | in-progress | in-progress | ui, widgets, show-dont-tell | Make project state * * legible at a glance * *. Prefer visual evidence of health, momentum, relationships, and intent over numeric fact lists. Widgets below are show-don ' t-tell components for [context_scope_v2]; each consumes [context_signals] / [synthesized_context] and may appear in activity bar, Ideas Summary, focus heroes, search results, or graph overlays. Placement guidance: - Focus / card density: [timeline_ribbon], [churn_heat_bar], [dependency_pulse], [stability_meter], [change_velocity], [requirement_lifecycle_wheel], [requirement_card], [confidence_card], [ai_readiness_gauge] - Workspace chrome / dashboard denser: [activity_river], [project_weather], [context_fingerprint], [architectural_map] - Graph / Ideas Summary: [hotspot_overlay], [impact_radius], [activity_constellation], [historical_replay_slider], [relationship_cloud] - Coverage / ownership / density: [knowledge_coverage], [traceability_matrix], [ownership_distribution], [concept_density], [context_radar], [semantic_diff_viewer] |
| stability_meter | incomplete | incomplete | widget, stability | Segmented meter + percent ( e. g. Stable █ █ █ █ █ █ █ █ █ ░ 91 % ) derived from edit frequency, age, dependency churn, and issue count — not raw git status. AI and humans use it as a confidence cue for change. Pair with [confidence_card] and [risk_signals]. |
| synthesized_context | done | done | Signals merged into decision-oriented knowledge not tied to a single source. Example projection on a requirement: - Importance, Confidence, Stability, Recent Activity - Dependencies, Implementations, Tests, Documentation - AI Risk Synthesis powers [show_dont_tell] widgets and [features_ai.ai_integration] exports — preference for compact synthesized facts over raw dimension dumps ( [context_scope_v1.ai_context_export] ). | |
| timeline_ribbon | incomplete | incomplete | widget, timeline | Horizontal lifecycle ribbon for a requirement ( or focused entity ), not a single " last modified " label. Show milestones along a line toward Now — e. g. created, first implementation, last reviewed, current edit, last test — so maturity and recent activity are visible in one glance. Consumes [requirement_lifecycle_signals] and [temporal_signals]. Fits [context_scope_v1.scope_pane_design]. focus_hero and [requirement_card]. |
| traceability_matrix | incomplete | incomplete | widget, traceability | Compact Req × Impl × Test ( and optional Docs ) check matrix for a local neighbourhood or subsystem. Exposes gaps immediately. Neighbourhood-scoped only — full-workspace matrices stay in Ideas Summary with pagination / filters per [ideas_summary_doc.ideas_summary]. |
| widget_composition_rules | incomplete | incomplete | Show-don ' t-tell without dashboard clutter. | |
| ideas_summary_base_scope | done | 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] ). |
| bases_tab | done | 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. | |
| ideas_table_filters | done | done | the ideas table should support text search, column sorting, and attribute-column filters driven by chip clicks. attribute filters require a non-null attribute value in sqlite json per [webview_table_queries] reference chip filters match outbound / inbound edges by target or source id per [webview_table_queries] chips are right-aligned so truncated labels keep the informative suffix visible. active attribute and reference filters appear as removable chips in the table toolbar. Also [table_column_filters], [table_column_options], and [group_by_type]. | |
| index_panel_base_support | done | done | The [index_panel] / Ideas Summary chrome supports switching between bases in the workspace. Switch is a pointer swap per ["../../../bases/base.rq".active_base_switch] and ["./base-scope.rq".ideas_summary_base_scope] — rebind views, do not sync. | |
| overview_coverage_scores | done | 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. |
| table_column_filters | done | 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]. | |
| timeline_page | done | 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. |
| application_memory | done | done | Base-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 ( ["../features-graph-analysers.rq".index_ideas] / ["../features-graph-analysers.rq".index_technology] ) persists as `ideas-index.sqlite` inside that directory. Index timing diagnostics persist separately as `index-diagnostics.sqlite` ( [index_diagnostics_store] / ["../features-index-diagnostics.rq".index_diagnostics] ) so rebuilds of the ideas index do not wipe history. Export form defaults ( all formats via ["../features-export.rq".export_webview], including HTML options in ["../features-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] ). 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. | |
| index_diagnostics_store | done | 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 | done | 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]. | |
| installation_event | done | done | On installation of the extension a webview should be opened showing: - A welcome message - Resolved links to site, github, docs etc. ( not template placeholders ) - A syntax-highlighted example `.rq` with real URLs ( clickable ) from ["../../packages/extension/templates/thanks-for-installing.template.rq"] after placeholder substitution - A control to open that example as an untitled `.rq` editor beside the webview - Short tips for the activity bar and `@reqlan` chat - A thanks to sponsors Place in overall install sequencing: ["../installation.rq".welcome_webview_install] / ["../installation.rq".extension_installation]. Implemented as a Svelte webview under ["../../packages/extension/webviews/onboarding/"] bundled to ["../../packages/extension/media/webviews/onboarding/"] and opened once on first activation by ["../../packages/extension/src/extension/open-thanks-for-installing.ts"] via ["../../packages/extension/src/extension/onboarding-panel.ts"]. Resource links and template values are resolved at runtime from [phonebook_reqs.phonebook] through ["../../packages/extension/src/shared/phonebook.ts"] and posted to the webview; the example block imports ["../../packages/extension/templates/thanks-for-installing.template.rq"] via Vite `?raw` and substitutes `{{…}}` placeholders before display. Highlighting uses the onboarding tokenizer in ["../../packages/extension/webviews/onboarding/lib/rq-highlight.ts"]. The source template still uses placeholders such as { { SITE_URL } }; those matching braces are body prose per ["../language/syntax-edge-cases.rq".nested_curly_braces] and must parse without errors. Activation state is stored in extension global state key `onboarding` with `onboardingMessageShown` and `lastVersion` per ["../../packages/extension/src/extension/onboarding-state.ts"]. VS Code persists `globalState` in the extension global storage directory ( `globalStorage/reqlan.reqlan-extension/state.vscdb` under the editor user data folder ). | |
| installation_event_trigger | done | done | The installation event should be checked and triggered at extension [activation.activation]. Verified: ["../../packages/extension/src/extension/main.ts"] calls `openThanksForInstallingIfNeeded` at the end of `activate`, and [activation.onboarding_check] documents the gating behaviour. | |
| show_onboarding_command | done | done | A [command_palette] action should reopen the onboarding webview on demand. Command: Show Onboarding ( category Reqlan, id `reqlan.showOnboarding` ). Implemented by ["../../packages/extension/src/extension/register-onboarding-commands.ts"] calling [open_onboarding_page]. Does not reset [onboarding_state]. | |
| deferred_startup_sequence | done | done | Required order: 1. Load the smallest practical host entry. 2. Synchronously register commands and the activity-bar provider; return from `activate`. 3. Assign the activity-bar shell and wait for the post-first-frame `ready` handshake. 4. Start index discovery / sync after `ready`; if the sidebar stays closed, start after a bounded three-second fallback so startup indexing and watchers are not lost. 5. Start the language client after `ready`, with a one-second fallback so language features work when the sidebar stays closed. 6. Report incremental index progress inside the already-painted sidebar. The ready signal and both startup paths are one-shot / idempotent. [activation.background_startup] | |
| development_bundle_freshness | done | done | F5 executes `package.json.main` ( `out/extension/main.cjs` ), not TypeScript source. `out/`, generated webview media, and copied syntaxes are gitignored, so launching without a build can run missing or stale artifacts even when source already contains the fix. `.vscode/launch.json` therefore uses a deterministic pre-launch task that invokes the extension build orchestrator directly; root `pnpm run build:ext` delegates to the same script. The task content-fingerprints Langium and physics generation, each webview, packaging media, and extension-host / language-server output; `tsc -b` retains project-reference incrementality. Unchanged artifacts are verified and skipped before the development host opens. Watch mode remains useful during iteration, but concurrent watchers do not restart an already-running extension host or language-server child; stop and start F5 after host / server changes. ["../../.vscode/launch.json"] ["../../.vscode/tasks.json"] | |
| extension_startup_reliability | done | done | Reqlan startup must make the activity-bar shell and contributed commands available before optional indexing, parser construction, database initialization, or language-client startup can monopolize the extension host. The implementation contract is [first_paint_contract], [deferred_startup_sequence], [lazy_runtime_dependencies], and [development_bundle_freshness]. Operational diagnosis follows [startup_diagnostics]. [activation.activation_sequence] [activitybar.loading_state] [indexer.nonblocking_index] [build.extension_bundle] | |
| first_paint_contract | done | done | The platform spinner ends only after VS Code loads the host module, calls `activate`, the provider registers, and `resolveWebviewView` assigns HTML. Reqlan assigns the lightweight HTML / Svelte shell first. The webview installs its host message listener, mounts, waits for its first animation frame, then posts the one-shot `ready` signal from a queued task. Index discovery / sync waits for that post-paint signal so synchronous parser or database setup cannot race the first visible frame. [activation.first_paint_startup] ["../../packages/extension/webviews/activity-bar/App.svelte"] ["../../packages/extension/webviews/activity-bar/state/app.svelte.ts"] ["../../packages/extension/src/extension/startup-gate.ts"] | |
| invalid_url_activation_failure | done | done | The concrete incident failed while requiring `out/extension/main.cjs`, before `activate()` ran: `TypeError: Invalid URL` in `embedPhysicsCoreSource`. Runtime `readFileSync(new URL(..., import.meta.url))` is unsafe when esbuild emits CommonJS for an ES2017 target: `import.meta.url` is unavailable / empty and source-relative assets do not exist beside the bundled entry. The fix generates and imports `PHYSICS_CORE_CLASSIC_SOURCE` at build time instead of resolving the source file at extension runtime. ["../../packages/analytical/src/export/html-export-assets.ts"] ["../../packages/analytical/scripts/generate-physics-core-source.mjs"] | |
| lazy_runtime_dependencies | done | done | Base discovery must be cheap: - Constructing `WorkspaceIndex` does not construct Langium / Chevrotain services; services are memoized on first parse. - sql. js asm is not parsed as part of `main.cjs`; both index stores dynamically import the generated vendor bundle when a database first opens. - Export / physics source is generated at build time rather than read via extension-runtime URLs. The host bundle consequently fell from approximately 11. 2 MB to 2. 66 MB; sql. js occupies a separate approximately 8. 0 MB lazy vendor bundle. ["../../packages/analytical/src/index-store/workspace-index.ts"] ["../../packages/analytical/src/index-store/sqlite-store.ts"] ["../../packages/analytical/src/index-store/index-diagnostics-store.ts"] ["../../packages/extension/esbuild.mjs"] | |
| verification_contract | done | done | Startup changes are complete only when: - The production extension build succeeds and emits both `out/extension/main.cjs` and `out/extension/vendor/sql-asm.cjs`. - The main bundle does not contain the sql. js asm implementation and imports the vendor lazily. - The lazy vendor can initialize a database. - Extension startup-gate and analytical lazy-service tests pass. - Activity-bar shell paint is visually checked in a newly restarted F5 development host; activation failures are cached for the lifetime of a failed host session. - Requirement analysis resolves the updated startup graph. | |
| code_lens_reference_types | done | done | References should have a ["../vsc-primitives.rq".codelens] button. The button should be togleable in settings. The button should the classification of the reference. e. g. ' open reqlan file', " open { extension } file', ' open folder', ' open idea' Clicking the CodeLens should open a reference card with summary stats — not navigate, because references already act as editor links. The card should offer open / reveal / file-selector actions when useful. Folders should be handled by focusing on the ide explorer, or by opening a file selector. Some summary stats should be shown for references - e. g. last edited, count of references, count of referencers, etc. Implemented by ["../../../packages/language/src/reqlan-code-lens-provider.ts"], ["../../../packages/language/src/reqlan-reference-code-lens.ts"], ["../../../packages/language/src/reqlan-code-lens-settings.ts"], ["../../../packages/extension/src/extension/register-reference-code-lens.ts"], and ["../../../packages/extension/src/extension/reference-code-lens-card.ts"]. | |
| inbound_inlay_hints_whole_graph | done | done | Inbound references shown in [view_references_as_inlay_hints] should include referencers from the whole requirement graph across the workspace, not only ideas declared in the current file. Implemented by ["../../../packages/language/src/reqlan-inbound-reference-inlay-label.ts"], ["../../../packages/language/src/reqlan-inlay-hint-provider.ts"]. [view_references_as_inlay_hints] [traceable_inlay_hints] | |
| traceable_inlay_hints | done | done | Inlay hints should be traceable, i. e. if a user clicks a specific idea reference, it should open that idea, if a user clicks the all references hint, it should open a search webview with the idea preselected / targets prefiltered Implemented by ["../../../packages/language/src/reqlan-inbound-reference-inlay-label.ts"], ["../../../packages/language/src/reqlan-inlay-hint-provider.ts"], and ["../../../packages/extension/src/webview_module/register-webview.ts"]. | |
| view_references_as_inlay_hints | incomplete | incomplete | References should be shown as inlay hints in the editor. This should be a toggleable setting, which should be available in the command palette. N-lines ( configurable setting ) of hints should be shown below the idea. Implemented by ["../../../packages/language/src/reqlan-inlay-hint-provider.ts"], ["../../../packages/language/src/reqlan-inbound-reference-inlay-label.ts"], ["../../../packages/language/src/reqlan-inlay-hint-settings.ts"], and ["../../../packages/extension/src/extension/register-reference-inlay-hints.ts"]. | |
| nonblocking_index | done | done | Index sync must stay non-blocking for the host UI ( notably [activity_bar_doc.activity_bar] and [workspace_pane_doc.workspace_loading] ). Editor startup is gated by ["../extension/activation.rq".first_paint_startup]; discovering a base must not construct Langium services, which are initialized lazily on the first parse. While syncing, surface progress — state, processed / total, and the current file — in [workspace_pane_doc.workspace_pane] and [ideas_summary_doc.index_panel]. In-flight sync must be cancellable from those surfaces; cancel keeps already-indexed rows and returns the index to ready. Incremental behaviour ( see also [graph_analysers.indexing_incrementality] ): - Single-file create / change / delete via watchers indexes only that file — never a full base walk. - Soft full sync ( `syncWorkspace` / Refresh ) skips parse + persist when the file's mtime matches the value stored on the documents row. - Hard refresh ( `clearAndRebuildIndex` / Clear & rebuild ) wipes the store and reindexes every file. Implemented by [workspace_index]; editor adapter [editor_index_adapter]. | |
| parse_budget_timeout | done | 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 | done | 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]. | |
| file_layout | incomplete | incomplete | A file begins with zero or more import statements, followed by top-level ideas and ideasets. The file forms an implicit ideaset; its name may default to the filename without the suffix. Front matter syntax is not yet specified. | |
| no_name_idea_safe_warning | done | 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]. | |
| advanced_series_brief | draft | draft | advanced | Advanced series: eight episodes in [advanced_series], about 8 – 12 minutes each, plus [adv_overview]. Assumes get-started fluency and ideally [concepts_series] vocabulary ( or equivalent ). Goal: multi-file graphs, purposeful attributes, cartographic navigation, AI token discipline, code-comment traceability, HTML publishing, headless CLI / MCP craft ( beyond [con_03_cli] ), and modelling patterns that stay readable. Include at least one non-software vignette ( ops runbook or editorial brief ) to honour [general_purpose]. Bases appear as craft judgement ( active base, nested boundaries ) — not a second create-base lesson. Decks: [adv_overview] and adv_01 – adv_08 under [slide_decks]. |
| concepts_series_brief | draft | draft | concepts | Short concepts series after get-started: three packs that put names to what the learner already felt. [con_01_ontology] — the building blocks: [idea], [ideaset], [file], [base], [reference], [attribute], and the focused map view ( [cartographic_map] ). [con_02_extension_tour] — where those building blocks appear across the [extension] surfaces. [con_03_cli] — the headless twin: [cli_package] / [commands] on the same `.reqlan` index ( [init], search, analyse, parse, export ). Runtime: about 8 – 12 minutes each. Optional for impatient builders; recommended before advanced. |
| get_started_series_brief | draft | draft | get-started | Short " get started " series: seven episodes in [get_started_series], about 4 – 7 minutes each, total under about 40 minutes. Goal: a new user can install reqlan, write ideas, link them, create a [base], inspect neighbourhood context, ask the chat participant, and point ideas at real files. Teaching order ( producer note, not on-screen copy ): demonstrate the core actions first; naming the building blocks waits for [concepts_series]. Tone: calm and concrete on screen — no feature-tour survey ( that is [con_02_extension_tour] ). End each episode with one " try this " prompt on screen. |
| tutorials | draft | draft | marketing, media, tutorials | Tutorial media teaches reqlan through short, scripted videos plus copy-pasteable `.rq` examples. Content must reflect [mission_statement]: semantic requirements as code for people working with LLMs, with ergonomic definition and consumption. Three series — do, then name, then craft: - [get_started_series]: first-hour fluency ( write, link, create a [base], neighbourhood, AI slice, code ). - [concepts_series]: ontology vocabulary, an [extension] surface map, and the [cli_package] headless surface after the learner has felt the loop. - [advanced_series]: graph craft, AI workflows, distribution. Host on the marketing site per [site_reqs.tutorials_section] and link from extension onboarding per [installation_event] and [phonebook]. Visual language follows [brand]; on-screen chrome stays quiet per [show_dont_tell] — narration carries concepts, UI does not lecture. |
| presentation_player_route | done | done | `/presentations/player/` is a statically exported Next page that loads runtime deck JSON from `/presentations/decks/` and Reveal from `/presentations/vendor/reveal.js/`. Runtime JSON is generated from authored JSONC by [sync_presentations]. It must not use SiteShell; it is iframe-hosted by tutorial detail pages. Do not place `public/presentations/player/index.html` — that path is owned by the App Router export. | |
| spec_html_export | done | 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 | done | 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 | done | 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 | done | 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 ). | |
| agent_context_showcase | done | done | ai, mcp, planning | Flagship. Context for the agent, not the repo. An agent answers a question about session expiry. Show the repo-dump cost, then MCP file_context returning six ideas and their edges, then the plan the agent writes. Absorbs former agentic-planning and feature-tracking pages. |
| antipatterns_showcase | done | done | antipattern, craft | Depth. Three ways to write. rq badly. Data instead of pointers, prose restating code, one monolithic file. Showing negative space is a taste signal. Absorbs former data-not-ideas page; expands it. |
| attribute_dialect_showcase | done | done | attributes, extensibility | Depth. Attributes as a domain dialect. The full attribute grammar: flags, negated flags, block values, nested and named lists — forms nobody currently knows about. Absorbs former arbitrary-attributes page. |
| audit_trail_showcase | done | done | compliance, audit, export | Depth. An audit trail you can export. Custom clause / evidence / verified_by attributes, then Completion Status showing the coverage gap, then HTML export as the auditor's deliverable. Domain: regulated software — IEC 62304 or SOC 2. Absorbs former compliance page. |
| broken_links_showcase | done | done | diagnostics, refactor | Flagship. Links that break loudly. Someone renames a file. Show the diagnostic, the quick-fix menu, and the rewritten refs. This is the argument against a wiki. Domain: refactor safety, any stack. |
| firmware_cloud_contract_showcase | done | done | integration, cross-stack, embedded | Flagship. The contract between firmware and cloud. A 10 Hz sample rate and a 50 ms ingest deadline: one invariant, two codebases, neither of which can express it alone. Absorbs half of former glue-semantics and static-connection. |
| graph_view_showcase | done | done | extension, graph | Depth. See the whole graph. Needs real captured screenshots or a short loop from the actual Cytoscape view — not fake ASCII arrows dressed as. rq. Aligns with [diagrams_are_never_dressed_as_code]. |
| interlock_showcase | done | done | industrial, safety, sequencing | Flagship. The interlock that must not fail. A safety requirement bound to ["./plc/interlock.stL#41-58"] by symbol and line range, to a vitest case by test name, with an rq-comment in the ST source pointing back. Domain: industrial control / IEC 61131. |
| legacy_archaeology_showcase | done | done | legacy, discovery, deprecation | Depth. Archaeology on inherited code. An undocumented function, an rq-comment seeded into it, @ deprecated on the old path, then Deprecation Impact listing everything that breaks. Absorbs former scattered-docs page. |
| module_surface_showcase | done | done | modularity, imports, ideasets | Depth. A module's published surface. billing / interface. rq exports an ideaset; checkout. rq imports only that; reaching past the boundary is an unresolved-import error. Ideasets-as-public-API is undemonstrated today. Absorbs half of former glue-semantics and module-interface. |
| phase_0_honesty_audit | pending | pending | tooling, honesty | In parallel with content rewrite. Fix what the honesty audit surfaced. |
| phase_1_parse_gate | done | done | Make dishonesty impossible. Add a build step that runs the Langium parser over every language- " rq " block in showcases. ts and fails on parse errors or unresolved local refs. Do this first so the rewrite cannot reintroduce the current problem. Also expand Shiki language set per [showcase_languages]. | |
| phase_2_content_schema | done | done | Extend ShowcaseBlock union and Showcase type per [showcase_module]. Presentation polish can follow in [phase_5_detail_layout]; schema first. | |
| phase_3_reqs_as_truth | done | done | This file is the source of truth: one idea per showcase with mechanism, domain, and status; [showcase_set] listing them; refs into showcases. ts. Reqlan's own showcase plan is tracked in reqlan. | |
| phase_4_write_the_eleven | done | done | Write the eleven, one at a time, each validated by [phase_1_parse_gate] before moving on. Flagships first — [agent_context_showcase], [interlock_showcase], [broken_links_showcase], [firmware_cloud_contract_showcase] — so the format can be judged before committing to all eleven. | |
| phase_5_detail_layout | done | done | Detail page layout: beats with captions, mechanism badges distinct from tags, and cross-block highlighting of the shared identifier. | |
| phase_6_capture_media | done | done | Capture real media from the extension for [broken_links_showcase] ( diagnostics / quick-fix ) and [graph_view_showcase] ( Cytoscape ). | |
| showcase | done | 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 | done | 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. | |
| test_proves_showcase | done | done | testing, traceability | Depth. What this test actually proves. Keep the intent of the former test-explanation page; upgrade it with a real test-name anchor and the reverse direction from test file back to intent. |