5.3 KiB
5.3 KiB
UBGitea current status and development roadmap
Last updated: 2026-08-25
Reviewed implementation baseline: fc9d78a plus TASK-012 documentation
Active branch: codex/repository-browser-foundation
Completed and verified
Project foundation
- Android application ID
com.ubisam.ubgitea; Android 9/API 28 minimum. - Kotlin, Jetpack Compose, Material 3, API 36 target, JDK 17.
- Immutable repository/branch/tree/file/commit domain contracts and read-only use-case boundaries.
Authentication and repository list
- Production Gitea default:
https://gitea.ubisampaju.synology.me. - OAuth 2.0 Authorization Code with fresh PKCE S256 and state per attempt.
- Credentials are entered only in the system browser; no WebView and no client secret.
- Exact verified HTTPS App Link callback at
/ubisampaju/oauth/callback. - One-time pending transaction consumption, callback expiry/state validation, login cancellation, and failure recovery.
- Android Keystore AES-GCM token protection, backup exclusion, redacted token representation, and logout deletion.
- Authenticated
/api/v1/useridentity check followed by bounded, paginated, ID-deduplicated/api/v1/user/reposloading. - Korean signed-out, browser-waiting/cancel, loading, content, empty, offline, permission, authentication-expired, callback-error, and server-error states.
- Repository rows display owner/name, visibility, optional description, and default branch.
Evidence
- Implementation commit:
a4451e9. - Device E2E closure commit:
fc9d78a. - Product owner verified real account login and internal repository list on the target device.
- Debug build, 57 unit tests, Android lint, diff check, and sensitive-pattern scan passed.
- Final independent review reported no unresolved P0/P1.
- Hosted
assetlinks.jsonis external infrastructure; the user-owned workspace copy remains untracked and must not be committed.
Immediate serial handoff
Claude may now implement TASK-006A only.
- Outcome: classify already-loaded source bytes as bounded text, binary, Git LFS pointer, unsupported encoding, or oversized content.
- Writable scope: only the paths listed in
tasks/006a-code-content-classifier.md. - Why it can start now: it is pure Kotlin, uses frozen TASK-003 domain inputs, and does not depend on unfinished HTTP or navigation work.
- Required handback: exact commit/diff, acceptance checklist, focused and repository-wide check results, known limitations, and a request for Codex read-only review.
- Claude must stop after TASK-006A. TASK-006 UI is not authorized until Codex freezes TASK-004/005 contracts.
Remaining delivery sequence
| Order | Task and owner | What will be developed | Implementation approach and exit gate |
|---|---|---|---|
| 1 | TASK-006A — Claude | Safe source-content classifier | Pure Kotlin strict UTF-8 decoding, byte/character/line limits, binary and canonical LFS detection; focused tests plus build/test/lint; Codex review. |
| 2 | TASK-004 remainder — Codex | Branch, tag, tree, file, and commit read-only Gitea APIs | Add endpoint DTOs and domain mapping, safe per-component URL encoding, typed failures, bounded pagination, fake-transport tests; Claude review. |
| 3 | TASK-005 remainder — Codex | Repository selection and branch/tag list | Compose/ViewModel unidirectional state, selected repository/ref, refresh/retry/dedupe, Korean accessible states, navigation contract; device check and Claude review; record contract-freeze commit. |
| 4 | TASK-006 — Claude | Tree navigation and source viewer | Consume frozen APIs and TASK-006A classifier; keep repository/ref/path visible; bounded rendering and explicit fallbacks; Compose/presentation tests; Codex review/integration. |
| 5 | TASK-009 — Codex | Commit-history, changed-file, diff, and comparison contracts | Immutable typed contracts, independent ref encoding, pagination and truncation bounds, representative JSON/failure tests; Claude review and freeze. |
| 6 | TASK-007 — Claude | Commit history and change viewer | Paginated history, commit metadata/files, rename/delete states, bounded patches and comparisons; accessible Compose tests; Codex integration. |
| 7 | TASK-010 — Codex | Pull-request, issue, review, and comment contracts | Separate immutable DTO/domain models, nullable/deleted-author handling, typed failures, read-only endpoints and fake tests; Claude review and freeze. |
| 8 | TASK-008 — Claude | Pull-request and issue read-only UI | Distinct PR/issue models and lists/details/comments, pagination/retry/accessibility states; Codex integration. |
| 9 | Future accepted task — Codex | Notifications, organizations, release hardening | Create acceptance-criteria tasks first; add read-only APIs/UI, final device regression, signing/release evidence and secret scan. |
Rules for every next task
- Never implement without an acceptance-criteria task.
- Work serially: one writer, one working tree, one bounded task.
- Do not edit shared domain/data/navigation/Gradle/manifest files from a Claude-owned feature task; ask Codex through the mailbox.
- Do not contact production from automated tests.
- Preserve read-only product behavior; no create/edit/merge/delete/admin endpoint.
- Run task-focused tests, full unit tests, debug build, lint, diff check, and sensitive-pattern scan.
- Append the feature, design, checks, review resolutions, limitations, and next owner to
docs/development-log.md.