Repository navigation
feat(web): show my GitHub PRs, review requests and issues - #191
Merged
Merged
Conversation
The GitHub app's path now shows the github service's three lists, each in the shell's polled section with one shared row, or "GitHub isn't set up." when the service answers 404. A page of its own is the lead's pick until the user chooses where the lists live (decision 207).
QA found that nothing checked a row's look against the PRs page's, that the lists load again each time the page shows, or that one list answering 404 leaves out only its section. The app's page tests now cover the /github path too.
# Conflicts: # apps/web/e2e/page-status.spec.ts # apps/web/src/App.pages.test.ts # apps/web/src/App.svelte # apps/web/src/shell/page.test.ts # apps/web/src/shell/page.ts # docs/plan.md
# Conflicts: # apps/web/src/shell/page.ts
The user chose a page of its own at /github (nudge, 2026-10-30). The page lands ahead of the gateway's route, whose 404 makes it say that GitHub isn't set up until then.
Bakhomious
marked this pull request as ready for review
October 30, 2026 08:43
This was referenced Oct 30, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Brief
Goal: the GitHub app's page shows the
githubservice's three lists: my open PRs, the open PRs that wait for my review or my teams', and the open issues assigned to me (plan §8.2 Phase 4,github-page, decision 207).Scope
apps/web/src/github/:github.ts, the item and snapshot types and the loader for each list;GitHubPage.svelte, three of the shell'sPolledSections (decision 205) sharing one row snippet, and "GitHub isn't set up." in the shared status line (decision 206).page.tssends/githuband the paths below it to the page, titled "GitHub · Bakhyard";App.svelteshows it.e2e/github.ts(the made-up user's lists and the answer helpers),e2e/github.spec.ts, and the GitHub page ine2e/page-status.spec.ts.Out of scope: the Home's "Needs you" (
github-attention, next); the gateway's route (#179); the rollout (codedogapp/homelab#43); when each item was opened or updated, a summary and a refresh button (decision 149).Acceptance criteria
/githuband the paths below it show the page, with the head "GitHub" and the title "GitHub · Bakhyard"; the desktop nav marks GitHub, the phone's tab bar marks More.mise run checkis green.What changed
GET /api/github/mine,/reviewsand/issuesas it shows, and each section appears once its own list loads. A row is the PRs page's without the review line, which GitHub's search doesn't give; an item without an https link gets a row that isn't a link (decisions 201 and 203).e2e/github.tsrather thane2e/demo.ts, which would pass 200 lines with them.Screenshots
The made-up user's lists, in the tests' Tokyo time.
QA
Mutants: 42 on
GitHubPage.svelte,github.tsandpage.ts, covering:39 died at first. The 3 survivors die to the tests QA added:
list-rowandlist-labelclasses: the end-to-end test "a draft PR's row looks as one on the PRs page" compares the row's, label's, title's, detail's and chip's computed styles with PR chore(deps): update dependency vite to v8.3.5 #41's on the PRs pageevery→somein the status line's condition: the unit test "leaves out only the section of a list that answers 404 when the others load"Added: the end-to-end test "the GitHub page loads its lists again each time it shows", as the PRs page's spec has (decision 172), and
/githubinApp.pages.test.ts, so the app's page switch covers the page.Coverage:
src/github100% of lines, statements and functions, 85.71% of branches. The one uncovered branch is the compiler'sitem.id ?? ''in#{item.id}, as inPullsSection.svelte's#{pull.id}.The empty-text table in
GitHubPage.test.tslost a column that no test read.Review
No blocking findings. Non-blocking:
Object.values(lists).every(…), stays in the component, as the PRs page'smine.kind === 'off' && reviews.kind === 'off'does./githubas its "Coming soon" example since feat(web): list the plans on the Planner page #205; it now opens on the GitHub page and waits for its "Your PRs" section, whichAppPagedoesn't have.Gates
mise run check, green locally withBAKHYARD_E2E_PORT=8280on the head withorigin/mainmerged in: Go fmt, gen, lint, actions and compose lint, tests, coverage, govulncheck, the Copilot SDK check; web install, Biome, svelte-check and tsc, Vitest with coverage, knip, pnpm audit, Playwright end-to-end tests in both browsers (438 passed, 8 skipped); Vitest ran 1,341 tests.