Skip to content

fix(pm-stack): prs reconcile stream reads pulls-shaped data (#4528) - #4687

Closed
dezren39 wants to merge 1 commit into
mainfrom
queue/6483-4528-reconcile-prs
Closed

dezren39 wants to merge 1 commit into
mainfrom
queue/6483-4528-reconcile-prs

Conversation

@dezren39

@dezren39 dezren39 commented Nov 3, 2026 •

Copy link
Copy Markdown
Member

Fixes #4528 (task 6483).

The prs reconcile stream sourced the issues endpoint, whose PR objects carry no draft/merged/merged_at, so first-sight PRs were stored draft=0/merged=0 forever. This sources the stream from repos/{repo}/pulls instead; pulls rows also heal previously materialized false-default rows via the store's null-preserving update. merged is derived from merged_at when the pulls LIST shape omits the merged boolean.

Tests (prior checkpoint, laptop): bun test test/reconcile.test.ts 5 pass; full suite 78 pass 0 fail, including 2 new regression tests (draft-first-sight, merged-first-sight, heal-after-gap). tsc not run locally (no local typescript) — CI to confirm.


Autofix with [code]smith
Open in [code]smith · Need help on this PR? Tag @codesmith-bot with what you need.

The prs stream sourced the issues endpoint, whose PR objects carry no
draft/merged/merged_at, so first-sight PRs were stored draft=0/merged=0
forever. Source the stream from repos/{repo}/pulls instead; pulls rows
also heal previously materialized false-default rows via the store's
null-preserving update. Derive merged from merged_at when the pulls
LIST shape omits the merged boolean. Regression tests for
draft-first-sight, merged-first-sight and heal-after-gap.
@dezren39
dezren39 requested a review from a team as a code owner November 3, 2026 00:36
@coderabbitai

coderabbitai Bot commented Nov 3, 2026

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 57 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: b2b2eab8-6031-4e65-acf2-3d0001860ade
Commits

Reviewing files that changed from the base of the PR and between 30f368e and b549d05.

Files selected for processing: 3
  • pm-stack/projector/src/projector.ts
  • pm-stack/projector/src/reconcile.ts
  • pm-stack/projector/test/reconcile.test.ts
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Tip

🎯 Customize your risk assessments

Guide how CodeRabbit assesses merge risk and security architecture risk. Highlight sensitive changes and explain your security boundaries using Merge Risk Instructions and Security Risk Instructions in your review settings. Security architecture risk assessments require the Advanced plan or above.

✅ Automatic approvals, with your rules

Let CodeRabbit approve pull requests once required threads are resolved, pre-merge checks pass, and your risk limits are met. Enable Automatic approvals in review settings, with overrides for teams or file paths.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

CodeRabbit Verify

  • Run CodeRabbit Verify to test the changes in this pull request.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 3, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-03T00:38:48.712553Z b549d05 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b549d052f3

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +74 to +77
const pq = since
? `since=${encodeURIComponent(since)}&per_page=100&state=all`
: "per_page=100&state=all";
const prs = await listResource<Record<string, any>>(auth, `repos/${repo}/pulls?${pq}`, fetchFn);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve incremental fetching when switching to the pulls endpoint

For repositories with substantial PR history, every reconciliation now downloads and upserts every historical PR, even when nothing has changed: the List pull requests endpoint does not support since, and listResource follows every pagination link without applying a local cutoff. Unlike the previous issues-endpoint query, the saved cursor therefore no longer bounds the work. Each returned PR also incurs two sequential database operations in upsertItem, adding history-sized database traffic to the 15-minute poll configured in nixos/services/pm-stack/default.nix. Use supported updated-time sorting with cursor-aware pagination and filtering, or fetch pull-shaped details only for PRs identified as changed.

Useful? React with 👍 / 👎.

@dezren39

dezren39 commented Nov 3, 2026

Copy link
Copy Markdown
Member Author

Closing as duplicate of PR #4597 (task 6483, lane code-d). Per protocol, the full diff was compared against the canonical PR first: this PR's one unique correctness item — deriving merged from merged_at for pulls-LIST payloads in projector.ts, with realistic no-merged-key fixtures — was salvaged into #4597 as commit a09c6cd (suite 79 pass / 0 fail). Its since= param was not salvaged (the pulls list endpoint does not support since). The Codex P2 raised here (no incremental bound on the pulls fetch) is dispositioned on #4597: the reviews stream already enumerates the full pulls list every reconcile pass, so no new cost class; a cursor-bounded fetch is a separate optimization. Nothing else unique remains in this diff.

@dezren39 dezren39 closed this Nov 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant