Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .claude/skills/fdroid-inclusion-mr/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
11 changes: 5 additions & 6 deletions fdroid/inclusion-mr.md
Original file line number Diff line number Diff line change
Expand Up @@ -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}"`).
Expand All @@ -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

Expand All @@ -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
Expand Down
23 changes: 12 additions & 11 deletions fdroid/review-handover.md
Original file line number Diff line number Diff line change
Expand Up @@ -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) |
Expand All @@ -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)
Expand Down
Loading