Problem
Static assets referenced from index.html carry `?v=` cache-buster query strings that must be bumped by hand. Stale versions ship whenever a file changes without its `?v=` being updated, and QtWebEngine's cache then serves the old asset.
Fix (staged on develop as da9e8e5)
Derive the `?v=` value from a content hash of the asset at serve time (`src/app_helpers.py`, +47 lines), so the buster changes exactly when the file does. Covered by `tests/test_asset_version_rewrite.py` (+64 lines).
Staging
Upstream-candidate. Branch `feat/asset-cache-busters` from `upstream-mirror`, cherry-pick `da9e8e5d` minus the fork-only `docs/fork/downloader-system-audit.md` hunk.
Problem
Static assets referenced from index.html carry `?v=` cache-buster query strings that must be bumped by hand. Stale versions ship whenever a file changes without its `?v=` being updated, and QtWebEngine's cache then serves the old asset.
Fix (staged on develop as da9e8e5)
Derive the `?v=` value from a content hash of the asset at serve time (`src/app_helpers.py`, +47 lines), so the buster changes exactly when the file does. Covered by `tests/test_asset_version_rewrite.py` (+64 lines).
Staging
Upstream-candidate. Branch `feat/asset-cache-busters` from `upstream-mirror`, cherry-pick `da9e8e5d` minus the fork-only `docs/fork/downloader-system-audit.md` hunk.