Skip to content

Releases: CallMeTechie/OriDev

Ori:Dev v0.35.12

Choose a tag to compare

@github-actions github-actions released this 29 Apr 19:46

Release v0.35.12 · Signed with release keystore

Artifacts

  • oridev-*.aab / oridev-*.apk — Phone build (R8 minified)
  • oridev-wear-*.aab / oridev-wear-*.apk — Wear OS companion
  • oridev-*-mapping.txt — R8 deobfuscation map (upload to Play Console for stack traces)

Changes since v0.32.1

Features

  • feat(network): real SCP protocol implementation (v0.34.5) (#198)
  • feat: foldable split terminal (two tabs parallel on unfolded) (#187)
  • feat: opt-in full session resume (tabs, paths, last-tab) (#184)
  • feat(security): FLAG_SECURE toggle während aktiver SSH-Sessions (#183)
  • feat: Files polish + session-kill safety net (PR 3) (#181)
  • feat: SessionRegistry foundation — consolidate SSH-session state (#177)
  • feat(settings): Dummy-Rows aktivieren — 8 neue Picker-Dialoge (#169)
  • feat(connections): TOFU-Dialog für unbekannte/geänderte Host-Keys (#165)
  • feat(filemanager): Multi-Select-Toolbar mit Copy/Rename/Chmod/Info (#167)
  • feat(filemanager): replace legacy storage perms with SAF DocumentFile (#142)
  • feat(terminal): split CustomKeyboard for unfolded foldable (#140)
  • feat(filemanager): compact FileItemRow density (#138)
  • feat(terminal): drop Send-to-Claude FAB (#136)
  • feat(app): responsive top-level navigation — compact bar / rail (#139)
  • feat(terminal): KeyboardHost + resize debounce (Phase 14 Task 5) (#127)
  • feat(settings): keyboard style picker (Phase 14 Task 6) (#128)
  • feat(terminal): TerminalExtraKeys row (Phase 14 Task 4) (#126)
  • feat(terminal): TerminalImeAnchor (Phase 14 Task 2) (#122)
  • feat(terminal): ModifierState single source of truth (Phase 14 Task 3) (#124)
  • feat(domain): KeyboardMode + KeyboardPreferences (Phase 14 Task 1) (#121)
  • feat(ci): auto-release on master push + align RELEASE.md (#110)
  • feat: Phase 13 — Premium Features (Billing, Ads, Throttling, Chunks) (#107)
  • feat(transfer-engine): add TransferStatus.CANCELLED (Tier 2 T2b) (#101)
  • feat(wear): migrate 5 remaining screens to OriDevWearTheme (Tier 2 T2c) (#99)
  • feat(security): wire BiometricGate into credential unlock path (Tier 1 T1d) (#95)

Bug Fixes

  • fix: list-mode tap + URL-encoded filename on SAF uploads (Bug R) (#230)
  • fix(network): serialize channel-opens on shared SSHClient (Bug Q) (#228)
  • fix(transfers): clear failed/cancelled rows and recover stale sessions on retry (Bugs N + O) (#224)
  • fix(filemanager): isolate row click from drag and translate Not connected (Bug K) (#225)
  • fix(connections): show TOFU dialog when openProfile hits unknown host key (Bug P) (#223)
  • fix(ssh): retry openShell once on Synology DSM channel-open race (Bug E) (#215)
  • fix(transfers): auto-reconnect SshTransferExecutor when session expired (Bug J) (#214)
  • fix(transfers): surface success Snackbar for Clear/PauseAll/CancelAll (#216)
  • fix(filemanager): use Compose drag-and-drop API for foldable cross-pane drops (#217)
  • fix(network): route SAF content:// URIs through SafSourceFile/SafDestFile in resumable transfers (#218)
  • fix(transfers): re-apply filter on tab switch (Bug H) (#213)
  • fix(network): notify SessionRegistry when SshSessionStore prunes a session (#210)
  • fix(terminal): atomic latch claim prevents focus+restore observer race (#208)
  • fix(filemanager): use active session profileId for transfers + wire context-menu Transfer button (#209)
  • fix(terminal): auto-open tab when ConnectionDetailSheet focuses a fresh session (#206)
  • fix(network): tolerate ACL/SELinux permission suffix in ScpListingParser (#200)
  • fix(network): getClient throws IOException so ViewModel catches route it (#196)
  • fix(service): switch ConnectionService to FGS specialUse (#193)
  • fix(network): prune disconnected SSH clients from session cache (#192)
  • fix(network): route withSftpClient through Dispatchers.IO (#190)
  • fix(settings): complete AppPreferencesSnapshot fixture in TransfersSectionTest (#185)
  • fix: Connect-Folgeschritte — Service-Typ, Session-Wiring, UI-State (#175)
  • fix(connections): Passwort im Edit prefillen, Connect-Pfad loggen (#173)
  • fix(connections): Passwörter tatsächlich im Keystore ablegen (#171)
  • fix(editor): Absturz beim Öffnen von Dateien auf Android 16 (#166)
  • fix(filemanager): SAF-Unterordner wieder auflistbar (#164)
  • fix(filemanager): BreadcrumbBar must not split SAF content URIs (#160)
  • fix(wear): exclude OSGI META-INF to unblock bcprov packaging (#161)
  • fix(ssh): replace Android's stripped BC provider so Ed25519 works (#158)
  • fix(ssh,filemanager): move connect to IO + null-safe SAF listFiles (#156)
  • fix(app): add NonFatalErrorLogger + dump connect failures to Downloads (#154)
  • fix(terminal): move imePadding to TerminalScreen root + gate ExtraKeys on isImeVisible (#137)
  • fix(app): install LocalCrashLogger BEFORE super.attachBaseContext (#133)
  • fix(app): add LocalCrashLogger that writes to Downloads on crash (#131)
  • fix(terminal): default split ratio to 50/50 (#118)
  • fix(ci): use RELEASE_PAT to push bump branch so CI triggers (#115)
  • fix(ci): move regex patterns into variables for bash parser (#112)
  • fix(ci): correct bash glob syntax for chore(release) skip pattern (#111)
  • fix(ci): add pull-requests: write permission to release workflow (#108)
  • fix(ci): release workflow manual-only, PR-based version bump (#97)
  • fix(ci): serialize release workflow + retry-rebase push loop (#96)

Other

  • chore(release): v0.35.11 (#229)
  • chore(deps): bump the kotlin group across 1 directory with 7 updates (#203)
  • chore(deps): bump org.connectbot:termlib from 0.0.26 to 0.0.37 (#204)
  • chore(deps): bump io.github.java-diff-utils:java-diff-utils (#151)
  • chore(deps): bump org.robolectric:robolectric from 4.13 to 4.16.1 (#153)
  • chore(deps): bump the security-crypto group across 1 directory with 3 updates (#159)
  • chore(deps): bump androidx.security:security-crypto (#152)
  • chore: ignore error/ and .claude/ directories
  • chore(release): v0.35.10 (#227)
  • chore(release): v0.35.9 (#226)
  • chore(release): v0.35.8 (#222)
  • chore(release): v0.35.7 (#221)
  • chore(release): v0.35.6 (#220)
  • chore(release): v0.35.5 (#219)
  • chore(release): v0.35.4 (#212)
  • chore(release): v0.35.3 (#211)
  • chore(release): v0.35.2 (#207)
  • chore(release): v0.35.1 (#205)
  • ci: add pipefail to font-budget positive control to detect gradle failure (#201)
  • chore(release): v0.35.0 (#199)
  • chore(release): v0.34.4 (#197)
  • chore(release): v0.34.3 (#195)
  • chore(release): v0.34.2 (#194)
  • chore(release): v0.34.1 (#191)
  • chore(release): v0.34.0 (#188)
  • chore(release): v0.33.22 (#186)
  • chore(release): v0.33.21 (#182)
  • chore(release): v0.33.20 (#180)
  • refactor: UI consolidation onto SessionRegistry (nav + sheet + terminal tabs) (#179)
  • chore(release): v0.33.19 (#178)
  • chore(release): v0.33.18 (#176)
  • chore(release): v0.33.17 (#174)
  • chore(release): v0.33.16 (#172)
  • chore(release): v0.33.15 (#170)
  • chore(release): v0.33.14 (#168)
  • chore(release): v0.33.13 (#163)
  • chore(release): v0.33.12 (#162)
  • chore(release): v0.33.11 (#157)
  • chore(release): v0.33.10 (#155)
  • chore(release): v0.33.9 (#143)
  • chore(release): v0.33.8 (#141)
  • docs(plan): Phase 15 Foldable UX + Storage Access Framework (#135)
  • chore(release): v0.33.7 (#134)
  • chore(release): v0.33.6 (#132)
  • chore(release): v0.33.5 (#130)
  • docs(phase14): document the three keyboard modes (#129)
  • chore(release): v0.33.4 (#125)
  • docs(plan): fold devil's-advocate findings into Phase 14 plan (#120)
  • docs(plan): Phase 14 Terminal Hybrid Keyboard plan (#119)
  • ci(deps): bump actions/cache from 4 to 5 (#114)
  • chore(release): v0.33.3 (#117)
  • chore(release): v0.33.2 (#116)
  • chore(release): v0.33.1 (#113)
  • chore(release): v0.33.0 (#109)
  • test(security): BiometricGate authenticate path via launcher seam (Tier 3 T3d) (#106)
  • test(transfer-engine): Robolectric coverage for TransferNotificationManager (Tier 3 T3c) (#105)
  • test(transfer-engine): instrumentation test infra + lifecycle test (Tier 3 T3a) (#104)
  • test(wear): OriWearCard Compose UI test infrastructure (Tier 3 T3b) (#103)
  • chore(security): promote material-icons + clipboard rules to ERROR (#102)
  • refactor(transfer-engine): FtpTransferExecutor owns its FTPClient (Tier 2 T2a) (#100)
  • refactor(connections): form primitives + credential clear on ViewModel death (Tier 2 T2d) (#98)
  • chore(deps): bump okhttp from 4.12.0 to 5.3.2 (#21)
  • chore(deps): bump the androidx group across 1 directory with 25 updates (#33)
  • chore(deps): bump the kotlin group across 1 directory with 3 updates (#22)
  • chore(deps): bump io.coil-kt.coil3:coil-compose from 3.1.0 to 3.4.0 (#27)
  • chore(deps): bump the testing group across 1 directory with 4 updates (#31)
  • chore(deps): bump commons-net:commons-net from 3.11.1 to 3.13.0 (#14)
  • chore(deps): bump androidx.core:core-splashscreen from 1.2.0-alpha02 to 1.2.0 (#12)
  • chore(deps): bump androidx.compose:compose-bom from 2026.03.00 to 2026.03.01 in the compose group across 1 directory (#3)
  • ci(deps): bump softprops/action-gh-release from 2 to 3 (#24)
  • ci(deps): bump actions/setup-java from 4 to 5 (#5)
  • ci(deps): bump actions/upload-artifact from 4 to 7 (#4)
  • ci(deps): bump actions/checkout from 4 to 6 (#2)
  • ci(deps): bump gradle/actions from 4 to 6 (#1)
  • refactor(terminal): migrate clipboard usage to OriClipboard (Tier 1 T1c) (#94)
  • refactor(connections): complete Material icon sweep (Tier 1 T1a) (#93)
  • refactor(editor): Lucide icons in SearchReplaceBar (Tier 1 T1b) (#92)
  • chore: opt into KT-73255 annotation-target-property to silence forward-compat warnings (#91)
  • chore(ci): add release build smoke test to pr-check.yml (TD3) (#90)

Ori:Dev v0.35.11

Choose a tag to compare

@github-actions github-actions released this 29 Apr 17:57

Release v0.35.11 · Signed with release keystore

Artifacts

  • oridev-*.aab / oridev-*.apk — Phone build (R8 minified)
  • oridev-wear-*.aab / oridev-wear-*.apk — Wear OS companion
  • oridev-*-mapping.txt — R8 deobfuscation map (upload to Play Console for stack traces)

Changes since v0.32.1

Features

  • feat(network): real SCP protocol implementation (v0.34.5) (#198)
  • feat: foldable split terminal (two tabs parallel on unfolded) (#187)
  • feat: opt-in full session resume (tabs, paths, last-tab) (#184)
  • feat(security): FLAG_SECURE toggle während aktiver SSH-Sessions (#183)
  • feat: Files polish + session-kill safety net (PR 3) (#181)
  • feat: SessionRegistry foundation — consolidate SSH-session state (#177)
  • feat(settings): Dummy-Rows aktivieren — 8 neue Picker-Dialoge (#169)
  • feat(connections): TOFU-Dialog für unbekannte/geänderte Host-Keys (#165)
  • feat(filemanager): Multi-Select-Toolbar mit Copy/Rename/Chmod/Info (#167)
  • feat(filemanager): replace legacy storage perms with SAF DocumentFile (#142)
  • feat(terminal): split CustomKeyboard for unfolded foldable (#140)
  • feat(filemanager): compact FileItemRow density (#138)
  • feat(terminal): drop Send-to-Claude FAB (#136)
  • feat(app): responsive top-level navigation — compact bar / rail (#139)
  • feat(terminal): KeyboardHost + resize debounce (Phase 14 Task 5) (#127)
  • feat(settings): keyboard style picker (Phase 14 Task 6) (#128)
  • feat(terminal): TerminalExtraKeys row (Phase 14 Task 4) (#126)
  • feat(terminal): TerminalImeAnchor (Phase 14 Task 2) (#122)
  • feat(terminal): ModifierState single source of truth (Phase 14 Task 3) (#124)
  • feat(domain): KeyboardMode + KeyboardPreferences (Phase 14 Task 1) (#121)
  • feat(ci): auto-release on master push + align RELEASE.md (#110)
  • feat: Phase 13 — Premium Features (Billing, Ads, Throttling, Chunks) (#107)
  • feat(transfer-engine): add TransferStatus.CANCELLED (Tier 2 T2b) (#101)
  • feat(wear): migrate 5 remaining screens to OriDevWearTheme (Tier 2 T2c) (#99)
  • feat(security): wire BiometricGate into credential unlock path (Tier 1 T1d) (#95)

Bug Fixes

  • fix(network): serialize channel-opens on shared SSHClient (Bug Q) (#228)
  • fix(transfers): clear failed/cancelled rows and recover stale sessions on retry (Bugs N + O) (#224)
  • fix(filemanager): isolate row click from drag and translate Not connected (Bug K) (#225)
  • fix(connections): show TOFU dialog when openProfile hits unknown host key (Bug P) (#223)
  • fix(ssh): retry openShell once on Synology DSM channel-open race (Bug E) (#215)
  • fix(transfers): auto-reconnect SshTransferExecutor when session expired (Bug J) (#214)
  • fix(transfers): surface success Snackbar for Clear/PauseAll/CancelAll (#216)
  • fix(filemanager): use Compose drag-and-drop API for foldable cross-pane drops (#217)
  • fix(network): route SAF content:// URIs through SafSourceFile/SafDestFile in resumable transfers (#218)
  • fix(transfers): re-apply filter on tab switch (Bug H) (#213)
  • fix(network): notify SessionRegistry when SshSessionStore prunes a session (#210)
  • fix(terminal): atomic latch claim prevents focus+restore observer race (#208)
  • fix(filemanager): use active session profileId for transfers + wire context-menu Transfer button (#209)
  • fix(terminal): auto-open tab when ConnectionDetailSheet focuses a fresh session (#206)
  • fix(network): tolerate ACL/SELinux permission suffix in ScpListingParser (#200)
  • fix(network): getClient throws IOException so ViewModel catches route it (#196)
  • fix(service): switch ConnectionService to FGS specialUse (#193)
  • fix(network): prune disconnected SSH clients from session cache (#192)
  • fix(network): route withSftpClient through Dispatchers.IO (#190)
  • fix(settings): complete AppPreferencesSnapshot fixture in TransfersSectionTest (#185)
  • fix: Connect-Folgeschritte — Service-Typ, Session-Wiring, UI-State (#175)
  • fix(connections): Passwort im Edit prefillen, Connect-Pfad loggen (#173)
  • fix(connections): Passwörter tatsächlich im Keystore ablegen (#171)
  • fix(editor): Absturz beim Öffnen von Dateien auf Android 16 (#166)
  • fix(filemanager): SAF-Unterordner wieder auflistbar (#164)
  • fix(filemanager): BreadcrumbBar must not split SAF content URIs (#160)
  • fix(wear): exclude OSGI META-INF to unblock bcprov packaging (#161)
  • fix(ssh): replace Android's stripped BC provider so Ed25519 works (#158)
  • fix(ssh,filemanager): move connect to IO + null-safe SAF listFiles (#156)
  • fix(app): add NonFatalErrorLogger + dump connect failures to Downloads (#154)
  • fix(terminal): move imePadding to TerminalScreen root + gate ExtraKeys on isImeVisible (#137)
  • fix(app): install LocalCrashLogger BEFORE super.attachBaseContext (#133)
  • fix(app): add LocalCrashLogger that writes to Downloads on crash (#131)
  • fix(terminal): default split ratio to 50/50 (#118)
  • fix(ci): use RELEASE_PAT to push bump branch so CI triggers (#115)
  • fix(ci): move regex patterns into variables for bash parser (#112)
  • fix(ci): correct bash glob syntax for chore(release) skip pattern (#111)
  • fix(ci): add pull-requests: write permission to release workflow (#108)
  • fix(ci): release workflow manual-only, PR-based version bump (#97)
  • fix(ci): serialize release workflow + retry-rebase push loop (#96)

Other

  • chore(deps): bump the kotlin group across 1 directory with 7 updates (#203)
  • chore(deps): bump org.connectbot:termlib from 0.0.26 to 0.0.37 (#204)
  • chore(deps): bump io.github.java-diff-utils:java-diff-utils (#151)
  • chore(deps): bump org.robolectric:robolectric from 4.13 to 4.16.1 (#153)
  • chore(deps): bump the security-crypto group across 1 directory with 3 updates (#159)
  • chore(deps): bump androidx.security:security-crypto (#152)
  • chore: ignore error/ and .claude/ directories
  • chore(release): v0.35.10 (#227)
  • chore(release): v0.35.9 (#226)
  • chore(release): v0.35.8 (#222)
  • chore(release): v0.35.7 (#221)
  • chore(release): v0.35.6 (#220)
  • chore(release): v0.35.5 (#219)
  • chore(release): v0.35.4 (#212)
  • chore(release): v0.35.3 (#211)
  • chore(release): v0.35.2 (#207)
  • chore(release): v0.35.1 (#205)
  • ci: add pipefail to font-budget positive control to detect gradle failure (#201)
  • chore(release): v0.35.0 (#199)
  • chore(release): v0.34.4 (#197)
  • chore(release): v0.34.3 (#195)
  • chore(release): v0.34.2 (#194)
  • chore(release): v0.34.1 (#191)
  • chore(release): v0.34.0 (#188)
  • chore(release): v0.33.22 (#186)
  • chore(release): v0.33.21 (#182)
  • chore(release): v0.33.20 (#180)
  • refactor: UI consolidation onto SessionRegistry (nav + sheet + terminal tabs) (#179)
  • chore(release): v0.33.19 (#178)
  • chore(release): v0.33.18 (#176)
  • chore(release): v0.33.17 (#174)
  • chore(release): v0.33.16 (#172)
  • chore(release): v0.33.15 (#170)
  • chore(release): v0.33.14 (#168)
  • chore(release): v0.33.13 (#163)
  • chore(release): v0.33.12 (#162)
  • chore(release): v0.33.11 (#157)
  • chore(release): v0.33.10 (#155)
  • chore(release): v0.33.9 (#143)
  • chore(release): v0.33.8 (#141)
  • docs(plan): Phase 15 Foldable UX + Storage Access Framework (#135)
  • chore(release): v0.33.7 (#134)
  • chore(release): v0.33.6 (#132)
  • chore(release): v0.33.5 (#130)
  • docs(phase14): document the three keyboard modes (#129)
  • chore(release): v0.33.4 (#125)
  • docs(plan): fold devil's-advocate findings into Phase 14 plan (#120)
  • docs(plan): Phase 14 Terminal Hybrid Keyboard plan (#119)
  • ci(deps): bump actions/cache from 4 to 5 (#114)
  • chore(release): v0.33.3 (#117)
  • chore(release): v0.33.2 (#116)
  • chore(release): v0.33.1 (#113)
  • chore(release): v0.33.0 (#109)
  • test(security): BiometricGate authenticate path via launcher seam (Tier 3 T3d) (#106)
  • test(transfer-engine): Robolectric coverage for TransferNotificationManager (Tier 3 T3c) (#105)
  • test(transfer-engine): instrumentation test infra + lifecycle test (Tier 3 T3a) (#104)
  • test(wear): OriWearCard Compose UI test infrastructure (Tier 3 T3b) (#103)
  • chore(security): promote material-icons + clipboard rules to ERROR (#102)
  • refactor(transfer-engine): FtpTransferExecutor owns its FTPClient (Tier 2 T2a) (#100)
  • refactor(connections): form primitives + credential clear on ViewModel death (Tier 2 T2d) (#98)
  • chore(deps): bump okhttp from 4.12.0 to 5.3.2 (#21)
  • chore(deps): bump the androidx group across 1 directory with 25 updates (#33)
  • chore(deps): bump the kotlin group across 1 directory with 3 updates (#22)
  • chore(deps): bump io.coil-kt.coil3:coil-compose from 3.1.0 to 3.4.0 (#27)
  • chore(deps): bump the testing group across 1 directory with 4 updates (#31)
  • chore(deps): bump commons-net:commons-net from 3.11.1 to 3.13.0 (#14)
  • chore(deps): bump androidx.core:core-splashscreen from 1.2.0-alpha02 to 1.2.0 (#12)
  • chore(deps): bump androidx.compose:compose-bom from 2026.03.00 to 2026.03.01 in the compose group across 1 directory (#3)
  • ci(deps): bump softprops/action-gh-release from 2 to 3 (#24)
  • ci(deps): bump actions/setup-java from 4 to 5 (#5)
  • ci(deps): bump actions/upload-artifact from 4 to 7 (#4)
  • ci(deps): bump actions/checkout from 4 to 6 (#2)
  • ci(deps): bump gradle/actions from 4 to 6 (#1)
  • refactor(terminal): migrate clipboard usage to OriClipboard (Tier 1 T1c) (#94)
  • refactor(connections): complete Material icon sweep (Tier 1 T1a) (#93)
  • refactor(editor): Lucide icons in SearchReplaceBar (Tier 1 T1b) (#92)
  • chore: opt into KT-73255 annotation-target-property to silence forward-compat warnings (#91)
  • chore(ci): add release build smoke test to pr-check.yml (TD3) (#90)

Ori:Dev v0.35.10

Choose a tag to compare

@github-actions github-actions released this 27 Apr 21:08

Release v0.35.10 · Signed with release keystore

Artifacts

  • oridev-*.aab / oridev-*.apk — Phone build (R8 minified)
  • oridev-wear-*.aab / oridev-wear-*.apk — Wear OS companion
  • oridev-*-mapping.txt — R8 deobfuscation map (upload to Play Console for stack traces)

Changes since v0.32.1

Features

  • feat(network): real SCP protocol implementation (v0.34.5) (#198)
  • feat: foldable split terminal (two tabs parallel on unfolded) (#187)
  • feat: opt-in full session resume (tabs, paths, last-tab) (#184)
  • feat(security): FLAG_SECURE toggle während aktiver SSH-Sessions (#183)
  • feat: Files polish + session-kill safety net (PR 3) (#181)
  • feat: SessionRegistry foundation — consolidate SSH-session state (#177)
  • feat(settings): Dummy-Rows aktivieren — 8 neue Picker-Dialoge (#169)
  • feat(connections): TOFU-Dialog für unbekannte/geänderte Host-Keys (#165)
  • feat(filemanager): Multi-Select-Toolbar mit Copy/Rename/Chmod/Info (#167)
  • feat(filemanager): replace legacy storage perms with SAF DocumentFile (#142)
  • feat(terminal): split CustomKeyboard for unfolded foldable (#140)
  • feat(filemanager): compact FileItemRow density (#138)
  • feat(terminal): drop Send-to-Claude FAB (#136)
  • feat(app): responsive top-level navigation — compact bar / rail (#139)
  • feat(terminal): KeyboardHost + resize debounce (Phase 14 Task 5) (#127)
  • feat(settings): keyboard style picker (Phase 14 Task 6) (#128)
  • feat(terminal): TerminalExtraKeys row (Phase 14 Task 4) (#126)
  • feat(terminal): TerminalImeAnchor (Phase 14 Task 2) (#122)
  • feat(terminal): ModifierState single source of truth (Phase 14 Task 3) (#124)
  • feat(domain): KeyboardMode + KeyboardPreferences (Phase 14 Task 1) (#121)
  • feat(ci): auto-release on master push + align RELEASE.md (#110)
  • feat: Phase 13 — Premium Features (Billing, Ads, Throttling, Chunks) (#107)
  • feat(transfer-engine): add TransferStatus.CANCELLED (Tier 2 T2b) (#101)
  • feat(wear): migrate 5 remaining screens to OriDevWearTheme (Tier 2 T2c) (#99)
  • feat(security): wire BiometricGate into credential unlock path (Tier 1 T1d) (#95)

Bug Fixes

  • fix(transfers): clear failed/cancelled rows and recover stale sessions on retry (Bugs N + O) (#224)
  • fix(filemanager): isolate row click from drag and translate Not connected (Bug K) (#225)
  • fix(connections): show TOFU dialog when openProfile hits unknown host key (Bug P) (#223)
  • fix(ssh): retry openShell once on Synology DSM channel-open race (Bug E) (#215)
  • fix(transfers): auto-reconnect SshTransferExecutor when session expired (Bug J) (#214)
  • fix(transfers): surface success Snackbar for Clear/PauseAll/CancelAll (#216)
  • fix(filemanager): use Compose drag-and-drop API for foldable cross-pane drops (#217)
  • fix(network): route SAF content:// URIs through SafSourceFile/SafDestFile in resumable transfers (#218)
  • fix(transfers): re-apply filter on tab switch (Bug H) (#213)
  • fix(network): notify SessionRegistry when SshSessionStore prunes a session (#210)
  • fix(terminal): atomic latch claim prevents focus+restore observer race (#208)
  • fix(filemanager): use active session profileId for transfers + wire context-menu Transfer button (#209)
  • fix(terminal): auto-open tab when ConnectionDetailSheet focuses a fresh session (#206)
  • fix(network): tolerate ACL/SELinux permission suffix in ScpListingParser (#200)
  • fix(network): getClient throws IOException so ViewModel catches route it (#196)
  • fix(service): switch ConnectionService to FGS specialUse (#193)
  • fix(network): prune disconnected SSH clients from session cache (#192)
  • fix(network): route withSftpClient through Dispatchers.IO (#190)
  • fix(settings): complete AppPreferencesSnapshot fixture in TransfersSectionTest (#185)
  • fix: Connect-Folgeschritte — Service-Typ, Session-Wiring, UI-State (#175)
  • fix(connections): Passwort im Edit prefillen, Connect-Pfad loggen (#173)
  • fix(connections): Passwörter tatsächlich im Keystore ablegen (#171)
  • fix(editor): Absturz beim Öffnen von Dateien auf Android 16 (#166)
  • fix(filemanager): SAF-Unterordner wieder auflistbar (#164)
  • fix(filemanager): BreadcrumbBar must not split SAF content URIs (#160)
  • fix(wear): exclude OSGI META-INF to unblock bcprov packaging (#161)
  • fix(ssh): replace Android's stripped BC provider so Ed25519 works (#158)
  • fix(ssh,filemanager): move connect to IO + null-safe SAF listFiles (#156)
  • fix(app): add NonFatalErrorLogger + dump connect failures to Downloads (#154)
  • fix(terminal): move imePadding to TerminalScreen root + gate ExtraKeys on isImeVisible (#137)
  • fix(app): install LocalCrashLogger BEFORE super.attachBaseContext (#133)
  • fix(app): add LocalCrashLogger that writes to Downloads on crash (#131)
  • fix(terminal): default split ratio to 50/50 (#118)
  • fix(ci): use RELEASE_PAT to push bump branch so CI triggers (#115)
  • fix(ci): move regex patterns into variables for bash parser (#112)
  • fix(ci): correct bash glob syntax for chore(release) skip pattern (#111)
  • fix(ci): add pull-requests: write permission to release workflow (#108)
  • fix(ci): release workflow manual-only, PR-based version bump (#97)
  • fix(ci): serialize release workflow + retry-rebase push loop (#96)

Other

  • chore(release): v0.35.9 (#226)
  • chore(release): v0.35.8 (#222)
  • chore(release): v0.35.7 (#221)
  • chore(release): v0.35.6 (#220)
  • chore(release): v0.35.5 (#219)
  • chore(release): v0.35.4 (#212)
  • chore(release): v0.35.3 (#211)
  • chore(release): v0.35.2 (#207)
  • chore(release): v0.35.1 (#205)
  • ci: add pipefail to font-budget positive control to detect gradle failure (#201)
  • chore(release): v0.35.0 (#199)
  • chore(release): v0.34.4 (#197)
  • chore(release): v0.34.3 (#195)
  • chore(release): v0.34.2 (#194)
  • chore(release): v0.34.1 (#191)
  • chore(release): v0.34.0 (#188)
  • chore(release): v0.33.22 (#186)
  • chore(release): v0.33.21 (#182)
  • chore(release): v0.33.20 (#180)
  • refactor: UI consolidation onto SessionRegistry (nav + sheet + terminal tabs) (#179)
  • chore(release): v0.33.19 (#178)
  • chore(release): v0.33.18 (#176)
  • chore(release): v0.33.17 (#174)
  • chore(release): v0.33.16 (#172)
  • chore(release): v0.33.15 (#170)
  • chore(release): v0.33.14 (#168)
  • chore(release): v0.33.13 (#163)
  • chore(release): v0.33.12 (#162)
  • chore(release): v0.33.11 (#157)
  • chore(release): v0.33.10 (#155)
  • chore(release): v0.33.9 (#143)
  • chore(release): v0.33.8 (#141)
  • docs(plan): Phase 15 Foldable UX + Storage Access Framework (#135)
  • chore(release): v0.33.7 (#134)
  • chore(release): v0.33.6 (#132)
  • chore(release): v0.33.5 (#130)
  • docs(phase14): document the three keyboard modes (#129)
  • chore(release): v0.33.4 (#125)
  • docs(plan): fold devil's-advocate findings into Phase 14 plan (#120)
  • docs(plan): Phase 14 Terminal Hybrid Keyboard plan (#119)
  • ci(deps): bump actions/cache from 4 to 5 (#114)
  • chore(release): v0.33.3 (#117)
  • chore(release): v0.33.2 (#116)
  • chore(release): v0.33.1 (#113)
  • chore(release): v0.33.0 (#109)
  • test(security): BiometricGate authenticate path via launcher seam (Tier 3 T3d) (#106)
  • test(transfer-engine): Robolectric coverage for TransferNotificationManager (Tier 3 T3c) (#105)
  • test(transfer-engine): instrumentation test infra + lifecycle test (Tier 3 T3a) (#104)
  • test(wear): OriWearCard Compose UI test infrastructure (Tier 3 T3b) (#103)
  • chore(security): promote material-icons + clipboard rules to ERROR (#102)
  • refactor(transfer-engine): FtpTransferExecutor owns its FTPClient (Tier 2 T2a) (#100)
  • refactor(connections): form primitives + credential clear on ViewModel death (Tier 2 T2d) (#98)
  • chore(deps): bump okhttp from 4.12.0 to 5.3.2 (#21)
  • chore(deps): bump the androidx group across 1 directory with 25 updates (#33)
  • chore(deps): bump the kotlin group across 1 directory with 3 updates (#22)
  • chore(deps): bump io.coil-kt.coil3:coil-compose from 3.1.0 to 3.4.0 (#27)
  • chore(deps): bump the testing group across 1 directory with 4 updates (#31)
  • chore(deps): bump commons-net:commons-net from 3.11.1 to 3.13.0 (#14)
  • chore(deps): bump androidx.core:core-splashscreen from 1.2.0-alpha02 to 1.2.0 (#12)
  • chore(deps): bump androidx.compose:compose-bom from 2026.03.00 to 2026.03.01 in the compose group across 1 directory (#3)
  • ci(deps): bump softprops/action-gh-release from 2 to 3 (#24)
  • ci(deps): bump actions/setup-java from 4 to 5 (#5)
  • ci(deps): bump actions/upload-artifact from 4 to 7 (#4)
  • ci(deps): bump actions/checkout from 4 to 6 (#2)
  • ci(deps): bump gradle/actions from 4 to 6 (#1)
  • refactor(terminal): migrate clipboard usage to OriClipboard (Tier 1 T1c) (#94)
  • refactor(connections): complete Material icon sweep (Tier 1 T1a) (#93)
  • refactor(editor): Lucide icons in SearchReplaceBar (Tier 1 T1b) (#92)
  • chore: opt into KT-73255 annotation-target-property to silence forward-compat warnings (#91)
  • chore(ci): add release build smoke test to pr-check.yml (TD3) (#90)

Ori:Dev v0.35.9

Choose a tag to compare

@github-actions github-actions released this 27 Apr 19:40

Release v0.35.9 · Signed with release keystore

Artifacts

  • oridev-*.aab / oridev-*.apk — Phone build (R8 minified)
  • oridev-wear-*.aab / oridev-wear-*.apk — Wear OS companion
  • oridev-*-mapping.txt — R8 deobfuscation map (upload to Play Console for stack traces)

Changes since v0.32.1

Features

  • feat(network): real SCP protocol implementation (v0.34.5) (#198)
  • feat: foldable split terminal (two tabs parallel on unfolded) (#187)
  • feat: opt-in full session resume (tabs, paths, last-tab) (#184)
  • feat(security): FLAG_SECURE toggle während aktiver SSH-Sessions (#183)
  • feat: Files polish + session-kill safety net (PR 3) (#181)
  • feat: SessionRegistry foundation — consolidate SSH-session state (#177)
  • feat(settings): Dummy-Rows aktivieren — 8 neue Picker-Dialoge (#169)
  • feat(connections): TOFU-Dialog für unbekannte/geänderte Host-Keys (#165)
  • feat(filemanager): Multi-Select-Toolbar mit Copy/Rename/Chmod/Info (#167)
  • feat(filemanager): replace legacy storage perms with SAF DocumentFile (#142)
  • feat(terminal): split CustomKeyboard for unfolded foldable (#140)
  • feat(filemanager): compact FileItemRow density (#138)
  • feat(terminal): drop Send-to-Claude FAB (#136)
  • feat(app): responsive top-level navigation — compact bar / rail (#139)
  • feat(terminal): KeyboardHost + resize debounce (Phase 14 Task 5) (#127)
  • feat(settings): keyboard style picker (Phase 14 Task 6) (#128)
  • feat(terminal): TerminalExtraKeys row (Phase 14 Task 4) (#126)
  • feat(terminal): TerminalImeAnchor (Phase 14 Task 2) (#122)
  • feat(terminal): ModifierState single source of truth (Phase 14 Task 3) (#124)
  • feat(domain): KeyboardMode + KeyboardPreferences (Phase 14 Task 1) (#121)
  • feat(ci): auto-release on master push + align RELEASE.md (#110)
  • feat: Phase 13 — Premium Features (Billing, Ads, Throttling, Chunks) (#107)
  • feat(transfer-engine): add TransferStatus.CANCELLED (Tier 2 T2b) (#101)
  • feat(wear): migrate 5 remaining screens to OriDevWearTheme (Tier 2 T2c) (#99)
  • feat(security): wire BiometricGate into credential unlock path (Tier 1 T1d) (#95)

Bug Fixes

  • fix(connections): show TOFU dialog when openProfile hits unknown host key (Bug P) (#223)
  • fix(ssh): retry openShell once on Synology DSM channel-open race (Bug E) (#215)
  • fix(transfers): auto-reconnect SshTransferExecutor when session expired (Bug J) (#214)
  • fix(transfers): surface success Snackbar for Clear/PauseAll/CancelAll (#216)
  • fix(filemanager): use Compose drag-and-drop API for foldable cross-pane drops (#217)
  • fix(network): route SAF content:// URIs through SafSourceFile/SafDestFile in resumable transfers (#218)
  • fix(transfers): re-apply filter on tab switch (Bug H) (#213)
  • fix(network): notify SessionRegistry when SshSessionStore prunes a session (#210)
  • fix(terminal): atomic latch claim prevents focus+restore observer race (#208)
  • fix(filemanager): use active session profileId for transfers + wire context-menu Transfer button (#209)
  • fix(terminal): auto-open tab when ConnectionDetailSheet focuses a fresh session (#206)
  • fix(network): tolerate ACL/SELinux permission suffix in ScpListingParser (#200)
  • fix(network): getClient throws IOException so ViewModel catches route it (#196)
  • fix(service): switch ConnectionService to FGS specialUse (#193)
  • fix(network): prune disconnected SSH clients from session cache (#192)
  • fix(network): route withSftpClient through Dispatchers.IO (#190)
  • fix(settings): complete AppPreferencesSnapshot fixture in TransfersSectionTest (#185)
  • fix: Connect-Folgeschritte — Service-Typ, Session-Wiring, UI-State (#175)
  • fix(connections): Passwort im Edit prefillen, Connect-Pfad loggen (#173)
  • fix(connections): Passwörter tatsächlich im Keystore ablegen (#171)
  • fix(editor): Absturz beim Öffnen von Dateien auf Android 16 (#166)
  • fix(filemanager): SAF-Unterordner wieder auflistbar (#164)
  • fix(filemanager): BreadcrumbBar must not split SAF content URIs (#160)
  • fix(wear): exclude OSGI META-INF to unblock bcprov packaging (#161)
  • fix(ssh): replace Android's stripped BC provider so Ed25519 works (#158)
  • fix(ssh,filemanager): move connect to IO + null-safe SAF listFiles (#156)
  • fix(app): add NonFatalErrorLogger + dump connect failures to Downloads (#154)
  • fix(terminal): move imePadding to TerminalScreen root + gate ExtraKeys on isImeVisible (#137)
  • fix(app): install LocalCrashLogger BEFORE super.attachBaseContext (#133)
  • fix(app): add LocalCrashLogger that writes to Downloads on crash (#131)
  • fix(terminal): default split ratio to 50/50 (#118)
  • fix(ci): use RELEASE_PAT to push bump branch so CI triggers (#115)
  • fix(ci): move regex patterns into variables for bash parser (#112)
  • fix(ci): correct bash glob syntax for chore(release) skip pattern (#111)
  • fix(ci): add pull-requests: write permission to release workflow (#108)
  • fix(ci): release workflow manual-only, PR-based version bump (#97)
  • fix(ci): serialize release workflow + retry-rebase push loop (#96)

Other

  • chore(release): v0.35.8 (#222)
  • chore(release): v0.35.7 (#221)
  • chore(release): v0.35.6 (#220)
  • chore(release): v0.35.5 (#219)
  • chore(release): v0.35.4 (#212)
  • chore(release): v0.35.3 (#211)
  • chore(release): v0.35.2 (#207)
  • chore(release): v0.35.1 (#205)
  • ci: add pipefail to font-budget positive control to detect gradle failure (#201)
  • chore(release): v0.35.0 (#199)
  • chore(release): v0.34.4 (#197)
  • chore(release): v0.34.3 (#195)
  • chore(release): v0.34.2 (#194)
  • chore(release): v0.34.1 (#191)
  • chore(release): v0.34.0 (#188)
  • chore(release): v0.33.22 (#186)
  • chore(release): v0.33.21 (#182)
  • chore(release): v0.33.20 (#180)
  • refactor: UI consolidation onto SessionRegistry (nav + sheet + terminal tabs) (#179)
  • chore(release): v0.33.19 (#178)
  • chore(release): v0.33.18 (#176)
  • chore(release): v0.33.17 (#174)
  • chore(release): v0.33.16 (#172)
  • chore(release): v0.33.15 (#170)
  • chore(release): v0.33.14 (#168)
  • chore(release): v0.33.13 (#163)
  • chore(release): v0.33.12 (#162)
  • chore(release): v0.33.11 (#157)
  • chore(release): v0.33.10 (#155)
  • chore(release): v0.33.9 (#143)
  • chore(release): v0.33.8 (#141)
  • docs(plan): Phase 15 Foldable UX + Storage Access Framework (#135)
  • chore(release): v0.33.7 (#134)
  • chore(release): v0.33.6 (#132)
  • chore(release): v0.33.5 (#130)
  • docs(phase14): document the three keyboard modes (#129)
  • chore(release): v0.33.4 (#125)
  • docs(plan): fold devil's-advocate findings into Phase 14 plan (#120)
  • docs(plan): Phase 14 Terminal Hybrid Keyboard plan (#119)
  • ci(deps): bump actions/cache from 4 to 5 (#114)
  • chore(release): v0.33.3 (#117)
  • chore(release): v0.33.2 (#116)
  • chore(release): v0.33.1 (#113)
  • chore(release): v0.33.0 (#109)
  • test(security): BiometricGate authenticate path via launcher seam (Tier 3 T3d) (#106)
  • test(transfer-engine): Robolectric coverage for TransferNotificationManager (Tier 3 T3c) (#105)
  • test(transfer-engine): instrumentation test infra + lifecycle test (Tier 3 T3a) (#104)
  • test(wear): OriWearCard Compose UI test infrastructure (Tier 3 T3b) (#103)
  • chore(security): promote material-icons + clipboard rules to ERROR (#102)
  • refactor(transfer-engine): FtpTransferExecutor owns its FTPClient (Tier 2 T2a) (#100)
  • refactor(connections): form primitives + credential clear on ViewModel death (Tier 2 T2d) (#98)
  • chore(deps): bump okhttp from 4.12.0 to 5.3.2 (#21)
  • chore(deps): bump the androidx group across 1 directory with 25 updates (#33)
  • chore(deps): bump the kotlin group across 1 directory with 3 updates (#22)
  • chore(deps): bump io.coil-kt.coil3:coil-compose from 3.1.0 to 3.4.0 (#27)
  • chore(deps): bump the testing group across 1 directory with 4 updates (#31)
  • chore(deps): bump commons-net:commons-net from 3.11.1 to 3.13.0 (#14)
  • chore(deps): bump androidx.core:core-splashscreen from 1.2.0-alpha02 to 1.2.0 (#12)
  • chore(deps): bump androidx.compose:compose-bom from 2026.03.00 to 2026.03.01 in the compose group across 1 directory (#3)
  • ci(deps): bump softprops/action-gh-release from 2 to 3 (#24)
  • ci(deps): bump actions/setup-java from 4 to 5 (#5)
  • ci(deps): bump actions/upload-artifact from 4 to 7 (#4)
  • ci(deps): bump actions/checkout from 4 to 6 (#2)
  • ci(deps): bump gradle/actions from 4 to 6 (#1)
  • refactor(terminal): migrate clipboard usage to OriClipboard (Tier 1 T1c) (#94)
  • refactor(connections): complete Material icon sweep (Tier 1 T1a) (#93)
  • refactor(editor): Lucide icons in SearchReplaceBar (Tier 1 T1b) (#92)
  • chore: opt into KT-73255 annotation-target-property to silence forward-compat warnings (#91)
  • chore(ci): add release build smoke test to pr-check.yml (TD3) (#90)

Ori:Dev v0.35.8

Choose a tag to compare

@github-actions github-actions released this 27 Apr 17:46

Release v0.35.8 · Signed with release keystore

Artifacts

  • oridev-*.aab / oridev-*.apk — Phone build (R8 minified)
  • oridev-wear-*.aab / oridev-wear-*.apk — Wear OS companion
  • oridev-*-mapping.txt — R8 deobfuscation map (upload to Play Console for stack traces)

Changes since v0.32.1

Features

  • feat(network): real SCP protocol implementation (v0.34.5) (#198)
  • feat: foldable split terminal (two tabs parallel on unfolded) (#187)
  • feat: opt-in full session resume (tabs, paths, last-tab) (#184)
  • feat(security): FLAG_SECURE toggle während aktiver SSH-Sessions (#183)
  • feat: Files polish + session-kill safety net (PR 3) (#181)
  • feat: SessionRegistry foundation — consolidate SSH-session state (#177)
  • feat(settings): Dummy-Rows aktivieren — 8 neue Picker-Dialoge (#169)
  • feat(connections): TOFU-Dialog für unbekannte/geänderte Host-Keys (#165)
  • feat(filemanager): Multi-Select-Toolbar mit Copy/Rename/Chmod/Info (#167)
  • feat(filemanager): replace legacy storage perms with SAF DocumentFile (#142)
  • feat(terminal): split CustomKeyboard for unfolded foldable (#140)
  • feat(filemanager): compact FileItemRow density (#138)
  • feat(terminal): drop Send-to-Claude FAB (#136)
  • feat(app): responsive top-level navigation — compact bar / rail (#139)
  • feat(terminal): KeyboardHost + resize debounce (Phase 14 Task 5) (#127)
  • feat(settings): keyboard style picker (Phase 14 Task 6) (#128)
  • feat(terminal): TerminalExtraKeys row (Phase 14 Task 4) (#126)
  • feat(terminal): TerminalImeAnchor (Phase 14 Task 2) (#122)
  • feat(terminal): ModifierState single source of truth (Phase 14 Task 3) (#124)
  • feat(domain): KeyboardMode + KeyboardPreferences (Phase 14 Task 1) (#121)
  • feat(ci): auto-release on master push + align RELEASE.md (#110)
  • feat: Phase 13 — Premium Features (Billing, Ads, Throttling, Chunks) (#107)
  • feat(transfer-engine): add TransferStatus.CANCELLED (Tier 2 T2b) (#101)
  • feat(wear): migrate 5 remaining screens to OriDevWearTheme (Tier 2 T2c) (#99)
  • feat(security): wire BiometricGate into credential unlock path (Tier 1 T1d) (#95)

Bug Fixes

  • fix(ssh): retry openShell once on Synology DSM channel-open race (Bug E) (#215)
  • fix(transfers): auto-reconnect SshTransferExecutor when session expired (Bug J) (#214)
  • fix(transfers): surface success Snackbar for Clear/PauseAll/CancelAll (#216)
  • fix(filemanager): use Compose drag-and-drop API for foldable cross-pane drops (#217)
  • fix(network): route SAF content:// URIs through SafSourceFile/SafDestFile in resumable transfers (#218)
  • fix(transfers): re-apply filter on tab switch (Bug H) (#213)
  • fix(network): notify SessionRegistry when SshSessionStore prunes a session (#210)
  • fix(terminal): atomic latch claim prevents focus+restore observer race (#208)
  • fix(filemanager): use active session profileId for transfers + wire context-menu Transfer button (#209)
  • fix(terminal): auto-open tab when ConnectionDetailSheet focuses a fresh session (#206)
  • fix(network): tolerate ACL/SELinux permission suffix in ScpListingParser (#200)
  • fix(network): getClient throws IOException so ViewModel catches route it (#196)
  • fix(service): switch ConnectionService to FGS specialUse (#193)
  • fix(network): prune disconnected SSH clients from session cache (#192)
  • fix(network): route withSftpClient through Dispatchers.IO (#190)
  • fix(settings): complete AppPreferencesSnapshot fixture in TransfersSectionTest (#185)
  • fix: Connect-Folgeschritte — Service-Typ, Session-Wiring, UI-State (#175)
  • fix(connections): Passwort im Edit prefillen, Connect-Pfad loggen (#173)
  • fix(connections): Passwörter tatsächlich im Keystore ablegen (#171)
  • fix(editor): Absturz beim Öffnen von Dateien auf Android 16 (#166)
  • fix(filemanager): SAF-Unterordner wieder auflistbar (#164)
  • fix(filemanager): BreadcrumbBar must not split SAF content URIs (#160)
  • fix(wear): exclude OSGI META-INF to unblock bcprov packaging (#161)
  • fix(ssh): replace Android's stripped BC provider so Ed25519 works (#158)
  • fix(ssh,filemanager): move connect to IO + null-safe SAF listFiles (#156)
  • fix(app): add NonFatalErrorLogger + dump connect failures to Downloads (#154)
  • fix(terminal): move imePadding to TerminalScreen root + gate ExtraKeys on isImeVisible (#137)
  • fix(app): install LocalCrashLogger BEFORE super.attachBaseContext (#133)
  • fix(app): add LocalCrashLogger that writes to Downloads on crash (#131)
  • fix(terminal): default split ratio to 50/50 (#118)
  • fix(ci): use RELEASE_PAT to push bump branch so CI triggers (#115)
  • fix(ci): move regex patterns into variables for bash parser (#112)
  • fix(ci): correct bash glob syntax for chore(release) skip pattern (#111)
  • fix(ci): add pull-requests: write permission to release workflow (#108)
  • fix(ci): release workflow manual-only, PR-based version bump (#97)
  • fix(ci): serialize release workflow + retry-rebase push loop (#96)

Other

  • chore(release): v0.35.7 (#221)
  • chore(release): v0.35.6 (#220)
  • chore(release): v0.35.5 (#219)
  • chore(release): v0.35.4 (#212)
  • chore(release): v0.35.3 (#211)
  • chore(release): v0.35.2 (#207)
  • chore(release): v0.35.1 (#205)
  • ci: add pipefail to font-budget positive control to detect gradle failure (#201)
  • chore(release): v0.35.0 (#199)
  • chore(release): v0.34.4 (#197)
  • chore(release): v0.34.3 (#195)
  • chore(release): v0.34.2 (#194)
  • chore(release): v0.34.1 (#191)
  • chore(release): v0.34.0 (#188)
  • chore(release): v0.33.22 (#186)
  • chore(release): v0.33.21 (#182)
  • chore(release): v0.33.20 (#180)
  • refactor: UI consolidation onto SessionRegistry (nav + sheet + terminal tabs) (#179)
  • chore(release): v0.33.19 (#178)
  • chore(release): v0.33.18 (#176)
  • chore(release): v0.33.17 (#174)
  • chore(release): v0.33.16 (#172)
  • chore(release): v0.33.15 (#170)
  • chore(release): v0.33.14 (#168)
  • chore(release): v0.33.13 (#163)
  • chore(release): v0.33.12 (#162)
  • chore(release): v0.33.11 (#157)
  • chore(release): v0.33.10 (#155)
  • chore(release): v0.33.9 (#143)
  • chore(release): v0.33.8 (#141)
  • docs(plan): Phase 15 Foldable UX + Storage Access Framework (#135)
  • chore(release): v0.33.7 (#134)
  • chore(release): v0.33.6 (#132)
  • chore(release): v0.33.5 (#130)
  • docs(phase14): document the three keyboard modes (#129)
  • chore(release): v0.33.4 (#125)
  • docs(plan): fold devil's-advocate findings into Phase 14 plan (#120)
  • docs(plan): Phase 14 Terminal Hybrid Keyboard plan (#119)
  • ci(deps): bump actions/cache from 4 to 5 (#114)
  • chore(release): v0.33.3 (#117)
  • chore(release): v0.33.2 (#116)
  • chore(release): v0.33.1 (#113)
  • chore(release): v0.33.0 (#109)
  • test(security): BiometricGate authenticate path via launcher seam (Tier 3 T3d) (#106)
  • test(transfer-engine): Robolectric coverage for TransferNotificationManager (Tier 3 T3c) (#105)
  • test(transfer-engine): instrumentation test infra + lifecycle test (Tier 3 T3a) (#104)
  • test(wear): OriWearCard Compose UI test infrastructure (Tier 3 T3b) (#103)
  • chore(security): promote material-icons + clipboard rules to ERROR (#102)
  • refactor(transfer-engine): FtpTransferExecutor owns its FTPClient (Tier 2 T2a) (#100)
  • refactor(connections): form primitives + credential clear on ViewModel death (Tier 2 T2d) (#98)
  • chore(deps): bump okhttp from 4.12.0 to 5.3.2 (#21)
  • chore(deps): bump the androidx group across 1 directory with 25 updates (#33)
  • chore(deps): bump the kotlin group across 1 directory with 3 updates (#22)
  • chore(deps): bump io.coil-kt.coil3:coil-compose from 3.1.0 to 3.4.0 (#27)
  • chore(deps): bump the testing group across 1 directory with 4 updates (#31)
  • chore(deps): bump commons-net:commons-net from 3.11.1 to 3.13.0 (#14)
  • chore(deps): bump androidx.core:core-splashscreen from 1.2.0-alpha02 to 1.2.0 (#12)
  • chore(deps): bump androidx.compose:compose-bom from 2026.03.00 to 2026.03.01 in the compose group across 1 directory (#3)
  • ci(deps): bump softprops/action-gh-release from 2 to 3 (#24)
  • ci(deps): bump actions/setup-java from 4 to 5 (#5)
  • ci(deps): bump actions/upload-artifact from 4 to 7 (#4)
  • ci(deps): bump actions/checkout from 4 to 6 (#2)
  • ci(deps): bump gradle/actions from 4 to 6 (#1)
  • refactor(terminal): migrate clipboard usage to OriClipboard (Tier 1 T1c) (#94)
  • refactor(connections): complete Material icon sweep (Tier 1 T1a) (#93)
  • refactor(editor): Lucide icons in SearchReplaceBar (Tier 1 T1b) (#92)
  • chore: opt into KT-73255 annotation-target-property to silence forward-compat warnings (#91)
  • chore(ci): add release build smoke test to pr-check.yml (TD3) (#90)

Ori:Dev v0.35.7

Choose a tag to compare

@github-actions github-actions released this 27 Apr 16:45

Release v0.35.7 · Signed with release keystore

Artifacts

  • oridev-*.aab / oridev-*.apk — Phone build (R8 minified)
  • oridev-wear-*.aab / oridev-wear-*.apk — Wear OS companion
  • oridev-*-mapping.txt — R8 deobfuscation map (upload to Play Console for stack traces)

Changes since v0.32.1

Features

  • feat(network): real SCP protocol implementation (v0.34.5) (#198)
  • feat: foldable split terminal (two tabs parallel on unfolded) (#187)
  • feat: opt-in full session resume (tabs, paths, last-tab) (#184)
  • feat(security): FLAG_SECURE toggle während aktiver SSH-Sessions (#183)
  • feat: Files polish + session-kill safety net (PR 3) (#181)
  • feat: SessionRegistry foundation — consolidate SSH-session state (#177)
  • feat(settings): Dummy-Rows aktivieren — 8 neue Picker-Dialoge (#169)
  • feat(connections): TOFU-Dialog für unbekannte/geänderte Host-Keys (#165)
  • feat(filemanager): Multi-Select-Toolbar mit Copy/Rename/Chmod/Info (#167)
  • feat(filemanager): replace legacy storage perms with SAF DocumentFile (#142)
  • feat(terminal): split CustomKeyboard for unfolded foldable (#140)
  • feat(filemanager): compact FileItemRow density (#138)
  • feat(terminal): drop Send-to-Claude FAB (#136)
  • feat(app): responsive top-level navigation — compact bar / rail (#139)
  • feat(terminal): KeyboardHost + resize debounce (Phase 14 Task 5) (#127)
  • feat(settings): keyboard style picker (Phase 14 Task 6) (#128)
  • feat(terminal): TerminalExtraKeys row (Phase 14 Task 4) (#126)
  • feat(terminal): TerminalImeAnchor (Phase 14 Task 2) (#122)
  • feat(terminal): ModifierState single source of truth (Phase 14 Task 3) (#124)
  • feat(domain): KeyboardMode + KeyboardPreferences (Phase 14 Task 1) (#121)
  • feat(ci): auto-release on master push + align RELEASE.md (#110)
  • feat: Phase 13 — Premium Features (Billing, Ads, Throttling, Chunks) (#107)
  • feat(transfer-engine): add TransferStatus.CANCELLED (Tier 2 T2b) (#101)
  • feat(wear): migrate 5 remaining screens to OriDevWearTheme (Tier 2 T2c) (#99)
  • feat(security): wire BiometricGate into credential unlock path (Tier 1 T1d) (#95)

Bug Fixes

  • fix(transfers): auto-reconnect SshTransferExecutor when session expired (Bug J) (#214)
  • fix(transfers): surface success Snackbar for Clear/PauseAll/CancelAll (#216)
  • fix(filemanager): use Compose drag-and-drop API for foldable cross-pane drops (#217)
  • fix(network): route SAF content:// URIs through SafSourceFile/SafDestFile in resumable transfers (#218)
  • fix(transfers): re-apply filter on tab switch (Bug H) (#213)
  • fix(network): notify SessionRegistry when SshSessionStore prunes a session (#210)
  • fix(terminal): atomic latch claim prevents focus+restore observer race (#208)
  • fix(filemanager): use active session profileId for transfers + wire context-menu Transfer button (#209)
  • fix(terminal): auto-open tab when ConnectionDetailSheet focuses a fresh session (#206)
  • fix(network): tolerate ACL/SELinux permission suffix in ScpListingParser (#200)
  • fix(network): getClient throws IOException so ViewModel catches route it (#196)
  • fix(service): switch ConnectionService to FGS specialUse (#193)
  • fix(network): prune disconnected SSH clients from session cache (#192)
  • fix(network): route withSftpClient through Dispatchers.IO (#190)
  • fix(settings): complete AppPreferencesSnapshot fixture in TransfersSectionTest (#185)
  • fix: Connect-Folgeschritte — Service-Typ, Session-Wiring, UI-State (#175)
  • fix(connections): Passwort im Edit prefillen, Connect-Pfad loggen (#173)
  • fix(connections): Passwörter tatsächlich im Keystore ablegen (#171)
  • fix(editor): Absturz beim Öffnen von Dateien auf Android 16 (#166)
  • fix(filemanager): SAF-Unterordner wieder auflistbar (#164)
  • fix(filemanager): BreadcrumbBar must not split SAF content URIs (#160)
  • fix(wear): exclude OSGI META-INF to unblock bcprov packaging (#161)
  • fix(ssh): replace Android's stripped BC provider so Ed25519 works (#158)
  • fix(ssh,filemanager): move connect to IO + null-safe SAF listFiles (#156)
  • fix(app): add NonFatalErrorLogger + dump connect failures to Downloads (#154)
  • fix(terminal): move imePadding to TerminalScreen root + gate ExtraKeys on isImeVisible (#137)
  • fix(app): install LocalCrashLogger BEFORE super.attachBaseContext (#133)
  • fix(app): add LocalCrashLogger that writes to Downloads on crash (#131)
  • fix(terminal): default split ratio to 50/50 (#118)
  • fix(ci): use RELEASE_PAT to push bump branch so CI triggers (#115)
  • fix(ci): move regex patterns into variables for bash parser (#112)
  • fix(ci): correct bash glob syntax for chore(release) skip pattern (#111)
  • fix(ci): add pull-requests: write permission to release workflow (#108)
  • fix(ci): release workflow manual-only, PR-based version bump (#97)
  • fix(ci): serialize release workflow + retry-rebase push loop (#96)

Other

  • chore(release): v0.35.6 (#220)
  • chore(release): v0.35.5 (#219)
  • chore(release): v0.35.4 (#212)
  • chore(release): v0.35.3 (#211)
  • chore(release): v0.35.2 (#207)
  • chore(release): v0.35.1 (#205)
  • ci: add pipefail to font-budget positive control to detect gradle failure (#201)
  • chore(release): v0.35.0 (#199)
  • chore(release): v0.34.4 (#197)
  • chore(release): v0.34.3 (#195)
  • chore(release): v0.34.2 (#194)
  • chore(release): v0.34.1 (#191)
  • chore(release): v0.34.0 (#188)
  • chore(release): v0.33.22 (#186)
  • chore(release): v0.33.21 (#182)
  • chore(release): v0.33.20 (#180)
  • refactor: UI consolidation onto SessionRegistry (nav + sheet + terminal tabs) (#179)
  • chore(release): v0.33.19 (#178)
  • chore(release): v0.33.18 (#176)
  • chore(release): v0.33.17 (#174)
  • chore(release): v0.33.16 (#172)
  • chore(release): v0.33.15 (#170)
  • chore(release): v0.33.14 (#168)
  • chore(release): v0.33.13 (#163)
  • chore(release): v0.33.12 (#162)
  • chore(release): v0.33.11 (#157)
  • chore(release): v0.33.10 (#155)
  • chore(release): v0.33.9 (#143)
  • chore(release): v0.33.8 (#141)
  • docs(plan): Phase 15 Foldable UX + Storage Access Framework (#135)
  • chore(release): v0.33.7 (#134)
  • chore(release): v0.33.6 (#132)
  • chore(release): v0.33.5 (#130)
  • docs(phase14): document the three keyboard modes (#129)
  • chore(release): v0.33.4 (#125)
  • docs(plan): fold devil's-advocate findings into Phase 14 plan (#120)
  • docs(plan): Phase 14 Terminal Hybrid Keyboard plan (#119)
  • ci(deps): bump actions/cache from 4 to 5 (#114)
  • chore(release): v0.33.3 (#117)
  • chore(release): v0.33.2 (#116)
  • chore(release): v0.33.1 (#113)
  • chore(release): v0.33.0 (#109)
  • test(security): BiometricGate authenticate path via launcher seam (Tier 3 T3d) (#106)
  • test(transfer-engine): Robolectric coverage for TransferNotificationManager (Tier 3 T3c) (#105)
  • test(transfer-engine): instrumentation test infra + lifecycle test (Tier 3 T3a) (#104)
  • test(wear): OriWearCard Compose UI test infrastructure (Tier 3 T3b) (#103)
  • chore(security): promote material-icons + clipboard rules to ERROR (#102)
  • refactor(transfer-engine): FtpTransferExecutor owns its FTPClient (Tier 2 T2a) (#100)
  • refactor(connections): form primitives + credential clear on ViewModel death (Tier 2 T2d) (#98)
  • chore(deps): bump okhttp from 4.12.0 to 5.3.2 (#21)
  • chore(deps): bump the androidx group across 1 directory with 25 updates (#33)
  • chore(deps): bump the kotlin group across 1 directory with 3 updates (#22)
  • chore(deps): bump io.coil-kt.coil3:coil-compose from 3.1.0 to 3.4.0 (#27)
  • chore(deps): bump the testing group across 1 directory with 4 updates (#31)
  • chore(deps): bump commons-net:commons-net from 3.11.1 to 3.13.0 (#14)
  • chore(deps): bump androidx.core:core-splashscreen from 1.2.0-alpha02 to 1.2.0 (#12)
  • chore(deps): bump androidx.compose:compose-bom from 2026.03.00 to 2026.03.01 in the compose group across 1 directory (#3)
  • ci(deps): bump softprops/action-gh-release from 2 to 3 (#24)
  • ci(deps): bump actions/setup-java from 4 to 5 (#5)
  • ci(deps): bump actions/upload-artifact from 4 to 7 (#4)
  • ci(deps): bump actions/checkout from 4 to 6 (#2)
  • ci(deps): bump gradle/actions from 4 to 6 (#1)
  • refactor(terminal): migrate clipboard usage to OriClipboard (Tier 1 T1c) (#94)
  • refactor(connections): complete Material icon sweep (Tier 1 T1a) (#93)
  • refactor(editor): Lucide icons in SearchReplaceBar (Tier 1 T1b) (#92)
  • chore: opt into KT-73255 annotation-target-property to silence forward-compat warnings (#91)
  • chore(ci): add release build smoke test to pr-check.yml (TD3) (#90)

Ori:Dev v0.35.6

Choose a tag to compare

@github-actions github-actions released this 27 Apr 15:07

Release v0.35.6 · Signed with release keystore

Artifacts

  • oridev-*.aab / oridev-*.apk — Phone build (R8 minified)
  • oridev-wear-*.aab / oridev-wear-*.apk — Wear OS companion
  • oridev-*-mapping.txt — R8 deobfuscation map (upload to Play Console for stack traces)

Changes since v0.32.1

Features

  • feat(network): real SCP protocol implementation (v0.34.5) (#198)
  • feat: foldable split terminal (two tabs parallel on unfolded) (#187)
  • feat: opt-in full session resume (tabs, paths, last-tab) (#184)
  • feat(security): FLAG_SECURE toggle während aktiver SSH-Sessions (#183)
  • feat: Files polish + session-kill safety net (PR 3) (#181)
  • feat: SessionRegistry foundation — consolidate SSH-session state (#177)
  • feat(settings): Dummy-Rows aktivieren — 8 neue Picker-Dialoge (#169)
  • feat(connections): TOFU-Dialog für unbekannte/geänderte Host-Keys (#165)
  • feat(filemanager): Multi-Select-Toolbar mit Copy/Rename/Chmod/Info (#167)
  • feat(filemanager): replace legacy storage perms with SAF DocumentFile (#142)
  • feat(terminal): split CustomKeyboard for unfolded foldable (#140)
  • feat(filemanager): compact FileItemRow density (#138)
  • feat(terminal): drop Send-to-Claude FAB (#136)
  • feat(app): responsive top-level navigation — compact bar / rail (#139)
  • feat(terminal): KeyboardHost + resize debounce (Phase 14 Task 5) (#127)
  • feat(settings): keyboard style picker (Phase 14 Task 6) (#128)
  • feat(terminal): TerminalExtraKeys row (Phase 14 Task 4) (#126)
  • feat(terminal): TerminalImeAnchor (Phase 14 Task 2) (#122)
  • feat(terminal): ModifierState single source of truth (Phase 14 Task 3) (#124)
  • feat(domain): KeyboardMode + KeyboardPreferences (Phase 14 Task 1) (#121)
  • feat(ci): auto-release on master push + align RELEASE.md (#110)
  • feat: Phase 13 — Premium Features (Billing, Ads, Throttling, Chunks) (#107)
  • feat(transfer-engine): add TransferStatus.CANCELLED (Tier 2 T2b) (#101)
  • feat(wear): migrate 5 remaining screens to OriDevWearTheme (Tier 2 T2c) (#99)
  • feat(security): wire BiometricGate into credential unlock path (Tier 1 T1d) (#95)

Bug Fixes

  • fix(network): route SAF content:// URIs through SafSourceFile/SafDestFile in resumable transfers (#218)
  • fix(transfers): re-apply filter on tab switch (Bug H) (#213)
  • fix(network): notify SessionRegistry when SshSessionStore prunes a session (#210)
  • fix(terminal): atomic latch claim prevents focus+restore observer race (#208)
  • fix(filemanager): use active session profileId for transfers + wire context-menu Transfer button (#209)
  • fix(terminal): auto-open tab when ConnectionDetailSheet focuses a fresh session (#206)
  • fix(network): tolerate ACL/SELinux permission suffix in ScpListingParser (#200)
  • fix(network): getClient throws IOException so ViewModel catches route it (#196)
  • fix(service): switch ConnectionService to FGS specialUse (#193)
  • fix(network): prune disconnected SSH clients from session cache (#192)
  • fix(network): route withSftpClient through Dispatchers.IO (#190)
  • fix(settings): complete AppPreferencesSnapshot fixture in TransfersSectionTest (#185)
  • fix: Connect-Folgeschritte — Service-Typ, Session-Wiring, UI-State (#175)
  • fix(connections): Passwort im Edit prefillen, Connect-Pfad loggen (#173)
  • fix(connections): Passwörter tatsächlich im Keystore ablegen (#171)
  • fix(editor): Absturz beim Öffnen von Dateien auf Android 16 (#166)
  • fix(filemanager): SAF-Unterordner wieder auflistbar (#164)
  • fix(filemanager): BreadcrumbBar must not split SAF content URIs (#160)
  • fix(wear): exclude OSGI META-INF to unblock bcprov packaging (#161)
  • fix(ssh): replace Android's stripped BC provider so Ed25519 works (#158)
  • fix(ssh,filemanager): move connect to IO + null-safe SAF listFiles (#156)
  • fix(app): add NonFatalErrorLogger + dump connect failures to Downloads (#154)
  • fix(terminal): move imePadding to TerminalScreen root + gate ExtraKeys on isImeVisible (#137)
  • fix(app): install LocalCrashLogger BEFORE super.attachBaseContext (#133)
  • fix(app): add LocalCrashLogger that writes to Downloads on crash (#131)
  • fix(terminal): default split ratio to 50/50 (#118)
  • fix(ci): use RELEASE_PAT to push bump branch so CI triggers (#115)
  • fix(ci): move regex patterns into variables for bash parser (#112)
  • fix(ci): correct bash glob syntax for chore(release) skip pattern (#111)
  • fix(ci): add pull-requests: write permission to release workflow (#108)
  • fix(ci): release workflow manual-only, PR-based version bump (#97)
  • fix(ci): serialize release workflow + retry-rebase push loop (#96)

Other

  • chore(release): v0.35.5 (#219)
  • chore(release): v0.35.4 (#212)
  • chore(release): v0.35.3 (#211)
  • chore(release): v0.35.2 (#207)
  • chore(release): v0.35.1 (#205)
  • ci: add pipefail to font-budget positive control to detect gradle failure (#201)
  • chore(release): v0.35.0 (#199)
  • chore(release): v0.34.4 (#197)
  • chore(release): v0.34.3 (#195)
  • chore(release): v0.34.2 (#194)
  • chore(release): v0.34.1 (#191)
  • chore(release): v0.34.0 (#188)
  • chore(release): v0.33.22 (#186)
  • chore(release): v0.33.21 (#182)
  • chore(release): v0.33.20 (#180)
  • refactor: UI consolidation onto SessionRegistry (nav + sheet + terminal tabs) (#179)
  • chore(release): v0.33.19 (#178)
  • chore(release): v0.33.18 (#176)
  • chore(release): v0.33.17 (#174)
  • chore(release): v0.33.16 (#172)
  • chore(release): v0.33.15 (#170)
  • chore(release): v0.33.14 (#168)
  • chore(release): v0.33.13 (#163)
  • chore(release): v0.33.12 (#162)
  • chore(release): v0.33.11 (#157)
  • chore(release): v0.33.10 (#155)
  • chore(release): v0.33.9 (#143)
  • chore(release): v0.33.8 (#141)
  • docs(plan): Phase 15 Foldable UX + Storage Access Framework (#135)
  • chore(release): v0.33.7 (#134)
  • chore(release): v0.33.6 (#132)
  • chore(release): v0.33.5 (#130)
  • docs(phase14): document the three keyboard modes (#129)
  • chore(release): v0.33.4 (#125)
  • docs(plan): fold devil's-advocate findings into Phase 14 plan (#120)
  • docs(plan): Phase 14 Terminal Hybrid Keyboard plan (#119)
  • ci(deps): bump actions/cache from 4 to 5 (#114)
  • chore(release): v0.33.3 (#117)
  • chore(release): v0.33.2 (#116)
  • chore(release): v0.33.1 (#113)
  • chore(release): v0.33.0 (#109)
  • test(security): BiometricGate authenticate path via launcher seam (Tier 3 T3d) (#106)
  • test(transfer-engine): Robolectric coverage for TransferNotificationManager (Tier 3 T3c) (#105)
  • test(transfer-engine): instrumentation test infra + lifecycle test (Tier 3 T3a) (#104)
  • test(wear): OriWearCard Compose UI test infrastructure (Tier 3 T3b) (#103)
  • chore(security): promote material-icons + clipboard rules to ERROR (#102)
  • refactor(transfer-engine): FtpTransferExecutor owns its FTPClient (Tier 2 T2a) (#100)
  • refactor(connections): form primitives + credential clear on ViewModel death (Tier 2 T2d) (#98)
  • chore(deps): bump okhttp from 4.12.0 to 5.3.2 (#21)
  • chore(deps): bump the androidx group across 1 directory with 25 updates (#33)
  • chore(deps): bump the kotlin group across 1 directory with 3 updates (#22)
  • chore(deps): bump io.coil-kt.coil3:coil-compose from 3.1.0 to 3.4.0 (#27)
  • chore(deps): bump the testing group across 1 directory with 4 updates (#31)
  • chore(deps): bump commons-net:commons-net from 3.11.1 to 3.13.0 (#14)
  • chore(deps): bump androidx.core:core-splashscreen from 1.2.0-alpha02 to 1.2.0 (#12)
  • chore(deps): bump androidx.compose:compose-bom from 2026.03.00 to 2026.03.01 in the compose group across 1 directory (#3)
  • ci(deps): bump softprops/action-gh-release from 2 to 3 (#24)
  • ci(deps): bump actions/setup-java from 4 to 5 (#5)
  • ci(deps): bump actions/upload-artifact from 4 to 7 (#4)
  • ci(deps): bump actions/checkout from 4 to 6 (#2)
  • ci(deps): bump gradle/actions from 4 to 6 (#1)
  • refactor(terminal): migrate clipboard usage to OriClipboard (Tier 1 T1c) (#94)
  • refactor(connections): complete Material icon sweep (Tier 1 T1a) (#93)
  • refactor(editor): Lucide icons in SearchReplaceBar (Tier 1 T1b) (#92)
  • chore: opt into KT-73255 annotation-target-property to silence forward-compat warnings (#91)
  • chore(ci): add release build smoke test to pr-check.yml (TD3) (#90)

Ori:Dev v0.35.5

Choose a tag to compare

@github-actions github-actions released this 27 Apr 14:23

Release v0.35.5 · Signed with release keystore

Artifacts

  • oridev-*.aab / oridev-*.apk — Phone build (R8 minified)
  • oridev-wear-*.aab / oridev-wear-*.apk — Wear OS companion
  • oridev-*-mapping.txt — R8 deobfuscation map (upload to Play Console for stack traces)

Changes since v0.32.1

Features

  • feat(network): real SCP protocol implementation (v0.34.5) (#198)
  • feat: foldable split terminal (two tabs parallel on unfolded) (#187)
  • feat: opt-in full session resume (tabs, paths, last-tab) (#184)
  • feat(security): FLAG_SECURE toggle während aktiver SSH-Sessions (#183)
  • feat: Files polish + session-kill safety net (PR 3) (#181)
  • feat: SessionRegistry foundation — consolidate SSH-session state (#177)
  • feat(settings): Dummy-Rows aktivieren — 8 neue Picker-Dialoge (#169)
  • feat(connections): TOFU-Dialog für unbekannte/geänderte Host-Keys (#165)
  • feat(filemanager): Multi-Select-Toolbar mit Copy/Rename/Chmod/Info (#167)
  • feat(filemanager): replace legacy storage perms with SAF DocumentFile (#142)
  • feat(terminal): split CustomKeyboard for unfolded foldable (#140)
  • feat(filemanager): compact FileItemRow density (#138)
  • feat(terminal): drop Send-to-Claude FAB (#136)
  • feat(app): responsive top-level navigation — compact bar / rail (#139)
  • feat(terminal): KeyboardHost + resize debounce (Phase 14 Task 5) (#127)
  • feat(settings): keyboard style picker (Phase 14 Task 6) (#128)
  • feat(terminal): TerminalExtraKeys row (Phase 14 Task 4) (#126)
  • feat(terminal): TerminalImeAnchor (Phase 14 Task 2) (#122)
  • feat(terminal): ModifierState single source of truth (Phase 14 Task 3) (#124)
  • feat(domain): KeyboardMode + KeyboardPreferences (Phase 14 Task 1) (#121)
  • feat(ci): auto-release on master push + align RELEASE.md (#110)
  • feat: Phase 13 — Premium Features (Billing, Ads, Throttling, Chunks) (#107)
  • feat(transfer-engine): add TransferStatus.CANCELLED (Tier 2 T2b) (#101)
  • feat(wear): migrate 5 remaining screens to OriDevWearTheme (Tier 2 T2c) (#99)
  • feat(security): wire BiometricGate into credential unlock path (Tier 1 T1d) (#95)

Bug Fixes

  • fix(transfers): re-apply filter on tab switch (Bug H) (#213)
  • fix(network): notify SessionRegistry when SshSessionStore prunes a session (#210)
  • fix(terminal): atomic latch claim prevents focus+restore observer race (#208)
  • fix(filemanager): use active session profileId for transfers + wire context-menu Transfer button (#209)
  • fix(terminal): auto-open tab when ConnectionDetailSheet focuses a fresh session (#206)
  • fix(network): tolerate ACL/SELinux permission suffix in ScpListingParser (#200)
  • fix(network): getClient throws IOException so ViewModel catches route it (#196)
  • fix(service): switch ConnectionService to FGS specialUse (#193)
  • fix(network): prune disconnected SSH clients from session cache (#192)
  • fix(network): route withSftpClient through Dispatchers.IO (#190)
  • fix(settings): complete AppPreferencesSnapshot fixture in TransfersSectionTest (#185)
  • fix: Connect-Folgeschritte — Service-Typ, Session-Wiring, UI-State (#175)
  • fix(connections): Passwort im Edit prefillen, Connect-Pfad loggen (#173)
  • fix(connections): Passwörter tatsächlich im Keystore ablegen (#171)
  • fix(editor): Absturz beim Öffnen von Dateien auf Android 16 (#166)
  • fix(filemanager): SAF-Unterordner wieder auflistbar (#164)
  • fix(filemanager): BreadcrumbBar must not split SAF content URIs (#160)
  • fix(wear): exclude OSGI META-INF to unblock bcprov packaging (#161)
  • fix(ssh): replace Android's stripped BC provider so Ed25519 works (#158)
  • fix(ssh,filemanager): move connect to IO + null-safe SAF listFiles (#156)
  • fix(app): add NonFatalErrorLogger + dump connect failures to Downloads (#154)
  • fix(terminal): move imePadding to TerminalScreen root + gate ExtraKeys on isImeVisible (#137)
  • fix(app): install LocalCrashLogger BEFORE super.attachBaseContext (#133)
  • fix(app): add LocalCrashLogger that writes to Downloads on crash (#131)
  • fix(terminal): default split ratio to 50/50 (#118)
  • fix(ci): use RELEASE_PAT to push bump branch so CI triggers (#115)
  • fix(ci): move regex patterns into variables for bash parser (#112)
  • fix(ci): correct bash glob syntax for chore(release) skip pattern (#111)
  • fix(ci): add pull-requests: write permission to release workflow (#108)
  • fix(ci): release workflow manual-only, PR-based version bump (#97)
  • fix(ci): serialize release workflow + retry-rebase push loop (#96)

Other

  • chore(release): v0.35.4 (#212)
  • chore(release): v0.35.3 (#211)
  • chore(release): v0.35.2 (#207)
  • chore(release): v0.35.1 (#205)
  • ci: add pipefail to font-budget positive control to detect gradle failure (#201)
  • chore(release): v0.35.0 (#199)
  • chore(release): v0.34.4 (#197)
  • chore(release): v0.34.3 (#195)
  • chore(release): v0.34.2 (#194)
  • chore(release): v0.34.1 (#191)
  • chore(release): v0.34.0 (#188)
  • chore(release): v0.33.22 (#186)
  • chore(release): v0.33.21 (#182)
  • chore(release): v0.33.20 (#180)
  • refactor: UI consolidation onto SessionRegistry (nav + sheet + terminal tabs) (#179)
  • chore(release): v0.33.19 (#178)
  • chore(release): v0.33.18 (#176)
  • chore(release): v0.33.17 (#174)
  • chore(release): v0.33.16 (#172)
  • chore(release): v0.33.15 (#170)
  • chore(release): v0.33.14 (#168)
  • chore(release): v0.33.13 (#163)
  • chore(release): v0.33.12 (#162)
  • chore(release): v0.33.11 (#157)
  • chore(release): v0.33.10 (#155)
  • chore(release): v0.33.9 (#143)
  • chore(release): v0.33.8 (#141)
  • docs(plan): Phase 15 Foldable UX + Storage Access Framework (#135)
  • chore(release): v0.33.7 (#134)
  • chore(release): v0.33.6 (#132)
  • chore(release): v0.33.5 (#130)
  • docs(phase14): document the three keyboard modes (#129)
  • chore(release): v0.33.4 (#125)
  • docs(plan): fold devil's-advocate findings into Phase 14 plan (#120)
  • docs(plan): Phase 14 Terminal Hybrid Keyboard plan (#119)
  • ci(deps): bump actions/cache from 4 to 5 (#114)
  • chore(release): v0.33.3 (#117)
  • chore(release): v0.33.2 (#116)
  • chore(release): v0.33.1 (#113)
  • chore(release): v0.33.0 (#109)
  • test(security): BiometricGate authenticate path via launcher seam (Tier 3 T3d) (#106)
  • test(transfer-engine): Robolectric coverage for TransferNotificationManager (Tier 3 T3c) (#105)
  • test(transfer-engine): instrumentation test infra + lifecycle test (Tier 3 T3a) (#104)
  • test(wear): OriWearCard Compose UI test infrastructure (Tier 3 T3b) (#103)
  • chore(security): promote material-icons + clipboard rules to ERROR (#102)
  • refactor(transfer-engine): FtpTransferExecutor owns its FTPClient (Tier 2 T2a) (#100)
  • refactor(connections): form primitives + credential clear on ViewModel death (Tier 2 T2d) (#98)
  • chore(deps): bump okhttp from 4.12.0 to 5.3.2 (#21)
  • chore(deps): bump the androidx group across 1 directory with 25 updates (#33)
  • chore(deps): bump the kotlin group across 1 directory with 3 updates (#22)
  • chore(deps): bump io.coil-kt.coil3:coil-compose from 3.1.0 to 3.4.0 (#27)
  • chore(deps): bump the testing group across 1 directory with 4 updates (#31)
  • chore(deps): bump commons-net:commons-net from 3.11.1 to 3.13.0 (#14)
  • chore(deps): bump androidx.core:core-splashscreen from 1.2.0-alpha02 to 1.2.0 (#12)
  • chore(deps): bump androidx.compose:compose-bom from 2026.03.00 to 2026.03.01 in the compose group across 1 directory (#3)
  • ci(deps): bump softprops/action-gh-release from 2 to 3 (#24)
  • ci(deps): bump actions/setup-java from 4 to 5 (#5)
  • ci(deps): bump actions/upload-artifact from 4 to 7 (#4)
  • ci(deps): bump actions/checkout from 4 to 6 (#2)
  • ci(deps): bump gradle/actions from 4 to 6 (#1)
  • refactor(terminal): migrate clipboard usage to OriClipboard (Tier 1 T1c) (#94)
  • refactor(connections): complete Material icon sweep (Tier 1 T1a) (#93)
  • refactor(editor): Lucide icons in SearchReplaceBar (Tier 1 T1b) (#92)
  • chore: opt into KT-73255 annotation-target-property to silence forward-compat warnings (#91)
  • chore(ci): add release build smoke test to pr-check.yml (TD3) (#90)

Ori:Dev v0.35.4

Choose a tag to compare

@github-actions github-actions released this 27 Apr 12:07

Release v0.35.4 · Signed with release keystore

Artifacts

  • oridev-*.aab / oridev-*.apk — Phone build (R8 minified)
  • oridev-wear-*.aab / oridev-wear-*.apk — Wear OS companion
  • oridev-*-mapping.txt — R8 deobfuscation map (upload to Play Console for stack traces)

Changes since v0.32.1

Features

  • feat(network): real SCP protocol implementation (v0.34.5) (#198)
  • feat: foldable split terminal (two tabs parallel on unfolded) (#187)
  • feat: opt-in full session resume (tabs, paths, last-tab) (#184)
  • feat(security): FLAG_SECURE toggle während aktiver SSH-Sessions (#183)
  • feat: Files polish + session-kill safety net (PR 3) (#181)
  • feat: SessionRegistry foundation — consolidate SSH-session state (#177)
  • feat(settings): Dummy-Rows aktivieren — 8 neue Picker-Dialoge (#169)
  • feat(connections): TOFU-Dialog für unbekannte/geänderte Host-Keys (#165)
  • feat(filemanager): Multi-Select-Toolbar mit Copy/Rename/Chmod/Info (#167)
  • feat(filemanager): replace legacy storage perms with SAF DocumentFile (#142)
  • feat(terminal): split CustomKeyboard for unfolded foldable (#140)
  • feat(filemanager): compact FileItemRow density (#138)
  • feat(terminal): drop Send-to-Claude FAB (#136)
  • feat(app): responsive top-level navigation — compact bar / rail (#139)
  • feat(terminal): KeyboardHost + resize debounce (Phase 14 Task 5) (#127)
  • feat(settings): keyboard style picker (Phase 14 Task 6) (#128)
  • feat(terminal): TerminalExtraKeys row (Phase 14 Task 4) (#126)
  • feat(terminal): TerminalImeAnchor (Phase 14 Task 2) (#122)
  • feat(terminal): ModifierState single source of truth (Phase 14 Task 3) (#124)
  • feat(domain): KeyboardMode + KeyboardPreferences (Phase 14 Task 1) (#121)
  • feat(ci): auto-release on master push + align RELEASE.md (#110)
  • feat: Phase 13 — Premium Features (Billing, Ads, Throttling, Chunks) (#107)
  • feat(transfer-engine): add TransferStatus.CANCELLED (Tier 2 T2b) (#101)
  • feat(wear): migrate 5 remaining screens to OriDevWearTheme (Tier 2 T2c) (#99)
  • feat(security): wire BiometricGate into credential unlock path (Tier 1 T1d) (#95)

Bug Fixes

  • fix(network): notify SessionRegistry when SshSessionStore prunes a session (#210)
  • fix(terminal): atomic latch claim prevents focus+restore observer race (#208)
  • fix(filemanager): use active session profileId for transfers + wire context-menu Transfer button (#209)
  • fix(terminal): auto-open tab when ConnectionDetailSheet focuses a fresh session (#206)
  • fix(network): tolerate ACL/SELinux permission suffix in ScpListingParser (#200)
  • fix(network): getClient throws IOException so ViewModel catches route it (#196)
  • fix(service): switch ConnectionService to FGS specialUse (#193)
  • fix(network): prune disconnected SSH clients from session cache (#192)
  • fix(network): route withSftpClient through Dispatchers.IO (#190)
  • fix(settings): complete AppPreferencesSnapshot fixture in TransfersSectionTest (#185)
  • fix: Connect-Folgeschritte — Service-Typ, Session-Wiring, UI-State (#175)
  • fix(connections): Passwort im Edit prefillen, Connect-Pfad loggen (#173)
  • fix(connections): Passwörter tatsächlich im Keystore ablegen (#171)
  • fix(editor): Absturz beim Öffnen von Dateien auf Android 16 (#166)
  • fix(filemanager): SAF-Unterordner wieder auflistbar (#164)
  • fix(filemanager): BreadcrumbBar must not split SAF content URIs (#160)
  • fix(wear): exclude OSGI META-INF to unblock bcprov packaging (#161)
  • fix(ssh): replace Android's stripped BC provider so Ed25519 works (#158)
  • fix(ssh,filemanager): move connect to IO + null-safe SAF listFiles (#156)
  • fix(app): add NonFatalErrorLogger + dump connect failures to Downloads (#154)
  • fix(terminal): move imePadding to TerminalScreen root + gate ExtraKeys on isImeVisible (#137)
  • fix(app): install LocalCrashLogger BEFORE super.attachBaseContext (#133)
  • fix(app): add LocalCrashLogger that writes to Downloads on crash (#131)
  • fix(terminal): default split ratio to 50/50 (#118)
  • fix(ci): use RELEASE_PAT to push bump branch so CI triggers (#115)
  • fix(ci): move regex patterns into variables for bash parser (#112)
  • fix(ci): correct bash glob syntax for chore(release) skip pattern (#111)
  • fix(ci): add pull-requests: write permission to release workflow (#108)
  • fix(ci): release workflow manual-only, PR-based version bump (#97)
  • fix(ci): serialize release workflow + retry-rebase push loop (#96)

Other

  • chore(release): v0.35.3 (#211)
  • chore(release): v0.35.2 (#207)
  • chore(release): v0.35.1 (#205)
  • ci: add pipefail to font-budget positive control to detect gradle failure (#201)
  • chore(release): v0.35.0 (#199)
  • chore(release): v0.34.4 (#197)
  • chore(release): v0.34.3 (#195)
  • chore(release): v0.34.2 (#194)
  • chore(release): v0.34.1 (#191)
  • chore(release): v0.34.0 (#188)
  • chore(release): v0.33.22 (#186)
  • chore(release): v0.33.21 (#182)
  • chore(release): v0.33.20 (#180)
  • refactor: UI consolidation onto SessionRegistry (nav + sheet + terminal tabs) (#179)
  • chore(release): v0.33.19 (#178)
  • chore(release): v0.33.18 (#176)
  • chore(release): v0.33.17 (#174)
  • chore(release): v0.33.16 (#172)
  • chore(release): v0.33.15 (#170)
  • chore(release): v0.33.14 (#168)
  • chore(release): v0.33.13 (#163)
  • chore(release): v0.33.12 (#162)
  • chore(release): v0.33.11 (#157)
  • chore(release): v0.33.10 (#155)
  • chore(release): v0.33.9 (#143)
  • chore(release): v0.33.8 (#141)
  • docs(plan): Phase 15 Foldable UX + Storage Access Framework (#135)
  • chore(release): v0.33.7 (#134)
  • chore(release): v0.33.6 (#132)
  • chore(release): v0.33.5 (#130)
  • docs(phase14): document the three keyboard modes (#129)
  • chore(release): v0.33.4 (#125)
  • docs(plan): fold devil's-advocate findings into Phase 14 plan (#120)
  • docs(plan): Phase 14 Terminal Hybrid Keyboard plan (#119)
  • ci(deps): bump actions/cache from 4 to 5 (#114)
  • chore(release): v0.33.3 (#117)
  • chore(release): v0.33.2 (#116)
  • chore(release): v0.33.1 (#113)
  • chore(release): v0.33.0 (#109)
  • test(security): BiometricGate authenticate path via launcher seam (Tier 3 T3d) (#106)
  • test(transfer-engine): Robolectric coverage for TransferNotificationManager (Tier 3 T3c) (#105)
  • test(transfer-engine): instrumentation test infra + lifecycle test (Tier 3 T3a) (#104)
  • test(wear): OriWearCard Compose UI test infrastructure (Tier 3 T3b) (#103)
  • chore(security): promote material-icons + clipboard rules to ERROR (#102)
  • refactor(transfer-engine): FtpTransferExecutor owns its FTPClient (Tier 2 T2a) (#100)
  • refactor(connections): form primitives + credential clear on ViewModel death (Tier 2 T2d) (#98)
  • chore(deps): bump okhttp from 4.12.0 to 5.3.2 (#21)
  • chore(deps): bump the androidx group across 1 directory with 25 updates (#33)
  • chore(deps): bump the kotlin group across 1 directory with 3 updates (#22)
  • chore(deps): bump io.coil-kt.coil3:coil-compose from 3.1.0 to 3.4.0 (#27)
  • chore(deps): bump the testing group across 1 directory with 4 updates (#31)
  • chore(deps): bump commons-net:commons-net from 3.11.1 to 3.13.0 (#14)
  • chore(deps): bump androidx.core:core-splashscreen from 1.2.0-alpha02 to 1.2.0 (#12)
  • chore(deps): bump androidx.compose:compose-bom from 2026.03.00 to 2026.03.01 in the compose group across 1 directory (#3)
  • ci(deps): bump softprops/action-gh-release from 2 to 3 (#24)
  • ci(deps): bump actions/setup-java from 4 to 5 (#5)
  • ci(deps): bump actions/upload-artifact from 4 to 7 (#4)
  • ci(deps): bump actions/checkout from 4 to 6 (#2)
  • ci(deps): bump gradle/actions from 4 to 6 (#1)
  • refactor(terminal): migrate clipboard usage to OriClipboard (Tier 1 T1c) (#94)
  • refactor(connections): complete Material icon sweep (Tier 1 T1a) (#93)
  • refactor(editor): Lucide icons in SearchReplaceBar (Tier 1 T1b) (#92)
  • chore: opt into KT-73255 annotation-target-property to silence forward-compat warnings (#91)
  • chore(ci): add release build smoke test to pr-check.yml (TD3) (#90)

Ori:Dev v0.35.3

Choose a tag to compare

@github-actions github-actions released this 27 Apr 10:53

Release v0.35.3 · Signed with release keystore

Artifacts

  • oridev-*.aab / oridev-*.apk — Phone build (R8 minified)
  • oridev-wear-*.aab / oridev-wear-*.apk — Wear OS companion
  • oridev-*-mapping.txt — R8 deobfuscation map (upload to Play Console for stack traces)

Changes since v0.32.1

Features

  • feat(network): real SCP protocol implementation (v0.34.5) (#198)
  • feat: foldable split terminal (two tabs parallel on unfolded) (#187)
  • feat: opt-in full session resume (tabs, paths, last-tab) (#184)
  • feat(security): FLAG_SECURE toggle während aktiver SSH-Sessions (#183)
  • feat: Files polish + session-kill safety net (PR 3) (#181)
  • feat: SessionRegistry foundation — consolidate SSH-session state (#177)
  • feat(settings): Dummy-Rows aktivieren — 8 neue Picker-Dialoge (#169)
  • feat(connections): TOFU-Dialog für unbekannte/geänderte Host-Keys (#165)
  • feat(filemanager): Multi-Select-Toolbar mit Copy/Rename/Chmod/Info (#167)
  • feat(filemanager): replace legacy storage perms with SAF DocumentFile (#142)
  • feat(terminal): split CustomKeyboard for unfolded foldable (#140)
  • feat(filemanager): compact FileItemRow density (#138)
  • feat(terminal): drop Send-to-Claude FAB (#136)
  • feat(app): responsive top-level navigation — compact bar / rail (#139)
  • feat(terminal): KeyboardHost + resize debounce (Phase 14 Task 5) (#127)
  • feat(settings): keyboard style picker (Phase 14 Task 6) (#128)
  • feat(terminal): TerminalExtraKeys row (Phase 14 Task 4) (#126)
  • feat(terminal): TerminalImeAnchor (Phase 14 Task 2) (#122)
  • feat(terminal): ModifierState single source of truth (Phase 14 Task 3) (#124)
  • feat(domain): KeyboardMode + KeyboardPreferences (Phase 14 Task 1) (#121)
  • feat(ci): auto-release on master push + align RELEASE.md (#110)
  • feat: Phase 13 — Premium Features (Billing, Ads, Throttling, Chunks) (#107)
  • feat(transfer-engine): add TransferStatus.CANCELLED (Tier 2 T2b) (#101)
  • feat(wear): migrate 5 remaining screens to OriDevWearTheme (Tier 2 T2c) (#99)
  • feat(security): wire BiometricGate into credential unlock path (Tier 1 T1d) (#95)

Bug Fixes

  • fix(filemanager): use active session profileId for transfers + wire context-menu Transfer button (#209)
  • fix(terminal): auto-open tab when ConnectionDetailSheet focuses a fresh session (#206)
  • fix(network): tolerate ACL/SELinux permission suffix in ScpListingParser (#200)
  • fix(network): getClient throws IOException so ViewModel catches route it (#196)
  • fix(service): switch ConnectionService to FGS specialUse (#193)
  • fix(network): prune disconnected SSH clients from session cache (#192)
  • fix(network): route withSftpClient through Dispatchers.IO (#190)
  • fix(settings): complete AppPreferencesSnapshot fixture in TransfersSectionTest (#185)
  • fix: Connect-Folgeschritte — Service-Typ, Session-Wiring, UI-State (#175)
  • fix(connections): Passwort im Edit prefillen, Connect-Pfad loggen (#173)
  • fix(connections): Passwörter tatsächlich im Keystore ablegen (#171)
  • fix(editor): Absturz beim Öffnen von Dateien auf Android 16 (#166)
  • fix(filemanager): SAF-Unterordner wieder auflistbar (#164)
  • fix(filemanager): BreadcrumbBar must not split SAF content URIs (#160)
  • fix(wear): exclude OSGI META-INF to unblock bcprov packaging (#161)
  • fix(ssh): replace Android's stripped BC provider so Ed25519 works (#158)
  • fix(ssh,filemanager): move connect to IO + null-safe SAF listFiles (#156)
  • fix(app): add NonFatalErrorLogger + dump connect failures to Downloads (#154)
  • fix(terminal): move imePadding to TerminalScreen root + gate ExtraKeys on isImeVisible (#137)
  • fix(app): install LocalCrashLogger BEFORE super.attachBaseContext (#133)
  • fix(app): add LocalCrashLogger that writes to Downloads on crash (#131)
  • fix(terminal): default split ratio to 50/50 (#118)
  • fix(ci): use RELEASE_PAT to push bump branch so CI triggers (#115)
  • fix(ci): move regex patterns into variables for bash parser (#112)
  • fix(ci): correct bash glob syntax for chore(release) skip pattern (#111)
  • fix(ci): add pull-requests: write permission to release workflow (#108)
  • fix(ci): release workflow manual-only, PR-based version bump (#97)
  • fix(ci): serialize release workflow + retry-rebase push loop (#96)

Other

  • chore(release): v0.35.2 (#207)
  • chore(release): v0.35.1 (#205)
  • ci: add pipefail to font-budget positive control to detect gradle failure (#201)
  • chore(release): v0.35.0 (#199)
  • chore(release): v0.34.4 (#197)
  • chore(release): v0.34.3 (#195)
  • chore(release): v0.34.2 (#194)
  • chore(release): v0.34.1 (#191)
  • chore(release): v0.34.0 (#188)
  • chore(release): v0.33.22 (#186)
  • chore(release): v0.33.21 (#182)
  • chore(release): v0.33.20 (#180)
  • refactor: UI consolidation onto SessionRegistry (nav + sheet + terminal tabs) (#179)
  • chore(release): v0.33.19 (#178)
  • chore(release): v0.33.18 (#176)
  • chore(release): v0.33.17 (#174)
  • chore(release): v0.33.16 (#172)
  • chore(release): v0.33.15 (#170)
  • chore(release): v0.33.14 (#168)
  • chore(release): v0.33.13 (#163)
  • chore(release): v0.33.12 (#162)
  • chore(release): v0.33.11 (#157)
  • chore(release): v0.33.10 (#155)
  • chore(release): v0.33.9 (#143)
  • chore(release): v0.33.8 (#141)
  • docs(plan): Phase 15 Foldable UX + Storage Access Framework (#135)
  • chore(release): v0.33.7 (#134)
  • chore(release): v0.33.6 (#132)
  • chore(release): v0.33.5 (#130)
  • docs(phase14): document the three keyboard modes (#129)
  • chore(release): v0.33.4 (#125)
  • docs(plan): fold devil's-advocate findings into Phase 14 plan (#120)
  • docs(plan): Phase 14 Terminal Hybrid Keyboard plan (#119)
  • ci(deps): bump actions/cache from 4 to 5 (#114)
  • chore(release): v0.33.3 (#117)
  • chore(release): v0.33.2 (#116)
  • chore(release): v0.33.1 (#113)
  • chore(release): v0.33.0 (#109)
  • test(security): BiometricGate authenticate path via launcher seam (Tier 3 T3d) (#106)
  • test(transfer-engine): Robolectric coverage for TransferNotificationManager (Tier 3 T3c) (#105)
  • test(transfer-engine): instrumentation test infra + lifecycle test (Tier 3 T3a) (#104)
  • test(wear): OriWearCard Compose UI test infrastructure (Tier 3 T3b) (#103)
  • chore(security): promote material-icons + clipboard rules to ERROR (#102)
  • refactor(transfer-engine): FtpTransferExecutor owns its FTPClient (Tier 2 T2a) (#100)
  • refactor(connections): form primitives + credential clear on ViewModel death (Tier 2 T2d) (#98)
  • chore(deps): bump okhttp from 4.12.0 to 5.3.2 (#21)
  • chore(deps): bump the androidx group across 1 directory with 25 updates (#33)
  • chore(deps): bump the kotlin group across 1 directory with 3 updates (#22)
  • chore(deps): bump io.coil-kt.coil3:coil-compose from 3.1.0 to 3.4.0 (#27)
  • chore(deps): bump the testing group across 1 directory with 4 updates (#31)
  • chore(deps): bump commons-net:commons-net from 3.11.1 to 3.13.0 (#14)
  • chore(deps): bump androidx.core:core-splashscreen from 1.2.0-alpha02 to 1.2.0 (#12)
  • chore(deps): bump androidx.compose:compose-bom from 2026.03.00 to 2026.03.01 in the compose group across 1 directory (#3)
  • ci(deps): bump softprops/action-gh-release from 2 to 3 (#24)
  • ci(deps): bump actions/setup-java from 4 to 5 (#5)
  • ci(deps): bump actions/upload-artifact from 4 to 7 (#4)
  • ci(deps): bump actions/checkout from 4 to 6 (#2)
  • ci(deps): bump gradle/actions from 4 to 6 (#1)
  • refactor(terminal): migrate clipboard usage to OriClipboard (Tier 1 T1c) (#94)
  • refactor(connections): complete Material icon sweep (Tier 1 T1a) (#93)
  • refactor(editor): Lucide icons in SearchReplaceBar (Tier 1 T1b) (#92)
  • chore: opt into KT-73255 annotation-target-property to silence forward-compat warnings (#91)
  • chore(ci): add release build smoke test to pr-check.yml (TD3) (#90)