Visitar URL original
CI: дії GitHub на Node 24 by yozh150991 · Pull Request #18 · yozh150991/To-do-app · GitHub
Skip to content

CI: дії GitHub на Node 24 - #18

Merged
yozh150991 merged 3 commits into
mainfrom
ci/actions-node24
Nov 3, 2026
Merged

yozh150991 merged 3 commits into
mainfrom
ci/actions-node24

Conversation

@yozh150991

@yozh150991 yozh150991 commented Nov 3, 2026 •

Copy link
Copy Markdown
Owner

Що змінилось

GitHub попереджав у кожному запуску: actions/setup-node@v4, actions/upload-artifact@v4 і gradle/actions/setup-gradle@v4 працюють на застарілому Node 20. Оновив дії до версій на Node 24, вибір — за фактами з probe (останній реліз, його runtime і release notes кожної нової мажорної версії; новий tools/deps/probe-actions.sh пише це в коментар dependency probe).

Дія Було Стало Що в release notes важливе для нас
actions/checkout v4, v5 v7 Node 24, ESM; облікові дані зберігаються в окремому файлі (наш git fetch у job оновлення це перевіряє)
actions/setup-java v5 v6 ESM, не ламає виклики
actions/setup-node v4 v7 v6 вмикає автокеш лише для npm — ми кеш не задаємо
actions/upload-artifact v4 v7 Node 24, ESM; нове archive: false нам не потрібне
actions/download-artifact v4 v8 невідповідність хешу тепер помилка — безпечніше
gradle/actions/setup-gradle v4 v5 Node 24, MIT

Рішення для вас

gradle/actions/setup-gradle@v6 винесла кешування в пропрієтарний компонент з окремими умовами використання (blog.gradle.org); оновлення до v6 означає прийняти ці умови. Я лишив v5 (Node 24, MIT). Якщо захочете v6 — це одна заміна в workflows.

release.yml теж оновлено; він запускається лише на тегах, тож перевірку пройде на наступному релізі (v0.0.2).

https://claude.ai/code/session_01U8rzfoDDB5JTErVpfCynTS


Generated by Claude Code

Runners warn that actions/setup-node@v4, actions/upload-artifact@v4 and
gradle/actions/setup-gradle@v4 target the deprecated Node 20. The dependency
probe now lists every action used in the workflows with the latest release
and the runtime of that release, so the majors can be bumped from facts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U8rzfoDDB5JTErVpfCynTS
@github-actions

github-actions Bot commented Nov 3, 2026 •

Copy link
Copy Markdown

Commit: 20abcb0c9df1cd9f7039609735242797b4060505

Dependency version probe

Generated: 2026-11-03T01:13Z

Component Coordinates Latest stable Latest any Status
Kotlin Gradle plugin org.jetbrains.kotlin:kotlin-gradle-plugin 2.4.21 2.5.0-Beta2 ok
KSP com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin 2.3.13 2.3.13 ok
AGP com.android.tools.build:gradle 9.5.0 9.6.0-alpha02 ok
Compose MP plugin org.jetbrains.compose:compose-gradle-plugin 1.12.2 1.13.0-beta01 ok
Compose MP runtime org.jetbrains.compose.runtime:runtime 1.12.2 1.13.0-beta01 ok
Compose MP material3 org.jetbrains.compose.material3:material3 1.9.0 1.13.0-beta01 ok
Compose MP lifecycle VM org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-compose 2.11.0 2.11.0-rc01 ok
Compose MP navigation org.jetbrains.androidx.navigation:navigation-compose 2.10.0 2.10.0-rc01 ok
Room 3 runtime androidx.room3:room3-runtime 3.0.3 3.1.0-alpha03 ok
Room 3 compiler androidx.room3:room3-compiler 3.0.3 3.1.0-alpha03 ok
Room 3 Gradle plugin androidx.room3:room3-gradle-plugin 3.0.3 3.1.0-alpha03 ok
SQLite bundled androidx.sqlite:sqlite-bundled 2.7.1 2.8.0-alpha03 ok
SQLite web androidx.sqlite:sqlite-web 2.7.1 2.8.0-alpha03 ok
Activity Compose androidx.activity:activity-compose 1.13.0 1.14.0-alpha03 ok
AndroidX test runner androidx.test:runner 1.7.0 1.8.0-alpha03 ok
AndroidX test ext junit androidx.test.ext:junit 1.3.0 1.4.0-alpha03 ok
Koin core io.insert-koin:koin-core 4.2.2 4.2.2 ok
Koin compose VM io.insert-koin:koin-compose-viewmodel 4.2.2 4.2.2 ok
Koin Android io.insert-koin:koin-android 4.2.2 4.2.2 ok
Coroutines org.jetbrains.kotlinx:kotlinx-coroutines-core 1.11.0 1.11.0-rc02 ok
Datetime org.jetbrains.kotlinx:kotlinx-datetime 0.8.0-0.6.x-compat 0.8.0-rc02-0.6.x-compat ok
Serialization JSON org.jetbrains.kotlinx:kotlinx-serialization-json 1.12.0 1.12.0-RC ok
supabase-kt BOM io.github.jan-tennert.supabase:bom 3.8.0 3.9.0-beta-1 ok
Ktor client core io.ktor:ktor-client-core 3.6.1 3.6.1 ok
Turbine app.cash.turbine:turbine 1.2.1 1.2.1 ok
Kotest property io.kotest:kotest-property 6.2.6 6.2.6 ok
JUnit 4 junit:junit 4.13.2 4.13.2 ok

Gradle current: 9.8.2
gradle-9.8.2-bin.zip sha256: 21bd5da2de49b642904077f38c0efdc7778e92b3ed0889392dca61b97e389607
gradle-9.6.0-bin.zip sha256: bbaeb2fef8710818cf0e261201dab964c572f92b942812df0c3620d62a529a01
gradle-9.7.0-bin.zip sha256: 84fbba45c7f4c64abc77460e1c00f541e9f960e3c7ed2538f1ede19eacd873ae

Dependencies of androidx.room3:room3-runtime:3.0.3
androidx.annotation:annotation:1.9.1
androidx.collection:collection:1.5.0
androidx.room3:room3-common:3.0.3
androidx.sqlite:sqlite-async:2.7.1
androidx.sqlite:sqlite-framework:2.7.0
androidx.sqlite:sqlite:2.7.1
org.jetbrains.kotlin:kotlin-stdlib:2.1.20
org.jetbrains.kotlinx:atomicfu:0.28.0
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0

GitHub Actions

Action In use Latest release Runtime of latest
actions/checkout v7 v7.0.1 node24

|
| actions/download-artifact | v8 | v8.0.2 | node24 |
| actions/setup-java | v6 | v6.1.0 | node24 |
| actions/setup-node | v7 | v7.1.0 | node24 |
| actions/upload-artifact | v7 | v7.0.2 | node24 |
| gradle/actions/setup-gradle | v5 | v6.4.1 | node24 |

actions/checkout: majors after v7
actions/download-artifact: majors after v8
actions/setup-java: majors after v6
actions/setup-node: majors after v7
actions/upload-artifact: majors after v7
gradle/actions/setup-gradle: majors after v5

v6 — latest v6.4.1 (node24); first v6.0.0:

> [!IMPORTANT]
> The release of `gradle/actions@v6` contains important changes to the license terms. More details in [this blog post](https://blog.gradle.org/github-actions-for-gradle-v6).
> **TL;DR**: By upgrading to v6, you accept the [Terms of Use](https://gradle.com/legal/terms-of-use/) for the `gradle-actions-caching` component.
## Summary
- Caching functionality of 'gradle-actions' has been extracted into a separate `gradle-actions-caching` library, and is no longer open-source. See [this blog post](https://blog.gradle.org/github-actions-for-gradle-v6) for more context.
- Existing, rudimentary, configuration-cache support has been removed, pending a fully functional implementation in `gradle-actions-caching`.
- Dependencies updated to address security vulnerabilities
> [!IMPORTANT]
> #### Licensing notice
>
> The caching functionality in \`gradle-actions\` has been extracted into \`gradle-actions-caching\`, a proprietary commercial component that is not covered by the MIT License. 
> The bundled \`gradle-actions-caching\` component is licensed and governed by a separate license, available at https://gradle.com/legal/terms-of-use/.
>
> The \`gradle-actions-caching\` component is used only when caching is enabled and is not loaded or used when caching is disabled.
>
> Use of the \`gradle-actions-caching\` component is subject to a separate license, available at https://gradle.com/legal/terms-of-use/. 
> If you do not agree to these license terms, do not use the \`gradle-actions-caching\` component.
## What's Changed
* Bump the npm-dependencies group in /sources with 2 updates by @dependabot[bot] in https://github.com/gradle/actions/pull/866
* Update known wrapper checksums by @github-actions[bot] in https://github.com/gradle/actions/pull/868
* Dependency updates by @bigdaz in https://github.com/gradle/actions/pull/876
* Update known wrapper checksums by @github-actions[bot] in https://github.com/gradle/actions/pull/878
* Bump @types/node from 25.3.3 to 25.3.5 in /sources in the npm-dependencies group across 1 directory by @dependabot[bot] in https://github.com/gradle/actions/pull/877
* Bump the github-actions group across 3 directories with 3 updates by @dependabot[bot] in https://github.com/gradle/actions/pull/867
* Update known wrapper checksums by @github-actions[bot] in https://github.com/gradle/actions/pull/881

@github-actions

github-actions Bot commented Nov 3, 2026 •

Copy link
Copy Markdown

CI report — 20abcb0c9d

Job Result
Build and JVM tests ✅ success
Local release scripts on Windows ✅ success
Web in browsers ✅ success
Desktop window (Xvfb) ✅ success
Supabase modules (JVM, browsers) ✅ success
Supabase modules (Android API 37) ✅ success
Android emulator API 26 ✅ success
Android emulator API 37 ✅ success
Upgrade over previous version ✅ success
Test suite Total Failed Skipped Passed
androidApp (device: ci(AVD) - 17) 13 0 1 12
androidApp (device: ci(AVD) - 8.0.0) 13 0 1 12
core/database (jvmTest) 5 0 0 5
core/domain (jvmTest) 12 0 0 12
core/model (jvmTest) 15 0 0 15
core/sync (jvmTest) 1 0 0 1
core/testing (jvmTest) 12 0 0 12
ui (jvmTest) 3 0 0 3
webApp (e2e) 15 0 3 12

Runtime evidence

androidApp/build/reports/runtime-evidence/android-api26.txt

emulator: 8.0.0 / API 26 / x86_64
[Android API 26 x86_64] sqlite_version: 3.50.1
[Android API 26 x86_64] ENABLE_FTS5: true
[Android API 26 x86_64] VACUUM INTO: supported=true copyBytes=28672
[Android API 26 x86_64] fts5 uk exact 'молоко' -> 1
[Android API 26 x86_64] fts5 uk case-insensitive 'МОЛОКО' -> 1
[Android API 26 x86_64] fts5 uk prefix 'хлі*' -> 1
[Android API 26 x86_64] fts5 pl exact 'prąd' -> 1
[Android API 26 x86_64] fts5 pl without diacritics 'prad' -> 1
[Android API 26 x86_64] fts5 pl prefix 'rachun*' -> 1
[Android API 26 x86_64] fts5 en exact 'milk' -> 1
[Android API 26 x86_64] fts5 en prefix 'hom*' -> 1
[Android API 26 x86_64] entity+outbox rollback: ok
upgrade v1 -> v2: creating snapshot
[Android API 26 x86_64] disk full -> upgrade refused, v1 untouched
[Android API 26 x86_64] WAL bytes before upgrade: 28872
upgrade v1 -> v2: creating snapshot
upgrade v1 -> v2 verified; snapshot kept at /data/user/0/io.github.yozh150991.todo.debug/cache/db-tests/wal-53592579930/todo.db.pre-v1-to-v2.snapshot
[Android API 26 x86_64] WAL frames captured by VACUUM INTO snapshot: ok
[Android API 26 x86_64] persist+reopen: ok, outbox seq 1..5
[Android API 26 x86_64] newer schema on disk -> refused without changes
upgrade v1 -> v2: creating snapshot
upgrade v1 -> v2: creating snapshot
upgrade v1 -> v2 verified; snapshot kept at /data/user/0/io.github.yozh150991.todo.debug/cache/db-tests/crash-53826826940/crash-after_snapshot.db.pre-v1-to-v2.snapshot
[Android API 26 x86_64] crash AFTER_SNAPSHOT -> recovered=false, data intact
upgrade v1 -> v2: creating snapshot
found interrupted upgrade marker; restoring /data/user/0/io.github.yozh150991.todo.debug/cache/db-tests/crash-53826826940/crash-after_marker.db.pre-v1-to-v2.snapshot
upgrade v1 -> v2: creating snapshot
upgrade v1 -> v2 verified; snapshot kept at /data/user/0/io.github.yozh150991.todo.debug/cache/db-tests/crash-53826826940/crash-after_marker.db.pre-v1-to-v2.snapshot
[Android API 26 x86_64] crash AFTER_MARKER -> recovered=true, data intact
upgrade v1 -> v2: creating snapshot
found interrupted upgrade marker; restoring /data/user/0/io.github.yozh150991.todo.debug/cache/db-tests/crash-53826826940/crash-after_migration.db.pre-v1-to-v2.snapshot
upgrade v1 -> v2: creating snapshot
upgrade v1 -> v2 verified; snapshot kept at /data/user/0/io.github.yozh150991.todo.debug/cache/db-tests/crash-53826826940/crash-after_migration.db.pre-v1-to-v2.snapshot
[Android API 26 x86_64] crash AFTER_MIGRATION -> recovered=true, data intact
upgrade v1 -> v2: creating snapshot
upgrade v1 -> v2 verified; snapshot kept at /data/user/0/io.github.yozh150991.todo.debug/cache/db-tests/migration-54625280900/todo.db.pre-v1-to-v2.snapshot
[Android API 26 x86_64] v1->v2 migration: counts preserved {external_identity=1, local_workspace=1, outbox_operation=6, project=3, task=5, task_activity=2}, snapshot verified
upgrade v1 -> v2: creating snapshot
upgrade v1 -> v2 failed and was rolled back: semantic check rejected
upgrade v1 -> v2: creating snapshot
upgrade v1 -> v2 verified; snapshot kept at /data/user/0/io.github.yozh150991.todo.debug/cache/db-tests/restore-54880737710/todo.db.pre-v1-to-v2.snapshot
[Android API 26 x86_64] failed verification -> restored v1, retry ok
[Android API 26 x86_64] 50 concurrent writes: local_seq contiguous
[time, Android API 26, tzdb 2017b]
[time, Android API 26] TIME-01 pass: 2026-03-28T02:30 -> 2026-03-28T01:30:00Z; 2026-03-29T02:30 -> 2026-03-29T01:30:00Z (gap 1h, local 2026-03-29T03:30); 2026-03-30T02:30 -> 2026-03-30T00:30:00Z
[time, Android API 26] TIME-02 pass: 2026-10-25T02:30 -> 2026-10-25T00:30:00Z (later 2026-10-25T01:30:00Z)
[time, Android API 26] TIME-03 pass: in Warsaw 2026-11-02T08:00:00Z, after travel 2026-11-02T08:00:00Z, shown in New York as 2026-11-02T03:00
[time, Android API 26] TIME-04 pass: device in Warsaw 2026-11-02T08:00:00Z, device in New York 2026-11-02T14:00:00Z
[time, Android API 26] TIME-08 pass: 2026-03-29T02:30 nonexistent (gap 1h), choices [2026-03-29T03:00, 2026-03-29T03:30]
[time, Android API 26] ALL-DAY pass: resolution null

androidApp/build/reports/runtime-evidence/android-api37.txt

emulator: 17 / API 37 / x86_64
[Android API 37 x86_64] sqlite_version: 3.50.1
[Android API 37 x86_64] ENABLE_FTS5: true
[Android API 37 x86_64] VACUUM INTO: supported=true copyBytes=28672
[Android API 37 x86_64] fts5 uk exact 'молоко' -> 1
[Android API 37 x86_64] fts5 uk case-insensitive 'МОЛОКО' -> 1
[Android API 37 x86_64] fts5 uk prefix 'хлі*' -> 1
[Android API 37 x86_64] fts5 pl exact 'prąd' -> 1
[Android API 37 x86_64] fts5 pl without diacritics 'prad' -> 1
[Android API 37 x86_64] fts5 pl prefix 'rachun*' -> 1
[Android API 37 x86_64] fts5 en exact 'milk' -> 1
[Android API 37 x86_64] fts5 en prefix 'hom*' -> 1
[Android API 37 x86_64] entity+outbox rollback: ok
upgrade v1 -> v2: creating snapshot
[Android API 37 x86_64] disk full -> upgrade refused, v1 untouched
[Android API 37 x86_64] WAL bytes before upgrade: 28872
upgrade v1 -> v2: creating snapshot
upgrade v1 -> v2 verified; snapshot kept at /data/user/0/io.github.yozh150991.todo.debug/cache/db-tests/wal-43427548450/todo.db.pre-v1-to-v2.snapshot
[Android API 37 x86_64] WAL frames captured by VACUUM INTO snapshot: ok
[Android API 37 x86_64] persist+reopen: ok, outbox seq 1..5
[Android API 37 x86_64] newer schema on disk -> refused without changes
upgrade v1 -> v2: creating snapshot
upgrade v1 -> v2: creating snapshot
upgrade v1 -> v2 verified; snapshot kept at /data/user/0/io.github.yozh150991.todo.debug/cache/db-tests/crash-43621491447/crash-after_snapshot.db.pre-v1-to-v2.snapshot
[Android API 37 x86_64] crash AFTER_SNAPSHOT -> recovered=false, data intact
upgrade v1 -> v2: creating snapshot
found interrupted upgrade marker; restoring /data/user/0/io.github.yozh150991.todo.debug/cache/db-tests/crash-43621491447/crash-after_marker.db.pre-v1-to-v2.snapshot
upgrade v1 -> v2: creating snapshot
upgrade v1 -> v2 verified; snapshot kept at /data/user/0/io.github.yozh150991.todo.debug/cache/db-tests/crash-43621491447/crash-after_marker.db.pre-v1-to-v2.snapshot
[Android API 37 x86_64] crash AFTER_MARKER -> recovered=true, data intact
upgrade v1 -> v2: creating snapshot
found interrupted upgrade marker; restoring /data/user/0/io.github.yozh150991.todo.debug/cache/db-tests/crash-43621491447/crash-after_migration.db.pre-v1-to-v2.snapshot
upgrade v1 -> v2: creating snapshot
upgrade v1 -> v2 verified; snapshot kept at /data/user/0/io.github.yozh150991.todo.debug/cache/db-tests/crash-43621491447/crash-after_migration.db.pre-v1-to-v2.snapshot
[Android API 37 x86_64] crash AFTER_MIGRATION -> recovered=true, data intact
upgrade v1 -> v2: creating snapshot
upgrade v1 -> v2 verified; snapshot kept at /data/user/0/io.github.yozh150991.todo.debug/cache/db-tests/migration-44128767497/todo.db.pre-v1-to-v2.snapshot
[Android API 37 x86_64] v1->v2 migration: counts preserved {external_identity=1, local_workspace=1, outbox_operation=6, project=3, task=5, task_activity=2}, snapshot verified
upgrade v1 -> v2: creating snapshot
upgrade v1 -> v2 failed and was rolled back: semantic check rejected
upgrade v1 -> v2: creating snapshot
upgrade v1 -> v2 verified; snapshot kept at /data/user/0/io.github.yozh150991.todo.debug/cache/db-tests/restore-44339621431/todo.db.pre-v1-to-v2.snapshot
[Android API 37 x86_64] failed verification -> restored v1, retry ok
[Android API 37 x86_64] 50 concurrent writes: local_seq contiguous
[time, Android API 37, tzdb 2025c]
[time, Android API 37] TIME-01 pass: 2026-03-28T02:30 -> 2026-03-28T01:30:00Z; 2026-03-29T02:30 -> 2026-03-29T01:30:00Z (gap 1h, local 2026-03-29T03:30); 2026-03-30T02:30 -> 2026-03-30T00:30:00Z
[time, Android API 37] TIME-02 pass: 2026-10-25T02:30 -> 2026-10-25T00:30:00Z (later 2026-10-25T01:30:00Z)
[time, Android API 37] TIME-03 pass: in Warsaw 2026-11-02T08:00:00Z, after travel 2026-11-02T08:00:00Z, shown in New York as 2026-11-02T03:00
[time, Android API 37] TIME-04 pass: device in Warsaw 2026-11-02T08:00:00Z, device in New York 2026-11-02T14:00:00Z
[time, Android API 37] TIME-08 pass: 2026-03-29T02:30 nonexistent (gap 1h), choices [2026-03-29T03:00, 2026-03-29T03:30]
[time, Android API 37] ALL-DAY pass: resolution null

androidApp/build/reports/runtime-evidence/release-apk-linux.txt

local release script: Linux / Java 21
release APK: 11021 KiB, versionName=0.0.1 versionCode=1, ABIs: arm64-v8a
signer certificate matches the expected key: yes

androidApp/build/reports/runtime-evidence/release-apk-windows.txt

local release script: MINGW64_NT-10.0-26100 / Java 21
release APK: 11021 KiB, versionName=0.0.1 versionCode=1, ABIs: arm64-v8a
signer certificate matches the expected key: yes

androidApp/build/reports/runtime-evidence/supabase-android.txt

emulator: 17 / API 37
[supabase, Android API 37] http://127.0.0.1:54321
[supabase, Android API 37] Auth / sign up with email and password (auto-confirmed locally): pass — user 49766c25-3ec2-417b-b76f-da4d8f6b12a4
[supabase, Android API 37] Auth / sign out and sign in again: pass — signed out: true, signed in as 49766c25-3ec2-417b-b76f-da4d8f6b12a4
[supabase, Android API 37] PostgREST / insert returns the row with owner = auth.uid(): pass — row 95ef3089-0068-4e83-9a60-f293e713a709 owner 49766c25-3ec2-417b-b76f-da4d8f6b12a4
[supabase, Android API 37] PostgREST / select with a filter: pass — 1 row(s)
[supabase, Android API 37] PostgREST / RLS shows only own rows: pass — 1 visible, 0 of other users
[supabase, Android API 37] PostgREST / RPC f0_echo: pass — message 'Привіт, świat', uid 49766c25-3ec2-417b-b76f-da4d8f6b12a4
[supabase, Android API 37] Realtime / postgres_changes INSERT delivered over WebSocket: pass — event received after 2 insert(s)
[supabase, Android API 37] PostgREST / anonymous user cannot read rows (RLS + grants): pass — refused: PostgrestRestException
== app and test runner errors (logcat E, last 60 lines)
E/WifiHealthMonitor(  621): 	at com.android.server.wifi.WifiHealthMonitor$2.onAlarm(WifiHealthMonitor.java:192)
E/WifiHealthMonitor(  621): 	at android.app.AlarmManager$ListenerWrapper.run(AlarmManager.java:378)
E/WifiHealthMonitor(  621): 	at android.os.Handler.handleCallback(Handler.java:1095)
E/WifiHealthMonitor(  621): 	at android.os.Handler.dispatchMessageImpl(Handler.java:135)
E/WifiHealthMonitor(  621): 	at android.os.Handler.dispatchMessage(Handler.java:125)
E/WifiHealthMonitor(  621): 	at com.android.server.wifi.RunnerHandler.dispatchMessage(RunnerHandler.java:130)
E/WifiHealthMonitor(  621): 	at android.os.Looper.loopOnce(Looper.java:296)
E/WifiHealthMonitor(  621): 	at android.os.Looper.loop(Looper.java:397)
E/WifiHealthMonitor(  621): 	at android.os.HandlerThread.run(HandlerThread.java:139)
E/ActivityThread( 1486): Failed to find provider info for media_legacy
E/ActivityManager(  621): Unable to freeze binder for 2732: -11
E/TaskPersister(  621): File error accessing recents directory (directory doesn't exist?).
E/TaskPersister(  621): File error accessing recents directory (directory doesn't exist?).
E/AppOps  (  621): attributionTag VCN not declared in manifest of android
E/SmsApplication( 1114): com.android.fakesystemapp lost android:receive_wap_push:  (fixing)
E/SmsApplication( 1114): com.android.fakesystemapp lost android:read_cell_broadcasts:  (fixing)
E/TaskPersister(  621): File error accessing recents directory (directory doesn't exist?).
E/TaskPersister(  621): File error accessing recents directory (directory doesn't exist?).
E/HCPackageInfoUtils(  621): NameNotFoundException for io.github.yozh150991.todo.debug
E/HCPackageInfoUtils(  621): NameNotFoundException for io.github.yozh150991.todo.debug
E/HCPackageInfoUtils(  621): NameNotFoundException for io.github.yozh150991.todo.debug
E/HCPackageInfoUtils(  621): NameNotFoundException for io.github.yozh150991.todo.debug
E/HCPackageInfoUtils(  621): NameNotFoundException for io.github.yozh150991.todo.debug
E/HCPackageInfoUtils(  621): NameNotFoundException for io.github.yozh150991.todo.debug
E/HCPackageInfoUtils(  621): NameNotFoundException for io.github.yozh150991.todo.debug
E/HCPackageInfoUtils(  621): NameNotFoundException for io.github.yozh150991.todo.debug
E/SmsApplication( 1114): com.android.fakesystemapp lost android:receive_wap_push:  (fixing)
E/SmsApplication( 1114): com.android.fakesystemapp lost android:read_cell_broadcasts:  (fixing)
E/RoleControllerServiceImpl(  621): Default/fallback role holder package doesn't qualify for the role, package: com.google.android.gms, role: android.app.role.SYSTEM_DEPENDENCY_INSTALLER, user: 0
E/HCPackageInfoUtils(  621): NameNotFoundException for io.github.yozh150991.todo.debug.test
E/HCPackageInfoUtils(  621): NameNotFoundException for io.github.yozh150991.todo.debug.test
E/HCPackageInfoUtils(  621): NameNotFoundException for io.github.yozh150991.todo.debug.test
E/HCPackageInfoUtils(  621): NameNotFoundException for io.github.yozh150991.todo.debug.test
E/HCPackageInfoUtils(  621): NameNotFoundException for io.github.yozh150991.todo.debug.test
E/HCPackageInfoUtils(  621): NameNotFoundException for io.github.yozh150991.todo.debug.test
E/HCPackageInfoUtils(  621): NameNotFoundException for io.github.yozh150991.todo.debug.test
E/HCPackageInfoUtils(  621): NameNotFoundException for io.github.yozh150991.todo.debug.test
E/RoleControllerServiceImpl(  621): Default/fallback role holder package doesn't qualify for the role, package: com.google.android.gms, role: android.app.role.WALLET, user: 0
E/Binder  (  621): Outgoing transactions from this process must be FLAG_ONEWAY
E/Binder  (  621): java.lang.Throwable
E/Binder  (  621): 	at android.os.BinderProxy.transact(BinderProxy.java:583)
E/Binder  (  621): 	at android.content.ContentProviderProxy.openTypedAssetFile(ContentProviderNative.java:814)
E/Binder  (  621): 	at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:2114)
E/Binder  (  621): 	at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1912)
E/Binder  (  621): 	at android.content.ContentResolver.openInputStream(ContentResolver.java:1574)
E/Binder  (  621): 	at com.android.providers.settings.SettingsProvider.openRingtone(SettingsProvider.java:939)
E/Binder  (  621): 	at com.android.providers.settings.SettingsProvider.lambda$mutateSystemSetting$1(SettingsProvider.java:2221)
E/Binder  (  621): 	at com.android.providers.settings.SettingsProvider.$r8$lambda$GoSUyNcBSpTkjjY_Ryr8POnmkTA(SettingsProvider.java:0)
E/Binder  (  621): 	at com.android.providers.settings.SettingsProvider$$ExternalSyntheticLambda1.runOrThrow(R8$$SyntheticClass:0)
E/Binder  (  621): 	at android.os.Binder.withCleanCallingIdentity(Binder.java:468)
E/Binder  (  621): 	at com.android.providers.settings.SettingsProvider.mutateSystemSett
…(truncated; full file in the workflow artifacts)

androidApp/build/reports/runtime-evidence/upgrade.txt

before: schema v2, rows {'external_identity': 0, 'label': 0, 'local_workspace': 1, 'outbox_operation': 1, 'project': 1, 'section': 0, 'task': 0, 'task_activity': 0, 'task_label': 0}
after:  schema v2, rows {'external_identity': 0, 'label': 0, 'local_workspace': 1, 'outbox_operation': 1, 'project': 1, 'section': 0, 'task': 0, 'task_activity': 0, 'task_label': 0}
same schema version v2: no migration needed, data preserved
UPGRADE CHECK PASSED: install -r kept workspace, Inbox and all rows

desktopApp/build/reports/runtime-evidence/desktop-ui.txt

launcher: desktopApp/build/compose/binaries/main/app/desktopApp/bin/desktopApp (app image 149M, bundled runtime)
display: :99, dimensions: 1280x800 pixels (325x203 millimeters)
window manager: openbox
data dir: /tmp/tmp.itjKcmgYGd
first-start: window 4194311 at 50,88 size 790x570
  total 344
  drwx------  2 runner runner   4096 Nov  3 01:16 .
  drwxrwxrwt 16 root   root     4096 Nov  3 01:16 ..
  -rw-r--r--  1 runner runner   4096 Nov  3 01:16 todo.db
  -rw-r--r--  1 runner runner  32768 Nov  3 01:16 todo.db-shm
  -rw-r--r--  1 runner runner 304912 Nov  3 01:16 todo.db-wal
  -rw-r--r--  1 runner runner      0 Nov  3 01:16 todo.db.lck
sqlite3 CLI: 3.45.1
integrity_check: ok
user_version: 2
journal_mode: wal
workspaces: 1
open tasks: Typed in the desktop UI
outbox: 1:project.create, 2:task.create
restart: window 4194311 at 50,88 size 790x570
restart: same workspace, the task and one Inbox are still there
app output (first-start):
  Picked up JAVA_TOOL_OPTIONS: -Dtodo.dataDir=/tmp/tmp.itjKcmgYGd -Dskiko.renderApi=SOFTWARE
app output (restart):
  Picked up JAVA_TOOL_OPTIONS: -Dtodo.dataDir=/tmp/tmp.itjKcmgYGd -Dskiko.renderApi=SOFTWARE
PASS

webApp/build/reports/runtime-evidence/restart-chromium.txt

browser: chromium
profile: /tmp/todo-profile-chromium-tMh0Lm
write: pass {"phase":"write","workspace":"6753c1ec-7664-4de4-a8ff-624c8964c9ea","sqlite":"3.54.1","journal_mode":"truncate","outbox_seq":"1,2,3,4,5","tasks":3,"fts5":{"молоко":1,"МОЛОКО":1,"хлі*":1,"prąd":1,"prad":1,"hom*":1},"vacuum_into":{"integrity_check":"ok","tasks":3},"passed":["journal_mode is a rollback journal","fresh database","complete","complete is idempotent","duplicate operation id fails","task rolled back","activity rolled back","outbox seq 1..5","fts5 'молоко'","fts5 'МОЛОКО'","fts5 'хлі*'","fts5 'prąd'","fts5 'prad'","fts5 'hom*'","VACUUM INTO snapshot passes integrity_check","snapshot has every task"],"failed":[],"status":"pass"}
verify after restart: pass {"phase":"verify","workspace":"6753c1ec-7664-4de4-a8ff-624c8964c9ea","sqlite":"3.54.1","journal_mode":"truncate","outbox_seq":"1,2,3,4,5,6","tasks":4,"fts5":{"молоко":1,"МОЛОКО":1,"хлі*":1,"prąd":1,"prad":1,"hom*":1},"passed":["journal_mode is a rollback journal","same workspace after reload","one Inbox","open tasks persisted","completed task persisted","outbox seq contiguous and persisted","local_seq continues","fts5 'молоко'","fts5 'МОЛОКО'","fts5 'хлі*'","fts5 'prąd'","fts5 'prad'","fts5 'hom*'"],"failed":[],"status":"pass"}
page errors:
page log:
  [info] [todo-sqlite-worker] ready: SQLite 3.54.1 VFS todo-sahpool files 0/10
  [warning] sqlite3_step() rc= 1555 SQLITE_CONSTRAINT_PRIMARYKEY SQL = INSERT OR ABORT INTO `outbox_operation` (`operation_id`,`local_seq`,`workspace_id`,`entity`,`entity_id`,`op_type`,`field_patch`,`base_revision`,`device_id`,`created_at`,`status`,`attempts`,`last_error`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)
  [info] [todo-sqlite-worker] ready: SQLite 3.54.1 VFS todo-sahpool files 3/10

webApp/build/reports/runtime-evidence/restart-firefox.txt

browser: firefox
profile: /tmp/todo-profile-firefox-JXxO5S
write: pass {"phase":"write","workspace":"c53cc944-7fb6-4854-a190-2a5305722670","sqlite":"3.54.1","journal_mode":"truncate","outbox_seq":"1,2,3,4,5","tasks":3,"fts5":{"молоко":1,"МОЛОКО":1,"хлі*":1,"prąd":1,"prad":1,"hom*":1},"vacuum_into":{"integrity_check":"ok","tasks":3},"passed":["journal_mode is a rollback journal","fresh database","complete","complete is idempotent","duplicate operation id fails","task rolled back","activity rolled back","outbox seq 1..5","fts5 'молоко'","fts5 'МОЛОКО'","fts5 'хлі*'","fts5 'prąd'","fts5 'prad'","fts5 'hom*'","VACUUM INTO snapshot passes integrity_check","snapshot has every task"],"failed":[],"status":"pass"}
verify after restart: pass {"phase":"verify","workspace":"c53cc944-7fb6-4854-a190-2a5305722670","sqlite":"3.54.1","journal_mode":"truncate","outbox_seq":"1,2,3,4,5,6","tasks":4,"fts5":{"молоко":1,"МОЛОКО":1,"хлі*":1,"prąd":1,"prad":1,"hom*":1},"passed":["journal_mode is a rollback journal","same workspace after reload","one Inbox","open tasks persisted","completed task persisted","outbox seq contiguous and persisted","local_seq continues","fts5 'молоко'","fts5 'МОЛОКО'","fts5 'хлі*'","fts5 'prąd'","fts5 'prad'","fts5 'hom*'"],"failed":[],"status":"pass"}
page errors:
page log:
  [warning] [JavaScript Warning: "The WebAssembly exception handling 'try' instruction is deprecated and should no longer be used. Please recompile to use the 'try_table' instruction instead."]
  [warning] [JavaScript Warning: "The WebAssembly exception handling 'try' instruction is deprecated and should no longer be used. Please recompile to use the 'try_table' instruction instead."]
  [info] [todo-sqlite-worker] ready: SQLite 3.54.1 VFS todo-sahpool files 0/10
  [warning] sqlite3_step() rc= 1555 SQLITE_CONSTRAINT_PRIMARYKEY SQL = INSERT OR ABORT INTO `outbox_operation` (`operation_id`,`local_seq`,`workspace_id`,`entity`,`entity_id`,`op_type`,`field_patch`,`base_revision`,`device_id`,`created_at`,`status`,`attempts`,`last_error`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)
  [warning] [JavaScript Warning: "The WebAssembly exception handling 'try' instruction is deprecated and should no longer be used. Please recompile to use the 'try_table' instruction instead."]
  [warning] [JavaScript Warning: "The WebAssembly exception handling 'try' instruction is deprecated and should no longer be used. Please recompile to use the 'try_table' instruction instead."]
  [info] [todo-sqlite-worker] ready: SQLite 3.54.1 VFS todo-sahpool files 3/10

webApp/build/reports/runtime-evidence/restart-webkit.txt

browser: webkit
profile: /tmp/todo-profile-webkit-hMFvRb
write: pass {"phase":"write","workspace":"93303621-d5d7-448c-a36f-96e22d803ea8","sqlite":"3.54.1","journal_mode":"truncate","outbox_seq":"1,2,3,4,5","tasks":3,"fts5":{"молоко":1,"МОЛОКО":1,"хлі*":1,"prąd":1,"prad":1,"hom*":1},"vacuum_into":{"integrity_check":"ok","tasks":3},"passed":["journal_mode is a rollback journal","fresh database","complete","complete is idempotent","duplicate operation id fails","task rolled back","activity rolled back","outbox seq 1..5","fts5 'молоко'","fts5 'МОЛОКО'","fts5 'хлі*'","fts5 'prąd'","fts5 'prad'","fts5 'hom*'","VACUUM INTO snapshot passes integrity_check","snapshot has every task"],"failed":[],"status":"pass"}
verify after restart: pass {"phase":"verify","workspace":"93303621-d5d7-448c-a36f-96e22d803ea8","sqlite":"3.54.1","journal_mode":"truncate","outbox_seq":"1,2,3,4,5,6","tasks":4,"fts5":{"молоко":1,"МОЛОКО":1,"хлі*":1,"prąd":1,"prad":1,"hom*":1},"passed":["journal_mode is a rollback journal","same workspace after reload","one Inbox","open tasks persisted","completed task persisted","outbox seq contiguous and persisted","local_seq continues","fts5 'молоко'","fts5 'МОЛОКО'","fts5 'хлі*'","fts5 'prąd'","fts5 'prad'","fts5 'hom*'"],"failed":[],"status":"pass"}
page errors:
page log:
  [info] [todo-sqlite-worker] ready: SQLite 3.54.1 VFS todo-sahpool files 0/10
  [warning] sqlite3_step() rc= 1555 SQLITE_CONSTRAINT_PRIMARYKEY SQL = INSERT OR ABORT INTO `outbox_operation` (`operation_id`,`local_seq`,`workspace_id`,`entity`,`entity_id`,`op_type`,`field_patch`,`base_revision`,`device_id`,`created_at`,`status`,`attempts`,`last_error`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)
  [info] [todo-sqlite-worker] ready: SQLite 3.54.1 VFS todo-sahpool files 3/10

webApp/build/reports/runtime-evidence/supabase-chromium.txt

browser: chromium
stack: http://127.0.0.1:54321
status: pass
Auth / sign up with email and password (auto-confirmed locally): pass — user f1d82a49-8042-4582-8569-acb98bd4e073
Auth / sign out and sign in again: pass — signed out: true, signed in as f1d82a49-8042-4582-8569-acb98bd4e073
PostgREST / insert returns the row with owner = auth.uid(): pass — row 01211088-29a8-4e3b-8200-2ce5f5ef7352 owner f1d82a49-8042-4582-8569-acb98bd4e073
PostgREST / select with a filter: pass — 1 row(s)
PostgREST / RLS shows only own rows: pass — 1 visible, 0 of other users
PostgREST / RPC f0_echo: pass — message 'Привіт, świat', uid f1d82a49-8042-4582-8569-acb98bd4e073
Realtime / postgres_changes INSERT delivered over WebSocket: pass — event received after 2 insert(s)
PostgREST / anonymous user cannot read rows (RLS + grants): pass — refused: PostgrestRestException
page errors:
  [error] Failed to load resource: the server responded with a status of 401 (Unauthorized)
page log:
  [info] (Supabase-Core) SupabaseClient created! Please report any bugs you find.
  [info] (Supabase-Realtime) Connected to realtime websocket!
  [warning] (Supabase-Realtime) No auth session found, disconnecting from realtime websocket
  [info] (Supabase-Core) Closing SupabaseClient

webApp/build/reports/runtime-evidence/supabase-firefox.txt

browser: firefox
stack: http://127.0.0.1:54321
status: pass
Auth / sign up with email and password (auto-confirmed locally): pass — user d9e95ec1-c94f-4d99-90a9-588adb3ac514
Auth / sign out and sign in again: pass — signed out: true, signed in as d9e95ec1-c94f-4d99-90a9-588adb3ac514
PostgREST / insert returns the row with owner = auth.uid(): pass — row 88c1014e-0994-4ebf-bb69-02730861cf2c owner d9e95ec1-c94f-4d99-90a9-588adb3ac514
PostgREST / select with a filter: pass — 1 row(s)
PostgREST / RLS shows only own rows: pass — 1 visible, 0 of other users
PostgREST / RPC f0_echo: pass — message 'Привіт, świat', uid d9e95ec1-c94f-4d99-90a9-588adb3ac514
Realtime / postgres_changes INSERT delivered over WebSocket: pass — event received after 1 insert(s)
PostgREST / anonymous user cannot read rows (RLS + grants): pass — refused: PostgrestRestException
page errors:
page log:
  [warning] [JavaScript Warning: "The WebAssembly exception handling 'try' instruction is deprecated and should no longer be used. Please recompile to use the 'try_table' instruction instead."]
  [info] (Supabase-Core) SupabaseClient created! Please report any bugs you find.
  [warning] [JavaScript Warning: "The WebAssembly exception handling 'try' instruction is deprecated and should no longer be used. Please recompile to use the 'try_table' instruction instead."]
  [info] (Supabase-Realtime) Connected to realtime websocket!
  [warning] (Supabase-Realtime) No auth session found, disconnecting from realtime websocket
  [info] (Supabase-Core) Closing SupabaseClient

webApp/build/reports/runtime-evidence/supabase-webkit.txt

browser: webkit
stack: http://127.0.0.1:54321
status: pass
Auth / sign up with email and password (auto-confirmed locally): pass — user b5c83705-ed68-4b8a-bcfa-d450a2828472
Auth / sign out and sign in again: pass — signed out: true, signed in as b5c83705-ed68-4b8a-bcfa-d450a2828472
PostgREST / insert returns the row with owner = auth.uid(): pass — row efd825ca-b635-40a5-bb0f-6d1605be0b6c owner b5c83705-ed68-4b8a-bcfa-d450a2828472
PostgREST / select with a filter: pass — 1 row(s)
PostgREST / RLS shows only own rows: pass — 1 visible, 0 of other users
PostgREST / RPC f0_echo: pass — message 'Привіт, świat', uid b5c83705-ed68-4b8a-bcfa-d450a2828472
Realtime / postgres_changes INSERT delivered over WebSocket: pass — event received after 1 insert(s)
PostgREST / anonymous user cannot read rows (RLS + grants): pass — refused: PostgrestRestException
page errors:
  [error] Failed to load resource: the server responded with a status of 401 (Unauthorized)
page log:
  [info] (Supabase-Core) SupabaseClient created! Please report any bugs you find.
  [info] (Supabase-Realtime) Connected to realtime websocket!
  [warning] (Supabase-Realtime) No auth session found, disconnecting from realtime websocket
  [info] (Supabase-Core) Closing SupabaseClient

webApp/build/reports/runtime-evidence/time-chromium.txt

browser: chromium
browser zone: UTC
status: pass
TIME-01 pass: 2026-03-28T02:30 -> 2026-03-28T01:30:00Z; 2026-03-29T02:30 -> 2026-03-29T01:30:00Z (gap 1h, local 2026-03-29T03:30); 2026-03-30T02:30 -> 2026-03-30T00:30:00Z
TIME-02 pass: 2026-10-25T02:30 -> 2026-10-25T00:30:00Z (later 2026-10-25T01:30:00Z)
TIME-03 pass: in Warsaw 2026-11-02T08:00:00Z, after travel 2026-11-02T08:00:00Z, shown in New York as 2026-11-02T03:00
TIME-04 pass: device in Warsaw 2026-11-02T08:00:00Z, device in New York 2026-11-02T14:00:00Z
TIME-08 pass: 2026-03-29T02:30 nonexistent (gap 1h), choices [2026-03-29T03:00, 2026-03-29T03:30]
ALL-DAY pass: resolution null
page errors:
page log:

webApp/build/reports/runtime-evidence/time-firefox.txt

browser: firefox
browser zone: UTC
status: pass
TIME-01 pass: 2026-03-28T02:30 -> 2026-03-28T01:30:00Z; 2026-03-29T02:30 -> 2026-03-29T01:30:00Z (gap 1h, local 2026-03-29T03:30); 2026-03-30T02:30 -> 2026-03-30T00:30:00Z
TIME-02 pass: 2026-10-25T02:30 -> 2026-10-25T00:30:00Z (later 2026-10-25T01:30:00Z)
TIME-03 pass: in Warsaw 2026-11-02T08:00:00Z, after travel 2026-11-02T08:00:00Z, shown in New York as 2026-11-02T03:00
TIME-04 pass: device in Warsaw 2026-11-02T08:00:00Z, device in New York 2026-11-02T14:00:00Z
TIME-08 pass: 2026-03-29T02:30 nonexistent (gap 1h), choices [2026-03-29T03:00, 2026-03-29T03:30]
ALL-DAY pass: resolution null
page errors:
page log:
  [warning] [JavaScript Warning: "The WebAssembly exception handling 'try' instruction is deprecated and should no longer be used. Please recompile to use the 'try_table' instruction instead."]
  [warning] [JavaScript Warning: "The WebAssembly exception handling 'try' instruction is deprecated and should no longer be used. Please recompile to use the 'try_table' instruction instead."]

webApp/build/reports/runtime-evidence/time-webkit.txt

browser: webkit
browser zone: UTC
status: pass
TIME-01 pass: 2026-03-28T02:30 -> 2026-03-28T01:30:00Z; 2026-03-29T02:30 -> 2026-03-29T01:30:00Z (gap 1h, local 2026-03-29T03:30); 2026-03-30T02:30 -> 2026-03-30T00:30:00Z
TIME-02 pass: 2026-10-25T02:30 -> 2026-10-25T00:30:00Z (later 2026-10-25T01:30:00Z)
TIME-03 pass: in Warsaw 2026-11-02T08:00:00Z, after travel 2026-11-02T08:00:00Z, shown in New York as 2026-11-02T03:00
TIME-04 pass: device in Warsaw 2026-11-02T08:00:00Z, device in New York 2026-11-02T14:00:00Z
TIME-08 pass: 2026-03-29T02:30 nonexistent (gap 1h), choices [2026-03-29T03:00, 2026-03-29T03:30]
ALL-DAY pass: resolution null
page errors:
page log:

webApp/build/reports/runtime-evidence/ui-chromium.txt

browser: chromium
webgl2: WebGL 2.0 (OpenGL ES 3.0 Chromium); WebKit WebGL
errors after start: []
compose resources:
  200 /composeResources/io.github.yozh150991.todo.ui.resources/values/strings.commonMain.cvr
todo.db after typing: pass {"phase":"inspect","workspace":"a37a8d87-c081-48cd-84a0-55d0c2fb4329","sqlite":"3.54.1","journal_mode":"truncate","open":["Typed in the web UI"],"completed":[],"outbox":2,"passed":["journal_mode is a rollback journal"],"failed":[],"status":"pass"}
page errors:
  [error] Accessing `memory` via `wasmExports` is deprecated. Use `kotlin.wasm.unsafe.wasmMemory` or update dependencies. Read more: https://kotl.in/vr3szr
page log:
  [warning] WebGL: INVALID_ENUM: getParameter: invalid parameter name, WEBGL_debug_renderer_info not enabled
  [warning] WebGL: INVALID_ENUM: getParameter: invalid parameter name, WEBGL_debug_renderer_info not enabled
  [warning] [.WebGL-0xe44001ca600]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels
  [warning] [.WebGL-0xe44001ca600]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels
  [warning] [.WebGL-0xe44001ca600]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels
  [warning] [.WebGL-0xe44001ca600]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels (this message will no longer repeat)
  [info] [todo-sqlite-worker] ready: SQLite 3.54.1 VFS todo-sahpool files 0/10
  [info] [todo-sqlite-worker] ready: SQLite 3.54.1 VFS todo-sahpool files 2/10

webApp/build/reports/runtime-evidence/ui-firefox.txt

browser: firefox
webgl2: WebGL 2.0; llvmpipe, or similar
errors after start: []
compose resources:
  200 /composeResources/io.github.yozh150991.todo.ui.resources/values/strings.commonMain.cvr
todo.db after typing: pass {"phase":"inspect","workspace":"14bc53d6-bffc-473f-a6d7-2cff6c43581b","sqlite":"3.54.1","journal_mode":"truncate","open":["Typed in the web UI"],"completed":[],"outbox":2,"passed":["journal_mode is a rollback journal"],"failed":[],"status":"pass"}
page errors:
  [error] Accessing `memory` via `wasmExports` is deprecated. Use `kotlin.wasm.unsafe.wasmMemory` or update dependencies. Read more: https://kotl.in/vr3szr
page log:
  [warning] [JavaScript Warning: "The WebAssembly exception handling 'try' instruction is deprecated and should no longer be used. Please recompile to use the 'try_table' instruction instead."]
  [warning] [JavaScript Warning: "The WebAssembly exception handling 'try' instruction is deprecated and should no longer be used. Please recompile to use the 'try_table' instruction instead."]
  [info] [todo-sqlite-worker] ready: SQLite 3.54.1 VFS todo-sahpool files 0/10
  [warning] [JavaScript Warning: "The WebAssembly exception handling 'try' instruction is deprecated and should no longer be used. Please recompile to use the 'try_table' instruction instead."]
  [warning] [JavaScript Warning: "The WebAssembly exception handling 'try' instruction is deprecated and should no longer be used. Please recompile to use the 'try_table' instruction instead."]
  [info] [todo-sqlite-worker] ready: SQLite 3.54.1 VFS todo-sahpool files 2/10

webApp/build/reports/runtime-evidence/ui-webkit.txt

browser: webkit
webgl2: WebGL 2.0; WebKit WebGL
errors after start: ["[todo-sqlite-worker] Local database storage is unavailable (OPFS SAHPool): The operation failed for an unknown transient reason (e.g. out of memory)."]
compose resources:
  200 /composeResources/io.github.yozh150991.todo.ui.resources/values/strings.commonMain.cvr
todo.db after typing: fail {"phase":"inspect","status":"fail","error":"Local database storage is unavailable (OPFS SAHPool): The operation failed for an unknown transient reason (e.g. out of memory)."}
page errors:
  [error] WebGL: INVALID_ENUM: getParameter: invalid parameter name, WEBGL_debug_renderer_info not enabled
  [error] WebGL: INVALID_ENUM: getParameter: invalid parameter name, WEBGL_debug_renderer_info not enabled
  [error] Accessing `memory` via `wasmExports` is deprecated. Use `kotlin.wasm.unsafe.wasmMemory` or update dependencies. Read more: https://kotl.in/vr3szr
  [error] [todo-sqlite-worker] Local database storage is unavailable (OPFS SAHPool): The operation failed for an unknown transient reason (e.g. out of memory).
  [pageerror] SQLiteException: Local database storage is unavailable (OPFS SAHPool): The operation failed for an unknown transient reason (e.g. out of memory).
SQLiteException: Local database storage is unavailable (OPFS SAHPool): The operation failed for an unknown transient reason (e.g. out of memory).
    at reportError (http://127.0.0.1:8090/webApp.js:2:1239710)
    at kotlinx.coroutines.internal.throwAsyncJsError (http://127.0.0.1:8090/webApp.js:2:1239815)
    (27 unnamed wasm frames omitted)
  [error] [todo-sqlite-worker] Local database storage is unavailable (OPFS SAHPool): The operation failed for an unknown transient reason (e.g. out of memory).
page log:
  [log] [window error event] SQLiteException: Local database storage is unavailable (OPFS SAHPool): The operation failed for an unknown transient reason (e.g. out of memory).
androidx.sqlite.SQLiteException: Local database storage is unavailable (OPFS SAHPool): The operation failed for an unknown transient reason (e.g. out of memory).
kotlin.createJsError@http://127.0.0.1:8090/webApp.js:2:1234996
    Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@465574068, Dispatchers.Main.immediate]
    kotlin.createJsError@http://127.0.0.1:8090/webApp.js:2:1234996
    ... and 5 more common stack frames skipped

    (37 unnamed wasm frames omitted)

webApp/build/reports/runtime-evidence/web-bundle.txt

== import.meta in webApp/build/dist/wasmJs/productionExecutable/*.js (120 chars around each, first 15)
-- 231.js: 0
-- 772.js: 0
-- 982.js: 0
-- a3cef5a0c425b2c5164e.js: 0
-- webApp.js: 0
== webpack warnings and errors (web-log.txt)
168:Critical dependency: the request of a dependency is an expression
169:Critical dependency: the request of a dependency is an expression
170:Critical dependency: the request of a dependency is an expression
171-asset size limit: The following asset(s) exceed the recommended size limit (244 KiB).
172-This can impact web performance.
173-Assets: 
174-  webApp.js (1.22 MiB)

webApp/build/reports/runtime-evidence/web-chromium.txt

browser: chromium 156.0.8078.4
crossOriginIsolated: false
write: pass {"phase":"write","workspace":"c3e051bd-bd0c-4b20-8252-530a0dc28e4e","sqlite":"3.54.1","journal_mode":"truncate","outbox_seq":"1,2,3,4,5","tasks":3,"fts5":{"молоко":1,"МОЛОКО":1,"хлі*":1,"prąd":1,"prad":1,"hom*":1},"vacuum_into":{"integrity_check":"ok","tasks":3},"passed":["journal_mode is a rollback journal","fresh database","complete","complete is idempotent","duplicate operation id fails","task rolled back","activity rolled back","outbox seq 1..5","fts5 'молоко'","fts5 'МОЛОКО'","fts5 'хлі*'","fts5 'prąd'","fts5 'prad'","fts5 'hom*'","VACUUM INTO snapshot passes integrity_check","snapshot has every task"],"failed":[],"status":"pass"}
second tab while the first is open: fail Local database storage is unavailable (OPFS SAHPool): Failed to execute 'createSyncAccessHandle' on 'FileSystemFileHandle': Access Handles cannot be created if there is another open Access Handle or Writable stream associated with the same file.
verify after reload: pass {"phase":"verify","workspace":"c3e051bd-bd0c-4b20-8252-530a0dc28e4e","sqlite":"3.54.1","journal_mode":"truncate","outbox_seq":"1,2,3,4,5,6","tasks":4,"fts5":{"молоко":1,"МОЛОКО":1,"хлі*":1,"prąd":1,"prad":1,"hom*":1},"passed":["journal_mode is a rollback journal","same workspace after reload","one Inbox","open tasks persisted","completed task persisted","outbox seq contiguous and persisted","local_seq continues","fts5 'молоко'","fts5 'МОЛОКО'","fts5 'хлі*'","fts5 'prąd'","fts5 'prad'","fts5 'hom*'"],"failed":[],"status":"pass"}
migration v1 -> v2: pass {"phase":"migrate","user_version":"2","counts":{"local_workspace":1,"project":3,"task":5,"task_activity":2,"outbox_operation":6,"external_identity":1},"passed":["fresh v1 file","schema migrated to v2","rows preserved","integrity_check","foreign_key_check","v2 tables created","task.section_id references section","v1 task fields kept","section_id is enforced","same workspace","local_seq continues"],"failed":[],"status":"pass"}
new tab after closing the old one: pass {"phase":"verify","workspace":"c3e051bd-bd0c-4b20-8252-530a0dc28e4e","sqlite":"3.54.1","journal_mode":"truncate","outbox_seq":"1,2,3,4,5,6,7","tasks":5,"fts5":{"молоко":1,"МОЛОКО":1,"хлі*":1,"prąd":1,"prad":1,"hom*":1},"passed":["journal_mode is a rollback journal","same workspace after reload","one Inbox","open tasks persisted","completed task persisted","outbox seq contiguous and persisted","local_seq continues","fts5 'молоко'","fts5 'МОЛОКО'","fts5 'хлі*'","fts5 'prąd'","fts5 'prad'","fts5 'hom*'"],"failed":[],"status":"pass"}
storage: {"persisted":false,"usage":1148884,"quota":10738567124}
write after clearing storage: pass new workspace: true
page errors:
page log:
  [info] [todo-sqlite-worker] ready: SQLite 3.54.1 VFS todo-sahpool files 0/10
  [warning] sqlite3_step() rc= 1555 SQLITE_CONSTRAINT_PRIMARYKEY SQL = INSERT OR ABORT INTO `outbox_operation` (`operation_id`,`local_seq`,`workspace_id`,`entity`,`entity_id`,`op_type`,`field_patch`,`base_revision`,`device_id`,`created_at`,`status`,`attempts`,`last_error`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)
  [info] [todo-sqlite-worker] ready: SQLite 3.54.1 VFS todo-sahpool files 3/10
  [info] [todo-sqlite-worker] ready: SQLite 3.54.1 VFS todo-sahpool files 3/10
  [warning] sqlite3_step() rc= 787 SQLITE_CONSTRAINT_FOREIGNKEY SQL = UPDATE OR ABORT `task` SET `id` = ?,`project_id` = ?,`section_id` = ?,`parent_id` = ?,`child_order` = ?,`day_order` = ?,`content` = ?,`description` = ?,`source_url` = ?,`priority` = ?,`due_date` = ?,`due_time` = ?,`due_tz` = ?,`deadline` = ?,`rrule` = ?,`recur_from_completion` = ?,`recurrence_end_reason` = ?,`recurrence_dtstart_date` = ?,`recurrence_dtstart_time` = ?,`recurrence_zone_mode` = ?,`recurrence_zone_id` = ?,`recurrence_interval_unit` = ?,`recurrence_interval_n` = ?,`recurrence_policy_version` = ?,`duration_min` = ?,`completed_at` = ?,`is_completable` = ?,`revision` = ?,`created_at` = ?,`updated_at` = ?,`deleted_at` = ? WHERE `id` = ?
  [info] [todo-sqlite-worker] ready: SQLite 3.54.1 VFS todo-sahpool files 5/10
  [info] [todo-sqlite-worker] ready: SQLite 3.54.1 VFS todo-sahpool files 0/10
  [warning] sqlite3_step() rc= 1555 SQLITE_CONSTRAINT_PRIMARYKEY SQL = INSERT OR ABORT INTO `outbox_operation` (`operation_id`,`local_seq`,`workspace_id`,`entity`,`entity_id`,`op_type`,`field_patch`,`base_revision`,`device_id`,`created_at`,`status`,`attempts`,`last_error`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)

webApp/build/reports/runtime-evidence/web-firefox.txt

browser: firefox 157.0
crossOriginIsolated: false
write: pass {"phase":"write","workspace":"bc977117-7870-4ee4-906a-fbf6fc92d2c9","sqlite":"3.54.1","journal_mode":"truncate","outbox_seq":"1,2,3,4,5","tasks":3,"fts5":{"молоко":1,"МОЛОКО":1,"хлі*":1,"prąd":1,"prad":1,"hom*":1},"vacuum_into":{"integrity_check":"ok","tasks":3},"passed":["journal_mode is a rollback journal","fresh database","complete","complete is idempotent","duplicate operation id fails","task rolled back","activity rolled back","outbox seq 1..5","fts5 'молоко'","fts5 'МОЛОКО'","fts5 'хлі*'","fts5 'prąd'","fts5 'prad'","fts5 'hom*'","VACUUM INTO snapshot passes integrity_check","snapshot has every task"],"failed":[],"status":"pass"}
second tab while the first is open: fail Local database storage is unavailable (OPFS SAHPool): No modification allowed
verify after reload: pass {"phase":"verify","workspace":"bc977117-7870-4ee4-906a-fbf6fc92d2c9","sqlite":"3.54.1","journal_mode":"truncate","outbox_seq":"1,2,3,4,5,6","tasks":4,"fts5":{"молоко":1,"МОЛОКО":1,"хлі*":1,"prąd":1,"prad":1,"hom*":1},"passed":["journal_mode is a rollback journal","same workspace after reload","one Inbox","open tasks persisted","completed task persisted","outbox seq contiguous and persisted","local_seq continues","fts5 'молоко'","fts5 'МОЛОКО'","fts5 'хлі*'","fts5 'prąd'","fts5 'prad'","fts5 'hom*'"],"failed":[],"status":"pass"}
migration v1 -> v2: pass {"phase":"migrate","user_version":"2","counts":{"local_workspace":1,"project":3,"task":5,"task_activity":2,"outbox_operation":6,"external_identity":1},"passed":["fresh v1 file","schema migrated to v2","rows preserved","integrity_check","foreign_key_check","v2 tables created","task.section_id references section","v1 task fields kept","section_id is enforced","same workspace","local_seq continues"],"failed":[],"status":"pass"}
new tab after closing the old one: pass {"phase":"verify","workspace":"bc977117-7870-4ee4-906a-fbf6fc92d2c9","sqlite":"3.54.1","journal_mode":"truncate","outbox_seq":"1,2,3,4,5,6,7","tasks":5,"fts5":{"молоко":1,"МОЛОКО":1,"хлі*":1,"prąd":1,"prad":1,"hom*":1},"passed":["journal_mode is a rollback journal","same workspace after reload","one Inbox","open tasks persisted","completed task persisted","outbox seq contiguous and persisted","local_seq continues","fts5 'молоко'","fts5 'МОЛОКО'","fts5 'хлі*'","fts5 'prąd'","fts5 'prad'","fts5 'hom*'"],"failed":[],"status":"pass"}
storage: {"persisted":false,"usage":1638400,"quota":10737418240}
write after clearing storage: pass new workspace: true
page errors:
page log:
  [warning] [JavaScript Warning: "The WebAssembly exception handling 'try' instruction is deprecated and should no longer be used. Please recompile to use the 'try_table' instruction instead."]
  [warning] [JavaScript Warning: "The WebAssembly exception handling 'try' instruction is deprecated and should no longer be used. Please recompile to use the 'try_table' instruction instead."]
  [info] [todo-sqlite-worker] ready: SQLite 3.54.1 VFS todo-sahpool files 0/10
  [warning] sqlite3_step() rc= 1555 SQLITE_CONSTRAINT_PRIMARYKEY SQL = INSERT OR ABORT INTO `outbox_operation` (`operation_id`,`local_seq`,`workspace_id`,`entity`,`entity_id`,`op_type`,`field_patch`,`base_revision`,`device_id`,`created_at`,`status`,`attempts`,`last_error`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)
  [warning] [JavaScript Warning: "The WebAssembly exception handling 'try' instruction is deprecated and should no longer be used. Please recompile to use the 'try_table' instruction instead."]
  [warning] [JavaScript Warning: "The WebAssembly exception handling 'try' instruction is deprecated and should no longer be used. Please recompile to use the 'try_table' instruction instead."]
  [info] [todo-sqlite-worker] ready: SQLite 3.54.1 VFS todo-sahpool files 3/10
  [warning] [JavaScript Warning: "The WebAssembly exception handling 'try' instruction is deprecated and should no longer be used. Please recompile to use the 'try_table' instruction instead."]
  [warning] [JavaScript Warning: "The WebAssembly exception handling 'try' instruction is deprecated and should no longer be used. Please recompile to use the 'try_table' instruction instead."]
  [info] [todo-sqlite-worker] ready: SQLite 3.54.1 VFS todo-sahpool files 3/10
  [warning] sqlite3_step() rc= 787 SQLITE_CONSTRAINT_FOREIGNKEY SQL = UPDATE OR ABORT `task` SET `id` = ?,`project_id` = ?,`section_id` = ?,`parent_id` = ?,`child_order` = ?,`day_order` = ?,`content` = ?,`description` = ?,`source_url` = ?,`priority` = ?,`due_date` = ?,`due_time` = ?,`due_tz` = ?,`deadline` = ?,`rrule` = ?,`recur_from_completion` = ?,`recurrence_end_reason` = ?,`recurrence_dtstart_date` = ?,`recurrence_dtstart_time` = ?,`recurrence_zone_mode` = ?,`recurrence_zone_id` = ?,`recurrence_interval_unit` = ?,`recurrence_interval_n` = ?,`recurrence_policy_version` = ?,`duration_min` = ?,`completed_at` = ?,`is_completable` = ?,`revision` = ?,`created_at` = ?,`updated_at` = ?,`deleted_at` = ? WHERE `id` = ?
  [warning] [JavaScript Warning: "The WebAssembly exception handling 'try' instruction is deprecated and should no longer be used. Please recompile to use the 'try_table' instruction instead."]
  [warning] [JavaScript Warning: "The WebAssembly exception handling 'try' instruction is deprecated and should no longer be used. Please recompile to use the 'try_table' instruction instead."]
  [info] [todo-sqlite-worker] ready: SQLite 3.54.1 VFS todo-sahpool files 5/10
  [warning] [JavaScript Warning: "The WebAssembly exception handling 'try' instruction is deprecated and should no longer be used. Please recompile to use the 'try_table' instruction instead."]
  [warning] [JavaScript Warning: "The WebAssembly exception handling 'try' instruction is deprecated and should no longer be used. Please recompile to use the 'try_table' instruction instead."]
  [warning] [JavaScript Warning: "The WebAssembly exception handling 'try' instruction is deprecated and should no longer be used. Please recompile to use
…(truncated; full file in the workflow artifacts)

webApp/build/reports/runtime-evidence/web-summary.txt

chromium: pass
  passed   tasks persist in OPFS across reload and a new tab
  passed   time zones and DST: golden fixtures TIME-01..04, TIME-08
  skipped  supabase-kt modules against a local Supabase stack
  passed   tasks persist after the browser is restarted
  passed   app UI starts, renders and saves a typed task
firefox: pass
  passed   tasks persist in OPFS across reload and a new tab
  passed   time zones and DST: golden fixtures TIME-01..04, TIME-08
  skipped  supabase-kt modules against a local Supabase stack
  passed   tasks persist after the browser is restarted
  passed   app UI starts, renders and saves a typed task
webkit: pass
  passed (known limitation, expected failure) tasks persist in OPFS across reload and a new tab
  passed   time zones and DST: golden fixtures TIME-01..04, TIME-08
  skipped  supabase-kt modules against a local Supabase stack
  passed   tasks persist after the browser is restarted
  passed (known limitation, expected failure) app UI starts, renders and saves a typed task

webApp/build/reports/runtime-evidence/web-webkit.txt

browser: webkit 27.2
crossOriginIsolated: false
write: fail {"phase":"write","status":"fail","error":"Local database storage is unavailable (OPFS SAHPool): The operation failed for an unknown transient reason (e.g. out of memory)."}
page errors:
  [error] [todo-sqlite-worker] Local database storage is unavailable (OPFS SAHPool): The operation failed for an unknown transient reason (e.g. out of memory).
page log:

Artifacts

  • androidApp/build/outputs/apk/debug/androidApp-debug.apk — 17.89 MiB
  • androidApp/build/outputs/apk/release/androidApp-release.apk — 10.76 MiB
  • dist/todo-v0.0.1.apk — 10.76 MiB
  • desktopApp/build/libs/desktopApp-jvm.jar — 0.01 MiB
  • Web build webApp/build/dist/wasmJs/productionExecutable/ — 18.85 MiB in 17 files:
    • 231.js — 214 KiB
    • 231.js.LICENSE.txt — 2 KiB
    • 231.js.map — 1013 KiB
    • 658820f72b4617efb380.wasm — 8446 KiB
    • 772.js — 209 KiB
    • 772.js.LICENSE.txt — 2 KiB
    • 772.js.map — 989 KiB
    • 982.js — 2 KiB
    • 982.js.map — 10 KiB
    • a3cef5a0c425b2c5164e.js — 11 KiB
    • a3cef5a0c425b2c5164e.js.LICENSE.txt — 2 KiB
    • d0c24eb9978d5fa10f3a.wasm — 4776 KiB
    • e97215a2dab741d1261d.wasm — 858 KiB
    • index.html — 0 KiB
    • webApp.js — 1245 KiB
    • webApp.js.LICENSE.txt — 1 KiB
    • webApp.js.map — 1521 KiB

From the probe (latest release and its runtime):
- actions/checkout v4/v5 -> v7, actions/setup-java v5 -> v6,
  actions/setup-node v4 -> v7, actions/upload-artifact v4 -> v7,
  actions/download-artifact v4 -> v8: all node24, no input changes for
  the way the workflows use them.
- gradle/actions/setup-gradle v4 -> v5 (node24, MIT). Not v6: its caching
  is a proprietary component with separate terms of use; that is the
  owner's decision.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U8rzfoDDB5JTErVpfCynTS
@yozh150991
yozh150991 marked this pull request as ready for review November 3, 2026 01:19
@yozh150991
yozh150991 merged commit f255e0e into main Nov 3, 2026
11 checks passed
@yozh150991
yozh150991 deleted the ci/actions-node24 branch November 3, 2026 01:29
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.

2 participants