Repository navigation
fix: refresh GitHub issues with fewer conversation requests - #254
Merged
Merged
Conversation
Collect distinct issue answers before hydration and fill bounded GraphQL comment batches. Match existing fixture responses to each requested alias and repository/issue identity. Realizes §FS-001-forge-interface.8.3.
vjovanov
marked this pull request as ready for review
November 5, 2026 18:19
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.
Closes #252
A
github-issuessource usingupdated_within_days: 0to keep quiet open work previously read the same conversation repeatedly when authored, open and participating searches overlapped, making a separate request for each read. The unchanged source now deduplicates valid answers by repository and issue number before reading comments, then fills GraphQL alias batches of at most 20 distinct conversations.This implements the existing cheapest-refresh requirement clarified in §FS-001-forge-interface.8.3 docs/functional-spec/FS-001-forge-interface.md:584: read each distinct conversation at most once per fetch, fill bounded batches, and preserve the conversations and facts the feed needs. Distinct old closed conversations still get read in these batches.
Quiet open conversations, recent closed loose ends and old conversations retained by open runtime work remain available. Search questions, shared bounds, limits, completeness checks and visibility policy are preserved, with no new option. Author precedence and first-seen payload/order remain intact; equal issue numbers in different repositories stay distinct. Comment normalization, message identities/order, the last 30 comments, first 50 reactions per comment and configured host handling are preserved.
comments: falseand issues without comments make no comment requests. The manual now describes the batched reads.Unavailable conversations leave their issues intact. Partial responses retain successful siblings even when
ghexits unsuccessfully; failed or malformed batches do not prevent later batches from being read or trigger per-issue retries.The original offline fixture measured the following total
ghcalls per refresh, with identical counts on cold and warm runs:The warm slope fell from 1.91 to 0.06 calls per added closed issue, below the accepted 0.25 bound. Quiet open work and its conversations, plus yesterday's unanswered closed issue under Recent, are preserved. These are offline fixture measurements.
The specification and three failing regressions were committed first in
f945de9d0d;fb73ae0985delivers the implementation, enables all three and repairs two existing integration fixtures to answer the requested aliases for the correct issues. Both major review findings are resolved, with none outstanding.The three enabled regressions in
E2E-065-issue-comment-batchespin:Local validation on
fb73ae0985passed the original reproducer and all six gate commands (READY: yes):pre-commit run --all-files: formatting, warnings-as-errors locked all-target build, locked all-target Rust tests, Python, CI-pinned grund and content checks.fmt --checkpassed.cargo test --all-targets --lockedwith symlinkedTMPDIRpassed, including all three issue-252 regressions with none ignored and all 53feed_testcases.Hosted CI and merge verification remain for ship. The generated workflow summary covers recorded invocations before shipping.
AI workflow: `rhei`, 11 agent invocations across 1 model; 7 tasks completed, 9 in progress.
github-issues-agent-grounds-ephor-252-implement-d9052d2a.ticketsupervising (visit 1) — cdx, openai/gpt-6.1-sol — 2m23s — 708.8k in / 4.7k outgithub-issues-agent-grounds-ephor-252-implement-d9052d2a.ticketsupervising (visit 2) — cdx, openai/gpt-6.1-sol — 4m02s — 1.1M in / 9.0k outgithub-issues-agent-grounds-ephor-252-implement-d9052d2a.ticket.specifyspecify — cdx, openai/gpt-6.1-sol — 14m03s — 6.4M in / 29.6k outgithub-issues-agent-grounds-ephor-252-implement-d9052d2a.ticketsupervising (visit 3) — cdx, openai/gpt-6.1-sol — 1m30s — 449.7k in / 3.4k outgithub-issues-agent-grounds-ephor-252-implement-d9052d2a.ticket.implementimplement — cdx, openai/gpt-6.1-sol — 8m15s — 2.3M in / 16.6k outgithub-issues-agent-grounds-ephor-252-implement-d9052d2a.ticketsupervising (visit 4) — cdx, openai/gpt-6.1-sol — 1m50s — 507.0k in / 4.6k outgithub-issues-agent-grounds-ephor-252-implement-d9052d2a.ticket.review-1review — cdx, openai/gpt-6.1-sol — 7m01s — 2.0M in / 15.9k outgithub-issues-agent-grounds-ephor-252-implement-d9052d2a.ticketsupervising (visit 5) — cdx, openai/gpt-6.1-sol — 1m46s — 515.5k in / 4.4k outgithub-issues-agent-grounds-ephor-252-implement-d9052d2a.ticket.fix-1fix — cdx, openai/gpt-6.1-sol — 6m50s — 2.0M in / 13.7k outgithub-issues-agent-grounds-ephor-252-implement-d9052d2a.ticketsupervising (visit 6) — cdx, openai/gpt-6.1-sol — 2m55s — 1.0M in / 6.0k outgithub-issues-agent-grounds-ephor-252-implement-d9052d2a.ticketsupervising (visit 7) — cdx, openai/gpt-6.1-sol — 1m46s — 703.1k in / 3.8k out