Ubisam-MobileGit/handoff/current-status-and-roadmap.md

69 lines
5.3 KiB
Markdown

# 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/user` identity check followed by bounded, paginated, ID-deduplicated `/api/v1/user/repos` loading.
- 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.json` is 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`.