Frozen domain/data contracts for issues, pull requests, reviews, and
comments so TASK-008's UI can be built without touching shared layers.
- Separate immutable IssueSummary/Detail and PullRequestSummary/Detail
models; WorkItemAuthor.Unavailable instead of inventing an identity
for deleted/null authors.
- PullRequestState derived from Gitea's merged flag + open/closed
state (no single field already encodes "merged").
- listIssues drops entries with a non-null pull_request field so
Gitea's issue-list endpoint (which also returns PRs) never
duplicates listPullRequests, done client-side rather than trusting
an unverified query parameter.
- Reuses existing Page<T> and ApiFailure rather than new parallel
types. Read-only: no put/delete/postForm call anywhere in the file.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>