Replaces the routing half of #4486 (the owner's probe: all 23 reviews in an hour went to juniper). Pull #4488's routing was accepted by every review; its branch is a starting point.
Done:
[ ] pickReviewer (src/crew/review.ts:64) takes the count of in-flight review runs per reviewer and, for a pull not about security, picks the least busy; ties go to the experience reviewer. A security pull still goes only to a security reviewer (least busy among them). A src/web/ pull goes to the design reviewer until it has 2 in flight, then spills to the least busy.
[ ] The in-flight count is one exported function in src/crew/review.ts (reviewLoad), with the in-flight limit beside the other REVIEW_* constants.
[ ] Tests cover: least-busy wins, tie to experience, security stays with security, design spills at 2.
[ ] README.md's "Design review" paragraph (about line 1173) says reviews go to the least-busy reviewer with those rules.
Replaces the routing half of #4486 (the owner's probe: all 23 reviews in an hour went to juniper). Pull #4488's routing was accepted by every review; its branch is a starting point.
Done:
pickReviewer(src/crew/review.ts:64) takes the count of in-flight review runs per reviewer and, for a pull not about security, picks the least busy; ties go to the experience reviewer. A security pull still goes only to a security reviewer (least busy among them). Asrc/web/pull goes to the design reviewer until it has 2 in flight, then spills to the least busy.reviewLoad), with the in-flight limit beside the otherREVIEW_*constants.Files: src/crew/review.ts, test/review*.test.ts, README.md.