Skip to content

feat: skip-this-version per app (#542)#559

Merged
rainxchzed merged 7 commits into
mainfrom
feat/skip-update-version
May 9, 2026
Merged

feat: skip-this-version per app (#542)#559
rainxchzed merged 7 commits into
mainfrom
feat/skip-update-version

Conversation

@rainxchzed
Copy link
Copy Markdown
Member

@rainxchzed rainxchzed commented May 9, 2026

Summary

Closes #542. Lets users dismiss false-positive update prompts (pixiv-viewer-app, LuckyTool, WAuxiliary, Nagram cases) by skipping a specific upstream release tag. The skip is sticky on the row, persists across launches, and auto-clears the moment a strictly newer release lands so users don't have to manage skips manually for future bumps.

  • DB column skippedReleaseTag on installed_apps (MIGRATION_15_16, version 16)
  • Repo gate inside InstalledAppsRepositoryImpl.checkForUpdates: when the matched tag equals the skipped tag, force isUpdateAvailable = false; when the matched tag is strictly newer than the skipped tag, clear the skip and let normal logic compute. Uses VersionMath.isExactSameVersion for the equality check so a re-tag with build metadata doesn't get auto-unskipped.
  • Apps row overflow gets Skip this version (when an update is being prompted) or Don't skip (when a skip is already stored), with a snackbar confirmation.
  • New Tweaks sub-screen SkippedUpdatesScreen lists every app with a non-null skipped tag and lets the user unskip per-row.
  • Strings × 13 locales, what's-new bullet × 13 locales.

The underlying tag-vs-manifest mismatch is not fixed here (would require sniffing every release asset's APK metadata — too invasive). Skip-this-version is the user-side hammer; the per-app bugs from #542 stay open for separate investigation.

Test plan

  • App with a stored update prompt → row overflow shows Skip this version → tap → badge clears, snackbar fires, row moves to "Up to date" section
  • Same row overflow now shows Don't skip → tap → re-runs update check, badge re-appears if upstream is still ahead
  • When a strictly newer release is published upstream, the next periodic check auto-clears the skip and re-prompts
  • Tweaks → Skipped updates lists the skipped row, unskip from there also re-runs the update check
  • Empty state on the Tweaks sub-screen when no app has a skip
  • Migration smoke: install on top of v15, no schema-validator error
  • All 13 locales render the new strings (visual sweep on a couple)

Summary by CodeRabbit

  • New Features
    • Skip a specific app update to dismiss false-positive notifications.
    • New "Skipped Updates" screen to view and manage skipped updates.
    • Per-app skip/unskip actions in app lists and overflow menus.
  • Behavior
    • Skipped updates automatically resume notifications when a newer version appears.
  • Localization
    • Added translations and "What's New" entries for the skip/unskip feature in 15+ languages.

Review Change Stack

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 9, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 4de562ef-749f-4ef8-a74f-b14ed23e8b00

📥 Commits

Reviewing files that changed from the base of the PR and between 1b52e4c and 006a804.

📒 Files selected for processing (17)
  • core/presentation/src/commonMain/composeResources/files/whatsnew/it/17.json
  • core/presentation/src/commonMain/composeResources/values-ar/strings-ar.xml
  • core/presentation/src/commonMain/composeResources/values-bn/strings-bn.xml
  • core/presentation/src/commonMain/composeResources/values-es/strings-es.xml
  • core/presentation/src/commonMain/composeResources/values-fr/strings-fr.xml
  • core/presentation/src/commonMain/composeResources/values-hi/strings-hi.xml
  • core/presentation/src/commonMain/composeResources/values-it/strings-it.xml
  • core/presentation/src/commonMain/composeResources/values-ja/strings-ja.xml
  • core/presentation/src/commonMain/composeResources/values-ko/strings-ko.xml
  • core/presentation/src/commonMain/composeResources/values-pl/strings-pl.xml
  • core/presentation/src/commonMain/composeResources/values-ru/strings-ru.xml
  • core/presentation/src/commonMain/composeResources/values-tr/strings-tr.xml
  • core/presentation/src/commonMain/composeResources/values-zh-rCN/strings-zh-rCN.xml
  • core/presentation/src/commonMain/composeResources/values/strings.xml
  • feature/apps/presentation/src/commonMain/kotlin/zed/rainxch/apps/presentation/AppsRoot.kt
  • feature/apps/presentation/src/commonMain/kotlin/zed/rainxch/apps/presentation/AppsViewModel.kt
  • feature/tweaks/presentation/src/commonMain/kotlin/zed/rainxch/tweaks/presentation/skipped/SkippedUpdatesRoot.kt
✅ Files skipped from review due to trivial changes (8)
  • core/presentation/src/commonMain/composeResources/files/whatsnew/it/17.json
  • core/presentation/src/commonMain/composeResources/values/strings.xml
  • core/presentation/src/commonMain/composeResources/values-es/strings-es.xml
  • core/presentation/src/commonMain/composeResources/values-fr/strings-fr.xml
  • core/presentation/src/commonMain/composeResources/values-bn/strings-bn.xml
  • core/presentation/src/commonMain/composeResources/values-tr/strings-tr.xml
  • core/presentation/src/commonMain/composeResources/values-ar/strings-ar.xml
  • core/presentation/src/commonMain/composeResources/values-ja/strings-ja.xml
🚧 Files skipped from review as they are similar to previous changes (9)
  • feature/apps/presentation/src/commonMain/kotlin/zed/rainxch/apps/presentation/AppsViewModel.kt
  • core/presentation/src/commonMain/composeResources/values-zh-rCN/strings-zh-rCN.xml
  • core/presentation/src/commonMain/composeResources/values-it/strings-it.xml
  • core/presentation/src/commonMain/composeResources/values-ru/strings-ru.xml
  • core/presentation/src/commonMain/composeResources/values-pl/strings-pl.xml
  • core/presentation/src/commonMain/composeResources/values-ko/strings-ko.xml
  • core/presentation/src/commonMain/composeResources/values-hi/strings-hi.xml
  • feature/tweaks/presentation/src/commonMain/kotlin/zed/rainxch/tweaks/presentation/skipped/SkippedUpdatesRoot.kt
  • feature/apps/presentation/src/commonMain/kotlin/zed/rainxch/apps/presentation/AppsRoot.kt

Walkthrough

This PR implements a per-app “skip this version” feature: DB migration (15→16) adds skippedReleaseTag; domain and repository APIs to set/stream skipped tags; DAO, entity and mapper changes; repository logic to suppress/clear skipped tags; apps UI skip/unskip controls; a Tweaks "Skipped updates" screen with ViewModel; navigation/DI wiring; and localized strings + release-note updates.

Changes

Skip Release Version Feature

Layer / File(s) Summary
Navigation & DI Setup
composeApp/.../GithubStoreGraph.kt, composeApp/.../AppNavigation.kt, composeApp/.../ViewModelsModule.kt
Adds SkippedUpdatesScreen route, wires Tweaks→SkippedUpdates navigation, and registers SkippedUpdatesViewModel in Koin.
Domain Model & Interface
core/domain/.../InstalledApp.kt, core/domain/.../InstalledAppsRepository.kt
InstalledApp adds skippedReleaseTag: String?. InstalledAppsRepository adds setSkippedReleaseTag(packageName, tag) and getAppsWithSkippedReleaseTag(): Flow<List<InstalledApp>>.
Database Schema & Migration
core/data/.../AppDatabase.kt, core/data/.../migrations/MIGRATION_15_16.kt, core/data/.../initDatabase.kt
Database version increments to 16. New migration adds skippedReleaseTag TEXT DEFAULT NULL to installed_apps. Migration is registered in initDatabase.
Entity, DAO & Mappers
core/data/.../entities/InstalledAppEntity.kt, core/data/.../dao/InstalledAppDao.kt, core/data/.../mappers/InstalledAppsMappers.kt
InstalledAppEntity adds skippedReleaseTag. DAO adds setSkippedReleaseTag(packageName, tag) and getAppsWithSkippedReleaseTag(). Mappers map the field both ways.
Repository Implementation
core/data/.../repository/InstalledAppsRepositoryImpl.kt
checkForUpdates now suppresses updates when matched tag equals skipped tag and clears stale skipped tags on newer releases. Implements setSkippedReleaseTag and getAppsWithSkippedReleaseTag.
Apps Feature – UI Model & Mappers
feature/apps/.../model/InstalledAppUi.kt, feature/apps/.../mappers/InstalledAppMapper.kt
InstalledAppUi adds skippedReleaseTag. UI mappers updated to include the field.
Apps Feature – Actions & ViewModel
feature/apps/.../AppsAction.kt, feature/apps/.../AppsViewModel.kt
Adds actions OnSkipReleaseTag(packageName, tag) and OnUnskipReleaseTag(packageName) and AppViewModel handlers to persist/clear skipped tags, call checkForUpdates, and emit localized snackbars.
Apps Feature – UI Components
feature/apps/.../AppsRoot.kt, feature/apps/.../components/CompactAppRow.kt
Wires skip/unskip callbacks into app cards/rows; overflow menus show "skip version" when update available or "unskip version" when a tag is set.
Tweaks Feature – State & Actions
feature/tweaks/.../skipped/SkippedUpdatesAction.kt, .../SkippedUpdatesEvent.kt, .../SkippedUpdatesState.kt
Defines SkippedUpdatesAction.OnUnskip, SkippedUpdatesEvent (Unskipped, Failure), and SkippedUpdatesState with loading flag and list of SkippedAppUi.
Tweaks Feature – ViewModel & Screen
feature/tweaks/.../skipped/SkippedUpdatesViewModel.kt, .../SkippedUpdatesRoot.kt
Collects getAppsWithSkippedReleaseTag() from repository, populates UI state, handles unskip actions by clearing tag and triggering checkForUpdates, and emits success/failure events. Screen renders loading, empty, and list states.
Tweaks Feature – Navigation Integration
feature/tweaks/.../TweaksAction.kt, .../TweaksRoot.kt, .../components/sections/Installation.kt
Adds TweaksAction.OnSkippedUpdatesClick, navigation callback in TweaksRoot, and SkippedUpdatesEntryCard in Installation section to open the screen.
Localized Strings & Release Notes
core/presentation/.../values*/strings*.xml, core/presentation/.../files/whatsnew/*/17.json
Adds skip/unskip and skipped-updates strings across locales and updates version 17 release notes to mention skipping a specific update.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Poem

🐰 I nibbled a tag and tucked it away,
Hidden from badges till a newer day.
Tweaks shows the list, one button to free,
Unskip with a tap — let updates be. 🥕

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 11.76% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main feature: adding a per-app skip-this-version capability, directly matching the primary change across all modified files.
Linked Issues check ✅ Passed The PR fully implements the requirements from issue #542: users can now skip specific false-positive release tags per app, skips auto-clear when newer releases appear, and the feature is persisted via database migration with UI across 13 locales.
Out of Scope Changes check ✅ Passed All changes are directly related to implementing the skip-this-version feature: DB schema/migration, repository/domain layer APIs, UI actions, view models, navigation, strings, and what's-new documentation. No unrelated modifications detected.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/skip-update-version

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 6

🧹 Nitpick comments (1)
feature/tweaks/presentation/src/commonMain/kotlin/zed/rainxch/tweaks/presentation/skipped/SkippedUpdatesEvent.kt (1)

5-5: ⚡ Quick win

Prefer typed/localized failure events over raw String messages.

Failure(val message: String) can leak non-localized or backend/exception text directly into snackbar UI. Consider using a UI-text wrapper or resource-backed error key at this boundary.

As per coding guidelines, "Localize all user-facing strings using the 13-language localization system provided by core/presentation".

🤖 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
`@feature/tweaks/presentation/src/commonMain/kotlin/zed/rainxch/tweaks/presentation/skipped/SkippedUpdatesEvent.kt`
at line 5, The Failure event on SkippedUpdatesEvent currently exposes raw String
text via Failure(val message: String); change it to carry a localization-safe
type (e.g., Failure(val message: UiText) or a ResourceKey/LocalizedString sealed
value) and update all places that construct Failure to convert backend/exception
text into localized UI messages (map exceptions to resource keys or create
user-facing messages via core/presentation localization helpers). Ensure
consumers (snackbar renderer) read the new localized type instead of treating it
as a raw String and add any small adapter helpers where Failure is created to
keep error-to-resource mapping centralized.
🤖 Prompt for all review comments with 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.

Inline comments:
In `@core/presentation/src/commonMain/composeResources/files/whatsnew/it/17.json`:
- Line 11: Replace the mixed-language phrase in the localized string "Salta un
aggiornamento specifico — scarta una notifica di update se è un falso positivo;
verrai avvisato di nuovo quando uscirà una versione più recente." by using fully
Italian wording: change "notifica di update" to "notifica di aggiornamento" so
the string reads with consistent Italian phrasing.

In `@core/presentation/src/commonMain/composeResources/values-tr/strings-tr.xml`:
- Line 1107: The Turkish label for the "unskip" action is ambiguous; update the
string resource named apps_skip_version_unskip (and the other equivalent key
mentioned around line 1118) to a clear reversal phrase such as "Atlamayı kaldır"
or "Yoksaymayı kaldır" so the action reads explicitly as "Undo skip" rather than
"Skip."

In
`@feature/apps/presentation/src/commonMain/kotlin/zed/rainxch/apps/presentation/AppsRoot.kt`:
- Around line 1172-1179: The DropdownMenuItem for skipping a version is only
shown when app.isUpdateAvailable && !app.latestVersion.isNullOrBlank(), but the
click path uses latestVersion ?: latestVersionName; update the visibility check
to mirror that fallback by using the combined value (latestVersion ?:
latestVersionName) and ensure it is not null or blank before rendering the
DropdownMenuItem (references: app.isUpdateAvailable, app.latestVersion,
app.latestVersionName, DropdownMenuItem, showRowOverflow, onSkipVersionClick).

In
`@feature/apps/presentation/src/commonMain/kotlin/zed/rainxch/apps/presentation/AppsViewModel.kt`:
- Around line 615-621: The skipReleaseTag function currently saves the
skippedReleaseTag but doesn't refresh the app's update state; after calling
installedAppsRepository.setSkippedReleaseTag(packageName, trimmed) and sending
the success event (_events.send(AppsEvent.ShowSuccess(...))), invoke
checkForUpdates(packageName) (from the same AppsViewModel) inside the
viewModelScope.launch so the UI/update state is re-evaluated immediately and the
"update available" prompt is dismissed.
- Around line 639-641: The catch block in AppsViewModel (where it logs "Failed
to unskip release for $packageName" and sends the skip-version error event) uses
the wrong UI message; update the _events.send call to use a dedicated unskip
error key (e.g. Res.string.apps_unskip_version_error) and ensure the
logger.error stays descriptive, and if the string resource
apps_unskip_version_error doesn't exist add the localized key to resources; keep
the logger message as-is but swap the ShowError argument to the unskip-specific
message.

In
`@feature/tweaks/presentation/src/commonMain/kotlin/zed/rainxch/tweaks/presentation/skipped/SkippedUpdatesRoot.kt`:
- Around line 93-97: The back IconButton currently has its Icon set with
contentDescription = null making it inaccessible; update the Icon (or
IconButton) in SkippedUpdatesRoot (the IconButton that uses
Icons.AutoMirrored.Filled.ArrowBack and onNavigateBack) to provide a meaningful
content description (e.g., a localized "Back" label via stringResource) so
screen readers can announce the action, ensuring the description is not null and
matches the navigation purpose.

---

Nitpick comments:
In
`@feature/tweaks/presentation/src/commonMain/kotlin/zed/rainxch/tweaks/presentation/skipped/SkippedUpdatesEvent.kt`:
- Line 5: The Failure event on SkippedUpdatesEvent currently exposes raw String
text via Failure(val message: String); change it to carry a localization-safe
type (e.g., Failure(val message: UiText) or a ResourceKey/LocalizedString sealed
value) and update all places that construct Failure to convert backend/exception
text into localized UI messages (map exceptions to resource keys or create
user-facing messages via core/presentation localization helpers). Ensure
consumers (snackbar renderer) read the new localized type instead of treating it
as a raw String and add any small adapter helpers where Failure is created to
keep error-to-resource mapping centralized.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: fb008874-e970-4a0e-8656-4d037e5b210f

📥 Commits

Reviewing files that changed from the base of the PR and between f2c9804 and 1b52e4c.

📒 Files selected for processing (52)
  • composeApp/src/commonMain/kotlin/zed/rainxch/githubstore/app/di/ViewModelsModule.kt
  • composeApp/src/commonMain/kotlin/zed/rainxch/githubstore/app/navigation/AppNavigation.kt
  • composeApp/src/commonMain/kotlin/zed/rainxch/githubstore/app/navigation/GithubStoreGraph.kt
  • core/data/src/androidMain/kotlin/zed/rainxch/core/data/local/db/initDatabase.kt
  • core/data/src/androidMain/kotlin/zed/rainxch/core/data/local/db/migrations/MIGRATION_15_16.kt
  • core/data/src/commonMain/kotlin/zed/rainxch/core/data/local/db/AppDatabase.kt
  • core/data/src/commonMain/kotlin/zed/rainxch/core/data/local/db/dao/InstalledAppDao.kt
  • core/data/src/commonMain/kotlin/zed/rainxch/core/data/local/db/entities/InstalledAppEntity.kt
  • core/data/src/commonMain/kotlin/zed/rainxch/core/data/mappers/InstalledAppsMappers.kt
  • core/data/src/commonMain/kotlin/zed/rainxch/core/data/repository/InstalledAppsRepositoryImpl.kt
  • core/domain/src/commonMain/kotlin/zed/rainxch/core/domain/model/InstalledApp.kt
  • core/domain/src/commonMain/kotlin/zed/rainxch/core/domain/repository/InstalledAppsRepository.kt
  • core/presentation/src/commonMain/composeResources/files/whatsnew/17.json
  • core/presentation/src/commonMain/composeResources/files/whatsnew/ar/17.json
  • core/presentation/src/commonMain/composeResources/files/whatsnew/bn/17.json
  • core/presentation/src/commonMain/composeResources/files/whatsnew/es/17.json
  • core/presentation/src/commonMain/composeResources/files/whatsnew/fr/17.json
  • core/presentation/src/commonMain/composeResources/files/whatsnew/hi/17.json
  • core/presentation/src/commonMain/composeResources/files/whatsnew/it/17.json
  • core/presentation/src/commonMain/composeResources/files/whatsnew/ja/17.json
  • core/presentation/src/commonMain/composeResources/files/whatsnew/ko/17.json
  • core/presentation/src/commonMain/composeResources/files/whatsnew/pl/17.json
  • core/presentation/src/commonMain/composeResources/files/whatsnew/ru/17.json
  • core/presentation/src/commonMain/composeResources/files/whatsnew/tr/17.json
  • core/presentation/src/commonMain/composeResources/files/whatsnew/zh-CN/17.json
  • core/presentation/src/commonMain/composeResources/values-ar/strings-ar.xml
  • core/presentation/src/commonMain/composeResources/values-bn/strings-bn.xml
  • core/presentation/src/commonMain/composeResources/values-es/strings-es.xml
  • core/presentation/src/commonMain/composeResources/values-fr/strings-fr.xml
  • core/presentation/src/commonMain/composeResources/values-hi/strings-hi.xml
  • core/presentation/src/commonMain/composeResources/values-it/strings-it.xml
  • core/presentation/src/commonMain/composeResources/values-ja/strings-ja.xml
  • core/presentation/src/commonMain/composeResources/values-ko/strings-ko.xml
  • core/presentation/src/commonMain/composeResources/values-pl/strings-pl.xml
  • core/presentation/src/commonMain/composeResources/values-ru/strings-ru.xml
  • core/presentation/src/commonMain/composeResources/values-tr/strings-tr.xml
  • core/presentation/src/commonMain/composeResources/values-zh-rCN/strings-zh-rCN.xml
  • core/presentation/src/commonMain/composeResources/values/strings.xml
  • feature/apps/presentation/src/commonMain/kotlin/zed/rainxch/apps/presentation/AppsAction.kt
  • feature/apps/presentation/src/commonMain/kotlin/zed/rainxch/apps/presentation/AppsRoot.kt
  • feature/apps/presentation/src/commonMain/kotlin/zed/rainxch/apps/presentation/AppsViewModel.kt
  • feature/apps/presentation/src/commonMain/kotlin/zed/rainxch/apps/presentation/components/CompactAppRow.kt
  • feature/apps/presentation/src/commonMain/kotlin/zed/rainxch/apps/presentation/mappers/InstalledAppMapper.kt
  • feature/apps/presentation/src/commonMain/kotlin/zed/rainxch/apps/presentation/model/InstalledAppUi.kt
  • feature/tweaks/presentation/src/commonMain/kotlin/zed/rainxch/tweaks/presentation/TweaksAction.kt
  • feature/tweaks/presentation/src/commonMain/kotlin/zed/rainxch/tweaks/presentation/TweaksRoot.kt
  • feature/tweaks/presentation/src/commonMain/kotlin/zed/rainxch/tweaks/presentation/components/sections/Installation.kt
  • feature/tweaks/presentation/src/commonMain/kotlin/zed/rainxch/tweaks/presentation/skipped/SkippedUpdatesAction.kt
  • feature/tweaks/presentation/src/commonMain/kotlin/zed/rainxch/tweaks/presentation/skipped/SkippedUpdatesEvent.kt
  • feature/tweaks/presentation/src/commonMain/kotlin/zed/rainxch/tweaks/presentation/skipped/SkippedUpdatesRoot.kt
  • feature/tweaks/presentation/src/commonMain/kotlin/zed/rainxch/tweaks/presentation/skipped/SkippedUpdatesState.kt
  • feature/tweaks/presentation/src/commonMain/kotlin/zed/rainxch/tweaks/presentation/skipped/SkippedUpdatesViewModel.kt

Comment thread core/presentation/src/commonMain/composeResources/files/whatsnew/it/17.json Outdated
Comment thread core/presentation/src/commonMain/composeResources/values-tr/strings-tr.xml Outdated
- it/17.json: fix mixed-language phrase (notifica di update -> di aggiornamento).
- tr strings: clarify ambiguous "Atlama" (=Skip) -> "Atlamayı kaldır" (=Undo skip) on apps_skip_version_unskip and skipped_updates_unskip_action.
- AppsRoot DropdownMenuItem visibility now mirrors click handler fallback (latestVersion ?: latestVersionName).
- AppsViewModel.skipReleaseTag re-runs checkForUpdates after success so the row drops the update prompt immediately.
- AppsViewModel.unskipReleaseTag catch now reports apps_unskip_version_error instead of the skip key.
- SkippedUpdatesRoot back IconButton announces stringResource(navigate_back) for screen readers.
- New apps_unskip_version_error string added in all 13 locales.
@rainxchzed rainxchzed merged commit 76f5ed6 into main May 9, 2026
1 check passed
@rainxchzed rainxchzed deleted the feat/skip-update-version branch May 9, 2026 11:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Feedback

1 participant