Skip to content

Releases: OnlyXianzo/Grablytic

Grablytic v0.0.6

Choose a tag to compare

@github-actions github-actions released this 22 Oct 03:03
d8b4755

What's Changed

  • docs: publish AGENTS.md and reusable agent skills by @OnlyXianzo in #14
  • Harden teardown network boundaries by @OnlyXianzo in #15
  • fix: resolve the 61-finding nuclear code-quality review (engine, app, Android, CI) by @OnlyXianzo in #16
  • docs: publish project vault and align typography by @OnlyXianzo in #17
  • docs(readme) + fix: second-pass review findings, broad-catch ratchet by @OnlyXianzo in #18
  • fix: cancelled batch items reach the engine, expired retries stop, schema v8 for existing installs by @OnlyXianzo in #19
  • perf: close the third-pass residuals and its seven findings by @OnlyXianzo in #20
  • Pass 4: the engine stops starting itself (#91–#98) by @OnlyXianzo in #21
  • Skeleton loaders, pre-scaled logo assets, faster share start by @OnlyXianzo in #22
  • ci: add CI Log Digest workflow (readable failure cause from the checks API) by @OnlyXianzo in #23
  • ci(digest): '/ci-digest ' slash command for the log digest by @OnlyXianzo in #24
  • ci(digest): self-diagnosing log fetch (and a push escape hatch) by @OnlyXianzo in #25
  • ci(digest): strip ANSI, allow escape sequences, publish the tail by @OnlyXianzo in #26
  • ci(digest): anchor the report on the step's own ##[error] marker by @OnlyXianzo in #27
  • ci(digest): anchor the report on the step's own ##[error] marker by @OnlyXianzo in #28
  • fix(engine): bound download file names in bytes (Errno 36 on long titles) by @OnlyXianzo in #30
  • Polish Library and download history UI by @OnlyXianzo in #31
  • Improve privacy-conscious crash and bug reporting by @OnlyXianzo in #32
  • Capture crashes that were never opted into, and stop reporting from blocking shutdown by @OnlyXianzo in #35
  • Close five scrubbing and logging gaps the last pass found by @OnlyXianzo in #36
  • Reports: fix the $1 artefact, one version source, and stop dropping unsent crashes (v0.6.0) by @OnlyXianzo in #37
  • release: v0.0.6 by @OnlyXianzo in #38

Full Changelog: v0.0.5...v0.0.6

Grablytic v0.0.5

Choose a tag to compare

@github-actions github-actions released this 10 Oct 21:04

Grablytic v0.0.5 (Build 5) — feature + polish release

Download & Format Picker, Clipboard & Link Saver, Library & Settings, native notifications, cookie auto-detect, Share playback, adaptive logo — 57 commits + orphan redesign/ui merge since v0.0.4. 238 files changed, 21499 insertions(+), 4285 deletions(-).

Full changelog below (also in docs/CHANGELOG.md).


v0.0.5 — 2026-10-11 (feature + polish release; 57 commits + orphan redesign merge since v0.0.4)

Diff vs v0.0.4: 238 files changed, 21499 insertions(+), 4285 deletions(-). Orphan redesign/ui (32a5947..351c8aa) merged via tree checkout + nightly fixup.

  • Download & Format Picker (P4-3 / T01 / T03): description + thumbnail toggles
    with session persistence, portrait-safe format ladder, batch quality picker,
    file-naming hierarchy (predefined + custom name field) and custom-name download
    path; opts row bound to active preset — fixes audio+opus preset showing
    Video+4K
    (now correctly Audio+Opus).
  • Clipboard & Link Saver (T02 / T19): Proceed reads clipboard + parser when
    input empty, startup auto-check offers to import clipboard link, queued View
    batch fixed; dedicated Link Saver menu + FAB bottom-right on home with per-link
    Delete/Download and Download All, persistent offline queue with one-tap batch
    dispatch and auto-retry.
  • Library & Settings (T14 / T15): History three-dots menu (play / delete /
    remove missing), Settings search bar with category list + sub-menus, grid-view
    toggle honored everywhere, storage meter, file import / skip-existing.
  • Notifications: removed in-app white-stripe bottom notification, replaced with
    native device notifications (showAppNotification / styledSnackBar with
    inverseSurface), split success/error native path and POST_NOTIFICATIONS
    gate, 7 migration batches.
  • Cookies (yt-dlp compat): hint expected format, auto-detect parser for
    Netscape # Netscape HTTP Cookie File (7 tab fields) / JSON exports /
    Cookie: header / Base64 wrappers (yt-dlp only reads Netscape), domain syntax
    validation + relate-check (YouTube cluster), unrelated count, empty-value
    preservation fix (351c8aa), WebView import with generated header.
  • Share Intent (T02 / T04): format menu via Share now includes playback
    (lazy-load heavy preview until Play tap) + direct download, auto-start
    queued/failed, FIFO share queue.
  • App logo theme (redesign/ui): adaptive light/dark logo (adaptive_logo.dart
    • logo_variant provider, BricolageGrotesque/Figtree headings), launcher
      dynamic icons per theme (light/dark/monochrome/legacy, all densities) and
      README adaptive <picture> logo.
  • Perf & a11y: lazy preview, throttled progress, bounded queues,
    history a11y semantics + 48dp touch target.
  • Quality: flutter analyze zero warnings, 632 tests (was 631+1), DeepSource
    Kotlin 11→0, Python 2/2, docs/link-check/secret-scan green; desktop_engine
    null guard for _process race.

Full automated listing (tree diff, grouped, newest last) — v0.0.4..HEAD via
tool/generate_release_changelog.py misses orphan redesign/ui commits (unrelated
history), so they are listed here manually from 32a5947..351c8aa:

v0.0.5 — 2026-10-11 (57 commits since v0.0.4, incl. redesign/ui orphan)

Diff vs v0.0.4: 238 files changed, 21499 insertions(+), 4285 deletions(-).

Every change (grouped, newest last, manual from 32a5947..351c8aa + main)

Redesign / Picker / Clipboard / Queue (32a5947..351c8aa)
  • 351c8aa fix(cookie): preserve empty-valued JSON cookies (trim regression)
  • ef4e801 fix(kotlin): collapse duplicate catch, suppress KT-W1064
  • fce131e fix(kotlin): address remaining DeepSource KT-W1057/W1009
  • 51fd47e fix(kotlin): suppress DeepSource KT-R1006/W1042/W1009
  • dc465ce test(flutter): add coverage for cookie imports, notifications, download flows, settings search, and history actions
  • 1cefbbd docs(dart): clarify cookie parsing, notification, and download flow behavior
  • 798e6ad fix(home): use showAppNotification for offline queue
  • 67315fd fix(tests): repair widget & navigation test suites
  • 9a93bad fix(analyze): zero flutter warnings
  • 3364666 fix(ci): flutter analyze errors + DeepSource config
  • f541e2a Merge branch 'flaws/notify-white-stripe-7' into redesign/ui
  • b733fc8 fix(notify): migrate command/cookie-webview/settings/playlist/library/shell/live-log white-stripe
  • f78b57c Merge branch 'flaws/notify-white-stripe-6' into redesign/ui
  • 031469e fix(notify): migrate profile/log/storage/about white-stripe
  • b4577fe Merge branch 'flaws/notify-white-stripe-5' into redesign/ui
  • f77b951 fix(notify): migrate download_history/cookies/settings/offline-queue white-stripe
  • 39eb1ce Merge branch 'flaws/notify-white-stripe-4' into redesign/ui
  • 19f6a73 fix(notify): finish share_overlay migration (auto-start queued/failed)
  • 96c3acd fix(notify): migrate share_overlay white-stripe SnackBars
  • 965e598 Merge branch 'flaws/notify-white-stripe-3' into redesign/ui
  • 8271368 fix(notify): migrate playlist/log white-stripe SnackBars to styled
  • 1469f03 Merge branch 'flaws/notify-white-stripe-2' into redesign/ui
  • 85c7fce fix(notify): migrate format_picker SnackBars to styledSnackBar
  • 71a4fbe Merge branch 'flaws/history-a11y' into redesign/ui
  • 829d414 fix(a11y): history three-dots menu semantics, Dismissible hint, 48dp
  • f881461 Merge branch 'flaws/share-lazy-preview' into redesign/ui
  • f86b6ad perf(share-sheet): lazy-load heavy preview until Play tap
  • f9164b3 Merge branch 'flaws/cookie-domain-isolation' into redesign/ui
  • 9b46871 fix(cookies): validate domain syntax and relate-check on paste
  • a231823 Merge branch 'flaws/notify-permission-split' into redesign/ui
  • 3d6f867 fix(notify): split success/error native path and gate POST_NOTIFICATIONS
  • d88c899 Merge branch 'flaws/notify-white-stripe' into redesign/ui
  • de82ec8 fix(notify): remove white-stripe SnackBars in home/link-saver/offline-banner
  • d8533d1 feat(library+settings+cookies+share+notify): three-dots history, settings search, cookie auto-detect, native notifications, share playback
  • dac5940 feat(clipboard+queue): clipboard proceed, startup offer, link saver FAB
  • 6266ad9 feat(picker): add description/thumbnail opts, file-naming hierarchy
  • 502b495 fix(home): bind opts row to active preset, show Audio+OPUS for audio presets
  • c6e7607 docs(readme): update logo to adaptive light/dark variant
  • 9761834 fix(launcher+ui): make app logo follow theme and settings
  • 85dac20 docs(readme): add CodeRabbit PR reviews badge
  • 84b8e0c refactor(ui): replace hardcoded hexes with theme roles for dark-mode support
  • bad0851 fix(ci): make Verification green on redesign/ui
  • 4cd06c6 feat(ui): editorial hero, tonal nav pill, emblem logo, overflow polish
  • ff2926e feat(ui): picker header value-first hierarchy with sentence-case sections
  • d11a06a feat(ui): ledger-first de-templating pass
  • e6c78ae feat(ui): nav pill cleanup and outlined icon set
  • b5898ea feat(ui): home headline copy sharpened
  • 6717303 fix(ui): library filter chips trailing room
  • 14608ef feat(ui): home pill, opts affordance and empty-state refinements
  • e5eccd1 fix(ui): unmask aria2c package status to engine truth
  • 29ea731 fix(ui): seg edge + picker loading never black (R4)
  • 407bdbd feat(ui): shared seg tabs + picker chrome + menu cancel (R3)
  • ffef52b feat(ui): seg bar distinction + settings title weight (R2)
  • e2cad59 feat(ui): log overlay typography + download card .live (R1)
  • 3e22bcd fix(engine): warn when aria2c enabled but binary unusable
  • c3383fe feat(ui): download hero + pill + opts + sections (P4-3)
  • 32a5947 test(settings): add targeted structural widget test for AboutScreen (P4-5)
Main line since v0.0.4 (reachable from v0.0.4..HEAD)
  • d230347 Merge redesign/ui + PR #13 (351c8aa) into main for v0.0.5
  • b054b18 fix(ci): base nightly gate on last built commit, not the frozen nightly tag
  • a6c2435 fix(deepsource): drop invalid secrets/test-coverage analyzers, fix python runtime_version
  • c822087 chore(deepsource): add detailed .deepsource.toml for Flutter+Python+Kotlin repo
  • 09b0f65 fix(T19, T01, T02): unbreak widget tests after offline and cache changes
  • 3f17819 fix(T14): update widget tests for settings folder hierarchy
  • 865778f style(T18): token-only design sweep (mono + onPrimary)
  • 4c02b6f feat(T08): pre-download in-app preview with progressive stream
  • bf1556f feat(T20): opt-in inexact offline queue reminders
  • b54afe1 feat(T19): persistent offline link saver with one-tap batch dispatch
  • 92e7116 feat(T21): strictly local analytics dashboard
  • 1ae4095 feat(T03): picker-integrated toggles with session persistence
  • 0daa232 feat(T16): indicator driven by fractional PageController.page
  • b53a06c feat(T07): persistent home thumbnails cached at job creation
  • 7ff3d6f feat(T02): share auto-download mode with error notification
  • f88418a test(T06): lock source-URL persistence in comment/purl tags
  • 30003ad feat(T12): defer chunk rotation across active video sessions
  • f77e833 feat(T04): standalone share format-picker overlay
  • ec39183 feat(T11): 1 MB chunked log rotation, drop retention-days
  • eb01514 feat(T10): default log export to Downloads via MediaStore
  • b7c4856 fix(T13): logger view scrolls full viewport via collapsible card
  • f15a197 feat(T01): fast-fetch pipeline with placeholder skeleton and extraction caching
  • 7202277 feat(T05): context-menu Copy Link for active and completed
  • ce1cd9e fix(T17): launcher-icon safe-zone, monochrome, uncropped logo
  • eb3d044 refactor(T15): permissions and appearance sub-menus
  • 05dc457 fix(T09): resolve Android 14 background freeze and UI-isolate blocking
  • f924045 refactor(T14): settings root as category list with sub-menus
  • eae1657 feat(batch): retry-failed, file import, skip-existing, storage meter, auto-retry
  • `f...
Read more

Grablytic v0.0.4

Choose a tag to compare

@OnlyXianzo OnlyXianzo released this 17 Sep 07:44

Grablytic v0.0.4 (Build 4) — huge improvement release

Tap a finished download to play it, resume interrupted downloads, library grids, a log viewer that survives 5MB logs, hardened links/downloads/installer, and 118 commits of engine + Android hardening since v0.0.2.

Full changelog below (also in docs/CHANGELOG.md).


v0.0.4 — 2026-09-17 (118 commits since v0.0.2)

Diff vs v0.0.2: 152 files changed, 14221 insertions(+), 1494 deletions(-).

Lines of code by area (+added / -removed)

  • Python engine: +6836 / -436
  • Android native: +1413 / -374
  • Flutter UI: +5081 / -565
  • Packaging & install: +378 / -55
  • CI & workflows: +368 / -21
  • Docs & store: +49 / -34
  • Other: +96 / -9

Every change (grouped, newest last)

Security & Trust Boundaries

  • 3a1877f68 sec(engine): confine clear_download_archive to data_dir [T0-1]
  • def504b7d sec(install): fail closed when no checksum digest is published [T0-4]
  • 400251213 sec(bootstrap): verify existing binaries against manifest before trusting [T0-5]
  • 0581fb4ea sec(format): allowlist explicit format IDs before selector interpolation [T0-3]
  • 5f0980a2a sec(paths): confine IPC binary paths, kill PATH/sys.path injection [T0-2]
  • 3d5a2d9a4 sec(potoken): honest JS trust boundary, no remote solver without runtime [T0-6]
  • 327ab328b fix(logging): close sanitize gaps — userinfo creds, cycles, map proxies [T3-15]
  • bc4c8f0ca fix(install): close shell injection via eval and python interpolation
  • f17914cf8 fix(engine-logs): sanitize request params and redact engine-origin entries
  • 6ec6e27b6 fix(engine): gate SSRF targets and validate proxy at every sink
  • 7a0babc76 fix(flutter): enforce trust boundary on engine paths, exports, and proxy
  • 9bf556258 fix(resume): enforce trust boundary on resume candidate parsing and deletion
  • 23a0462cb fix(engine): sanitize yt-dlp option builder sinks and config schema
  • 2f230c988 fix(core): add library directives to command_template and trust_boundary
  • b01cd426c fix(engine): close SSRF bypasses in url_guard non-decimal IP forms and DNS names
  • 8667ea679 fix(ci): publish SHA256SUMS and prefer it in install.sh with API-digest fallback

Resume & Artifact Hygiene

  • 987404fba fix(engine): strip only trailing .part when resolving resume .info.json [TEARDOWN-3]
  • 137675085 feat: FTL Robo gate, resume strike loop, cosign releases
  • c0cd45f21 fix(network): gate unattended auto-resume on Wi-Fi Only setting
  • 779c6e628 fix(resume): harden resume discovery, strike tracking containment, and sidecar cleanup
  • f1cb876d3 fix(engine): default writeinfojson on so interrupted downloads leave a resume sidecar

Android Native & OS Integration

  • a5d0580b8 feat(android): queue-active WakeLock + WifiLock for downloads [T2-1, needs SDK compile]
  • af0c5d017 feat(android): FIFO share queue replaces single-slot var [T2-6 native half, needs SDK compile]
  • ee8d432f2 fix(android): release event callbacks on terminal and replay missed terminals
  • 3a9b92da9 fix(history): sweep all non-terminal statuses and page restore backlog
  • ccdb49b0b fix(android): make terminal delivery survive activity death
  • 5f381f82e fix(android): sweep all active download states on boot with schema guards
  • eae2aaec1 fix(android): real worker channel, loud missing runtime, atomic extract
  • 1d1541a21 fix(android): atomic package extraction, recovery, and two-tier CRC32 stamping
  • 2ead2e9ae fix(android): periodic wakelock renewal and onTimeout SQLite sweep
  • ae3b88b19 fix(android): decouple terminal event path and prevent destroyed activity leak
  • c7d724625 ci(nightly): generate detailed changelog with commit history and fix android compile references
  • 28461f7dd fix(android): cancel active downloads on foreground-service timeout
  • 949f40724 fix(android): serialize Kotlin SQLite access with busy-timeout and retry

Core Engine & yt-dlp

  • 1175d5571 fix(downloader): register in _active_downloads before t.start() [T1-1]
  • 16fb0e222 fix(downloader): close pump-queue cancel-loss window [T1-2]
  • d735d7f40 fix(downloader): add graceful shutdown handling and lazy cleanup thread [T1-6]
  • 42683fcdb fix(downloader): bind safe_url before try so early failures report real error [T1-9]
  • de6817829 test(ipc): lock in error-ID threading for unparseable input [T1-8]
  • 1ea67d16c fix(downloader): reject same-URL admission under a different ID [T1-5]
  • 9a904cbfa fix(cancel): honest intermediate cancelling state + wedge watchdog [T1-3 engine half]
  • fa5e98d24 fix(downloader): cap YDLogger.errors tail at 200 [T3-9]
  • 6f4ab9a8b fix(opts): bound all numeric IPC params, reject zero throttle [T3-10]
  • ad50d1eaa fix(downloader): scan progress queue via public API only [T3-8]
  • 42d90f4c1 fix(errors): precise classification + scrubbed messages [T3-14 engine half]
  • 0ed1823e6 fix(downloader): classify single-item logger errors, not blanket POSTPROCESS [AARAV-1]
  • 3a3ff0480 feat(dart): FIFO share queue drains cold starts, chains sheets [T2-6 dart half]
  • b804052e6 fix(engine): guard sleep_interval with _clamped_int [TEARDOWN-4]
  • a36c23f25 fix(download): collapse setMaxConcurrent/syncConcurrency duplicate [TEARDOWN-5]
  • a2e6c0883 fix: close BRUTAL-1/2a/2b/2c/5/6 backlog items (engine + IPC)
  • cdd9ad4c6 perf(engine): throttle progress at source, bound queues, batch file writes
  • b61f3d20f fix(engine): resolve desktop search/query TypeError by binding search_query
  • 157d649d6 fix(engine): bound progress queues and harden poll loop against silent drops
  • 56002ec1c fix(engine): make queued promotion pollable and slot close idempotent
  • e3f5ec07d fix(flutter): dispose every engine transport and forward bridge errors
  • f6cd2fe68 fix(settings): manage aria2c speed controller lifecycle in State
  • f6cccb147 fix(flutter): absorb stream errors in log ingester and detect transport death in desktop engine
  • 1fabe9dc2 fix(engine): unify IPC envelope contracts for queue_status and forward nodejs_path
  • b58fbdff1 fix(engine): enforce admission queue depth limit and input bounds
  • 7b421fc50 fix(engine): resolve concurrency slot leaks, queue stalls, and dropped cancel events
  • ea0391b89 fix(engine): configure JS runtime, extractor args, and cancel error guard
  • 68a68a208 test(engine): remove unused local variables and imports to satisfy ruff correctness gate
  • 9e31ef26e fix(engine): write partial downloads directly to output dir and serialize ffmpeg
  • 6d458486b fix(backlog): remaining log issues 3-8 — concurrency guard, player, links, storage, onboarding, grids
  • 8ade7996d fix(engine): thread desktop IPC dispatch so slow extractions stop blocking cancel
  • c55f8e337 fix(engine): gate PO-token spawn behind solver flag, stop per-download phantom deno eval
  • f5c848eab fix(engine): bound the FFmpeg serialization gate with a 600s timeout

UI & Client State

  • df178bc8f docs(readme): real device screenshots gallery (11 captures, corrected names)
  • 2feacf55a fix(app): gallery visibility, thumbnail toggle, GitHub open, onboarding reform, list jank
  • 73e437830 chore(flathub): 0.0.2 release entry + screenshots in metainfo
  • b500b5500 fix(flutter): bound log pipeline costs and coalesce live rebuilds
  • 5863761a9 fix(logs): cap log viewer at file tail so multi-MB logs cannot hang the phone

CI/CD, Build & Install

  • ccba7992e fix(ci): move WINGET_TOKEN gate from job-if (secrets context rejected by parser) to env-backed step
  • a237cb28d feat(ci): one-shot first WinGet submission workflow (fork + PR from verified manifests)
  • e25009825 fix(ci): quote wingetcreate run line (colon broke YAML parse)
  • ed1415370 feat(linux): universal install.sh (distro+arch auto-detect, SHA256 verify) + README one-liner
  • 932737a05 chore(release): bump to 0.0.2+3 for first Grablytic release
  • 92b884e83 fix(build): quote deb control heredoc, drop comment lines
  • 770fd444f feat(winget): 0.0.2 Grablytic manifests + first-submit plumbing
  • dbfab7e13 ci: nightly build + rolling release, all-branch verify, ruff-action [T4-5]
  • 5fd9e182e ci(build): gate all build jobs on reusable verify workflow [TEARDOWN-6]
  • b2e1fa217 ci(verify): pin ruff-action to immutable SHA [CI-FIX]
  • 49820b2f9 ci(nightly): add emulator Doze + install smoke job
  • 2b1f198e1 perf(ui): structural selectors make progress ticks rebuild one card
  • 166948ccf docs(nightly): add user-facing benefits and feature overview to nightly notes generator
  • cdbad3153 ci(nightly): remove emulator doze and ftl jobs to guarantee reliable release publishing
  • 6a8aa3bb9 ci(nightly): temporarily comment out emulator doze and ftl robo jobs

Performance & Resources

  • 11515060c perf(logs): keep DEBUG off the UI bridge to fix 10+ download hang
  • 5e1e82c5a perf(lowend): halve fragment threads, indeterminate merge bar, fix search runtime
  • 155056594 chore: remove perf proof docs from repo (kept in local worklog)

General Improvements

  • e3fa20991 fix(ci): run token check under bash on windows runner
  • 9f2d8d909 fix(ci): wait for fork propagation before cloning
  • d5031a5fe docs(readme): one-command Linux install block (apt/dnf/zypper/pacman/yay/paru)
  • 2c266d5db docs(security): v0.0.1 full-matrix VirusTotal scan record (15/15 clean)
  • 922d9c09c refactor: rename TrueStream to Grablytic
  • 71fb9ed6d fix(install): quote usage heredoc delimiter to prevent command substitution
  • 490340792 feat(brand): swap in new Grablytic play-mark artwork
  • 64718e50d fix(contact): point in-app feedback email to xianzo.help@gmail.com
  • 8419a704f docs(readme): roll install links to v0.0.2 grablytic-* assets
  • 9e750abef chore(distrib): roll AUR/Flathub/Izzy manifests to v0.0.2
  • bdf50b59a fix(main): add stdout lock to prevent interleaved JSON lines [T1-7]
  • 3e4adee24 feat(dart): honest cancelling status across provider and home card [T1-3 dart half]
  • cde767a1a fix(scheduler): gate RSS XML against entity expansion + ov...
Read more

Grablytic v0.0.2

Choose a tag to compare

@github-actions github-actions released this 15 Sep 06:16

What's Changed

  • fix(distribution): correct license to GPL-3.0, dangling refs, AUR deps by @OnlyXianzo in #1

New Contributors

Full Changelog: v0.0.1...v0.0.2

Grablytic Nightly 20261023 (d89db3e)

Pre-release

Choose a tag to compare

@github-actions github-actions released this 15 Sep 18:04

Grablytic Nightly Build — 20261023 (d89db3e)

Rolling Pre-Release: Built automatically from main branch with cutting-edge engine features, native platform hardening, and regression fixes.


✨ What's New & User Benefits

  • 🏎️ Unstoppable Download Queues: Cancelling active downloads or changing maximum concurrent downloads in Settings no longer stalls the download queue. Remaining items start immediately without hanging.
  • 🔄 Smart Incomplete Download Resume: If a download was interrupted, Grablytic now searches both your internal cache and your custom download folder. You can resume .part files right where you left off without wasting bandwidth.
  • 🧹 Automatic Storage Hygiene: Deleting a media download from your library now cleans up orphan thumbnail sidecars (.jpg, .webp), saving device storage while keeping shared artwork intact.
  • 📱 Rock-Solid Background Downloads on Android: Upgraded WakeLock and WifiLock management ensures your downloads keep running in the background when the screen turns off or while switching apps.
  • ⚡ Faster Playlist & Media Extraction: Standardized Node/QuickJS runtime execution solves YouTube signature challenges and protects against UI freezing on large playlists (up to 500 items).
  • 🛡️ Hardened System Security: Replaced prefix string matching with strict path containment (commonpath) to guarantee downloads and cleanup operations stay strictly within designated folders.

🌟 Deep Technical Highlights & Architectural Upgrades

1. Engine Concurrency, Deadlock & Slot Lifecycle Hardening

  • Guaranteed Slot Reclamation: Resolved edge-case slot leakage during early download cancellation before thread creation or after worker termination.
  • Dynamic Pool Pumping: Synchronized queue pumps upon runtime max_concurrent capacity expansion to eliminate queue starvation and stalls.
  • Honest Terminal State Delivery: Preserved generation identity (slot_token) to ensure all cancellation and error events reach the IPC bridge without being dropped.

2. Extractor JS Runtime, PO Token & Playlist Parity

  • JS Runtime Standardization: Wired bundled Node/QuickJS runtime execution paths and remote component solvers identically across single video, format inspection, and playlist extraction.
  • Bounded Generator Iteration: Protected memory and IPC envelopes by bounding flat playlist extraction to 500 items maximum with 4-tier thumbnail fallback.
  • Async Safety: Guarded all Dart/Flutter asynchronous cancellation calls with .catchError() to prevent unhandled future rejection crashes.

3. Comprehensive Incomplete Download Resume & Sidecar Hygiene

  • Multi-Root Resume Discovery: Extended incomplete .part file scanning to inspect both internal cache and user-configured public download directories with candidate deduplication.
  • Private Strike Store: Anchored strike and retry count records to app-private data_dir storage, preventing metadata clutter in public folders.
  • Split-Stream Sibling Discovery: Added split-format .f<id> suffix stripping when resolving paired .info.json metadata sidecars.
  • Defensive Sidecar Cleanup: Enforced 7-point safety gate in deleteFileAndHistory to purge orphaned thumbnail sidecars (.jpg, .png, .webp) while safeguarding shared media assets.

4. Android Native Platform & Process Decoupling

  • Activity Recreation Resilience: Decoupled terminal download events so completed/failed notifications survive Android Activity disposal and configuration changes.
  • Periodic WakeLock & WifiLock Renewal: Implemented automated power lock renewal with onTimeout cleanup sweep into SQLite database.
  • Atomic Package Extraction: Implemented staging swap .tmp with two-tier CRC32 checksum verification for native binaries (ffmpeg, deno, node).

🧪 Empirical Verification Proof

Verification Suite Target Result Status
Python Engine Tests engine/tests (pytest 9.1+) 515 / 515 passed (100%) Passing
Flutter Static Analysis lib/ & test/ (dart analyze) 0 issues found (100% clean) Passing
Flutter Test Suite Unit & Widget Tests 362 / 362 passed (100%) Passing
Android Doze & Standby API 34 Emulator / dumpsys Verified W^X and Power Survival Passing

📋 Categorized Improvements

Android Native & OS Integration

  • 573dc06 fix(android): file sharing stays in the download folder; the boot receiver's guard is the framework's (SEC-004, SEC-005) (#46)
  • 19f7981 fix(android): the tier-1 feed fetch validates where it connects (SEC-002)
  • 66f21ca ci: retrigger Android lint after a runner failure with no lint report

UI & Client State Management

  • 642cd74 fix(flutter): pass the dialog state through the builder that owns the actions
  • 1626b78 fix(flutter): dispose the dialog controllers
  • 70824a8 docs(building): describe the Linux CI job by what it installs and asserts

CI/CD, Build Systems & Automation

  • 0d5c894 ci: drop the temporary annotation wrappers
  • d8e739f style: format code with Google Java Format, Ktlint and Ruff Formatter
  • 19204f9 ci(workflows): pin every action, state every token scope, keep values out of the shell
  • c2ecafc style: format code with Google Java Format, Ktlint and Ruff Formatter
  • 15df128 style: format code with Google Java Format, Ktlint and Ruff Formatter
  • aec8a92 docs: resync the CI table, the IPC table and the feature numbers
  • f17a56f style: format code with Google Java Format, Ktlint and Ruff Formatter
  • 59c3044 chore(ci): fix the probe's own import check
  • ab50f26 chore(ci): temporary probe for the tool-test step

General Improvements & Refactoring

  • d89db3e chore(skills): move the pack to .agents/skills, add four skills (#48)
  • 54cd388 fix(reporting): a path with a space no longer publishes its tail (SEC-006) (#47)
  • 1e4b79d fix: SEC-003 bounds the feed, SEC-001 stops cookies and paths reaching public issues (#45)
  • 8903d59 Merge pull request #44 from OnlyXianzo/arena/951cf094-grablytic
  • c8298e5 Revert "TEMP: surface analyze and test failures as annotations (reverted after reading)"
  • 62faa1b TEMP: surface analyze and test failures as annotations (reverted after reading)
  • 6db0b70 Merge pull request #43 from OnlyXianzo/arena/223622b6-grablytic
  • b858b2f fix(tooling): read every Markdown link form, and read destinations properly
  • a366481 fix(tooling): count broad catches by construct, not by variable name
  • 412c6ab Merge pull request #42 from OnlyXianzo/arena/a37f18d5-grablytic
  • 1606a62 fix(tooling): close #116, #117 and #118 from the pass-9 review
  • 3cefbf1 Merge pull request #41 from OnlyXianzo/arena/e883af82-grablytic
  • 941686d docs(security): one reporting channel, and check links in root files
  • 35d9bf3 fix(tool): an unreadable exemption file reports instead of raising
  • c97f011 fix(tooling): close #110-#115, the residue around the two guards
  • ceb11a2 fix(tool): the gate tests import tool.*, which a bare pytest cannot resolve
  • 75e9bff fix(tooling): make both guards match what they claim to check
  • 31519e3 docs: correct two counts and a command line (#40)
  • 58db839 docs: bring the whole doc set back in line with the code (#39)
  • 8956cc3 Delete RENAME_IMPACT_TrueStream_to_Grablytic.md

📜 Full Git Commit Log

Total commits since v0.0.6: 35

Click to expand full commit history
Commit Author Description
d89db3e Only_Xianzo chore(skills): move the pack to .agents/skills, add four skills (#48)
54cd388 Only_Xianzo fix(reporting): a path with a space no longer publishes its tail (SEC-006) (#47)
[573dc06](https...
Read more

TrueStream v0.0.1 Beta (Build 2)

Choose a tag to compare

@OnlyXianzo OnlyXianzo released this 13 Sep 15:54

TrueStream v0.0.1 Beta (Pre-Release Build 2)

⚠️ BETA PRE-RELEASE NOTICE: This is the early preview release of TrueStream (v0.0.1 Beta, Build 2). Tested and validated across Android hardware tiers from modern 64-bit flagship phones down to low-end 32-bit budget devices (e.g. Samsung Galaxy A04e), Chromebooks, and Linux desktops with preinstalled standalone binaries.


🏷️ Complete Device & Hardware APK Matrix

To ensure maximum performance and minimal download sizes across the entire Android ecosystem, TrueStream provides dedicated per-architecture splits as well as a universal fallback:

APK Asset Architecture JS Runtime Target Hardware Tier
truestream-v0.0.1-arm64-deno.apk ARM64-v8a Deno Recommended Default: Flagships, modern 64-bit Android phones (Snapdragon, Tensor, Dimensity). Uses upstream yt-dlp's primary modern JS runtime.
truestream-v0.0.1-arm64-node.apk ARM64-v8a Node.js Optimized Download: Modern 64-bit phones, ~40 MB smaller download footprint.
truestream-v0.0.1-armv7-node.apk ARMeabi-v7a Node.js Budget & Low-End Devices: Tested for 32-bit ARM phones (e.g. Samsung Galaxy A04e, Redmi A-series, older budget tablets) with optimized RAM and storage footprint.
truestream-v0.0.1-x86_64-deno.apk x86_64 Deno Emulators & Chromebooks: 64-bit Intel/AMD Android emulators and ChromeOS devices with Deno runtime.
truestream-v0.0.1-x86_64-node.apk x86_64 Node.js Emulators & Chromebooks (Smaller): 64-bit x86 with lightweight Node.js runtime.
truestream-v0.0.1-universal.apk Universal Both (Deno + Node) All-in-One Fallback: Contains all 3 ABIs (arm64-v8a, armeabi-v7a, x86_64) and both JS engines for 100% hardware compatibility.

Desktop Release Assets (Preinstalled Binaries)

Linux releases include a self-contained, preinstalled Python engine and FFmpeg integration with zero setup required:

Platform Filename Distribution Format
Linux (Debian / Ubuntu) truestream_0.0.1_amd64.deb / truestream_0.0.1_arm64.deb Native .deb package
Linux (Fedora / RHEL / openSUSE) truestream-0.0.1-1.x86_64.rpm / truestream-0.0.1-1.aarch64.rpm Native .rpm package
Linux (Arch Linux) truestream-0.0.1-1-x86_64.pkg.tar.zst / truestream-0.0.1-1-aarch64.pkg.tar.zst Native pacman package
Linux (Portable Standalone) truestream-0.0.1-linux-x64.tar.gz / truestream-0.0.1-linux-arm64.tar.gz Portable bundle with bundled engine
Windows (x64) truestream-windows-x64.zip 64-bit portable archive with engine

📝 Full Changelog

🎵 Audio & Stream Extraction Pipeline

  • Audio-Only Single Selection & Container Extraction:
    • Direct single-selection audio mode in format picker with proper container mappings (mp3, m4a, opus, flac, wav).
    • Container-aware post-processing using FFmpegExtractAudio without unnecessary video muxing overhead.
  • SoundCloud Track & Playlist Support:
    • Fixed audio-only stream resolution calculation on SoundCloud.
    • Automatic metadata tagging (FFmpegMetadata) and high-resolution album art embedding (EmbedThumbnail).
  • Granular Format Picker Screen:
    • Interactive stream inspector showing duration, channel info, stream count, and network thumbnails.
    • Quality selector chips for video streams (4K, 1080p, 720p, etc.) and audio formats.
  • Resilient Multi-Threaded Queue & Resume Engine:
    • FIFO download queue with thread concurrency clamping (1–5 concurrent slots, default 2).
    • SQLite database backing (sqflite) for seamless resumption across process death, task termination, or device reboots.
    • Real-time download metrics: EMA smoothed speed sparkline, ETA calculation, and bytes received.

📱 Android Platform & UI Polish

  • Full Hardware Tier Matrix:
    • Dedicated builds for ARM64, ARMeabi-v7a (tested for low-end hardware like Samsung Galaxy A04e), and x86_64.
  • Adaptive Icon Safe-Zone Alignment:
    • Rebuilt Android launcher icons across all 5 density buckets (mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi) from the master square brand asset.
    • Extended seamless terracotta paper background across the entire 108dp canvas, eliminating double-border squircle clipping on Samsung One UI, Xiaomi, and Nova launchers.
    • Centered emblem and wordmark within the 66dp circular safe zone with zero corner clipping.
  • First-Run Onboarding & Permissions Beat:
    • Dedicated permissions onboarding step explaining notification and storage permissions with clear accept/reject options before app entry.
  • System Keep-Alive & Notifications:
    • Android battery optimization exemption flow to prevent system kills during long background downloads.
    • Rich foreground service notifications displaying title, progress bar, speed, and ETA.
    • Share Intent integration for sharing URLs directly into TrueStream from YouTube, TikTok, Instagram, Twitter/X, and SoundCloud.

🔍 Search, Playlists & Browsing

  • In-App Search:
    • Integrated search engine across YouTube and SoundCloud with instant metadata preview and one-tap download.
  • Playlist Selection Screen:
    • Full playlist entry parser with item checkboxes, selection inversion, range toggles, and unavailable item detection.
  • Thumbnail Management:
    • Embedded thumbnails inside media files plus optional local PNG sidecars for offline library browsing.

📦 Packaging & Updates

  • Obtainium Support:
    • Integrated Obtainium one-click add button and deep-link redirection with per-variant regex pinning (arm64-deno, arm64-node, armv7-node, x86_64-deno, x86_64-node, universal).
  • Copyright & DMCA Safe Harbor Notice:
    • Created root DMCA.md notice establishing good-faith safe harbor compliance and takedown communication channel (xianzo.help@gmail.com).

🛠️ Verification & Test Suite Proof

  • Python Engine Tests: 320/320 passed (100%)
  • Flutter Widget & Unit Tests: 271/271 passed (100%)
  • Flutter Static Analysis: 0 issues found (clean)
  • Launcher Icon Integrity: 8/8 passed (100%)

📲 Installation Guide

  1. Choose the APK for your hardware:
  2. Requires Android 8.0 (API 24) or higher.
  3. Allow installation from unknown sources if prompted.