| 2026-09-18 |
Recording submits at stop; composer edits the report by token
...
An MV3 service worker is killed after ~30 s of idle time, so parking the
recording buffer in background memory (pending + 10-min auto-save timer)
was unreliable: the timer never fired and Save could hit a restarted
worker with an empty buffer. Now recorderStop uploads the media, submits
the report with the auto-title right away, and only then opens the
composer. Save patches title/description (PATCH /api/reports/{token}),
Discard deletes the report — both are token-based and survive worker
restarts. recorder_submit is replaced by recorder_edit/recorder_discard
{token}.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
15 hours ago
|

Project switcher in popup, pending-recording composer, cursor-crop video
...
- Popup: project dropdown (list_projects + settings_save defaultProjectId);
switching refreshes the last-report card and panel link immediately.
- Recording stop no longer submits blindly: the buffer goes pending and a
composer opens in the tab with title (prefilled) + description, Save
(Ctrl+Enter, copies the share link) or two-step Discard; unanswered
pending recordings auto-save after 10 minutes, and starting a new
recording auto-saves a pending one. Composer survives navigation.
- WebM is now a square cursor-following crop (shared cursorCropRect helper
with the GIF path), source dimension raised to 1280 so the 512px crop is
native-resolution at DPR 1; full-frame 800px stays as fallback.
- e2e: second project + popup switcher asserts, composer save (typed
title/description verified on server), keyboard-driven discard flow,
ffprobe square-video assertions (512x512 VP8).
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
16 hours ago
|
| 2026-09-17 |
Extension: popup UI, panel URL, icon fix, GIF tracks and track replay
...
- Popup replaces the auto-start picker: mode choice (element note /
record steps), latest report card with open / replay / delete, web
panel link; share links open at panelUrl (default :5173)
- Register the Phosphor font via the FontFace API — constructable
stylesheets ignore @font-face, which left overlay icons empty
- Recorder tracks upload as one animated GIF (gifenc) instead of per-
step screenshots; frames follow event pacing, UI hidden on capture
- Replay a recorded track from the popup: background opens the start
page, re-executes click/input/url_change steps with original pacing
and flashes the result in the overlay
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
1 day ago
|

UI polish: fix black-on-dark leftovers, spacing, unstyled elements
...
- theme.css: design tokens mirroring kit's hardcoded Tokyo Night palette
(--ltt-* + --color-* aliases used by @ltt/ui and the overlay)
- CompactSelect: kit GnSelect is a 54px/600px form control — compact
variant for toolbar filters and the report status select
- ProjectPage: filters were blank (null modelValue matches no <option>)
and huge; drop the floating GnTable caption chip
- AppShell: empty topbar chip is now a user identity + logout; remove
unused props
- ReportPage/ProjectsPage/SettingsPage: kit .card is width:max-content/
max-width:340px — cards fill their grid now; toolbar shows localized
project count; PageHeader on settings
- ElementContext/EnvironmentInfo: row separators, dim labels, formatted
CAPTURED date, selector rendered as a code chip
- ScreenshotViewer: optional labels prop (panel passes i18n strings)
- i18n: ru plural rules ("1 проект"), no hardcoded EN strings on
auth pages; hide kit's "Forgot password?" stub link
- extension overlay: define --color-* vars on the shadow mount point
- Makefile: ext:watch/ext:test targets never parsed (colon in
.PHONY/rules) — renamed to ext-watch/ext-test
- shot.mjs: screenshot harness for visual review of all pages
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
1 day ago
|

Extension: picker, note composer, recorder + infra (Makefile, prod compose, README)
...
- MV3 extension for Chrome and Firefox: single codebase, per-entry IIFE
builds (background / content / options), manifests generated per target
- Background service worker owns all networking (Bearer token from
storage.local), captureVisibleTab (windowId!), recorder event buffer
with offset_ms and auto-screenshots on clicks
- Content overlay in a closed shadow root (constructable stylesheets,
kit CSS fetched from assets/style.css with /assets URL rewrite);
PickerLayer, NoteComposer (autofocus, Ctrl+Enter submit),
RecorderBar (step counter, note, stop)
- Options page: server URL, login, default project
- Recorder steps link screenshots by uploaded file id (server accepts
attachment id or file id); environment/element JSONB serialized with
mode="json" (datetime captured_at broke inserts)
- e2e harness: headless Chromium + extension, note + recording flows
- Makefile, docker-compose.prod.yml (caddy :8081 + static panel),
deploy/Caddyfile, README (ru) with extension install and /assets notes
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
1 day ago
|