Referenced by 16
Labels 3

Referencing ideas

IdeaStatusTagsSummary
active_base_switch 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 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].
miniature_graph_pane A small interactive graph centred on the cursor idea ( or the file's first idea when the caret is outside any block ). Consumes [graph_lib.graph_library] with sidebar-appropriate defaults; slices from [graph_analysers.local_graph_analysis]. - Default depth 1; + / - controls expand or collapse neighbourhood depth without opening Ideas Summary. - Pan, zoom, and drag per [graph_lib.view_controls]. - Labels default to [graph_lib.graph_label_auto] via shared GraphCyController ( no separate Labels control here; full control lives on [graphical_graph_doc.graphical_graph] ). - [graph_lib.manual_reframe] — " Fit to view " in [MiniGraphCanvas]; same API as the full graph tab. - [graph_lib.auto_reframe] and [graph_lib.reframe_animation] when the neighbourhood node set changes ( instant first fit, animated afterward ). - No full layout / physics menus here ( defer to [graphical_graph_doc.graphical_graph] ). - Single-click a node opens its source; double-click or " Focus " recentres the slice on that idea. - Edge kinds styled like the full graph ( including dashed file-reference edges ). - When nodes are truncated per [graphical_graph_doc.node_truncation], show " + N more " with a control to open the centred slice in Ideas Summary. - " Open in Graph tab " hands off centerId and query state to [ideas_summary_panel]. Mount cytoscape only while this sub-pane is visible per [graph_lib.graph_cy_controller].
workspace_pane Multi-base index health, errors, and activity — without duplicating the full Index tab in [ideas_summary_doc.index_panel]. - [workspace_base_picker]: choose the active base; do not render a full always-visible base list. - For the selected base: state badge, sync progress ( processed / total + current file ), idea / edge counts, global and per-file errors, recent activity. - Clickable file issue list opens the source location in the editor. - Refresh / cancel in-flight sync / clear & rebuild for the selected base ( or all ); " Open index tab " hands off to [ideas_summary_panel] with that base selected. - When no bases exist: empty state with Create Base CTA ( [bases.create_base_onboarding] ). Non-blocking sync UX: ["../../../indexer/indexer.rq".nonblocking_index]. Implemented by [WorkspacePane].
activity_bar The extension should provide an activity bar sidebar for editor-adjacent requirement context per [consumption.local_graph_view]. UI is implemented as Svelte webview panes per [development_core], not as a long-lived tree of static rows. The host loads slices from the index via [graph_analysers.local_graph_analysis] and forwards editor focus through [activity_bar_webview] and [activity_bar_data]. Panes should be performance conscious: capped neighbourhoods, lazy cytoscape mount, debounced cursor updates — same discipline as [webview_doc.webview]. Workspace-wide tables, full layout controls, and unconstrained graph dumps belong in Ideas Summary per [ideas_summary_doc.ideas_summary]; panes link out with prefilled state instead of duplicating those views.
header_buttons Cross-pane controls live in a compact header above the pane stack. - " Sync with editor " toggle: panes follow the active editor and cursor by default; when off, stay pinned on the last focused idea. - [hop_depth_control]: global graph hop depth for context search, graph slice, references, and ancestors — not a boolean toggle. - " Open in Ideas Summary ": reveal [ideas_summary_panel] with the ideas table filtered to the current file, or the graph tab centred on the current idea. - " Export slice ": JSON or CSV of the current neighbourhood only ( lighter than workspace [commands.export_json] / [commands.export_csv] ). - " Copy as markdown ": copy the focused idea plus parents and reference lists for pasting into chat or PRs. - Refresh control tied to index readiness. - [info_site_link]
ideas_summary_base_scope 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 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.
ideas_summary The Ideas Summary webview is a workspace-wide page for tables ( and graph ) summarising ideas per [views.simple_views] and [webview_doc.webview]. Tabs align with salient [ontology] data and HTML export list views ( [html_export.html_export_list_views] ): [ontology_aligned_tabs]. It should be performance conscious and avoid full-graph dumps unless requested by the user. It should be paginated. It should be filterable and sortable via a ui-sql layer per [table_column_filters] and [table_column_options]. Webview UI is implemented with Svelte per [development_core] the extension host loads compiled assets from [ideas_summary_media] table queries are built in [webview_table_queries] the extension host forwards query state through [ideas_summary_panel] Ideas Summary chrome should include a link that opens [features_export.export_webview]. Multi-base scope and switcher: [ideas_summary_base.ideas_summary_base_scope].
overview_coverage_scores 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 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 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.
pages - ideas summary [ideas_summary_panel] - header / status chrome with base switcher and link to [features_export.export_webview] - [overview_page] [OverviewPanel] - [bases_tab] [BasesTable] - ideas list [IdeasTable] - filterable and sortable via [TableToolbar], [ColumnFilterRow], and [SortableTh] - column show / hide via [TableOptionsMenu] / [table_column_options] - groupable by idea kind ( block / oneliner ) per [group_by_type] - other attributes shown as expandable chips per [ChipList] - clicking an attribute chip adds a column, filters to ideas with a non-null value for that attribute, and sorts by it ( combinable with other filters ) - references split into outbound and inbound chip columns with counts - clicking a reference chip filters ideas that share that edge ( combinable with other filters ) - block idea bodies shown in a scrollable cell per [IdeaBodyCell] - ideasets [IdeasetsTable] / [idea_sets_tab] - filterable and sortable via ui-sql layer; column filters and options - [attributes_tab] [AttributesTable] - references [ReferencesTable] - filterable and sortable via ui-sql layer; groupable by reference type per [group_by_type] - Graph view: see [graphical_graph_doc.graphical_graph] - [timeline_page] [TimelinePanel] - [index_panel] [IndexPanel] ( last tab — index health )
table_column_filters 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 Each table has an Options control ( [TableOptionsMenu] ) to show or hide columns. Visibility persists per tab in workspaceState via [table_ui_state].
timeline_page 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.

Reference labels

../../../packages/extension/src/webview_module/ideas-summary-panel.ts, ../../packages/extension/src/webview_module/ideas-summary-panel.ts, ideas_summary_panel