Skip to content

build(deps): AGP 9.5.0, Gradle 9.8.2, SQLCipher 4.20.0, Markdown 0.7.18; DataStore removed - #51

Merged
gitubpatrice merged 3 commits into
mainfrom
build/agp-9.5.0
Nov 9, 2026
Merged

gitubpatrice merged 3 commits into
mainfrom
build/agp-9.5.0

Conversation

@gitubpatrice

Copy link
Copy Markdown
Owner

Brings the open Dependabot updates together, as SMS Tech #69 did: #46 (AGP 9.5.0), #35 (Gradle wrapper 9.8.2), #47 (SQLCipher 4.20.0), #32 (org.jetbrains:markdown 0.7.18). #34 (DataStore 1.3.0) is not taken: the dependency is removed, see below. No version bump: this ships with the next release.

What was read before changing anything

  • AGP 9.5.0 needs Gradle 9.6.0 or later (9.8.2 here), JDK 17, build tools 36.0.0.
  • Gradle 9.8.2: distributionSha256Sum checked against Gradle's published sum, and present with the same sum in F-Droid's gradle-transparency-log (F-Droid builds Notes Tech from source). Only gradle-wrapper.properties is taken from Build(deps): Bump gradle-wrapper from 9.8.1 to 9.8.2 #35: its gradlew.bat change was line endings.
  • SQLCipher 4.17 → 4.20: SQLite 3.54.1; 4.18 requires compileSdk 37 (ours); 4.19.1 adds the 16 KB page linker flag and changes what getColumnType returns for NULL — nothing here reads it, Room goes through isNull. PRAGMA cipher_compatibility = 4 is still set at opening; secure_delete is still set by the app and checked on device (EffacementDansLaBaseTest); a database written by the Flutter versions is opened by LegacyDatabaseOpeningTest.
  • Markdown 0.7.15 → 0.7.18: ==text== becomes a GFM highlight node; the > of quote continuation lines become BLOCK_QUOTE tokens; several quadratic parse times fixed. The preview already draws an unknown node as its text and a BLOCK_QUOTE token as nothing. A new test pins ==text== shown as written, as 2.0.9 shows it.

DataStore: removed, not updated

It was never imported. D-015 (2026-08-14) kept the settings in the Flutter preferences file, and the dependency had stayed "for phase 7", which was done without it. R8 removed its code, but every APK still shipped lib/<abi>/libdatastore_shared_counter.so (read in the published 3.3.0). Removed with Okio, which only DataStore pulled in. Settings are untouched: they never lived there.

Also

  • THIRD_PARTY_NOTICES.md read again from the resolved releaseRuntimeClasspath: SQLCipher 4.20.0, Markdown 0.7.18, androidx.sqlite 2.7.0 (was written 2.6.2), DataStore and Okio gone, DocumentFile and Transition no longer resolved.
  • README (EN, FR): stack says SQLCipher 4.20 and no longer DataStore; Gradle 9.8.2.
  • A separate commit removes a Kotlin 2.4 "Java type mismatch" warning in code added by 3.3.0 (?.let(::ArrayList) → a lambda).

Checked locally

  • Gate (assembleDebug, testDebugUnitTest — 551 tests, 0 failed —, lintDebug, detekt, ktlintCheck, androidTest compile) and assembleRelease: green, first on AGP 9.5.0 alone, then with everything.
  • Release APKs signed with the release key for a trial only (not published): same certificate and the same 4 permissions as the published 3.3.0, no INTERNET; libdatastore_shared_counter.so gone.
  • On a Galaxy S9, installed over the published 3.3.0: notes kept, full-text search finds a note written just before the update and a 2.0.9 one, archive by month and permanent deletion work, no crash. The published 3.3.0 was put back afterwards.

Before the next tag

  • F-Droid has not built Notes Tech on AGP 9.5 yet (no Files Tech app has): a local fdroid build before tagging would rule out a build-server surprise.

🤖 Generated with Claude Code

gitubpatrice and others added 3 commits November 9, 2026 17:45
…18; DataStore removed

Brings the open Dependabot updates together: #46 (AGP 9.5.0), #35 (Gradle
wrapper 9.8.2), #47 (SQLCipher 4.20.0), #32 (org.jetbrains:markdown 0.7.18).
#34 (DataStore 1.3.0) is not taken: the dependency goes instead.

- AGP 9.5.0 needs Gradle 9.6.0 or later: 9.8.2 here. The wrapper's
  distributionSha256Sum is Gradle's published one, and 9.8.2 is in F-Droid's
  gradle-transparency-log with the same sum (F-Droid builds Notes Tech from
  source). Only the properties are taken from #35: its gradlew.bat change was
  line endings.
- SQLCipher 4.17 to 4.20: SQLite 3.54.1, compileSdk 37 (ours), 16 KB page
  linker flag. 4.19.1 changes what getColumnType returns for NULL: nothing
  here reads it, Room goes through isNull. cipher_compatibility = 4 is still
  set at opening, secure_delete is still set by the app and checked on device
  (EffacementDansLaBaseTest).
- Markdown 0.7.15 to 0.7.18: ==text== becomes a GFM highlight node, and the >
  of quote continuation lines become BLOCK_QUOTE tokens. The preview already
  draws an unknown node as its text and a BLOCK_QUOTE token as nothing; a test
  pins the highlight shown as written, as 2.0.9 shows it.
- DataStore was never imported: D-015 kept the settings in the Flutter
  preferences file, and the dependency had stayed "for phase 7", which did
  without it. R8 removed its code, but every APK still shipped
  lib/<abi>/libdatastore_shared_counter.so. Removed, with Okio, which only it
  pulled in.

THIRD_PARTY_NOTICES read again from the resolved releaseRuntimeClasspath:
SQLCipher 4.20.0, Markdown 0.7.18, androidx.sqlite 2.7.0 (was written 2.6.2),
DataStore and Okio gone, DocumentFile and Transition no longer resolved.
README stack: SQLCipher 4.20, no DataStore, Gradle 9.8.2.

Local gate (assembleDebug, 551 unit tests, lintDebug, detekt, ktlintCheck,
androidTest compile) and assembleRelease green. Release APKs signed with the
release key for a trial only: same certificate and permissions as the
published 3.3.0, no INTERNET. On the S9, installed over the published 3.3.0:
notes kept, full-text search finds a note written before the update and a
2.0.9 one, archive by month and permanent deletion work, no crash.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`?.let(::ArrayList)` resolves to the Java constructor taking a
`Collection<? extends E>`, which Kotlin 2.4 flags as a Java type mismatch,
four times, in code added by 3.3.0. A lambda builds the same ArrayList<String>.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Up to AGP 9.4, an assumption that does not hold came out of the instrumented
run as a <failure> carrying the AssumptionViolatedException. AGP 9.5 writes it
as a proper <skipped>, the exception and its stack in the element's text. The
judge read only <failure>, and gave every <skipped> the same reasonless text:
on this PR's first run it refused the eleven admitted skips (software-only
Keystore, no fingerprint, no dictation model) although each carried its
admitted reason. 557 passed, the hardware Keystore witness failed as it must.

The reason is now read from the <skipped> text. A skip without an
AssumptionViolatedException (an @ignore, an empty skip) is still never
admitted, even when its text names an admitted reason. Four self-test
scenarios cover the new form; the judge accepts this PR's real report.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.

1 participant