Skip to content

feat: add debug diagnostics and whoami auth status#610

Open
svarlamov wants to merge 5 commits intomainfrom
codex/whoami-auth-debug
Open

feat: add debug diagnostics and whoami auth status#610
svarlamov wants to merge 5 commits intomainfrom
codex/whoami-auth-debug

Conversation

@svarlamov
Copy link
Member

@svarlamov svarlamov commented Feb 28, 2026

Summary\n- add new git-ai debug report

Generated (UTC): 2026-02-28T02:22:19.395757+00:00

== Versions ==
Git AI version: 1.1.7 (debug)
Git AI binary: /Users/svarlamov/.git-ai-local-dev/gitwrap/bin/git-ai
Git binary path: /opt/homebrew/bin/git
Git version: git version 2.52.0

== Platform ==
OS family: unix
OS: macos
Arch: aarch64
Kernel: Darwin 25.2.0 arm64
Hostname: Sashas-MacBook-Pro.local
Shell: /bin/zsh
Current dir: /Users/svarlamov/projects/git-ai-c

== Hardware ==
CPU: Apple M5
Physical cores: 10
Logical cores: 10
Memory: 32.00 GB (34359738368 bytes)

== Repository ==
In repository: true
Workdir: /Users/svarlamov/projects/git-ai-c
Git dir: /Users/svarlamov/projects/git-ai-c/.git
Git common dir: /Users/svarlamov/projects/git-ai-c/.git
Branch: codex/whoami-auth-debug
HEAD: 4ca35c2
core.hooksPath: /Users/svarlamov/projects/git-ai-c/.git/ai/hooks
Remotes:
origin = https://github.com/git-ai-project/git-ai

== Git Config ==
Command: /opt/homebrew/bin/git config --list --show-origin --show-scope
system file:/opt/homebrew/etc/gitconfig credential.helper=osxkeychain
global file:/Users/svarlamov/.gitconfig user.name=Sasha Varlamov
global file:/Users/svarlamov/.gitconfig user.email=sasha@sashavarlamov.com
global file:/Users/svarlamov/.gitconfig init.defaultbranch=main
global file:/Users/svarlamov/.gitconfig push.autosetupremote=true
global file:/Users/svarlamov/.gitconfig alias.s=status -sb
global file:/Users/svarlamov/.gitconfig alias.ss=status
global file:/Users/svarlamov/.gitconfig alias.st=status
global file:/Users/svarlamov/.gitconfig alias.l=log --oneline --decorate
global file:/Users/svarlamov/.gitconfig alias.lg=log --graph --decorate --oneline --all
global file:/Users/svarlamov/.gitconfig alias.ll=log --graph --decorate --pretty=format:'%C(auto)%h %C(cyan)%ad%Creset %C(yellow)%d%Creset %s %C(green)(%an)%Creset' --date=short --all
global file:/Users/svarlamov/.gitconfig alias.last=log -1 --stat
global file:/Users/svarlamov/.gitconfig alias.d=diff
global file:/Users/svarlamov/.gitconfig alias.dc=diff --cached
global file:/Users/svarlamov/.gitconfig alias.wdiff=diff --word-diff
global file:/Users/svarlamov/.gitconfig alias.who=blame -w -M -C
global file:/Users/svarlamov/.gitconfig alias.br=branch -vv
global file:/Users/svarlamov/.gitconfig alias.co=checkout
global file:/Users/svarlamov/.gitconfig alias.sw=switch
global file:/Users/svarlamov/.gitconfig alias.cob=checkout -b
global file:/Users/svarlamov/.gitconfig alias.swc=switch -c
global file:/Users/svarlamov/.gitconfig alias.a=add -A
global file:/Users/svarlamov/.gitconfig alias.ap=add -p
global file:/Users/svarlamov/.gitconfig alias.c=commit
global file:/Users/svarlamov/.gitconfig alias.cm=commit -m
global file:/Users/svarlamov/.gitconfig alias.ca=commit --amend
global file:/Users/svarlamov/.gitconfig alias.cane=commit --amend --no-edit
global file:/Users/svarlamov/.gitconfig alias.pu=push
global file:/Users/svarlamov/.gitconfig alias.puff=push --force-with-lease
global file:/Users/svarlamov/.gitconfig alias.up=pull --rebase --autostash
global file:/Users/svarlamov/.gitconfig alias.pf=push -u origin HEAD
global file:/Users/svarlamov/.gitconfig alias.sl=stash list
global file:/Users/svarlamov/.gitconfig alias.sp=stash push -u -m
global file:/Users/svarlamov/.gitconfig alias.sa=stash apply
global file:/Users/svarlamov/.gitconfig alias.ssq=stash push -u -m wip
global file:/Users/svarlamov/.gitconfig alias.undo=reset --soft HEAD~1
global file:/Users/svarlamov/.gitconfig alias.unstage=reset -q HEAD --
global file:/Users/svarlamov/.gitconfig alias.discard=checkout --
global file:/Users/svarlamov/.gitconfig alias.ri=rebase -i
global file:/Users/svarlamov/.gitconfig alias.fixup=commit --fixup
global file:/Users/svarlamov/.gitconfig alias.autosquash=rebase -i --autosquash
global file:/Users/svarlamov/.gitconfig alias.aliases=config --get-regexp ^alias.
global file:/Users/svarlamov/.gitconfig alias.ahead=!git log --oneline --decorate @{u}..HEAD
global file:/Users/svarlamov/.gitconfig alias.behind=!git log --oneline --decorate HEAD..@{u}
global file:/Users/svarlamov/.gitconfig alias.changes=!git log --oneline --decorate --no-merges @{u}..HEAD
local file:.git/config core.repositoryformatversion=0
local file:.git/config core.filemode=true
local file:.git/config core.bare=false
local file:.git/config core.logallrefupdates=true
local file:.git/config core.ignorecase=true
local file:.git/config core.precomposeunicode=true
local file:.git/config core.hookspath=/Users/svarlamov/projects/git-ai-c/.git/ai/hooks
local file:.git/config remote.origin.url=https://github.com/git-ai-project/git-ai
local file:.git/config remote.origin.fetch=+refs/heads/:refs/remotes/origin/
local file:.git/config branch.main.remote=origin
local file:.git/config branch.main.merge=refs/heads/main
local file:.git/config branch.feat/corehooks.remote=origin
local file:.git/config branch.feat/corehooks.merge=refs/heads/feat/corehooks
local file:.git/config branch.feat/corehooks.vscode-merge-base=origin/main
local file:.git/config branch.codex/corehooks-simplify-perf-round2.remote=origin
local file:.git/config branch.codex/corehooks-simplify-perf-round2.merge=refs/heads/codex/corehooks-simplify-perf-round2
local file:.git/config branch.codex/global-hooks-dual-mode.remote=origin
local file:.git/config branch.codex/global-hooks-dual-mode.merge=refs/heads/codex/global-hooks-dual-mode
local file:.git/config branch.codex/global-hooks-dual-mode.vscode-merge-base=origin/main
local file:.git/config branch.codex/cherry-pick-hooks-perf-fix.remote=origin
local file:.git/config branch.codex/cherry-pick-hooks-perf-fix.merge=refs/heads/codex/cherry-pick-hooks-perf-fix
local file:.git/config branch.codex/fix-590-concurrent-migrations.remote=origin
local file:.git/config branch.codex/fix-590-concurrent-migrations.merge=refs/heads/codex/fix-590-concurrent-migrations
local file:.git/config branch.codex/pathspec-benchmark-fastpath-fixes.remote=origin
local file:.git/config branch.codex/pathspec-benchmark-fastpath-fixes.merge=refs/heads/codex/pathspec-benchmark-fastpath-fixes

== Git AI Config ==
config_file_path: /Users/svarlamov/.git-ai/config.json
git_ai_dir: /Users/svarlamov/.git-ai
runtime_config:
{
"git_path": "/opt/homebrew/bin/git",
"exclude_prompts_in_repositories": [],
"include_prompts_in_repositories": [],
"allow_repositories": [],
"exclude_repositories": [],
"telemetry_oss_disabled": false,
"telemetry_enterprise_dsn": null,
"disable_version_checks": false,
"disable_auto_updates": true,
"update_channel": "latest",
"feature_flags": {
"rewrite_stash": true,
"inter_commit_move": false,
"auth_keyring": false
},
"api_base_url": "http://localhost:4000",
"prompt_storage": "default",
"default_prompt_storage": null,
"api_key": null,
"quiet": false
}

== Git AI Login ==
Credential backend: file
Status: logged out

== Git AI Environment ==
No GIT_AI_* environment variables are set. command with formatted diagnostics for versions, platform/hardware, git config, git-ai config, repo context, and auth/login state\n- make runtime directly printable via serde and use it in debug output (with masking for sensitive values)\n- add new API Base URL: http://localhost:4000
Credential backend: file
Auth state: logged out command that prints full API base URL plus auth state and profile fields from token claims\n- parse access-token claims using typed fields (, , , , ) and share auth-state collection between and svarlamov\n- add concise GitHub bug report issue template requiring git-ai debug report
Generated (UTC): 2026-02-28T02:22:19.740488+00:00

== Versions ==
Git AI version: 1.1.7 (debug)
Git AI binary: /Users/svarlamov/.git-ai-local-dev/gitwrap/bin/git-ai
Git binary path: /opt/homebrew/bin/git
Git version: git version 2.52.0

== Platform ==
OS family: unix
OS: macos
Arch: aarch64
Kernel: Darwin 25.2.0 arm64
Hostname: Sashas-MacBook-Pro.local
Shell: /bin/zsh
Current dir: /Users/svarlamov/projects/git-ai-c

== Hardware ==
CPU: Apple M5
Physical cores: 10
Logical cores: 10
Memory: 32.00 GB (34359738368 bytes)

== Repository ==
In repository: true
Workdir: /Users/svarlamov/projects/git-ai-c
Git dir: /Users/svarlamov/projects/git-ai-c/.git
Git common dir: /Users/svarlamov/projects/git-ai-c/.git
Branch: codex/whoami-auth-debug
HEAD: 4ca35c2
core.hooksPath: /Users/svarlamov/projects/git-ai-c/.git/ai/hooks
Remotes:
origin = https://github.com/git-ai-project/git-ai

== Git Config ==
Command: /opt/homebrew/bin/git config --list --show-origin --show-scope
system file:/opt/homebrew/etc/gitconfig credential.helper=osxkeychain
global file:/Users/svarlamov/.gitconfig user.name=Sasha Varlamov
global file:/Users/svarlamov/.gitconfig user.email=sasha@sashavarlamov.com
global file:/Users/svarlamov/.gitconfig init.defaultbranch=main
global file:/Users/svarlamov/.gitconfig push.autosetupremote=true
global file:/Users/svarlamov/.gitconfig alias.s=status -sb
global file:/Users/svarlamov/.gitconfig alias.ss=status
global file:/Users/svarlamov/.gitconfig alias.st=status
global file:/Users/svarlamov/.gitconfig alias.l=log --oneline --decorate
global file:/Users/svarlamov/.gitconfig alias.lg=log --graph --decorate --oneline --all
global file:/Users/svarlamov/.gitconfig alias.ll=log --graph --decorate --pretty=format:'%C(auto)%h %C(cyan)%ad%Creset %C(yellow)%d%Creset %s %C(green)(%an)%Creset' --date=short --all
global file:/Users/svarlamov/.gitconfig alias.last=log -1 --stat
global file:/Users/svarlamov/.gitconfig alias.d=diff
global file:/Users/svarlamov/.gitconfig alias.dc=diff --cached
global file:/Users/svarlamov/.gitconfig alias.wdiff=diff --word-diff
global file:/Users/svarlamov/.gitconfig alias.who=blame -w -M -C
global file:/Users/svarlamov/.gitconfig alias.br=branch -vv
global file:/Users/svarlamov/.gitconfig alias.co=checkout
global file:/Users/svarlamov/.gitconfig alias.sw=switch
global file:/Users/svarlamov/.gitconfig alias.cob=checkout -b
global file:/Users/svarlamov/.gitconfig alias.swc=switch -c
global file:/Users/svarlamov/.gitconfig alias.a=add -A
global file:/Users/svarlamov/.gitconfig alias.ap=add -p
global file:/Users/svarlamov/.gitconfig alias.c=commit
global file:/Users/svarlamov/.gitconfig alias.cm=commit -m
global file:/Users/svarlamov/.gitconfig alias.ca=commit --amend
global file:/Users/svarlamov/.gitconfig alias.cane=commit --amend --no-edit
global file:/Users/svarlamov/.gitconfig alias.pu=push
global file:/Users/svarlamov/.gitconfig alias.puff=push --force-with-lease
global file:/Users/svarlamov/.gitconfig alias.up=pull --rebase --autostash
global file:/Users/svarlamov/.gitconfig alias.pf=push -u origin HEAD
global file:/Users/svarlamov/.gitconfig alias.sl=stash list
global file:/Users/svarlamov/.gitconfig alias.sp=stash push -u -m
global file:/Users/svarlamov/.gitconfig alias.sa=stash apply
global file:/Users/svarlamov/.gitconfig alias.ssq=stash push -u -m wip
global file:/Users/svarlamov/.gitconfig alias.undo=reset --soft HEAD~1
global file:/Users/svarlamov/.gitconfig alias.unstage=reset -q HEAD --
global file:/Users/svarlamov/.gitconfig alias.discard=checkout --
global file:/Users/svarlamov/.gitconfig alias.ri=rebase -i
global file:/Users/svarlamov/.gitconfig alias.fixup=commit --fixup
global file:/Users/svarlamov/.gitconfig alias.autosquash=rebase -i --autosquash
global file:/Users/svarlamov/.gitconfig alias.aliases=config --get-regexp ^alias.
global file:/Users/svarlamov/.gitconfig alias.ahead=!git log --oneline --decorate @{u}..HEAD
global file:/Users/svarlamov/.gitconfig alias.behind=!git log --oneline --decorate HEAD..@{u}
global file:/Users/svarlamov/.gitconfig alias.changes=!git log --oneline --decorate --no-merges @{u}..HEAD
local file:.git/config core.repositoryformatversion=0
local file:.git/config core.filemode=true
local file:.git/config core.bare=false
local file:.git/config core.logallrefupdates=true
local file:.git/config core.ignorecase=true
local file:.git/config core.precomposeunicode=true
local file:.git/config core.hookspath=/Users/svarlamov/projects/git-ai-c/.git/ai/hooks
local file:.git/config remote.origin.url=https://github.com/git-ai-project/git-ai
local file:.git/config remote.origin.fetch=+refs/heads/:refs/remotes/origin/
local file:.git/config branch.main.remote=origin
local file:.git/config branch.main.merge=refs/heads/main
local file:.git/config branch.feat/corehooks.remote=origin
local file:.git/config branch.feat/corehooks.merge=refs/heads/feat/corehooks
local file:.git/config branch.feat/corehooks.vscode-merge-base=origin/main
local file:.git/config branch.codex/corehooks-simplify-perf-round2.remote=origin
local file:.git/config branch.codex/corehooks-simplify-perf-round2.merge=refs/heads/codex/corehooks-simplify-perf-round2
local file:.git/config branch.codex/global-hooks-dual-mode.remote=origin
local file:.git/config branch.codex/global-hooks-dual-mode.merge=refs/heads/codex/global-hooks-dual-mode
local file:.git/config branch.codex/global-hooks-dual-mode.vscode-merge-base=origin/main
local file:.git/config branch.codex/cherry-pick-hooks-perf-fix.remote=origin
local file:.git/config branch.codex/cherry-pick-hooks-perf-fix.merge=refs/heads/codex/cherry-pick-hooks-perf-fix
local file:.git/config branch.codex/fix-590-concurrent-migrations.remote=origin
local file:.git/config branch.codex/fix-590-concurrent-migrations.merge=refs/heads/codex/fix-590-concurrent-migrations
local file:.git/config branch.codex/pathspec-benchmark-fastpath-fixes.remote=origin
local file:.git/config branch.codex/pathspec-benchmark-fastpath-fixes.merge=refs/heads/codex/pathspec-benchmark-fastpath-fixes

== Git AI Config ==
config_file_path: /Users/svarlamov/.git-ai/config.json
git_ai_dir: /Users/svarlamov/.git-ai
runtime_config:
{
"git_path": "/opt/homebrew/bin/git",
"exclude_prompts_in_repositories": [],
"include_prompts_in_repositories": [],
"allow_repositories": [],
"exclude_repositories": [],
"telemetry_oss_disabled": false,
"telemetry_enterprise_dsn": null,
"disable_version_checks": false,
"disable_auto_updates": true,
"update_channel": "latest",
"feature_flags": {
"rewrite_stash": true,
"inter_commit_move": false,
"auth_keyring": false
},
"api_base_url": "http://localhost:4000",
"prompt_storage": "default",
"default_prompt_storage": null,
"api_key": null,
"quiet": false
}

== Git AI Login ==
Credential backend: file
Status: logged out

== Git AI Environment ==
No GIT_AI_* environment variables are set. output\n\n## Validation\n- \n- \n- \n-
running 2 tests
test auth::identity::tests::test_extract_identity_handles_non_jwt_token ... ok
test auth::identity::tests::test_extract_identity_from_access_token ... ok

test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 1132 filtered out; finished in 0.00s\n-
running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 1134 filtered out; finished in 0.00s\n- manual sanity checks: git-ai debug report
Generated (UTC): 2026-02-28T02:23:20.600550+00:00

== Versions ==
Git AI version: 1.1.7 (debug)
Git AI binary: /Users/svarlamov/projects/git-ai-c/target/debug/git-ai
Git binary path: /opt/homebrew/bin/git
Git version: git version 2.52.0

== Platform ==
OS family: unix
OS: macos
Arch: aarch64
Kernel: Darwin 25.2.0 arm64
Hostname: Sashas-MacBook-Pro.local
Shell: /bin/zsh
Current dir: /Users/svarlamov/projects/git-ai-c

== Hardware ==
CPU: Apple M5
Physical cores: 10
Logical cores: 10
Memory: 32.00 GB (34359738368 bytes)

== Repository ==
In repository: true
Workdir: /Users/svarlamov/projects/git-ai-c
Git dir: /Users/svarlamov/projects/git-ai-c/.git
Git common dir: /Users/svarlamov/projects/git-ai-c/.git
Branch: codex/whoami-auth-debug
HEAD: 4ca35c2
core.hooksPath: /Users/svarlamov/projects/git-ai-c/.git/ai/hooks
Remotes:
origin = https://github.com/git-ai-project/git-ai

== Git Config ==
Command: /opt/homebrew/bin/git config --list --show-origin --show-scope
system file:/opt/homebrew/etc/gitconfig credential.helper=osxkeychain
global file:/Users/svarlamov/.gitconfig user.name=Sasha Varlamov
global file:/Users/svarlamov/.gitconfig user.email=sasha@sashavarlamov.com
global file:/Users/svarlamov/.gitconfig init.defaultbranch=main
global file:/Users/svarlamov/.gitconfig push.autosetupremote=true
global file:/Users/svarlamov/.gitconfig alias.s=status -sb
global file:/Users/svarlamov/.gitconfig alias.ss=status
global file:/Users/svarlamov/.gitconfig alias.st=status
global file:/Users/svarlamov/.gitconfig alias.l=log --oneline --decorate
global file:/Users/svarlamov/.gitconfig alias.lg=log --graph --decorate --oneline --all
global file:/Users/svarlamov/.gitconfig alias.ll=log --graph --decorate --pretty=format:'%C(auto)%h %C(cyan)%ad%Creset %C(yellow)%d%Creset %s %C(green)(%an)%Creset' --date=short --all
global file:/Users/svarlamov/.gitconfig alias.last=log -1 --stat
global file:/Users/svarlamov/.gitconfig alias.d=diff
global file:/Users/svarlamov/.gitconfig alias.dc=diff --cached
global file:/Users/svarlamov/.gitconfig alias.wdiff=diff --word-diff
global file:/Users/svarlamov/.gitconfig alias.who=blame -w -M -C
global file:/Users/svarlamov/.gitconfig alias.br=branch -vv
global file:/Users/svarlamov/.gitconfig alias.co=checkout
global file:/Users/svarlamov/.gitconfig alias.sw=switch
global file:/Users/svarlamov/.gitconfig alias.cob=checkout -b
global file:/Users/svarlamov/.gitconfig alias.swc=switch -c
global file:/Users/svarlamov/.gitconfig alias.a=add -A
global file:/Users/svarlamov/.gitconfig alias.ap=add -p
global file:/Users/svarlamov/.gitconfig alias.c=commit
global file:/Users/svarlamov/.gitconfig alias.cm=commit -m
global file:/Users/svarlamov/.gitconfig alias.ca=commit --amend
global file:/Users/svarlamov/.gitconfig alias.cane=commit --amend --no-edit
global file:/Users/svarlamov/.gitconfig alias.pu=push
global file:/Users/svarlamov/.gitconfig alias.puff=push --force-with-lease
global file:/Users/svarlamov/.gitconfig alias.up=pull --rebase --autostash
global file:/Users/svarlamov/.gitconfig alias.pf=push -u origin HEAD
global file:/Users/svarlamov/.gitconfig alias.sl=stash list
global file:/Users/svarlamov/.gitconfig alias.sp=stash push -u -m
global file:/Users/svarlamov/.gitconfig alias.sa=stash apply
global file:/Users/svarlamov/.gitconfig alias.ssq=stash push -u -m wip
global file:/Users/svarlamov/.gitconfig alias.undo=reset --soft HEAD~1
global file:/Users/svarlamov/.gitconfig alias.unstage=reset -q HEAD --
global file:/Users/svarlamov/.gitconfig alias.discard=checkout --
global file:/Users/svarlamov/.gitconfig alias.ri=rebase -i
global file:/Users/svarlamov/.gitconfig alias.fixup=commit --fixup
global file:/Users/svarlamov/.gitconfig alias.autosquash=rebase -i --autosquash
global file:/Users/svarlamov/.gitconfig alias.aliases=config --get-regexp ^alias.
global file:/Users/svarlamov/.gitconfig alias.ahead=!git log --oneline --decorate @{u}..HEAD
global file:/Users/svarlamov/.gitconfig alias.behind=!git log --oneline --decorate HEAD..@{u}
global file:/Users/svarlamov/.gitconfig alias.changes=!git log --oneline --decorate --no-merges @{u}..HEAD
local file:.git/config core.repositoryformatversion=0
local file:.git/config core.filemode=true
local file:.git/config core.bare=false
local file:.git/config core.logallrefupdates=true
local file:.git/config core.ignorecase=true
local file:.git/config core.precomposeunicode=true
local file:.git/config core.hookspath=/Users/svarlamov/projects/git-ai-c/.git/ai/hooks
local file:.git/config remote.origin.url=https://github.com/git-ai-project/git-ai
local file:.git/config remote.origin.fetch=+refs/heads/:refs/remotes/origin/
local file:.git/config branch.main.remote=origin
local file:.git/config branch.main.merge=refs/heads/main
local file:.git/config branch.feat/corehooks.remote=origin
local file:.git/config branch.feat/corehooks.merge=refs/heads/feat/corehooks
local file:.git/config branch.feat/corehooks.vscode-merge-base=origin/main
local file:.git/config branch.codex/corehooks-simplify-perf-round2.remote=origin
local file:.git/config branch.codex/corehooks-simplify-perf-round2.merge=refs/heads/codex/corehooks-simplify-perf-round2
local file:.git/config branch.codex/global-hooks-dual-mode.remote=origin
local file:.git/config branch.codex/global-hooks-dual-mode.merge=refs/heads/codex/global-hooks-dual-mode
local file:.git/config branch.codex/global-hooks-dual-mode.vscode-merge-base=origin/main
local file:.git/config branch.codex/cherry-pick-hooks-perf-fix.remote=origin
local file:.git/config branch.codex/cherry-pick-hooks-perf-fix.merge=refs/heads/codex/cherry-pick-hooks-perf-fix
local file:.git/config branch.codex/fix-590-concurrent-migrations.remote=origin
local file:.git/config branch.codex/fix-590-concurrent-migrations.merge=refs/heads/codex/fix-590-concurrent-migrations
local file:.git/config branch.codex/pathspec-benchmark-fastpath-fixes.remote=origin
local file:.git/config branch.codex/pathspec-benchmark-fastpath-fixes.merge=refs/heads/codex/pathspec-benchmark-fastpath-fixes
local file:.git/config branch.codex/whoami-auth-debug.remote=origin
local file:.git/config branch.codex/whoami-auth-debug.merge=refs/heads/codex/whoami-auth-debug

== Git AI Config ==
config_file_path: /Users/svarlamov/.git-ai/config.json
git_ai_dir: /Users/svarlamov/.git-ai
runtime_config:
{
"git_path": "/opt/homebrew/bin/git",
"exclude_prompts_in_repositories": [],
"include_prompts_in_repositories": [],
"allow_repositories": [],
"exclude_repositories": [],
"telemetry_oss_disabled": false,
"telemetry_enterprise_dsn": null,
"disable_version_checks": false,
"disable_auto_updates": true,
"update_channel": "latest",
"feature_flags": {
"rewrite_stash": true,
"inter_commit_move": false,
"auth_keyring": false
},
"api_base_url": "http://localhost:4000",
"prompt_storage": "default",
"default_prompt_storage": null,
"api_key": null,
"quiet": false
}

== Git AI Login ==
Credential backend: file
Status: logged out

== Git AI Environment ==
No GIT_AI_* environment variables are set., API Base URL: http://localhost:4000
Credential backend: file
Auth state: logged out


Open with Devin

@git-ai-cloud-dev
Copy link

git-ai-cloud-dev bot commented Feb 28, 2026

Stats powered by Git AI

🧠 you    ████████████████████  100%
🤖 ai     ░░░░░░░░░░░░░░░░░░░░  0%
More stats
  • 0.0 lines generated for every 1 accepted
  • 0 seconds waiting for AI

AI code tracked with git-ai

@git-ai-cloud
Copy link

git-ai-cloud bot commented Feb 28, 2026

No AI authorship found for these commits. Please install git-ai to start tracking AI generated code in your commits.

devin-ai-integration[bot]

This comment was marked as resolved.

Co-authored-by: devin-ai-integration[bot] <158243242+devin-ai-integration[bot]@users.noreply.github.com>
devin-ai-integration[bot]

This comment was marked as resolved.

Co-authored-by: devin-ai-integration[bot] <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Copy link
Contributor

@devin-ai-integration devin-ai-integration bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 new potential issue.

🐛 1 issue in files not directly in the diff

🐛 Fork app on Windows: backslash paths written to JSON settings instead of forward-slash paths (src/mdm/git_clients/fork_app.rs:185)

On Windows, the check_client and install_prefs methods for Fork app now use to_string_lossy() directly, which preserves backslashes and the \\?\ extended-length prefix. The removed to_windows_git_bash_style_path function called clean_path (stripping \\?\) and then .replace('\\', "/") to produce forward-slash paths that Fork expects in its JSON settings.

Root Cause and Impact

The old code path was:

fn fork_custom_git_instance_path(git_shim_path: &Path) -> String {
    to_windows_git_bash_style_path(git_shim_path)
}
// which did: clean_path(path).to_string_lossy().replace('\\', "/")

The new code at src/mdm/git_clients/fork_app.rs:185 and :215 just does:

params.git_shim_path.to_string_lossy().as_ref()  // check_client
params.git_shim_path.to_string_lossy().into_owned()  // install_prefs

This means on Windows, C:\Users\...\git.exe is written to Fork's JSON settings instead of C:/Users/.../git.exe. The old test test_fork_custom_git_instance_path_uses_forward_slashes explicitly verified forward slashes were required. Note that src/mdm/git_clients/sublime_merge.rs:134 correctly does .replace('\\', "/") with a comment "Use forward slashes for JSON compatibility on Windows", but the analogous fix was not applied to Fork.

Impact: On Windows, Fork app may fail to locate the custom git binary because the path uses backslashes instead of the expected forward slashes in its JSON settings. Additionally, paths canonicalized by std::fs::canonicalize may retain the \\?\ prefix.

View 10 additional findings in Devin Review.

Open in Devin Review

@CLAassistant
Copy link

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution.
1 out of 2 committers have signed the CLA.

✅ svarlamov
❌ devin-ai-integration[bot]
You have signed the CLA already but the status is still pending? Let us recheck it.

Copy link
Contributor

@devin-ai-integration devin-ai-integration bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 new potential issue.

🐛 1 issue in files not directly in the diff

🐛 Fork app on Windows: backslash paths written to JSON settings instead of forward-slash paths (src/mdm/git_clients/fork_app.rs:185)

On Windows, the check_client and install_prefs methods for Fork app now use to_string_lossy() directly, which preserves backslashes and the \\?\ extended-length prefix. The removed to_windows_git_bash_style_path function called clean_path (stripping \\?\) and then .replace('\\', "/") to produce forward-slash paths that Fork expects in its JSON settings.

Root Cause and Impact

The old code path was:

fn fork_custom_git_instance_path(git_shim_path: &Path) -> String {
    to_windows_git_bash_style_path(git_shim_path)
}
// which did: clean_path(path).to_string_lossy().replace('\\', "/")

The new code at src/mdm/git_clients/fork_app.rs:185 and :215 just does:

params.git_shim_path.to_string_lossy().as_ref()  // check_client
params.git_shim_path.to_string_lossy().into_owned()  // install_prefs

This means on Windows, C:\Users\...\git.exe is written to Fork's JSON settings instead of C:/Users/.../git.exe. The old test test_fork_custom_git_instance_path_uses_forward_slashes explicitly verified forward slashes were required. Note that src/mdm/git_clients/sublime_merge.rs:134 correctly does .replace('\\', "/") with a comment "Use forward slashes for JSON compatibility on Windows", but the analogous fix was not applied to Fork.

Impact: On Windows, Fork app may fail to locate the custom git binary because the path uses backslashes instead of the expected forward slashes in its JSON settings. Additionally, paths canonicalized by std::fs::canonicalize may retain the \\?\ prefix.

View 11 additional findings in Devin Review.

Open in Devin Review

Copy link
Contributor

@devin-ai-integration devin-ai-integration bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 new potential issue.

🐛 1 issue in files not directly in the diff

🐛 Fork app on Windows: backslash paths written to JSON settings instead of forward-slash paths (src/mdm/git_clients/fork_app.rs:185)

On Windows, the check_client and install_prefs methods for Fork app now use to_string_lossy() directly, which preserves backslashes and the \\?\ extended-length prefix. The removed to_windows_git_bash_style_path function called clean_path (stripping \\?\) and then .replace('\\', "/") to produce forward-slash paths that Fork expects in its JSON settings.

Root Cause and Impact

The old code path was:

fn fork_custom_git_instance_path(git_shim_path: &Path) -> String {
    to_windows_git_bash_style_path(git_shim_path)
}
// which did: clean_path(path).to_string_lossy().replace('\\', "/")

The new code at src/mdm/git_clients/fork_app.rs:185 and :215 just does:

params.git_shim_path.to_string_lossy().as_ref()  // check_client
params.git_shim_path.to_string_lossy().into_owned()  // install_prefs

This means on Windows, C:\Users\...\git.exe is written to Fork's JSON settings instead of C:/Users/.../git.exe. The old test test_fork_custom_git_instance_path_uses_forward_slashes explicitly verified forward slashes were required. Note that src/mdm/git_clients/sublime_merge.rs:134 correctly does .replace('\\', "/") with a comment "Use forward slashes for JSON compatibility on Windows", but the analogous fix was not applied to Fork.

Impact: On Windows, Fork app may fail to locate the custom git binary because the path uses backslashes instead of the expected forward slashes in its JSON settings. Additionally, paths canonicalized by std::fs::canonicalize may retain the \\?\ prefix.

View 12 additional findings in Devin Review.

Open in Devin Review

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants