Repository navigation
Preserve inbox page states and integrate authenticated CR3 navigation - #362
Merged
Merged
Conversation
The design page's decision 4: one channel, CodeReviewRequest in and CodeReviewReply out. A cancel request answers null. No handler is registered yet; CR-2's read service adds it, and CR-3 binds to this line. Coven-Harness: Claude Code / claude-opus-5-5
- PrSummary.stackHint is boolean | null. A search result names no base branch (checked live: no repository object either), so main knows the hint only for PRs it has read itself. - Unavailable gains head-changed: a files or checks read whose PR moved past the asked revision, with no earlier read kept to show as stale. - parseRevision is exported, so main checks GitHub's base ref and SHAs with the same rule the renderer's requests go through. Coven-Harness: Claude Code / claude-opus-5-5
The Store demo's handler map covers every bridge channel, so the new channel broke its build. The offline demo has no GitHub and answers it as unavailable, like its other account and system channels. Coven-Harness: Claude Code / claude-opus-5-5
code-review:read is registered localOnly. Every payload passes validateRequest before anything runs. Reads go through the person's own gh login: gh api <fixed path> --hostname github.com --method GET --include, with no shell, no new sign-in and no token in Modex. - gh.ts runs gh and reads its status line, headers and body. It refuses any path that is not user, the issue search or under repos/, and keeps nothing gh prints to stderr. - github.ts maps GitHub's REST answers to the contract, checking and bounding every field. - read-service.ts keys each read by the gh account (rechecked after 30 s, conditionally) and the repository's stable id. It learns names only from its own reads. An account switch aborts reads in flight and drops everything learned. A files page is bracketed by PR reads, so a moved head reads as stale head-changed, and checks for an old head are stale. It has conditional caching, bounded concurrency, rate-limit backoff, cancellation, and last-good answers kept as stale. It never polls. - Browser development answers the channel with a disabled service. Checked live on TypeSafeAI/modex with Val's authorization, and written into the design page: - Search results carry no repository object. - A cross-reference has no id of its own. - The timeline spells review states in lower case. - The raw media type answers a directory as JSON. Coven-Harness: Claude Code / claude-opus-5-5
The independent review of 197276e requested changes. - AC2 (blocker): a gh auth switch inside the 30 s identity window went unnoticed, so reads ran as the new account but were stamped as the old one. Main now fingerprints gh's hosts.yml, which switch, login and logout rewrite. It rechecks the account when that changes, and confirms the account after every read before replying. Where the file can't be read, it confirms with a conditional gh api user (a free 304). The read that notices a switch goes on under the new account, and a switch clears rate-limit state. - AC3: when the account can't be checked (offline, slow, limited), the last confirmed account still scopes kept answers, which come back stale. Repository lookups all settle before one failure is raised. A 2xx that gh exits non-zero after is failed, not a short file. A short files page is partial, and search pages after the first never claim complete. - AC4: checks are bracketed by PR reads, like files. - Nits: hasOwn enum lookups, strict ISO timestamps, a 429 without Retry-After waits 60 s, a recreated repository is re-resolved, duplicate request ids are rejected, a cancelled read never starts gh, and a forced identity check never joins an older one. - AC5: the smoke probe and its results are recorded in docs/reviews/2026-10-20-cr2-read-smoke.md. Coven-Harness: Claude Code / claude-opus-5-5
The re-review of f2c2de7 found two ways the after-read check still let another account's rows through: - A: a switch away and back within one read. gh answered the original account again, so the read was accepted. Each read now records the hosts.yml fingerprint it began under. If it moved during the read, the answer is refused and nothing is kept, even if the account matches now. - B: a confirming check that failed passed the read. It now fails it. Also: - An inbox's groups are kept only after the check. - A login seen to change stops the offline fallback to the last account's answers. - The fingerprint includes the file's change time. - The contract gains mergePages, which joins an inbox group's pages, deduplicated by key, and calls the list complete only when the distinct rows reach the provider's total. Coven-Harness: Claude Code / claude-opus-5-5
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Code coverage overviewLanguages: TypeScript TypeScript / code-coverage-agent
View coverage of the 10 most impacted files.
ℹ️ Calculations represent line coverage. Results may change as calculations are updated. |
This branch was successfully deployed
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.
CR3 inbox pagination could show stale group data as fresh, repeat a PR across page boundaries, and hide an earlier failed retry when a later page succeeded. This repair preserves per-page read evidence and Retry controls, deduplicates stable PR identities across all pages, and integrates the reviewed CR2 producer so navigation uses the real main-owned service.
Stacked on #346; includes producer #349 and repair #354. Land the producer before landing #346 to main. This PR does not close #322 or Code Review Gate A.
Validation
65e86ddd: build/typecheck, 1,902 unit passes with 16 skips, full E2E 375 desktop passes with six opt-in skips and seven site passes.080ea4da2d23e8853843ad896c5c8ca68d8259a0: build/typecheck and full unit suite passed (1,950 passes, 16 skips). Full combined E2E passed: 375 desktop passes with six opt-in skips and seven site passes.docs/reviews/2026-10-21-cr3-read-integration.md.Original R1–R4 visual comparison and human keyboard/VoiceOver acceptance remain open. Account-switch races and stale/partial responses have fixture evidence; the live probe did not switch real accounts or interrupt the host network. Content panes, native AI review and GitHub writes remain separate follow-up issues.