)]}'
{
  "commit": "b7c5875548da5057eac0405bf4e0ae8bbc43667c",
  "tree": "a0b9eb0f68de826d7b51a5e8f5eaa7976fb48de3",
  "parents": [
    "5228b5850d8453c225e5611918fcd00b747c65cc"
  ],
  "author": {
    "name": "Philip Zeyliger",
    "email": "philip@bold.dev",
    "time": "Thu May 01 10:10:17 2025 -0700"
  },
  "committer": {
    "name": "Philip Zeyliger",
    "email": "philip@bold.dev",
    "time": "Thu May 01 12:13:31 2025 -0700"
  },
  "message": "agent plumbing: convert outbox to subscribers and an iterator\n\nWaitForMessage() could only work for one thread, because it was using a\nsingular channel for outboxes. This was fine when we only had one user,\nbut WaitForMessageCount() was kinda similar, and had its own thing, and\nI want to rework how polling works and need another user.\n\nAnyway, this one is hand-coded, because Sketch really struggled\nwith getting the iterator convincingly safe. In a follow-up commit,\nI\u0027ll try to get Sketch to write some tests.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "081f7caf5c7e43487c1029c63b337ae8e8deb587",
      "old_mode": 33188,
      "old_path": "cmd/sketch/main.go",
      "new_id": "cc07d10f83962bd5826e6b5eef9f6ddab5996414",
      "new_mode": 33188,
      "new_path": "cmd/sketch/main.go"
    },
    {
      "type": "modify",
      "old_id": "f5b12f72406ff8b60a2930a2006dd25bc78a39f2",
      "old_mode": 33188,
      "old_path": "loop/agent.go",
      "new_id": "adbdf51d27170a82b13b42118b456133e66f08bf",
      "new_mode": 33188,
      "new_path": "loop/agent.go"
    },
    {
      "type": "modify",
      "old_id": "399943b66bccd139062d32f793dcdaea12d77ee3",
      "old_mode": 33188,
      "old_path": "loop/agent_git_test.go",
      "new_id": "053b8afdda52604e911a80e9656367a749da5ec3",
      "new_mode": 33188,
      "new_path": "loop/agent_git_test.go"
    },
    {
      "type": "modify",
      "old_id": "c62fd21554b9e029e6e2d0f0428b07c74835b69d",
      "old_mode": 33188,
      "old_path": "loop/agent_test.go",
      "new_id": "9663e268d95c67a18ec38ccce131ca718f4aa6a8",
      "new_mode": 33188,
      "new_path": "loop/agent_test.go"
    },
    {
      "type": "modify",
      "old_id": "f61ed2887721750452c81893d7823abbff0c4c64",
      "old_mode": 33188,
      "old_path": "loop/server/loophttp.go",
      "new_id": "4a415c88635e2c3f447d2274073ed4b8c3b954a5",
      "new_mode": 33188,
      "new_path": "loop/server/loophttp.go"
    },
    {
      "type": "modify",
      "old_id": "932f07f2c4464d02876c510e329ceb7554a54cc8",
      "old_mode": 33188,
      "old_path": "termui/termui.go",
      "new_id": "5a3eca3f40ed7a389d89d6b838f23efad83eb4b3",
      "new_mode": 33188,
      "new_path": "termui/termui.go"
    }
  ]
}
