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

5.5 KiB

UBGitea current status and development roadmap

Last updated: 2026-08-25
Reviewed handoff package commit: 57d1c09 Claude activation ref: handoff/task-006a-ready 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 implement TASK-006A only from immutable Git tag handoff/task-006a-ready. The tag must resolve to a commit containing this status, task scope, prompt, mailbox rules, and review closure.

  • 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.