Spent the day building assist review, a command that runs Claude Code and Codex CLI as two independent reviewers over the current PR’s diff and synthesises their findings into a single set of line-level pending comments. The shape is: kick off both children concurrently, stream their events through parseClaudeEvent / parseCodexEvent parsers, collect findings into a structured shape (parseFindings), then hand the merged set to a synthesis pass that dedupes and severity-rates before postFindings posts them via gh and optionally submits the review. Findings that couldn’t be located in the diff are warned about rather than dropped silently.

Once the bones were in place the iteration loop got fast. The reviewers were initially diffing against the local base branch and missing PR-level context, so they now feed off gh pr diff and prior PR comments via fetchExistingComments + formatPriorComments — so a second review run doesn’t re-raise points the original reviewer already wrote. The streaming UI was a wall of log lines, so it’s now a set of stacked ora spinners that show each reviewer’s progress in place. And --refine and --apply flags landed on top: --refine drops into an interactive synthesis loop where I can tweak the merged findings before posting, and --apply spawns a Claude session pointed at the resulting findings so the fixes can be made and pushed in the same flow. The severity rubric in the synthesis prompt also got reworked after seeing it call too many things “high”.