{
 "repo": {
  "name": "vikunja",
  "owner": "go-vikunja",
  "stars": 5998,
  "license": "AGPL-3.0",
  "full_name": "go-vikunja/vikunja",
  "fetched_at": "2026-11-08T10:58:53.338703+00:00",
  "primary_language": "Go"
 },
 "burns": [
  {
   "agent": "openai-codex",
   "number": 871,
   "reviewer_excerpt": "> This was 100% done by Codex, not sure how much we can keep. I just went through a bit. There are some interesting ideas,",
   "reviewer_excerpt_url": "https://github.com/go-vikunja/vikunja/pull/871#issuecomment-2943584233"
  }
 ],
 "total": 66,
 "agents": [
  {
   "agent": "openai-codex",
   "merged": 54,
   "flights": 64,
   "burn_rate": 0.033,
   "merge_rate": 0.885,
   "last_flight_at": "2025-07-30T14:09:46+00:00",
   "median_hours_to_merge": 0.7
  },
  {
   "agent": "github-copilot",
   "merged": 1,
   "flights": 2,
   "burn_rate": 0,
   "merge_rate": 0.5,
   "last_flight_at": "2025-07-25T13:07:30+00:00",
   "median_hours_to_merge": 19.6
  }
 ],
 "riders": [],
 "flights": [
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "feat: show user export status in settings",
   "number": 1200,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 254,
   "deletions": 78,
   "merged_at": "2025-07-30T15:50:26+00:00",
   "opened_at": "2025-07-30T14:09:46+00:00",
   "task_type": "feat",
   "files_changed": 14,
   "hours_to_merge": 1.68
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "feat: add display setting for dates",
   "number": 1192,
   "outcome": "merged_clean",
   "index_ok": false,
   "additions": 314,
   "deletions": 142,
   "merged_at": "2025-07-30T07:43:38+00:00",
   "opened_at": "2025-07-29T11:10:43+00:00",
   "task_type": "feat",
   "files_changed": 25,
   "hours_to_merge": 20.55
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "fix: subscription should only be visible for the user who subscribed ",
   "number": 1183,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 73,
   "deletions": 51,
   "merged_at": "2025-07-28T08:33:00+00:00",
   "opened_at": "2025-07-27T13:34:36+00:00",
   "task_type": "fix",
   "files_changed": 3,
   "hours_to_merge": 18.97
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "feat(test): add e2e tests for openid",
   "number": 1178,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 431,
   "deletions": 444,
   "merged_at": "2025-07-29T11:00:41+00:00",
   "opened_at": "2025-07-25T16:14:00+00:00",
   "task_type": "feat",
   "files_changed": 6,
   "hours_to_merge": 90.78
  },
  {
   "agent": "github-copilot",
   "state": "closed",
   "title": "fix: prevent runtime.TypeAssertionError in openid provider parsing",
   "number": 1177,
   "outcome": "abandoned",
   "index_ok": false,
   "additions": 10,
   "deletions": 4,
   "merged_at": null,
   "opened_at": "2025-07-25T13:07:30+00:00",
   "task_type": "fix",
   "files_changed": 2,
   "hours_to_merge": null
  },
  {
   "agent": "github-copilot",
   "state": "merged",
   "title": "fix: MySQL constraint violations returning HTTP 500 instead of 400 for task bucket duplicates",
   "number": 1154,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 364,
   "deletions": 149,
   "merged_at": "2025-07-22T08:59:12+00:00",
   "opened_at": "2025-07-21T13:26:23+00:00",
   "task_type": "fix",
   "files_changed": 6,
   "hours_to_merge": 19.55
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "feat(task): autosave description on route leave",
   "number": 1140,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 93,
   "deletions": 55,
   "merged_at": "2025-07-18T16:18:19+00:00",
   "opened_at": "2025-07-17T14:14:47+00:00",
   "task_type": "feat",
   "files_changed": 2,
   "hours_to_merge": 26.06
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "feat: add keyvalue.Remember function",
   "number": 1139,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 183,
   "deletions": 133,
   "merged_at": "2025-07-17T14:19:13+00:00",
   "opened_at": "2025-07-17T13:35:30+00:00",
   "task_type": "feat",
   "files_changed": 8,
   "hours_to_merge": 0.73
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "fix(labels): correctly fall back to variable colors when no label color is set",
   "number": 1124,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 55,
   "deletions": 37,
   "merged_at": "2025-07-15T21:15:09+00:00",
   "opened_at": "2025-07-15T11:16:26+00:00",
   "task_type": "fix",
   "files_changed": 5,
   "hours_to_merge": 9.98
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Fix background upload for unsupported formats",
   "number": 1123,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 69,
   "deletions": 0,
   "merged_at": "2025-07-15T11:21:48+00:00",
   "opened_at": "2025-07-15T10:14:06+00:00",
   "task_type": "fix",
   "files_changed": 2,
   "hours_to_merge": 1.13
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "fix: don't panic when using api token when not correctly put into context",
   "number": 1119,
   "outcome": "merged_clean",
   "index_ok": false,
   "additions": 53,
   "deletions": 5,
   "merged_at": "2025-07-15T21:26:28+00:00",
   "opened_at": "2025-07-14T21:52:40+00:00",
   "task_type": "fix",
   "files_changed": 3,
   "hours_to_merge": 23.56
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "fix(build): set correct frontend version in Docker builds",
   "number": 1114,
   "outcome": "merged_clean",
   "index_ok": false,
   "additions": 2,
   "deletions": 1,
   "merged_at": "2025-07-12T16:53:03+00:00",
   "opened_at": "2025-07-12T16:47:39+00:00",
   "task_type": "fix",
   "files_changed": 1,
   "hours_to_merge": 0.09
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "feat: introduce shared health check logic",
   "number": 1073,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 64,
   "deletions": 21,
   "merged_at": "2025-07-02T21:01:42+00:00",
   "opened_at": "2025-07-02T19:37:01+00:00",
   "task_type": "feat",
   "files_changed": 4,
   "hours_to_merge": 1.41
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Allow filtering tests from mage",
   "number": 1072,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 32,
   "deletions": 23,
   "merged_at": "2025-07-02T20:41:25+00:00",
   "opened_at": "2025-07-02T19:35:31+00:00",
   "task_type": "feat",
   "files_changed": 2,
   "hours_to_merge": 1.1
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "fix(tasks): do not return subtasks multiple times when they are related to multiple tasks",
   "number": 1071,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 296,
   "deletions": 196,
   "merged_at": "2025-07-02T21:16:05+00:00",
   "opened_at": "2025-07-02T16:50:14+00:00",
   "task_type": "fix",
   "files_changed": 5,
   "hours_to_merge": 4.43
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "fix(users): refresh initials avatar refresh after name change",
   "number": 1047,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 53,
   "deletions": 18,
   "merged_at": "2025-06-30T16:20:55+00:00",
   "opened_at": "2025-06-30T15:04:07+00:00",
   "task_type": "fix",
   "files_changed": 3,
   "hours_to_merge": 1.28
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "feat(user): add avatar cache flushing",
   "number": 1041,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 80,
   "deletions": 1,
   "merged_at": "2025-06-27T12:01:43+00:00",
   "opened_at": "2025-06-27T11:51:34+00:00",
   "task_type": "feat",
   "files_changed": 12,
   "hours_to_merge": 0.17
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "feat: add prefix key support to keyvalue store",
   "number": 1038,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 76,
   "deletions": 0,
   "merged_at": "2025-06-27T11:05:37+00:00",
   "opened_at": "2025-06-27T11:00:26+00:00",
   "task_type": "feat",
   "files_changed": 3,
   "hours_to_merge": 0.09
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "fix: guard invalid user lookups",
   "number": 1034,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 49,
   "deletions": 27,
   "merged_at": "2025-06-26T21:58:47+00:00",
   "opened_at": "2025-06-26T21:20:29+00:00",
   "task_type": "fix",
   "files_changed": 8,
   "hours_to_merge": 0.64
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Fix ambiguous description search",
   "number": 1032,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 19,
   "deletions": 1,
   "merged_at": "2025-06-26T20:05:04+00:00",
   "opened_at": "2025-06-26T19:51:59+00:00",
   "task_type": "fix",
   "files_changed": 2,
   "hours_to_merge": 0.22
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "feat: add logo change toggle setting",
   "number": 1031,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 44,
   "deletions": 21,
   "merged_at": "2025-06-26T15:59:35+00:00",
   "opened_at": "2025-06-26T15:11:32+00:00",
   "task_type": "feat",
   "files_changed": 8,
   "hours_to_merge": 0.8
  },
  {
   "agent": "openai-codex",
   "state": "open",
   "title": "feat(list view): add sorting options",
   "number": 1024,
   "outcome": "stale",
   "index_ok": false,
   "additions": 177,
   "deletions": 50,
   "merged_at": null,
   "opened_at": "2025-06-25T14:09:34+00:00",
   "task_type": "feat",
   "files_changed": 3,
   "hours_to_merge": null
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "fix: set correct date ranges",
   "number": 1021,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 43,
   "deletions": 4,
   "merged_at": "2025-06-25T11:26:39+00:00",
   "opened_at": "2025-06-25T10:36:42+00:00",
   "task_type": "fix",
   "files_changed": 2,
   "hours_to_merge": 0.83
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "chore(deps): upgrade to Tailwind 4",
   "number": 1019,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 28,
   "deletions": 7,
   "merged_at": "2025-06-25T08:29:39+00:00",
   "opened_at": "2025-06-25T08:26:37+00:00",
   "task_type": "chore",
   "files_changed": 7,
   "hours_to_merge": 0.05
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "fix(release): use openrc for alpine",
   "number": 1016,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 41,
   "deletions": 7,
   "merged_at": "2025-06-25T10:40:12+00:00",
   "opened_at": "2025-06-24T21:53:42+00:00",
   "task_type": "fix",
   "files_changed": 5,
   "hours_to_merge": 12.78
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "fix(migration): reset buckets before creating related tasks so that they are actually created",
   "number": 1015,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 83,
   "deletions": 67,
   "merged_at": "2025-06-25T12:03:45+00:00",
   "opened_at": "2025-06-24T21:29:15+00:00",
   "task_type": "fix",
   "files_changed": 1,
   "hours_to_merge": 14.58
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "fix: show 404 on task detail page when the task does not exist",
   "number": 1014,
   "outcome": "merged_clean",
   "index_ok": false,
   "additions": 13,
   "deletions": 0,
   "merged_at": "2025-06-24T21:32:23+00:00",
   "opened_at": "2025-06-24T21:26:48+00:00",
   "task_type": "fix",
   "files_changed": 2,
   "hours_to_merge": 0.09
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "fix(quick actions): quote label when it contains spaces",
   "number": 1013,
   "outcome": "merged_clean",
   "index_ok": false,
   "additions": 5,
   "deletions": 1,
   "merged_at": "2025-06-25T13:46:59+00:00",
   "opened_at": "2025-06-24T21:18:53+00:00",
   "task_type": "fix",
   "files_changed": 1,
   "hours_to_merge": 16.47
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "fix: ambiguous title column in task search",
   "number": 1012,
   "outcome": "merged_clean",
   "index_ok": false,
   "additions": 2,
   "deletions": 2,
   "merged_at": "2025-06-24T20:38:35+00:00",
   "opened_at": "2025-06-24T20:32:25+00:00",
   "task_type": "fix",
   "files_changed": 2,
   "hours_to_merge": 0.1
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Fix ambiguous done column in task sorting",
   "number": 1011,
   "outcome": "merged_clean",
   "index_ok": false,
   "additions": 5,
   "deletions": 4,
   "merged_at": "2025-06-24T20:37:25+00:00",
   "opened_at": "2025-06-24T20:32:04+00:00",
   "task_type": "fix",
   "files_changed": 1,
   "hours_to_merge": 0.09
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "fix(kanban): make bucket query fixed per-view",
   "number": 1007,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 119,
   "deletions": 38,
   "merged_at": "2025-06-25T11:38:25+00:00",
   "opened_at": "2025-06-24T10:59:08+00:00",
   "task_type": "fix",
   "files_changed": 7,
   "hours_to_merge": 24.65
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "fix(view): add unique index for task buckets",
   "number": 1005,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 68,
   "deletions": 17,
   "merged_at": "2025-06-24T10:45:18+00:00",
   "opened_at": "2025-06-24T09:52:21+00:00",
   "task_type": "fix",
   "files_changed": 3,
   "hours_to_merge": 0.88
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "chore: adjust comment about bucketless tasks",
   "number": 1004,
   "outcome": "merged_clean",
   "index_ok": false,
   "additions": 3,
   "deletions": 3,
   "merged_at": "2025-06-24T09:56:58+00:00",
   "opened_at": "2025-06-24T09:51:28+00:00",
   "task_type": "chore",
   "files_changed": 1,
   "hours_to_merge": 0.09
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "fix(task): add tasks table prefix for sort order",
   "number": 1003,
   "outcome": "merged_clean",
   "index_ok": false,
   "additions": 1,
   "deletions": 1,
   "merged_at": "2025-06-24T09:55:01+00:00",
   "opened_at": "2025-06-24T09:49:35+00:00",
   "task_type": "fix",
   "files_changed": 1,
   "hours_to_merge": 0.09
  },
  {
   "agent": "openai-codex",
   "state": "open",
   "title": "feat: rebuild the gantt chart",
   "number": 1001,
   "outcome": "stale",
   "index_ok": false,
   "additions": 1687,
   "deletions": 424,
   "merged_at": null,
   "opened_at": "2025-06-24T09:07:28+00:00",
   "task_type": "feat",
   "files_changed": 17,
   "hours_to_merge": null
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Fix subtasks missing in list view",
   "number": 1000,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 91,
   "deletions": 4,
   "merged_at": "2025-06-24T09:08:01+00:00",
   "opened_at": "2025-06-24T08:59:01+00:00",
   "task_type": "fix",
   "files_changed": 2,
   "hours_to_merge": 0.15
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Fix frontend version in release builds",
   "number": 999,
   "outcome": "merged_clean",
   "index_ok": false,
   "additions": 7,
   "deletions": 0,
   "merged_at": "2025-06-24T08:51:42+00:00",
   "opened_at": "2025-06-24T08:46:19+00:00",
   "task_type": "fix",
   "files_changed": 1,
   "hours_to_merge": 0.09
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Fix mage build asset check",
   "number": 992,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 20,
   "deletions": 0,
   "merged_at": "2025-06-22T19:18:02+00:00",
   "opened_at": "2025-06-22T19:12:34+00:00",
   "task_type": "fix",
   "files_changed": 1,
   "hours_to_merge": 0.09
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "feat: show frontend version separately if different",
   "number": 974,
   "outcome": "merged_clean",
   "index_ok": false,
   "additions": 11,
   "deletions": 2,
   "merged_at": "2025-06-17T13:40:20+00:00",
   "opened_at": "2025-06-17T13:34:31+00:00",
   "task_type": "feat",
   "files_changed": 2,
   "hours_to_merge": 0.1
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "feat: add email filter to user list command",
   "number": 973,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 24,
   "deletions": 12,
   "merged_at": "2025-06-17T12:38:04+00:00",
   "opened_at": "2025-06-17T12:30:01+00:00",
   "task_type": "feat",
   "files_changed": 1,
   "hours_to_merge": 0.13
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "feat: benchmark task search",
   "number": 963,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 180,
   "deletions": 55,
   "merged_at": "2025-06-16T19:41:14+00:00",
   "opened_at": "2025-06-16T16:47:56+00:00",
   "task_type": "feat",
   "files_changed": 3,
   "hours_to_merge": 2.89
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Improve table sorting behavior",
   "number": 950,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 53,
   "deletions": 41,
   "merged_at": "2025-06-16T13:55:29+00:00",
   "opened_at": "2025-06-16T13:43:13+00:00",
   "task_type": "feat",
   "files_changed": 1,
   "hours_to_merge": 0.2
  },
  {
   "agent": "openai-codex",
   "state": "open",
   "title": "test: check avatar loading for all providers",
   "number": 945,
   "outcome": "stale",
   "index_ok": false,
   "additions": 89,
   "deletions": 31,
   "merged_at": null,
   "opened_at": "2025-06-14T15:37:00+00:00",
   "task_type": "test",
   "files_changed": 2,
   "hours_to_merge": null
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Add feature test for link share avatar access",
   "number": 944,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 47,
   "deletions": 1,
   "merged_at": "2025-06-14T16:22:45+00:00",
   "opened_at": "2025-06-14T15:32:43+00:00",
   "task_type": "test",
   "files_changed": 1,
   "hours_to_merge": 0.83
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "feat: add project shortcut on task detail",
   "number": 940,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 31,
   "deletions": 24,
   "merged_at": "2025-06-16T12:31:02+00:00",
   "opened_at": "2025-06-13T16:44:02+00:00",
   "task_type": "feat",
   "files_changed": 3,
   "hours_to_merge": 67.78
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "fix: improve markdown paste detection",
   "number": 939,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 26,
   "deletions": 23,
   "merged_at": "2025-06-13T09:05:08+00:00",
   "opened_at": "2025-06-13T08:47:05+00:00",
   "task_type": "fix",
   "files_changed": 1,
   "hours_to_merge": 0.3
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Rename API test suites",
   "number": 938,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 44,
   "deletions": 44,
   "merged_at": "2025-06-13T08:23:17+00:00",
   "opened_at": "2025-06-13T07:47:53+00:00",
   "task_type": "refactor",
   "files_changed": 30,
   "hours_to_merge": 0.59
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "fix(migration): detect header lines in csv file when importing from TickTick",
   "number": 937,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 46,
   "deletions": 2,
   "merged_at": "2025-06-13T07:45:55+00:00",
   "opened_at": "2025-06-13T07:40:25+00:00",
   "task_type": "fix",
   "files_changed": 2,
   "hours_to_merge": 0.09
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "feat!(config): store sqlite file relative to rootpath",
   "number": 934,
   "outcome": "merged_clean",
   "index_ok": false,
   "additions": 5,
   "deletions": 3,
   "merged_at": "2025-06-13T07:16:25+00:00",
   "opened_at": "2025-06-13T07:02:33+00:00",
   "task_type": "feat",
   "files_changed": 2,
   "hours_to_merge": 0.23
  },
  {
   "agent": "openai-codex",
   "state": "merged",
   "title": "Fix login screen flash after authentication",
   "number": 933,
   "outcome": "merged_clean",
   "index_ok": false,
   "additions": 2,
   "deletions": 0,
   "merged_at": "2025-06-12T11:37:50+00:00",
   "opened_at": "2025-06-12T11:30:59+00:00",
   "task_type": "fix",
   "files_changed": 1,
   "hours_to_merge": 0.11
  }
 ],
 "indexed": 37,
 "monthly": [
  {
   "burns": 2,
   "month": "2025-06",
   "merged": 41,
   "flights": 51
  },
  {
   "burns": 0,
   "month": "2025-07",
   "merged": 14,
   "flights": 15
  }
 ],
 "top_authors": [
  {
   "name": null,
   "login": "kolaente",
   "flights": 64,
   "indexed": 36
  }
 ],
 "page": "https://agentriders.com/logs/go-vikunja/vikunja/"
}