Repository navigation
Browse Issues: list, filters, parent tree and side panel #27
Description
Activity
Handoff
PR: #32 (into
feat/25-issues, not merged)
Head:92202bf97e3490960c46086f5aacb68bcd1fb00eonfeat/27-browse-issuesDelivered: every acceptance criterion of this Issue:
- PRs/Issues toggle (
/pull-requests?view=issues), a sidebar Issues icon and a palette "Open issues" action. - GitHub-only listing across environments, with a not-supported note for other forges.
- Rows show Open, Done or Not planned.
- Search; sort by updated, created or number; filters for Repository/Project, Labels, Milestone and Parent.
- Parent tree with cross-repo children marked "Outside your projects".
- Side panel: body, comments, comment, close as completed or not planned, reopen, open on GitHub.
- The palette searches listed Issues on the Issues page.
- No storage. Upstream edits are allowlisted and mapped under
issues-browse.
Commands and results (run in
apps/serverorapps/web):-
T3CODE_ISSUES_LIVE=1 T3CODE_ISSUES_LIVE_FIXTURE=30 vp test run src/issues/IssueService.live.test.ts: 6/6 pass against realghand GitHub. It covers:- listing with worktree dedupe and an unsupported forge;
- pagination;
- cross-repo children (model-router#3 → agent-observer);
- detail and a missing Issue;
- comment, close as not planned, reopen and close on fixture [test fixture] Issues live suite (disposable) #30.
Without the flag, all 6 skip.
-
vp test run src/components/issues/issueList.logic.test.ts src/components/CommandPalette.logic.test.ts: 47/47. -
vp test run src/server.test.ts: 197/197.src/auth/RpcAuthorization.test.ts: pass. -
tsc --noEmit: server, web, contracts, client-runtime and mobile all clean. -
vp linton changed files: 0 errors. The only warnings are 22 that already existed in the touched upstream files. -
scripts/fork-check.sh: OK (14 commits, 10 features).
Fixture: #30 has the
test-fixturelabel, which I created. It is closed as completed, with one suite comment.Unverified:
- No integrated pass in a real web client, so no screenshots.
- Independent review not yet done.
- Fork CI on the PR not yet observed.
Merge note for #28: both branches append to
scripts/fork-upstream-edits.txtanddocs/fork-features.md, and probably touchrpc.ts,ws.ts,server.tsandRpcAuthorization.ts. Each upstream path may have only one primary owner, so the merge must move any path both features list into one feature'ssharedFiles.- PRs/Issues toggle (
Handoff update: review fixes
PR: #32 (into
feat/25-issues, not merged)
Head:31d77678b007ce7f386abd436df427445f8e0016(supersedes92202bf)Review findings addressed:
- Failures are now visible. A failed server or failed "Load more" page shows a Retry banner above the rows that stay, and "Load more" is hidden while a failure is showing. It also no longer re-asks for a page it already asked for.
- Dead code removed.
scoreIssueMatchand its tests are gone, and the PR body's palette claim is corrected. - Unsupported repositories counted once. The contract now returns each unsupported repository (
{host, repository}) instead of a count. The server dedupes by the same host+repository key it uses for GitHub, and the client dedupes again across pages and servers. The count reads "N repositories on host". - Toasts explain failures. Comment and close/reopen failure toasts include GitHub's reason via
formatEnvironmentQueryError(result.cause). - Locked Issues keep the comment box. GitHub's schema has no
viewerCanCommentonIssue(checked withgh api graphql__type(name:"Issue")). So the box always shows.IssueDetailnow carrieslocked, a locked Issue shows a note, and if GitHub refuses the comment, the toast shows why. - Pure tests added. New
src/issues/gitHubIssues.test.tstable-testsissueStateOf(OPEN, REOPENED, COMPLETED, NOT_PLANNED, DUPLICATE, null reason) andissueSearchQuery(state, sort, quoting, qualifier injection, refused repositories). - Left as is, per review.
- Palette placement. The Issues group now comes after Actions and appears only once something is typed.
Also fixed:
- knip:
makeis no longer exported fromIssueService.ts, andissueDetailis no longer exported fromstate/issues.ts. - Server typecheck: the live test used
new Date(), which the server typecheck rejects, so the server typecheck failed at92202bf. The marker now usesDateTime.
Commands and results at
31d7767:T3CODE_ISSUES_LIVE=1 T3CODE_ISSUES_LIVE_FIXTURE=30 vp test run src/issues/ src/auth/RpcAuthorization.test.ts: 28/28 (live 6, tables 13, auth 9). The live suite now also checks that a second worktree of the GitLab project counts once. Without the flag, the live suite's 6 tests skip.vp test run src/components/issues/ src/components/CommandPalette.logic.test.ts: 45/45.vp test run src/server.test.ts: 197/197.tsc --noEmit: server, web, contracts, client-runtime and mobile all clean.vp linton every changed file: 0 errors, no warnings in new files.vp fmt --check: clean.vp run knip:check: pass.scripts/fork-check.sh: OK (15 commits, 10 features).
Fixture: I reopened #30 before the run; the suite left it closed as completed.
Unverified:
- No integrated pass in a real client, so no screenshots.
- The fixes have not been re-reviewed.
- Fork CI on
31d7767was pending when I wrote this.
Handoff update: rebased onto feat/25-issues after #33
Head:
ae5ad454ca7fb7dd1dc9014d7bece5da198ba6dc(supersedes31d7767). It is rebased onto5e31442cand force-pushed with lease; PR #32 is MERGEABLE again.Conflicts: only
scripts/fork-upstream-edits.txtanddocs/fork-features.md, and both features' blocks are kept. No upstream path is claimed by both features:- Sidebar: show a parent thread as working while its child threads work #31 owns
ThreadSettlementReactor(.test).tsandpackages/shared/package.json, and sharesSidebar.tsx. - Browse Issues: list, filters, parent tree and side panel #27 touches none of those.
So no
sharedFileschange was needed.Sidebar.tsxandpackages/shared/package.jsondid not conflict. The tree differs from31d7767by exactly #33's diff (10 files, +612/−4).Results at
ae5ad45:- Typecheck (
tsc --noEmit -p tsconfig.json): server, web, shared, contracts and client-runtime all clean. - Live suite (
T3CODE_ISSUES_LIVE=1 T3CODE_ISSUES_LIVE_FIXTURE=30 vp test run src/issues/ src/auth/RpcAuthorization.test.ts): 28/28. Fixture [test fixture] Issues live suite (disposable) #30 was reopened first and left closed as completed. - Sidebar: show a parent thread as working while its child threads work #31's tests:
ThreadSettlementReactor.test.tspasses 58/58 with thedocs/fork.mdhost scrub. Without it, 37 fail on macOS, which is the known host issue.SidebarChildActivity.logic.test.tsand sharedchildThreadActivity.test.tspass. - Web (issues logic, palette logic, SidebarChildActivity): 54/54. Shared: 8/8.
server.test.ts: 197/197. - Lint (changed files vs base): 0 errors, no warnings in new files.
vp fmt --check: clean. vp run knip:check: pass.scripts/fork-check.sh: OK (16 commits, 11 features).
Unverified: fork CI on
ae5ad45was not yet observed; no integrated client pass.- Sidebar: show a parent thread as working while its child threads work #31 owns
Parent
#25
Outcome
The user browses GitHub Issues from all repositories of their T3 projects in Chromeria, and reads and acts on one Issue in a side panel.
Acceptance criteria
scripts/fork-upstream-edits.txtanddocs/fork-features.md.Non-goals
Blocked by
None
Required proof
ghand real GitHub (no fake CLI) covering listing, pagination, cross-repo children, comment and close/reopen, using a disposable fixture Issue.pullRequestList.logic.test.ts.scripts/fork-check.sh; independent review of the exact head.