Files
agendula/docs
makiolaj 5a81d3c2f5 sync(chunk 2a): vendor dav4jvm 2.2.1 as :dav
JitPack-only publishing conflicts with FAIL_ON_PROJECT_REPOS, artifacts are
unsigned and not immutable, and upstream shipped two breaking majors 19 days
apart. 2.2.1 is the last OkHttp release: 3.0.0 moved to Ktor and 4.x needs
Java 21, and SYNC.md's whole auth section is written in OkHttp terms, so 4.x
would have invalidated it. A plain JVM module, not an Android library — the
tree has no Android imports and keeping it that way keeps the floret-kit
extraction a file move.

Four changes from upstream, all in dav/PROVENANCE.md:
- commons-lang3 dropped (one import, one call). The replacement requires the
  whole string to be consumed, as DateUtils did: pattern 1 ends in a literal
  'GMT', so SimpleDateFormat would match "...GMT+02:00" as a prefix and throw
  the offset away.
- HTTP dates were parsed and formatted in the device's local zone — the GMT in
  the format string is a quoted literal and timeZone was never set, so every
  getlastmodified was out by the local UTC offset. Upstream tests dates
  nowhere. The formatter is also no longer shared and mutable.
- dav4jvm#209: permanent redirects now reach the caller via
  DavResource.permanentLocation, cleared per request so it never describes an
  earlier one.
- xpp3 is compileOnly; Android supplies org.xmlpull.v1.

SYNC.md's other claimed defect, "does not follow 303", is not true of 2.2.1 —
pinned by a test rather than removed from the notes.

CI names :dav:test explicitly; testDebugUnitTest is Android-only and would
have run none of the vendored suite. lintDebug added to the per-chunk checks
after it caught a literal byte-order mark left by chunk 1.
2026-09-04 17:12:27 +02:00
..

Agendula — documentation

Agendula is a Material 3 Expressive task app for Android. It carries its own task store — the dmfs task provider vendored under our own authority — so it is complete and local-first with nothing else installed; an external provider (OpenTasks / tasks.org, synced by DAVx5 / SmoothSync / DecSync) is a user choice rather than a requirement, and our own CalDAV sync is the 1.x arc. Sibling to Calendula. See the top-level ../README.md for the project pitch.

Index

Doc What it covers
ARCHITECTURE.md How Agendula is built today — layers, the data seam, provider resolution, the reminder engine, DI, build/tooling, manifest. Start here to work on the code.
ROADMAP.md Status and what's next — milestones (M0–M6 + Posture B), what's done, open decisions, how to build/verify.
STORAGE-AND-SYNC.md Where task data lives — the decision to ship our own provider, the storage modes, permissions, distribution, and the dead ends. Supersedes PLAN.md on storage.
SYNC.md How data reaches a server — the CalDAV sync adapter: the VTODO ↔ TaskContract mapper, Nextcloud sign-in, the engine, libraries and their licenses. Step 5 of STORAGE-AND-SYNC.md.
STORAGE-DECISION.md Keep the vendored provider, or build our own? The measured cost of both. Decided: build our own.
OWN-STORE.md Agendula's own Room store — the schema, recurrence design, migration off the vendored provider, and the six-phase plan that deletes :provider. Supersedes the "keep the provider" position in STORAGE-AND-SYNC.md.
PLAN.md The original implementation plan and design rationale — the A-now-B-later thesis, what transfers from Calendula, the locked decisions. The "why".
RELEASING.md How to cut a release — the git-tag-as-source-of-truth flow, CI jobs, F-Droid repo, required secrets.
../provider/PROVENANCE.md What the vendored :provider module is, where it came from, and every deviation from upstream dmfs.

Also: ../CHANGELOG.md (Keep a Changelog format; tag sections feed the release notes).

How the docs relate

  • PLAN is the original design decisions (the "why"), left as the historical record. On storage it is superseded by STORAGE-AND-SYNC.
  • STORAGE-AND-SYNC and SYNC are the standing decision documents: the first settles where data lives, the second how it syncs. Both record rejected alternatives on purpose, so decisions don't get relitigated.
  • ARCHITECTURE is the current shape of the code (kept in sync with the source as it grows).
  • ROADMAP is the moving status layer (update as milestones land).
  • RELEASING is the operational runbook.