| 2026-09-26 |

Replay at recorded pace; extension version check + hot overlay from the server
...
Replay: pauses are no longer compressed — steps fire on absolute recorded
clocks (1:1 with the recording), the cursor stays on the track, a 200ms
settle follows scrolls so the next click resolves on the scrolled page,
and the clock re-anchors after page loads (load time is not recorded time).
Version + hot overlay: the extension version now comes from the root
package.json; the server publishes the current version and the overlay
module (overlay.js + overlay.css) at /api/ext/manifest + /api/ext/assets
(POST /api/ext/publish, manifest written last as the commit point). The
content script imports the server overlay straight from its URL — public
assets answer ACAO * because page-origin imports are the only module path
that works in an isolated world (blob/data imports and eval are all
blocked by the MV3 CSP) — and falls back to the statically bundled copy
on any failure; the version gate never downgrades the UI below the core.
Core updates surface as a popup banner linking to /download; the download
page shows the published version and versioned zips (npm run package also
emits them). make ext-publish ships the overlay from a built dist.
E2E covers the whole hot-overlay round trip: publish a marked 9.9.9
overlay, reload → data-overlay-source="remote", popup banner, dead-server
fallback → "bundled", then republish the pristine assets.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
15 hours ago
|
| 2026-09-18 |
Download page: extension install guide for Chrome and Firefox
...
- public /download page (nav item «Расширение»): per-browser download
buttons and step-by-step install instructions, setup (server URL is
the panel's own origin) and hotkey reference, en/ru
- npm run package -w @ltt/extension zips dist/{chrome,firefox} into
packages/web/public/ext (stable names, manifest at archive root so
"Load unpacked" works right after unpacking)
- make ext / make prod always build fresh zips; deploy/.env.example
seeds the release address bugtrail.gnexus.space
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
8 days ago
|
| 2026-09-17 |

Record silent WebM screen video instead of GIF during recordings
...
The recorder now captures continuous screencast frames via the CDP
screencast API and encodes them into a silent WebM (VP8, ~15 fps, capped
at 800px wide) uploaded as recording.webm. WebCodecs VideoEncoder is not
exposed to service workers, so encoding runs in an offscreen document
(chrome.offscreen) fed by base64 frame batches over a runtime port; the
result is verified with a local <video> playback probe and falls back to
the cursor-following GIF when encoding or verification fails (Firefox,
old Chrome, broken output).
Root cause of the earlier corrupt output: webm-muxer silently produces a
broken file when the first chunk's timestamp is non-zero — media
timestamps now start at the first frame and the muxer uses
firstTimestampBehavior: "offset".
The e2e now validates the uploaded recording with ffprobe (vp8 codec,
positive duration) and still covers the GIF fallback path, console-step
dump, navigation survival and replay.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Eugene Sukhodolskiy
committed
9 days ago
|
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
9 days 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
9 days ago
|