2.9 KiB
2.9 KiB
TASK-006: Browse trees and source code by ref
Status: implemented and locally verified — independent review/device check deferred Owner: Codex Reviewer: Claude (deferred until independent review is re-enabled)
Outcome
A user can navigate directories and view source files at an explicit branch, tag, or commit without silently changing refs.
Writable paths
app/src/main/java/com/ubisam/ubgitea/feature/codebrowser/app/src/test/java/com/ubisam/ubgitea/feature/codebrowser/app/src/main/res/values/strings_codebrowser.xml- TASK-006 evidence only
app/src/main/java/com/ubisam/ubgitea/MainActivity.kt(feature wiring only)app/src/main/java/com/ubisam/ubgitea/feature/repositories/RepositoryListScreen.kt(selected-ref handoff only)app/src/main/java/com/ubisam/ubgitea/feature/repositories/RepositoryListViewModel.kt(selected-ref handoff only)
Shared domain, data, Gradle, and manifest contracts remain unchanged. Codex temporarily owns implementation because the product owner paused Claude work while retaining Claude as the future independent reviewer.
Acceptance criteria
- Repository, selected ref, and current path remain visible.
- Directory navigation is deterministic and safely handles encoded names.
- Text files render with bounded memory use and copy support.
- Binary, Git LFS, submodule, unsupported encoding, and oversized-file states have explicit fallbacks.
- Loading, empty, offline, authentication-expired, not-found, and server-error states are localized and accessible.
- Tests cover ref preservation, path navigation, content classification, and size limits.
- Resource names use the
codebrowser_prefix. - Evidence records the exact reviewed TASK-005 contract-freeze commit.
Evidence
- Implemented against TASK-005 local completion commit
bbbff77. It remains a provisional integration base until the deferred independent review closes the contract-freeze criterion. - Selecting a branch or tag opens its root tree. Every load carries immutable repository coordinates and an explicit ref; no navigation action substitutes the default branch.
- Breadcrumb and parent navigation operate on validated
RepositoryPathvalues without decoding encoded-looking names. Directory rows use the server-returned validated path, and directory results are bounded, deduplicated, directory-first, and deterministic. - Source viewing reuses the reviewed TASK-006A strict classifier with 1 MB input, 200,000-code-point, and 10,000-line display limits. Text is selectable and copyable; truncation, binary, LFS, unsupported UTF-8, oversized, symlink, and submodule states are explicit.
- Focused code-browser tests and repository-wide
assembleDebug testDebugUnitTest lintDebugpassed: 102 unit tests across 23 suites, zero failures.git diff --checkand focused sensitive-pattern/read-only scans passed. - Device interaction and independent review remain deferred while Codex owns the serial implementation stream.