{
 "repo": {
  "name": "pylabrobot",
  "owner": "PyLabRobot",
  "stars": 647,
  "license": "MIT",
  "full_name": "PyLabRobot/pylabrobot",
  "fetched_at": "2026-11-08T11:00:00.911681+00:00",
  "primary_language": "Python"
 },
 "burns": [],
 "total": 40,
 "agents": [
  {
   "agent": "openai-codex",
   "merged": 36,
   "flights": 40,
   "burn_rate": 0,
   "merge_rate": 0.923,
   "last_flight_at": "2025-07-30T16:13:37+00:00",
   "median_hours_to_merge": 0.2
  }
 ],
 "riders": [],
 "flights": [
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Rename incubators module to storage",
   "number": 634,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 27,
   "deletions": 27,
   "merged_at": "2025-07-30T16:26:24+00:00",
   "opened_at": "2025-07-30T16:13:37+00:00",
   "task_type": "refactor",
   "files_changed": 17,
   "hours_to_merge": 0.21
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Remove deprecated helpers",
   "number": 627,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 0,
   "deletions": 21,
   "merged_at": "2025-07-28T05:55:47+00:00",
   "opened_at": "2025-07-28T05:54:25+00:00",
   "task_type": "refactor",
   "files_changed": 1,
   "hours_to_merge": 0.02
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Refactor thermocycler lid status API",
   "number": 626,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 159,
   "deletions": 105,
   "merged_at": "2025-07-28T18:17:03+00:00",
   "opened_at": "2025-07-28T05:00:45+00:00",
   "task_type": "refactor",
   "files_changed": 8,
   "hours_to_merge": 13.27
  },
  {
   "agent": "openai-codex",
   "state": "open",
   "title": "Add coordinate check for STAR 96-head functions",
   "number": 623,
   "outcome": "stale",
   "index_ok": false,
   "additions": 54,
   "deletions": 24,
   "merged_at": null,
   "opened_at": "2025-07-25T19:26:38+00:00",
   "task_type": "feat",
   "files_changed": 1,
   "hours_to_merge": null
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Reset Cytomat error register before raising errors",
   "number": 622,
   "outcome": "merged_clean",
   "index_ok": false,
   "additions": 9,
   "deletions": 0,
   "merged_at": "2025-07-25T18:55:21+00:00",
   "opened_at": "2025-07-25T18:47:58+00:00",
   "task_type": "fix",
   "files_changed": 1,
   "hours_to_merge": 0.12
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Add is_in_subtree_of helper",
   "number": 621,
   "outcome": "merged_clean",
   "index_ok": false,
   "additions": 10,
   "deletions": 0,
   "merged_at": "2025-07-25T03:54:44+00:00",
   "opened_at": "2025-07-25T01:22:24+00:00",
   "task_type": "feat",
   "files_changed": 1,
   "hours_to_merge": 2.54
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Fix resource repr quoting",
   "number": 620,
   "outcome": "merged_clean",
   "index_ok": false,
   "additions": 6,
   "deletions": 6,
   "merged_at": "2025-07-24T22:33:28+00:00",
   "opened_at": "2025-07-24T21:51:18+00:00",
   "task_type": "fix",
   "files_changed": 5,
   "hours_to_merge": 0.7
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Handle 180° rotated plates with 96‑head",
   "number": 618,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 73,
   "deletions": 29,
   "merged_at": "2025-07-24T02:47:02+00:00",
   "opened_at": "2025-07-24T01:52:46+00:00",
   "task_type": "feat",
   "files_changed": 2,
   "hours_to_merge": 0.9
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Support negative x direction for 96 head",
   "number": 616,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 23,
   "deletions": 20,
   "merged_at": "2025-07-25T18:39:57+00:00",
   "opened_at": "2025-07-23T21:50:05+00:00",
   "task_type": "feat",
   "files_changed": 1,
   "hours_to_merge": 44.83
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Add liquid_height parameter to aspirate96 and dispense96",
   "number": 615,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 14,
   "deletions": 10,
   "merged_at": "2025-07-22T23:58:50+00:00",
   "opened_at": "2025-07-22T23:56:36+00:00",
   "task_type": "feat",
   "files_changed": 2,
   "hours_to_merge": 0.04
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Add __len__ to Carrier",
   "number": 614,
   "outcome": "merged_clean",
   "index_ok": false,
   "additions": 7,
   "deletions": 0,
   "merged_at": "2025-07-22T23:35:14+00:00",
   "opened_at": "2025-07-22T23:33:56+00:00",
   "task_type": "feat",
   "files_changed": 2,
   "hours_to_merge": 0.02
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Add ImagingResult to imager capture",
   "number": 613,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 688,
   "deletions": 666,
   "merged_at": "2025-07-22T02:02:07+00:00",
   "opened_at": "2025-07-22T01:15:21+00:00",
   "task_type": "feat",
   "files_changed": 7,
   "hours_to_merge": 0.78
  },
  {
   "agent": "openai-codex",
   "state": "closed",
   "title": "Remove pytest dependency",
   "number": 611,
   "outcome": "abandoned",
   "index_ok": false,
   "additions": 11,
   "deletions": 34,
   "merged_at": null,
   "opened_at": "2025-07-21T23:20:31+00:00",
   "task_type": "test",
   "files_changed": 9,
   "hours_to_merge": null
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Improve ImportError handling",
   "number": 606,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 81,
   "deletions": 29,
   "merged_at": "2025-07-19T00:10:47+00:00",
   "opened_at": "2025-07-19T00:09:17+00:00",
   "task_type": "fix",
   "files_changed": 13,
   "hours_to_merge": 0.03
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Fix abstract class detection",
   "number": 598,
   "outcome": "merged_clean",
   "index_ok": false,
   "additions": 6,
   "deletions": 5,
   "merged_at": "2025-07-16T02:20:37+00:00",
   "opened_at": "2025-07-16T00:55:15+00:00",
   "task_type": "fix",
   "files_changed": 1,
   "hours_to_merge": 1.42
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Remove site_pedestal_z from PlateAdapter",
   "number": 582,
   "outcome": "merged_clean",
   "index_ok": false,
   "additions": 0,
   "deletions": 7,
   "merged_at": "2025-06-18T20:20:13+00:00",
   "opened_at": "2025-06-18T20:15:46+00:00",
   "task_type": "refactor",
   "files_changed": 5,
   "hours_to_merge": 0.07
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Add rtscts param to SerialValidator",
   "number": 578,
   "outcome": "merged_clean",
   "index_ok": false,
   "additions": 2,
   "deletions": 0,
   "merged_at": "2025-06-14T15:38:14+00:00",
   "opened_at": "2025-06-14T15:36:30+00:00",
   "task_type": "feat",
   "files_changed": 1,
   "hours_to_merge": 0.03
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Add docs for contributing new resources",
   "number": 576,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 61,
   "deletions": 0,
   "merged_at": "2025-06-12T19:52:27+00:00",
   "opened_at": "2025-06-12T19:52:09+00:00",
   "task_type": "docs",
   "files_changed": 2,
   "hours_to_merge": 0.01
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Add Cytomat incubator tutorial",
   "number": 575,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 178,
   "deletions": 176,
   "merged_at": "2025-06-12T19:56:59+00:00",
   "opened_at": "2025-06-12T19:46:38+00:00",
   "task_type": "docs",
   "files_changed": 3,
   "hours_to_merge": 0.17
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Add tip inventory probe function",
   "number": 573,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 74,
   "deletions": 21,
   "merged_at": "2025-06-10T23:54:28+00:00",
   "opened_at": "2025-06-10T23:06:07+00:00",
   "task_type": "feat",
   "files_changed": 1,
   "hours_to_merge": 0.81
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Ensure temperature control stops on deactivate",
   "number": 572,
   "outcome": "merged_clean",
   "index_ok": false,
   "additions": 10,
   "deletions": 1,
   "merged_at": "2025-06-10T20:01:09+00:00",
   "opened_at": "2025-06-10T19:51:53+00:00",
   "task_type": "fix",
   "files_changed": 2,
   "hours_to_merge": 0.15
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Modify tip presence probe return type",
   "number": 571,
   "outcome": "merged_clean",
   "index_ok": false,
   "additions": 3,
   "deletions": 3,
   "merged_at": "2025-06-10T19:04:26+00:00",
   "opened_at": "2025-06-10T19:03:06+00:00",
   "task_type": "refactor",
   "files_changed": 1,
   "hours_to_merge": 0.02
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Add PlateAdapter documentation",
   "number": 569,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 117,
   "deletions": 4,
   "merged_at": "2025-06-13T17:55:11+00:00",
   "opened_at": "2025-06-10T05:38:07+00:00",
   "task_type": "docs",
   "files_changed": 2,
   "hours_to_merge": 84.28
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Add ResourceHolder tutorial",
   "number": 568,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 167,
   "deletions": 12,
   "merged_at": "2025-06-13T17:55:25+00:00",
   "opened_at": "2025-06-10T05:37:47+00:00",
   "task_type": "docs",
   "files_changed": 2,
   "hours_to_merge": 84.29
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Add debug logging to LiquidHandler methods",
   "number": 561,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 191,
   "deletions": 0,
   "merged_at": "2025-06-05T20:24:38+00:00",
   "opened_at": "2025-06-05T19:50:16+00:00",
   "task_type": "feat",
   "files_changed": 1,
   "hours_to_merge": 0.57
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Upgrade websockets dependency",
   "number": 560,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 11,
   "deletions": 11,
   "merged_at": "2025-06-05T19:55:09+00:00",
   "opened_at": "2025-06-05T19:49:17+00:00",
   "task_type": "build",
   "files_changed": 5,
   "hours_to_merge": 0.1
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Add ResourceStack documentation",
   "number": 559,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 409,
   "deletions": 128,
   "merged_at": "2025-06-09T22:58:27+00:00",
   "opened_at": "2025-06-05T19:05:21+00:00",
   "task_type": "docs",
   "files_changed": 4,
   "hours_to_merge": 99.89
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Remove deprecated resource definitions",
   "number": 551,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 64,
   "deletions": 298,
   "merged_at": "2025-06-05T03:36:29+00:00",
   "opened_at": "2025-06-05T02:31:38+00:00",
   "task_type": "refactor",
   "files_changed": 5,
   "hours_to_merge": 1.08
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Implement flow rate for Tecan EVO backend",
   "number": 549,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 2052,
   "deletions": 493,
   "merged_at": "2025-06-20T22:40:08+00:00",
   "opened_at": "2025-06-05T02:20:09+00:00",
   "task_type": "feat",
   "files_changed": 46,
   "hours_to_merge": 380.33
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Add visualizer contributor docs",
   "number": 545,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 76,
   "deletions": 0,
   "merged_at": "2025-06-01T16:26:01+00:00",
   "opened_at": "2025-05-31T18:53:22+00:00",
   "task_type": "docs",
   "files_changed": 2,
   "hours_to_merge": 21.54
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Fix documentation typos",
   "number": 541,
   "outcome": "merged_clean",
   "index_ok": false,
   "additions": 6,
   "deletions": 6,
   "merged_at": "2025-05-30T02:55:33+00:00",
   "opened_at": "2025-05-30T02:55:07+00:00",
   "task_type": "fix",
   "files_changed": 5,
   "hours_to_merge": 0.01
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Add passive cooling option in TemperatureController",
   "number": 539,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 100,
   "deletions": 1,
   "merged_at": "2025-05-30T01:09:18+00:00",
   "opened_at": "2025-05-30T01:02:30+00:00",
   "task_type": "feat",
   "files_changed": 2,
   "hours_to_merge": 0.11
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Add cooling capability flag to temperature controller backends",
   "number": 538,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 34,
   "deletions": 11,
   "merged_at": "2025-05-30T00:50:13+00:00",
   "opened_at": "2025-05-30T00:46:45+00:00",
   "task_type": "feat",
   "files_changed": 7,
   "hours_to_merge": 0.06
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Fix VantageDeck visualization",
   "number": 537,
   "outcome": "merged_clean",
   "index_ok": false,
   "additions": 88,
   "deletions": 18,
   "merged_at": "2025-06-09T03:38:29+00:00",
   "opened_at": "2025-05-30T00:35:06+00:00",
   "task_type": "fix",
   "files_changed": 2,
   "hours_to_merge": 243.06
  },
  {
   "agent": "openai-codex",
   "state": "closed",
   "title": "Add modular error handling with callbacks",
   "number": 536,
   "outcome": "abandoned",
   "index_ok": false,
   "additions": 258,
   "deletions": 35,
   "merged_at": null,
   "opened_at": "2025-05-29T21:27:13+00:00",
   "task_type": "feat",
   "files_changed": 3,
   "hours_to_merge": null
  },
  {
   "agent": "openai-codex",
   "state": "closed",
   "title": "Restore _hhc methods on STARBackend",
   "number": 531,
   "outcome": "abandoned",
   "index_ok": false,
   "additions": 97,
   "deletions": 0,
   "merged_at": null,
   "opened_at": "2025-05-28T22:24:14+00:00",
   "task_type": "feat",
   "files_changed": 1,
   "hours_to_merge": null
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Rename devices docs page to machines",
   "number": 530,
   "outcome": "merged_clean",
   "index_ok": false,
   "additions": 6,
   "deletions": 12,
   "merged_at": "2025-05-28T22:01:40+00:00",
   "opened_at": "2025-05-28T21:57:48+00:00",
   "task_type": "docs",
   "files_changed": 3,
   "hours_to_merge": 0.06
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Make Serial asynchronous",
   "number": 529,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 54,
   "deletions": 11,
   "merged_at": "2025-05-28T22:11:11+00:00",
   "opened_at": "2025-05-28T21:25:47+00:00",
   "task_type": "feat",
   "files_changed": 1,
   "hours_to_merge": 0.76
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Fix state loading for resources",
   "number": 528,
   "outcome": "merged_clean",
   "index_ok": false,
   "additions": 7,
   "deletions": 3,
   "merged_at": "2025-05-28T21:07:55+00:00",
   "opened_at": "2025-05-28T21:05:44+00:00",
   "task_type": "fix",
   "files_changed": 1,
   "hours_to_merge": 0.04
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Fix special float deserialization",
   "number": 527,
   "outcome": "merged_clean",
   "index_ok": false,
   "additions": 18,
   "deletions": 1,
   "merged_at": "2025-05-28T20:54:18+00:00",
   "opened_at": "2025-05-28T20:51:49+00:00",
   "task_type": "fix",
   "files_changed": 2,
   "hours_to_merge": 0.04
  }
 ],
 "indexed": 22,
 "monthly": [
  {
   "burns": 0,
   "month": "2025-05",
   "merged": 9,
   "flights": 11
  },
  {
   "burns": 0,
   "month": "2025-06",
   "merged": 14,
   "flights": 14
  },
  {
   "burns": 0,
   "month": "2025-07",
   "merged": 13,
   "flights": 15
  }
 ],
 "top_authors": [
  {
   "name": "Rick Wierenga",
   "login": "rickwierenga",
   "flights": 40,
   "indexed": 22
  }
 ],
 "page": "https://agentriders.com/logs/PyLabRobot/pylabrobot/"
}