Skip to content

Grablytic Nightly 20261023 (d89db3e)

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 15 Sep 18:04
· 430 commits to main since this release

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 Only_Xianzo fix(android): file sharing stays in the download folder; the boot receiver's guard is the framework's (SEC-004, SEC-005) (#46)
1e4b79d Only_Xianzo fix: SEC-003 bounds the feed, SEC-001 stops cookies and paths reaching public issues (#45)
8903d59 Only_Xianzo Merge pull request #44 from OnlyXianzo/arena/951cf094-grablytic
0d5c894 OnlyXianzo ci: drop the temporary annotation wrappers
c8298e5 OnlyXianzo Revert "TEMP: surface analyze and test failures as annotations (reverted after reading)"
642cd74 OnlyXianzo fix(flutter): pass the dialog state through the builder that owns the actions
62faa1b OnlyXianzo TEMP: surface analyze and test failures as annotations (reverted after reading)
19f7981 OnlyXianzo fix(android): the tier-1 feed fetch validates where it connects (SEC-002)
6db0b70 Only_Xianzo Merge pull request #43 from OnlyXianzo/arena/223622b6-grablytic
d8e739f deepsource-autofix[bot] style: format code with Google Java Format, Ktlint and Ruff Formatter
1626b78 OnlyXianzo fix(flutter): dispose the dialog controllers
b858b2f OnlyXianzo fix(tooling): read every Markdown link form, and read destinations properly
a366481 OnlyXianzo fix(tooling): count broad catches by construct, not by variable name
19204f9 OnlyXianzo ci(workflows): pin every action, state every token scope, keep values out of the shell
412c6ab Only_Xianzo Merge pull request #42 from OnlyXianzo/arena/a37f18d5-grablytic
c2ecafc deepsource-autofix[bot] style: format code with Google Java Format, Ktlint and Ruff Formatter
1606a62 OnlyXianzo fix(tooling): close #116, #117 and #118 from the pass-9 review
3cefbf1 Only_Xianzo Merge pull request #41 from OnlyXianzo/arena/e883af82-grablytic
66f21ca OnlyXianzo ci: retrigger Android lint after a runner failure with no lint report
15df128 deepsource-autofix[bot] style: format code with Google Java Format, Ktlint and Ruff Formatter
941686d OnlyXianzo docs(security): one reporting channel, and check links in root files
aec8a92 OnlyXianzo docs: resync the CI table, the IPC table and the feature numbers
70824a8 OnlyXianzo docs(building): describe the Linux CI job by what it installs and asserts
f17a56f deepsource-autofix[bot] style: format code with Google Java Format, Ktlint and Ruff Formatter
35d9bf3 OnlyXianzo fix(tool): an unreadable exemption file reports instead of raising
c97f011 OnlyXianzo fix(tooling): close #110-#115, the residue around the two guards
ceb11a2 OnlyXianzo fix(tool): the gate tests import tool.*, which a bare pytest cannot resolve
59c3044 OnlyXianzo chore(ci): fix the probe's own import check
ab50f26 OnlyXianzo chore(ci): temporary probe for the tool-test step
75e9bff OnlyXianzo fix(tooling): make both guards match what they claim to check
31519e3 Only_Xianzo docs: correct two counts and a command line (#40)
58db839 Only_Xianzo docs: bring the whole doc set back in line with the code (#39)
8956cc3 Only_Xianzo Delete RENAME_IMPACT_TrueStream_to_Grablytic.md

📦 Installation & Verification Assets

Android (.apk)

  • arm64-v8a: Modern Android smartphones & tablets (Recommended for most users)
  • armeabi-v7a: Older 32-bit Android devices
  • x86_64: Android emulators, ChromeOS, and x86 devices
  • Universal: All-architecture bundle

Desktop Packages

  • Linux: .deb (Debian/Ubuntu), .rpm (Fedora/RHEL), .pkg.tar.zst (Arch), .tar.gz (Portable)
  • Windows: .zip (Portable x64)

Note on Nightly Builds: Nightly releases contain the most recent updates directly from the development tree. For production stability, please use official tagged releases.