Repository navigation
Conversation
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Other scenariosAll 64 scenario measurements match All 64 scenario measurements
Baseline: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — Azure DevOps PR details, summaries, and action replies now reflect recent thread activity. The additional read retains existing dates on failure and does not change remote PR actions or permissions. You can add or adjust custom eligibility rules. Learn more. |
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
Walkthrough
Merge Risk:
|
Dismissing prior approval to re-evaluate fd1155e
…push or comment Azure keeps no updated time on a pull request, so every reader reported the creation date. Open pull requests sorted by creation, read as quiet after 30 minutes, and never revalidated their activity on a new comment. Open pull requests are now dated by the newest thread, which includes the system thread Azure adds for each push, plus any iterations already read for a diff. List, summary, detail and branch lookups share one bounded cache, so concurrent readers make one thread read, at most four run at once, a row that shows a new push, vote or state rereads, and a failed read keeps the latest time seen. Times are compared by instant and written in one ISO form. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…covered A thread read started before a push could be relabelled fresh for the pushed revision, an explicit comment read waited behind queued background reads, and the open-only branch lookup read activity it then discarded. Reads now record the revision they dated when they finish, and a newer revision reads again after one already out. An explicit read runs a queued background read at once and still shares one that is running. Open-only branch lookups skip activity dating; all-state branch status keeps it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
8a44799 to
1061589
Compare
…tivity Dating every listed Azure DevOps pull request by its threads made a cold 99-row list wait for 99 CLI processes, four at a time, before it rendered. The provider now answers the page with what it already knows. Open rows not yet read for their current revision are marked pending, and rows whose last read failed are marked unavailable. Their thread reads run after the answer, through the same bounded, coalesced activity cache. Once they are read, the service replaces that cached list and publishes one refresh, so clients re-read, re-sort and show the dates. A re-read with nothing due starts no reads and no further refresh. Summary and detail reads skip the background queue, so opening a pull request during a cold list stays quick. Web and mobile show a marker instead of a time for rows not dated yet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e pressure A list larger than the activity cache evicted its own dates, so every re-list read them all again and published another refresh. Records still fresh or being read now stay past the capacity. Explicit invalidation and turn refreshes now reach the activity cache through forgetChangeRequestReads, scoped by repository and number. A read already out when the forget arrives cannot mark the replacement fresh. Mobile re-reads loaded continuation pages when a refresh arrives while their rows are undated. Web keeps the undated marker on summaries derived from list rows. A summary with a read time wins a tie against one, so a loading panel no longer shows the creation time as Updated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Under cache pressure, every freshness check walked and reinserted every fresh or in-flight record, so a 2,048-row reread took about 3.6 s of CPU with no external reads. Protected records now wait in a side map until their earliest expiry or a read or forget may release them, so each is walked once per protection period. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Main's action replies (#25761) now patch clients without re-reads. Keep Azure's activity date on those replies the way reads already have it, and let an accepted reply replace a list row's or linked summary's pending or unavailable date marker instead of leaving it beside the host's date. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Dismissing prior approval to re-evaluate 1fafa54
AI-assisted; verified with the tests and tools listed above. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Dismissing prior approval to re-evaluate 67d8d5a
Handing this back after Julius’s source change in 67d8d5a. Before that update, required checks, exact-head Boat verification and independent reviews passed at The PR body contains the audited synthetic web, physical Android and native macOS recordings with their original build attribution. Actual Azure service behavior remains unverified. The new main integration and refactor have not been verified by this automation thread; its earlier ready assessment applies to the prior head/base only. Stopping automated work and leaving further changes and readiness with Julius. |
|
The automated pipeline stopped on this pull request and will not merge it: the proof has no capture anyone can open:
It stays open for a person to finish or close. |
Final test handoff to Julius. Using the production apps/server with synthetic Azure CLI responses, main At capture head Evidence: main native reproduction, native corrected Refresh, Android cold continuation, Android retained-row Refresh, web corrected Refresh. Later fail-first regressions covered stale detail rollback and reference lookups blocked behind background reads. Independent runs passed 69 client state tests and 30 Azure CLI/source-provider tests. At our last tested head No tests, servers or devices remain running from this job. Temporary test artifacts were cleaned. Stopping automation here; Julius owns further testing and readiness. |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Rows and the detail header show updatedAt as before instead of new pending and unavailable markers; the date fix stays. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Dismissing prior approval to re-evaluate 73e96f1
… is read again A listed row's thread read was trusted for five minutes, but the server's listing cache lasts 30 seconds and a comment moves no row field. A listing opened after a comment kept the older date and sorted the pull request below newer quiet ones until a manual refresh. One 30-second age now dates listed rows and pull request reads alike. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Dismissing prior approval to re-evaluate faa6918
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Dismissing prior approval to re-evaluate 90d00b7
…read Azure keeps no last-updated time on a pull request, and its rows date an open one by its creation. A read of one open pull request (summary, detail, action reply) now adds one thread read and takes the newest thread or comment time, which includes the system threads Azure adds for pushes and votes. A failed read keeps the row's own date. This replaces the earlier approach that also dated every listed row: that spent one az process per open pull request on each list read and needed a contract field, server settle plumbing, a client-side summary projection, mobile page re-reads and an activity cache. Dating list rows can follow once thread reads are batched (#21888). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Dismissing prior approval to re-evaluate 5b1e05e
Closes #31167
Open Azure DevOps PRs use their creation date as Updated, so comments and pushes leave active PRs sorted among quiet ones. This change derives activity from threads and available iteration dates, shares reads, and applies the date to PR lists, summaries, details and action replies. Generic branch probes keep main's metadata-only behavior so unrelated fork candidates do not trigger activity reads.
Cold pages return with pending dates before activity reads settle. Background activity reads run four at a time, then refresh the affected list. Detail answers and action replies update loaded rows, and a five-minute per-PR projection prevents late cached answers from rolling them back. Mobile revalidates loaded continuation pages; the shared query helper now waits for the new answer when refresh begins inside an atom batch.
Verification
Head
1fafa5479e64f6ee40e470e0cf0a129385dd61b4, main basee89abadaee70e0d73fb19a5ce40a686b1a92310e.fleet-job check 31209 --head 1fafa5479e64f6ee40e470e0cf0a129385dd61b4passedcheck:changedagainst this base. Boat removed VMbx_2yjk6a93after completion. It passed format, lint, knip, GraphQL, 37 package typechecks, tests in 12 files and React compiler checks in 9 files. GitHub checks and test output pass at this head. Independent source reviews resolved the branch-read fan-out and batched-refresh findings, with no remaining source finding. The 5bc independent source review passed 49 focused tests; its author passed 1,851 client-runtime tests. The follow-up at ff7 independently passed all 69 pull-request state tests and resolved the stale-detail observation and tracing findings. A separate review at 1fafa accepted the reference-priority correction and independently passed all 30 focused Azure CLI/source-provider tests. Separate evidence audits accepted the web, Android and fresh native macOS captures, with no remaining evidence finding.The captures below were made at 5bc, before the ff7 stale-detail correction and 1fafa reference-priority correction. Independent review confirmed that they remain applicable to the unchanged accepted-detail and action paths. The reference-priority correction lets an interactive reference lookup bypass queued background activity reads, without changing metadata-only branch lists. Its existing queue test failed first and now verifies that reference #6 starts while four background reads remain held. The added stale-detail regression failed first when an equal-date older detail restored the old title and draft flag; ff7 rejects that observation before cached rows or mobile continuation callbacks receive it.
These captures use the production app and server with synthetic Azure CLI responses. They do not establish authenticated Azure behavior or service latency.
Fresh web comparison
Main e89: ordinary panel Refresh loads the new comment, while Updated stays at 3d and #42 remains below #43.
main-refresh.mp4
Head 5bc: the same open list/panel starts with #42 at 40m below #1040 at 20m. Changing only #42's comment and using ordinary panel Refresh shows the new comment, both dates at just now, and #42 above #1040 after the explicit refresh. The backend stays connected. No list Refresh is clicked during this recording; automatic list requests occur.
web-refresh.mp4
Physical Android captured at 5bc
On a POCO F4 running Android 14, the compatible development client fingerprint is
832d41716ea2dfac7350605db3fd07914f87d6ef; Metro served source at5bc81a579d668bca604985711417e54ea60f534c. In one unchanged All PRs scope, cold continuation #1090 becomes dated automatically and moves first, without manual list Refresh or navigation during settlement. The fixture records automatic re-reads of all four loaded pages. The gate has an eight-second per-process cap; this demonstrates settlement, not service latency.cold1090.mp4
A second recording starts with #1030 still retained beyond the first 30 rows. Changing only its comment date, pulling to refresh detail and using Back moves it first with a fresh date. Accessibility scroll actions return to the top without triggering list Refresh.
known1030.mp4
Both raw Android recordings were decoded and their pending, settled and final frames inspected. They retain variable frame timestamps and decoder timestamp warnings; no edited timing or latency claim is made. Detail-menu draft/ready passed at
354207a4bac043e01b958f7f70fe5dbf81b65dd5and uses an unchanged command path.Fresh native macOS comparison
Built main
e89abadaee70e0d73fb19a5ce40a686b1a92310eand capture head5bc81a579d668bca604985711417e54ea60f534con shiv, Apple M6 Mac mini, macOS 27.0.1, Electron 44.10.1. Bothbuild:desktopruns passed 5/5; all 14 changed non-mobile runtime sources matched emitted source-map contents. Each app used a disposable profile and server home with mock keychain. Compiled artifacts stayed unchanged during the tests.Main loads the changed comment on ordinary panel Refresh, but its header and row stay at 3d and #42 stays below quiet #43.
main-pr42.mp4
Capture head 5bc starts with #42 at 2h below #1040 at 51m. The same comment-only refresh updates the comment, header and loaded row to 2m and moves #42 first. No manual list Refresh or navigation occurs during the recording. The decoded 16-second frame has the corrected state, shortly after the Refresh RPC at about 14.58 seconds.
head-pr42.mp4
The retained desktop row #1030 also moves first after changing only its comment date and choosing panel Refresh. Draft/ready replies preserve the authoritative date; Drafts only changes from empty to one row and back to empty as those actions settle.
head-pr1030.mp4
head-actions.mp4
head-filter.mp4
All five original recordings decoded fully and their trigger and end-state frames were inspected. MP4s copy the recorder streams without cuts or speed edits. Automatic base-list processes occurred in each window: main #42 3, head #42 6, #1030 6, draft/ready 6, draft filter 15. The list's 30-second stale time is not a configured periodic poll; these results establish explicit-refresh and signal-driven updates. Apps, profiles, test state and the native lock were cleaned up.
Scope and approval
This addresses the existing Updated field and its sorting and refresh consumers in #31167. The defect is an open PR retaining its creation date after comments or pushes. The contract and client changes carry that corrected date, represent pending reads truthfully and keep loaded rows consistent. Asynchronous reads preserve list responsiveness after a synchronous version showed a measured cold-list regression. There is no new setting or workflow.
This submission relies on CONTRIBUTING.md's focused obvious-bug exception. The changes serve that one correction across the existing clients; the guide judges purpose and behavioral impact without a line-count cutoff. No explicit maintainer approval is claimed. Maintainers retain the eligibility decision.
Costs and limits
An uncached page of N open PRs needs up to N thread processes, four at a time. List dates may be five minutes old, summary/detail one minute old; explicit Refresh invalidates them. The activity-cache target of 1,024 entries is soft while records are fresh or in flight. Azure's creation-based paging still limits sorting to fetched rows. Push dating relies on RefUpdate system threads unless an iteration read supplies a newer time.
Unverified: actual Azure service comment/push behavior and latency, signed distribution and real keychain. Synthetic integration is accepted for this task; no test environment was signed into a real account.
Implementation: Claude Opus 5.5 through T3 Code, with the stale-detail review correction by GPT-6.1 Sol through Codex. Investigation, verification and independent review: GPT-6.1 Sol through Codex in T3 Code.