Idea detail
activation_sequence
reqlan rq/extension/activation.rq:21
Summary
`activate` is synchronous and non-blocking in main.ts; it never awaits startup work so the UI is available as soon as possible. It runs the following phases:
1. Register reference inlay-hint and CodeLens configuration / commands synchronously.
2. Call analytical_submodule_activation — registers commands, activity bar, chat, webviews, AI commands, and mutation hooks synchronously and returns without starting indexing.
3. Register import-error quick-fix commands when the analytical submodule registered.
4. Arm first_paint_startup so index startup cannot race the activity-bar shell.
5. Invoke onboarding_check without awaiting it, so onboarding cannot block activation.
Submodule failures are logged and do not prevent later phases from running.
Attributes
No attributes declared.
Ancestor context
Analytical submodule registration is implemented in ["../../packages/extension/src/analytical_submodule/index.ts"]. `activateAnalyticalSubmodule` is synchronous: VS Code contributions ( commands, activity bar provider, chat participant, webviews, AI commands, mutation hooks ) register synchronously and it returns the submodule immediately. It does not start indexing; it passes the activity-bar post-paint callback into the provider and the caller starts index activation through [first_paint_startup].
first_paint_startupThe 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`.
onboarding_checkPost-install onboarding is checked on every activation, not via a dedicated install event. ["./onboarding/page-thanks-for-installing.rq".installation_event_trigger] is satisfied because `activate` always calls ["../../packages/extension/src/extension/open-thanks-for-installing.ts"]. The check reads global state key `onboarding` via ["../../packages/extension/src/extension/onboarding-state.ts"]: - `onboardingMessageShown` — when false, open the onboarding webview panel via ["../../packages/extension/src/extension/onboarding-panel.ts"]. - `lastVersion` — updated each activation after the message has been shown so future releases can detect extension updates. The call is fire-and-forget; errors are logged and do not fail activation.
| Kind | Idea | Path | Snippet |
|---|---|---|---|
| file_reference | ../../packages/extension/src/extension/main.ts | packages/extension/src/extension/main.ts | main.ts |
| references | analytical_submodule_activation | reqlan rq/extension/activation.rq | analytical_submodule_activation |
| references | first_paint_startup | reqlan rq/extension/activation.rq | first_paint_startup |
| references | onboarding_check | reqlan rq/extension/activation.rq | onboarding_check |
| Kind | Idea | Path | Snippet |
|---|---|---|---|
| None | |||
| Kind | Idea | Path | Snippet |
|---|---|---|---|
| None | |||
Initialising graph…