Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,40 +7,40 @@
{
"type": "NEW",
"bullets": [
"macOS install via Homebrew — `brew install --cask github-store` from our new tap.",
"Added fastly.jsdelivr.net as a community mirror. Useful when GitHub is throttled.",
"Joined the Keep Android Open coalition — in-app banner on Apps explains why.",
"Sign in with GitHub now uses the standard web flow — tap, authorize in browser, done. No 8-digit code to type.",
"All persisted preferences and credentials now stored AES-256-GCM encrypted via KSafe — GitHub auth tokens, proxy credentials, app settings, device ID, mirror choice, every coachmark, and the announcements cache. Hardware-backed Keystore on Android. Existing data migrates seamlessly on first launch."
"Codeberg + Forgejo + Gitea support. Paste a Codeberg / Forgejo URL or add a self-hosted host under Tweaks → Network. Details, install, updates, search — all wired.",
"macOS install via Homebrew tap: `brew install --cask github-store`.",
"Sign in with GitHub uses the standard web flow — no 8-digit code.",
"All prefs + credentials AES-256-GCM encrypted via KSafe (hardware-backed Keystore on Android). Migrates on first launch.",
"Added fastly.jsdelivr.net mirror for throttled GitHub.",
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Description: Search for fastly.jsdelivr.net mirror configuration in backend code

# Search for mirror list endpoint implementation
rg -n "fastly\.jsdelivr\.net" --type=kt --type=java -C3

# Search for mirror configuration files
fd -e json -e yaml -e yml -e conf | xargs rg -l "fastly\.jsdelivr\.net"

# Search for API endpoint that serves mirror list
rg -n "mirrors/list|/v1/mirrors" --type=kt --type=java -C5

Repository: OpenHub-Store/GitHub-Store

Length of output: 1130


🏁 Script executed:

# Search for fastly.jsdelivr.net in all backend code (without restrictive file types)
rg "fastly\.jsdelivr\.net" -C3

# Search for mirror list endpoint and mirror configuration
rg "mirrors/list|mirrors.*list|mirror.*config" -C5

# Look for mirror-related code patterns
rg "mirror" -i --type=java --type=kt 2>/dev/null | head -50

Repository: OpenHub-Store/GitHub-Store

Length of output: 21140


🏁 Script executed:

# Check directory structure to understand backend location
fd -t d -e "backend" -e "server" -e "api" 2>/dev/null | head -20

# Find Kotlin/Java files in common backend directories
find . -type f \( -name "*.kt" -o -name "*.java" \) 2>/dev/null | grep -E "(backend|server|api)" | head -30

Repository: OpenHub-Store/GitHub-Store

Length of output: 168


🏁 Script executed:

# Find MirrorListResponse definition
rg "class MirrorListResponse|data class MirrorListResponse" -A 10

# Look for any hardcoded mirror data or configurations
rg "fastly" -i

Repository: OpenHub-Store/GitHub-Store

Length of output: 4273


🏁 Script executed:

# Search for mirror data files or configurations
fd -e json -e yaml -e yml | xargs rg "mirror" -i 2>/dev/null | head -30

# Look for bundled fallback mirrors mentioned in docs
rg "bundled.*fallback|fallback.*mirror" -i -C3

Repository: OpenHub-Store/GitHub-Store

Length of output: 12801


🏁 Script executed:

# Search for BundledMirrors file
fd -e kt | xargs rg "BundledMirrors|bundled.*mirror" -i

# Look for any hardcoded mirror configurations
rg "fastly|jsdelivr|github.*mirror|mirror.*entry" -i -B2 -A2 | head -100

Repository: OpenHub-Store/GitHub-Store

Length of output: 15358


🏁 Script executed:

# Check the actual MirrorListResponse definition in the codebase
cat core/data/src/commonMain/kotlin/zed/rainxch/core/data/dto/MirrorListResponse.kt

Repository: OpenHub-Store/GitHub-Store

Length of output: 819


🏁 Script executed:

cat core/data/src/commonMain/kotlin/zed/rainxch/core/data/mirror/BundledMirrors.kt

Repository: OpenHub-Store/GitHub-Store

Length of output: 1265


Verify backend serves the fastly.jsdelivr.net mirror before shipping.

The whatsnew files announce fastly.jsdelivr.net, but this mirror is not present in the bundled fallback list (BundledMirrors.kt). Per coding guidelines, client announcements must only list mirrors that the backend actually serves via GET /v1/mirrors/list. Confirm that the backend API includes this mirror in its response and that BundledMirrors.kt is updated to include it—otherwise users will see the announcement but lack the mirror option on first launch or during cache miss.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@core/presentation/src/commonMain/composeResources/files/whatsnew/18.json` at
line 13, The whatsnew entry adds "fastly.jsdelivr.net" but the client only
should announce mirrors actually served; check the backend GET /v1/mirrors/list
implementation to confirm fastly.jsdelivr.net is included in responses, and if
it is not, either add it there or remove the whatsnew line. If the backend does
serve it, update the client bundled fallback list (BundledMirrors.kt) to include
"fastly.jsdelivr.net" so the app has the mirror available on first launch;
ensure the string matches exactly what the backend returns and re-run the mirror
list test/contract to verify consistency between GET /v1/mirrors/list and
BundledMirrors.kt.

"Joined Keep Android Open coalition — banner explains why."
]
},
{
"type": "FIXED",
Comment on lines +15 to 19
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 NEW bullets reordered, not just compressed

The original NEW bullet order was: (1) macOS Homebrew, (2) fastly mirror, (3) Keep Android Open, (4) GitHub web flow sign-in, (5) KSafe encryption. The compressed order becomes: (1) macOS Homebrew, (2) GitHub web flow, (3) KSafe encryption, (4) fastly mirror, (5) Keep Android Open. The PR description says "Pure compression — no feature claims added or removed," but reordering changes the visual emphasis — users scanning release notes see items in a different priority sequence. The same reordering is applied identically across all locale files. If this is intentional editorial restructuring, it may be worth calling out explicitly in the PR description.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Fix in Claude Code

"bullets": [
"Platform chips on repo details now open Search filtered by that platform — was a no-op.",
"Keyboard search button now triggers search on Android 12 across Chinese IMEs.",
"Externally-linked repo now shows a banner on Details with one-tap unlink.",
"Sign-in opens the device-code URL prefilled and copies a paste-friendly code.",
"Android 16 / custom-ROM crash on Settings + download failure — falls back to internal storage when external is blocked.",
"Magisk / KernelSU / APatch detection on Android 13+ — previous probe was masked by SELinux.",
"Pinned-variant label on Details refreshes across releases — old beta/rc qualifier numbers no longer linger in the chip.",
"README and release-notes no longer snap back to the top when you scroll past and return — measured height now persists across viewport disposal."
"Platform chips on Details now open filtered Search (was no-op).",
"Android 12 keyboard search button works across Chinese IMEs.",
"Externally-linked repo shows banner on Details with one-tap unlink.",
"Sign-in opens device-code URL prefilled + copies paste-friendly code.",
"Android 16 / custom-ROM Settings + download crash — falls back to internal storage.",
"Magisk / KernelSU / APatch detection on Android 13+ (SELinux-masked probe).",
"Pinned-variant label refreshes — no stale beta/rc qualifiers.",
"README / release-notes keep scroll position across viewport disposal."
]
},
{
"type": "IMPROVED",
"bullets": [
"Manually linking apps — sorted by installer source (F-Droid / Obtainium first, Play Store and system updates last) with a chip showing each app's source.",
"Manual link now suggests matching GitHub repos automatically — pick an app, get ranked candidates, tap to link. Manual URL entry still available.",
"GitHub-style alert callouts in README and release notes — Note, Tip, Important, Warning, Caution now render as tinted cards with icons instead of literal text.",
"Emoji shortcodes in README and release notes — :rocket: now renders as 🚀, :tada: as 🎉, and ~250 others. Common dev/status icons covered out of the box.",
"SVG images in README and release notes now render natively (diagrams, hero images). Theme-only images respect light/dark — no more both-variants-stacked. Browser-like User-Agent fixes hotlink-blocked badges from common CDNs.",
"Code blocks in README and release notes now have syntax highlighting — Kotlin, Java, Python, JS/TS, Rust, Swift, C#, Ruby, Shell, and more. Theme-aware colors for light + dark.",
"Markdown polish — HTML blockquotes and <pre><code> fences now render correctly. Sub/superscript convert to unicode (H₂O, x²). Named HTML entities (©, ™, —, “curly quotes”, etc.) decoded.",
"Collapsible <details>/<summary> sections render as tap-to-expand cards. Adjacent badge / button images (Play Store, GitHub Releases, etc.) flow in a single row instead of stacking.",
"Manual app matching no longer re-downloads to verify — your selected version is trusted as-is. Details banner notes when an app was manually linked.",
"Section-aware sort across the library — Installed (updates, recency, name), Starred (recency, name, stars), Favourites (recency, name); each section remembers its own choice.",
"Codeberg + Forgejo support — paste a Codeberg.org or any Forgejo/Gitea URL in the manual-link sheet; GHS picks an asset, downloads, installs and polls for updates just like GitHub repos. Source chip on the row tells you where the app came from. Self-hosted? Tweaks → Network → Custom forges lets you add any hostname. Search now has a GitHub / Codeberg source toggle plus a chip per custom forge you've added. Details screen also fully wired — opening a Codeberg / Forgejo repo loads the readme, releases, and stats from that host instead of falling back to GitHub."
"Manual link sheet sorts by installer source (F-Droid / Obtainium first, system updates last) with source chip per app.",
"Smart match suggests ranked repos across GitHub + Codeberg + custom forges.",
"GFM alert callouts (Note / Tip / Important / Warning / Caution) render as tinted cards.",
"Emoji shortcodes — :rocket: → 🚀 (~250 covered).",
"SVG images render natively. Theme-aware images respect light/dark. Browser UA unblocks CDN-hotlinked badges.",
"Code blocks syntax-highlighted (Kotlin / Java / Python / JS/TS / Rust / Swift / C# / Ruby / Shell, theme-aware).",
"Markdown polish — HTML blockquotes + `<pre><code>` render, sub/superscript → unicode, HTML entities decoded.",
"Collapsible `<details>` render as tap-to-expand cards. Badge / button image rows flow inline.",
"Manual matching trusts your version — no re-download to verify.",
"Section-aware sort across library — Installed, Starred, Favourites each remember their own choice."
]
}
]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,40 +7,40 @@
{
"type": "NEW",
"bullets": [
"التثبيت على macOS عبر Homebrew — `brew install --cask github-store` من المستودع الجديد.",
"تمت إضافة fastly.jsdelivr.net كمرآة مجتمعية. مفيدة عند تقييد GitHub.",
"انضممنا إلى تحالف Keep Android Open — لافتة في Apps توضح السبب.",
"تسجيل الدخول إلى GitHub يستخدم الآن تدفق الويب القياسي — انقر، صادق في المتصفح، انتهى. لا حاجة لرمز 8 أرقام.",
"جميع التفضيلات وبيانات الاعتماد المحفوظة مشفّرة الآن (AES-256-GCM) عبر KSafe — رموز GitHub، اعتمادات البروكسي، إعدادات التطبيق، معرّف الجهاز، اختيار المرآة، كل التلميحات، ذاكرة الإعلانات. Keystore مدعوم بالعتاد على Android. البيانات الموجودة تنتقل تلقائياً عند أول إقلاع."
"دعم Codeberg + Forgejo + Gitea. الصق رابط Codeberg / Forgejo أو أضف مضيفك الخاص من الإعدادات → الشبكة. التفاصيل، التثبيت، التحديثات، البحث — كلها متصلة.",
"تثبيت macOS عبر Homebrew: `brew install --cask github-store`.",
"تسجيل الدخول إلى GitHub يستخدم تدفق الويب القياسي — بدون رمز 8 أرقام.",
"التفضيلات والاعتمادات مشفّرة AES-256-GCM عبر KSafe (Keystore عتادي على Android). انتقال عند أول إقلاع.",
"إضافة مرآة fastly.jsdelivr.net لـ GitHub المقيّد.",
"انضممنا إلى تحالف Keep Android Open — لافتة توضح."
]
},
{
"type": "FIXED",
"bullets": [
"شارات المنصة في تفاصيل المستودع تفتح الآن Search مع فلتر لتلك المنصة — كانت بدون تأثير.",
"زر البحث في لوحة المفاتيح يُشغّل الآن البحث على Android 12 مع محررات الإدخال الصينية.",
"المستودع المرتبط خارجياً يعرض الآن لافتة في التفاصيل مع زر فك الارتباط بنقرة واحدة.",
"تسجيل الدخول يفتح رابط الرمز مع تعبئته مسبقاً وينسخ نسخة مناسبة للصق.",
"إصلاح تعطل الإعدادات وفشل التنزيلات على Android 16 / ROMات مخصصة — يستخدم التخزين الداخلي عند حجب الخارجي.",
"اكتشاف Magisk / KernelSU / APatch على Android 13+ — كان الفحص السابق محجوبًا بـ SELinux.",
"تسمية المتغير المثبت في التفاصيل تتحدث عبر الإصدارات — أرقام beta/rc القديمة لم تعد تظهر في الشارة.",
"لم تعد ملاحظات README والإصدار ترتد إلى الأعلى عند التمرير بعيداً والعودة — يتم الآن الاحتفاظ بالارتفاع المُقاس عبر إعادة إنشاء العرض."
"شارات المنصة في التفاصيل تفتح Search مع فلتر (كانت بدون تأثير).",
"زر البحث في لوحة المفاتيح يعمل على Android 12 مع محررات الإدخال الصينية.",
"المستودع المرتبط خارجياً يعرض لافتة في التفاصيل مع زر فك ارتباط بنقرة واحدة.",
"تسجيل الدخول يفتح رابط الرمز مع تعبئة مسبقة + ينسخ نسخة مناسبة للصق.",
"تعطل Android 16 / ROMات مخصصة في الإعدادات + التنزيل — يستخدم التخزين الداخلي.",
"اكتشاف Magisk / KernelSU / APatch على Android 13+ (فحص محجوب بـ SELinux).",
"تسمية المتغير المثبت تتحدث — بدون أرقام beta/rc قديمة.",
"README / ملاحظات الإصدار تحتفظ بموضع التمرير عبر إعادة إنشاء العرض."
]
},
{
"type": "IMPROVED",
"bullets": [
"عند الربط اليدوي للتطبيقات — يتم الفرز حسب مصدر التثبيت (F-Droid / Obtainium أولاً، Play Store وتحديثات النظام أخيراً) مع شارة تُظهر مصدر كل تطبيق.",
"الربط اليدوي يقترح الآن مستودعات GitHub المطابقة تلقائياً — اختر تطبيقاً، احصل على مرشحين مرتبين، انقر للربط. الإدخال اليدوي للعنوان لا يزال متاحاً.",
"تنبيهات GitHub في README وملاحظات الإصدار — Note وTip وImportant وWarning وCaution تظهر الآن كبطاقات ملونة مع أيقونات بدلاً من نص حرفي.",
"اختصارات الإيموجي في README وملاحظات الإصدار — :rocket: تظهر الآن كـ 🚀، :tada: كـ 🎉، و~250 اختصاراً آخر.",
"صور SVG في README وملاحظات الإصدار تظهر الآن أصلياً (مخططات، صور رئيسية). الصور الخاصة بسمة معينة تحترم الفاتح/الداكن. User-Agent يشبه المتصفح يصلح شارات CDN المحجوبة.",
"كتل الكود في README وملاحظات الإصدار أصبحت ملونة الآن — Kotlin وJava وPython وJS/TS وRust وSwift وC# وRuby وShell وغيرها. ألوان متجاوبة مع الفاتح والداكن.",
"تحسينات Markdown — اقتباسات HTML وكتل <pre><code> تظهر صحيحة. النصوص العلوية/السفلية تتحول إلى Unicode (H₂O، x²). كيانات HTML المسماة (©، ™، —، الاقتباسات المنحنية) تُفك ترميزها.",
"أقسام <details>/<summary> القابلة للطي تظهر كبطاقات قابلة للتوسيع بنقرة. صور الشارات/الأزرار المتجاورة (Play Store وGitHub Releases وغيرها) تتدفق في صف واحد بدلاً من التكدس.",
"المطابقة اليدوية للتطبيقات لم تعد تتطلب إعادة التنزيل — يتم اعتماد إصدارك المختار كما هو. لافتة على التفاصيل توضح أن التطبيق تم ربطه يدوياً.",
"فرز يخصّ كل قسم — المثبّتة (التحديثات، الحداثة، الاسم)، المميَّزة بنجمة (الحداثة، الاسم، عدد النجوم)، المفضلة (الحداثة، الاسم)؛ كل قسم يحفظ اختياره.",
"دعم Codeberg + Forgejo — الصق رابط Codeberg.org أو أي مضيف Forgejo/Gitea في نموذج الربط اليدوي؛ يختار GHS الأصل ويحمّله ويثبّته ويستفسر عن التحديثات مثل مستودعات GitHub. شارة الصف تُظهر المصدر. استضافة ذاتية؟ الإعدادات → الشبكة → منصّات مخصّصة لإضافة أي مضيف. البحث يحتوي الآن على مبدّل مصدر GitHub / Codeberg. بالإضافة إلى شارة لكل منصّة مخصّصة أضفتها."
"ورقة الربط اليدوي مرتبة حسب مصدر التثبيت (F-Droid / Obtainium أولاً، تحديثات النظام أخيراً) مع شارة مصدر لكل تطبيق.",
"Smart match يقترح مستودعات مرتبة من GitHub + Codeberg + منصّات مخصّصة.",
"تنبيهات GFM (Note / Tip / Important / Warning / Caution) كبطاقات ملونة.",
"اختصارات الإيموجي — :rocket: → 🚀 (~250 مغطاة).",
"صور SVG تُعرض أصلياً. الصور المخصصة لسمة تحترم الفاتح/الداكن. UA المتصفح يفك حجب شارات CDN.",
"كتل الكود ملونة (Kotlin / Java / Python / JS/TS / Rust / Swift / C# / Ruby / Shell، متجاوبة مع السمة).",
"تحسينات Markdown — اقتباسات HTML و`<pre><code>` تظهر، النصوص العلوية/السفلية → Unicode، كيانات HTML مُفكّكة الترميز.",
"أقسام `<details>` القابلة للطي كبطاقات قابلة للتوسيع بنقرة. صفوف صور الشارات/الأزرار تتدفق في سطر واحد.",
"المطابقة اليدوية تعتمد إصدارك المختار — بدون إعادة تنزيل للتحقق.",
"فرز خاص بكل قسم — المثبّتة، المميَّزة بنجمة، المفضلة تحفظ اختيارها."
]
}
]
Expand Down
Loading