)]}'
{
  "commit": "19a32eaa120562170595e42584f3fc4b40828b97",
  "tree": "eaa6cac6a052a02a97a94a62a2fc13adadd50a6e",
  "parents": [
    "2be768e4f4d28dc56c7e0b10df342c607ef04833"
  ],
  "author": {
    "name": "banksean",
    "email": "banksean@gmail.com",
    "time": "Fri Jul 18 18:29:31 2025 +0000"
  },
  "committer": {
    "name": "banksean",
    "email": "banksean@gmail.com",
    "time": "Fri Jul 18 12:04:31 2025 -0700"
  },
  "message": "claudetool/bashkit: add sketch-wip branch protection with process-level tracking\n\nAdd a best-effort check to reject git commands that would change the\ncontainer-side \u0027sketch-wip\u0027 git branch. The protection prevents:\n\n1. Branch renaming: git branch -m sketch-wip newname\n2. Branch switching: git checkout otherbranch, git switch otherbranch\n3. Force branch renaming: git branch -M sketch-wip newname\n\nThe check allows legitimate operations like:\n- File checkout: git checkout -- file.txt\n- Path operations: git checkout src/main.go\n- Branch creation: git switch -c newbranch\n- Standard git operations: git commit, git status, etc.\n\nKey features:\n- Process-level tracking: Shows warning only once per process\n- Informative error message explaining why it\u0027s blocked\n- Suggests using \u0027set-slug\u0027 tool for external branch naming\n- Tells user they can repeat the command if really needed\n\nImplementation:\n- Added process-aware check alongside existing static checks\n- Process-level tracking via mutex-protected boolean\n- Comprehensive test coverage including edge cases\n- Maintains backward compatibility with existing Check() function\n\nThis prevents agents from inadvertently breaking the outie\u0027s ability\nto detect and push changes to GitHub by changing the expected branch name.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s3bb00ecac8a4badek\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "23dc1b4afbb33bae15b67f2b1ef207d5933cd207",
      "old_mode": 33188,
      "old_path": "claudetool/bashkit/bashkit.go",
      "new_id": "5bdabf51502fd7db400b9caf7a74827f90dd5287",
      "new_mode": 33188,
      "new_path": "claudetool/bashkit/bashkit.go"
    },
    {
      "type": "modify",
      "old_id": "706790d168795f4af1d844d4e8328c3af8ae4df4",
      "old_mode": 33188,
      "old_path": "claudetool/bashkit/bashkit_test.go",
      "new_id": "ee405821ecd08c8a8242589ccfba33bbf1e75d0c",
      "new_mode": 33188,
      "new_path": "claudetool/bashkit/bashkit_test.go"
    }
  ]
}
