Commit Graph
58 Commits
Author SHA1 Message Date
Sucukdeluxe 6547e6dbbc fix(ci): canonicalize 8.3 short paths in cutter matrix ownership checks
Windows CI / verify (push) Failing after 1m26s
assertPathInside compared managed-tool paths with path.resolve only, so
on runners whose temporary directory surfaces as a Windows 8.3 short
path (RUNNER~1) the canonical long executable paths appeared to live
outside the owned root and the cutter matrix provisioning contract
failed. Resolve both sides through fs.realpathSync.native, walking up
through not-yet-existing segments so planned directories keep working,
and cover the contract with a real ShortPath regression test plus
mixed-existence canonicalization cases.
2026-08-14 13:06:52 +02:00
Sucukdeluxe 0f845f0735 chore(release): finalize 1.0.18 notes and public file inventory
Windows CI / verify (push) Has been cancelled
Document the tool availability fallback, the mid-transfer download
failure handling, the managed tools status hint and the unified
auto-install error messages in the 1.0.18 changelog, move the release
date to 2026-08-14 and add the new src/tools.test.ts suite to the public
release file inventory.
2026-08-14 12:49:48 +02:00
Sucukdeluxe 477dfd5750 fix(tools): never block downloads while a runnable tool exists
ensureStreamlinkInstalled and ensureFfmpegInstalled forced a managed
reinstall whenever a bundled tool directory existed without passing
manifest verification. When that reinstall failed (offline, blocked
download, locked executable), both functions returned false without ever
probing the tool that was already present and runnable, so every
download path aborted with an auto-install error while the System Check
kept reporting the same tool as available. Both functions now fall back
to the same executability probe the System Check uses after a failed
managed repair, cache the verified command on success, and only report
failure when nothing runnable remains. The repair attempt itself is
preserved and retried on the next call.

The tool archive download also registered no error handler on the HTTP
response stream. A stream that failed mid-transfer settled neither the
writer finish nor the writer error path, leaving the install promise
pending forever and the download start hanging indefinitely. The
response stream now rejects the download on error and destroys the
writer.

Merge group downloads reported the bare "Streamlink is missing." text
while the VOD and live paths already explained the failed auto-install.
All three gates now share streamlinkAutoInstallFailed, ffmpeg gained the
matching ffmpegAutoInstallFailed message, and the now unused
streamlinkMissing and ffmpegMissing keys were removed.

The Managed tools panel showed "Missing / Unverified" with no hint that
downloads still work through a system-provided installation, which reads
like a hard failure on machines that never installed the managed copies.
getManagedToolStatuses now reports per tool whether a runnable
installation answers the version probe, and the panel appends a
localized "Downloads still available" note whenever an unverified state
is covered by a working tool.
2026-08-14 12:46:02 +02:00
Sucukdeluxe 9e8a3a0f4d Fix Windows release verification portability
Windows CI / verify (push) Failing after 2m35s
Canonicalize shortcut targets across Windows short and long path forms while preserving exact target validation. Keep Gitea 1.22 push verification parser-compatible and harden CI contracts against skipped or weakened live gates.
2026-08-13 23:45:53 +02:00
Sucukdeluxe 9f1b052afd Release Twitch VOD Manager 1.0.18
Harden update, system-check, queue, cutter, streamer and shutdown state transitions.

Add multi-user installer recovery, secret-safe config migration, provider fallback handling, managed-tool validation and real media export coverage.

Refresh the English public documentation, release notes and 1.0.18 product screenshot.
2026-08-13 22:59:15 +02:00
Sucukdeluxe f37142401f Replace public streamer test handles
Windows CI / verify (push) Successful in 2m52s
Use clearly synthetic streamer fixtures in the workspace Electron smoke so the public source release contains no real account handles while preserving display-case and navigation-motion coverage.
v1.0.17
2026-08-13 11:55:45 +02:00
Sucukdeluxe c66e9c9ab1 Fix remaining UI state and shutdown edge cases
Keep the loaded cutter layout stable across supported window sizes, preserve recovered encoder choices during capability discovery, and reject unsupported video selections without changing the active project.

Honor the Windows system theme, fully localize runtime metrics, invalidate imported System Check state safely, and bound child-process shutdown waits when close events never arrive.

Extend focused and Electron smoke coverage and prepare the v1.0.17 public release metadata.
2026-08-13 11:24:48 +02:00
Sucukdeluxe 2ee10a98dd Fix System Check state across language changes
Windows CI / verify (push) Successful in 3m6s
v1.0.16
2026-08-13 06:10:36 +02:00
Sucukdeluxe 35079a0753 Exclude compiled tests from release package
Windows CI / verify (push) Successful in 2m50s
Keep generated test modules and their fixture data out of app.asar, and enforce the packaging exclusion in the public release contract.
v1.0.15
2026-08-13 04:47:28 +02:00
Sucukdeluxe c0d45ab268 Polish update and settings workspace UI
Keep download progress inside the updater popover, slow changelog transitions, and improve dark-theme checkbox contrast. Expand diagnostics, prevent cleanup option clipping, improve navigation readability, and cover the affected states in Electron regression tests. Prepare version 1.0.15 release metadata.
2026-08-13 04:41:42 +02:00
Sucukdeluxe f4df47c89f ci: provision Electron before focused smoke tests
Windows CI / verify (push) Successful in 3m23s
Retry Electron binary provisioning before Windows smoke tests and retain bounded retries for package and installer builds. Bump release contracts to 1.0.14.
v1.0.14
2026-08-12 22:00:39 +02:00
Sucukdeluxe 17b982016f ci: retry transient Windows installer packaging
Windows CI / verify (push) Successful in 3m48s
Extend the bounded Electron download retry to the installer build, then bump the release contracts to 1.0.13.
v1.0.13
2026-08-12 21:55:07 +02:00
Sucukdeluxe 1a1c37720e ci: retry transient Windows packaging downloads
Windows CI / verify (push) Successful in 3m45s
Retry the directory package once when Electron download transport is interrupted, keeping the Windows CI step bounded. Bump the release contracts to 1.0.12.
v1.0.12
2026-08-12 21:48:04 +02:00
Sucukdeluxe 275d252f25 test(ci): isolate Electron secure storage coverage
Windows CI / verify (push) Failing after 3m41s
Mock Electron in the Node-only secure-storage unit test so its expected unavailable-path assertion never triggers Electron's binary bootstrap. Bump the patch release contracts to 1.0.11 after the 1.0.10 tag CI failure.
v1.0.11
2026-08-12 21:40:39 +02:00
Sucukdeluxe aa28a0b870 fix(release): harden updater status and cutter layout
Windows CI / verify (push) Failing after 3m37s
Ignore malformed update notifications that do not carry a version, preventing unusable release prompts in installed builds.

Keep the loaded cutter workspace free of the source selector and give cutter export selects an explicit non-repeating indicator after workspace styling.

Add regression coverage, bump the patch release to 1.0.10, and update public installation documentation.
v1.0.10
2026-08-12 21:30:08 +02:00
Sucukdeluxe 7d4ba91543 ci: confirm Gitea branch verification
Windows CI / verify (push) Successful in 3m25s
2026-08-12 20:00:26 +02:00
Sucukdeluxe 8e202bea7a ci: provision Windows runner profile
Windows CI / verify (push) Failing after 3m25s
2026-08-12 19:52:55 +02:00
Sucukdeluxe 24ec903c70 ci: verify self-hosted Windows runner
Windows CI / verify (push) Failing after 1m24s
2026-08-12 19:46:00 +02:00
Sucukdeluxe 5113089aba fix(managed-tools): wait for checksum handles before promotion
Windows CI / verify (push) Successful in 3m18s
Delay managed-tool installation promotion until checksum read streams have emitted close, preventing intermittent Windows rename failures caused by open file handles.

Add a deterministic end-before-close regression test and prepare the 1.0.9 patch release across package metadata, UI version text, README, changelog, and release contracts.
v1.0.9
2026-08-12 15:18:57 +02:00
Sucukdeluxe 2cd8d97a20 fix: stabilize Windows CI on Node 24
Windows CI / verify (push) Failing after 42s
v1.0.8
2026-08-12 13:19:51 +02:00
Sucukdeluxe 49033f9ff2 release: publish 1.0.7 Windows shell fixes
Windows CI / verify (push) Failing after 8s
Stabilize Start menu and desktop shortcut migration with persistent versioned icon resources, stale-registration recovery, and explicit Windows shell notifications. Keep development, packaged, and shortcut identities aligned, and add regression coverage for orphaned per-user installs, reduced-motion changelog transitions, and update-popover pointer transit.
v1.0.7
2026-08-12 12:55:46 +02:00
Sucukdeluxe 5bc58a0d85 test(installer): wait for Windows cleanup completion
Windows CI / verify (push) Failing after 21s
v1.0.6
2026-08-12 03:27:29 +02:00
Sucukdeluxe 0aebc701d8 test(packaging): retry isolated launch cleanup 2026-08-12 03:23:53 +02:00
Sucukdeluxe fe57607790 test(cutter): assert the safe replacement label 2026-08-12 03:19:40 +02:00
Sucukdeluxe 30ce93b4c9 test(release): align workspace fixtures with media contracts 2026-08-12 03:16:13 +02:00
Sucukdeluxe 3ae398cfc8 chore(release): prepare v1.0.6 2026-08-12 03:11:51 +02:00
Sucukdeluxe a472f5dac9 fix(windows): restore taskbar identity and shared downloads 2026-08-12 03:10:23 +02:00
Sucukdeluxe be5d60a0ca fix(cutter): protect recovery and verify hardware encoders 2026-08-12 03:00:39 +02:00
Sucukdeluxe 86920b5410 fix(downloads): share throttle budget globally 2026-08-12 03:00:36 +02:00
Sucukdeluxe 40e4e630cf chore(release): include download policy sources 2026-08-12 02:44:40 +02:00
Sucukdeluxe c44314ea2c feat(downloads): apply bandwidth and schedule policy 2026-08-12 02:43:06 +02:00
Sucukdeluxe 661d7d9858 fix(release): preserve Windows signing defaults 2026-08-12 02:37:39 +02:00
Sucukdeluxe 66e84508c8 ci: add Windows quality and packaging gates
Teach ESLint the classic renderer and mixed CommonJS harness runtimes while retaining actionable rules. Add deterministic credential, lockfile, release-manifest, and lint contracts plus equivalent GitHub and Gitea Windows pipelines. Gate clean installs, focused offline smoke coverage, builds, packaged launches, and silent installer verification without enabling authenticated network tests.
2026-08-12 02:32:07 +02:00
Sucukdeluxe e5114b814f feat(cutter): add crash-safe project recovery and export profiles
Persist source-bound cutter projects atomically and expose recovery, discard, save, and open actions through the secured IPC bridge. Add explicit quality, balanced, fast, and archive export pipelines with rotation, audio-track selection, hardware encoder probing, and software fallback. Align main, preload, renderer, UI styles, and focused coverage; remove the reported main-process lint errors without changing unrelated work.
2026-08-12 02:29:47 +02:00
Sucukdeluxe b65d73b236 feat(policy): add download schedule decisions
Provide a pure persisted policy contract for optional app-side throughput limits and local download windows. Cover overnight timing, local Date DST behavior, invalid values, and manual window overrides without creating Streamlink arguments.
2026-08-12 02:24:38 +02:00
Sucukdeluxe c3faeddf17 fix(accessibility): preserve virtual viewer focus
Keep chat and event viewer focus on a listbox with an active descendant instead of creating row tab stops. Provide a full-text detail dialog for keyboard users with Escape focus restoration and production-path coverage for scrolling and selection.
2026-08-12 02:18:26 +02:00
Sucukdeluxe 42cb707313 test(accessibility): cover real renderer interaction paths
Exercise delegated queue and VOD context menus plus chat and event viewer cancellation through compiled renderer code. Make truncated virtual rows keyboard-focusable with complete accessible labels and visible focus feedback.
2026-08-12 02:07:17 +02:00
Sucukdeluxe 348c37cbdb fix(accessibility): stabilize virtual viewer interactions
Use cancellable, generation-aware reads and removable virtual scrolling for chat and event viewers. Constrain virtual rows to fixed single-line heights, clean busy state, stop Escape propagation, and cover dialog, menu, palette, and virtual list interactions.
2026-08-12 01:55:50 +02:00
Sucukdeluxe 9c17269a54 feat(accessibility): harden chat and keyboard interactions
Stream capability-authorized chat reads with cancellation, virtualize viewer rendering, centralize modal focus management, and add keyboard-accessible queue and VOD menus. Expose command palette combobox state and keep the document language synchronized with the selected locale.
2026-08-12 01:42:42 +02:00
Sucukdeluxe aa06d486be fix(tools): recover staged first installs asynchronously
Promote a verified staged first installation after interruption and clear stale first-install journals. Stream archive and managed executable hashes, make status recovery non-blocking, and await the propagated tool and IPC status contracts.
2026-08-12 01:23:15 +02:00
Sucukdeluxe 60b5aa8ca9 fix(tools): recover interrupted managed installs
Persist atomic promotion state beside each managed tool, restore usable backups after interrupted renames, and retain precise recovery failures. Verify installed executable hashes from the staged manifest record and make cleanup diagnostics unable to strand repair single-flight state.
2026-08-12 01:14:17 +02:00
Sucukdeluxe d32f42746d fix(tools): verify pinned archives before atomic install
Pin Streamlink and FFmpeg archives to verified manifests, stage replacements before promotion, and expose managed tool status with repair and reset controls. Keep updater checks exclusive until their underlying operation settles and restore default electron-builder certificate environment support.
2026-08-12 00:59:45 +02:00
Sucukdeluxe 421da7be77 fix(persistence): serialize autosave generations before queue effects
Track settings input generations so an older asynchronous secret save cannot mark a newer value durable. Commit queue snapshots before cancellation, cleanup, or pause effects so SQLite failures leave runtime processes and files unchanged.
2026-08-12 00:38:49 +02:00
Sucukdeluxe 6f02e9aa3a fix(persistence): preserve authoritative state on write failures
Keep SQLite authoritative after completed migration even when legacy JSON is later invalid, reject non-object config documents before any migration state is written, and guard async secret masking by input generation. Persist renderer-facing config and queue mutations before updating memory so SQLite errors reject IPC calls and retain the last durable queue snapshot.
2026-08-12 00:21:55 +02:00
Sucukdeluxe 47be523b41 feat(security): encrypt secrets and centralize app state
Store Twitch and Discord secrets as versioned safeStorage ciphertext behind explicit trusted IPC. Migrate legacy JSON transactionally into authoritative SQLite config and ordered queue repositories with rollback-safe markers and sanitized backups. Redact config exports and update renderer and release-harness contracts for secret-free config responses.
2026-08-11 23:44:20 +02:00
Sucukdeluxe 6147c9b812 fix(security): harden privileged renderer boundaries
Reject renderer-owned queue internals before persistence and bind privileged handlers to trusted renderer events. Extend cutter session capabilities without weakening owner, purpose, path identity, or expiry checks. Migrate release harness contracts to opaque capabilities and add an invisible Node gate.
2026-08-11 23:12:11 +02:00
Sucukdeluxe a79af3f3fe fix(security): gate privileged file IPC with capabilities 2026-08-11 22:51:47 +02:00
Sucukdeluxe de05539422 fix(queue): await real process exit before cleanup
Start process-exit waits only when pause or cancellation begins, escalate stubborn children without resolving before close, latch pause across late registrations and fast resume, and retry concat only after a complete resume. Add real child-process and filesystem integration coverage for pause, shutdown cleanup, and persistence order.
2026-08-11 22:28:35 +02:00
Sucukdeluxe 1140c8526e fix(queue): isolate process lifecycle per item
Track Streamlink and FFmpeg resources by queue item so parallel jobs can pause, resume, cancel, retry, and clean up independently. Gate queue scheduling during shutdown, await the active queue owner, retain retry artifacts on ordinary failures, remove partial outputs on cancellation, and flush queue state once after active work settles.
2026-08-11 22:15:47 +02:00
Sucukdeluxe aa53fcf7e8 release: publish Twitch VOD Manager 1.0.5 v1.0.5 2026-08-11 21:06:37 +02:00