ReviewOS

also looking at this

stacks/buddy

fix(review): persist review state where it is read back

#1404
Closed chris wants to merge fix/persist-review-state into main
6 files +176 -14
bin/cli.tsmodified+24-2
Changes to bin/cli.ts
@@ -1614,6 +1614,8 @@ cli
16141614 let headSha = ''
16151615 let seenFingerprints: string[] = []
16161616 let gitProvider: GitProvider | null = null
1617 let prBody: string | null = null
1618 let wasPaused = false
16171619
16181620 if (prNumber) {
16191621 gitProvider = await providerFor(config, 'reviewing a pull request', log)
@@ -1627,7 +1629,13 @@ cli
16271629 const pr = prs.find(candidate => candidate.number === number)
16281630 const state = parseReviewState(pr?.body)
16291631 seenFingerprints = state?.fingerprints ?? []
1630 headSha = state?.reviewedSha ?? ''
1632 prBody = pr?.body ?? null
1633 wasPaused = Boolean(state?.paused)
1634
1635 // The commit being reviewed now, not the one reviewed last time.
1636 // Reading it from the stored state recorded a stale sha, so the next
1637 // run could not tell whether this commit had been seen.
1638 headSha = await gitProvider.getPullRequestHeadSha(number)
16311639 }
16321640 else {
16331641 const base = options.base || config.repository?.baseBranch || 'main'
@@ -1734,7 +1742,21 @@ cli
17341742 }
17351743
17361744 assertSupports(gitProvider!, 'inlineReviewComments', 'createReview', 'posting a review')
1737 await gitProvider.createReview(Number.parseInt(prNumber, 10), prepared)
1745 const reviewedNumber = Number.parseInt(prNumber, 10)
1746 await gitProvider.createReview(reviewedNumber, prepared)
1747
1748 // The review has landed; recording where it got to is bookkeeping, so a
1749 // failure here must not present as a failed review.
1750 try {
1751 const { upsertReviewState } = await import('../src/review/marker')
1752 await gitProvider.updatePullRequest(reviewedNumber, {
1753 body: upsertReviewState(prBody, { ...prepared.state, ...(wasPaused ? { paused: true } : {}) }),
1754 })
1755 }
1756 catch (error) {
1757 logger.warn(`Could not record review state on PR #${prNumber}: ${error instanceof Error ? error.message : String(error)}`)
1758 }
1759
17381760 logger.success(`✅ Reviewed PR #${prNumber}: ${result.findings.length} finding(s)`)
17391761 }
17401762 catch (error) {