{
 "flight": {
  "id": 922889,
  "agent": "devin",
  "state": "closed",
  "title": "Replace anyhow::Result with typed BlobWriterError in BlobWriter error path",
  "number": 11835,
  "source": "aidev",
  "commits": 9,
  "debrief": "Devin was asked to replace anyhow::Result with a typed thiserror BlobWriterError on the BlobWriter error path in neondatabase/neon, a refactor across 11 files with 564 additions and 331 deletions over nine commits. Two reviews requested two changes, covering error conversion and the Cancelled message. The PR closed unmerged after human review, a burn.",
  "outcome": "burn",
  "signals": [
   "aidev:Devin"
  ],
  "index_ok": true,
  "additions": 564,
  "closed_at": "2025-05-07T15:39:16+00:00",
  "deletions": 331,
  "merged_at": null,
  "opened_at": "2025-05-06T09:57:22+00:00",
  "task_type": "refactor",
  "body_chars": 987,
  "confidence": "dataset",
  "updated_at": "2026-11-04T03:02:50.632458+00:00",
  "enriched_at": null,
  "body_excerpt": "# Replace anyhow::Result with typed BlobWriterError in BlobWriter error path\n\nThis PR replaces `anyhow::Result` on the BlobWriter error path with a typed `thiserror` error (`BlobWriterError`) that has two variants:\n- `Cancelled` - for when the layer flush task is cancelled\n- `Other(anyhow::Error)` -",
  "review_count": 2,
  "files_changed": 11,
  "hours_to_merge": null,
  "metrics_source": "aidev_commit_sum",
  "change_requests": 2,
  "og_generated_at": "2026-11-04T03:02:50.632458+00:00",
  "reviewer_excerpt": "Use `map_err(anyhow::Error::new)` instead of `map_err(|e| anyhow::anyhow!(e))`. Don't use `error(\"flush task cancelled\")` for the higher level `Cancelled` variants. Just `error(\"cancelled\")` is good. Maybe we don't need",
  "review_comment_count": 9,
  "reviewer_excerpt_url": "https://github.com/neondatabase/neon/pull/11835#pullrequestreview-2819325918"
 },
 "repo": {
  "name": "neon",
  "owner": "neondatabase",
  "stars": 23309,
  "license": "Apache-2.0",
  "full_name": "neondatabase/neon",
  "primary_language": "Rust"
 },
 "author": {
  "login": "devin-ai-integration[bot]",
  "name": null,
  "github_profile": "https://github.com/devin-ai-integration[bot]",
  "page": null
 },
 "claim": null,
 "events": [
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "Devin AI"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "Devin AI"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "Devin AI"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "Devin AI"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "Devin AI"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "Devin AI"
  },
  {
   "at": null,
   "url": null,
   "kind": "reviewed",
   "actor_login": null
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "Devin AI"
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "Devin AI"
  },
  {
   "at": null,
   "url": null,
   "kind": "reviewed",
   "actor_login": null
  },
  {
   "at": null,
   "url": null,
   "kind": "committed",
   "actor_login": "Devin AI"
  },
  {
   "at": "2025-05-06T09:57:53+00:00",
   "url": null,
   "kind": "labeled",
   "actor_login": "github-actions[bot]"
  },
  {
   "at": "2025-05-06T19:09:19+00:00",
   "url": "https://github.com/neondatabase/neon/pull/11835#pullrequestreview-2819325918",
   "kind": "changes_requested",
   "actor_login": "problame"
  },
  {
   "at": "2025-05-07T08:48:32+00:00",
   "url": "https://github.com/neondatabase/neon/pull/11835#pullrequestreview-2820913442",
   "kind": "changes_requested",
   "actor_login": "problame"
  },
  {
   "at": "2025-05-07T15:39:16+00:00",
   "url": null,
   "kind": "closed",
   "actor_login": "problame"
  }
 ],
 "related": [
  {
   "agent": "devin",
   "state": "merged",
   "title": "storcon: skip offline nodes in get_top_tenant_shards",
   "number": 12057,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 4,
   "deletions": 2,
   "merged_at": "2025-05-29T11:17:51+00:00",
   "opened_at": "2025-05-29T10:04:12+00:00",
   "task_type": "fix",
   "files_changed": 1,
   "hours_to_merge": 1.23
  },
  {
   "agent": "devin",
   "state": "closed",
   "title": "Make `set_len` a tokio-epoll-uring operation",
   "number": 11865,
   "outcome": "burn",
   "index_ok": true,
   "additions": 50,
   "deletions": 33,
   "merged_at": null,
   "opened_at": "2025-05-08T12:24:26+00:00",
   "task_type": "feat",
   "files_changed": 2,
   "hours_to_merge": null
  },
  {
   "agent": "devin",
   "state": "merged",
   "title": "[pageserver/virtual_file] impr: Improve OpenOptions API ergonomics",
   "number": 11789,
   "outcome": "merged_clean",
   "index_ok": true,
   "additions": 33,
   "deletions": 46,
   "merged_at": "2025-05-05T13:13:19+00:00",
   "opened_at": "2025-04-30T15:49:28+00:00",
   "task_type": "refactor",
   "files_changed": 2,
   "hours_to_merge": 117.4
  }
 ],
 "pr_url": "https://github.com/neondatabase/neon/pull/11835",
 "page": "https://agentriders.com/logs/neondatabase/neon/11835/"
}