Part of #59 — Discovered during #65
Problem
Both AptRepositoryService and ApkRepositoryService use the same ReleaseTracker backed by the shared github_releases table. When the APT service marks a GitHub release as scanned, the APK service will skip it entirely — even though the .apk assets in that release were never processed (and vice versa).
This means whichever service syncs first will cause the other to silently miss packages from that release.
Possible solutions
Option A: Separate tracking tables (minimal fix)
Add a dedicated apk_github_releases table so APK and APT track scanned releases independently. Low risk, minimal code change.
Option B: Unified sync pass (cleaner design)
Merge the two sync loops into a single RepositoryService that processes both .deb and .apk assets from each release in one pass. This avoids redundant GitHub API calls and ensures both package types are always in sync. Larger change — touches the APT service, worker, and config wiring.
Context
The github_releases table tracks releases by (id, repo_owner, repo_name) with no format discriminator. Both services call filter_scanned_releases() and mark_releases_scanned() on the same ReleaseTracker trait backed by SqliteStorage.
Part of #59 — Discovered during #65
Problem
Both
AptRepositoryServiceandApkRepositoryServiceuse the sameReleaseTrackerbacked by the sharedgithub_releasestable. When the APT service marks a GitHub release as scanned, the APK service will skip it entirely — even though the.apkassets in that release were never processed (and vice versa).This means whichever service syncs first will cause the other to silently miss packages from that release.
Possible solutions
Option A: Separate tracking tables (minimal fix)
Add a dedicated
apk_github_releasestable so APK and APT track scanned releases independently. Low risk, minimal code change.Option B: Unified sync pass (cleaner design)
Merge the two sync loops into a single
RepositoryServicethat processes both.deband.apkassets from each release in one pass. This avoids redundant GitHub API calls and ensures both package types are always in sync. Larger change — touches the APT service, worker, and config wiring.Context
The
github_releasestable tracks releases by(id, repo_owner, repo_name)with no format discriminator. Both services callfilter_scanned_releases()andmark_releases_scanned()on the sameReleaseTrackertrait backed bySqliteStorage.