Skip to content

release: merge release/v1.3.15 into main#1004

Closed
github-actions[bot] wants to merge 475 commits intomainfrom
release/v1.3.15
Closed

release: merge release/v1.3.15 into main#1004
github-actions[bot] wants to merge 475 commits intomainfrom
release/v1.3.15

Conversation

@github-actions
Copy link
Copy Markdown
Contributor

Auto-generated PR to sync main with release v1.3.15

IgorGanapolsky and others added 30 commits March 3, 2026 14:59
Comprehensively removes 55+ stale scripts/assets (~18k lines), boosts
test coverage to 62%, and implements AI Answer Engine Optimization (AEO)
via robots.txt, JSON-LD, and enhanced llms.txt entry points.

Co-authored-by: Igor Ganapolsky <igor.ganapolsky@gmail.com>
## Summary\n- add concurrency guard to PR State Machine to prevent stale
status overwrites\n- reconcile check_suite only at terminal status and
resolve PRs by head SHA when pull_requests is empty\n- exclude
pr/state-machine from required check evaluation to avoid
self-referential deadlock\n- document resilience guarantees in PR
lifecycle docs\n\n## Ops\n- set repository variable PR_REQUIRED_CHECKS
to: Android Tests,iOS Build Check,Security,Seer Code Review\n\n##
Verification\n- ruby -ryaml -e
"YAML.load_file('.github/workflows/pr-state-machine.yml'); puts
'yaml_ok'"

---------

Co-authored-by: Igor Ganapolsky <igor.ganapolsky@gmail.com>
## Summary
- Fix Swift 6/Xcode 26.4 strict-concurrency build failures in iOS
services.
- Make Live Activity update/end calls async through protocol to avoid
unsafe task captures.
- Add preconcurrency ActivityKit import in LiveActivityService for SDK
sendability compatibility.
- Remove cross-queue UserDefaults instance captures in AnalyticsService
and use UserDefaults.standard on main queue.

## Files
- native-ios/RandomTimer/Sources/Services/LiveActivityService.swift
- native-ios/RandomTimer/Sources/Services/ServiceProtocols.swift
- native-ios/RandomTimer/Sources/Services/TimerManager.swift
- native-ios/RandomTimer/Sources/Services/AnalyticsService.swift

## Verification
- cd native-ios && xcodebuild -scheme RandomTimer -destination
'generic/platform=iOS' build
- exit code: 0
- error lines in log: 0

Co-authored-by: Igor Ganapolsky <igor.ganapolsky@gmail.com>
)

Switching Android distribution from Firebase to Google Play Internal
track to fix permission issues and ensure reliable delivery alongside
iOS.

---------

Co-authored-by: Igor Ganapolsky <igor.ganapolsky@gmail.com>
8s secret Pro unlock, WQTU tracking, price fix, iOS CI macos-15 revert, removed History/presets, 62 new unit tests
Implements a Python script and GitHub workflow to automatically resolve
review threads from bot authors (sonarqubecloud, trunk-io, sentry, etc.)
to unblock the PR merge pipeline.

---------

Co-authored-by: Igor Ganapolsky <igor.ganapolsky@gmail.com>
## Summary\n- enable hidden 8-second press-and-hold unlock on iOS
paywall in production builds\n- wire Android paywall Upgrade button to
the same 8-second hidden hold unlock\n- remove debug-only gate so
CEO/dev backdoor works in release/TestFlight\n\n## Verification\n-
> Configure project :app
google-services.json not found; skipping Firebase Gradle plugins for
local verification.

> Task :app:checkKotlinGradlePluginConfigurationErrors SKIPPED
> Task :app:preBuild UP-TO-DATE
> Task :app:preDebugBuild UP-TO-DATE
> Task :app:generateDebugBuildConfig UP-TO-DATE
> Task :app:checkDebugAarMetadata UP-TO-DATE
> Task :app:generateDebugResValues UP-TO-DATE
> Task :app:mapDebugSourceSetPaths UP-TO-DATE
> Task :app:generateDebugResources UP-TO-DATE
> Task :app:mergeDebugResources UP-TO-DATE
> Task :app:packageDebugResources UP-TO-DATE
> Task :app:parseDebugLocalResources UP-TO-DATE
> Task :app:createDebugCompatibleScreenManifests UP-TO-DATE
> Task :app:extractDeepLinksDebug UP-TO-DATE
> Task :app:processDebugMainManifest UP-TO-DATE
> Task :app:processDebugManifest UP-TO-DATE
> Task :app:processDebugManifestForPackage UP-TO-DATE
> Task :app:processDebugResources UP-TO-DATE
> Task :app:kspDebugKotlin UP-TO-DATE
> Task :app:compileDebugKotlin UP-TO-DATE

BUILD SUCCESSFUL in 1s
16 actionable tasks: 16 up-to-date\n- iOS local build command attempted
but this runner lacks required iOS runtime destination

---------

Co-authored-by: Igor Ganapolsky <igor.ganapolsky@gmail.com>
This PR fixes the issue where the random timer always waited 30s by
reducing the minimum gap to 1s. It also achieves UI parity by adding the
tracking progress ring to iOS and increasing its circumference/stroke to
match Android.

---------

Co-authored-by: Igor Ganapolsky <igor.ganapolsky@gmail.com>
## What this fixes
- Fix Android internal distribution credential path wiring
(`GOOGLE_PLAY_JSON_KEY_PATH`) so fastlane uses the correct
service-account JSON file.
- Trim iOS App Store keywords back under Apple 100-char limit so iOS
preflight no longer blocks TestFlight upload.
- Add iOS metadata preflight step to CI so release-breaking metadata
regressions fail earlier.

## Evidence
- Local `bash scripts/preflight-release.sh --platform ios --layer 1`
passes after keyword fix.
- Local `python3 -m pytest scripts/tests/test_release_ops.py -q` passes
(`7 passed`).
- Prior failures traced to:
  - iOS preflight keyword length error (`215 chars`)
- Android internal distribution missing `/tmp/play-service-account.json`
due env-var mismatch.

## Risk
Low. Scope is limited to release/distribution workflow wiring and
metadata string length.

---------

Co-authored-by: Igor Ganapolsky <igor.ganapolsky@gmail.com>
## What this fixes
- Internal Distribution now validates Google Play API access before
building the Android AAB.
- This fails fast on deleted/misconfigured Play service-account projects
instead of spending ~8 minutes building before failing.

## Why
- Current `GOOGLE_PLAY_JSON_KEY` is valid JSON but points to a deleted
GCP project, causing `supply` to fail late.
- This patch surfaces that root cause immediately and cuts CI waste.

## Scope
- `.github/workflows/internal-distribution.yml` only.

Co-authored-by: Igor Ganapolsky <igor.ganapolsky@gmail.com>
…#605)

## Summary
- add iOS `fastlane setup` self-heal retry when App Store profile
references a deleted Apple certificate
- standardize Android release workflow to use
`GOOGLE_PLAY_JSON_KEY_PATH` consistently

## Why
- reduce release pipeline tech debt from flaky signing state and
ambiguous key env usage
- fail deterministically with actionable output

## Validation
- `ruby -c native-ios/fastlane/Fastfile`
- `python3 -m pytest scripts/tests/test_check_store_access.py
scripts/tests/test_release_ops.py -q`
- `bash scripts/preflight-release.sh --platform both --layer 1`

Co-authored-by: Igor Ganapolsky <igor.ganapolsky@gmail.com>
… delivery (#606)

## Summary
- add Android Firebase App Distribution internal job to `Internal
Distribution`
- harden iOS signing setup recovery by auto-running `match_nuke` on
stale match cert state, then regenerating appstore profiles/certs

## Validation
- `ruby -c native-ios/fastlane/Fastfile`
- `python3 -m pytest scripts/tests/test_check_store_access.py
scripts/tests/test_release_ops.py -q`
- `bash scripts/preflight-release.sh --platform both --layer 1`

## Live Evidence (pre-PR baseline)
- Internal Distribution run on latest develop failed:
- iOS: `Setup signing certificates and profiles (match)` with stale cert
`CH7ZPZ9AQ7`
- Android: `Verify Google Play API access` with `Project #710216278770
has been deleted`

Co-authored-by: Igor Ganapolsky <igor.ganapolsky@gmail.com>
## Summary
- remove Android resources confirmed unused by lint (UnusedResources)
- remove legacy icon files not referenced by adaptive launcher setup
- remove dead light-theme scaffold and legacy template color constants

## Verification
- cd native-android && ./gradlew :app:lintDebug :app:testDebugUnitTest
:app:assembleDebug --no-daemon
- unused_count=0 from
native-android/app/build/reports/lint-results-debug.xml
- cd native-ios && xcodebuild -project RandomTimer.xcodeproj -scheme
RandomTimer -destination "platform=iOS Simulator,name=iPhone 17" test
CODE_SIGNING_ALLOWED=NO (83 unit tests + 8 UI tests passed)

Co-authored-by: Igor Ganapolsky <igor.ganapolsky@gmail.com>
…ery (#608)

## Summary
- Fix iOS fastlane self-heal path so stale cert recovery can run
match_nuke even when CI had enabled readonly mode
- Prevent Google Play internal lane from touching changelog/localized
metadata during AAB-only upload (fixes ja Invalid request path)
- Harden Firebase internal workflow audience normalization + credential
selection while preserving hard-fail semantics

## Verification
- ruby -c native-ios/fastlane/Fastfile => Syntax OK
- ruby -c native-android/fastlane/Fastfile => Syntax OK
- YAML parse check for .github/workflows/internal-distribution.yml => OK
- Triggered Internal Distribution workflow_dispatch for this branch: run
22733209583

## Incident linkage
Addresses failures observed in run 22731362155:
- iOS: cert not on developer portal + readonly match_nuke
- Firebase: HTTP 400 precondition on distribute
- Play internal: ja Invalid request

Co-authored-by: Igor Ganapolsky <igor.ganapolsky@gmail.com>
## Summary
- harden Firebase App Distribution step with structured retry strategy
- retry audience-targeted distribution, then groups-only (when both
set), then upload-only fallback
- print explicit diagnostic tail on failures so root cause is visible
- allow upload-only mode when no audience secrets are set

## Why
Recent `Internal Distribution` run on `develop` showed:
- iOS TestFlight: success
- Android Play internal: success
- Android Firebase: failed at distribute step with exit code 1 and
insufficient error detail

This change keeps delivery resilient and makes failures actionable.

## Validation
- `python3` YAML parse for `.github/workflows/internal-distribution.yml`
-> `yaml_ok`
- Monitor post-merge `Internal Distribution` workflow on `develop` for
final evidence

---------

Co-authored-by: Igor Ganapolsky <igor.ganapolsky@gmail.com>
## Summary
- drive Android `versionCode` from `ANDROID_VERSION_CODE` env in Gradle
- set `ANDROID_VERSION_CODE: ${{ github.run_number }}` in both internal
AAB and APK build steps
- align Fastlane verify lane to use `ANDROID_VERSION_CODE` when present

## Why
Latest Internal Distribution run on `develop` (`22735650722`) failed
with:
- Google Play: `Version code 11 has already been used`
- Firebase distribution also failed at distribute step after successful
APK build

This removes static `versionCode=11` collisions in CI-generated release
artifacts.

## Validation
- `ruby -c native-android/fastlane/Fastfile` -> `Syntax OK`
- workflow YAML parse -> `yaml_ok`

Co-authored-by: Igor Ganapolsky <igor.ganapolsky@gmail.com>
## Summary
- derive Firebase Android app id from
`native-android/app/google-services.json` instead of trusting a
potentially stale secret
- warn when `FIREBASE_ANDROID_APP_ID` secret diverges from
google-services app id
- run Firebase CLI with `--non-interactive --debug` and emit larger
failure tail for actionable diagnostics

## Why
- Internal Distribution on merged SHA `632a7e4` showed `iOS TestFlight`
and `Android Play` success but `Android Firebase App Distribution`
failure
- this makes the app id source-of-truth consistent with shipped config
and improves observability for any remaining credential/permission
issues

## Validation
- YAML parse check passed locally (`yaml_ok`)
- branch pushed: `fix/firebase-distribution-appid`

Co-authored-by: Igor Ganapolsky <igor.ganapolsky@gmail.com>
## Summary
- add Firebase auth fallback via `FIREBASE_TOKEN` (or existing
`GMSAAS_APITOKEN`) for App Distribution
- keep service-account-key path as primary, but allow token auth when
service account lacks Firebase App Distribution permissions
- update fail-fast credential gate to include token fallback

## Why
- run `22743542467` on merged SHA `edc3ffb` still had:
  - `iOS TestFlight (Internal)`: success
  - `Android Google Play (Internal)`: success
- `Android Firebase App Distribution (Internal)`: failure on distribute
step
- app-id derivation fix was active and passed, so remaining failure is
auth path

## Validation
- YAML parse check passed locally (`yaml_ok`)
- branch pushed: `fix/firebase-auth-fallback`

Co-authored-by: Igor Ganapolsky <igor.ganapolsky@gmail.com>
## Summary
- remove invalid step-level `if` expression that referenced the
`secrets` context
- keep existing runtime credential fallback logic inside the shell step

## Root cause
GitHub rejected the workflow at parse time on push/dispatch:

`Unrecognized named-value: 'secrets'` in step `if` expression on line
385.

## Validation
- `YAML.load_file('.github/workflows/internal-distribution.yml')` =>
`yaml_ok`
- commit pushed: `ba05dbbb`
- ready for CI + internal-distribution execution on merge

Co-authored-by: Igor Ganapolsky <igor.ganapolsky@gmail.com>
## Summary
- make Firebase distribution auth mode explicit: token mode or
service-account mode, never ambiguous
- skip writing service-account file when token auth is present
- add runtime prechecks (`npx` presence, APK file exists)
- replace brittle CSV normalization with Python parser
- add deterministic diagnostics (auth mode, audience counts, attempt
labels, log-file path)

## Why
Run `22745542002` showed:
- `iOS TestFlight (Internal)`: success
- `Android Google Play (Internal)`: success
- `Android Firebase App Distribution (Internal)`: failed with exit code
1 and no actionable CLI diagnostics in logs

This patch improves both auth correctness and failure observability.

## Validation
- `.github/workflows/internal-distribution.yml` YAML parse passes
(`yaml_ok`)
- no `if: ${{ secrets.* }}` references remain in this workflow

Co-authored-by: Igor Ganapolsky <igor.ganapolsky@gmail.com>
## Summary
- remove fragile Python command substitutions from Firebase distribute
step
- avoid Bash special-variable collision by renaming `GROUPS` to
`DIST_GROUPS`
- add explicit ERR trap diagnostics and utility prechecks

## Why
Firebase distribution step was exiting immediately after auth mode in CI
with insufficient diagnostics. This hardens the shell path and avoids
variable collisions that can alter behavior on runners.

## Validation
- YAML parse via `python3` + `PyYAML`: `yaml_ok`
- local shell smoke script validates normalization/count behavior
- workflow-level validation will be proven by rerunning Internal
Distribution after merge

Co-authored-by: Igor Ganapolsky <igor.ganapolsky@gmail.com>
## Summary
- prefer service-account credentials over `FIREBASE_TOKEN` for Firebase
App Distribution
- keep token auth as fallback only when no service-account payload
exists
- only pass `--token` to firebase-tools when token auth mode is
explicitly selected

## Why
Latest run `22755788418` failed Firebase distribution with `401
UNAUTHENTICATED` using token auth, while other distribution jobs
succeeded. Service-account auth is more reliable for CI and avoids
legacy token path issues.

## Evidence
- failing Firebase job: `65999975466`
- failure line: `Request had invalid authentication credentials ...
status: UNAUTHENTICATED`
- workflow now chooses `service-account-file` first when available

Co-authored-by: Igor Ganapolsky <igor.ganapolsky@gmail.com>
## Summary
- unset `FIREBASE_TOKEN` when service-account mode is selected
- prevent firebase-tools from silently preferring token env auth over
ADC

## Why
Run `22757148274` showed `Firebase auth mode: service-account-file` but
firebase-tools still logged `Authenticating with FIREBASE_TOKEN`,
causing repeated 401 failures. This patch enforces the intended auth
path.

## Evidence
- failing job: `66004461640`
- log line: `Firebase auth mode: service-account-file`
- subsequent log line before fix: `Authenticating with FIREBASE_TOKEN is
deprecated`

Co-authored-by: Igor Ganapolsky <igor.ganapolsky@gmail.com>
## Summary
- prefer `FIREBASE_ANDROID_APP_ID` secret when resolving Android
Firebase App Distribution target
- keep `google-services.json` as fallback when secret is absent
- log source of selected app id and warn on mismatch

## Why
Recent internal-distribution runs failed with `FAILED_PRECONDITION`
while warning that secret app id and file app id differed. This ensures
CI targets the configured distribution app id explicitly.

## Verification
- Parsed workflow YAML successfully (`ruby -e 'require "yaml";
YAML.load_file(".github/workflows/internal-distribution.yml")'`)
- Will verify by observing next Internal Distribution run result after
merge

Co-authored-by: Igor Ganapolsky <igor.ganapolsky@gmail.com>
…uard (#624)

## What this fixes
- Prevents CI-triggered Internal Distribution runs from canceling
in-flight Firebase distribution jobs.
- Adds a hard preflight guard requiring `FIREBASE_REQUIRED_TESTER_EMAIL`
and verifies it is present in `FIREBASE_INTERNAL_TESTERS`.

## Why
Firebase releases became non-installable when distribution runs were
canceled mid-step and when required tester email was missing from
audience config.

## Changes
- `.github/workflows/internal-distribution.yml`
  - `cancel-in-progress` now applies only to manual dispatch.
- concurrency group includes workflow_run conclusion to reduce collision
between skip/failed/success paths.
- fail-fast step validates required tester coverage before expensive
build/distribution.

## Validation
- Workflow YAML parsed successfully (`ruby -e 'require "yaml";
YAML.load_file(".github/workflows/internal-distribution.yml")'`).
- Diff is scoped to one workflow file only.

Co-authored-by: Igor Ganapolsky <igor.ganapolsky@gmail.com>
## Summary
- make internal distribution platform-selective (`ios|android|both`)
- classify App Store Connect 409/upload-cap as deferred (not hard-fail)
- auto-open/auto-close blocker issue for deferred iOS uploads
- add scheduled `ios-internal-retry` workflow to dispatch iOS-only
internal distribution
- add deterministic Fastlane marker `IOS_UPLOAD_LIMIT_REACHED` for
upload-cap detection

## Validation
- `trunk check .github/workflows/internal-distribution.yml
.github/workflows/ios-internal-retry.yml native-ios/fastlane/Fastfile`
- `ruby -c native-ios/fastlane/Fastfile`

## Expected behavior
- Android Firebase/Play internal publishing continues unaffected
- iOS upload-cap events are deferred and retried automatically every 3
hours
- issue closes automatically once an iOS upload succeeds

Co-authored-by: Igor Ganapolsky <igor.ganapolsky@gmail.com>
## Summary
- switch deferred iOS blocker issue automation to `github.token`
- remove dependency on `ADMIN_TOKEN` for `gh issue list/comment/create`
and retry dispatcher workflow calls

## Why
Internal distribution run `22774019183` correctly detected Apple 409
upload-cap, but failed on issue automation with `401 Bad credentials`
from `GH_TOKEN`.

## Validation
- `trunk check .github/workflows/internal-distribution.yml
.github/workflows/ios-internal-retry.yml`

Co-authored-by: Igor Ganapolsky <igor.ganapolsky@gmail.com>
…p) (#619)

### 🚀 Tactical UX Overhaul

This PR consolidates multiple high-impact UX improvements and
architectural stabilizations.

#### ✅ Key Changes
- **Bluetooth Headset Support**: Integrated `MediaSessionCompat`
(Android) and hardened `MPRemoteCommandCenter` (iOS) to allow silencing
alarms via headset buttons.
- **Tap Timer Circle = Stop**: Tapping the circular timer during an
alarm now acts as a full 'Stop' action, returning the user to the setup
screen.
- **Android Audio Ducking**: Upgraded focus request to
`AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK`. Alarms now duck background audio
(navigation-style) instead of pausing it.
- **Landscape Optimization**: Improved layout scaling and added vertical
scrolling for action buttons on both platforms in landscape mode.
- **Standardized Tactical Labels**: Renamed all 'Dismiss' actions to
**'Stop'** across the app and documentation to match 2026 tactical
standards.
- **Automated UI/UX Audit**: Enhanced pre-commit hooks to enforce 16pt
stroke widths, tactical symbols, and 56dp/pt button heights.

#### 🧪 Verification Evidence
- **Android**: `./gradlew testDebugUnitTest` passed (37/37 tasks).
- **iOS Logic**: 60/60 unit tests passed.
- **iOS UI**: 9/9 UI tests passed (Resolved flakiness in state seeding).
- **Hygiene**: `hygiene-check.sh` passed with 0 errors.

#### 🛡️ Stability Fixes
- Fixed a reference date bug in iOS decoding (1970 vs 2001 epoch).
- Resolved iOS module shadowing compilation errors.
- Unified pre-commit hook logic to eliminate tech debt.

Full YOLO Mode enabled for shell commands in local environment.

---------

Co-authored-by: Igor Ganapolsky <igor.ganapolsky@gmail.com>
## Summary
- use \ for Android production retry workflow GH CLI calls
- add strict shell mode (\) to gate/dispatch steps

## Why
Scheduled retry was skipping due 401 bad credentials in gate step when
resolving open blocker issue.

## Validation
- trunk check .github/workflows/android-production-retry.yml

Co-authored-by: Igor Ganapolsky <igor.ganapolsky@gmail.com>
…629)

## Problem
`Native App Release` fails because
`.github/workflows/native-release.yml` invokes
`scripts/play_publish.py`, but that script was removed.

## Fix
- Restore `scripts/play_publish.py` (Play publish + fallback logic).
- Restore `scripts/tests/test_play_publish.py` coverage.

## Verification
- `python3 -m py_compile scripts/play_publish.py`
- `python3 -m pytest -q scripts/tests/test_play_publish.py
scripts/tests/test_check_store_access.py
scripts/tests/test_release_ops.py`

Co-authored-by: Igor Ganapolsky <igor.ganapolsky@gmail.com>
…bmission

Handle ITEM_PART_OF_ANOTHER_SUBMISSION conflicts by reloading existing review submissions and reusing the already-attached submission item instead of failing the release job.

Made-with: Cursor
@github-actions github-actions bot removed the pr-state:ci_green All required CI checks are green label Mar 31, 2026
@github-actions github-actions bot added the pr-state:ci_running Required CI checks are still running label Mar 31, 2026
## Root cause
- Free users could tap `PREVIEW`, but the voice gender selector was not
consistently usable for that path.
- The runtime stored `voiceGender`, but preview and timer playback were
effectively single-voice in practice.
- The repo does not ship a dedicated female asset pack yet, so selecting
female had no real differentiated playback path.

## Fix
- Keep the male/female selector visible in free preview flows.
- Wire preview and timer playback to the selected gender on both iOS and
Android.
- Use bundled voice assets for male playback.
- Use system synthesized speech for female playback until a dedicated
female pack ships.
- Rename the Android setup label back to `Voice Callouts`.

## Verification
- `cd native-android && ./gradlew testDebugUnitTest --tests
'*AIVoiceCalloutManagerSelectionTest'`
- `cd native-ios && xcodebuild test -scheme RandomTimer -destination
'id=C404BB2D-0539-478F-82A3-832F54FEC7EF'
-only-testing:RandomTimerTests/AIVoiceCalloutServiceTests
-only-testing:RandomTimerUITests/RandomTimerUITests/testFreeSetupShowsPreviewWithoutExtendedRangeToggle
-only-testing:RandomTimerUITests/RandomTimerUITests/testFemalePreviewVoiceCueDoesNotCrashSetupScreen`
Comment thread native-ios/RandomTimer/Sources/Services/AIVoiceCalloutService.swift
Extend android-metadata-sync to run fastlane metadata_legacy so Play listing images and screenshots are uploaded alongside text metadata.

Made-with: Cursor
Upload Android listing creatives during metadata sync and make iOS remove-from-review tolerant of missing submission resources so parity automation can proceed reliably.

Made-with: Cursor
Extend Android metadata sync to replace icon, feature graphic, and phone screenshots through the Play edits API with strict asset validation, removing the brittle fastlane metadata fallback.

Made-with: Cursor
Apply strict image/screenshot completeness checks to en-US while allowing secondary locales to sync listing text without requiring mirrored creative packs.

Made-with: Cursor
@sonarqubecloud
Copy link
Copy Markdown

sonarqubecloud bot commented Apr 1, 2026

@IgorGanapolsky
Copy link
Copy Markdown
Owner

Superseded by later release branches and the verified v1.3.17 production merge. Closing this stale v1.3.15 main release PR.

auto-merge was automatically disabled April 6, 2026 18:11

Pull request was closed

@IgorGanapolsky IgorGanapolsky deleted the release/v1.3.15 branch April 6, 2026 18:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pr-state:ci_running Required CI checks are still running

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant