diff --git a/.claude/skills/fdroid-inclusion-mr/SKILL.md b/.claude/skills/fdroid-inclusion-mr/SKILL.md index 8add61d..1a731fd 100644 --- a/.claude/skills/fdroid-inclusion-mr/SKILL.md +++ b/.claude/skills/fdroid-inclusion-mr/SKILL.md @@ -12,10 +12,10 @@ description: >- This skill is temporary: once the MR is merged, implement [#21](https://github.com/MaxDac/marknotes-android/issues/21), which removes it. -> **State (libre 0.2.0, offline only)**: Dropbox moved to MarkNotes Plus, so the recipe has no `NonFreeNet`, the -> description, `fdroid/inclusion-mr.md` and `fdroid/review-handover.md` describe v0.2.0, and the live MR matches them -> (2026-11-03). The reviewer asked for 3 months of maintenance on 2026-10-27 and had not answered the reopen: check -> the MR's notes before pushing again. The fork's metadata file is in `fdroid rewritemeta` format; edit that copy. +> **State (libre 0.3.0, offline only, no network permissions)**: v0.3.0 is released; the fork recipe push and the MR +> description/comment for it are pending the maintainer (see `fdroid/review-handover.md`). The reviewer asked for 3 months +> of maintenance on 2026-10-27: check the MR's notes before pushing again. The fork's metadata file is in +> `fdroid rewritemeta` format; edit that copy. ## Where things are diff --git a/fdroid/inclusion-mr.md b/fdroid/inclusion-mr.md index 0239171..a0b9b0c 100644 --- a/fdroid/inclusion-mr.md +++ b/fdroid/inclusion-mr.md @@ -10,9 +10,8 @@ the MR description and in sync with the recipe and the latest release: reviewers **Title**: `New app: MarkNotes` -**Posting status**: The v0.2.0 description below is live on the MR (verified through the API on 2026-11-03: the -`description` field is identical to this block); the fork pipeline passed the same day. The previous (v0.1.7) -description described optional Dropbox sync and *NonFreeNet*. +**Posting status**: The v0.3.0 description below is prepared; it is not live until the maintainer pastes it (no GitLab +access from the agent session) and the recipe commit is pushed. The v0.2.0 description still describes the Rust build. **Files** (nothing else): `metadata/io.github.maxdac.marknotes.libre.yml`, a copy of `.fdroid.yml` with `commit: vX.Y.Z` replaced by the tag's full commit hash (`git rev-parse "vX.Y.Z^{commit}"`). @@ -25,10 +24,10 @@ description described optional Dropbox sync and *NonFreeNet*. MarkNotes (`io.github.maxdac.marknotes.libre`) is an offline-first Markdown notes app. Notes are plain `.md` files in folders, with note links, images, chord sheets and a rendered preview. They stay on the device; the same folder format works with the MarkNotes desktop and web apps. This edition has no cloud sync. * Upstream: https://github.com/MaxDac/marknotes-android (GPL-3.0-or-later). I am the upstream author. -* Release: [`v0.2.0`](https://github.com/MaxDac/marknotes-android/releases/tag/v0.2.0), commit `86d39a6721e9985e095398f26dcb2d26f7868c82`, versionCode 200. +* Release: [`v0.3.0`](https://github.com/MaxDac/marknotes-android/releases/tag/v0.3.0), commit `b091b82225e56f9e9fc812b99938ca739eaa63df`, versionCode 300. * Fastlane metadata (en-US title, summary, description, icon, screenshots, changelogs) lives upstream in `fastlane/metadata/android/en-US/`. * Anti-features: none. There is no sync or other network feature, no tracking, analytics, ads or Google Play Services. Error diagnostics stay on the device unless the user reviews a report and sends it themselves. -* Permissions: `USE_BIOMETRIC` (optional app lock), plus AndroidX's own `DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION`. The APK still declares `INTERNET` and `ACCESS_NETWORK_STATE`, which come from a shared library module and are not used by this edition; removing them is planned. Upstream CI fails if the APK requests anything else. +* Permissions: `USE_BIOMETRIC` (optional app lock), plus AndroidX's own `DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION`. The APK requests no network permission: `INTERNET` and `ACCESS_NETWORK_STATE` are removed from its manifest. Upstream CI fails if the APK requests anything else. ### Build notes @@ -45,7 +44,7 @@ MarkNotes (`io.github.maxdac.marknotes.libre`) is an offline-first Markdown note ### Validation * `fdroid lint` and `fdroid rewritemeta` produce no changes. -* All nine jobs in the fork pipeline pass: https://gitlab.com/MaxDac/fdroiddata/-/pipelines/3021646859. `fdroid build` ([job](https://gitlab.com/MaxDac/fdroiddata/-/jobs/17692692121)) builds versionCode 200 from `86d39a6721e9985e095398f26dcb2d26f7868c82` and reports "compared built binary to supplied reference binary successfully". +* The fork pipeline for the v0.3.0 commit is pending (link added after it runs). The same recipe steps are built and compared in upstream CI (`fdroid build --on-server`), and the release workflow's `apksigcopier compare` against the signed APK passed: https://github.com/MaxDac/marknotes-android/actions/runs/41846713157. * The remaining permission entries in the quality report are explained above; the Fastlane metadata, reproducible-build APK, signing key, ABI/size and R8-marker entries are informational. ## Checklist diff --git a/fdroid/review-handover.md b/fdroid/review-handover.md index 2ce4e3d..8ddefe8 100644 --- a/fdroid/review-handover.md +++ b/fdroid/review-handover.md @@ -7,23 +7,23 @@ and the live MR description in `fdroid/inclusion-mr.md`. This file adds the stat pitfalls. Delete it with the other inclusion-only docs in [#21](https://github.com/MaxDac/marknotes-android/issues/21) once the MR is merged. -## State at handover (2026-11-03) +## State at handover (2026-11-04, v0.3.0) | What | Value | | --- | --- | | MR | Open, label `New App`. On 2026-10-27 the reviewer `seekme-seekyou` closed it under the 3-month maintenance policy and the maintainer reopened it citing FPInk (!50122), offering to wait three months; no reply since. Metadata and live description are updated to v0.2.0; the public API confirms the description matches `fdroid/inclusion-mr.md`. An update comment is drafted for the maintainer to post; check the MR notes for whether it was | -| Fork branch head | `146017843f`: two commits on the same parent `25d23ee7ce82bd09c71f6579cd3ca2e7e7fb9117` (`New app: MarkNotes`, then `Update MarkNotes to 0.2.0`, pushed through the GitLab API); no rebase | -| Fork pipeline | [3021646859](https://gitlab.com/MaxDac/fdroiddata/-/pipelines/3021646859): all 9 jobs passed | -| `fdroid build` job | [17692692121](https://gitlab.com/MaxDac/fdroiddata/-/jobs/17692692121): "compared built binary to supplied reference binary successfully", unchanged allowed signer `ffafda02…70e4` | -| Release in the MR metadata | [v0.2.0](https://github.com/MaxDac/marknotes-android/releases/tag/v0.2.0), commit `86d39a6721e9985e095398f26dcb2d26f7868c82`, versionCode 200 | -| Release APK | `marknotes-libre-0.2.0.apk`, SHA-256 `5d38152a1a0c2049e88c3a2103d3237008be9d29751470d84e41a4751f33f7b3`, 7,898,401 bytes (7.9 MB) | -| Release workflow | [41608941558](https://github.com/MaxDac/marknotes-android/actions/runs/41608941558): all release gates, signature pinning and signed/unsigned comparison passed | +| Fork branch head | `146017843f` (v0.2.0 Rust recipe) is still what the MR has; the v0.3.0 recipe commit is **not pushed yet** (no GitLab access from the agent session). The prepared recipe is in the 0.3.0 hand-off message and `.fdroid.yml` with `commit: b091b82225e56f9e9fc812b99938ca739eaa63df`; add it as a new commit, no force-push | +| Fork pipeline | Not run for v0.3.0 yet. Last: [3021646859](https://gitlab.com/MaxDac/fdroiddata/-/pipelines/3021646859) (v0.2.0) | +| `fdroid build` job | v0.3.0: pending the fork pipeline. Upstream CI ran the same real `fdroid build` ([release run 41846713157](https://github.com/MaxDac/marknotes-android/actions/runs/41846713157)) and the signed/unsigned comparison passed | +| Release to put in the MR metadata | [v0.3.0](https://github.com/MaxDac/marknotes-android/releases/tag/v0.3.0), commit `b091b82225e56f9e9fc812b99938ca739eaa63df`, versionCode 300 | +| Release APK | `marknotes-libre-0.3.0.apk`, 6,042,056 bytes (6.0 MB), checksum in the release's `SHA256SUMS`; signer `ffafda02…70e4` verified | +| Release workflow | [41846713157](https://github.com/MaxDac/marknotes-android/actions/runs/41846713157): all gates and the signed/unsigned comparison passed | | Quality report | Missing-R8 warning replaced with an informational full-mode release R8 marker; required permissions and metadata/signing/ABI entries remain explained | | Signing certificate | SHA-256 `ffafda02fa9af06b1927095c8d843ae862173512d4cdaca09bbaaef84d1d70e4` (`AllowedAPKSigningKeys`, repo variable `RELEASE_CERT_SHA256`). It must never change | | Anti-features | None: no sync and no network feature since 0.2.0 (Dropbox moved to MarkNotes Plus, marknotes-android#61); `NonFreeNet` was removed from the recipe | -| Permissions | `INTERNET`, `ACCESS_NETWORK_STATE`, `USE_BIOMETRIC`, plus AndroidX's `DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION`. `INTERNET` and `ACCESS_NETWORK_STATE` are merged in from `:app-shared` and unused by this edition; the MR description says removal is planned. Checks / F-Droid build fails on anything else | -| Native libraries per ABI (arm64-v8a, x86_64) | `libjnidispatch.so` (JNA 5.19.1 from Maven Central), `libandroidx.graphics.path.so` (AndroidX). The MR's v0.2.0 build also had a Rust library of ours; later releases do not (see below) | -| Shared sync library | Not used any more, it became private: `.fdroid.yml` has no submodule, `srclibs`, `prebuild`, `build`, `ndk`, `rm` or `gradleprops`. **The MR's metadata still holds the v0.2.0 recipe with the Rust build: replace it with `.fdroid.yml` when the first release without the sync library is submitted** | +| Permissions | `USE_BIOMETRIC`, plus AndroidX's `DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION`. `INTERNET` and `ACCESS_NETWORK_STATE` are removed since 0.3.0. Checks / F-Droid build fails on anything else | +| Native libraries per ABI (arm64-v8a, x86_64) | `libjnidispatch.so` (JNA 5.19.1 from Maven Central), `libandroidx.graphics.path.so` (AndroidX). Nothing of our own | +| Shared sync library | Not used any more: `.fdroid.yml` has no submodule, `srclibs`, `prebuild`, `build`, `ndk`, `rm` or `gradleprops`. **The MR's metadata still holds the v0.2.0 recipe with the Rust build; the v0.3.0 commit replaces it with the `.fdroid.yml` build entry** | | Toolchain pins | None: plain Gradle with the buildserver's JDK | | `rm:` | None in `.fdroid.yml` (the MR's v0.2.0 recipe still lists the old sync paths) | | MarkNotes Pro | Owns Dropbox since [MaxDac/MarkNotes#53](https://github.com/MaxDac/MarkNotes/pull/53); `libre/` re-pin to v0.2.0 in [MaxDac/MarkNotes#54](https://github.com/MaxDac/MarkNotes/pull/54) | @@ -46,7 +46,8 @@ Before acting, check this is still true: compare the MR's head SHA and the lates - v0.1.7 fixed the folder drawer opening and white screen transitions in dark mode. - v0.2.0 removed Dropbox sync (moved to MarkNotes Plus, marknotes-android#61): no sync provider, no `NonFreeNet`, APK 7.9 MB. The recipe's `AntiFeatures` block was removed; the build entry and `CurrentVersion` moved to 0.2.0 / 200. -- After v0.2.0 the shared sync library and fixtures became private repositories, so libre dropped every dependency on +- v0.3.0 removed the `INTERNET` and `ACCESS_NETWORK_STATE` permissions and the sync library: APK 6.0 MB, plain Gradle recipe. +- Before v0.3.0 the shared sync library and fixtures became private repositories, so libre dropped every dependency on them: no submodules, no Rust or NDK in the recipe, no extra native library of our own. Sync lives in MarkNotes Plus. ## Lessons from FPInk (fdroid/fdroiddata!50122, same author, merged)