d18ada4ee7
Docker Publish / docker (web, apps/web/Dockerfile, web) (push) Failing after 0s
Docker Publish / docker (api, apps/api/Dockerfile, api) (push) Failing after 1s
Publish Extension / detect-version (push) Has been skipped
Publish Extension / submit (push) Has been cancelled
7.3 KiB
7.3 KiB
Sentry / GlitchTip Fix Log
This log records remediation work on Sentry / GlitchTip issues for the
vidbee project (org=nex, host=error.102417.xyz,
release=vidbee-desktop@<version>).
Each entry captures: root cause, fix summary, files touched, validation output, current GlitchTip status, and any follow-ups.
2026-05-01 — VidBee Desktop quad-issue sweep (NEX-60)
Validation common to all four entries below:
pnpm run typecheck— passpnpm run check(ultracite check && check:i18n && typecheck) — passpnpm run build— pass
The local repo has no sentry-cli credentials configured, and the project
description allows skipping the resolved step in that case. None of the
four GlitchTip issues were marked resolved from this branch; the next
release of vidbee-desktop@1.3.11 (or the version that includes these
commits) is the right point for the maintainer to flip them to resolved.
VIDBEE-6SV — RangeError: Invalid string length in main-process Socket
- Sentry: https://error.102417.xyz/vidbee/issues/7849
- Level: fatal · events: 4319 · last seen: 2026-04-27 (release 1.3.10, Windows)
- Root cause: yt-dlp / ffmpeg child-process stdout/stderr was being
accumulated into a single JavaScript string for the lifetime of the
process. On long downloads, large playlists, or verbose runs the string
exceeded V8's ~512 MB limit and threw
RangeError: Invalid string length. Five distinct sites had this pattern; the dominant one wasexecuteDownload'sytDlpLog(live for the entire download), which matches the 4 319 fatal-event volume. - Fix: introduced
createBoundedTextBuffer(8 MB cap, single-shot truncation notice) insrc/main/lib/bounded-output-buffer.tsand rewired all yt-dlp / ffmpeg readers to use it. - Files:
src/main/lib/bounded-output-buffer.ts(new)src/main/lib/download-engine.ts(getVideoInfo,getVideoInfoWithCommand,getPlaylistInfo,executeDownload)src/main/lib/watermark-utils.ts(runFfmpeg)
- GlitchTip status: unresolved (no auth token locally)
- Follow-up: confirm by tail-watching
error.102417.xyz/vidbee/issues/7849for new events on the next release. Resolve once a stable run shows zero new fatalRangeError: Invalid string lengthevents for ≥ 7 days.
VIDBEE-68 — yt-dlp Postprocessing / generic createError noise
- Sentry: https://error.102417.xyz/vidbee/issues/305
- Level: error · events: 1 325 (group 68 alone) · last seen: 2026-04-30
- Root cause: every yt-dlp child-process error funnelled through
YTDlpWrap.createError, thendownload-enginere-emitted it as adownload-errorandindex.tscaptured it to GlitchTip withfingerprint = ['download-error', error.name, error.message]. The raw stderr blob inerror.messagemade fingerprints unstable, scattered groupings (E / DE / 1G / 6I / 2 / 6FN / 2A …), and buried the small number of genuine VidBee defects under upstream / user-side noise. - Fix: added
classifyDownloadError(insrc/shared/telemetry/yt-dlp-error-classifier.ts) that maps an error to one ofpostprocessing | http-error | unsupported-url | access-denied | unavailable | rate-limit | network | auth-required | drm-protected | no-format | cookies-required | environment | cancelled | unknown. Thedownload-errorlistener insrc/main/index.tsnow skipscaptureMainExceptiononly when the matched rule is marked operational, and tags captured events withdownload_error_categoryso future grouping is stable. - Follow-up filter audit (NEX-114): generic HTTP failures, generic
postprocessing failures, extractor/parser failures, broad TLS timeout
strings, bare Windows error codes, and bare
AggregateErrorsubscription failures were made reportable again. The operational list now keeps only narrower user-state, source-availability, and environment cases quiet, while still preserving category tags for the reportable cases. - Files:
src/shared/telemetry/yt-dlp-error-classifier.ts(new)src/main/index.ts(download-errorlistener)
- GlitchTip status: unresolved
- Follow-up: monitor for ≥ 1 week on a release that ships this change. If
the
unknownbucket is small and stable we can resolve VIDBEE-68 and the E/DE/1G/6I/2/6FN/2A siblings. If a new operational pattern appears, extendCATEGORY_RULESrather than re-listing it inissue-filter.ts(the classifier is the source of truth now).
VIDBEE-16 — DrizzleError: ALTER TABLE add yt_dlp_command
- Sentry: https://error.102417.xyz/vidbee/issues/67
- Level: error · events: 156 · last seen: 2026-04-19 (release 1.3.7, Windows)
- Root cause: legacy 1.3.x desktops applied the
yt_dlp_commandcolumn via a rawALTER TABLEon an older release; their__drizzle_migrationstable no longer matched the journal hash, so re-running the migration threwSqliteError: duplicate column name: yt_dlp_commandon startup.reconcileLegacyMigrationStatewas already added in 1.3.8 but doesn't cover every drift case. - Fix: in
src/main/lib/database/migrate.tsaddedmatchDuplicateColumnErrorandfindLegacyMigrationForColumn. Whenmigrate()throws a duplicate-column error we look up which legacy migration adds that column, backfill its hash into__drizzle_migrations, and retry once. SQLite has noADD COLUMN IF NOT EXISTS, so this self-heal pattern is preferred over rewriting the journal. - Files:
src/main/lib/database/migrate.ts
- GlitchTip status: unresolved
- Follow-up: the original error was already trending down post-1.3.8. With the duplicate-column retry we expect it to drop to zero on the next release. Mark resolved when no events are seen for ≥ 14 days.
VIDBEE-H8 — Renderer process became unresponsive
- Sentry: https://error.102417.xyz/vidbee/issues/712
- Level: warning · events: 108 · last seen: 2026-04-29 (release 1.3.10, Windows)
- Root cause: Electron's
unresponsiveevent has no JS stack, so previous reports were unactionable. The task description explicitly accepts diagnostic-only work for this one. - Fix:
- Main process (
src/main/index.ts): only captureunresponsiveafter a sustained 5 s freeze (Electron emits transient hangs too). Record the measuredunresponsive_mson both the captured warning and on theresponsiverecovery message, so a 6 s blip and a 60 s lockup can be told apart in GlitchTip. - Renderer (
src/renderer/src/main.tsx): install aPerformanceObserver({ entryTypes: ['longtask'] })that adds aperformancebreadcrumb (with duration / startTime) for every synchronous task ≥ 200 ms. Breadcrumbs ride along on the next captured event, which gives us a localized hint on what was blocking the main thread when the freeze started.
- Main process (
- Files:
src/main/index.ts(setupRendererErrorHandling)src/renderer/src/main.tsx(setupLongTaskObserver)
- GlitchTip status: unresolved (diagnostic-only) — by design. We intentionally did not attempt a code fix because we don't yet know which workload causes the freeze.
- Follow-up: once the diagnostic data lands in GlitchTip on the next
release, group VIDBEE-H8 events by the new
unresponsive_msand long-task breadcrumb names to identify the worst offenders. Open follow-up tickets for the specific code paths instead of trying to resolve VIDBEE-H8 directly.