ReviewOS

also looking at this

stacks/buddy

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

#1405
Merged glennmichael123 wants to merge fix/persist-review-state into main
6 files +176 -14
src/commands/handlers.tsmodified+8-10
Changes to src/commands/handlers.ts
@@ -4,7 +4,6 @@ import type { CommandContext, CommandHandler, CommandOutcome } from './dispatche
44import process from 'node:process'
55import { createAiClient } from '../ai'
66import { attemptFix } from '../ci/fix'
7import { serializeReviewState } from '../review/marker'
87
98/** Everything the built-in handlers need to act. */
109export interface HandlerDeps {
@@ -144,16 +143,15 @@ async function setPaused(deps: HandlerDeps, prNumber: number, paused: boolean):
144143 if (!pr)
145144 return
146145
147 const { parseReviewState } = await import('../review/marker')
146 const { parseReviewState, upsertReviewState } = await import('../review/marker')
148147 const state = parseReviewState(pr.body)
149148
150 const marker = serializeReviewState({
151 reviewedSha: state?.reviewedSha ?? '',
152 fingerprints: state?.fingerprints ?? [],
153 reviewedAt: state?.reviewedAt ?? new Date().toISOString(),
154 ...(paused ? { paused: true } : {}),
149 await deps.provider.updatePullRequest(prNumber, {
150 body: upsertReviewState(pr.body, {
151 reviewedSha: state?.reviewedSha ?? '',
152 fingerprints: state?.fingerprints ?? [],
153 reviewedAt: state?.reviewedAt ?? new Date().toISOString(),
154 ...(paused ? { paused: true } : {}),
155 }),
155156 })
156
157 const body = pr.body.replace(/<!--\s*buddy:review[\s\S]*?-->/, '').trimEnd()
158 await deps.provider.updatePullRequest(prNumber, { body: `${body}\n\n${marker}` })
159157}