Repository navigation
sessions: fix hooks type - #7425
Merged
nateprewitt merged 1 commit intoMay 11, 2026
Merged
Conversation
Member
|
I'm on mobile but this seems right based on what you described. I'll take a look at some point today. Thanks, @bastimeyer! |
nateprewitt
approved these changes
May 11, 2026
SadamAnjaneyulu
added a commit
to SadamAnjaneyulu/oss-bugbot
that referenced
this pull request
Aug 1, 2026
Replaces an earlier eval/harvest.py (from a separate AI tool working on this same repo) that had a confirmed dead mock: it patched diff.fetch_diff, but main.py does `from diff import fetch_diff`, which binds the name into main's own module namespace at import time - patching diff.fetch_diff never touches what main.run_review actually calls. Verified empirically (not assumed) before replacing: every harvest run using that version would have silently reviewed the real, already-fixed PR content instead of the intended synthetic buggy diff, producing plausible-looking but meaningless precision/recall numbers. This version needs no mocking at all. Mechanism: a merged bug-fix PR's diff shows buggy->fixed. `git diff <head> <base>` (SHAs swapped) produces the exact opposite - a synthetic fixed->buggy diff, i.e. a PR that reintroduces the bug. Ground truth is exactly the lines that reversed diff adds. Verified against a real PR (psf/requests#7425) before writing any code: confirmed the swapped-argument diff is genuinely the inverse of the forward diff, not assumed from git's documented argument order. One clone per repo, reused across every PR harvested from it. Category classification is a crude keyword heuristic and documented as such - a stratification axis, not a correctness claim. Test files excluded from ground truth. Conservative size bounds (60 lines / 3 files) tighter than main.py's own PR size gate, since a large diff drowns the "one bug" signal an eval case needs. .gitignore: added .eval_repos/ and *.patch. A previous git-add attempt (not mine - see .pre-commit-config.yaml commit for why this matters) staged a full nested clone of Flask as a broken gitlink plus a script with the same still-unrotated API keys from earlier this session, in a fourth file now. The pre-commit hook installed two commits ago appears to have blocked that commit outright, which is the hook doing exactly its job. 16 new tests (209 total), all green. Full end-to-end orchestration (harvest() itself, not just its pieces) is unit-tested and mechanism- verified but not live-run - no token available in this environment to test it beyond the individually-verified pieces. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
SadamAnjaneyulu
added a commit
to SadamAnjaneyulu/oss-bugbot
that referenced
this pull request
Aug 1, 2026
Replaces an earlier eval/harvest.py (from a separate AI tool working on this same repo) that had a confirmed dead mock: it patched diff.fetch_diff, but main.py does `from diff import fetch_diff`, which binds the name into main's own module namespace at import time - patching diff.fetch_diff never touches what main.run_review actually calls. Verified empirically (not assumed) before replacing: every harvest run using that version would have silently reviewed the real, already-fixed PR content instead of the intended synthetic buggy diff, producing plausible-looking but meaningless precision/recall numbers. This version needs no mocking at all. Mechanism: a merged bug-fix PR's diff shows buggy->fixed. `git diff <head> <base>` (SHAs swapped) produces the exact opposite - a synthetic fixed->buggy diff, i.e. a PR that reintroduces the bug. Ground truth is exactly the lines that reversed diff adds. Verified against a real PR (psf/requests#7425) before writing any code: confirmed the swapped-argument diff is genuinely the inverse of the forward diff, not assumed from git's documented argument order. One clone per repo, reused across every PR harvested from it. Category classification is a crude keyword heuristic and documented as such - a stratification axis, not a correctness claim. Test files excluded from ground truth. Conservative size bounds (60 lines / 3 files) tighter than main.py's own PR size gate, since a large diff drowns the "one bug" signal an eval case needs. .gitignore: added .eval_repos/ and *.patch. A previous git-add attempt (not mine - see .pre-commit-config.yaml commit for why this matters) staged a full nested clone of Flask as a broken gitlink plus a script with the same still-unrotated API keys from earlier this session, in a fourth file now. The pre-commit hook installed two commits ago appears to have blocked that commit outright, which is the hook doing exactly its job. 16 new tests (209 total), all green. Full end-to-end orchestration (harvest() itself, not just its pieces) is unit-tested and mechanism- verified but not live-run - no token available in this environment to test it beyond the individually-verified pieces.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The
hookkeyword inSession.request()should be of typeHooksInputType | None, notHooksType.This is already correctly defined in
models.Request.__init__():requests/src/requests/models.py
Lines 283 to 333 in dc9dbdf
But
sessions.Session.request()and the associated_types.BaseRequestKwargsare wrong:requests/src/requests/sessions.py
Lines 557 to 618 in dc9dbdf
requests/src/requests/_types.py
Lines 145 to 156 in dc9dbdf