Commit Graph
81 Commits
Author SHA1 Message Date
Sucukdeluxe 3cb34f8039 Gate external window reveals on renderer readiness
Route second-instance activation, tray clicks, tray menu activation, and drop-target restores through one startup reveal gate. External focus and restore requests now remain queued until the active renderer generation reports Ready or the coordinator exposes the branded failure surface.

Block the gate and reset close-handshake readiness synchronously before every renderer recovery navigation and failure-document load. This keeps early loadFile rejection from leaving the terminal failure surface subject to the normal renderer close-preparation handshake.

Add production-like event binding regressions for all four external reveal paths, authorized Ready and failsafe reveals, and direct closing of the safe failure surface after an early recovery rejection.
2026-08-13 23:24:29 +02:00
Sucukdeluxe e124ab2923 Sanitize strict diagnostics storage failures
The strict ConfigStore readers previously propagated native filesystem and JSON parser errors. On Node 24, malformed JSON can be quoted in the parser message, so an opaque value from a corrupt history file could cross the collector and diagnostics-agent boundary unchanged when it was not one of the configured secrets.

Map strict config and history read, parse, and shape failures to a closed set of constant content-free errors. Keep separate invalid, read-failed, and history-not-found codes so the pre-migration history fallback remains limited to a genuinely absent dedicated file. Do not retain native errors or raw input as causes, while leaving credential decryption failures and the recovery-oriented UI readers unchanged.

Add boundary coverage for corrupt config JSON, invalid shapes, and read failures, plus an end-to-end ConfigStore-to-collectors-to-agent regression proving get_history, list_errors, and server_health never return a planted opaque history value.
2026-08-13 23:21:08 +02:00
Sucukdeluxe a8065a2313 Reject deleted legacy upload identities 2026-08-13 23:15:24 +02:00
Sucukdeluxe f95e68bdb3 Fail closed on diagnostic config and history reads
Diagnostics previously reused the recovery-oriented ConfigStore readers. A missing, unreadable, or corrupt primary config could therefore be replaced by cached, backup, or default data, leaving diagnostics without a trustworthy decrypted secret set. Dedicated history failures and invalid payloads could likewise become a healthy empty result or stale config history.

Add explicit diagnostic config and history reader contracts. The config path bypasses caches and recovery fallbacks, validates the primary document, decrypts its current credentials, and propagates read, parse, validation, and decryption failures. The history path accepts a valid empty array, rejects unreadable or malformed dedicated data, and uses strict legacy config history only when no dedicated file exists. Keep the normal UI recovery readers unchanged and wire diagnostics to the strict contracts.

Cover primary recovery isolation, decryption failure propagation, valid empty history, corrupt and unreadable history, stale-history fallback prevention, pre-migration compatibility, and main-process wiring. Existing collector tests continue to prove successful responses, response-boundary redaction, shared history semantics, and snapshot non-mutation.
2026-08-13 23:10:05 +02:00
Sucukdeluxe c78160a521 Harden batch-wide recovery identity claims
Scope remote code ownership to normalized hoster and account identities while retaining title-only recovery serialization and canonical Unicode title matching.

Mark post-upload ambiguity and duplicate identities as uncertain so retries, account fallback, and later same-title jobs fail closed instead of reporting unsafe success.

Acquire recovery title leases before hoster and global semaphores, revalidate failed-account overrides before upload, and clear claim state at batch boundaries.

Add deterministic concurrent coverage for same-code rejection, distinct-code parallel success, uncertainty propagation, semaphore fairness, account isolation, Unicode equivalence, and registry lifetime.
2026-08-13 23:09:03 +02:00
Sucukdeluxe dd14381e43 Fix generation-safe renderer startup recovery
Bind renderer Ready and initialization-failure IPC to per-navigation document URLs and main-frame identity so stale documents cannot cancel the active deadline or reset the recovery budget.

Serialize initial-load retries with crash, initialization, and timeout recovery behind one bounded navigation budget. Keep the main window hidden until a validated Ready signal while allowing the branded failsafe to become visible.

Move production lifecycle wiring into the startup handlers and add event-driven regressions for stale Ready signals, pre-finish initialization failures, timeout recovery, visibility, and crashes during the initial navigation.
2026-08-13 22:58:48 +02:00
Sucukdeluxe 097fe3e237 Clarify source cleanup audit logging 2026-08-13 22:55:39 +02:00
Sucukdeluxe c54cf6b22e Harden renderer modal and upload races 2026-08-13 22:52:19 +02:00
Sucukdeluxe 1c8e9067ee fix: fail closed for diagnostic history reads
Require the decrypted configuration and its complete secret set before loading or returning any diagnostic history data. Propagate configuration failures so the agent response boundary falls back to its generic safe error instead of emitting unredacted history content.

Reject thrown and non-array dedicated history reader failures as unhealthy operations without consulting stale config history. Preserve redaction of reader errors at the agent boundary.

Keep caller-owned history snapshots unchanged by isolating the per-hoster summarizer from the reader array, and cover get_history, list_errors, and server_health with focused red-green regressions.
2026-08-13 22:48:21 +02:00
Sucukdeluxe f03e0c8c22 Keep the public source manifest exact
Allow the committed remote input regression test in the positive-list source verifier. The verifier still rejects every unlisted path and now accepts the complete v2.1.20 source snapshot without broadening any directory or extension rules.
2026-08-13 22:37:26 +02:00
Sucukdeluxe c209abdbbc Fix duplicate VOE and Vidmoly recovery claims
Share account-scoped recovery claims with login uploader instances and serialize same-title recovery windows. Reserve direct and recovered file codes consistently, reject reused identities, and cover concurrent singleton recovery plus distinct-code and parallel-success cases.
2026-08-13 22:30:27 +02:00
Sucukdeluxe acb43d982e fix: unify diagnostics history access
Resolve diagnostic history through the injected loadHistory dependency whenever it is available, retaining config history only for legacy collectors without a dedicated reader.

Build server_health error and batch summaries from one validated snapshot so migrated installations cannot combine current batches with stale errors or parse the external history twice.

Add focused regressions for migrated history consistency and fail-closed handling of invalid dedicated history results.
2026-08-13 22:28:26 +02:00
Sucukdeluxe a4d0854e76 Harden renderer startup readiness recovery
Require a bounded Ready signal after each main-document load, cancel the deadline on successful readiness or window disposal, and keep recovery limited to one reload before the branded failure surface.

Route renderer initialization failures through production startup handlers and reject malformed authenticated remote keyboard payloads without throwing or logging.
2026-08-13 22:25:28 +02:00
Sucukdeluxe d5ff45644c Preserve recovered terminal upload results 2026-08-13 22:18:18 +02:00
Sucukdeluxe f31cb4a5b2 Isolate renderer smoke from unit tests 2026-08-13 21:57:36 +02:00
Sucukdeluxe c359669ccf Prepare v2.1.20 release 2026-08-13 21:52:55 +02:00
Sucukdeluxe 20cef3b09c Initialize recovery dialog before renderer startup 2026-08-13 21:51:51 +02:00
Sucukdeluxe 7fed7a7588 Harden renderer recovery and UI contracts 2026-08-13 21:48:11 +02:00
Sucukdeluxe 86d10aad1f Fix concurrent upload batch accounting
Reserve accepted job IDs before asynchronous upload preparation so parallel additions cannot start duplicate jobs or replace their abort controllers. Track late-added jobs in the batch total and keep failure counts non-negative, with focused race and summary regressions.
2026-08-13 21:42:14 +02:00
Sucukdeluxe df9d5a5af4 Require real renderer checks in CI 2026-08-13 21:41:52 +02:00
Sucukdeluxe 47bceebe15 Harden dual release metadata and CI verification 2026-08-13 21:40:17 +02:00
Sucukdeluxe 1dd0e32709 Close startup and recovery transaction gaps 2026-08-13 21:37:00 +02:00
Sucukdeluxe c1003074cd Make history and remote message handling fail closed 2026-08-13 21:34:30 +02:00
Sucukdeluxe 06a3cfc050 Use canonical product name in release titles 2026-08-13 21:29:01 +02:00
Sucukdeluxe 82e74a18c6 Harden same-name hoster recovery
Serialize recovery windows per hoster account and normalized filename, reserve remote codes across the batch, and keep cancellation responsive while waiting. Reject semantic and malformed file-list baselines instead of treating them as empty accounts, with focused regression coverage and release allowlist updates.
2026-08-13 21:22:52 +02:00
Sucukdeluxe 107dcfb9ae Use the canonical product name in public surfaces
Align the README, support bundles, webhook payloads, and updater identity with Multi Hoster Uploader while preserving repository and artifact slugs for compatibility.
2026-08-13 21:18:46 +02:00
Sucukdeluxe c80b86594d Persist recovery before accepting upload work
Fail closed if the initial or extended recovery marker cannot be written, retain exact terminal outcomes after catastrophic start failures, and localize the resulting user-visible errors.
2026-08-13 21:17:38 +02:00
Sucukdeluxe 746ae29a4f Retain exact recovery after batch start failure
Persist job-ID terminal outcomes before final queue acknowledgement and clear recovery evidence only after both the terminal marker and renderer queue are durable.
2026-08-13 21:16:04 +02:00
Sucukdeluxe a7fb3421f1 Keep diagnostics strictly local
Discard legacy network allowlists, report the actual loopback-only runtime contract, and return a generic safe error if the final diagnostic reply boundary fails.
2026-08-13 21:13:34 +02:00
Sucukdeluxe 3ced148ee8 Harden upload lifecycle and renderer recovery
Serialize upload starts across durable audit work, drain in-flight batch additions before cleanup, and fail closed when recovery persistence is incomplete. Wire bounded renderer reload recovery with a branded localized failure surface and use merge-safe fallback log persistence.
2026-08-13 21:11:48 +02:00
Sucukdeluxe 4c48044a95 Harden diagnostic response redaction
Redact every diagnostic response at the agent boundary, fail closed when sanitization cannot complete, and remove Windows, UNC, and slash-UNC paths from returned data. Preserve benign text while removing complete configured secret values, including nested JSON escapes and quoted HTML credential fields. Add focused regression coverage for collector errors, successful responses, support bundles, path variants, and punctuation secrets.
2026-08-13 21:08:26 +02:00
Sucukdeluxe 76ad81a0d3 fix: harden audit durability and fallback config writes 2026-08-13 21:07:28 +02:00
Sucukdeluxe 07c81c0123 Add batch mutation drain gate 2026-08-13 21:06:00 +02:00
Sucukdeluxe 4b7011131d Reject every non-loopback runtime listener 2026-08-13 20:59:30 +02:00
Sucukdeluxe e58a38a915 feat: coordinate bounded renderer startup recovery
Retry the initial renderer load once, then resolve repeated failures through a visible safe surface or a controlled close.

Bound renderer crash reloads until a successful ready signal resets recovery, keep terminal handling idempotent, and cover retries, fallback failures, reload failures, ready resets, and late events with focused tests.
2026-08-13 20:58:35 +02:00
Sucukdeluxe 5667dcc74c Clarify hot reload change reporting 2026-08-13 20:57:06 +02:00
Sucukdeluxe 6e6f14cd12 Expose safe actionable upload diagnostics 2026-08-13 20:56:19 +02:00
Sucukdeluxe 2b56cd6373 fix(dev): serialize Electron hot reload restarts
Replace callback-based restarts with a coalescing state machine that keeps the active child tracked through tree termination and prevents overlapping kill/start cycles.

Block replacement starts after kill failures or shutdown signals, preserve stale-exit protection and source watch coverage, and add deterministic regression tests for restart races.
2026-08-13 20:55:24 +02:00
Sucukdeluxe f9b57f4b0e Prove responsive cancellation at full concurrency 2026-08-13 20:53:31 +02:00
Sucukdeluxe 967fef4eed Require public URLs for upload output 2026-08-13 20:52:12 +02:00
Sucukdeluxe 31b5766254 Harden packaged identity and local listener binding 2026-08-13 20:49:48 +02:00
Sucukdeluxe 4630c8c467 Preserve queue recovery and desktop drop integrity
Resolve floating drops through Electron native paths, expand folders recursively, correlate terminal outcomes by job ID until final queue persistence succeeds, and keep current queue badges, telemetry, cancellation behavior, and copy-link wording synchronized.
2026-08-13 20:45:01 +02:00
Sucukdeluxe b64cdd0ff3 fix: harden hoster confirmation and recovery
Require every successful upload to expose a validated HTTPS result and rebuild all Doodstream and DSVPlay output from the confirmed file code.

Keep failed baselines distinct from empty accounts, reject stale, foreign, and ambiguous recovery candidates across Doodstream, Byse, VOE, and Vidmoly, and preserve exact filename recovery with normalized extensions.

Emit bounded structured transport diagnostics without raw response bodies or tokenized URLs, and remove sensitive values from Doodstream debug traces.

Tests: node --test tests/upload-confirmation.test.js tests/hosters.test.js tests/doodstream-api-upload.test.js tests/doodstream-upload.test.js tests/byse-reject-recovery.test.js tests/hoster-recovery-provenance.test.js tests/suspect-reject-alternates.test.js

Lint: eslint lib/hoster-transport-error.js lib/hosters.js lib/doodstream-upload.js lib/voe-upload.js lib/vidmoly-upload.js lib/upload-confirmation.js
2026-08-13 20:43:48 +02:00
Sucukdeluxe e63214cae8 Harden audit durability and diagnostic redaction
Persist fallback audit targets before use and fail upload starts or active-batch additions closed when the plan cannot be recorded. Keep lifecycle audits out of session and debug logs, expose diagnostics through opaque metadata, localize audit failures, and redact paths plus complete credential values without corrupting benign text.
2026-08-13 20:34:26 +02:00
Sucukdeluxe a98b63618d Gate active batch additions on cleanup persistence
Route folder-monitor and hoster-selection additions through the shared active-batch start path so revoked source-cleanup confirmations are durably saved before Main receives any new job. Add real Electron coverage for blocked persistence, ordered success, and rejected saves across both entry points.
2026-08-13 20:08:21 +02:00
Sucukdeluxe 67978cb81f Harden source cleanup durability barriers
Separate provisional upload success from persistently confirmed cleanup state, invalidate prior confirmations before retries, and promote completion only inside the final queue persistence handshake. Preserve source files when history or queue persistence fails and add regression coverage for restart, retry, rollback, and real Electron finalization paths.
2026-08-13 19:45:31 +02:00
Sucukdeluxe bfb3a39fed fix: harden upload cancellation and audit logging
Preserve pre-start and batch cancellation requests, reject late upload success after cancellation, and wait for cancellation acknowledgements before removing queue entries.

Separate formatted link logs from privacy-safe source cleanup and upload plan audits, persist audit fallback paths, redact support bundles, and expose audit diagnostics safely.

Improve queue selection and destructive-action clarity, show the Settings save action only while changes are pending, and add regression coverage for all updated behavior.
2026-08-13 14:31:46 +02:00
Sucukdeluxe 59cead80c6 fix: stabilize renderer state and lifecycle updates
Prevent stale history, account, diagnostics, and language updates from repainting newer state. Keep queue virtualization, panel sizing, telemetry, cancellation, and runtime timing consistent across rapid UI changes. Strengthen painted-frame and lifecycle regression coverage, and brand packaged Windows metadata with the product publisher.
2026-08-13 07:07:42 +02:00
Sucukdeluxe b7754f355b release: v2.1.17
Render upload progress from fractional transfer values while keeping the visible percentage rounded. Move the green fill with a linear compositor transform and cover the 92-to-93 percent transition with monotonic frame-level Electron assertions.

Keep Electron UI verification listeners loopback-only so development validation no longer raises a Windows Firewall prompt under electron.exe. Extend the public source allowlist with the focused network safety regression coverage.
2026-08-13 04:37:18 +02:00
Sucukdeluxe a299fc204b release: v2.1.16
Add queue search and filters, safe upload diagnostics, session report exports, account check visibility, and explicit interrupted-upload recovery.\n\nSanitize diagnostic response snippets in persisted results and rotation logs, protect CSV exports against formula injection, and add regression coverage for diagnostics and reports.
2026-08-12 12:04:47 +02:00