69 lines
5.3 KiB
Markdown
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`.
|