Closes one of docs/product.md's open product decisions ("whether
repositories must be cached for offline browsing"), at the human product
owner's explicit request.
A new file-backed RepositoryListCache persists the ALL/no-organization-
filter repository list after every successful load, using a dedicated
plain DTO (not the domain RepositorySummary directly, since
RepositoryCoordinates/RepositoryRef validate through a private-constructor
factory Gson's reflection would otherwise bypass). RepositoryListViewModel
falls back to it whenever a live fetch of that view fails with a
network-classified error (cold start or mid-session), seeding
repositorySnapshots so pagination keeps working from the cache. A
page-level banner makes the fallback impossible to mistake for a live
view. The cache is cleared on logout.
Deliberately scoped to just the landing list -- not favorites,
organization filters, or repository internals (branches/files/history) --
confirmed with the human product owner after they live-tested the
fallback via airplane mode and asked about extending it further; decided
to hold that off.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
UBGitea
Android client for the Ubisam Paju Gitea instance.
The repository currently contains the engineering harness that governs collaborative development by Codex and Claude. Product code will be bootstrapped through the tasks under tasks/.
Start here
- Read
AGENTS.md. - Read
docs/product.mdanddocs/architecture.md. - Select one task from
tasks/. - Assign one writer and one independent reviewer.
- Record build and test evidence before marking the task complete.
OAuth uses Authorization Code with PKCE and does not use a client secret.
Local checks
Open the repository root in Android Studio, or use JDK 17 with Android SDK 36 installed and run:
./gradlew assembleDebug
./gradlew testDebugUnitTest
./gradlew lintDebug
The application uses ID com.ubisam.ubgitea and supports Android 9 (API 28) and later. See ADR-001.
Description
Languages
Kotlin
99.5%
PowerShell
0.5%