perspica examples

Real pull requests from popular open source projects, reviewed with perspica. Click one to see the full review.

The reading order, the mechanical changes and the checks come from perspica on its own. The summary and notes come from Claude Opus 5.5. To try it on your own code, run cargo install perspica, then perspica --pr 123 --web in your repo.

TSXpmndrs/react-three-fiber

refactor(fiber): clarify v9 core domain boundaries

393 of the 545 changed lines are moves and reformatting. You only need to read 152.

Backports v10's core file layout to v9. Constructor registration moves to extend.ts, renderer creation and release move to renderer.ts, React helpers move to utils/react.tsx, and followDpr moves to configuration.ts.

16 files+307−238 152 to review393 mechanical4 notes
RustBurntSushi/ripgrep

ignore: fix global gitignore bug that arises with absolute paths

Flags that --ignore-file still uses the process directory, because add_ignore runs before current_dir.

Global gitignores (core.excludesFile and WalkBuilder::add_ignore / --ignore-file) were rooted at an empty path, so anchored patterns failed when ripgrep searched an absolute path. They are now rooted at the CWD.

6 files+213−11 109 to review98 mechanical5 notes
Pythonpallets/flask

pass context through dispatch methods

Flags that update_template_context was left out of the compat list.

Flask request-dispatch methods (dispatch, error handling, pre/post-processing, teardown, template context) now take the active AppContext as an explicit first parameter instead of reading proxies, to speed up dispatch.

6 files+167−72 197 to review32 mechanical5 notes
Javajhy/jsoup

Fixed HTML parser edge cases and streamlined node insertion

Tests reach all 20 changed functions.

Character tokens in table contexts now go through insertNode, so misplaced text is foster-parented before the table, as the HTML spec requires. Frameset modes keep only the whitespace from mixed text, and '<!doctypehtml>' now gets the name 'html'.

7 files+207−95 158 to review73 mechanical5 notes
JavaScriptsindresorhus/execa

Move away from `cross-spawn`

Flags that line breaks in arguments now throw on Windows, which the PR doesn't mention.

Removes the cross-spawn dependency (fixes #578). Its Windows logic is reimplemented in lib/arguments/command-file.js: PATH/PATHEXT resolution via which, shebang emulation, and cmd.exe argument escaping. normalizeOptions now calls parseCommandFile.

11 files+540−8 132 to review189 mechanical5 notes
Cjqlang/jq

fix(jv): guard deep structural equality recursion

Flags that the new depth limit also changes sort, group and unique, which the PR doesn't mention.

Adds 10000-level depth guards to structural equality (jvp_equal) and ordering comparison (jvp_cmp). Past that depth, jv_equal returns -1 and jv_cmp returns INT_MIN instead of exhausting the C stack.

4 files+180−28 169 to review22 mechanical5 notes
Gojunegunn/fzf

Restore bracketed paste mode instead of forcing it off

Flags that the new 500ms startup timeout isn't in the PR title.

fzf now sends a DECRQM query for bracketed paste mode together with the cursor-position query at startup, in one round trip. On exit it restores the mode instead of always turning it off, which fixes pasting in shell line-editor widgets.

9 files+192−55 119 to review109 mechanical5 notes
TypeScripthonojs/hono

refactor: Reduce TrieRouter bundle size without a meaningful performance regression

Flags that Node.insert no longer returns the node, which can break outside callers.

Shrinks TrieRouter's minified bundle by about 276 B. It drops the Node and TrieRouter constructors, moves score ordering to a module-level counter, stores child nodes in #patterns in place of pattern keys, and simplifies search bookkeeping.

3 files+49−97 111 to review20 mechanical4 notes
C#jellyfin/jellyfin

Reconcile missing episodes by episode, not by number

53 of the 215 changed lines are mechanical and 77 are tests, so 85 are left to read.

Missing-episode reconciliation now matches episodes by provider id across the whole series, not just by season and episode number. This stops virtual episodes from being kept when the files use a different order (aired, DVD or absolute).

4 files+202−13 85 to review53 mechanical5 notes
Kotlinsquare/okhttp

Handle unsupported AliasMode records

Flags that an unexpected question type now throws on the DNS callback thread.

OkHttp doesn't implement HTTPS AliasMode (priority 0). With this change, StateMachineDnsCall ignores every record in an HTTPS response that contains an AliasMode record. Records are now filtered by the question's type, so mismatched records are dropped.

3 files+129−29 31 to review40 mechanical4 notes