Skip to content

feat(github): list my PRs, review requests and issues on the Home - #194

Merged
Bakhomious merged 5 commits into
mainfrom
step/github-attention
Oct 30, 2026
Merged

Bakhomious merged 5 commits into
mainfrom
step/github-attention

Conversation

@Bakhomious

@Bakhomious Bakhomious commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

The github service answers the attention contract, so the Home's "Needs you" lists my open PRs, the PRs that wait for my review and the open issues assigned to me (decision 208). The last of github-widgets' nine steps.

The user's choice: asked what reaches the Home (decision 200), the user chose my open PRs as well as the lead's pick, the review requests and the assigned issues that §7 lists (2026-10-30). The second commit adds my PRs; §7 now lists them too.

Brief

Goal: github lists my PRs, the review requests and the assigned issues over bakhyard.attention.v1, and home names them as GitHub's.

Scope

  • SOURCE_GITHUB = 3 in the attention contract, and its generated code.
  • proto:breaking, buf breaking against main on GitHub, in check: decision 158 wants it from the first change to a contract in use, which this is.
  • home names the new source "GitHub".
  • Lister in services/github/internal/attention, over the pollers of my PRs, the review requests and the issues; routes serves it on a connect server.
  • process-compose.yaml: github among home's peers.
  • Docs: decision 208, §0, §7's "Needs you today" list, §8.2, §4's contract and Home notes, the tasks and the deferred list.

Out of scope: a reason on my PRs' rows; a due time; an item's own link (§4.5); home's peer on the laptop, which codedogapp/homelab#43 adds; the app, which already knows "GitHub" as a source.

Acceptance criteria

  1. With GitHub set up, ListItems lists an item for each of my open PRs, then for each review request, then for each assigned issue: the ID owner/repo#N, the title, the detail owner/repo #N (as pulls' items have), owner/repo #N · Review requested or owner/repo #N · Assigned, · Draft after a draft PR's, the source SOURCE_GITHUB and no due time.
  2. Without GitHub, it lists none.
  3. Until all three searches have succeeded once, it fails with UNAVAILABLE; after that, it lists each list's items from its latest search to succeed, kept through the searches that fail.
  4. It waits for the first searches, and stops waiting with ctx's error when ctx ends.
  5. home names an item with SOURCE_GITHUB "GitHub".
  6. mise run proto:breaking passes on this branch and fails on a breaking change; check runs it.
  7. home's peers in process-compose.yaml include github, and lint:compose passes.
  8. mise run check is green locally and in CI.

QA

  • Criteria 1 to 5: unit tests in services/github/internal/attention (synctest for the searches' timing), the service's own gRPC test over h2c, and home's feed and API tests. QA added a GitHub item to home's API test, so "GitHub" on the wire is pinned as Jira's and Bitbucket's are.
  • Live probe: the github binary against a stand-in GitHub search, with home in front of it. With my PRs' search down, and again with the issues', ListItems answers unavailable and home's sources say github is unavailable, with no items. With all three up, it lists the five items in order, my PRs first with no reason, Draft included, and home serves them as github/acme/web#7 and so on, with the source "GitHub", sorted by title.
  • Mutants: 41 of 41 killed, after the second commit (the nil and success checks, the code, Draft, the three lists' order, each list dropped, the reasons and their separator, no reason on my PRs, the errors of all three lists and of Latest, the source, ID, detail, title and due time, the server's wiring and its three pollers, and home's mapping and spelling).
  • Criterion 6: mise run proto:breaking passes here; renaming SOURCE_JIRA or deleting Item.detail fails it with exit 100; check runs it.
  • Criteria 7 and 8: lint:compose and mise run check green locally, after merging main: fmt, lint, actions, compose, gen, proto:breaking, copilot, test and coverage (attention 100%), vuln, the web's gates (Vitest 1,341 tests) and the end-to-end tests in both browsers (438 passed, 8 skipped), with BAKHYARD_E2E_PORT=8280, on the head with feat(web): show my GitHub PRs, review requests and issues #191 merged in.

Review

No blocking findings. Non-blocking:

  • authored, the reason of my PRs, is reason's zero value, so a reason left unset would read as mine; each of the three calls names its reason.
  • The service test's gRPC call over h2c is the fourth copy of its kind (pulls, time, todos, github); a shared test helper could replace them, in a step of its own.
  • proto:breaking compares with main's tip, so a run on a commit older than a contract change on main fails until the branch merges main in (decision 208).
  • proto:breaking needs the network, as vuln and the web's audit do.

The github service answers the attention contract, so the Home's
"Needs you" lists the PRs that wait for my review and the open issues
assigned to me, the lead's pick until the user chooses (decision 208).

The new source, SOURCE_GITHUB, is the first change to a contract in
use, so proto:breaking joins check, as decision 158 planned. It runs
buf breaking against main on GitHub, since CI's checkout of a pull
request has no main of its own.
The user chose (2026-10-30) to have their open PRs reach the Home's "Needs you" as well as the review requests and the assigned issues. They lead the list, with no reason in their detail, as pulls' items have none (decisions 158 and 208).
@Bakhomious Bakhomious changed the title feat(github): list my review requests and issues on the Home feat(github): list my PRs, review requests and issues on the Home Oct 30, 2026
@Bakhomious
Bakhomious marked this pull request as ready for review October 30, 2026 10:25
@Bakhomious
Bakhomious merged commit 8feff43 into main Oct 30, 2026
2 checks passed
@Bakhomious
Bakhomious deleted the step/github-attention branch October 30, 2026 10:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant