LLMs are surprisingly good at reducing crash samples.
I've had success with "this project crashes my static analysis tool with the following command, try to shrink the repro whilst preserving the crash. Commit each smaller version to a branch".
I had a third attempt at porting difftastic from Dijkstra to A*, and I've eventually concluded that A* just isn't worth it for the implementation complexity.
I had fun writing it up though, and I've even attempted ASCII art for building intuitions:
It's really satisfying fixing crashes in rust-analyzer. You can start from a panic message and dig until you've got a tiny Rust program that triggers the problem.
(It's usually an issue with incomplete source files breaking invariants.)
I'm experimenting with jj this weekend. It seems pretty nice so far, but the mental model is pretty different from git.
For example, there's no `checkout` command. You do `jj new ABC` to switch to a commit, which creates a new empty commit on top of ABC.