No task waits on a Codex review; the redesign tasks are confirmed on the product owner's Z Fold7; TASK-016's leftovers are on hold; no biometric reauthentication. Agent: main (opus) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
75 lines
3.9 KiB
Markdown
75 lines
3.9 KiB
Markdown
# TASK-051: Home: team activity
|
|
|
|
Status: implemented; required checks pass; confirmed by the human product owner on their Z Fold7 (2026-09-29)
|
|
Owner: Claude
|
|
Reviewer: human product owner
|
|
|
|
## Outcome
|
|
|
|
The product owner's main use for the app is watching what the team is doing. Home shows it:
|
|
today's pushes, open pull requests and new issues; what is waiting on the signed-in person; the
|
|
repositories with recent activity; and a timeline of who did what, where.
|
|
|
|
## Scope
|
|
|
|
- Included: `GiteaActivityApi` (user and organization activity feeds), `GiteaWorkSearchApi.count`,
|
|
`HomeViewModel`, `HomeScreen` in a one-column and a two-pane layout, navigation from a timeline row
|
|
to the branch, pull request or issue it is about.
|
|
- Excluded: marking anything read, reacting, commenting -- Home only reads. A list of favorites on Home:
|
|
the repositories shown are the recently active ones, not the starred ones.
|
|
|
|
## Writable paths
|
|
|
|
- `app/src/main/java/com/ubisam/ubgitea/feature/home/`
|
|
- `app/src/main/java/com/ubisam/ubgitea/data/activity/`
|
|
- `app/src/main/java/com/ubisam/ubgitea/data/GiteaApiSupport.kt`
|
|
- `app/src/main/java/com/ubisam/ubgitea/domain/activity/`
|
|
- `app/src/main/res/values/strings_home.xml`
|
|
|
|
## Acceptance criteria
|
|
|
|
- [x] Home loads the signed-in account's feed, and an organization's feed when one is chosen.
|
|
- [x] The timeline can be filtered to pushes, pull requests or issues, and can load older activity.
|
|
- [x] A failed count leaves that one tile blank; it never takes the timeline down.
|
|
- [x] Failing to list organizations hides the organization filter; it does not fail the screen.
|
|
- [x] Activity content that does not parse costs a row its detail, never the feed.
|
|
- [x] Starring, watching and mirror-sync activity is left out of the timeline.
|
|
- [x] Loading, empty, offline, expired-session and server-error states are all shown.
|
|
- [x] No OAuth scope is added.
|
|
- [x] Build, unit tests and lint pass.
|
|
- [ ] The feed's real `content` payloads were compared against what the parser expects, on the company instance.
|
|
- [ ] Confirmed on the human product owner's device (phone and unfolded Z Fold).
|
|
|
|
## Security and privacy
|
|
|
|
Read-only, within the scopes the app already requests. Nothing from the feed is logged.
|
|
|
|
## Required checks
|
|
|
|
```text
|
|
./gradlew compileDebugKotlin compileDebugUnitTestKotlin testDebugUnitTest assembleDebug lintDebug
|
|
```
|
|
|
|
## Evidence
|
|
|
|
Recorded on 2026-09-28 in the worktree `awesome-pascal-3f2ada`, with Android Studio's bundled JDK (`D:\AndroidStudio\jbr`, OpenJDK 21). TASK-050 to TASK-054 were built together and checked together:
|
|
|
|
- `./gradlew compileDebugKotlin compileDebugUnitTestKotlin testDebugUnitTest assembleDebug lintDebug` -- passed.
|
|
- Unit tests: 409 in 45 suites, 0 failures, 0 errors (289 before this work).
|
|
- Lint: 0 errors, 55 warnings (dependency updates, unused resources, KTX suggestions).
|
|
- Emulator (API 36, `sdk_gphone64_x86_64`): the debug APK installs and launches without a crash and shows the sign-in screen with the logo and the new palette. Nothing past sign-in could be reached: that needs a company account.
|
|
- Not done: any check on a physical device. None was visible to `adb` during this work.
|
|
- New tests: `GiteaActivityApiTest` (12), `HomeSummariesTest` (9), `HomeViewModelTest` (8).
|
|
- API availability was checked against the company instance's published API description (Gitea 1.23.5), without signing in.
|
|
- Unit tests were written by a delegated worker from `handoff/2026-09-28_unit-tests-redesign.md`; the full run above was repeated here afterwards.
|
|
|
|
## Known limitations
|
|
|
|
- The shape of an activity's `content` is not described by Gitea's API; it was taken from Gitea's source, not confirmed against the company instance. The parser is lenient for that reason.
|
|
- Today's push and issue counts are counted from at most 150 of today's activities; beyond that they are shown as a lower bound ("150+" style).
|
|
- Activity bars cover only the activity that was loaded, so a very busy week is under-counted.
|
|
|
|
## Review findings
|
|
|
|
None yet.
|