Skip to content

GitHub: InterlinedApiClient.GitHub.cs service + models #72

Closed

Description

@Adron

Implement all nine /api/github/* endpoints.

Verified reachable (2026-09-15)

GET /api/github/repos → 200 []; GET /api/github/orgs → 200 []. Both answer the bearer sync-token; the empty arrays reflect no linked GitHub identity on the test account, not an auth wall.

Notes

  • GET /api/github/repos is documented as fully paginated — implement paging, do not assume one page.
  • GET /api/github/orgs exists so the repo picker can group by organization.
  • next-issue-number supports showing the number a new issue will get before it is created.
  • githubDefaultRepo on GET /api/user is a per-user default worth honoring in pickers.

Acceptance criteria

  • Nine service methods + models (GitHubRepo, GitHubOrg, GitHubIssue, GitHubLabel, GitHubAssignee).
  • Repo listing pages through the full set.
  • A missing/insufficient GitHub link is a distinguishable state, not a generic error.
  • Write shapes verified live before being typed strictly (read-after-write meanwhile).

Activity

  1. added
    parityWeb/API feature-parity work
    P1Table stakes
    on Sep 15, 2026
  2. Adron commented on Sep 16, 2026

    @Adron
    MemberAuthor

    Implemented in #142 — work continues in the PR from here.

    Two surprises worth flagging. First, the premise that the test account has no GitHub link is wrong: GET /api/user/identities shows provider: "github" as InterlinedListMessenger, and ?org=github returns 559 repos while ?repo=Adron/dashingarrivals returns 13 real issues — the 200 [] from /repos and /orgs just means that account owns no repos and joins no orgs. The unlinked response shape is therefore still unobserved, which is why link state is read from /api/user/identities rather than inferred from an empty collection.

    Second, the pagination expectation inverts. /api/github/repos needs no client paging at all — the server walks GitHub's pages itself and returns the complete set in one bare array (559 and 278 items, well past GitHub's 100/page ceiling), with no envelope, no Link header and no page/per_page params, plus a likely 2000 cap. It is issues, labels and assignees that are stuck on GitHub's first 30 with no way to page further.

    Also: the #76 handoff hinges on ?link=true — /api/auth/github/authorize alone requests only user:email read:user, while ?link=true requests repo read:org — and /api/auth/github/status turns out to carry manageOrgAccessUrl, the documented fix for missing org repos that a reconnect cannot solve.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P1Table stakesarea:githubArea: githubparityWeb/API feature-parity work

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions