Files
openobserve/web
Omkar Kesarkhane 62528b4c12 fix(synthetics): sequential recorder setup checklist with state-safe refresh and incognito failure recovery (#13684)
## Summary

Follow-up to #13658 — redesigns the recorder setup flow as a
sequential-gated checklist and closes the UX holes around refresh, stale
connections, and incognito failures.

### Sequential-gated setup checklist (shared by the create-page setup
phase and the journey dialog)

- Only one task is actionable at a time; later tasks render locked, done
tasks collapse to a green check row.
- **Task 1 (install)**: Web Store button + an "I've added it to Chrome"
attestation (the install happens in another tab the page can't observe).
Live bridge detection auto-completes it ("Detected automatically");
checkbox-only completion offers Undo.
- **Task 2 (incognito)**: "Do this in Chrome" callout with inline
Chrome-UI icons + first-person attestation, collapsing to "Allowed in
Incognito" with Undo.
- **Task 3 (connect)**: completes only on the real probe signal —
attestations can't skip into a recording that would hang. Icon-click is
the primary instruction (injects without reloading); refresh is the
secondary link.
- Journey dialog: per-action subtitle, "n of 3 done" badge, full-width
CTA reading "<action> — finish the tasks above first" while locked, a
hint naming the exact blocking task, skip link (record only).
- Attestations are session-only by design — persisting them would keep
tasks pre-completed after the extension is removed.

### State-safe refresh + gate bypass

- Entering the setup phase mirrors url/name into the query (`setup=1`);
mount restores them, so a mid-setup F5 returns to the checklist with
fields intact.
- The checklist's "refresh this page" strips the setup flag; when
url+name are present and the warm probe detects the extension, the gate
auto-commits straight into the editor (recording stays a deliberate
click). `?url=&name=` deep links work as a byproduct.

### Incognito failure recovery

- Both the replay preflight classification and the recording-start
refusal (the extension's raw "Recording needs incognito access…"
message) now revoke the disproved attestation and auto-open the setup
dialog on its incognito task, with the failed action as the CTA. The
warning card slims to Retry / Dismiss / Show setup steps (its
chrome://extensions walkthrough duplicated the checklist, and
`window.open("chrome://…")` is blocked by Chrome anyway).

### Compulsory re-verification after the incognito toggle

- Toggling "Allow in Incognito" **reloads the extension and orphans the
tab's bridge** (per the takeover-handshake contract in the extension's
content script), so giving the ack invalidates `extensionReady` and
re-probes — the connect task stays open until a fresh probe passes. The
install fact is latched first so task 1 doesn't regress.

## Test plan

- 141 tests across the four specs: ExtensionSetupChecklist 18,
ExtensionSetupDialog 19, BrowserJourney 60, CreateBrowserTest 44 —
including the deferred-probe assertions that the CTA follows the *fresh*
probe verdict, not stale state
- `npm run lint` / `npm run type-check` / `npm run lint:design:strict`
clean
- Manual: full install → incognito → connect flow against the published
extension, both failure paths (record + replay without incognito),
refresh at each task
2026-08-10 06:37:17 +00:00
..
2025-12-04 13:58:09 +05:30
2026-08-07 11:45:59 +00:00
2026-05-28 11:00:49 +00:00
2026-08-07 11:45:59 +00:00
…
2026-08-07 11:45:59 +00:00
2026-08-07 11:45:59 +00:00
…

web

This template should help get you started developing with Vue 3 in Vite.

VSCode + Volar (and disable Vetur) + TypeScript Vue Plugin (Volar).

Type Support for .vue Imports in TS

TypeScript cannot handle type information for .vue imports by default, so we replace the tsc CLI with vue-tsc for type checking. In editors, we need TypeScript Vue Plugin (Volar) to make the TypeScript language service aware of .vue types.

If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a Take Over Mode that is more performant. You can enable it by the following steps:

  1. Disable the built-in TypeScript Extension
    1. Run Extensions: Show Built-in Extensions from VSCode's command palette
    2. Find TypeScript and JavaScript Language Features, right click and select Disable (Workspace)
  2. Reload the VSCode window by running Developer: Reload Window from the command palette.

Customize configuration

See Vite Configuration Reference.

Project Setup

npm install

Compile and Hot-Reload for Development

For stand-alone UI development environment, create .env file and which contains below environment variable

VITE_OPENOBSERVE_ENDPOINT=http://localhost:5080/
npm run dev

Type-Check, Compile and Minify for Production

npm run build

Run Unit Tests with Vitest

npm run test:unit

Run End-to-End Tests with Cypress

npm run test:e2e:dev

This runs the end-to-end tests against the Vite development server. It is much faster than the production build.

But it's still recommended to test the production build with test:e2e before deploying (e.g. in CI environments):

npm run build
npm run test:e2e

Lint with ESLint

npm run lint