# PR #23660 evidence: before (60b35a1ee0) vs after (33a1b866ae)

Driver: `node --experimental-import-meta-resolve /tmp/ev-23660/ev/driver.ts <worktree> <row>`, the same file for both SHAs. Product modules are imported from each worktree.
It uses the real GitHub SourceControlProvider (builtInDrivers + registry) and the real GitManager.make. `globalThis.fetch` is stubbed: POST /repos/*/pulls returns 422 `head invalid`, so every create row ends in that stubbed failure by design. GIT_CONFIG_GLOBAL=/dev/null, so the machine's global `url.https://github.com/.insteadof git@github.com:` does not rewrite the scp row. Pushes are routed via `pushInsteadOf` only.

| row | layout | before (repo, head) | after (repo, head) | expected (matrix) before → after | match? |
|---|---|---|---|---|---|
| 1 | origin=F, upstream=U, upstream.gh-resolved=base, tracks origin/fix | pingdotgg/t3code, `fix` | pingdotgg/t3code, `juliusmarminge:fix` | pingdotgg/t3code, `fix` → pingdotgg/t3code, `juliusmarminge:fix` | yes |
| 1b | origin=F, upstream=U (scp-style git@github.com: URLs), no mark | pingdotgg/t3code, `fix` | pingdotgg/t3code, `juliusmarminge:fix` | pingdotgg/t3code, `fix` → pingdotgg/t3code, `juliusmarminge:fix` | yes |
| 1c | origin=F, upstream=U, origin.gh-resolved=pingdotgg/t3code | pingdotgg/t3code, `fix` | pingdotgg/t3code, `juliusmarminge:fix` | pingdotgg/t3code, `fix` → pingdotgg/t3code, `juliusmarminge:fix` | yes |
| 1d | origin=F, upstream=U, origin.gh-resolved=base | juliusmarminge/t3code, `fix` | juliusmarminge/t3code, `fix` | juliusmarminge/t3code, `fix` → juliusmarminge/t3code, `fix` | yes |
| 2 | GH_REPO=U, origin=F only | pingdotgg/t3code, `fix` | pingdotgg/t3code, `juliusmarminge:fix` | pingdotgg/t3code, `fix` → pingdotgg/t3code, `juliusmarminge:fix` | yes |
| 2b | GH_REPO=F, row-1 layout | juliusmarminge/t3code, `fix` | juliusmarminge/t3code, `fix` | juliusmarminge/t3code, `fix` → juliusmarminge/t3code, `fix` | yes |
| 2c | GH_REPO=not-a-repo, row-1 layout | pingdotgg/t3code, `fix` | pingdotgg/t3code, `juliusmarminge:fix` | pingdotgg/t3code, `fix` → pingdotgg/t3code, `juliusmarminge:fix` | yes |
| 3 | origin=U only (non-fork) | pingdotgg/t3code, `fix` | pingdotgg/t3code, `fix` | pingdotgg/t3code, `fix` → pingdotgg/t3code, `fix` | yes |
| 4 | row-1 layout, tracks upstream/fix | pingdotgg/t3code, `pingdotgg:fix` | pingdotgg/t3code, `pingdotgg:fix` | pingdotgg/t3code, `pingdotgg:fix` → pingdotgg/t3code, `pingdotgg:fix` | yes |
| 4b | origin.gh-resolved=base, tracks upstream/fix | juliusmarminge/t3code, `pingdotgg:fix` | juliusmarminge/t3code, `pingdotgg:fix` | juliusmarminge/t3code, `pingdotgg:fix` → juliusmarminge/t3code, `pingdotgg:fix` | yes |
| 7 | no origin: fork=F, upstream=U+mark, tracks fork/fix | pingdotgg/t3code, `juliusmarminge:fix` | pingdotgg/t3code, `juliusmarminge:fix` | pingdotgg/t3code, `juliusmarminge:fix` → pingdotgg/t3code, `juliusmarminge:fix` | yes |
| 8 | row-1 layout, tracks remote `local` (bare path URL) | pingdotgg/t3code, `fix` | pingdotgg/t3code, `fix` | any, `fix` → any, `fix` | yes |
| 5 | row-1 layout; `manager.status` (spawn spy on GitManager's git driver) | no POST; `(url\|gh-resolved)$` reads=0; status ok | no POST; reads=0; status ok | no `(url\|gh-resolved)$` spawn at either SHA | yes |
| 5b | row-1 layout; open PR exists; create_pr | `opened_existing` #4242, no POST, reads=0 | `opened_existing` #4242, no POST, reads=0 | no POST, `opened_existing`, no new read | yes |
| 6 (opt) | origin=gitlab.com/x/y, upstream=U+mark | gitlab provider: `glab` unavailable, no GitHub POST | same, reads=0 | no GitHub POST | yes |
| 10 (opt) | row-1 layout with `insteadOf` (negative control) | `No unknown source control provider`, no POST | same, reads=0 | before: provider can't resolve; after: possible divergence | partial (see note) |
| 9 (opt) | 3-segment origin path | not staged | not staged | unit only | unverified: the matrix marks it unit-only/practically unreachable, and it was skipped to save time |

Notes:
- On the after SHA, every create row that reaches `runPrStep` with a GitHub provider shows exactly 1 spawn of `git config --get-regexp ^remote\..*\.(url|gh-resolved)$`. The before SHA shows 0 everywhere. Rows 5 and 5b show 0 at both SHAs.
- The provider's own `git remote -v` / gh-resolved reads go through VcsProcess, which is not spied. The spy wraps only the GitVcsDriver spawner, the one GitManager's `gitCore.execute` uses.
- Row 10: with `insteadOf`, `git remote -v` prints local paths, so provider *kind* detection already yields `unknown` and the run fails before `runPrStep` at both SHAs. The GitManager-vs-provider divergence the matrix warns about is not reachable through this path in this staging.
- The fake `gh` was never invoked (no gh-calls.log was created). No request reached a host other than api.github.com.

## sha256

```
c6e1edd404f76ca762ddfa665ca48be60d7cd413c8ea591736f3e1e3a7ca5b49  driver.ts
cd1b85ce1bd5ed7ad3ad0bbafb16b20f3bf241039c73db1556a4dd16ff9c514d  bin/gh
cd1b85ce1bd5ed7ad3ad0bbafb16b20f3bf241039c73db1556a4dd16ff9c514d  gh-stub.sh
```
